aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-02-27 00:13:11 +0100
committerShauren <shauren.trinity@gmail.com>2024-02-27 00:13:11 +0100
commitbe3dc89c32e5b60df4c026d8b19505e529e199b6 (patch)
treec40a8251f2e8bbb79ae0d11e4a973a07260168ae /src
parent1572b8acab75df6117ab944f8ee8ab1f68500852 (diff)
Core/Creatures: Implemented CREATURE_STATIC_FLAG_5_NO_LEAVECOMBAT_STATE_RESTORE
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/CreatureAI.cpp3
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp13
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();
}