2025-01-08 22:46:12 +08:00

63 lines
1.9 KiB
Lua

---@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;