local BuffActionBase = require('Script.Global.BuffSystem.BuffActionBase') local BuffAction_Vampirism = setmetatable( { -- Param --------------------------- -- 每秒恢复量 Vampirism = 0.2; IsHPLimit = false; -- Param End ----------------------- }, { __index = BuffActionBase, __metatable = BuffActionBase } ); function BuffAction_Vampirism:LuaDoAction() BuffActionBase.LuaDoAction(self) if not UGCGameSystem.IsServer() then return true end UGCLogSystem.Log("[BuffAction_Vampirism_LuaDoAction]Params:%s, %s", self.ReplyPerSecond, self.WaitAddHealthTime) -- 绑定Event传入的self可能有点问题,需要与存储OwnerPawn才能获取到正确的OwnerPawn UGCEventSystem.AddListener(EventEnum.PlayerInjuryInfo, self.PlayerInjuryInfo, self) end function BuffAction_Vampirism:LuaUndoAction() BuffActionBase.LuaUndoAction(self) if not UGCGameSystem.IsServer() then return true end UGCLogSystem.Log("[BuffAction_Vampirism_LuaUndoAction]") UGCEventSystem.RemoveListener(EventEnum.PlayerInjuryInfo, self.PlayerInjuryInfo, self) end function BuffAction_Vampirism:PlayerInjuryInfo(VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue) if UE.IsValid(self:GetOwnerPawn()) and self:GetOwnerPawn():IsAlive() then if CauserKey == self:GetOwnerPawn().PlayerKey then local AddHealth = DamageValue * self.Vampirism if self.IsHPLimit then local Health = UGCPawnAttrSystem.GetHealth(self:GetOwnerPawn()) UGCPawnAttrSystem.SetHealthMax(self:GetOwnerPawn(), UGCPawnAttrSystem.GetHealthMax(self:GetOwnerPawn()) + AddHealth) UGCPawnAttrSystem.SetHealth(self:GetOwnerPawn(), Health + AddHealth) else UGCPawnAttrSystem.SetHealth(self:GetOwnerPawn(), UGCPawnAttrSystem.GetHealth(self:GetOwnerPawn()) + AddHealth) end UGCLogSystem.Log("[BuffAction_Vampirism_PlayerInjuryInfo] Succeed") end end end return BuffAction_Vampirism;