local SimpleSkillTask = require("Script.SimpleSkill.Task.SimpleSkillTask") local SimpleSkillTask_Stomp = LuaClass("SimpleSkillTask_Stomp", SimpleSkillTask) SimpleSkillTask_Stomp.AdditionDamageRateTable = {1.8, 2.2, 2.8, 3.5} SimpleSkillTask_Stomp.CurDamageRate = 0.0 SimpleSkillTask_Stomp.CurStunDuration = 5.0 SimpleSkillTask_Stomp.AffectedMonsters = {} SimpleSkillTask_Stomp.CachedSpeedScales = {} function SimpleSkillTask_Stomp:ctor(OwnerSkill) SimpleSkillTask_Stomp.super.ctor(self, OwnerSkill) end function SimpleSkillTask_Stomp:InitTaskFromData(TaskData, CasterPawn) SimpleSkillTask.InitTaskFromData(self, TaskData, CasterPawn) self.TaskName = "Stomp" end function SimpleSkillTask_Stomp:UpdateSkillLevel(NewSkillLevel) SimpleSkillTask.UpdateSkillLevel(self, NewSkillLevel) self.CurDamageRate = self.AdditionDamageRateTable[self.SkillLevel] end function SimpleSkillTask_Stomp:ActivateTask() SimpleSkillTask.ActivateTask(self) if self.TimerHandle ~= nil then for _, AffectedPawn in pairs(self.AffectedMonsters) do if AffectedPawn ~= nil and UE.IsValid(AffectedPawn) and AffectedPawn.bIsDead == false then if self.CachedSpeedScales[AffectedPawn] ~= nil then UGCSimpleCharacterSystem.SetSpeedScale(AffectedPawn, self.CachedSpeedScales[AffectedPawn]) end end end EventSystem.StopTimer(self.TimerHandle) end self.AffectedMonsters = {} self:EnableSkillEffect(self.CasterPawn, nil, EEffectSpawnLocationType.Bottom) local Base_Attack = UGCGameSystem.GetPlayerStateByPlayerKey(self.CasterPawn.PlayerKey).Attributes[AttributeType.Base].Base_Attack local DamageAmount = 100 + Base_Attack * self.CurDamageRate local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey) local TargetPawns = self:GetTargetPawns() for _, TargetPawn in pairs(TargetPawns) do TargetPawn:SetIsStun(true, self.CurStunDuration) UGCGameSystem.ApplyDamage(TargetPawn, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage) local SpeedScale = UGCSimpleCharacterSystem.GetSpeedScale(TargetPawn) self.CachedSpeedScales[TargetPawn] = SpeedScale UGCSimpleCharacterSystem.SetSpeedScale(TargetPawn, SpeedScale * 0.5) table.insert(self.AffectedMonsters, TargetPawn) end if not table.isEmpty(self.AffectedMonsters) then self.TimerHandle = EventSystem.SetTimer(self.CasterPawn, function() for _, AffectedPawn in pairs(self.AffectedMonsters) do if AffectedPawn ~= nil and UE.IsValid(AffectedPawn) and AffectedPawn.bIsDead == false then if self.CachedSpeedScales[AffectedPawn] ~= nil then UGCSimpleCharacterSystem.SetSpeedScale(AffectedPawn, self.CachedSpeedScales[AffectedPawn]) end end end end, self.CurStunDuration) end end return SimpleSkillTask_Stomp;