74 lines
3.1 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
local Buff_RespiratoryRecovery = {
AddHealthFrequency = 5;
ReplyPerSecond = 10.;
WaitAddHealthTime = 3.;
UpdateAddTime = 0;
};
-- Script.Blueprint.UGCBuffs.BuffAction.Buff_RespiratoryRecovery
function Buff_RespiratoryRecovery:LuaDoAction()
if not UGCGameSystem.IsServer() then return true end
UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaDoAction]Params:%s, %s, %s", self.Params[1], self.Params[2], self.Params[3])
-- 初始化参数
self.AddHealthFrequency = tonumber(self.Params[1]); -- 恢复频率
self.ReplyPerSecond = tonumber(self.Params[2]); -- 每秒回复
self.WaitAddHealthTime = tonumber(self.Params[3]); -- 受伤等待恢复时间
self.OwnerPawn = self:GetOwnerPawn()
if UE.IsValid(self.OwnerPawn) and self.OwnerPawn:IsAlive() then
UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaDoAction] IsValid")
end
-- 绑定Event传入的self可能有点问题需要与存储OwnerPawn才能获取到正确的OwnerPawn
UGCEventSystem.AddListener(EventEnum.PlayerInjuryInfo, self.PlayerInjuryInfo, self)
--local Causer = self:GetBuffCauserActor()
--if Causer then
-- UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaDoAction] Succeed")
--else
-- UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaDoAction] Failure")
--end
return true
end
function Buff_RespiratoryRecovery:LuaUndoAction()
if not UGCGameSystem.IsServer() then return true end
UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaUndoAction]")
UGCEventSystem.RemoveListener(EventEnum.PlayerInjuryInfo, self.PlayerInjuryInfo, self)
return true
end
function Buff_RespiratoryRecovery:LuaResetAction()
UGCLogSystem.Log("[Buff_RespiratoryRecovery_LuaResetAction]")
return true
end
function Buff_RespiratoryRecovery:LuaUpdateAction(DeltaSeconds)
if not UGCGameSystem.IsServer() then return true end
self.UpdateAddTime = self.UpdateAddTime + DeltaSeconds
if self.UpdateAddTime >= (1. / self.AddHealthFrequency) then
self.UpdateAddTime = self.UpdateAddTime - 1. / self.AddHealthFrequency
self:AddPlayerHealth()
end
return true
end
function Buff_RespiratoryRecovery:PlayerInjuryInfo(VictimKey)
if UE.IsValid(self.OwnerPawn) and self.OwnerPawn:IsAlive() then
UGCLogSystem.Log("[Buff_RespiratoryRecovery_PlayerInjuryInfo] VictimKey:%s, OwnerPlayerKey:%s",tostring(VictimKey), tostring(self.OwnerPawn.PlayerKey))
if VictimKey == self.OwnerPawn.PlayerKey then
self.PlayerVictimTime = UGCSystemLibrary.GetGameTime()
UGCLogSystem.Log("[Buff_RespiratoryRecovery_PlayerInjuryInfo] Succeed")
end
end
end
function Buff_RespiratoryRecovery:AddPlayerHealth()
local NowTime = UGCSystemLibrary.GetGameTime()
local PlayerPawn = self:GetOwnerPawn()
if UE.IsValid(PlayerPawn) and PlayerPawn:IsAlive()
and (self.PlayerVictimTime == nil or (NowTime - self.PlayerVictimTime >= self.WaitAddHealthTime)) then
UGCPawnAttrSystem.SetHealth(PlayerPawn, UGCPawnAttrSystem.GetHealth(PlayerPawn) + self.ReplyPerSecond / self.AddHealthFrequency)
end
end
return Buff_RespiratoryRecovery;