2025-07-02 00:21:32 +08:00
|
|
|
-- 装备代理
|
|
|
|
local EquipmentProxy = {}
|
|
|
|
|
|
|
|
--> Services
|
|
|
|
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
|
|
|
|
|
|
--> Variables
|
|
|
|
local Utils = require(ReplicatedStorage.Tools.Utils)
|
|
|
|
local EquipmentJsonData = require(ReplicatedStorage.Json.Equipment)
|
|
|
|
local ArchiveProxy = require(ReplicatedStorage.Modules.ArchiveProxy)
|
2025-07-02 00:56:31 +08:00
|
|
|
local PlayerInfoProxy = require(ReplicatedStorage.Modules.PlayerInfoProxy)
|
2025-07-02 00:21:32 +08:00
|
|
|
|
|
|
|
--> Constants
|
|
|
|
local STORE_NAME = "Equipment"
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
local function GetPlayerEquipmentFolder(Player: Player)
|
|
|
|
local pData = Utils:GetPlayerDataFolder(Player)
|
|
|
|
if not pData then return end
|
|
|
|
local EquipmentFolder = pData:FindFirstChild("Equipment")
|
|
|
|
return EquipmentFolder
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
local function CreateEquipmentInstance(Player: Player, UniqueId: number, EquipmentData: table)
|
|
|
|
if Player or UniqueId or EquipmentData then
|
|
|
|
warn('创建装备实例失败: ' .. Player.Name .. ' ' .. UniqueId .. ' ' .. EquipmentData)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
local PlayerEquipmentFolder = GetPlayerEquipmentFolder(Player)
|
|
|
|
if not PlayerEquipmentFolder then return end
|
|
|
|
|
|
|
|
local Config = Instance.new("Configuration")
|
|
|
|
Config.Name = UniqueId
|
|
|
|
Utils:SetAttributesList(Config, PlayerEquipmentFolder)
|
|
|
|
Config.Parent = PlayerEquipmentFolder
|
|
|
|
return Config
|
|
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
function EquipmentProxy:InitPlayer(Player: Player)
|
|
|
|
local pData = Utils:GetPlayerDataFolder(Player)
|
|
|
|
if not pData then return end
|
|
|
|
local EquipmentFolder = Utils:CreateFolder("Equipment", pData)
|
|
|
|
|
|
|
|
-- 初始化数据存储
|
|
|
|
if not ArchiveProxy.pData[Player.UserId] then
|
|
|
|
ArchiveProxy.pData[Player.UserId] = {}
|
|
|
|
end
|
|
|
|
|
|
|
|
-- 初始化装备
|
|
|
|
for uniqueId, EquipmentData in ArchiveProxy.pData[Player.UserId] do
|
|
|
|
CreateEquipmentInstance(Player, uniqueId, EquipmentData)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local EXCEPT_KEYS = { "id", "orgId", "name"}
|
|
|
|
-- 添加装备到背包
|
|
|
|
function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number)
|
|
|
|
local pData = Utils:GetPlayerDataFolder(Player)
|
|
|
|
if not pData then return end
|
|
|
|
|
|
|
|
local EquipmentData = Utils:GetJsonIdData("Equipment", EquipmentId)
|
|
|
|
if not EquipmentData then return end
|
|
|
|
|
|
|
|
local UniqueId = Utils:GenUniqueId(ArchiveProxy.pData[Player.UserId])
|
2025-07-02 00:56:31 +08:00
|
|
|
-- 配置表内容
|
2025-07-02 00:21:32 +08:00
|
|
|
local ResultData = {}
|
|
|
|
for key, value in pairs(EquipmentData) do
|
|
|
|
if not table.find(EXCEPT_KEYS, key) then
|
|
|
|
ResultData[key] = value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ResultData.id = UniqueId
|
|
|
|
ResultData.orgId = EquipmentId
|
|
|
|
ResultData.wearing = false
|
|
|
|
|
2025-07-02 00:56:31 +08:00
|
|
|
-- 其他随机词条内容添加在下面
|
|
|
|
-- 根据词条内容直接生成回收奖励
|
|
|
|
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
2025-07-02 00:21:32 +08:00
|
|
|
ArchiveProxy.pData[Player.UserId][UniqueId] = ResultData
|
|
|
|
CreateEquipmentInstance(Player, UniqueId, ResultData)
|
|
|
|
end
|
|
|
|
|
2025-07-02 00:56:31 +08:00
|
|
|
function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number)
|
|
|
|
local pData = Utils:GetPlayerDataFolder(Player)
|
|
|
|
if not pData then return end
|
|
|
|
|
|
|
|
local EquipmentData = Utils:GetJsonIdData("Equipment", EquipmentId)
|
|
|
|
if not EquipmentData then return end
|
|
|
|
|
|
|
|
if not ArchiveProxy.pData[Player.UserId][EquipmentId] then return end
|
|
|
|
|
|
|
|
-- 回收装备返回金币
|
|
|
|
-- 调用PlayerInfoProxy来增加货币
|
|
|
|
|
|
|
|
ArchiveProxy.pData[Player.UserId][EquipmentId] = nil
|
|
|
|
local EquipmentInstance = GetPlayerEquipmentFolder(Player):FindFirstChild(EquipmentId)
|
|
|
|
if EquipmentInstance then
|
|
|
|
EquipmentInstance:Destroy()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function EquipmentProxy:WearEquipment(Player: Player, EquipmentId: number)
|
|
|
|
local pData = Utils:GetPlayerDataFolder(Player)
|
|
|
|
if not pData then return end
|
|
|
|
|
|
|
|
-- 穿戴装备时再生成模型
|
|
|
|
|
|
|
|
end
|
2025-07-02 00:21:32 +08:00
|
|
|
|
|
|
|
function EquipmentProxy:OnPlayerRemoving(Player: Player)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
ReplicatedStorage.Remotes.PlayerRemoving:Connect(EquipmentProxy.OnPlayerRemoving)
|
|
|
|
|
|
|
|
return EquipmentProxy
|