diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-02-27 00:13:11 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-02-27 00:13:11 +0100 |
commit | be3dc89c32e5b60df4c026d8b19505e529e199b6 (patch) | |
tree | c40a8251f2e8bbb79ae0d11e4a973a07260168ae /src | |
parent | 1572b8acab75df6117ab944f8ee8ab1f68500852 (diff) |
Core/Creatures: Implemented CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE
Diffstat (limited to 'src')
-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(); } |