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

77 lines
2.5 KiB
Lua

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