UGCProjects/ProjectTemp_T/Script/gamemode/Action_RespiratoryRegurgitation.lua
2025-01-04 23:00:19 +08:00

63 lines
2.3 KiB
Lua
Raw Permalink 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.

local Action_RespiratoryRegurgitation = {
-- 可配置参数定义参数将显示在Action配置面板
-- 例:
-- MyIntParameter = 0
AddHealthFrequency = 5;
ReplyPerSecond = 10.; -- 每一秒增加的血量
WaitAddHealthTime = 3.;
}
-- 触发器激活时将执行Action的Execute
function Action_RespiratoryRegurgitation:Execute(...)
UGCEventSystem.AddListener(EventTypes.PlayerCause, self.PlayerVictim, self);
self.UpdateAddTime = 0.
self.PlayerVictimTime = {}
self.EnableAddHealth = true; -- 默认开启呼吸回血
UGCLogSystem.Log("[Action_RespiratoryRegurgitation_Execute]")
self.bEnableActionTick = true
return true
end
function Action_RespiratoryRegurgitation:Update(DeltaSeconds)
if not self.EnableAddHealth then
return;
end
self.UpdateAddTime = self.UpdateAddTime + DeltaSeconds
if self.UpdateAddTime >= (1. / self.AddHealthFrequency) then
self.UpdateAddTime = self.UpdateAddTime - 1. / self.AddHealthFrequency
self:AddPlayerHealth();
end
end
function Action_RespiratoryRegurgitation:PlayerVictim(Damage, IsKill, CauserKey, VictimKey)
self.PlayerVictimTime[VictimKey] = KismetSystemLibrary.GetGameTimeInSeconds(UGCGameSystem.GameState)
end
function Action_RespiratoryRegurgitation:AddPlayerHealth()
local AllPlayer = UGCGameSystem.GetAllPlayerPawn()
local NowTime = KismetSystemLibrary.GetGameTimeInSeconds(UGCGameSystem.GameState)
for k, Player in pairs(AllPlayer) do
if UE.IsValid(Player) and Player.PlayerKey ~= nil and Player:IsAlive() then
if self.PlayerVictimTime[Player.PlayerKey] == nil then
if NowTime - self.PlayerVictimTime[Player.PlayerKey] > self.WaitAddHealthTime then
UGCPawnAttrSystem.SetHealth(Player, Player.GetHealth(Player) + self.ReplyPerSecond / self.AddHealthFrequency);
end
end
end
end
end
-- 打断
function Action_RespiratoryRegurgitation:Interrupt(InTime)
self.EnableAddHealth = false; -- 不会被启动了
if InTime > 0 then
else
self.EnableAddHealth = false; -- 不会被启动了
UGCEventSystem.SetTimer(self, function()
self.EnableAddHealth = true; -- 隔这段时间之后会恢复
end, InTime);
end
end
return Action_RespiratoryRegurgitation