83 lines
3.3 KiB
Lua
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; |