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;