104 lines
3.8 KiB
Lua
104 lines
3.8 KiB
Lua
---@class BP_MonsterWeaponRecasting_C:BP_MonsterChallenge_C
|
|
---@field ShieldParticle UParticleSystemComponent
|
|
---@field UAESkillManager UUAESkillManagerComponent
|
|
---@field ShieldValue float
|
|
---@field ShieldBreachParticle UParticleSystem
|
|
--Edit Below--
|
|
--local BP_MonsterWeaponRecasting = {};
|
|
local MonsterChallenge = require('Script.Blueprint.Monster.BP_MonsterChallenge')
|
|
|
|
local BP_MonsterWeaponRecasting = setmetatable(
|
|
{
|
|
ID = 1003,
|
|
--TargetPlayerKey = -1,
|
|
MonsterName = "WeaponRecasting",
|
|
},
|
|
{
|
|
__index = MonsterChallenge,
|
|
__metatable = MonsterChallenge
|
|
}
|
|
);
|
|
|
|
function BP_MonsterWeaponRecasting:ReceiveBeginPlayEx()
|
|
MonsterChallenge.ReceiveBeginPlayEx(self)
|
|
if self:HasAuthority() then
|
|
self:AddSkillShield()
|
|
self:AddSkillBloodthirsty()
|
|
end
|
|
end
|
|
|
|
function BP_MonsterWeaponRecasting:AddSkillBloodthirsty()
|
|
EventSystem.SetTimerLoop(
|
|
self,
|
|
function ()
|
|
|
|
self:GetController():GetBlackboardComponent():SetValueAsBool("IsSpeedIncrease", true)
|
|
if not self:GetController():GetBlackboardComponent():GetValueAsBool("IsSpeedIncrease") then
|
|
print("[SKYERROR] IsSpeedIncrease Setting Failed [true] : " .. tostring(self:GetController():GetBlackboardComponent():GetValueAsBool("IsSpeedIncrease")))
|
|
end
|
|
EventSystem.SetTimer(
|
|
self,
|
|
function ()
|
|
self:GetController():GetBlackboardComponent():SetValueAsBool("IsSpeedIncrease", false)
|
|
|
|
end,
|
|
5
|
|
)
|
|
end,
|
|
15
|
|
)
|
|
|
|
end
|
|
function BP_MonsterWeaponRecasting:AddSkillShield()
|
|
|
|
self:AddModifyDamageDelegationFun(
|
|
"SkillShield",
|
|
function (DamageAmount, DamageEvent, EventInstigator, DamageCauser)
|
|
if self.ShieldValue > 0 then
|
|
self.ShieldValue = self.ShieldValue - DamageAmount
|
|
if self.ShieldValue > 0 then
|
|
return 0
|
|
else
|
|
--self.ShieldParticle:SetVisibility(false)
|
|
UnrealNetwork.CallUnrealRPC_Multicast(self, "MulticastRPC_SetParticleVisibility", false)
|
|
UnrealNetwork.CallUnrealRPC_Multicast(self, "MulticastRPC_SpawnParticleSystemAttach")
|
|
local GivePawnDamage = self.AttackValue
|
|
local CanDamagePlayers = self:GetCanDamagePlayer()
|
|
if CanDamagePlayers and table.hasValue(CanDamagePlayers, EventInstigator:K2_GetPawn()) then
|
|
self:MonsterApplyDamage(EventInstigator:K2_GetPawn(), GivePawnDamage)
|
|
end
|
|
return -self.ShieldValue
|
|
end
|
|
else
|
|
return DamageAmount
|
|
end
|
|
end
|
|
)
|
|
self.SkillShieldHandle = EventSystem.SetTimerLoop(
|
|
self,
|
|
function ()
|
|
|
|
UnrealNetwork.CallUnrealRPC_Multicast(self, "MulticastRPC_SetParticleVisibility", true)
|
|
self.ShieldValue = UGCSimpleCharacterSystem.GetHealthMax(self) / 2
|
|
end,
|
|
20
|
|
)
|
|
|
|
end
|
|
function BP_MonsterWeaponRecasting:MulticastRPC_SpawnParticleSystemAttach()
|
|
GameplayStatics.SpawnEmitterAttached(self.ShieldBreachParticle, self.CapsuleComponent, "", VectorHelper.VectorZero(), VectorHelper.RotZero(), VectorHelper.ScaleOne(), EAttachLocation.SnapToTarget, true)
|
|
end
|
|
function BP_MonsterWeaponRecasting:MulticastRPC_SetParticleVisibility(NewVisibility)
|
|
if self:HasAuthority() then return end
|
|
self.ShieldParticle:SetVisibility(NewVisibility)
|
|
end
|
|
|
|
function BP_MonsterWeaponRecasting:ReceiveOnMonsterDeath()
|
|
MonsterChallenge.ReceiveOnMonsterDeath(self)
|
|
if self:HasAuthority() then
|
|
if self.SkillShieldHandle then EventSystem.StopTimer(self.SkillShieldHandle) self.SkillShieldHandle = nil return end
|
|
else
|
|
end
|
|
end
|
|
|
|
return BP_MonsterWeaponRecasting; |