2025-07-15 01:12:05 +08:00
|
|
|
-- 图鉴系统
|
|
|
|
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)
|
2025-08-05 15:19:19 +08:00
|
|
|
local JsonParam = require(ReplicatedStorage.Json.Param)
|
2025-07-15 01:12:05 +08:00
|
|
|
|
|
|
|
--> 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)
|
|
|
|
|
|
|
|
-- 新玩家数据初始化
|
2025-08-05 15:19:19 +08:00
|
|
|
local isNew = false
|
2025-07-15 01:12:05 +08:00
|
|
|
if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then
|
|
|
|
ArchiveProxy.pData[Player.UserId][STORE_NAME] = {}
|
|
|
|
ArchiveProxy.pData[Player.UserId][STORE_NAME].Books = {}
|
2025-08-05 15:19:19 +08:00
|
|
|
|
|
|
|
isNew = true
|
2025-07-15 01:12:05 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
-- 创建玩家信息实例
|
|
|
|
for BookId, BookData in ArchiveProxy.pData[Player.UserId][STORE_NAME].Books do
|
|
|
|
Utils:CreateDataInstance(Player, BookId, BookData, BookFolder)
|
|
|
|
end
|
2025-08-05 15:19:19 +08:00
|
|
|
|
|
|
|
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
|
2025-07-15 01:12:05 +08:00
|
|
|
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
|
|
|
|
|
2025-07-30 00:37:09 +08:00
|
|
|
|
|
|
|
-- 变成字符串,因为在次读取后,是字典
|
|
|
|
local BookId = tostring(BookId)
|
2025-07-15 01:12:05 +08:00
|
|
|
local orgBookData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[BookId]
|
2025-07-30 00:37:09 +08:00
|
|
|
|
2025-07-15 01:12:05 +08:00
|
|
|
-- 检查是否已经存在
|
|
|
|
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)
|
2025-07-30 00:37:09 +08:00
|
|
|
local BookId = tostring(BookId)
|
2025-07-15 01:12:05 +08:00
|
|
|
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)
|
2025-07-30 00:37:09 +08:00
|
|
|
return ArchiveProxy.pData[Player.UserId][STORE_NAME].Books[tostring(BookId)]
|
2025-07-15 01:12:05 +08:00
|
|
|
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
|