75 lines
2.4 KiB
Lua
75 lines
2.4 KiB
Lua
local UGCPlayerState = {
|
||
ScoreData = {Kill = 0, Dead = 0, Assist = 0, Score = 0, TechnicalScore = 0}; -- {Kill = int32, Dead = int32, Assist = int32, Score = int32, TechnicalScore = int32}
|
||
InjuryInfo = {} -- 其他玩家对自己的伤害[PlayerKey] = float
|
||
};
|
||
|
||
function UGCPlayerState:ReceiveBeginPlay()
|
||
self.SuperClass.ReceiveBeginPlay(self);
|
||
if UGCGameSystem.IsServer() then
|
||
-- UGCEventSystem.AddListener(EventEnum.PlayerInjuryInfo, self.UpdatePlayerInjuryInfo, self)
|
||
end
|
||
end
|
||
|
||
function UGCPlayerState:UpdatePlayerInjuryInfo(VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue)
|
||
if CauserKey ~= self.PlayerKey then
|
||
if self.InjuryInfo[CauserKey] then
|
||
self.InjuryInfo[CauserKey] = self.InjuryInfo[CauserKey] + DamageValue
|
||
else
|
||
self.InjuryInfo[CauserKey] = DamageValue
|
||
end
|
||
end
|
||
end
|
||
|
||
--- 玩家即将死亡时可向PlayerState获取助攻玩家信息,会忽略掉击杀者
|
||
function UGCPlayerState:GetAssister(KillerPlayerKey, MinAssistDamage)
|
||
local ResPlayerKey, Damage = -1, 0.
|
||
for PlayerKey, PlayerDamage in pairs(self.InjuryInfo) do
|
||
if PlayerKey ~= KillerPlayerKey and PlayerDamage > MinAssistDamage then
|
||
if ResPlayerKey < 0 or PlayerDamage > Damage then
|
||
ResPlayerKey = PlayerKey
|
||
Damage = PlayerDamage
|
||
end
|
||
end
|
||
end
|
||
return ResPlayerKey
|
||
end
|
||
|
||
function UGCPlayerState:GetScore()
|
||
return self.ScoreData.Score
|
||
end
|
||
|
||
function UGCPlayerState:SetScore(NewSocre)
|
||
self.ScoreData.Score = NewSocre
|
||
end
|
||
|
||
function UGCPlayerState:GetTechnicalScore()
|
||
return self.ScoreData.TechnicalScore
|
||
end
|
||
|
||
function UGCPlayerState:SetTechnicalScore(NewSocre)
|
||
self.ScoreData.TechnicalScore = NewSocre
|
||
end
|
||
|
||
function UGCPlayerState:PlayerKill(DeadPlayerKey, WeaponID)
|
||
self.ScoreData.Kill = self.ScoreData.Kill + 1
|
||
end
|
||
|
||
function UGCPlayerState:PlayerAssist()
|
||
self.ScoreData.Assist = self.ScoreData.Assist + 1
|
||
end
|
||
|
||
function UGCPlayerState:PlayerDead(KillerPlayerKey)
|
||
self.ScoreData.Dead = self.ScoreData.Dead + 1
|
||
self.InjuryInfo = {}
|
||
end
|
||
|
||
function UGCPlayerState:ResetPlayerState()
|
||
self.ScoreData = {Kill = 0, Dead = 0, Assist = 0, Score = 0, TechnicalScore = 0}
|
||
self.InjuryInfo = {}
|
||
end
|
||
|
||
function UGCPlayerState:ResetInjuryInfo()
|
||
self.InjuryInfo = {}
|
||
end
|
||
|
||
return UGCPlayerState; |