126 lines
4.2 KiB
Plaintext
126 lines
4.2 KiB
Plaintext
|
-- 图鉴系统
|
||
|
local BookProxy = {}
|
||
|
|
||
|
--> Services
|
||
|
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||
|
local ServerStorage = game:GetService("ServerStorage")
|
||
|
|
||
|
--> Variables
|
||
|
local Utils = require(ReplicatedStorage.Tools.Utils)
|
||
|
local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy)
|
||
|
|
||
|
--> Json
|
||
|
local JsonItem = require(ReplicatedStorage.Json.ItemProp)
|
||
|
local JsonGem = require(ReplicatedStorage.Json.Gem)
|
||
|
|
||
|
--> Events
|
||
|
local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip
|
||
|
local RE_UpgradeAttributes = ReplicatedStorage.Events.RE_UpgradeAttributes
|
||
|
|
||
|
--> Constants
|
||
|
local STORE_NAME = "Book"
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
-- 获取玩家信息文件夹
|
||
|
local function GetPlayerBookFolder(Player: Player)
|
||
|
local pData = Utils:GetPlayerDataFolder(Player)
|
||
|
if not pData then return end
|
||
|
local BookFolder = pData:FindFirstChild("Book")
|
||
|
return BookFolder
|
||
|
end
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
-- 初始化玩家
|
||
|
function BookProxy:InitPlayer(Player: Player)
|
||
|
local pData = Utils:GetPlayerDataFolder(Player)
|
||
|
if not pData then return end
|
||
|
local BookFolder = Utils:CreateFolder("Book", pData)
|
||
|
|
||
|
-- 新玩家数据初始化
|
||
|
if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then
|
||
|
ArchiveProxy.pData[Player.UserId][STORE_NAME] = {}
|
||
|
ArchiveProxy.pData[Player.UserId][STORE_NAME].Books = {}
|
||
|
end
|
||
|
|
||
|
-- 创建玩家信息实例
|
||
|
for BookId, BookData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Books do
|
||
|
Utils:CreateDataInstance(Player, BookId, BookData, BookFolder)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
-- 添加图鉴记录
|
||
|
function BookProxy:AddBook(Player: Player, BookId: number, UniqueEquipmentId: number)
|
||
|
local pData = Utils:GetPlayerDataFolder(Player)
|
||
|
if not pData then return end
|
||
|
|
||
|
local BookFolder = GetPlayerBookFolder(Player)
|
||
|
if not BookFolder then return end
|
||
|
|
||
|
local EquipmentProxy = require(ServerStorage.Proxy.EquipmentProxy)
|
||
|
local EquipmentData = EquipmentProxy:GetEquipmentData(Player, UniqueEquipmentId)
|
||
|
if not EquipmentData then return end
|
||
|
|
||
|
local orgBookData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId]
|
||
|
-- 检查是否已经存在
|
||
|
if orgBookData then
|
||
|
-- 图鉴没原先品质高就返回
|
||
|
if orgBookData.quality > EquipmentData.quality then return end
|
||
|
else
|
||
|
-- 原来没有时解锁图鉴
|
||
|
BookProxy:UnlockBook(Player, BookId)
|
||
|
end
|
||
|
|
||
|
-- 添加图鉴记录
|
||
|
ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] = {
|
||
|
timestamp = tick(),
|
||
|
quality = EquipmentData.quality,
|
||
|
}
|
||
|
local bookInstance = BookFolder:FindFirstChild(BookId)
|
||
|
bookInstance:SetAttribute("quality", ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].quality)
|
||
|
bookInstance:SetAttribute("timestamp", ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId].timestamp)
|
||
|
end
|
||
|
|
||
|
-- 解锁图鉴
|
||
|
function BookProxy:UnlockBook(Player: Player, BookId: number)
|
||
|
local pData = Utils:GetPlayerDataFolder(Player)
|
||
|
if not pData then return end
|
||
|
|
||
|
local BookFolder = GetPlayerBookFolder(Player)
|
||
|
if not BookFolder then return end
|
||
|
|
||
|
-- 添加图鉴记录
|
||
|
ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] = {
|
||
|
timestamp = 0,
|
||
|
quality = 0,
|
||
|
}
|
||
|
Utils:CreateDataInstance(Player, BookId, ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId], BookFolder)
|
||
|
end
|
||
|
|
||
|
-- 检查是否解锁对应图鉴
|
||
|
function BookProxy:IsBookUnlocked(Player: Player, BookId: number)
|
||
|
return ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId] ~= nil
|
||
|
end
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
-- TODO: 获取玩家属性(之后要是图鉴加属性就在这)
|
||
|
function BookProxy:GetPlayerAttributes(Player: Player)
|
||
|
local attributesList = {}
|
||
|
return attributesList
|
||
|
end
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
function BookProxy:OnPlayerRemoving(Player: Player)
|
||
|
|
||
|
end
|
||
|
|
||
|
ReplicatedStorage.Remotes.PlayerRemoving.Event:Connect(function(Player: Player)
|
||
|
BookProxy:OnPlayerRemoving(Player)
|
||
|
end)
|
||
|
|
||
|
return BookProxy
|