UGCProjects/GZJ/Script/SimpleSkill/Task/SimpleSkillTask_ElectricShock.lua

87 lines
3.4 KiB
Lua
Raw Normal View History

2025-01-08 22:46:12 +08:00
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;