diff options
-rw-r--r-- | src/server/game/AI/CreatureAI.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 3 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp | 13 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 1c33aec2a69..4a4edcfbb32 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -307,7 +307,8 @@ bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/) return false; } - me->RemoveAurasOnEvade(); + if (me->IsStateRestoredOnEvade()) + me->RemoveAurasOnEvade(); me->CombatStop(true); if (!me->IsTapListNotClearedOnEvade()) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 1e3735ad6b2..cae422a2f09 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -179,6 +179,9 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, 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 a5d2067d818..a62f0700f48 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -147,11 +147,14 @@ void HomeMovementGenerator<Creature>::DoFinalize(Creature* owner, bool active, b if (!owner->HasCanSwimFlagOutOfCombat()) owner->RemoveUnitFlag(UNIT_FLAG_CAN_SWIM); - 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); + } if (CreatureAI* ai = owner->AI()) ai->JustReachedHome(); } |