74 lines
3.0 KiB
Lua
74 lines
3.0 KiB
Lua
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; |