87 lines
3.4 KiB
Lua
87 lines
3.4 KiB
Lua
local SimpleSkillTask = require("Script.SimpleSkill.Task.SimpleSkillTask")
|
|
local SimpleSkillTask_ElectricShock = LuaClass("SimpleSkillTask_ElectricShock", SimpleSkillTask)
|
|
|
|
SimpleSkillTask_ElectricShock.TriggerRateTable = {10, 12, 15, 20} --触发几率
|
|
SimpleSkillTask_ElectricShock.AdditionDamageRateTable = {2.0, 3.2, 4.8, 7.2} --伤害加成百分比
|
|
|
|
SimpleSkillTask_ElectricShock.CurTriggerRate = 0
|
|
SimpleSkillTask_ElectricShock.CurDamageRate = 0.0
|
|
SimpleSkillTask_ElectricShock.BindWeapon = nil
|
|
|
|
function SimpleSkillTask_ElectricShock:ctor(OwnerSkill)
|
|
SimpleSkillTask_ElectricShock.super.ctor(self, OwnerSkill)
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:InitTaskFromData(TaskData, CasterPawn)
|
|
SimpleSkillTask.InitTaskFromData(self, TaskData, CasterPawn)
|
|
self.TaskName = "ElectricShock"
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:UpdateSkillLevel(NewSkillLevel)
|
|
SimpleSkillTask.UpdateSkillLevel(self, NewSkillLevel)
|
|
|
|
self.CurTriggerRate = self.TriggerRateTable[self.SkillLevel]
|
|
self.CurDamageRate = self.AdditionDamageRateTable[self.SkillLevel]
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:ActivateTask()
|
|
SimpleSkillTask.ActivateTask(self)
|
|
|
|
local CasterPawnWeapon = self.CasterPawn:GetWeaponComponent()
|
|
if CasterPawnWeapon ~= nil and UE.IsValid(CasterPawnWeapon) then
|
|
self.BindWeapon = CasterPawnWeapon
|
|
self.BindWeapon.OnFireDelegate:Add(self.OnCasterPawnFire, self)
|
|
else
|
|
self.CasterPawn.OnWeaponSpawnedDelegate:Add(self.OnWeaponSpawned, self)
|
|
end
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:DeactivateTask()
|
|
self.CasterPawn.OnWeaponSpawnedDelegate:Remove(self.OnWeaponSpawned, self)
|
|
|
|
if self.BindWeapon ~= nil and UE.IsValid(self.BindWeapon) then
|
|
self.BindWeapon.OnFireDelegate:Remove(self.OnCasterPawnFire, self)
|
|
self.BindWeapon = nil
|
|
end
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:OnWeaponSpawned(Pawn)
|
|
if Pawn ~= self.CasterPawn then
|
|
UE.Log("[SimpleSkillTask_ElectricShock] invalid Pawn. Pawn.PlayerKey=%d, CasterPawn.PlayerKey=%d", Pawn.PlayerKey, self.CasterPawn.PlayerKey)
|
|
return
|
|
end
|
|
|
|
local CasterPawnWeapon = self.CasterPawn:GetWeaponComponent()
|
|
if CasterPawnWeapon ~= nil and UE.IsValid(CasterPawnWeapon) then
|
|
self.BindWeapon = CasterPawnWeapon
|
|
self.BindWeapon.OnFireDelegate:Add(self.OnCasterPawnFire, self)
|
|
else
|
|
UE.Log("[SimpleSkillTask_ElectricShock] BindWeaponFaied")
|
|
end
|
|
end
|
|
|
|
function SimpleSkillTask_ElectricShock:OnCasterPawnFire(Weapon)
|
|
if self.BindWeapon ~= Weapon then
|
|
UE.Log("[SimpleSkillTask_ElectricShock] invalid Weapon.")
|
|
return
|
|
end
|
|
|
|
local Rand = math.random(1, 100)
|
|
if Rand > self.CurTriggerRate then
|
|
return
|
|
end
|
|
|
|
UE.Log("[SimpleSkillTask_ElectricShock] triggered")
|
|
local Base_Attack = UGCGameSystem.GetPlayerStateByPlayerKey(self.CasterPawn.PlayerKey).Attributes[AttributeType.Base].Base_Attack
|
|
local DamageAmount = 200 + Base_Attack * self.CurDamageRate
|
|
local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey)
|
|
|
|
local TargetPawns = self:GetTargetPawns()
|
|
for _, MonsterPawn in pairs(TargetPawns) do
|
|
UGCGameSystem.ApplyDamage(MonsterPawn, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage)
|
|
end
|
|
|
|
self:EnableSkillEffect(self.CasterPawn, TargetPawns, EEffectSpawnLocationType.Middle)
|
|
end
|
|
|
|
return SimpleSkillTask_ElectricShock; |