diff --git a/src/common/Logging/enuminfo_LogCommon.cpp b/src/common/Logging/enuminfo_LogCommon.cpp
index 9f8ae2511..da8cbc449 100644
--- a/src/common/Logging/enuminfo_LogCommon.cpp
+++ b/src/common/Logging/enuminfo_LogCommon.cpp
@@ -15,8 +15,8 @@
* with this program. If not, see .
*/
-#include "Define.h"
#include "LogCommon.h"
+#include "Define.h"
#include "SmartEnum.h"
#include
diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp
index 39406af30..bc9aca3b7 100644
--- a/src/server/game/AI/CoreAI/GuardAI.cpp
+++ b/src/server/game/AI/CoreAI/GuardAI.cpp
@@ -37,7 +37,7 @@ void GuardAI::Reset()
me->CastSpell(me, 18950 /*SPELL_INVISIBILITY_AND_STEALTH_DETECTION*/, true);
}
-void GuardAI::EnterEvadeMode()
+void GuardAI::EnterEvadeMode(EvadeReason /*why*/)
{
if (!me->IsAlive())
{
diff --git a/src/server/game/AI/CoreAI/GuardAI.h b/src/server/game/AI/CoreAI/GuardAI.h
index 1f76ed135..c48b93a9f 100644
--- a/src/server/game/AI/CoreAI/GuardAI.h
+++ b/src/server/game/AI/CoreAI/GuardAI.h
@@ -30,7 +30,7 @@ public:
static int Permissible(Creature const* creature);
void Reset() override;
- void EnterEvadeMode() override;
+ void EnterEvadeMode(EvadeReason /*why*/) override;
void JustDied(Unit* killer) override;
};
#endif
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 5220d81e8..1a576f47e 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -26,7 +26,7 @@ NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState(
void PassiveAI::UpdateAI(uint32)
{
if (me->IsInCombat() && me->getAttackers().empty())
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
}
void PossessedAI::AttackStart(Unit* target)
@@ -66,11 +66,11 @@ void CritterAI::DamageTaken(Unit*, uint32&, DamageEffectType, SpellSchoolMask)
_combatTimer = 1;
}
-void CritterAI::EnterEvadeMode()
+void CritterAI::EnterEvadeMode(EvadeReason why)
{
if (me->HasUnitState(UNIT_STATE_FLEEING))
me->SetControlled(false, UNIT_STATE_FLEEING);
- CreatureAI::EnterEvadeMode();
+ CreatureAI::EnterEvadeMode(why);
_combatTimer = 0;
}
@@ -80,7 +80,7 @@ void CritterAI::UpdateAI(uint32 diff)
{
_combatTimer += diff;
if (_combatTimer >= 5000)
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h
index 5bb52196b..9f17a5935 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.h
+++ b/src/server/game/AI/CoreAI/PassiveAI.h
@@ -41,7 +41,7 @@ public:
void MoveInLineOfSight(Unit*) override {}
void AttackStart(Unit* target) override;
void UpdateAI(uint32) override;
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void JustDied(Unit*) override;
void KilledUnit(Unit* victim) override;
@@ -57,7 +57,7 @@ public:
void MoveInLineOfSight(Unit*) override {}
void AttackStart(Unit*) override {}
void UpdateAI(uint32) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void OnCharmed(bool /*apply*/) override {}
static int Permissible(Creature const*) { return PERMIT_BASE_IDLE; }
@@ -69,7 +69,7 @@ public:
explicit CritterAI(Creature* c) : PassiveAI(c) { _combatTimer = 0; }
void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override;
- void EnterEvadeMode() override;
+ void EnterEvadeMode(EvadeReason why) override;
void UpdateAI(uint32) override;
// Xinef: Added
diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h
index 952e9843f..bf7685289 100644
--- a/src/server/game/AI/CoreAI/PetAI.h
+++ b/src/server/game/AI/CoreAI/PetAI.h
@@ -64,7 +64,8 @@ public:
//
void MoveInLineOfSight(Unit* /*who*/) override {} // CreatureAI interferes with returning pets
void MoveInLineOfSight_Safe(Unit* /*who*/) {} // CreatureAI interferes with returning pets
- void EnterEvadeMode() override {} // For fleeing, pets don't use this type of Evade mechanic
+
+ void EnterEvadeMode(EvadeReason /*why*/) override {} // For fleeing, pets don't use this type of Evade mechanic
void SpellHit(Unit* caster, SpellInfo const* spellInfo) override;
void PetStopAttack() override;
diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp
index 60f7878db..77560df6b 100644
--- a/src/server/game/AI/CoreAI/TotemAI.cpp
+++ b/src/server/game/AI/CoreAI/TotemAI.cpp
@@ -50,7 +50,7 @@ void TotemAI::MoveInLineOfSight(Unit* /*who*/)
{
}
-void TotemAI::EnterEvadeMode()
+void TotemAI::EnterEvadeMode(EvadeReason /*why*/)
{
me->CombatStop(true);
}
diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h
index f8bb54587..837d5e0fd 100644
--- a/src/server/game/AI/CoreAI/TotemAI.h
+++ b/src/server/game/AI/CoreAI/TotemAI.h
@@ -31,8 +31,10 @@ public:
void MoveInLineOfSight(Unit* who) override;
void AttackStart(Unit* victim) override;
- void EnterEvadeMode() override;
+
+ void EnterEvadeMode(EvadeReason /*why*/) override;
void SpellHit(Unit* /*caster*/, SpellInfo const* /*spellInfo*/) override;
+
void DoAction(int32 param) override;
void UpdateAI(uint32 diff) override;
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 2b06355b9..fd57983c9 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see .
*/
+#include "AreaBoundary.h"
#include "CreatureAI.h"
#include "Creature.h"
#include "CreatureAIImpl.h"
@@ -24,6 +25,7 @@
#include "MapReference.h"
#include "Player.h"
#include "Vehicle.h"
+#include "Language.h"
class PhasedRespawn : public BasicEvent
{
@@ -196,9 +198,9 @@ void CreatureAI::TriggerAlert(Unit const* who) const
me->GetMotionMaster()->MoveDistract(5 * IN_MILLISECONDS);
}
-void CreatureAI::EnterEvadeMode()
+void CreatureAI::EnterEvadeMode(EvadeReason why)
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
LOG_DEBUG("entities.unit", "Creature {} enters evade mode.", me->GetEntry());
@@ -290,7 +292,7 @@ bool CreatureAI::UpdateVictim()
return true;
}
-bool CreatureAI::_EnterEvadeMode()
+bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/)
{
if (!me->IsAlive())
{
@@ -357,6 +359,44 @@ void CreatureAI::MoveBackwardsChecks() {
me->GetMotionMaster()->MoveBackwards(victim, moveDist);
}
+bool CreatureAI::IsInBoundary(Position const* who) const
+{
+ if (!_boundary)
+ return true;
+
+ if (!who)
+ who = me;
+
+ return (CreatureAI::IsInBounds(*_boundary, who) != _negateBoundary);
+}
+
+bool CreatureAI::IsInBounds(CreatureBoundary const& boundary, Position const* pos)
+{
+ for (AreaBoundary const* areaBoundary : boundary)
+ if (!areaBoundary->IsWithinBoundary(pos))
+ return false;
+
+ return true;
+}
+
+bool CreatureAI::CheckInRoom()
+{
+ if (IsInBoundary())
+ return true;
+ else
+ {
+ EnterEvadeMode(EVADE_REASON_BOUNDARY);
+ return false;
+ }
+}
+
+void CreatureAI::SetBoundary(CreatureBoundary const* boundary, bool negateBoundaries /*= false*/)
+{
+ _boundary = boundary;
+ _negateBoundary = negateBoundaries;
+ me->DoImmediateBoundaryCheck();
+}
+
Creature* CreatureAI::DoSummon(uint32 entry, const Position& pos, uint32 despawnTime, TempSummonType summonType)
{
return me->SummonCreature(entry, pos, summonType, despawnTime);
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index a9a82989f..6fac18ba3 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -18,6 +18,7 @@
#ifndef ACORE_CREATUREAI_H
#define ACORE_CREATUREAI_H
+#include "AreaBoundary.h"
#include "Common.h"
#include "Creature.h"
#include "UnitAI.h"
@@ -29,6 +30,8 @@ class Creature;
class Player;
class SpellInfo;
+typedef std::vector CreatureBoundary;
+
#define TIME_INTERVAL_LOOK 5000
#define VISIBILITY_RANGE 10000
@@ -78,10 +81,19 @@ protected:
Creature* DoSummon(uint32 entry, Position const& pos, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
Creature* DoSummon(uint32 entry, WorldObject* obj, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
-
public:
+ // EnumUtils: DESCRIBE THIS
+ enum EvadeReason
+ {
+ EVADE_REASON_NO_HOSTILES, // the creature's threat list is empty
+ EVADE_REASON_BOUNDARY, // the creature has moved outside its evade boundary
+ EVADE_REASON_SEQUENCE_BREAK, // this is a boss and the pre-requisite encounters for engaging it are not defeated yet
+ EVADE_REASON_OTHER
+ };
+
void Talk(uint8 id, WorldObject const* whisperTarget = nullptr);
- explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false) {}
+
+ explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), _boundary(nullptr), _negateBoundary(false), m_MoveInLineOfSight_locked(false) { }
~CreatureAI() override {}
@@ -100,7 +112,7 @@ public:
virtual bool CanRespawn() { return true; }
// Called for reaction at stopping attack at no attackers or targets
- virtual void EnterEvadeMode();
+ virtual void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER);
// Called for reaction at enter to combat if not in combat yet (enemy can be nullptr)
virtual void EnterCombat(Unit* /*victim*/) {}
@@ -187,10 +199,20 @@ public:
virtual void PetStopAttack() { }
+ // boundary system methods
+ virtual bool CheckInRoom();
+ CreatureBoundary const* GetBoundary() const { return _boundary; }
+ void SetBoundary(CreatureBoundary const* boundary, bool negativeBoundaries = false);
+
+ static bool IsInBounds(CreatureBoundary const& boundary, Position const* who);
+ bool IsInBoundary(Position const* who = nullptr) const;
protected:
virtual void MoveInLineOfSight(Unit* /*who*/);
- bool _EnterEvadeMode();
+ bool _EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER);
+
+ CreatureBoundary const* _boundary;
+ bool _negateBoundary;
private:
bool m_MoveInLineOfSight_locked;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 98dbf41ce..46aa97946 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -15,6 +15,7 @@
* with this program. If not, see .
*/
+#include "AreaBoundary.h"
#include "ScriptedCreature.h"
#include "Cell.h"
#include "CellImpl.h"
@@ -171,7 +172,6 @@ bool SummonList::IsAnyCreatureInCombat() const
ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature),
me(creature),
IsFleeing(false),
- _evadeCheckCooldown(2500),
_isCombatMovementAllowed(true)
{
_isHeroic = me->GetMap()->IsHeroic();
@@ -489,23 +489,6 @@ enum eNPCs
NPC_FREYA = 32906,
};
-bool ScriptedAI::EnterEvadeIfOutOfCombatArea()
-{
- if (me->IsInEvadeMode() || !me->IsInCombat())
- return false;
-
- if (_evadeCheckCooldown == GameTime::GetGameTime().count())
- return false;
-
- _evadeCheckCooldown = GameTime::GetGameTime().count();
-
- if (!CheckEvadeIfOutOfCombatArea())
- return false;
-
- EnterEvadeMode();
- return true;
-}
-
Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura, bool mustBeInLOS) const
{
Map::PlayerList const& pList = me->GetMap()->GetPlayers();
@@ -531,9 +514,10 @@ Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura
BossAI::BossAI(Creature* creature, uint32 bossId) : ScriptedAI(creature),
instance(creature->GetInstanceScript()),
summons(creature),
- _boundary(instance ? instance->GetBossBoundary(bossId) : nullptr),
_bossId(bossId)
{
+ if (instance)
+ SetBoundary(instance->GetBossBoundary(bossId));
}
void BossAI::_Reset()
@@ -583,59 +567,10 @@ void BossAI::TeleportCheaters()
ThreatContainer::StorageType threatList = me->getThreatMgr().getThreatList();
for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
if (Unit* target = (*itr)->getTarget())
- if (target->GetTypeId() == TYPEID_PLAYER && !CheckBoundary(target))
+ if (target->GetTypeId() == TYPEID_PLAYER && !IsInBoundary(target))
target->NearTeleportTo(x, y, z, 0);
}
-bool BossAI::CheckBoundary(Unit* who)
-{
- if (!GetBoundary() || !who)
- return true;
-
- for (BossBoundaryMap::const_iterator itr = GetBoundary()->begin(); itr != GetBoundary()->end(); ++itr)
- {
- switch (itr->first)
- {
- case BOUNDARY_N:
- if (who->GetPositionX() > itr->second)
- return false;
- break;
- case BOUNDARY_S:
- if (who->GetPositionX() < itr->second)
- return false;
- break;
- case BOUNDARY_E:
- if (who->GetPositionY() < itr->second)
- return false;
- break;
- case BOUNDARY_W:
- if (who->GetPositionY() > itr->second)
- return false;
- break;
- case BOUNDARY_NW:
- if (who->GetPositionX() + who->GetPositionY() > itr->second)
- return false;
- break;
- case BOUNDARY_SE:
- if (who->GetPositionX() + who->GetPositionY() < itr->second)
- return false;
- break;
- case BOUNDARY_NE:
- if (who->GetPositionX() - who->GetPositionY() > itr->second)
- return false;
- break;
- case BOUNDARY_SW:
- if (who->GetPositionX() - who->GetPositionY() < itr->second)
- return false;
- break;
- default:
- break;
- }
- }
-
- return true;
-}
-
void BossAI::JustSummoned(Creature* summon)
{
summons.Summon(summon);
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index a2470e63e..0114a785b 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -344,7 +344,6 @@ struct ScriptedAI : public CreatureAI
void SetCombatMovement(bool allowMovement);
bool IsCombatMovementAllowed() const { return _isCombatMovementAllowed; }
- bool EnterEvadeIfOutOfCombatArea();
virtual bool CheckEvadeIfOutOfCombatArea() const { return false; }
// return true for heroic mode. i.e.
@@ -416,7 +415,6 @@ struct ScriptedAI : public CreatureAI
private:
Difficulty _difficulty;
- uint32 _evadeCheckCooldown;
bool _isCombatMovementAllowed;
bool _isHeroic;
};
@@ -428,7 +426,6 @@ public:
~BossAI() override {}
InstanceScript* const instance;
- BossBoundaryMap const* GetBoundary() const { return _boundary; }
void JustSummoned(Creature* summon) override;
void SummonedCreatureDespawn(Creature* summon) override;
@@ -453,23 +450,12 @@ protected:
void _JustDied();
void _JustReachedHome() { me->setActive(false); }
- bool CheckInRoom()
- {
- if (CheckBoundary(me))
- return true;
-
- EnterEvadeMode();
- return false;
- }
-
- bool CheckBoundary(Unit* who);
void TeleportCheaters();
EventMap events;
SummonList summons;
private:
- BossBoundaryMap const* const _boundary;
uint32 const _bossId;
};
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
index 296947788..ba51f7f08 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
@@ -198,7 +198,7 @@ void npc_escortAI::ReturnToLastPoint()
me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z);
}
-void npc_escortAI::EnterEvadeMode()
+void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/)
{
me->RemoveAllAuras();
me->DeleteThreatList();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
index 1bad8dee7..956250151 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
@@ -66,7 +66,7 @@ public:
void ReturnToLastPoint();
- void EnterEvadeMode() override;
+ void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override;
void UpdateAI(uint32 diff) override; //the "internal" update, calls UpdateEscortAI()
virtual void UpdateEscortAI(uint32 diff); //used when it's needed to add code in update (abilities, scripted events, etc)
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
index 73ca312d8..9617d4afa 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
@@ -150,7 +150,7 @@ void FollowerAI::JustRespawned()
Reset();
}
-void FollowerAI::EnterEvadeMode()
+void FollowerAI::EnterEvadeMode(EvadeReason /*why*/)
{
me->RemoveAllAuras();
me->DeleteThreatList();
diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
index 1f77602b5..1de968e43 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h
@@ -46,7 +46,7 @@ public:
void MoveInLineOfSight(Unit*) override;
- void EnterEvadeMode() override;
+ void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override;
void JustDied(Unit*) override;
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 0ebb8c6ad..060e27f82 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -618,7 +618,7 @@ void SmartAI::MovementInform(uint32 MovementType, uint32 Data)
MovepointReached(Data);
}
-void SmartAI::EnterEvadeMode()
+void SmartAI::EnterEvadeMode(EvadeReason /*why*/)
{
// xinef: fixes strange jumps when charming SmartAI npc
if (!me->IsAlive() || me->IsInEvadeMode())
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 35ab05401..19c6ba422 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -80,7 +80,7 @@ public:
void EnterCombat(Unit* enemy) override;
// Called for reaction at stopping attack at no attackers or targets
- void EnterEvadeMode() override;
+ void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override;
// Called when the creature is killed
void JustDied(Unit* killer) override;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 4eb0a571f..5ff6f1575 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -202,7 +202,7 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
}
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipientGroup(0),
- m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_wanderDistance(0.0f),
+ m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_wanderDistance(0.0f), m_boundaryCheckTime(2500),
m_transportCheckTimer(1000), lootPickPocketRestoreTime(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE),
m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_moveInLineOfSightDisabled(false), m_moveInLineOfSightStrictlyDisabled(false),
@@ -689,6 +689,17 @@ void Creature::Update(uint32 diff)
SelectVictim();
}
+ // periodic check to see if the creature has passed an evade boundary
+ if (IsAIEnabled && !IsInEvadeMode() && IsInCombat())
+ {
+ if (diff >= m_boundaryCheckTime)
+ {
+ AI()->CheckInRoom();
+ m_boundaryCheckTime = 2500;
+ } else
+ m_boundaryCheckTime -= diff;
+ }
+
Unit* owner = GetCharmerOrOwner();
if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
{
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index aa1b7fa44..364247985 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -285,6 +285,8 @@ public:
[[nodiscard]] float GetWanderDistance() const { return m_wanderDistance; }
void SetWanderDistance(float dist) { m_wanderDistance = dist; }
+ void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
+
uint32 m_groupLootTimer; // (msecs)timer used for group loot
uint32 lootingGroupLowGUID; // used to find group which is looting corpse
@@ -402,6 +404,7 @@ protected:
uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning
uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance
float m_wanderDistance;
+ uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check
uint16 m_transportCheckTimer;
uint32 lootPickPocketRestoreTime;
diff --git a/src/server/game/Entities/Item/enuminfo_Item.cpp b/src/server/game/Entities/Item/enuminfo_Item.cpp
index d43ff6470..a7b1ecc35 100644
--- a/src/server/game/Entities/Item/enuminfo_Item.cpp
+++ b/src/server/game/Entities/Item/enuminfo_Item.cpp
@@ -15,8 +15,8 @@
* with this program. If not, see .
*/
-#include "Define.h"
#include "Item.h"
+#include "Define.h"
#include "SmartEnum.h"
#include
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 74c100332..5743d427e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -14038,7 +14038,7 @@ void Unit::TauntFadeOut(Unit* taunter)
if (m_ThreatMgr.isThreatListEmpty())
{
if (creature->IsAIEnabled)
- creature->AI()->EnterEvadeMode();
+ creature->AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES);
return;
}
@@ -14124,7 +14124,7 @@ Unit* Creature::SelectVictim()
for (Unit::AuraEffectList::const_iterator itr = iAuras.begin(); itr != iAuras.end(); ++itr)
if ((*itr)->GetBase()->IsPermanent())
{
- AI()->EnterEvadeMode();
+ AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES);
break;
}
return nullptr;
diff --git a/src/server/game/Entities/Unit/enuminfo_Unit.cpp b/src/server/game/Entities/Unit/enuminfo_Unit.cpp
index 1e72b7187..8444ba3d4 100644
--- a/src/server/game/Entities/Unit/enuminfo_Unit.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_Unit.cpp
@@ -15,9 +15,9 @@
* with this program. If not, see .
*/
+#include "Unit.h"
#include "Define.h"
#include "SmartEnum.h"
-#include "Unit.h"
#include
namespace Acore::Impl::EnumUtilsImpl
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index 8a2dcfced..6da098da8 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -31,6 +31,12 @@
#include "Spell.h"
#include "WorldSession.h"
+BossBoundaryData::~BossBoundaryData()
+{
+ for (const_iterator it = begin(); it != end(); ++it)
+ delete it->boundary;
+}
+
void InstanceScript::SaveToDB()
{
std::string data = GetSaveData();
@@ -120,6 +126,13 @@ bool InstanceScript::IsEncounterInProgress() const
return false;
}
+void InstanceScript::LoadBossBoundaries(const BossBoundaryData& data)
+{
+ for (BossBoundaryEntry const& entry : data)
+ if (entry.bossId < bosses.size())
+ bosses[entry.bossId].boundary.push_back(entry.boundary);
+}
+
void InstanceScript::LoadMinionData(const MinionData* data)
{
while (data->entry)
@@ -137,7 +150,7 @@ void InstanceScript::LoadDoorData(const DoorData* data)
while (data->entry)
{
if (data->bossId < bosses.size())
- doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type, BoundaryType(data->boundary))));
+ doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type)));
++data;
}
@@ -268,28 +281,6 @@ void InstanceScript::AddDoor(GameObject* door, bool add)
if (add)
{
data.bossInfo->door[data.type].insert(door);
- switch (data.boundary)
- {
- default:
- case BOUNDARY_NONE:
- break;
- case BOUNDARY_N:
- case BOUNDARY_S:
- data.bossInfo->boundary[data.boundary] = door->GetPositionX();
- break;
- case BOUNDARY_E:
- case BOUNDARY_W:
- data.bossInfo->boundary[data.boundary] = door->GetPositionY();
- break;
- case BOUNDARY_NW:
- case BOUNDARY_SE:
- data.bossInfo->boundary[data.boundary] = door->GetPositionX() + door->GetPositionY();
- break;
- case BOUNDARY_NE:
- case BOUNDARY_SW:
- data.bossInfo->boundary[data.boundary] = door->GetPositionX() - door->GetPositionY();
- break;
- }
}
else
data.bossInfo->door[data.type].erase(door);
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index f9846f47d..9ba662267 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -18,9 +18,11 @@
#ifndef ACORE_INSTANCE_DATA_H
#define ACORE_INSTANCE_DATA_H
+#include "CreatureAI.h"
#include "ObjectMgr.h"
#include "World.h"
#include "ZoneScript.h"
+#include
#define OUT_SAVE_INST_DATA LOG_DEBUG("scripts.ai", "Saving Instance Data for Instance {} (Map {}, Instance Id {})", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
#define OUT_SAVE_INST_DATA_COMPLETE LOG_DEBUG("scripts.ai", "Saving Instance Data for Instance {} (Map {}, Instance Id {}) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
@@ -67,30 +69,30 @@ enum DoorType
MAX_DOOR_TYPES,
};
-enum BoundaryType
-{
- BOUNDARY_NONE = 0,
- BOUNDARY_N,
- BOUNDARY_S,
- BOUNDARY_E,
- BOUNDARY_W,
- BOUNDARY_NE,
- BOUNDARY_NW,
- BOUNDARY_SE,
- BOUNDARY_SW,
- BOUNDARY_MAX_X = BOUNDARY_N,
- BOUNDARY_MIN_X = BOUNDARY_S,
- BOUNDARY_MAX_Y = BOUNDARY_W,
- BOUNDARY_MIN_Y = BOUNDARY_E,
-};
-
-typedef std::map BossBoundaryMap;
-
struct DoorData
{
uint32 entry, bossId;
DoorType type;
- uint32 boundary;
+};
+
+struct BossBoundaryEntry
+{
+ uint32 const bossId;
+ AreaBoundary const* const boundary;
+};
+
+struct BossBoundaryData
+{
+ typedef std::vector StorageType;
+ typedef StorageType::const_iterator const_iterator;
+
+ BossBoundaryData(std::initializer_list data) : _data(data) { }
+ ~BossBoundaryData();
+ const_iterator begin() const { return _data.begin(); }
+ const_iterator end() const { return _data.end(); }
+
+private:
+ StorageType _data;
};
struct MinionData
@@ -110,16 +112,15 @@ struct BossInfo
EncounterState state;
DoorSet door[MAX_DOOR_TYPES];
MinionSet minion;
- BossBoundaryMap boundary;
+ CreatureBoundary boundary;
};
struct DoorInfo
{
- explicit DoorInfo(BossInfo* _bossInfo, DoorType _type, BoundaryType _boundary)
- : bossInfo(_bossInfo), type(_type), boundary(_boundary) {}
+ explicit DoorInfo(BossInfo* _bossInfo, DoorType _type)
+ : bossInfo(_bossInfo), type(_type) { }
BossInfo* bossInfo;
DoorType type;
- BoundaryType boundary;
};
struct MinionInfo
@@ -225,7 +226,7 @@ public:
virtual bool SetBossState(uint32 id, EncounterState state);
EncounterState GetBossState(uint32 id) const { return id < bosses.size() ? bosses[id].state : TO_BE_DECIDED; }
static std::string GetBossStateName(uint8 state);
- BossBoundaryMap const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : nullptr; }
+ CreatureBoundary const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : nullptr; }
BossInfo const* GetBossInfo(uint32 id) const { return &bosses[id]; }
// Achievement criteria additional requirements check
@@ -255,6 +256,7 @@ public:
virtual void DoAction(int32 /*action*/) {}
protected:
void SetBossNumber(uint32 number) { bosses.resize(number); }
+ void LoadBossBoundaries(BossBoundaryData const& data);
void LoadDoorData(DoorData const* data);
void LoadMinionData(MinionData const* data);
void LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData);
diff --git a/src/server/game/Maps/AreaBoundary.cpp b/src/server/game/Maps/AreaBoundary.cpp
new file mode 100644
index 000000000..7d040785d
--- /dev/null
+++ b/src/server/game/Maps/AreaBoundary.cpp
@@ -0,0 +1,113 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+#include "AreaBoundary.h"
+#include "Unit.h"
+#include "TemporarySummon.h"
+
+// ---== RECTANGLE ==---
+RectangleBoundary::RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted) :
+ AreaBoundary(isInverted), _minX(southX), _maxX(northX), _minY(eastY), _maxY(westY) { }
+bool RectangleBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ return !(
+ pos->GetPositionX() < _minX ||
+ pos->GetPositionX() > _maxX ||
+ pos->GetPositionY() < _minY ||
+ pos->GetPositionY() > _maxY
+ );
+}
+
+// ---== CIRCLE ==---
+CircleBoundary::CircleBoundary(Position const& center, double radius, bool isInverted) :
+ AreaBoundary(isInverted), _center(center), _radiusSq(radius*radius) { }
+
+CircleBoundary::CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted) :
+ AreaBoundary(isInverted), _center(center), _radiusSq(_center.GetDoubleExactDist2dSq(pointOnCircle)) { }
+
+bool CircleBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ double offX = _center.GetDoublePositionX() - pos->GetPositionX();
+ double offY = _center.GetDoublePositionY() - pos->GetPositionY();
+ return offX * offX + offY * offY <= _radiusSq;
+}
+
+// ---== ELLIPSE ==---
+EllipseBoundary::EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted) :
+ AreaBoundary(isInverted), _center(center), _radiusYSq(radiusY*radiusY), _scaleXSq(_radiusYSq / (radiusX*radiusX)) { }
+
+bool EllipseBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ double offX = _center.GetDoublePositionX() - pos->GetPositionX();
+ double offY = _center.GetDoublePositionY() - pos->GetPositionY();
+ return (offX*offX)*_scaleXSq + (offY*offY) <= _radiusYSq;
+}
+
+// ---== TRIANGLE ==---
+TriangleBoundary::TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted) :
+ AreaBoundary(isInverted), _a(pointA), _b(pointB), _c(pointC), _abx(_b.GetDoublePositionX()-_a.GetDoublePositionX()), _bcx(_c.GetDoublePositionX()-_b.GetDoublePositionX()), _cax(_a.GetDoublePositionX() - _c.GetDoublePositionX()), _aby(_b.GetDoublePositionY()-_a.GetDoublePositionY()), _bcy(_c.GetDoublePositionY()-_b.GetDoublePositionY()), _cay(_a.GetDoublePositionY() - _c.GetDoublePositionY()) { }
+bool TriangleBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ // half-plane signs
+ bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0;
+ bool sign2 = ((-_c.GetDoublePositionX() + pos->GetPositionX()) * _bcy - (-_c.GetDoublePositionY() + pos->GetPositionY()) * _bcx) < 0;
+ bool sign3 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _cay - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _cax) < 0;
+
+ // if all signs are the same, the point is inside the triangle
+ return ((sign1 == sign2) && (sign2 == sign3));
+}
+
+// ---== PARALLELOGRAM ==---
+ParallelogramBoundary::ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted) :
+ AreaBoundary(isInverted), _a(cornerA), _b(cornerB), _d(cornerD), _c(DoublePosition(_d.GetDoublePositionX() + (_b.GetDoublePositionX() - _a.GetDoublePositionX()), _d.GetDoublePositionY() + (_b.GetDoublePositionY() - _a.GetDoublePositionY()))), _abx(_b.GetDoublePositionX() - _a.GetDoublePositionX()), _dax(_a.GetDoublePositionX() - _d.GetDoublePositionX()), _aby(_b.GetDoublePositionY() - _a.GetDoublePositionY()), _day(_a.GetDoublePositionY() - _d.GetDoublePositionY()) { }
+bool ParallelogramBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ // half-plane signs
+ bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0;
+ bool sign2 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _day - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _dax) < 0;
+ bool sign3 = ((-_d.GetDoublePositionY() + pos->GetPositionY()) * _abx - (-_d.GetDoublePositionX() + pos->GetPositionX()) * _aby) < 0; // AB = -CD
+ bool sign4 = ((-_c.GetDoublePositionY() + pos->GetPositionY()) * _dax - (-_c.GetDoublePositionX() + pos->GetPositionX()) * _day) < 0; // DA = -BC
+
+ // if all signs are equal, the point is inside
+ return ((sign1 == sign2) && (sign2 == sign3) && (sign3 == sign4));
+}
+
+// ---== Z RANGE ==---
+ZRangeBoundary::ZRangeBoundary(float minZ, float maxZ, bool isInverted) :
+ AreaBoundary(isInverted), _minZ(minZ), _maxZ(maxZ) { }
+bool ZRangeBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ return (_minZ <= pos->GetPositionZ() && pos->GetPositionZ() <= _maxZ);
+}
+
+// ---== UNION OF 2 BOUNDARIES ==---
+BoundaryUnionBoundary::BoundaryUnionBoundary(AreaBoundary const* b1, AreaBoundary const* b2, bool isInverted) :
+ AreaBoundary(isInverted), _b1(b1), _b2(b2)
+{
+ ASSERT(b1 && b2);
+}
+
+BoundaryUnionBoundary::~BoundaryUnionBoundary()
+{
+ delete _b1;
+ delete _b2;
+}
+
+bool BoundaryUnionBoundary::IsWithinBoundaryArea(Position const* pos) const
+{
+ return (_b1->IsWithinBoundary(pos) || _b2->IsWithinBoundary(pos));
+}
diff --git a/src/server/game/Maps/AreaBoundary.h b/src/server/game/Maps/AreaBoundary.h
new file mode 100644
index 000000000..e599c335e
--- /dev/null
+++ b/src/server/game/Maps/AreaBoundary.h
@@ -0,0 +1,168 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+#ifndef ACORE_AREA_BOUNDARY_H
+#define ACORE_AREA_BOUNDARY_H
+
+#include "Position.h"
+
+class AC_GAME_API AreaBoundary
+{
+ public:
+ bool IsWithinBoundary(Position const* pos) const { return pos && (IsWithinBoundaryArea(pos) != _isInvertedBoundary); }
+ bool IsWithinBoundary(Position const& pos) const { return IsWithinBoundary(&pos); }
+
+ virtual ~AreaBoundary() { }
+
+ protected:
+ explicit AreaBoundary(bool isInverted) : _isInvertedBoundary(isInverted) { }
+
+ struct DoublePosition : Position
+ {
+ DoublePosition(double x = 0.0, double y = 0.0, double z = 0.0, float o = 0.0f)
+ : Position(float(x), float(y), float(z), o), DoublePosX(x), DoublePosY(y), DoublePosZ(z) { }
+
+ DoublePosition(float x, float y = 0.0f, float z = 0.0f, float o = 0.0f)
+ : Position(x, y, z, o), DoublePosX(x), DoublePosY(y), DoublePosZ(z) { }
+
+ DoublePosition(Position const& pos)
+ : Position(pos), DoublePosX(pos.m_positionX), DoublePosY(pos.m_positionY), DoublePosZ(pos.m_positionZ) { }
+
+ double GetDoublePositionX() const { return DoublePosX; }
+ double GetDoublePositionY() const { return DoublePosY; }
+ double GetDoublePositionZ() const { return DoublePosZ; }
+
+ double GetDoubleExactDist2dSq(DoublePosition const& pos) const
+ {
+ double const offX = GetDoublePositionX() - pos.GetDoublePositionX();
+ double const offY = GetDoublePositionY() - pos.GetDoublePositionY();
+ return (offX * offX) + (offY * offY);
+ }
+
+ Position* sync()
+ {
+ m_positionX = float(DoublePosX);
+ m_positionY = float(DoublePosY);
+ m_positionZ = float(DoublePosZ);
+ return this;
+ }
+
+ double DoublePosX;
+ double DoublePosY;
+ double DoublePosZ;
+ };
+
+ virtual bool IsWithinBoundaryArea(Position const* pos) const = 0;
+
+ private:
+ bool _isInvertedBoundary;
+};
+
+class AC_GAME_API RectangleBoundary : public AreaBoundary
+{
+ public:
+ // X axis is north/south, Y axis is east/west, larger values are northwest
+ RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ float const _minX, _maxX, _minY, _maxY;
+};
+
+class AC_GAME_API CircleBoundary : public AreaBoundary
+{
+ public:
+ CircleBoundary(Position const& center, double radius, bool isInverted = false);
+ CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ DoublePosition const _center;
+ double const _radiusSq;
+};
+
+class AC_GAME_API EllipseBoundary : public AreaBoundary
+{
+ public:
+ EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ DoublePosition const _center;
+ double const _radiusYSq, _scaleXSq;
+};
+
+class AC_GAME_API TriangleBoundary : public AreaBoundary
+{
+ public:
+ TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ DoublePosition const _a, _b, _c;
+ double const _abx, _bcx, _cax, _aby, _bcy, _cay;
+};
+
+class AC_GAME_API ParallelogramBoundary : public AreaBoundary
+{
+ public:
+ // Note: AB must be orthogonal to AD
+ ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ DoublePosition const _a, _b, _d, _c;
+ double const _abx, _dax, _aby, _day;
+};
+
+class AC_GAME_API ZRangeBoundary : public AreaBoundary
+{
+ public:
+ ZRangeBoundary(float minZ, float maxZ, bool isInverted = false);
+
+ protected:
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ float const _minZ, _maxZ;
+};
+
+class AC_GAME_API BoundaryUnionBoundary : public AreaBoundary
+{
+ public:
+ BoundaryUnionBoundary(AreaBoundary const* b1, AreaBoundary const* b2, bool isInverted = false);
+
+ protected:
+ virtual ~BoundaryUnionBoundary();
+ bool IsWithinBoundaryArea(Position const* pos) const override;
+
+ private:
+ AreaBoundary const* const _b1;
+ AreaBoundary const* const _b2;
+};
+
+#endif //ACORE_AREA_BOUNDARY_H
diff --git a/src/server/game/Quests/enuminfo_QuestDef.cpp b/src/server/game/Quests/enuminfo_QuestDef.cpp
index cf4651adc..aec7b5de3 100644
--- a/src/server/game/Quests/enuminfo_QuestDef.cpp
+++ b/src/server/game/Quests/enuminfo_QuestDef.cpp
@@ -15,8 +15,8 @@
* with this program. If not, see .
*/
-#include "Define.h"
#include "QuestDef.h"
+#include "Define.h"
#include "SmartEnum.h"
#include
diff --git a/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp b/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
index f4d906b69..f76872a82 100644
--- a/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
+++ b/src/server/game/Warden/enuminfo_WardenCheckMgr.cpp
@@ -15,9 +15,9 @@
* with this program. If not, see .
*/
+#include "WardenCheckMgr.h"
#include "Define.h"
#include "SmartEnum.h"
-#include "WardenCheckMgr.h"
#include
namespace Acore::Impl::EnumUtilsImpl
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 806b69e18..6da704604 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -130,9 +130,9 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
// Evade boss
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -199,7 +199,7 @@ public:
Position const& _homePosition = me->GetHomePosition();
if (me->GetDistance2d(_homePosition.GetPositionX(), _homePosition.GetPositionY()) > 50.0f)
{
- EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode();
return;
}
events.ScheduleEvent(EVENT_CHECK_RESET, 5000);
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
index 902c94bb6..3dc5e9b35 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -99,9 +99,9 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
// Evade mini bosses
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -167,7 +167,7 @@ public:
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
- EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode();
Talk(YELL_EVADE);
}
ResetTimer = 5 * IN_MILLISECONDS;
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
index e139c7353..432241351 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp
@@ -88,9 +88,9 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
// Evade mini bosses
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -149,7 +149,7 @@ public:
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
- EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode();
Talk(YELL_EVADE);
}
ResetTimer = 5 * IN_MILLISECONDS;
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
index d851ae958..63a40a20f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp
@@ -225,7 +225,7 @@ public:
me->GetMotionMaster()->MoveFollow(summoner, 0.f, 0.f);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (Creature* flamelasher = ObjectAccessor::GetCreature(*me, _flamelasherGUID))
{
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
index 8b21317dc..8e8547b9c 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
@@ -200,7 +200,7 @@ public:
_events.ScheduleEvent(EVENT_SPELL_SUMMON_VOIDWALKERS, 1000);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->RemoveAllAuras();
me->DeleteThreatList();
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
index 68c47301e..748e852c7 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp
@@ -76,10 +76,10 @@ public:
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
instance->SetBossState(DATA_WARCHIEF_REND_BLACKHAND, FAIL);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void IsSummonedBy(Unit* /*summoner*/) override
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
index 5a13367ef..1fa033d7f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -164,11 +164,11 @@ public:
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(17000, 19000));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
instance->SetBossState(DATA_WARCHIEF_REND_BLACKHAND, FAIL);
instance->SetBossState(DATA_GYTH, FAIL);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
me->DespawnOrUnsummon();
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
index e938ca071..25c48eff9 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp
@@ -63,10 +63,10 @@ MinionData const minionData[] =
DoorData const doorData[] =
{
- { GO_GYTH_EXIT_DOOR, DATA_WARCHIEF_REND_BLACKHAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_DRAKKISATH_DOOR_1, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_DRAKKISATH_DOOR_2, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_GYTH_EXIT_DOOR, DATA_WARCHIEF_REND_BLACKHAND, DOOR_TYPE_PASSAGE },
+ { GO_DRAKKISATH_DOOR_1, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE },
+ { GO_DRAKKISATH_DOOR_2, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM, } // END
};
class instance_blackrock_spire : public InstanceMapScript
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
index 7855cf891..d6fa9715f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp
@@ -31,16 +31,16 @@
DoorData const doorData[] =
{
- { GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175946 || GUID 7230
- { GO_PORTCULLIS_RAZORGORE_ROOM, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 176964 || GUID 75158
- { GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175185 || GUID 7229
- { GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179365 || GUID 75159
- { GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
- { GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
- { GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
- { GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179116 || GUID 75161
- { GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 179117 || GUID 75164
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
+ { GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE }, // ID 175946 || GUID 7230
+ { GO_PORTCULLIS_RAZORGORE_ROOM, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_ROOM, }, // ID 176964 || GUID 75158
+ { GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE }, // ID 175185 || GUID 7229
+ { GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE }, // ID 179365 || GUID 75159
+ { GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
+ { GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
+ { GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
+ { GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE }, // ID 179116 || GUID 75161
+ { GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM }, // ID 179117 || GUID 75164
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
ObjectData const creatureData[] =
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
index b291a41e6..2e52b44a3 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp
@@ -232,7 +232,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (!me->getThreatMgr().getThreatList().empty())
{
@@ -245,7 +245,7 @@ public:
}
else
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index a69d3367d..48e330bd1 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -185,7 +185,6 @@ public:
if (me->IsVisible())
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
index 27a212622..0e1129947 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp
@@ -194,7 +194,7 @@ public:
case EVENT_CHECK_DIST:
if (me->GetDistance(me->GetHomePosition()) > 75.0f)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
events.ScheduleEvent(EVENT_CHECK_DIST, 5000);
@@ -325,7 +325,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
summons.Summon(summon);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (Creature* delrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_DELRISSA)))
if (!delrissa->IsAlive())
@@ -333,7 +333,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
delrissa->Respawn();
return;
}
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* who) override
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
index f2008c62b..e3ef5e429 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
@@ -240,7 +240,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DeleteThreatList();
me->CombatStop(false);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index f9bc24659..615545ab1 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -100,7 +100,7 @@ public:
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL);
me->DespawnOrUnsummon(1);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
index f281dec0f..03e4cf662 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp
@@ -111,15 +111,15 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
if (Creature* alythess = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_GRAND_WARLOCK_ALYTHESS)))
{
if (!alythess->IsAlive())
alythess->Respawn(true);
else if (!alythess->IsInEvadeMode())
- alythess->AI()->EnterEvadeMode();
+ alythess->AI()->EnterEvadeMode(why);
}
}
@@ -259,15 +259,15 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
if (Creature* scorlash = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_LADY_SACROLASH)))
{
if (!scorlash->IsAlive())
scorlash->Respawn(true);
else if (!scorlash->IsInEvadeMode())
- scorlash->AI()->EnterEvadeMode();
+ scorlash->AI()->EnterEvadeMode(why);
}
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
index 76eca30d5..f9da3901a 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp
@@ -308,11 +308,11 @@ public:
events.Reset();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (me->GetReactState() == REACT_PASSIVE)
return;
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void AttackStart(Unit* who) override
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index c9f752b48..53a64bee3 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -176,12 +176,12 @@ public:
me->SetReactState(REACT_PASSIVE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* muru = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MURU)))
if (!muru->IsInEvadeMode())
- muru->AI()->EnterEvadeMode();
+ muru->AI()->EnterEvadeMode(why);
me->DespawnOrUnsummon();
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
index d4e49e663..36f6ad57a 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp
@@ -22,13 +22,13 @@
DoorData const doorData[] =
{
- { GO_FIRE_BARRIER, DATA_FELMYST_DOORS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_FIRE_BARRIER, DATA_FELMYST_DOORS, DOOR_TYPE_PASSAGE },
+ { GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM },
+ { GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE },
+ { GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM },
+ { GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM },
+ { GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_sunwell_plateau : public InstanceMapScript
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
index 9b84dfb0f..d815709e8 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp
@@ -402,8 +402,6 @@ public:
else HatcherTimer -= diff;
}
- EnterEvadeIfOutOfCombatArea();
-
DoMeleeAttackIfReady();
if (FireBreathTimer <= diff)
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
index f1ee439d8..deb48fa13 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp
@@ -150,9 +150,9 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GONG_OF_BETHEKK)))
object->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
me->DespawnOrUnsummon(4000);
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
index fc04c4365..91c7bd67f 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp
@@ -28,8 +28,8 @@ EndScriptData */
DoorData const doorData[] =
{
- { GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_zulgurub : public InstanceMapScript
diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
index 497389cec..8f9e6cddc 100644
--- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp
@@ -215,7 +215,7 @@ public:
{
damage = 0;
me->setActive(false);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
@@ -243,7 +243,7 @@ public:
break;
}
me->setActive(false);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
case EVENT_SUMMON_SOLDIERS:
for (uint8 i = 0; i < SUNWELL_DEFENDER_NUM; ++i)
@@ -393,7 +393,7 @@ public:
case EVENT_DISAPPEAR:
me->SetVisible(false);
me->setActive(false);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SET_FACING:
me->SetFacingTo(2.45f);
@@ -425,11 +425,11 @@ public:
events.ScheduleEvent(EVENT_SET_FACING, 0);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (me->isActiveObject())
return;
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void SetData(uint32 type, uint32 id) override
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index dbc16c092..b5324ccf8 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -155,7 +155,7 @@ public:
MarzonGUID.Clear();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DisappearAndDie();
@@ -317,7 +317,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DisappearAndDie();
diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
index 15956aeed..7e870bdfd 100644
--- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp
@@ -1011,7 +1011,7 @@ public:
EventMap _events;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DeleteThreatList();
me->CombatStop(true);
@@ -2353,7 +2353,7 @@ public:
EventMap _events;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->RemoveAura(SPELL_HEROIC_VANGUARD);
me->DeleteThreatList();
diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp
index d0c9cabc4..78a1063d8 100644
--- a/src/server/scripts/Events/hallows_end.cpp
+++ b/src/server/scripts/Events/hallows_end.cpp
@@ -660,7 +660,7 @@ struct npc_hallows_end_soh : public ScriptedAI
me->SetDisableGravity(true);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
me->DespawnOrUnsummon(1);
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index 014f3862c..3f2d64f50 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -406,7 +406,7 @@ void hyjalAI::Reset()
DoHide = true;
}
-void hyjalAI::EnterEvadeMode()
+void hyjalAI::EnterEvadeMode(EvadeReason /*why*/)
{
if (me->GetEntry() != JAINA)
me->RemoveAllAuras();
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
index 618abf50f..e17ea0636 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
@@ -122,7 +122,7 @@ struct hyjalAI : public npc_escortAI
void Reset() override; // Generically used to reset our variables. Do *not* call in EnterEvadeMode as this may make problems if the raid is still in combat
- void EnterEvadeMode() override; // Send creature back to spawn location and evade.
+ void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override; // Send creature back to spawn location and evade.
void EnterCombat(Unit* /*who*/) override; // Used to reset cooldowns for our spells and to inform the raid that we're under attack
diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
index e84cc2ffb..615bb0b91 100644
--- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
+++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp
@@ -294,7 +294,7 @@ public:
}
}
- bool CheckInRoom()
+ bool CheckInRoom() override
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 95.0f)
{
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
index fca59234f..977f2fbb4 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp
@@ -122,10 +122,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->ClearUnitState(UNIT_STATE_ROOT);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* attacker) override
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
index 2f725cfe4..58a8d28b6 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp
@@ -70,9 +70,9 @@ public:
{
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
for (ObjectGuid const& guid : Eggs)
if (Creature* egg = me->GetMap()->GetCreature(guid))
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 6c12a4e37..af994f8b8 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -158,11 +158,11 @@ public:
Talk(SAY_SLAY);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
Cleanup();
summons.DespawnAll();
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
index 2d9d22a1d..f0ffe9d79 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp
@@ -68,9 +68,9 @@ public:
Talk(SAY_SLAY);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->IsSummon())
((TempSummon*)me)->UnSummon();
}
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
index f5e0f2786..a993aa06e 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp
@@ -182,10 +182,10 @@ public:
events.ScheduleEvent(EVENT_POISON_SHOCK, urand(7000, 12000));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
summons.DespawnAll();
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index 6f941b136..12aa9be60 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -122,11 +122,11 @@ public:
npc_escortAI::JustDied(killer);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
SummonsFollow();
ImmuneFlagSet(false, 35);
- npc_escortAI::EnterEvadeMode();
+ npc_escortAI::EnterEvadeMode(why);
}
void CheckPlayer()
diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp
index ff507e4f2..068fa4d30 100644
--- a/src/server/scripts/Kalimdor/zone_feralas.cpp
+++ b/src/server/scripts/Kalimdor/zone_feralas.cpp
@@ -149,9 +149,9 @@ public:
_events.ScheduleEvent(EVENT_FINAL_TALK, 5 * IN_MILLISECONDS);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- _EnterEvadeMode();
+ _EnterEvadeMode(why);
if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID))
{
diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp
index f00a4ebe7..dfff979e2 100644
--- a/src/server/scripts/Kalimdor/zone_moonglade.cpp
+++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp
@@ -356,7 +356,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID);
if (player && player->IsInCombat() && player->getAttackerForHelper())
@@ -364,7 +364,7 @@ public:
AttackStart(player->getAttackerForHelper());
return;
}
- npc_escortAI::EnterEvadeMode();
+ npc_escortAI::EnterEvadeMode(why);
}
void StartEvent(Player* player)
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index 5843fffaa..5b968e470 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -306,10 +306,10 @@ public:
void EnterCombat(Unit* /*who*/) override { }
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
CleanUp();
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void CleanUp()
@@ -343,7 +343,7 @@ public:
Player* pWarrior = ObjectAccessor::GetPlayer(*me, PlayerGUID);
if (!pWarrior || me->GetDistance2d(pWarrior) >= 200.0f)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -351,7 +351,7 @@ public:
{
Talk(SAY_TWIGGY_FLATHEAD_DOWN);
pWarrior->FailQuest(1719);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -435,7 +435,7 @@ public:
if (!creature || !creature->IsAlive())
{
Talk(SAY_TWIGGY_FLATHEAD_OVER);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
else // Makes BIG WILL attackable.
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 3348e1abc..14123fedd 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -83,10 +83,10 @@ class boss_anub_arak : public CreatureScript
bool intro;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->DisableRotate(false);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void MoveInLineOfSight(Unit* who) override
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index c189559b4..a3ae4a994 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -195,7 +195,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
index a97165bb9..9c529ca8c 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
@@ -21,11 +21,11 @@
DoorData const doorData[] =
{
- { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_ANUBARAK_DOORS1, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_ANUBARAK_DOORS2, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_ANUBARAK_DOORS3, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_KRIKTHIR_DOORS, DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DOOR_TYPE_PASSAGE },
+ { GO_ANUBARAK_DOORS1, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
+ { GO_ANUBARAK_DOORS2, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
+ { GO_ANUBARAK_DOORS3, DATA_ANUBARAK_EVENT, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM }
};
ObjectData const creatureData[] =
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
index 8a7e79c26..a94d368fc 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp
@@ -140,10 +140,10 @@ struct boss_amanitar : public BossAI
BossAI::SummonedCreatureDies(summon, killer);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void ExecuteEvent(uint32 eventId) override
@@ -245,7 +245,7 @@ struct npc_amanitar_mushrooms : public ScriptedAI
// Disabled events
void EnterCombat(Unit* /*who*/) override {}
void AttackStart(Unit* /*victim*/) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void Reset() override
{
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
index 8bebc033f..87a000950 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -592,11 +592,11 @@ struct npc_twilight_volunteer : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (!isSacraficeTarget)
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index e752189be..61d9691a9 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -177,7 +177,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -218,7 +217,7 @@ public:
_events.ScheduleEvent(EVENT_LAVA_GOUT, 5000);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
// Prevent EvadeMode
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 4e157d242..af3818a2e 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -272,12 +272,12 @@ public:
return false;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (IsAnyPlayerValid())
return;
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void AttackStart(Unit* who) override
@@ -473,7 +473,7 @@ public:
me->SetInCombatWithZone();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index f5bebb192..e26c29eeb 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -22,18 +22,24 @@
#include "WorldPacket.h"
#include "ruby_sanctum.h"
+BossBoundaryData const boundaries =
+{
+ { DATA_GENERAL_ZARITHRIAN, new EllipseBoundary(Position(3013.409f, 529.492f), 45.0, 100.0) },
+ { DATA_HALION, new CircleBoundary(Position(3156.037f, 533.2656f), 48.5) }
+};
+
DoorData const doorData[] =
{
- {GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE, BOUNDARY_E },
- {GO_FLAME_WALLS, DATA_SAVIANA_RAGEFIRE, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_FLAME_WALLS, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_FLAME_WALLS, DATA_GENERAL_ZARITHRIAN, DOOR_TYPE_ROOM, BOUNDARY_NONE},
- {GO_BURNING_TREE_4, DATA_HALION_INTRO1, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_BURNING_TREE_3, DATA_HALION_INTRO1, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_BURNING_TREE_2, DATA_HALION_INTRO2, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_BURNING_TREE_1, DATA_HALION_INTRO2, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_TWILIGHT_FLAME_RING, DATA_HALION, DOOR_TYPE_ROOM, BOUNDARY_NONE},
- {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE},
+ {GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE },
+ {GO_FLAME_WALLS, DATA_SAVIANA_RAGEFIRE, DOOR_TYPE_PASSAGE },
+ {GO_FLAME_WALLS, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE },
+ {GO_FLAME_WALLS, DATA_GENERAL_ZARITHRIAN, DOOR_TYPE_ROOM, },
+ {GO_BURNING_TREE_4, DATA_HALION_INTRO1, DOOR_TYPE_PASSAGE },
+ {GO_BURNING_TREE_3, DATA_HALION_INTRO1, DOOR_TYPE_PASSAGE },
+ {GO_BURNING_TREE_2, DATA_HALION_INTRO2, DOOR_TYPE_PASSAGE },
+ {GO_BURNING_TREE_1, DATA_HALION_INTRO2, DOOR_TYPE_PASSAGE },
+ {GO_TWILIGHT_FLAME_RING, DATA_HALION, DOOR_TYPE_ROOM },
+ {0, 0, DOOR_TYPE_ROOM },
};
class instance_ruby_sanctum : public InstanceMapScript
@@ -46,6 +52,7 @@ public:
instance_ruby_sanctum_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
{
SetBossNumber(MAX_ENCOUNTERS);
+ LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
index de57f2891..ffbd5a3d9 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp
@@ -128,10 +128,10 @@ public:
//me->SetLootMode(0); // [LOOT]
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->DespawnOrUnsummon(1);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
@@ -225,7 +225,7 @@ public:
events.ScheduleEvent(EVENT_SPELL_MARKED_DEATH, 1000);
break;
default:
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
}
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index 5bee3c218..68b4026c8 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -591,7 +591,7 @@ public:
}
}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void WaypointReached(uint32 i) override
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 01444fceb..28149ab59 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -389,7 +389,7 @@ public:
Talk(SAY_KILL_PLAYER);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
summons.DespawnAll();
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index cea810926..6462b2ee2 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -134,7 +134,7 @@ struct boss_faction_championsAI : public ScriptedAI
pInstance->SetData(TYPE_FACTION_CHAMPIONS_PLAYER_DIED, 1);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
if( pInstance )
pInstance->SetData(TYPE_FAILED, 0);
@@ -2368,7 +2368,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
me->DespawnOrUnsummon();
}
@@ -2435,7 +2435,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
me->DespawnOrUnsummon();
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index 5cc90eedb..7daf57746 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -279,7 +279,7 @@ public:
summons.Summon(summon);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
summons.DespawnAll();
@@ -355,7 +355,7 @@ public:
me->DespawnOrUnsummon(10000);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DespawnOrUnsummon();
}
@@ -436,7 +436,7 @@ public:
me->DespawnOrUnsummon(10000);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DespawnOrUnsummon();
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index a6403453e..b87d07929 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -402,7 +402,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
summons.DespawnAll();
@@ -667,7 +667,7 @@ struct boss_jormungarAI : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
@@ -1000,7 +1000,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 66fe3db85..ec53af7ec 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -509,7 +509,7 @@ struct boss_twin_valkyrAI : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
if( pInstance )
pInstance->SetData(TYPE_FAILED, 0);
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 10cb818b6..b5b9e45bd 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -244,8 +244,6 @@ public:
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500);
break;
}
-
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index bc728f11d..a5548353d 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -152,7 +152,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
index c42018a11..83e212d20 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
@@ -21,11 +21,11 @@
DoorData const doorData[] =
{
- { GO_NOVOS_CRYSTAL_1, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_NOVOS_CRYSTAL_2, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_NOVOS_CRYSTAL_3, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_NOVOS_CRYSTAL_4, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_NOVOS_CRYSTAL_1, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM },
+ { GO_NOVOS_CRYSTAL_2, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM },
+ { GO_NOVOS_CRYSTAL_3, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM },
+ { GO_NOVOS_CRYSTAL_4, DATA_NOVOS_CRYSTALS, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM }
};
class instance_drak_tharon_keep : public InstanceMapScript
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index 109e04283..56cac2126 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -198,10 +198,10 @@ public:
summon->SetReactState(REACT_PASSIVE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
index 15b4d08da..05b888769 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
@@ -293,11 +293,11 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
index 50ad235b4..f0777a114 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp
@@ -164,10 +164,10 @@ public:
Talk(RAND(SAY_SLAY_1, SAY_SLAY_2));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (startFightTimer)
Reset();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
index 5e780618c..4379b6281 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp
@@ -153,9 +153,9 @@ public:
Talk(RAND(SAY_SLAY_1, SAY_SLAY_2));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (startFightTimer)
Reset();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index 40547bc6c..1a9140ff1 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -751,9 +751,9 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
}
@@ -847,9 +847,9 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
}
@@ -892,12 +892,12 @@ public:
npc_phantom_mageAI::UpdateAI(diff);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (numOfUpd)
return;
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->IsSummon())
me->ToTempSummon()->DespawnOrUnsummon(1);
}
@@ -990,9 +990,9 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
}
@@ -1073,9 +1073,9 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
}
@@ -1157,9 +1157,9 @@ public:
DoSpellAttackIfReady(SPELL_SHOOT);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (me->GetInstanceScript()->GetData(DATA_WAVE_NUMBER))
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE);
}
@@ -1202,7 +1202,7 @@ public:
Position p = me->GetHomePosition();
if (me->GetExactDist(&p) > 30.0f)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -1234,10 +1234,10 @@ public:
pInstance->SetData(DATA_FROSTSWORN_GENERAL, DONE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
pInstance->SetData(ACTION_SPIRITUAL_REFLECTIONS_HIDE, 1);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
@@ -1296,10 +1296,10 @@ public:
me->CastSpell((Unit*)nullptr, SPELL_SPIRIT_BURST, false);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->UpdatePosition(me->GetHomePosition(), true);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
me->SetVisible(false);
}
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
index 940319efe..ab311645f 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp
@@ -219,7 +219,7 @@ public:
if (x < 600.0f || x > 770.0f || y < -270.0f || y > -137.0f || z < 514.0f || z > 550.0f)
{
me->SetHealth(me->GetMaxHealth());
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
if (CreatureGroup* f = me->GetFormation())
{
const CreatureGroup::CreatureGroupMemberType& m = f->GetMembers();
@@ -289,11 +289,11 @@ public:
Talk(SAY_SLAY_1);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
index 2de3f032e..2012e3e2c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -1117,7 +1117,7 @@ public:
return who->GetEntry() == NPC_FALLEN_WARRIOR;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /* why */) override
{
if (!me->IsAlive() || me->IsInEvadeMode())
return;
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index db5e13761..73587356b 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -21,12 +21,12 @@
DoorData const doorData[] =
{
- { GO_ECK_DOORS, DATA_MOORABI, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_ECK_UNDERWATER_GATE, DATA_ECK_THE_FEROCIOUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_GAL_DARAH_DOORS0, DATA_GAL_DARAH, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_GAL_DARAH_DOORS1, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_GAL_DARAH_DOORS2, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_ECK_DOORS, DATA_MOORABI, DOOR_TYPE_PASSAGE },
+ { GO_ECK_UNDERWATER_GATE, DATA_ECK_THE_FEROCIOUS, DOOR_TYPE_PASSAGE },
+ { GO_GAL_DARAH_DOORS0, DATA_GAL_DARAH, DOOR_TYPE_ROOM },
+ { GO_GAL_DARAH_DOORS1, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE },
+ { GO_GAL_DARAH_DOORS2, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM }
};
class instance_gundrak : public InstanceMapScript
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index c6c79f0db..906799647 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -248,7 +248,7 @@ public:
valid = false;
if (!valid)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -418,7 +418,7 @@ public:
DoSpellAttackIfReady(_isEmpowered ? SPELL_EMPOWERED_SHADOW_LANCE : SPELL_SHADOW_LANCE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (_evading)
return;
@@ -430,7 +430,7 @@ public:
taldaram->AI()->EnterEvadeMode();
if (Creature* valanar = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_VALANAR_GUID)))
valanar->AI()->EnterEvadeMode();
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
_evading = false;
}
};
@@ -507,7 +507,7 @@ public:
valid = false;
if (!valid)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -702,7 +702,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (_evading)
return;
@@ -711,10 +711,10 @@ public:
DoAction(ACTION_REMOVE_INVOCATION);
_evading = true;
if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_KELESETH_GUID)))
- keleseth->AI()->EnterEvadeMode();
+ keleseth->AI()->EnterEvadeMode(why);
if (Creature* valanar = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_VALANAR_GUID)))
- valanar->AI()->EnterEvadeMode();
- ScriptedAI::EnterEvadeMode();
+ valanar->AI()->EnterEvadeMode(why);
+ ScriptedAI::EnterEvadeMode(why);
_evading = false;
}
};
@@ -791,7 +791,7 @@ public:
valid = false;
if (!valid)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -959,10 +959,10 @@ public:
{
Creature* keleseth = instance->instance->GetCreature(instance->GetGuidData(DATA_PRINCE_KELESETH_GUID));
Creature* taldaram = instance->instance->GetCreature(instance->GetGuidData(DATA_PRINCE_TALDARAM_GUID));
- if (keleseth && taldaram && CheckBoundary(me) && CheckBoundary(keleseth) && CheckBoundary(taldaram))
+ if (keleseth && taldaram && IsInBoundary(me) && IsInBoundary(keleseth) && IsInBoundary(taldaram))
return true;
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return false;
}
@@ -999,7 +999,7 @@ public:
}
if (!visualSpellId || !current || !next || !current->IsInCombat() || !next->IsInCombat())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
next->SetHealth(current->GetHealth());
@@ -1041,7 +1041,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (_evading)
return;
@@ -1050,10 +1050,10 @@ public:
DoAction(ACTION_REMOVE_INVOCATION);
_evading = true;
if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_KELESETH_GUID)))
- keleseth->AI()->EnterEvadeMode();
+ keleseth->AI()->EnterEvadeMode(why);
if (Creature* taldaram = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_TALDARAM_GUID)))
- taldaram->AI()->EnterEvadeMode();
- BossAI::EnterEvadeMode();
+ taldaram->AI()->EnterEvadeMode(why);
+ BossAI::EnterEvadeMode(why);
_evading = false;
}
};
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index 9fa3c6719..5cc183afa 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -172,7 +172,7 @@ public:
{
if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer()) || !me->IsVisible())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -552,7 +552,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
const Map::PlayerList& pl = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
@@ -564,7 +564,7 @@ public:
{
if (!me->IsAlive())
return;
- _EnterEvadeMode();
+ _EnterEvadeMode(why);
Reset();
GoToMinchar();
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index c40d9bc2a..cd35da886 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -283,7 +283,7 @@ public:
if (!instance->CheckRequiredBosses(DATA_DEATHBRINGER_SAURFANG, who->ToPlayer()))
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -405,7 +405,7 @@ public:
if (Player* p = itr->GetSource())
if (p->GetTransport())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
}
@@ -495,9 +495,9 @@ public:
return 0;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SAURFANG_EVENT_NPC)))
creature->AI()->DoAction(ACTION_EVADE);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index a78b613fd..a32e4c5cd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -112,7 +112,7 @@ public:
{
if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer()))
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -151,11 +151,11 @@ public:
instance->SetBossState(DATA_FESTERGUT, FAIL);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE)))
- professor->AI()->EnterEvadeMode();
+ professor->AI()->EnterEvadeMode(why);
}
void KilledUnit(Unit* victim) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index f13532524..af6fd51aa 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -780,7 +780,7 @@ public:
_events.ScheduleEvent(EVENT_CLEAVE, urand(3000, 6000));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!me->IsAlive())
return;
@@ -1116,7 +1116,7 @@ public:
_events.ScheduleEvent(EVENT_CLEAVE, urand(3000, 6000));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!me->IsAlive())
return;
@@ -1492,7 +1492,7 @@ struct gunship_npc_AI : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!me->IsAlive() || !me->IsInCombat())
return;
@@ -1553,7 +1553,7 @@ struct npc_gunship_boarding_addAI : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!me->IsAlive() || !me->IsInCombat())
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index c6e8fda3e..31da093cb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -983,7 +983,7 @@ public:
}
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override {}
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index d72d9a4de..1717ddfd4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -501,7 +501,7 @@ public:
{
sayFestergutDeathTimer = 0;
Talk(SAY_FESTERGUT_DEATH);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
else
sayFestergutDeathTimer -= diff;
@@ -512,7 +512,7 @@ public:
{
sayRotfaceDeathTimer = 0;
Talk(SAY_ROTFACE_DEATH);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
else
sayRotfaceDeathTimer -= diff;
@@ -520,7 +520,7 @@ public:
else if (bCallEvade)
{
bCallEvade = false;
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -665,12 +665,12 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
Position p = me->GetHomePosition();
if (!me->IsInCombat() && me->GetExactDist2d(&p) > 10.0f)
me->GetMotionMaster()->MoveCharge(tablePos.GetPositionX(), tablePos.GetPositionY(), tablePos.GetPositionZ(), 15.0f, POINT_TABLE);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void ChangePhase()
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index e4ee572b9..ce1da8377 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -151,7 +151,7 @@ public:
{
if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer()))
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -219,13 +219,13 @@ public:
Talk(SAY_KILL);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE)))
- professor->AI()->EnterEvadeMode();
+ professor->AI()->EnterEvadeMode(why);
}
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
@@ -407,7 +407,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->SetInCombatWithZone();
}
@@ -492,7 +492,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->SetInCombatWithZone();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 17e11627f..dec87549a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -324,7 +324,7 @@ public:
{
if (!instance->CheckRequiredBosses(DATA_SINDRAGOSA, victim->ToPlayer()) || !me->IsVisible())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -369,7 +369,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (!me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) // this flag is removed after she lands and can be engaged
{
@@ -381,7 +381,7 @@ public:
}
me->DisableRotate(false);
me->SetControlled(false, UNIT_STATE_ROOT);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
}
void KilledUnit(Unit* victim) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index c971109cc..c31a35d0f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -673,7 +673,7 @@ public:
{
if (!instance->CheckRequiredBosses(DATA_THE_LICH_KING, target->ToPlayer()) || !me->IsVisible())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -1252,13 +1252,13 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
EntryCheckPredicate pred(NPC_STRANGULATE_VEHICLE);
summons.DoAction(ACTION_TELEPORT_BACK, pred);
instance->SetBossState(DATA_THE_LICH_KING, FAIL);
me->CastSpell((Unit*)nullptr, SPELL_KILL_FROSTMOURNE_PLAYERS, true);
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
me->SetReactState(REACT_AGGRESSIVE);
if (Creature* tirion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING)))
@@ -1635,7 +1635,7 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (!me->IsAlive())
return;
@@ -1643,7 +1643,7 @@ public:
if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
if (theLichKing->IsInEvadeMode())
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
return;
}
@@ -3365,7 +3365,7 @@ public:
return target->GetEntry() != NPC_THE_LICH_KING;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!me->IsAlive())
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 8da26bc53..d1bac1494 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -859,7 +859,7 @@ public:
void AttackStart(Unit*) override {}
void MoveInLineOfSight(Unit*) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void UpdateAI(uint32 diff) override
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 12b6c2d9d..789d5f13f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -1251,9 +1251,9 @@ public:
return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f) && (target->GetTypeId() == TYPEID_PLAYER || target->IsInCombat());
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
me->GetMotionMaster()->Clear(false);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 2e967bcff..3fe022a43 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -63,37 +63,56 @@ enum Spells
VOID_ZONE_VISUAL = 69422
};
+BossBoundaryData const boundaries =
+{
+ { DATA_LORD_MARROWGAR, new CircleBoundary(Position(-428.0f,2211.0f), 95.0) },
+ { DATA_LORD_MARROWGAR, new RectangleBoundary(-430.0f, -330.0f, 2110.0f, 2310.0f) },
+ { DATA_LADY_DEATHWHISPER, new RectangleBoundary(-670.0f, -520.0f, 2145.0f, 2280.0f) },
+ { DATA_DEATHBRINGER_SAURFANG, new RectangleBoundary(-565.0f, -465.0f, 2160.0f, 2260.0f) },
+
+ { DATA_ROTFACE, new RectangleBoundary(4385.0f, 4505.0f, 3082.0f, 3195.0f) },
+ { DATA_FESTERGUT, new RectangleBoundary(4205.0f, 4325.0f, 3082.0f, 3195.0f) },
+ { DATA_PROFESSOR_PUTRICIDE, new ParallelogramBoundary(Position(4356.0f, 3290.0f), Position(4435.0f, 3194.0f), Position(4280.0f, 3194.0f)) },
+ { DATA_PROFESSOR_PUTRICIDE, new RectangleBoundary(4280.0f, 4435.0f, 3150.0f, 4360.0f) },
+
+ { DATA_BLOOD_PRINCE_COUNCIL, new EllipseBoundary(Position(4660.95f, 2769.194f), 85.0, 60.0) },
+ { DATA_BLOOD_QUEEN_LANA_THEL, new CircleBoundary(Position(4595.93f, 2769.365f), 64.0) },
+
+ { DATA_SISTER_SVALNA, new RectangleBoundary(4291.0f, 4423.0f, 2438.0f, 2653.0f) },
+ { DATA_VALITHRIA_DREAMWALKER, new RectangleBoundary(4112.5f, 4293.5f, 2385.0f, 2585.0f) },
+ { DATA_SINDRAGOSA, new EllipseBoundary(Position(4408.6f, 2484.0f), 100.0, 75.0) }
+};
+
DoorData const doorData[] =
{
- {GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N },
- {GO_SCOURGE_TRANSPORTER_FIRST, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N },
- {GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E },
- {GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E },
- //{GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E },
- {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_S },
- {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_TRASH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_W },
- {GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_E },
- {GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM, BOUNDARY_S },
- {GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE, BOUNDARY_S },
- {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM, BOUNDARY_N },
- {GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE, BOUNDARY_S },
- {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N },
- {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S },
- {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N },
- {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S },
- {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_NONE},
- {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA_GAUNTLET, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_E },
- {GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE},
- {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SE },
- {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SW },
- {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // END
+ {GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM },
+ {GO_SCOURGE_TRANSPORTER_FIRST, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
+ {GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
+ {GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE },
+ {GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM },
+ {GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE },
+ {GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM },
+ {GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM },
+ {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM },
+ {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_TRASH, DOOR_TYPE_PASSAGE },
+ {GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
+ {GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE },
+ {GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM },
+ {GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE },
+ {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE },
+ {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM },
+ {GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE },
+ {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
+ {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
+ {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
+ {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE },
+ {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
+ {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA_GAUNTLET, DOOR_TYPE_PASSAGE },
+ {GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
+ {GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE },
+ {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
+ {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM },
+ {0, 0, DOOR_TYPE_ROOM }
};
// this doesnt have to only store questgivers, also can be used for related quest spawns
@@ -179,6 +198,7 @@ public:
DarkwhisperElevatorTimer = 3000;
SetBossNumber(MAX_ENCOUNTERS);
+ LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
TeamIdInInstance = TEAM_NEUTRAL;
HeroicAttempts = MaxHeroicAttempts;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index aeeedd9b3..2a73666e6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -254,10 +254,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void KilledUnit(Unit* who) override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index a620c1997..fc2d7d29d 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -136,7 +136,7 @@ public:
{
if (me->GetExactDist(2684.8f, -3502.5f, 261.3f) > 80.0f)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return false;
}
return true;
@@ -160,10 +160,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* who) override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index e3e1410e3..a47c18774 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -408,10 +408,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_STUNNED);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* pWho) override
@@ -736,7 +736,7 @@ public:
{
public:
npc_teslaAI(Creature* creature) : ScriptedAI(creature) { }
- void EnterEvadeMode() override { } // never stop casting due to evade
+ void EnterEvadeMode(EvadeReason /*why*/) override { } // never stop casting due to evade
void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told
void EnterCombat(Unit* /*who*/) override { }
void DamageTaken(Unit* /*who*/, uint32& damage, DamageEffectType, SpellSchoolMask) override { damage = 0; } // no, you can't kill it
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index fccc68569..5b14679b1 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -814,12 +814,13 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetDisableGravity(true);
me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_GET_DEFAULT_FOR_MAP, 1s);
+
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void HandleIntroSpeech(const uint32 diff)
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
index 35d02aa2d..07377fee6 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
@@ -192,7 +192,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
index 9590056b0..e181b034c 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp
@@ -21,10 +21,10 @@
DoorData const doorData[] =
{
- { GO_TELESTRA_SPHERE, DATA_TELESTRA_ORB, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_ANOMALUS_SPHERE, DATA_ANOMALUS_ORB, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_ORMOROK_SPHERE, DATA_ORMOROK_ORB, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_TELESTRA_SPHERE, DATA_TELESTRA_ORB, DOOR_TYPE_PASSAGE },
+ { GO_ANOMALUS_SPHERE, DATA_ANOMALUS_ORB, DOOR_TYPE_PASSAGE },
+ { GO_ORMOROK_SPHERE, DATA_ORMOROK_ORB, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM }
};
class instance_nexus : public InstanceMapScript
@@ -226,10 +226,10 @@ public:
_allowDeath = me->GetInstanceScript()->GetBossState(DATA_ORMOROK_EVENT) == DONE;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (me->isRegeneratingHealth())
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index b14d6e904..2707e8e1c 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -360,12 +360,12 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
};
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
index d388ccbb3..a96cc2f1a 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp
@@ -145,11 +145,11 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void MoveInLineOfSight(Unit* /*who*/) override {}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index aa7ec64a9..776b948cd 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -350,7 +350,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (_fightWon)
return;
@@ -366,7 +366,7 @@ public:
return;
}
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void Reset() override
@@ -470,7 +470,7 @@ public:
if (!m_pInstance)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index 6946fcc8e..262f7e36e 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -566,7 +566,7 @@ public:
void MoveInLineOfSight(Unit*) override {}
void AttackStart(Unit*) override {}
void UpdateAI(uint32) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /* why */) override {}
void OnCharmed(bool /*apply*/) override {}
bool _boomed;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 79439b8bb..216294d9c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -724,7 +724,7 @@ public:
Vehicle* vehicle;
uint32 _despawnTimer;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
vehicle->InstallAllAccessories(false);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 3c8091639..60e1b55a6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -667,7 +667,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 8d9162f17..886f17969 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -837,7 +837,8 @@ public:
}
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
bool CanAIAttack(Unit const* t) const override { return t->GetEntry() == NPC_HODIR; }
void JustDied(Unit* /*killer*/) override
@@ -934,7 +935,8 @@ public:
}
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
bool CanAIAttack(Unit const* t) const override { return t->GetEntry() == NPC_HODIR; }
void JustDied(Unit* /*killer*/) override
@@ -1034,7 +1036,8 @@ public:
}
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
bool CanAIAttack(Unit const* t) const override { return t->GetEntry() == NPC_HODIR; }
void JustDied(Unit* /*killer*/) override
@@ -1149,7 +1152,8 @@ public:
}
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
bool CanAIAttack(Unit const* t) const override { return t->GetEntry() == NPC_HODIR; }
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index 94d9ead90..59d13140c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -343,7 +343,7 @@ public:
if( me->GetPositionX() < 490.0f || me->GetPositionX() > 690.0f || me->GetPositionY() < 130.0f || me->GetPositionY() > 410.0f )
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -444,11 +444,11 @@ public:
DoMeleeAttackIfReady();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 175f11d86..814fd2b13 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -185,9 +185,9 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
Reset();
me->setActive(false);
@@ -406,7 +406,7 @@ public:
{
if (!UpdateVictim())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -524,7 +524,7 @@ public:
int32 _damageDone;
bool _combatStarted;
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override {}
void MoveInLineOfSight(Unit*) override {}
void AttackStart(Unit*) override {}
void UpdateAI(uint32 /*diff*/) override {}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index ee83d724f..62e1fd872 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -365,7 +365,7 @@ public:
{
if (c->IsInEvadeMode())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
if (!c->IsAlive())
@@ -375,7 +375,7 @@ public:
}
else
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
CloseDoorAndButton();
@@ -429,7 +429,7 @@ public:
Position p = me->GetHomePosition();
if (me->GetExactDist(&p) > 80.0f || !SelectTargetFromPlayerList(150.0f))
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -512,7 +512,7 @@ public:
events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SIT_LMK2_INTERVAL:
if (Creature* LMK2 = GetLMK2())
@@ -527,7 +527,7 @@ public:
LMK2->AI()->SetData(1, 1);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_LMK2_RETREAT_INTERVAL:
if (Creature* LMK2 = GetLMK2())
@@ -539,7 +539,7 @@ public:
events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_ELEVATOR_INTERVAL_0:
if( GameObject* elevator = me->FindNearestGameObject(GO_MIMIRON_ELEVATOR, 100.0f) )
@@ -562,7 +562,7 @@ public:
events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_ELEVATOR_INTERVAL_2:
if (Creature* VX001 = GetVX001())
@@ -571,7 +571,7 @@ public:
events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SITTING_ON_VX001:
me->Yell(TEXT_VX001_ACTIVATE, LANG_UNIVERSAL);
@@ -585,7 +585,7 @@ public:
events.ScheduleEvent(EVENT_EMOTE_VX001, 2000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_EMOTE_VX001:
if( Creature* VX001 = GetVX001() )
@@ -594,7 +594,7 @@ public:
events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_VX001_START_FIGHT:
if( Creature* VX001 = GetVX001() )
@@ -605,7 +605,7 @@ public:
me->SetInCombatWithZone();
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_VX001_EMOTESTATE_DEATH:
if( Creature* VX001 = GetVX001() )
@@ -615,7 +615,7 @@ public:
events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_GET_OUT_VX001:
if( Creature* VX001 = GetVX001() )
@@ -628,7 +628,7 @@ public:
events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SAY_VX001_DEAD:
changeAllowedFlameSpreadTime = true;
@@ -643,7 +643,7 @@ public:
events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SAY_ACU_ACTIVATE:
me->Yell(TEXT_ACU_ACTIVATE, LANG_UNIVERSAL);
@@ -659,7 +659,7 @@ public:
me->SetInCombatWithZone();
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SAY_ACU_DEAD:
me->Yell(TEXT_ACU_DEATH, LANG_UNIVERSAL);
@@ -673,7 +673,7 @@ public:
events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4000);
break;
}
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_VX001_EMOTE_JUMP:
{
@@ -681,7 +681,7 @@ public:
Creature* VX001 = GetVX001();
if( !VX001 || !LMK2 )
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -697,7 +697,7 @@ public:
Creature* LMK2 = GetLMK2();
if( !VX001 || !LMK2 )
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -714,7 +714,7 @@ public:
Creature* VX001 = GetVX001();
if( !VX001 || !ACU )
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -733,7 +733,7 @@ public:
Creature* ACU = GetACU();
if( !VX001 || !LMK2 || !ACU )
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -839,7 +839,7 @@ public:
void MoveInLineOfSight(Unit* /*mover*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (bIsEvading)
return;
@@ -847,16 +847,16 @@ public:
if (Creature* c = GetLMK2())
{
- c->AI()->EnterEvadeMode();
+ c->AI()->EnterEvadeMode(why);
}
if (Creature* c = GetVX001())
{
- c->AI()->EnterEvadeMode();
+ c->AI()->EnterEvadeMode(why);
c->DespawnOrUnsummon();
}
if (Creature* c = GetACU())
{
- c->AI()->EnterEvadeMode();
+ c->AI()->EnterEvadeMode(why);
c->DespawnOrUnsummon();
}
@@ -864,7 +864,7 @@ public:
me->RemoveAllAuras();
me->ExitVehicle();
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
bIsEvading = false;
}
@@ -952,7 +952,7 @@ public:
Creature* ACU = GetACU();
if (!LMK2 || !VX001 || !ACU)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
@@ -1226,7 +1226,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (bIsEvading)
return;
@@ -1237,7 +1237,7 @@ public:
ScriptedAI::EnterEvadeMode();
if (Creature* mimiron = GetMimiron())
- mimiron->AI()->EnterEvadeMode();
+ mimiron->AI()->EnterEvadeMode(why);
bIsEvading = false;
}
@@ -1580,7 +1580,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (bIsEvading)
return;
@@ -1591,7 +1591,7 @@ public:
_EnterEvadeMode();
Reset();
if (Creature* mimiron = GetMimiron())
- mimiron->AI()->EnterEvadeMode();
+ mimiron->AI()->EnterEvadeMode(why);
bIsEvading = false;
}
@@ -1903,7 +1903,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (bIsEvading)
return;
@@ -1914,7 +1914,7 @@ public:
_EnterEvadeMode();
Reset();
if (Creature* mimiron = GetMimiron())
- mimiron->AI()->EnterEvadeMode();
+ mimiron->AI()->EnterEvadeMode(why);
bIsEvading = false;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index cf714d63f..36792aa52 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -588,12 +588,12 @@ public:
pInstance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, NPC_DARK_RUNE_GUARDIAN, 1, me);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetDisableGravity(true);
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
};
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index 1677405d0..7ee99dea3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -433,10 +433,10 @@ public:
go->SetGoState(GO_STATE_ACTIVE);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
DisableThorim(false);
- CreatureAI::EnterEvadeMode();
+ CreatureAI::EnterEvadeMode(why);
}
void Reset() override
@@ -959,7 +959,7 @@ public:
uint32 Timer;
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void MoveInLineOfSight(Unit*) override {}
void AttackStart(Unit*) override {}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
index 029127b32..21d21e3d7 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp
@@ -399,9 +399,9 @@ public:
me->SummonCreature(NPC_SANITY_WELL, 1899.94f, 0.330621f, 332.296f, 0.0f);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
Position pos;
@@ -736,7 +736,7 @@ public:
if (!SelectTargetFromPlayerList(90, SPELL_INSANE1))
{
m_pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_INSANE1);
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
index 11f283e3a..5df1f1740 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp
@@ -297,10 +297,10 @@ public:
ScriptedAI::AttackStart(who);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (me->GetFaction() == FACTION_MONSTER_2)
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void OnCharmed(bool /*apply*/) override {}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index df890fe43..893e524b4 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -232,11 +232,11 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 89fb4836b..c8caac610 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -141,10 +141,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void SetData(uint32 data, uint32 param) override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index cea9761ab..7de1ed769 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -159,10 +159,10 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* /*pWho*/) override
diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
index b0181ebf1..e298fb3bd 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
@@ -179,10 +179,10 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
index ce483811b..0e1a1c51c 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
@@ -188,9 +188,9 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 99f609235..beb124351 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -289,10 +289,11 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+
if (pInstance)
pInstance->SetData(DATA_FAILED, 1);
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
index fdbac29f3..834459ea4 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
@@ -121,10 +121,11 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
+
if (pInstance)
pInstance->SetData(DATA_FAILED, 1);
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index dc4445362..78b73531b 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -120,9 +120,9 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index b54c8dc6d..23dbd25a2 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -200,9 +200,9 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index f7f03cb86..87272feb6 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -170,9 +170,9 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
events.Reset();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
if (pInstance)
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 3c6df447b..b45e05a45 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -376,7 +376,7 @@ struct violet_hold_trashAI : public npc_escortAI
me->CastSpell((Unit*)nullptr, SPELL_DESTROY_DOOR_SEAL, true);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
{
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 06ec7f26a..878fae16b 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -482,7 +482,7 @@ public:
{
npc_future_youAI(Creature* c) : ScriptedAI(c) {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT);
me->ClearUnitState(UNIT_STATE_EVADE);
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 1fc01e13e..5cc0f5707 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -249,7 +249,7 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (Creature* Emily = GetClosestCreatureWithEntry(me, NPC_EMILY, 50.0f))
me->GetMotionMaster()->MoveFollow(Emily, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index c6a267892..ccc603448 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -1586,9 +1586,9 @@ public:
events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
Reset();
@@ -1659,7 +1659,7 @@ public:
case EVENT_DUMMY_RESET:
if (UpdateVictim())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
events.ScheduleEvent(EVENT_DUMMY_RESET, 10000);
}
break;
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index 1aedebe55..83bf55bf6 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -45,7 +45,7 @@ public:
void AttackStart(Unit* /*who*/) override {}
void EnterCombat(Unit* /*who*/) override {}
- void EnterEvadeMode() override {}
+ void EnterEvadeMode(EvadeReason /* why */) override {}
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
@@ -348,11 +348,11 @@ public:
bool switching;
bool startPath;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (switching || me->HasAuraType(SPELL_AURA_CONTROL_VEHICLE))
return;
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void Reset() override
@@ -492,7 +492,7 @@ public:
else
{
me->RemoveAllAuras();
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
return;
}
@@ -521,7 +521,7 @@ public:
else
{
me->RemoveAllAuras();
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
}
@@ -546,7 +546,7 @@ public:
if (!player)
{
me->RemoveAllAuras();
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
return;
@@ -573,7 +573,7 @@ public:
else
{
me->RemoveAllAuras();
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
}
@@ -923,7 +923,7 @@ public:
void AttackStart(Unit* /*who*/) override { }
void EnterCombat(Unit* /*who*/) override { }
- void EnterEvadeMode() override { }
+ void EnterEvadeMode(EvadeReason /*why*/) override { }
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 18bc5eba0..9004217d9 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -388,7 +388,7 @@ public:
ObjectGuid playerGUID;
ObjectGuid lichGUID;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (playerGUID)
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
@@ -396,7 +396,7 @@ public:
return;
me->SetFaction(FACTION_UNDEAD_SCOURGE);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void Reset() override
@@ -423,7 +423,7 @@ public:
who->ToPlayer()->NearTeleportTo(6143.76f, -1969.7f, 417.57f, 2.08f);
else
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
}
@@ -573,7 +573,7 @@ public:
break;
case EVENT_BETRAYAL_14:
playerGUID.Clear();
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
break;
}
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
index 3cd4dc72e..ef760591d 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp
@@ -65,10 +65,10 @@ public:
EventMap events;
ObjectGuid focusGUID;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetControlled(false, UNIT_STATE_ROOT);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void Reset() override
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index e0e433eae..26d7599ba 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -94,11 +94,11 @@ public:
instance->SetData(DATA_BLACKHEARTTHEINCITEREVENT, IN_PROGRESS);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (InciteChaos && SelectTargetFromPlayerList(100.0f))
return;
- CreatureAI::EnterEvadeMode();
+ CreatureAI::EnterEvadeMode(why);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
index 3d64c6b2a..6ac1c1931 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
@@ -188,7 +188,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index 2141af846..89e1f8541 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -232,12 +232,12 @@ public:
beamPosId = urand(0, 3);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
if (Creature* akama = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_AKAMA)))
- akama->AI()->EnterEvadeMode();
+ akama->AI()->EnterEvadeMode(why);
}
bool CanAIAttack(Unit const* target) const override
@@ -462,8 +462,6 @@ public:
break;
}
- EnterEvadeIfOutOfCombatArea();
-
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index 88c044873..bc4f97a1d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -250,8 +250,6 @@ public:
me->CastCustomSpell(SPELL_SUMMON_ENSLAVED_SOUL, SPELLVALUE_MAX_TARGETS, 1, me, false);
break;
}
-
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 1c017ddcb..413d7b1fa 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -135,9 +135,9 @@ public:
me->SetWalk(true);
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- BossAI::EnterEvadeMode();
+ BossAI::EnterEvadeMode(why);
summonsGenerator.DoAction(ACTION_DESPAWN_ALL);
events2.ScheduleEvent(EVENT_SHADE_RESET_ENCOUNTER, 20000);
me->SetVisible(false);
@@ -172,7 +172,7 @@ public:
}
else if (param == ACTION_AKAMA_DIED)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
@@ -258,7 +258,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index cd7edb619..180a9fea6 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -194,7 +194,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index e4a1766be..75121d6ac 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -178,7 +178,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index f01e45741..7d739b2be 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -239,10 +239,10 @@ struct boss_illidari_council_memberAI : public ScriptedAI
events.Reset();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetOwnerGUID(ObjectGuid::Empty);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void DoAction(int32 param) override
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index c7cd0203a..94e9c4d04 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -21,23 +21,23 @@
DoorData const doorData[] =
{
- { GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_TEMPLE_DOOR, DATA_TERON_GOREFIEND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE },
+ { GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM },
+ { GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE },
+ { GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM },
+ { GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
+ { GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
+ { GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE },
+ { GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE },
+ { GO_TEMPLE_DOOR, DATA_TERON_GOREFIEND, DOOR_TYPE_PASSAGE },
+ { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE },
+ { GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE },
+ { GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
+ { GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
+ { GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE },
+ { GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
+ { GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM }
};
class instance_black_temple : public InstanceMapScript
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
index c739340a0..eb2db7192 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp
@@ -195,7 +195,6 @@ public:
void UpdateAI(uint32 diff) override
{
- EnterEvadeIfOutOfCombatArea();
if (!UpdateVictim())
return;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index b11cedae7..2d8cbfefb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -289,7 +289,7 @@ public:
ObjectGuid ownerGUID;
EventMap events;
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DespawnOrUnsummon(1);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
index 8f7e47ec0..fb76249ca 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -23,10 +23,10 @@
DoorData const doorData[] =
{
- { GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }
+ { GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
+ { GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
+ { GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
+ { GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }
};
class instance_serpent_shrine : public InstanceMapScript
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
index 83c6fe213..8c7aad8ef 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp
@@ -179,7 +179,7 @@ public:
me->SetInCombatWithZone();
if (!me->IsInCombat())
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
else
@@ -260,14 +260,14 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
events.Reset();
summons.DespawnAll();
me->DespawnOrUnsummon(1);
- ScriptedAI::EnterEvadeMode();
+ ScriptedAI::EnterEvadeMode(why);
}
void JustSummoned(Creature* summon) override
diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
index 0f84f4e66..94d0b57be 100644
--- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
+++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp
@@ -21,9 +21,9 @@
DoorData const doorData[] =
{
- { GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE },
+ { GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
MinionData const minionData[] =
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index ac288cf9f..f0ebbe7ee 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -163,7 +163,7 @@ public:
events.Reset();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DespawnOrUnsummon(1);
}
@@ -267,7 +267,7 @@ public:
events.Reset();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
Talk(SAY_WIPE);
me->DespawnOrUnsummon(1);
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
index 1e474c21f..779f25b84 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
@@ -19,10 +19,15 @@
#include "ScriptMgr.h"
#include "magtheridons_lair.h"
+BossBoundaryData const boundaries =
+{
+ { TYPE_MAGTHERIDON, new CircleBoundary(Position(-18.70f, 2.24f), 52.30) }
+};
+
DoorData const doorData[] =
{
- { GO_MAGTHERIDON_DOORS, TYPE_MAGTHERIDON, DOOR_TYPE_ROOM, BOUNDARY_S },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_MAGTHERIDON_DOORS, TYPE_MAGTHERIDON, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
MinionData const minionData[] =
@@ -42,6 +47,7 @@ public:
SetBossNumber(MAX_ENCOUNTER);
LoadDoorData(doorData);
LoadMinionData(minionData);
+ LoadBossBoundaries(boundaries);
}
void Initialize() override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index b52b6c1a8..f1ca67c7b 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -227,7 +227,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index db0e42fc7..e88d067aa 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -373,7 +373,6 @@ public:
void UpdateAI(uint32 diff) override
{
- if (EnterEvadeIfOutOfCombatArea())
return;
events2.Update(diff);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
index 8d93b0b4d..26af9fc92 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -115,7 +115,6 @@ public:
}
DoMeleeAttackIfReady();
- EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
index bc5fda445..b1a01653e 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
@@ -21,10 +21,10 @@
static DoorData const doorData[] =
{
- { GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
+ { GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE },
+ { GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE },
+ { GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM }
};
class instance_mechanar : public InstanceMapScript
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
index a11bdb922..b92cd7bfd 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
@@ -21,9 +21,9 @@
DoorData const doorData[] =
{
- { GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+ { GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE },
+ { GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_arcatraz : public InstanceMapScript
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index 3b8832319..80fdf390c 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -1170,13 +1170,13 @@ public:
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
if (fight)
SetEscortPaused(false);
SummonsAction(nullptr);
- npc_escortAI::EnterEvadeMode();
+ npc_escortAI::EnterEvadeMode(why);
}
void SummonsAction(Unit* who)
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp
index 5467f548a..904774be6 100644
--- a/src/server/scripts/Pet/pet_generic.cpp
+++ b/src/server/scripts/Pet/pet_generic.cpp
@@ -155,7 +155,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
memset(_banners, 0, sizeof(_banners));
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (Unit* owner = me->GetCharmerOrOwner())
{
@@ -689,9 +689,7 @@ struct npc_pet_gen_toxic_wasteling : public PassiveAI
void Reset() override { checkTimer = 3000; }
- void EnterEvadeMode() override
- {
- }
+ void EnterEvadeMode(EvadeReason /*why*/) override {}
void MovementInform(uint32 type, uint32 id) override
{
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index b3a181999..ab9abfc60 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -49,7 +49,7 @@ struct npc_pet_hunter_snake_trap : public ScriptedAI
}
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
// _EnterEvadeMode();
me->DeleteThreatList();
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index 642000932..ee68b7e86 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -133,7 +133,7 @@ struct npc_pet_mage_mirror_image : CasterAI
}
// Do not reload Creature templates on evade mode enter - prevent visual lost
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason /*why*/) override
{
if (me->IsInEvadeMode() || !me->IsAlive())
return;
@@ -172,7 +172,7 @@ struct npc_pet_mage_mirror_image : CasterAI
}
if (!owner->IsInCombat() && !me->GetVictim())
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_OTHER);
}
}
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 6a4ac3d42..0b7fe74eb 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -345,9 +345,9 @@ public:
resetTimer = 5000;
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
Reset();
@@ -366,7 +366,7 @@ public:
if (resetTimer <= diff)
{
- EnterEvadeMode();
+ EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
resetTimer = 5000;
}
else
@@ -405,9 +405,9 @@ public:
me->SelectLevel();
}
- void EnterEvadeMode() override
+ void EnterEvadeMode(EvadeReason why) override
{
- if (!_EnterEvadeMode())
+ if (!_EnterEvadeMode(why))
return;
Reset();
diff --git a/src/server/shared/enuminfo_SharedDefines.cpp b/src/server/shared/enuminfo_SharedDefines.cpp
index 9a6118445..06ea37987 100644
--- a/src/server/shared/enuminfo_SharedDefines.cpp
+++ b/src/server/shared/enuminfo_SharedDefines.cpp
@@ -15,8 +15,8 @@
* with this program. If not, see .
*/
-#include "Define.h"
#include "SharedDefines.h"
+#include "Define.h"
#include "SmartEnum.h"
#include
@@ -159,7 +159,7 @@ AC_API_EXPORT EnumText EnumUtils::ToString(SpellAttr0 value)
{
case SPELL_ATTR0_PROC_FAILURE_BURNS_CHARGE: return { "SPELL_ATTR0_PROC_FAILURE_BURNS_CHARGE", "Unknown attribute 0@Attr0", "" };
case SPELL_ATTR0_USES_RANGED_SLOT: return { "SPELL_ATTR0_USES_RANGED_SLOT", "Treat as ranged attack", "Use ammo, ranged attack range modifiers, ranged haste, etc." };
- case SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE: return { "SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE", "On next melee (type 1)", R"(Both "on next swing" attributes have identical handling in server & client)" };
+ case SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE: return { "SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE", "On next melee (type 1)", "Both \042on next swing\042 attributes have identical handling in server & client" };
case SPELL_ATTR0_DO_NOT_LOG_IMMUNE_MISSES: return { "SPELL_ATTR0_DO_NOT_LOG_IMMUNE_MISSES", "Replenishment (client only)", "" };
case SPELL_ATTR0_IS_ABILITY: return { "SPELL_ATTR0_IS_ABILITY", "Treat as ability", "Cannot be reflected, not affected by cast speed modifiers, etc." };
case SPELL_ATTR0_IS_TRADESKILL: return { "SPELL_ATTR0_IS_TRADESKILL", "Trade skill recipe", "Displayed in recipe list, not affected by cast speed modifiers" };
@@ -167,7 +167,7 @@ AC_API_EXPORT EnumText EnumUtils::ToString(SpellAttr0 value)
case SPELL_ATTR0_DO_NOT_DISPLAY: return { "SPELL_ATTR0_DO_NOT_DISPLAY", "Hidden in UI (client only)", "Not visible in spellbook or aura bar (Spellbook, Aura Icon, Combat Log)" };
case SPELL_ATTR0_DO_NOT_LOG: return { "SPELL_ATTR0_DO_NOT_LOG", "Hidden in combat log (client only)", "Spell will not appear in combat logs" };
case SPELL_ATTR0_HELD_ITEM_ONLY: return { "SPELL_ATTR0_HELD_ITEM_ONLY", "Auto-target mainhand item (client only)", "Client will automatically select main-hand item as cast target" };
- case SPELL_ATTR0_ON_NEXT_SWING: return { "SPELL_ATTR0_ON_NEXT_SWING", "On next melee (type 2)", R"(Both "on next swing" attributes have identical handling in server & client)" };
+ case SPELL_ATTR0_ON_NEXT_SWING: return { "SPELL_ATTR0_ON_NEXT_SWING", "On next melee (type 2)", "Both \042on next swing\042 attributes have identical handling in server & client" };
case SPELL_ATTR0_WEARER_CASTS_PROC_TRIGGER: return { "SPELL_ATTR0_WEARER_CASTS_PROC_TRIGGER", "Unknown attribute 11@Attr0", "" };
case SPELL_ATTR0_SERVER_ONLY: return { "SPELL_ATTR0_SERVER_ONLY", "Only usable during daytime (unused)", "" };
case SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP: return { "SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP", "Only usable during nighttime (unused)", "" };
@@ -288,11 +288,11 @@ AC_API_EXPORT EnumText EnumUtils::ToString(SpellAttr1 value)
{
case SPELL_ATTR1_DISMISS_PET_FIRST: return { "SPELL_ATTR1_DISMISS_PET_FIRST", "Dismiss Pet on cast", "Without this attribute, summoning spells will fail if caster already has a pet" };
case SPELL_ATTR1_USE_ALL_MANA: return { "SPELL_ATTR1_USE_ALL_MANA", "Drain all power", "Ignores listed power cost and drains entire pool instead" };
- case SPELL_ATTR1_IS_CHANNELED: return { "SPELL_ATTR1_IS_CHANNELED", "Channeled (type 1)", R"(Both "channeled" attributes have identical handling in server & client)" };
+ case SPELL_ATTR1_IS_CHANNELED: return { "SPELL_ATTR1_IS_CHANNELED", "Channeled (type 1)", "Both \042channeled\042 attributes have identical handling in server & client" };
case SPELL_ATTR1_NO_REDIRECTION: return { "SPELL_ATTR1_NO_REDIRECTION", "Ignore redirection effects", "Spell will not be attracted by SPELL_MAGNET auras (Grounding Totem)" };
case SPELL_ATTR1_NO_SKILL_INCREASE: return { "SPELL_ATTR1_NO_SKILL_INCREASE", "Unknown attribute 4@Attr1", "stealth and whirlwind" };
case SPELL_ATTR1_ALLOW_WHILE_STEALTHED: return { "SPELL_ATTR1_ALLOW_WHILE_STEALTHED", "Does not break stealth", "" };
- case SPELL_ATTR1_IS_SELF_CHANNELED: return { "SPELL_ATTR1_IS_SELF_CHANNELED", "Channeled (type 2)", R"(Both "channeled" attributes have identical handling in server & client)" };
+ case SPELL_ATTR1_IS_SELF_CHANNELED: return { "SPELL_ATTR1_IS_SELF_CHANNELED", "Channeled (type 2)", "Both \042channeled\042 attributes have identical handling in server & client" };
case SPELL_ATTR1_NO_REFLECTION: return { "SPELL_ATTR1_NO_REFLECTION", "Ignore reflection effects", "Spell will pierce through Spell Reflection and similar" };
case SPELL_ATTR1_ONLY_PEACEFUL_TARGETS: return { "SPELL_ATTR1_ONLY_PEACEFUL_TARGETS", "Target cannot be in combat", "" };
case SPELL_ATTR1_INITIATE_COMBAT: return { "SPELL_ATTR1_INITIATE_COMBAT", "Enables Auto-Attack (client only)", "Caster will begin auto-attacking the target on cast" };