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