70 lines
2.9 KiB
Lua
70 lines
2.9 KiB
Lua
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; |