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

66 lines
2.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.

local Action_SingleRespiratoryRegurgitation = {
-- 可配置参数定义参数将显示在Action配置面板
-- 例:
-- MyIntParameter = 0
AddHealthFrequency = 5;
ReplyPerSecond = 10.; -- 每一秒增加的血量
WaitAddHealthTime = 3.;
}
-- 触发器激活时将执行Action的Execute
function Action_SingleRespiratoryRegurgitation:Execute(...)
-- 给玩家添加
UGCEventSystem.AddListener(EventTypes.PlayerEnableRR, self.OnEnablePlayerRR, self);
UGCEventSystem.AddListener(EventTypes.PlayerCause, self.PlayerVictim, self);
self.Players = {};
self.UpdateAddTime = 0.;
self.bEnableActionTick = true
return true
end
function Action_SingleRespiratoryRegurgitation:Update(DeltaSeconds)
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_SingleRespiratoryRegurgitation:OnEnablePlayerRR(InPlayerKey, IsAdd)
local Time = KismetSystemLibrary.GetGameTimeInSeconds(UGCGameSystem.GameState);
self.Players[InPlayerKey] = {
Time = Time;
Enable = IsAdd;
};
end
function Action_SingleRespiratoryRegurgitation:PlayerVictim(Damage, IsKill, CauserKey, VictimKey)
if self.Players[VictimKey] == nil then
return;
end
local Time = KismetSystemLibrary.GetGameTimeInSeconds(UGCGameSystem.GameState);
self.Players[VictimKey].Time = Time;
end
function Action_SingleRespiratoryRegurgitation:CheckHasPlayer(InPlayerKey)
return self.Players[InPlayerKey] == true;
end
function Action_SingleRespiratoryRegurgitation:AddPlayerHealth()
local NowTime = KismetSystemLibrary.GetGameTimeInSeconds(UGCGameSystem.GameState);
for PlayerKey, Table in pairs(self.Players) do
if Table.Enable then
local Pawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey);
if UE.IsValid(Pawn) and Pawn.PlayerKey ~= nil and Pawn:IsAlive() then
if NowTime - Table.Time > self.WaitAddHealthTime then
UGCPawnAttrSystem.SetHealth(Pawn, Pawn:GetHealth() + self.ReplyPerSecond / self.AddHealthFrequency);
end
end
end
end
end
return Action_SingleRespiratoryRegurgitation;