100 lines
4.1 KiB
Lua
100 lines
4.1 KiB
Lua
|
---@class BP_Crystal_C:BP_DamageableActor_C
|
||
|
---@field NarrationWidget UWidgetComponent
|
||
|
---@field Sphere USphereComponent
|
||
|
---@field Chicken USkeletalMeshComponent
|
||
|
---@field HealthWidget UWidgetComponent
|
||
|
---@field Capsule UCapsuleComponent
|
||
|
---@field SM_Floor UStaticMeshComponent
|
||
|
---@field Arrow_4 UArrowComponent
|
||
|
---@field Arrow_3 UArrowComponent
|
||
|
---@field Arrow_2 UArrowComponent
|
||
|
---@field Arrow_1 UArrowComponent
|
||
|
---@field BuffComponent USTBaseBuffSystemComponent
|
||
|
--Edit Below--
|
||
|
local BP_Crystal = {
|
||
|
bHasNoticedAttacked = false,
|
||
|
bHasNoticedBossAttacked = false,
|
||
|
};
|
||
|
|
||
|
function BP_Crystal:ReceiveBeginPlay()
|
||
|
BP_Crystal.SuperClass.ReceiveBeginPlay(self)
|
||
|
|
||
|
self.OnCurrentHpReachedZeroByAnyDamage:Add(
|
||
|
function(BP_Crystal, Damage, DamageType, InstigatedBy, DamageCauser)
|
||
|
UE.Log("[BP_Crystal:OnCurrentHpReachedZeroByAnyDamage] BP_Crystal=%s, Damage=%s, DamageType=%s, InstigatedBy=%s, DamageCauser=%s",
|
||
|
KismetSystemLibrary.GetObjectName(BP_Crystal),
|
||
|
tostring(Damage),
|
||
|
tostring(DamageType),
|
||
|
KismetSystemLibrary.GetObjectName(InstigatedBy),
|
||
|
KismetSystemLibrary.GetObjectName(DamageCauser))
|
||
|
|
||
|
--UnrealNetwork.CallUnrealRPC_Multicast(self, self, "Client_MulticastRPC_SetFailedSkeletalLocation", self)
|
||
|
|
||
|
-- EventSystem:SendEvent(EventType.OnCrystalHPReachedZero)
|
||
|
EventSystem:SendEvent(EventType.OnSendGameEnd, "ChickenDead")
|
||
|
end
|
||
|
)
|
||
|
|
||
|
self.OnAnyDamage:Add(
|
||
|
function(BP_Crystal, Damage, DamageType, InstigatedBy, DamageCauser)
|
||
|
UE.Log("[BP_Crystal:OnAnyDamage] BP_Crystal=%s, Damage=%s, DamageType=%s, InstigatedBy=%s, DamageCauser=%s",
|
||
|
KismetSystemLibrary.GetObjectName(BP_Crystal),
|
||
|
tostring(Damage),
|
||
|
tostring(DamageType),
|
||
|
KismetSystemLibrary.GetObjectName(InstigatedBy),
|
||
|
KismetSystemLibrary.GetObjectName(DamageCauser))
|
||
|
if self.bHasNoticedAttacked == false then
|
||
|
NoticeTipsTools.MulticastNoticeTips(ECustomNoticeType.GlobalWarningNotice, "光子鸡正遭到攻击", 6.0, true)
|
||
|
self.bHasNoticedAttacked = true
|
||
|
EventSystem.SetTimer(self, function()
|
||
|
self.bHasNoticedAttacked = false
|
||
|
end, 6.5)
|
||
|
end
|
||
|
|
||
|
if self.bHasNoticedBossAttacked == false then
|
||
|
if UE.IsValid(DamageCauser) and UE.IsA(DamageCauser, UE.LoadClass(BPClassPath.MonsterBase)) then
|
||
|
if DamageCauser:GetMonsterType() == EMonsterType.Boss then
|
||
|
self.bHasNoticedBossAttacked = true
|
||
|
UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_ShowCrystalAttackedByBoss")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
)
|
||
|
end
|
||
|
|
||
|
function BP_Crystal:GetAvailableServerRPCs()
|
||
|
return
|
||
|
-- "Client_MulticastRPC_SetFailedSkeletalLocation"
|
||
|
end
|
||
|
|
||
|
function BP_Crystal:OnRep_CurrentHp()
|
||
|
BP_Crystal.SuperClass.OnRep_CurrentHp(self)
|
||
|
|
||
|
if (not UGCGameSystem.IsServer()) and EventSystem and UE.IsValid(UGCGameSystem.GameState) then
|
||
|
local HpPercentage = self.CurrentHp / self.MaxHp
|
||
|
UE.Log("[BP_Crystal:OnRep_CurrentHp] CurrentHP = %.2f, Max=%.2f, Percent = %.2f", self.CurrentHp, self.MaxHp, HpPercentage)
|
||
|
EventSystem:SendEvent(EventType.OnCrystalHPChanged, HpPercentage)
|
||
|
|
||
|
self.NarrationWidget.Widget:UpdateOwnerHealthPercent(HpPercentage)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_Crystal:BP_PreTakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser)
|
||
|
if UE.IsValid(DamageCauser) and UE.IsA(DamageCauser, UE.LoadClass(BPClassPath.MonsterBase)) then
|
||
|
local Type = DamageCauser:GetMonsterType()
|
||
|
if Type == EMonsterType.Boss then
|
||
|
return 5.0
|
||
|
elseif Type == EMonsterType.Common then
|
||
|
return 1.0
|
||
|
end
|
||
|
end
|
||
|
return 0.0
|
||
|
end
|
||
|
|
||
|
function BP_Crystal:Client_MulticastRPC_SetFailedSkeletalLocation(Crystal)
|
||
|
Crystal.Chicken:K2_SetRelativeRotation(VectorHelper.NewRot(-90, 0, 180), false, nil, false)
|
||
|
Crystal.Chicken:K2_SetRelativeLocation(VectorHelper.NewVec(0, -180, 10), false, nil, false)
|
||
|
end
|
||
|
|
||
|
return BP_Crystal;
|