-- 图鉴系统 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) local JsonParam = require(ReplicatedStorage.Json.Param) --> 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) -- 新玩家数据初始化 local isNew = false if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then ArchiveProxy.pData[Player.UserId][STORE_NAME] = {} ArchiveProxy.pData[Player.UserId][STORE_NAME].Books = {} isNew = true end -- 创建玩家信息实例 for BookId, BookData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Books do Utils:CreateDataInstance(Player, BookId, BookData, BookFolder) end if isNew then local ItemProxy = require(ServerStorage.Proxy.ItemProxy) local newData = Utils:GetIdDataFromJson(JsonParam, 6) for i = 1, #newData.intArray, 2 do ItemProxy:AddItem(Player, newData.intArray[i], newData.intArray[i + 1]) end 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 BookId = tostring(BookId) 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 BookId = tostring(BookId) 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[tostring(BookId)] 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