local SimpleSkillTask = require("Script.SimpleSkill.Task.SimpleSkillTask") local SimpleSkillTask_Counter = LuaClass("SimpleSkillTask_Counter", SimpleSkillTask) SimpleSkillTask_Counter.TriggerRateTable = {10, 12, 15, 20} --触发几率 SimpleSkillTask_Counter.AdditionDamageRateTable = {0.05, 0.08, 0.12, 0.18} --伤害加成百分比 SimpleSkillTask_Counter.CurTriggerRate = 0 SimpleSkillTask_Counter.CurDamageRate = 0.0 function SimpleSkillTask_Counter:ctor(OwnerSkill) SimpleSkillTask_Counter.super.ctor(self, OwnerSkill) end function SimpleSkillTask_Counter:InitTaskFromData(TaskData, CasterPawn) SimpleSkillTask.InitTaskFromData(self, TaskData, CasterPawn) self.TaskName = "Counter" end function SimpleSkillTask_Counter:UpdateSkillLevel(NewSkillLevel) SimpleSkillTask.UpdateSkillLevel(self, NewSkillLevel) self.CurTriggerRate = self.TriggerRateTable[self.SkillLevel] self.CurDamageRate = self.AdditionDamageRateTable[self.SkillLevel] end function SimpleSkillTask_Counter:ActivateTask() SimpleSkillTask.ActivateTask(self) self.CasterPawn.OnReceiveDamageDelegate:Add(self.OnCasterPawnReceiveDamage, self) end function SimpleSkillTask_Counter:DeactivateTask() self.CasterPawn.OnReceiveDamageDelegate:Remove(self.OnCasterPawnReceiveDamage, self) end function SimpleSkillTask_Counter:OnCasterPawnReceiveDamage(Pawn, DamageAmount, EventInstigator, DamageCauser) if Pawn ~= self.CasterPawn then UE.Log("[SimpleSkillTask_Counter] invalid Pawn. Pawn.PlayerKey=%d, CasterPawn.PlayerKey=%d", Pawn.PlayerKey, self.CasterPawn.PlayerKey) return end local Rand = math.random(1, 100) if Rand > self.CurTriggerRate then return end local DamageAmount = 200 + UGCPawnAttrSystem.GetHealthMax(self.CasterPawn) * 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, nil) end return SimpleSkillTask_Counter;