From 8c7b6f2bcf88eb88fa04b59e961a77c10e9eac2f Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 15 Mar 2025 07:02:51 +0100 Subject: [PATCH] Core/Creatures: Implemented CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE --- src/server/game/AI/CreatureAI.cpp | 3 ++- src/server/game/Entities/Creature/Creature.h | 3 +++ .../HomeMovementGenerator.cpp | 18 +++++++++++------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 646b6a1257..6debb9f127 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -304,7 +304,8 @@ bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/) return false; } - me->RemoveAurasOnEvade(); + if (me->IsStateRestoredOnEvade()) + me->RemoveAurasOnEvade(); me->CombatStop(true); me->LoadCreaturesAddon(); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index d002c3c688..b610e740fa 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -170,6 +170,9 @@ class TC_GAME_API Creature : public Unit, public GridObject, public Ma bool IsInEvadeMode() const { return HasUnitState(UNIT_STATE_EVADE); } bool IsEvadingAttacks() const { return IsInEvadeMode() || CanNotReachTarget(); } + bool IsStateRestoredOnEvade() const { return !HasFlag(CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE); } + void SetRestoreStateOnEvade(bool restoreOnEvade) { _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE, !restoreOnEvade); } + bool AIM_Destroy(); bool AIM_Create(CreatureAI* ai = nullptr); bool AIM_Initialize(CreatureAI* ai = nullptr); diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index aa8863fa50..7ca8596e6a 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -81,14 +81,18 @@ void HomeMovementGenerator::DoFinalize(Creature* owner) { if (_arrived) { - owner->ClearUnitState(UNIT_STATE_EVADE); - owner->SetWalk(true); - owner->InitializeMovementCapabilities(); - owner->LoadCreaturesAddon(); - if (owner->IsVehicle()) - owner->GetVehicleKit()->Reset(true); + if (owner->IsStateRestoredOnEvade()) + { + owner->ClearUnitState(UNIT_STATE_EVADE); + owner->SetWalk(true); + owner->InitializeMovementCapabilities(); + owner->SetSpawnHealth(); + owner->LoadCreaturesAddon(); + if (owner->IsVehicle()) + owner->GetVehicleKit()->Reset(true); + } + owner->AI()->JustReachedHome(); - owner->SetSpawnHealth(); } }