2025-01-04 23:00:19 +08:00

140 lines
3.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@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;