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;