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

58 lines
2.0 KiB
Lua

---@class BP_Skill_IceFrost_C:BP_Skill_Actor_C
--Edit Below--
local SkillActorBase = require('Script.Blueprint.SceneObject.SkillActor.BP_Skill_Actor')
local BP_Skill_IceFrost = setmetatable(
{
AdditionDamageRateTable = {2.0, 3.0, 4.0, 5.0},
SpeedScaleReductionRateTable = {0.8, 0.7, 0.6, 0.5},
CurDamageRate = 0.0,
CurSpeedScaleReductionRate = 0.0,
CachedSpeedScales = {},
},
{
__index = SkillActorBase,
__metatable = SkillActorBase
}
);
function BP_Skill_IceFrost:ReceiveBeginPlay()
SkillActorBase.ReceiveBeginPlay(self)
self:SetSphereRadius(200)
end
function BP_Skill_IceFrost:ReceiveEndPlay()
for Monster, SpeedScale in pairs(self.CachedSpeedScales) do
if Monster ~= nil and UE.IsValid(Monster) then
UGCSimpleCharacterSystem.SetSpeedScale(Monster, SpeedScale)
end
end
self.CachedSpeedScales = {}
self.SuperClass.ReceiveEndPlay(self)
end
function BP_Skill_IceFrost:SetLevel(NewLevel)
SkillActorBase.SetLevel(self, NewLevel)
self.CurDamageRate = self.AdditionDamageRateTable[NewLevel]
self.CurSpeedScaleReductionRate = self.SpeedScaleReductionRateTable[NewLevel]
end
function BP_Skill_IceFrost:OnMonsterBeginOverlap(Monster)
local SpeedScale = UGCSimpleCharacterSystem.GetSpeedScale(Monster)
self.CachedSpeedScales[Monster] = SpeedScale
UGCSimpleCharacterSystem.SetSpeedScale(Monster, SpeedScale * self.CurSpeedScaleReductionRate)
local DamageAmount = 100 + UGCGameSystem.GetPlayerStateByPlayerKey(self.CasterPawn.PlayerKey).Attributes[AttributeType.Base].Base_Attack * self.CurDamageRate
local EventInstigator = UGCGameSystem.GetPlayerControllerByPlayerKey(self.CasterPawn.PlayerKey)
UGCGameSystem.ApplyDamage(Monster, DamageAmount, EventInstigator, self.CasterPawn, EDamageType.ShootDamage)
end
function BP_Skill_IceFrost:OnMonsterEndOverlap(Monster)
if self.CachedSpeedScales[Monster] then
UGCSimpleCharacterSystem.SetSpeedScale(Monster, self.CachedSpeedScales[Monster])
end
end
return BP_Skill_IceFrost;