UGCProjects/GZJ/Script/SimpleSkill/Task/SimpleSkillTask_Exhaust.lua
2025-01-08 22:46:12 +08:00

83 lines
3.3 KiB
Lua

local SimpleSkillTask = require("Script.SimpleSkill.Task.SimpleSkillTask")
local SimpleSkillTask_Exhaust = LuaClass("SimpleSkillTask_Exhaust", SimpleSkillTask)
local SimpleSkillSelectorFactory = require("Script.SimpleSkill.Factory.SimpleSkillSelectorFactory")
function SimpleSkillTask_Exhaust:ctor(OwnerSkill)
SimpleSkillTask_Exhaust.super.ctor(self, OwnerSkill)
end
function SimpleSkillTask_Exhaust:InitTaskFromData(TaskData, CasterPawn)
SimpleSkillTask.InitTaskFromData(self, TaskData, CasterPawn)
self.TaskName = "Exhaust"
local SelectorData = {
LimitNum = 0,
ForwardOffset = 0,
Param_Float = 0,
Param_Vector = VectorHelper.VectorZero(),
}
local SelectorClass = SimpleSkillSelectorFactory.GetSelectorByType(ESkillSelectorType.SelfPawn)
self.MonsterSelector = SelectorClass.New()
self.MonsterSelector:InitSelectorFromData(SelectorData, self.CasterPawn)
self.MonsterClass = UE.LoadClass(BPClassPath.MonsterBase)
self.AffectedMonsters = {}
end
function SimpleSkillTask_Exhaust:ActivateTask()
SimpleSkillTask.ActivateTask(self)
self:EnableSkillEffect(self.CasterPawn, nil)
end
function SimpleSkillTask_Exhaust:ActivateTaskInTimer()
self.LoopTimerHandle = EventSystem.SetTimerLoop(self.CasterPawn, function()
if self.MonsterSelector == nil then
return
end
local AttackMonsters = UGCGameSystem.GameState:GetAttackWaveSpawner().SpawnedMonsters
local HangUpRoomMonsters = UGCGameSystem.GameState:GetSpawnerByPlayerKey(self.CasterPawn.PlayerKey).SpawnedMonsters
for _, Monster in pairs(HangUpRoomMonsters) do
table.insert(AttackMonsters, Monster)
end
for _, Monster in pairs(AttackMonsters) do
if Monster ~= nil and UE.IsValid(Monster) and UGCSimpleCharacterSystem.GetHealth(Monster) > 0 then
local MonsterLoc = Monster:K2_GetActorLocation()
local PlayerLoc = self.CasterPawn:K2_GetActorLocation()
if VectorHelper.GetDistance2D(MonsterLoc, PlayerLoc) <= 300.0 then
Monster:AddModifyDamageDelegationFun(
"ActivateExhaust"..KismetSystemLibrary.GetObjectName(self.CasterPawn),
function (DamageAmount, DamageEvent, EventInstigator, DamageCauser)
return DamageAmount * 1.3
end
)
table.insert(self.AffectedMonsters, Monster)
else
Monster:RemoveModifyDamageDelegation("ActivateExhaust"..KismetSystemLibrary.GetObjectName(self.CasterPawn))
table.removeValue(self.AffectedMonsters, Monster)
end
end
end
end, 0.2)
end
function SimpleSkillTask_Exhaust:DeactivateTask()
if self.LoopTimerHandle ~= nil then
EventSystem.StopTimer(self.LoopTimerHandle)
for _, Monster in pairs(self.AffectedMonsters) do
if Monster ~= nil and UE.IsValid(Monster) and UGCSimpleCharacterSystem.GetHealth(Monster) > 0 then
Monster:RemoveModifyDamageDelegation("ActivateExhaust"..KismetSystemLibrary.GetObjectName(self.CasterPawn))
end
end
self.AffectedMonsters = {}
end
end
return SimpleSkillTask_Exhaust;