59 lines
2.2 KiB
Lua
59 lines
2.2 KiB
Lua
|
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;
|