From d175373d4463ab2a162c2652cb4343519121f838 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 21 Feb 2024 18:03:12 -0500 Subject: [PATCH] Core/Creatures: Implemented CREATURE_STATIC_FLAG_3_NO_THREAT_FEEDBACK Port From (https://github.com/TrinityCore/TrinityCore/commit/3fd1a2b78c8791576679e93ce1d43038db2212c5) --- Source/Game/Combat/ThreatManager.cs | 21 +++++++++++++++++---- Source/Game/Entities/Creature/Creature.cs | 5 ++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Source/Game/Combat/ThreatManager.cs b/Source/Game/Combat/ThreatManager.cs index 7478f134a..4d57a460b 100644 --- a/Source/Game/Combat/ThreatManager.cs +++ b/Source/Game/Combat/ThreatManager.cs @@ -669,6 +669,10 @@ namespace Game.Combat void SendClearAllThreatToClients() { + Creature owner = _owner.ToCreature(); + if (owner != null && owner.IsThreatFeedbackDisabled()) + return; + ThreatClear threatClear = new(); threatClear.UnitGUID = _owner.GetGUID(); _owner.SendMessageToSet(threatClear, false); @@ -676,6 +680,10 @@ namespace Game.Combat public void SendRemoveToClients(Unit victim) { + Creature owner = _owner.ToCreature(); + if (owner != null && owner.IsThreatFeedbackDisabled()) + return; + ThreatRemove threatRemove = new(); threatRemove.UnitGUID = _owner.GetGUID(); threatRemove.AboutGUID = victim.GetGUID(); @@ -684,6 +692,10 @@ namespace Game.Combat void SendThreatListToClients(bool newHighest) { + Creature owner = _owner.ToCreature(); + if (owner != null && owner.IsThreatFeedbackDisabled()) + return; + void fillSharedPacketDataAndSend(dynamic packet) { packet.UnitGUID = _owner.GetGUID(); @@ -961,16 +973,17 @@ namespace Game.Combat public bool IsTaunting() { return _taunted >= TauntState.Taunt; } public bool IsDetaunted() { return _taunted == TauntState.Detaunt; } - public void SetThreat(float amount) - { + public void SetThreat(float amount) + { _baseAmount = amount; - ListNotifyChanged(); + ListNotifyChanged(); } public void ModifyThreatByPercent(int percent) { if (percent != 0) - ScaleThreat(0.01f * (100f + percent)); } + ScaleThreat(0.01f * (100f + percent)); + } public void ListNotifyChanged() { _mgr.ListNotifyChanged(); } diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 202383916..59a8d7e1b 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3352,7 +3352,10 @@ namespace Game.Entities public override void SetImmuneToPC(bool apply) { SetImmuneToPC(apply, HasReactState(ReactStates.Passive)); } public override void SetImmuneToNPC(bool apply) { SetImmuneToNPC(apply, HasReactState(ReactStates.Passive)); } - void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CreatureStaticFlags.Unkillable, unkillable); } + public bool IsThreatFeedbackDisabled() { return _staticFlags.HasFlag(CreatureStaticFlags3.NoThreatFeedback); } + public void SetNoThreatFeedback(bool noThreatFeedback) { _staticFlags.ApplyFlag(CreatureStaticFlags3.NoThreatFeedback, noThreatFeedback); } + + public void SetUnkillable(bool unkillable) { _staticFlags.ApplyFlag(CreatureStaticFlags.Unkillable, unkillable); } public bool IsInEvadeMode() { return HasUnitState(UnitState.Evade); } public bool IsEvadingAttacks() { return IsInEvadeMode() || CanNotReachTarget(); }