---@class BP_Skill_ToxicRain_C:BP_Skill_Actor_C --Edit Below-- local SkillActorBase = require('Script.Blueprint.SceneObject.SkillActor.BP_Skill_Actor') local BP_Skill_ToxicRain = setmetatable( { AdditionDamageRateTable = {1.2, 1.8, 2.4, 3.0}, DefenceReductionRateTable = {0.95, 0.90, 0.85, 0.75}, CurDamageRate = 0.0, CurDefenceReductionRate = 0.0, AffectedMonster = {}, TimerHandle = nil, }, { __index = SkillActorBase, __metatable = SkillActorBase } ) function BP_Skill_ToxicRain:ReceiveBeginPlay() SkillActorBase.ReceiveBeginPlay(self) self:SetSphereRadius(150) end function BP_Skill_ToxicRain:ReceiveEndPlay() for Monster, CachedDefence in pairs(self.AffectedMonster) do if Monster ~= nil and UE.IsValid(Monster) then Monster.PhysicalDefense = CachedDefence end end self.AffectedMonster = {} if self.TimerHandle then EventSystem.StopTimer(self.TimerHandle) end self.SuperClass.ReceiveEndPlay(self) end function BP_Skill_ToxicRain:SetLevel(NewLevel) SkillActorBase.SetLevel(self, NewLevel) self.CurDamageRate = self.AdditionDamageRateTable[NewLevel] self.CurDefenceReductionRate = self.DefenceReductionRateTable[NewLevel] end function BP_Skill_ToxicRain:OnMonsterBeginOverlap(Monster) if self.TimerHandle == nil then self:SetupTimer() end self.AffectedMonster[Monster] = Monster.PhysicalDefense Monster.PhysicalDefense = Monster.PhysicalDefense * self.CurDefenceReductionRate end function BP_Skill_ToxicRain:OnMonsterEndOverlap(Monster) if self.AffectedMonster[Monster] then Monster.PhysicalDefense = self.AffectedMonster[Monster] end end function BP_Skill_ToxicRain:SetupTimer() self.TimerHandle = EventSystem.SetTimerLoop(self, function() local DamageAmount = 120 + UGCGameSystem.GetPlayerStateByPlayerKey(self.CasterPawn.PlayerKey).Attributes[AttributeType.Base].Base_Attack * self.CurDamageRate local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey) for Monster, CachedDefence in pairs(self.AffectedMonster) do if Monster ~= nil and UE.IsValid(Monster) and UGCSimpleCharacterSystem.GetHealth(Monster) > 0 then UGCGameSystem.ApplyDamage(Monster, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage) end end end, 1.0) end return BP_Skill_ToxicRain;