UGCProjects/GZJ/Script/Blueprint/Monster/BP_MonsterWeaponRecasting.lua
2025-01-08 22:46:12 +08:00

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;