---@class BP_Skill_FireDomain_C:BP_Skill_Actor_C --Edit Below-- local SkillActorBase = require('Script.Blueprint.SceneObject.SkillActor.BP_Skill_Actor') local BP_Skill_FireDomain = setmetatable( { AdditionInRangeDamageTable = {200, 400, 600, 800}, CurInRangeDamage = 0.0, InRangeMonsters = {}, }, { __index = SkillActorBase, __metatable = SkillActorBase } ); function BP_Skill_FireDomain:ReceiveBeginPlay() SkillActorBase.ReceiveBeginPlay(self) self:SetSphereRadius(200) if self:HasAuthority() then self.LoopTimerHandle = EventSystem.SetTimerLoop(self, function() if self.CasterPawn == nil or UE.IsValid(self.CasterPawn) == false then return end local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey) for _, Monster in pairs(self.InRangeMonsters) do if Monster ~= nil and UE.IsValid(Monster) and Monster.bIsDead == false then UGCGameSystem.ApplyDamage(Monster, self.CurInRangeDamage, EventInstigator, self.CasterPawn, EDamageType.ShootDamage) end end end, 1.0) end end function BP_Skill_FireDomain:ReceiveEndPlay() if self:HasAuthority() then if UE.IsValid(self.LoopTimerHandle) then EventSystem.StopTimer(self.LoopTimerHandle) end end self.InRangeMonsters = {} self.SuperClass.ReceiveEndPlay(self) end function BP_Skill_FireDomain:SetLevel(NewLevel) SkillActorBase.SetLevel(self, NewLevel) self.CurInRangeDamage = self.AdditionInRangeDamageTable[NewLevel] end function BP_Skill_FireDomain:OnMonsterBeginOverlap(Monster) table.insert(self.InRangeMonsters, Monster) end function BP_Skill_FireDomain:OnMonsterEndOverlap(Monster) table.removeValue(self.InRangeMonsters, Monster, true) end return BP_Skill_FireDomain;