rbxIdleWeapon/src/ServerStorage/Proxy/EquipmentProxy.luau

123 lines
3.9 KiB
Plaintext
Raw Normal View History

2025-07-02 00:21:32 +08:00
-- 装备代理
local EquipmentProxy = {}
--> Services
local ReplicatedStorage = game:GetService("ReplicatedStorage")
2025-07-03 01:48:06 +08:00
local ServerStorage = game:GetService("ServerStorage")
2025-07-02 00:21:32 +08:00
--> Variables
local Utils = require(ReplicatedStorage.Tools.Utils)
2025-07-03 01:48:06 +08:00
local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy)
local PlayerInfoProxy = require(ServerStorage.Proxy.PlayerInfoProxy)
--> Json
local JsonEquipment = require(ReplicatedStorage.Json.Equipment)
2025-07-02 00:21:32 +08:00
--> Constants
local STORE_NAME = "Equipment"
--------------------------------------------------------------------------------
2025-07-03 01:48:06 +08:00
-- 获取装备文件夹
2025-07-02 00:21:32 +08:00
local function GetPlayerEquipmentFolder(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
if not pData then return end
local EquipmentFolder = pData:FindFirstChild("Equipment")
return EquipmentFolder
end
--------------------------------------------------------------------------------
2025-07-03 01:48:06 +08:00
-- 初始化玩家
2025-07-02 00:21:32 +08:00
function EquipmentProxy:InitPlayer(Player: Player)
local pData = Utils:GetPlayerDataFolder(Player)
if not pData then return end
2025-07-03 01:48:06 +08:00
Utils:CreateFolder("Equipment", pData)
2025-07-02 00:21:32 +08:00
2025-07-03 01:48:06 +08:00
-- 新玩家数据初始化
if not ArchiveProxy.pData[Player.UserId][STORE_NAME] then
ArchiveProxy.pData[Player.UserId][STORE_NAME] = {}
2025-07-02 00:21:32 +08:00
end
-- 初始化装备
2025-07-03 01:48:06 +08:00
for uniqueId, EquipmentData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do
2025-07-12 05:06:14 +08:00
Utils:CreateDataInstance(Player, uniqueId, EquipmentData, GetPlayerEquipmentFolder(Player))
2025-07-02 00:21:32 +08:00
end
end
2025-07-12 05:06:14 +08:00
-- 一些特殊记录或者不用记录的Key
2025-07-03 01:48:06 +08:00
local EXCEPT_KEYS = { "id", "orgId", "name", "attributes"}
2025-07-02 00:21:32 +08:00
-- 添加装备到背包
function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number)
local pData = Utils:GetPlayerDataFolder(Player)
if not pData then return end
2025-07-03 01:48:06 +08:00
local EquipmentData = Utils:GetIdDataFromJson(JsonEquipment, EquipmentId)
2025-07-02 00:21:32 +08:00
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
2025-07-12 05:06:14 +08:00
-- 到时候记录穿戴槽位
ResultData.wearing = 0
2025-07-02 00:21:32 +08:00
2025-07-12 05:06:14 +08:00
-- TODO: 其他随机词条内容添加在下面
-- TODO: 之后回收修改随机生成
2025-07-02 00:56:31 +08:00
------------------------------------------------------------
2025-07-02 00:21:32 +08:00
ArchiveProxy.pData[Player.UserId][UniqueId] = ResultData
2025-07-12 05:06:14 +08:00
Utils:CreateDataInstance(Player, UniqueId, ResultData, GetPlayerEquipmentFolder(Player))
2025-07-02 00:21:32 +08:00
end
2025-07-03 01:48:06 +08:00
-- 回收装备
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
2025-07-03 01:48:06 +08:00
local EquipmentData = ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentId]
2025-07-02 00:56:31 +08:00
if not EquipmentData then return end
-- 回收装备返回金币
2025-07-03 01:48:06 +08:00
PlayerInfoProxy:ChangeItem(Player, 1, EquipmentData.recycle)
2025-07-02 00:56:31 +08:00
ArchiveProxy.pData[Player.UserId][EquipmentId] = nil
local EquipmentInstance = GetPlayerEquipmentFolder(Player):FindFirstChild(EquipmentId)
if EquipmentInstance then
EquipmentInstance:Destroy()
end
end
2025-07-03 01:48:06 +08:00
-- 穿戴装备
2025-07-02 00:56:31 +08:00
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
2025-07-12 05:06:14 +08:00
-- 获取装备数据
function EquipmentProxy:GetEquipmentData(Player: Player, EquipmentUniqueId: number)
local EquipmentData = ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentUniqueId]
return EquipmentData
end
2025-07-02 00:21:32 +08:00
function EquipmentProxy:OnPlayerRemoving(Player: Player)
end
2025-07-03 01:48:06 +08:00
ReplicatedStorage.Remotes.PlayerRemoving.Event:Connect(function(PlayerUserId: string)
EquipmentProxy:OnPlayerRemoving(PlayerUserId)
end)
2025-07-02 00:21:32 +08:00
return EquipmentProxy