140 lines
3.3 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
---@class UGCPlayerState_C:BP_UGCPlayerState_C
--Edit Below--
---@type UGCPlayerState_C
local UGCPlayerState = {
--PluginData = {};
--- {
--- LoginTimes = 0;
---}
---@type table
ArchiveData = nil;
AccountInfo = nil;
---@type table<int32, table<PlayerKey, float>> { { PlayerKey, AddTime } }
KillAssists = {};
};
--[[
function UGCPlayerState:ReceiveBeginPlay()
self.SuperClass.ReceiveBeginPlay(self);
end
--]]
function UGCPlayerState:ReceiveTick(DeltaTime)
self.SuperClass.ReceiveTick(self, DeltaTime);
if self:HasAuthority() then
if table.isEmpty(self.KillAssists) then
return;
end
local RemoveIndies = {};
local ServerTime = KismetSystemLibrary.GetGameTimeInSeconds(self);
for i, v in pairs(self.KillAssists) do
if v.AddTime ~= nil and v.AddTime + DefaultSettings.AssistTime <= ServerTime then
RemoveIndies[#RemoveIndies + 1] = i;
end
end
if not table.isEmpty(RemoveIndies) then
for i = table.getCount(RemoveIndies), 1, -1 do
self.KillAssists[RemoveIndies[i]] = nil;
end
RemoveIndies = {};
end
end
end
--[[
function UGCPlayerState:ReceiveEndPlay()
self.SuperClass.ReceiveEndPlay(self);
end
--]]
function UGCPlayerState:GetReplicatedProperties()
return
{ "ArchiveData", "Lazy" },
{ "AccountInfo", "Lazy" }
end
--[[
function UGCPlayerState:GetAvailableServerRPCs()
return
end
--]]
--- 重置玩家
function UGCPlayerState:ResetPlayer()
end
-- 初始化存档
function UGCPlayerState:InitArchive()
self.ArchiveData = {
-- 登录次数
LoginTimes = 0;
SoldierSelect = {}; -- 不同兵种选择
Scores = {};
}
end
-- 加载存档
function UGCPlayerState:LoadArchiveData(InData)
print(string.format("[UGCPlayerState:LoadArchive] 加载存档"))
if InData == nil or table.isEmpty(InData) then
self:InitArchive();
else
UGCLogSystem.LogTree("[UGCPlayerState:LoadArchive] InData = ", InData)
self.ArchiveData = InData
end
-- 立刻同步一下
DOREPONCE(self, "ArchiveData");
UnrealNetwork.CallUnrealRPC(self, self, "Client_LoadArchive", self.ArchiveData);
end
---@param InWeapon ASTExtraWeapon
function UGCPlayerState:UpdateWeaponAttachment(Pawn, InWeapon)
-- 获取玩家的缓存
UGCLogSystem.Log("[UGCPlayerState:UpdateWeaponAttachment] 执行")
local ArchiveData = UGCPlayerStateSystem.GetPlayerArchiveData(self.UID);
if table.isEmpty(ArchiveData) then ArchiveData = {}; end
if ArchiveData.Weapons == nil then ArchiveData.Weapons = {}; end
local ItemId = InWeapon:GetWeaponItemID();
local Weapon = UGCWeaponManagerSystem.GetCurrentWeapon(Pawn);
local Parts = ItemTool.GetWeaponParts(Weapon);
ArchiveData.Weapons[ItemId] = Parts;
UGCPlayerStateSystem.SavePlayerArchiveData(self.UID, ArchiveData);
end
function UGCPlayerState:Client_LoadArchive(InData)
end
---@param InData PlayerAccountInfo
function UGCPlayerState:LoadAccountInfo(InData)
self.AccountInfo = InData;
DOREPONCE(self, "AccountInfo");
end
function UGCPlayerState:OnRep_ArchiveData()
if self.ArchiveData == nil then
return;
end
end
function UGCPlayerState:GetArchiveData()
return self.ArchiveData;
end
--- 直接加载对应头像
function UGCPlayerState:OnRep_AccountInfo()
end
function UGCPlayerState:GetKillAssists()
return self.KillAssists;
end
function UGCPlayerState:ClearKillAssist()
self.KillAssists = {};
end
return UGCPlayerState;