local SimpleSkillTask = require("Script.SimpleSkill.Task.SimpleSkillTask") local SimpleSkillTask_StrongWind = LuaClass("SimpleSkillTask_StrongWind", SimpleSkillTask) SimpleSkillTask_StrongWind.AdditionDamageRateTable = {0.15, 0.22, 0.3, 0.4} SimpleSkillTask_StrongWind.SkillDurationTable = {5, 6, 7, 8} SimpleSkillTask_StrongWind.CurDamageRate = 0.0 SimpleSkillTask_StrongWind.CurSkillDuration = 5.0 SimpleSkillTask_StrongWind.CachedSpeedScale = 0 function SimpleSkillTask_StrongWind:ctor(OwnerSkill) SimpleSkillTask_StrongWind.super.ctor(self, OwnerSkill) end function SimpleSkillTask_StrongWind:InitTaskFromData(TaskData, CasterPawn) SimpleSkillTask.InitTaskFromData(self, TaskData, CasterPawn) self.TaskName = "StrongWind" end function SimpleSkillTask_StrongWind:UpdateSkillLevel(NewSkillLevel) SimpleSkillTask.UpdateSkillLevel(self, NewSkillLevel) self.CurDamageRate = self.AdditionDamageRateTable[NewSkillLevel] self.CurSkillDuration = self.SkillDurationTable[NewSkillLevel] end function SimpleSkillTask_StrongWind:ActivateTask() SimpleSkillTask.ActivateTask(self) if self.TimerHandle ~= nil then EventSystem.StopTimer(self.LoopTimerHandle) EventSystem.StopTimer(self.TimerHandle) if self.CachedSpeedScale > 0.1 then UGCPawnAttrSystem.SetSpeedScale(self.CasterPawn, self.CachedSpeedScale) end end self:EnableEffectWithId(self.EffectId, self.CasterPawn, nil, self.CurSkillDuration, EEffectSpawnLocationType.Attach) self.CachedSpeedScale = UGCPawnAttrSystem.GetSpeedScale(self.CasterPawn) UGCPawnAttrSystem.SetSpeedScale(self.CasterPawn, self.CachedSpeedScale * 1.5) local Base_Attack = UGCGameSystem.GetPlayerStateByPlayerKey(self.CasterPawn.PlayerKey).Attributes[AttributeType.Base].Base_Attack local DamageAmount = 80 + Base_Attack * self.CurDamageRate local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey) local TargetPawns = self:GetTargetPawns() for _, TargetPawn in pairs(TargetPawns) do UGCGameSystem.ApplyDamage(TargetPawn, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage) end self.LoopTimerHandle = EventSystem.SetTimerLoop(self.CasterPawn, function() local TargetPawns = self:GetTargetPawns() for _, TargetPawn in pairs(TargetPawns) do UGCGameSystem.ApplyDamage(TargetPawn, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage) end end, 1.0) self.TimerHandle = EventSystem.SetTimer(self.CasterPawn, function() if self.LoopTimerHandle ~= nil then EventSystem.StopTimer(self.LoopTimerHandle) end if self.CachedSpeedScale > 0.1 then UGCPawnAttrSystem.SetSpeedScale(self.CasterPawn, self.CachedSpeedScale) end end, self.CurSkillDuration) end return SimpleSkillTask_StrongWind;