From dcfcbd779a8d2734d5a7c22875fd45ed2b450075 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 27 Feb 2024 13:49:15 -0500 Subject: [PATCH] Core/Creatures: Implemented CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE Port From (https://github.com/TrinityCore/TrinityCore/commit/be3dc89c32e5b60df4c026d8b19505e529e199b6) --- Source/Game/AI/CoreAI/CreatureAI.cs | 3 ++- Source/Game/Entities/Creature/Creature.cs | 3 +++ Source/Game/Movement/Generators/HomeMovement.cs | 13 ++++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Source/Game/AI/CoreAI/CreatureAI.cs b/Source/Game/AI/CoreAI/CreatureAI.cs index 6707b788e..a1f72d05c 100644 --- a/Source/Game/AI/CoreAI/CreatureAI.cs +++ b/Source/Game/AI/CoreAI/CreatureAI.cs @@ -290,7 +290,8 @@ namespace Game.AI return false; } - me.RemoveAurasOnEvade(); + if (me.IsStateRestoredOnEvade()) + me.RemoveAurasOnEvade(); // sometimes bosses stuck in combat? me.CombatStop(true); diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 6812c9066..cc5273489 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3404,6 +3404,9 @@ namespace Game.Entities public bool IsInEvadeMode() { return HasUnitState(UnitState.Evade); } public bool IsEvadingAttacks() { return IsInEvadeMode() || CanNotReachTarget(); } + public bool IsStateRestoredOnEvade() { return !HasFlag(CreatureStaticFlags5.NoLeavecombatStateRestore); } + public void SetRestoreStateOnEvade(bool restoreOnEvade) { _staticFlags.ApplyFlag(CreatureStaticFlags5.NoLeavecombatStateRestore, !restoreOnEvade); } + public override CreatureAI GetAI() { return (CreatureAI)i_AI; diff --git a/Source/Game/Movement/Generators/HomeMovement.cs b/Source/Game/Movement/Generators/HomeMovement.cs index 355c045db..75fb77777 100644 --- a/Source/Game/Movement/Generators/HomeMovement.cs +++ b/Source/Game/Movement/Generators/HomeMovement.cs @@ -63,11 +63,14 @@ namespace Game.AI if (!owner.HasCanSwimFlagOutOfCombat()) owner.RemoveUnitFlag(UnitFlags.CanSwim); - owner.SetSpawnHealth(); - owner.LoadCreaturesAddon(); - owner.LoadCreaturesSparringHealth(); - if (owner.IsVehicle()) - owner.GetVehicleKit().Reset(true); + if (owner.IsStateRestoredOnEvade()) + { + owner.SetSpawnHealth(); + owner.LoadCreaturesAddon(); + owner.LoadCreaturesSparringHealth(); + if (owner.IsVehicle()) + owner.GetVehicleKit().Reset(true); + } CreatureAI ai = owner.GetAI(); if (ai != null)