aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-01-19 21:23:06 +0100
committerShauren <shauren.trinity@gmail.com>2023-01-19 21:23:06 +0100
commit3df16c12b75c27c85b720a3eced4943a06f060f5 (patch)
tree6ae179130fae00602dc119bd2509fc50a71fbc11
parent8568b08350b954afb6603bf2c64897493230f2b1 (diff)
Core/Scripts: Move EvadeReason outside of CreatureAI class
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp4
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp163
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h85
-rw-r--r--src/server/game/AI/CoreAI/UnitAICommon.cpp186
-rw-r--r--src/server/game/AI/CoreAI/UnitAICommon.h117
-rw-r--r--src/server/game/AI/CoreAI/enuminfo_UnitAICommon.cpp73
-rw-r--r--src/server/game/AI/CreatureAI.cpp9
-rw-r--r--src/server/game/AI/CreatureAI.h14
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.cpp2
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedEscortAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h2
-rw-r--r--src/server/game/AI/enuminfo_CreatureAI.cpp73
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp6
-rw-r--r--src/server/game/Entities/Object/Object.cpp30
-rw-r--r--src/server/game/Entities/Unit/Unit.h10
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h10
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h6
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/npc_arthas.cpp3
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp18
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp2
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp2
-rw-r--r--src/server/scripts/Pet/pet_mage.cpp2
-rw-r--r--src/server/scripts/World/npcs_special.cpp2
63 files changed, 495 insertions, 446 deletions
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index 63a6f9932a1..8bae96a6092 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -48,7 +48,7 @@ int32 NullCreatureAI::Permissible(Creature const* creature)
void PassiveAI::UpdateAI(uint32)
{
if (me->IsEngaged() && !me->IsInCombat())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
void PossessedAI::AttackStart(Unit* target)
@@ -82,7 +82,7 @@ void CritterAI::JustEngagedWith(Unit* /*who*/)
void CritterAI::MovementInform(uint32 type, uint32 /*id*/)
{
if (type == TIMED_FLEEING_MOTION_TYPE)
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
}
void CritterAI::EnterEvadeMode(EvadeReason why)
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index a807a178acb..b503441b976 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -423,166 +423,3 @@ std::string UnitAI::GetDebugInfo() const
<< "Me: " << (me ? me->GetDebugInfo() : "NULL");
return sstr.str();
}
-
-DefaultTargetSelector::DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withTank, int32 aura)
- : _me(unit), _dist(dist), _playerOnly(playerOnly), _exception(!withTank ? unit->GetThreatManager().GetLastVictim() : nullptr), _aura(aura)
-{
-}
-
-bool DefaultTargetSelector::operator()(Unit const* target) const
-{
- if (!_me)
- return false;
-
- if (!target)
- return false;
-
- if (_exception && target == _exception)
- return false;
-
- if (_playerOnly && (target->GetTypeId() != TYPEID_PLAYER))
- return false;
-
- if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
- return false;
-
- if (_dist < 0.0f && _me->IsWithinCombatRange(target, -_dist))
- return false;
-
- if (_aura)
- {
- if (_aura > 0)
- {
- if (!target->HasAura(_aura))
- return false;
- }
- else
- {
- if (target->HasAura(-_aura))
- return false;
- }
- }
-
- return true;
-}
-
-SpellTargetSelector::SpellTargetSelector(Unit* caster, uint32 spellId) :
- _caster(caster), _spellInfo(sSpellMgr->GetSpellInfo(spellId, caster->GetMap()->GetDifficultyID()))
-{
- ASSERT(_spellInfo);
-}
-
-bool SpellTargetSelector::operator()(Unit const* target) const
-{
- if (!target)
- return false;
-
- if (_spellInfo->CheckTarget(_caster, target) != SPELL_CAST_OK)
- return false;
-
- // copypasta from Spell::CheckRange
- float minRange = 0.0f;
- float maxRange = 0.0f;
- float rangeMod = 0.0f;
- if (_spellInfo->RangeEntry)
- {
- if (_spellInfo->RangeEntry->Flags & SPELL_RANGE_MELEE)
- {
- rangeMod = _caster->GetCombatReach() + 4.0f / 3.0f;
- rangeMod += target->GetCombatReach();
-
- rangeMod = std::max(rangeMod, NOMINAL_MELEE_RANGE);
- }
- else
- {
- float meleeRange = 0.0f;
- if (_spellInfo->RangeEntry->Flags & SPELL_RANGE_RANGED)
- {
- meleeRange = _caster->GetCombatReach() + 4.0f / 3.0f;
- meleeRange += target->GetCombatReach();
-
- meleeRange = std::max(meleeRange, NOMINAL_MELEE_RANGE);
- }
-
- minRange = _caster->GetSpellMinRangeForTarget(target, _spellInfo) + meleeRange;
- maxRange = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
-
- rangeMod = _caster->GetCombatReach();
- rangeMod += target->GetCombatReach();
-
- if (minRange > 0.0f && !(_spellInfo->RangeEntry->Flags & SPELL_RANGE_RANGED))
- minRange += rangeMod;
- }
-
- if (_caster->isMoving() && target->isMoving() && !_caster->IsWalking() && !target->IsWalking() &&
- (_spellInfo->RangeEntry->Flags & SPELL_RANGE_MELEE || target->GetTypeId() == TYPEID_PLAYER))
- rangeMod += 8.0f / 3.0f;
- }
-
- maxRange += rangeMod;
-
- minRange *= minRange;
- maxRange *= maxRange;
-
- if (target != _caster)
- {
- if (_caster->GetExactDistSq(target) > maxRange)
- return false;
-
- if (minRange > 0.0f && _caster->GetExactDistSq(target) < minRange)
- return false;
- }
-
- return true;
-}
-
-bool NonTankTargetSelector::operator()(Unit const* target) const
-{
- if (!target)
- return false;
-
- if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
- return false;
-
- if (Unit* currentVictim = _source->GetThreatManager().GetCurrentVictim())
- return target != currentVictim;
-
- return target != _source->GetVictim();
-}
-
-bool PowerUsersSelector::operator()(Unit const* target) const
-{
- if (!_me || !target)
- return false;
-
- if (target->GetPowerType() != _power)
- return false;
-
- if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
- return false;
-
- if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
- return false;
-
- if (_dist < 0.0f && _me->IsWithinCombatRange(target, -_dist))
- return false;
-
- return true;
-}
-
-bool FarthestTargetSelector::operator()(Unit const* target) const
-{
- if (!_me || !target)
- return false;
-
- if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
- return false;
-
- if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
- return false;
-
- if (_inLos && !_me->IsWithinLOSInMap(target))
- return false;
-
- return true;
-}
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index 631f4f45ff6..e7165b69d3f 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -22,6 +22,7 @@
#include "ObjectGuid.h"
#include "SharedDefines.h"
#include "SpellDefines.h"
+#include "UnitAICommon.h"
#include <unordered_map>
#define CAST_AI(a, b) (dynamic_cast<a*>(b))
@@ -45,90 +46,6 @@ enum Difficulty : uint8;
enum MovementGeneratorType : uint8;
enum SpellEffIndex : uint8;
-// Selection method used by SelectTarget
-enum class SelectTargetMethod
-{
- Random, // just pick a random target
- MaxThreat, // prefer targets higher in the threat list
- MinThreat, // prefer targets lower in the threat list
- MaxDistance, // prefer targets further from us
- MinDistance // prefer targets closer to us
-};
-
-// default predicate function to select target based on distance, player and/or aura criteria
-struct TC_GAME_API DefaultTargetSelector
-{
- public:
- // unit: the reference unit
- // dist: if 0: ignored, if > 0: maximum distance to the reference unit, if < 0: minimum distance to the reference unit
- // playerOnly: self explaining
- // withMainTank: allow current tank to be selected
- // aura: if 0: ignored, if > 0: the target shall have the aura, if < 0, the target shall NOT have the aura
- DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withMainTank, int32 aura);
- bool operator()(Unit const* target) const;
-
- private:
- Unit const* _me;
- float _dist;
- bool _playerOnly;
- Unit const* _exception;
- int32 _aura;
-};
-
-// Target selector for spell casts checking range, auras and attributes
-/// @todo Add more checks from Spell::CheckCast
-struct TC_GAME_API SpellTargetSelector
-{
- public:
- SpellTargetSelector(Unit* caster, uint32 spellId);
- bool operator()(Unit const* target) const;
-
- private:
- Unit const* _caster;
- SpellInfo const* _spellInfo;
-};
-
-// Very simple target selector, will just skip main target
-// NOTE: When passing to UnitAI::SelectTarget remember to use 0 as position for random selection
-// because tank will not be in the temporary list
-struct TC_GAME_API NonTankTargetSelector
-{
- public:
- NonTankTargetSelector(Unit* source, bool playerOnly = true) : _source(source), _playerOnly(playerOnly) { }
- bool operator()(Unit const* target) const;
-
- private:
- Unit* _source;
- bool _playerOnly;
-};
-
-// Simple selector for units using mana
-struct TC_GAME_API PowerUsersSelector
-{
-public:
- PowerUsersSelector(Unit const* unit, Powers power, float dist, bool playerOnly) : _me(unit), _power(power), _dist(dist), _playerOnly(playerOnly) { }
- bool operator()(Unit const* target) const;
-
-private:
- Unit const* _me;
- Powers const _power;
- float const _dist;
- bool const _playerOnly;
-};
-
-struct TC_GAME_API FarthestTargetSelector
-{
-public:
- FarthestTargetSelector(Unit const* unit, float dist, bool playerOnly, bool inLos) : _me(unit), _dist(dist), _playerOnly(playerOnly), _inLos(inLos) {}
- bool operator()(Unit const* target) const;
-
- private:
- Unit const* _me;
- float _dist;
- bool _playerOnly;
- bool _inLos;
-};
-
class TC_GAME_API UnitAI
{
protected:
diff --git a/src/server/game/AI/CoreAI/UnitAICommon.cpp b/src/server/game/AI/CoreAI/UnitAICommon.cpp
new file mode 100644
index 00000000000..51b60ed64f4
--- /dev/null
+++ b/src/server/game/AI/CoreAI/UnitAICommon.cpp
@@ -0,0 +1,186 @@
+/*
+ * This file is part of the TrinityCore 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 General Public License as published by the
+ * Free Software Foundation; either version 2 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 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "UnitAICommon.h"
+#include "Map.h"
+#include "Spell.h"
+#include "SpellInfo.h"
+#include "SpellMgr.h"
+#include "Unit.h"
+
+DefaultTargetSelector::DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withTank, int32 aura)
+ : _me(unit), _dist(dist), _playerOnly(playerOnly), _exception(!withTank ? unit->GetThreatManager().GetLastVictim() : nullptr), _aura(aura)
+{
+}
+
+bool DefaultTargetSelector::operator()(Unit const* target) const
+{
+ if (!_me)
+ return false;
+
+ if (!target)
+ return false;
+
+ if (_exception && target == _exception)
+ return false;
+
+ if (_playerOnly && (target->GetTypeId() != TYPEID_PLAYER))
+ return false;
+
+ if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
+ return false;
+
+ if (_dist < 0.0f && _me->IsWithinCombatRange(target, -_dist))
+ return false;
+
+ if (_aura)
+ {
+ if (_aura > 0)
+ {
+ if (!target->HasAura(_aura))
+ return false;
+ }
+ else
+ {
+ if (target->HasAura(-_aura))
+ return false;
+ }
+ }
+
+ return true;
+}
+
+SpellTargetSelector::SpellTargetSelector(Unit* caster, uint32 spellId) :
+ _caster(caster), _spellInfo(sSpellMgr->GetSpellInfo(spellId, caster->GetMap()->GetDifficultyID()))
+{
+ ASSERT(_spellInfo);
+}
+
+bool SpellTargetSelector::operator()(Unit const* target) const
+{
+ if (!target)
+ return false;
+
+ if (_spellInfo->CheckTarget(_caster, target) != SPELL_CAST_OK)
+ return false;
+
+ // copypasta from Spell::CheckRange
+ float minRange = 0.0f;
+ float maxRange = 0.0f;
+ float rangeMod = 0.0f;
+ if (_spellInfo->RangeEntry)
+ {
+ if (_spellInfo->RangeEntry->Flags & SPELL_RANGE_MELEE)
+ {
+ rangeMod = _caster->GetCombatReach() + 4.0f / 3.0f;
+ rangeMod += target->GetCombatReach();
+
+ rangeMod = std::max(rangeMod, NOMINAL_MELEE_RANGE);
+ }
+ else
+ {
+ float meleeRange = 0.0f;
+ if (_spellInfo->RangeEntry->Flags & SPELL_RANGE_RANGED)
+ {
+ meleeRange = _caster->GetCombatReach() + 4.0f / 3.0f;
+ meleeRange += target->GetCombatReach();
+
+ meleeRange = std::max(meleeRange, NOMINAL_MELEE_RANGE);
+ }
+
+ minRange = _caster->GetSpellMinRangeForTarget(target, _spellInfo) + meleeRange;
+ maxRange = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
+
+ rangeMod = _caster->GetCombatReach();
+ rangeMod += target->GetCombatReach();
+
+ if (minRange > 0.0f && !(_spellInfo->RangeEntry->Flags & SPELL_RANGE_RANGED))
+ minRange += rangeMod;
+ }
+
+ if (_caster->isMoving() && target->isMoving() && !_caster->IsWalking() && !target->IsWalking() &&
+ (_spellInfo->RangeEntry->Flags & SPELL_RANGE_MELEE || target->GetTypeId() == TYPEID_PLAYER))
+ rangeMod += 8.0f / 3.0f;
+ }
+
+ maxRange += rangeMod;
+
+ minRange *= minRange;
+ maxRange *= maxRange;
+
+ if (target != _caster)
+ {
+ if (_caster->GetExactDistSq(target) > maxRange)
+ return false;
+
+ if (minRange > 0.0f && _caster->GetExactDistSq(target) < minRange)
+ return false;
+ }
+
+ return true;
+}
+
+bool NonTankTargetSelector::operator()(Unit const* target) const
+{
+ if (!target)
+ return false;
+
+ if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
+ return false;
+
+ if (Unit* currentVictim = _source->GetThreatManager().GetCurrentVictim())
+ return target != currentVictim;
+
+ return target != _source->GetVictim();
+}
+
+bool PowerUsersSelector::operator()(Unit const* target) const
+{
+ if (!_me || !target)
+ return false;
+
+ if (target->GetPowerType() != _power)
+ return false;
+
+ if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
+ return false;
+
+ if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
+ return false;
+
+ if (_dist < 0.0f && _me->IsWithinCombatRange(target, -_dist))
+ return false;
+
+ return true;
+}
+
+bool FarthestTargetSelector::operator()(Unit const* target) const
+{
+ if (!_me || !target)
+ return false;
+
+ if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER)
+ return false;
+
+ if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist))
+ return false;
+
+ if (_inLos && !_me->IsWithinLOSInMap(target))
+ return false;
+
+ return true;
+}
diff --git a/src/server/game/AI/CoreAI/UnitAICommon.h b/src/server/game/AI/CoreAI/UnitAICommon.h
new file mode 100644
index 00000000000..1c27fb55341
--- /dev/null
+++ b/src/server/game/AI/CoreAI/UnitAICommon.h
@@ -0,0 +1,117 @@
+/*
+ * This file is part of the TrinityCore 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 General Public License as published by the
+ * Free Software Foundation; either version 2 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 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TRINITYCORE_UNIT_AI_COMMON_H
+#define TRINITYCORE_UNIT_AI_COMMON_H
+
+#include "Define.h"
+
+class SpellInfo;
+class Unit;
+
+enum Powers : int8;
+
+// EnumUtils: DESCRIBE THIS
+enum class EvadeReason
+{
+ NoHostiles, // the creature's threat list is empty
+ Boundary, // the creature has moved outside its evade boundary
+ NoPath, // the creature was unable to reach its target for over 5 seconds
+ SequenceBreak, // this is a boss and the pre-requisite encounters for engaging it are not defeated yet
+ Other, // anything else
+};
+
+// Selection method used by SelectTarget
+enum class SelectTargetMethod
+{
+ Random, // just pick a random target
+ MaxThreat, // prefer targets higher in the threat list
+ MinThreat, // prefer targets lower in the threat list
+ MaxDistance, // prefer targets further from us
+ MinDistance // prefer targets closer to us
+};
+
+// default predicate function to select target based on distance, player and/or aura criteria
+struct TC_GAME_API DefaultTargetSelector
+{
+ // unit: the reference unit
+ // dist: if 0: ignored, if > 0: maximum distance to the reference unit, if < 0: minimum distance to the reference unit
+ // playerOnly: self explaining
+ // withMainTank: allow current tank to be selected
+ // aura: if 0: ignored, if > 0: the target shall have the aura, if < 0, the target shall NOT have the aura
+ DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withMainTank, int32 aura);
+ bool operator()(Unit const* target) const;
+
+private:
+ Unit const* _me;
+ float _dist;
+ bool _playerOnly;
+ Unit const* _exception;
+ int32 _aura;
+};
+
+// Target selector for spell casts checking range, auras and attributes
+/// @todo Add more checks from Spell::CheckCast
+struct TC_GAME_API SpellTargetSelector
+{
+ SpellTargetSelector(Unit* caster, uint32 spellId);
+ bool operator()(Unit const* target) const;
+
+private:
+ Unit const* _caster;
+ SpellInfo const* _spellInfo;
+};
+
+// Very simple target selector, will just skip main target
+// NOTE: When passing to UnitAI::SelectTarget remember to use 0 as position for random selection
+// because tank will not be in the temporary list
+struct TC_GAME_API NonTankTargetSelector
+{
+ NonTankTargetSelector(Unit* source, bool playerOnly = true) : _source(source), _playerOnly(playerOnly) { }
+ bool operator()(Unit const* target) const;
+
+private:
+ Unit* _source;
+ bool _playerOnly;
+};
+
+// Simple selector for units using mana
+struct TC_GAME_API PowerUsersSelector
+{
+ PowerUsersSelector(Unit const* unit, Powers power, float dist, bool playerOnly) : _me(unit), _power(power), _dist(dist), _playerOnly(playerOnly) { }
+ bool operator()(Unit const* target) const;
+
+private:
+ Unit const* _me;
+ Powers const _power;
+ float const _dist;
+ bool const _playerOnly;
+};
+
+struct TC_GAME_API FarthestTargetSelector
+{
+ FarthestTargetSelector(Unit const* unit, float dist, bool playerOnly, bool inLos) : _me(unit), _dist(dist), _playerOnly(playerOnly), _inLos(inLos) { }
+ bool operator()(Unit const* target) const;
+
+private:
+ Unit const* _me;
+ float _dist;
+ bool _playerOnly;
+ bool _inLos;
+};
+
+#endif // TRINITYCORE_UNIT_AI_COMMON_H
diff --git a/src/server/game/AI/CoreAI/enuminfo_UnitAICommon.cpp b/src/server/game/AI/CoreAI/enuminfo_UnitAICommon.cpp
new file mode 100644
index 00000000000..cd70ccd8211
--- /dev/null
+++ b/src/server/game/AI/CoreAI/enuminfo_UnitAICommon.cpp
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the TrinityCore 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 General Public License as published by the
+ * Free Software Foundation; either version 2 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 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "UnitAICommon.h"
+#include "Define.h"
+#include "SmartEnum.h"
+#include <stdexcept>
+
+namespace Trinity::Impl::EnumUtilsImpl
+{
+
+/******************************************************************\
+|* data for enum 'EvadeReason' in 'UnitAICommon.h' auto-generated *|
+\******************************************************************/
+template <>
+TC_API_EXPORT EnumText EnumUtils<EvadeReason>::ToString(EvadeReason value)
+{
+ switch (value)
+ {
+ case EvadeReason::NoHostiles: return { "NoHostiles", "NoHostiles", "the creature's threat list is empty" };
+ case EvadeReason::Boundary: return { "Boundary", "Boundary", "the creature has moved outside its evade boundary" };
+ case EvadeReason::NoPath: return { "NoPath", "NoPath", "the creature was unable to reach its target for over 5 seconds" };
+ case EvadeReason::SequenceBreak: return { "SequenceBreak", "SequenceBreak", "this is a boss and the pre-requisite encounters for engaging it are not defeated yet" };
+ case EvadeReason::Other: return { "Other", "Other", "anything else" };
+ default: throw std::out_of_range("value");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<EvadeReason>::Count() { return 5; }
+
+template <>
+TC_API_EXPORT EvadeReason EnumUtils<EvadeReason>::FromIndex(size_t index)
+{
+ switch (index)
+ {
+ case 0: return EvadeReason::NoHostiles;
+ case 1: return EvadeReason::Boundary;
+ case 2: return EvadeReason::NoPath;
+ case 3: return EvadeReason::SequenceBreak;
+ case 4: return EvadeReason::Other;
+ default: throw std::out_of_range("index");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<EvadeReason>::ToIndex(EvadeReason value)
+{
+ switch (value)
+ {
+ case EvadeReason::NoHostiles: return 0;
+ case EvadeReason::Boundary: return 1;
+ case EvadeReason::NoPath: return 2;
+ case EvadeReason::SequenceBreak: return 3;
+ case EvadeReason::Other: return 4;
+ default: throw std::out_of_range("value");
+ }
+}
+}
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 3d90489034c..0ae258856a6 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -30,6 +30,7 @@
#include "MotionMaster.h"
#include "ObjectAccessor.h"
#include "Player.h"
+#include "SmartEnum.h"
#include "SpellHistory.h"
#include "TemporarySummon.h"
#include "Vehicle.h"
@@ -71,7 +72,7 @@ void CreatureAI::OnCharmed(bool isNew)
me->LastCharmerGUID.Clear();
if (!me->IsInCombat())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
UnitAI::OnCharmed(isNew);
@@ -223,7 +224,7 @@ void CreatureAI::EnterEvadeMode(EvadeReason why)
if (!_EnterEvadeMode(why))
return;
- TC_LOG_DEBUG("scripts.ai", "CreatureAI::EnterEvadeMode: entering evade mode (why: {}) ({})", why, me->GetGUID().ToString());
+ TC_LOG_DEBUG("scripts.ai", "CreatureAI::EnterEvadeMode: entering evade mode (why: {}) ({})", EnumUtils::ToConstant(why), me->GetGUID().ToString());
if (!me->GetVehicle()) // otherwise me will be in evade mode forever
{
@@ -265,7 +266,7 @@ bool CreatureAI::UpdateVictim()
}
else if (!me->IsInCombat())
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return false;
}
else if (me->GetVictim())
@@ -440,7 +441,7 @@ bool CreatureAI::CheckInRoom()
return true;
else
{
- EnterEvadeMode(EVADE_REASON_BOUNDARY);
+ EnterEvadeMode(EvadeReason::Boundary);
return false;
}
}
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index 041b27b6889..a6c03467ca2 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -67,16 +67,6 @@ class TC_GAME_API CreatureAI : public UnitAI
Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, Milliseconds despawnTime = 30s, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
public:
- // EnumUtils: DESCRIBE THIS (in CreatureAI::)
- 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_NO_PATH, // the creature was unable to reach its target for over 5 seconds
- EVADE_REASON_SEQUENCE_BREAK, // this is a boss and the pre-requisite encounters for engaging it are not defeated yet
- EVADE_REASON_OTHER, // anything else
- };
-
explicit CreatureAI(Creature* creature, uint32 scriptId = {});
virtual ~CreatureAI();
@@ -97,7 +87,7 @@ class TC_GAME_API CreatureAI : public UnitAI
void TriggerAlert(Unit const* who) const;
// Called for reaction at stopping attack at no attackers or targets
- virtual void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER);
+ virtual void EnterEvadeMode(EvadeReason why = EvadeReason::Other);
// Called for reaction whenever we start being in combat (overridden from base UnitAI)
void JustEnteredCombat(Unit* /*who*/) override;
@@ -250,7 +240,7 @@ class TC_GAME_API CreatureAI : public UnitAI
void EngagementOver();
virtual void MoveInLineOfSight(Unit* /*who*/);
- bool _EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER);
+ bool _EnterEvadeMode(EvadeReason why = EvadeReason::Other);
CreatureBoundary const* _boundary;
bool _negateBoundary;
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
index 13892b25bc8..e8711ffe473 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp
@@ -540,7 +540,7 @@ void BossAI::_JustEngagedWith(Unit* who)
// bosses do not respawn, check only on enter combat
if (!instance->CheckRequiredBosses(_bossId, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
return;
}
instance->SetBossState(_bossId, IN_PROGRESS);
diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
index ce37b3dfe73..3a5ed989f43 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
@@ -43,7 +43,7 @@ struct TC_GAME_API EscortAI : public ScriptedAI
void MoveInLineOfSight(Unit* who) override;
void JustDied(Unit*) override;
void ReturnToLastPoint();
- void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override;
+ void EnterEvadeMode(EvadeReason why) override;
void MovementInform(uint32, uint32) override;
void UpdateAI(uint32 diff) override; // the "internal" update, calls UpdateEscortAI()
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index d05e22664b4..b7d94165672 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -716,7 +716,7 @@ void SmartAI::OnCharmed(bool isNew)
me->LastCharmerGUID.Clear();
if (!me->IsInCombat())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 1dfd2f9642b..b5f07778d32 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -97,7 +97,7 @@ class TC_GAME_API SmartAI : public CreatureAI
void JustEngagedWith(Unit* enemy) override;
// Called for reaction at stopping attack at no attackers or targets
- void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override;
+ void EnterEvadeMode(EvadeReason why) override;
// Called when the creature is killed
void JustDied(Unit* killer) override;
diff --git a/src/server/game/AI/enuminfo_CreatureAI.cpp b/src/server/game/AI/enuminfo_CreatureAI.cpp
deleted file mode 100644
index c2865d4ebc4..00000000000
--- a/src/server/game/AI/enuminfo_CreatureAI.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the TrinityCore 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 General Public License as published by the
- * Free Software Foundation; either version 2 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 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 <http://www.gnu.org/licenses/>.
- */
-
-#include "CreatureAI.h"
-#include "Define.h"
-#include "SmartEnum.h"
-#include <stdexcept>
-
-namespace Trinity::Impl::EnumUtilsImpl
-{
-
-/****************************************************************************\
-|* data for enum 'CreatureAI::EvadeReason' in 'CreatureAI.h' auto-generated *|
-\****************************************************************************/
-template <>
-TC_API_EXPORT EnumText EnumUtils<CreatureAI::EvadeReason>::ToString(CreatureAI::EvadeReason value)
-{
- switch (value)
- {
- case CreatureAI::EVADE_REASON_NO_HOSTILES: return { "EVADE_REASON_NO_HOSTILES", "EVADE_REASON_NO_HOSTILES", "the creature's threat list is empty" };
- case CreatureAI::EVADE_REASON_BOUNDARY: return { "EVADE_REASON_BOUNDARY", "EVADE_REASON_BOUNDARY", "the creature has moved outside its evade boundary" };
- case CreatureAI::EVADE_REASON_NO_PATH: return { "EVADE_REASON_NO_PATH", "EVADE_REASON_NO_PATH", "the creature was unable to reach its target for over 5 seconds" };
- case CreatureAI::EVADE_REASON_SEQUENCE_BREAK: return { "EVADE_REASON_SEQUENCE_BREAK", "EVADE_REASON_SEQUENCE_BREAK", "this is a boss and the pre-requisite encounters for engaging it are not defeated yet" };
- case CreatureAI::EVADE_REASON_OTHER: return { "EVADE_REASON_OTHER", "EVADE_REASON_OTHER", "anything else" };
- default: throw std::out_of_range("value");
- }
-}
-
-template <>
-TC_API_EXPORT size_t EnumUtils<CreatureAI::EvadeReason>::Count() { return 5; }
-
-template <>
-TC_API_EXPORT CreatureAI::EvadeReason EnumUtils<CreatureAI::EvadeReason>::FromIndex(size_t index)
-{
- switch (index)
- {
- case 0: return CreatureAI::EVADE_REASON_NO_HOSTILES;
- case 1: return CreatureAI::EVADE_REASON_BOUNDARY;
- case 2: return CreatureAI::EVADE_REASON_NO_PATH;
- case 3: return CreatureAI::EVADE_REASON_SEQUENCE_BREAK;
- case 4: return CreatureAI::EVADE_REASON_OTHER;
- default: throw std::out_of_range("index");
- }
-}
-
-template <>
-TC_API_EXPORT size_t EnumUtils<CreatureAI::EvadeReason>::ToIndex(CreatureAI::EvadeReason value)
-{
- switch (value)
- {
- case CreatureAI::EVADE_REASON_NO_HOSTILES: return 0;
- case CreatureAI::EVADE_REASON_BOUNDARY: return 1;
- case CreatureAI::EVADE_REASON_NO_PATH: return 2;
- case CreatureAI::EVADE_REASON_SEQUENCE_BREAK: return 3;
- case CreatureAI::EVADE_REASON_OTHER: return 4;
- default: throw std::out_of_range("value");
- }
-}
-}
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index aace76abc41..5196192ded6 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -890,7 +890,7 @@ void Creature::Update(uint32 diff)
m_cannotReachTimer += diff;
if (m_cannotReachTimer >= CREATURE_NOPATH_EVADE_TIME)
if (CreatureAI* ai = AI())
- ai->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_PATH);
+ ai->EnterEvadeMode(EvadeReason::NoPath);
}
break;
}
@@ -1235,7 +1235,7 @@ Unit* Creature::SelectVictim()
{
if ((*itr)->GetBase()->IsPermanent())
{
- AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_OTHER);
+ AI()->EnterEvadeMode(EvadeReason::Other);
break;
}
}
@@ -1243,7 +1243,7 @@ Unit* Creature::SelectVictim()
}
// enter in evade mode in other case
- AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES);
+ AI()->EnterEvadeMode(EvadeReason::NoHostiles);
return nullptr;
}
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 55bc9162a0c..cb3bbe1a0d6 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -81,21 +81,6 @@ Object::Object() : m_values(this)
m_objectUpdated = false;
}
-WorldObject::~WorldObject()
-{
- // this may happen because there are many !create/delete
- if (IsWorldObject() && m_currMap)
- {
- if (GetTypeId() == TYPEID_CORPSE)
- {
- TC_LOG_FATAL("misc", "WorldObject::~WorldObject Corpse Type: {} ({}) deleted but still in map!!",
- ToCorpse()->GetType(), GetGUID().ToString());
- ABORT();
- }
- ResetMap();
- }
-}
-
Object::~Object()
{
if (IsInWorld())
@@ -868,6 +853,21 @@ m_currMap(nullptr), m_InstanceId(0), _dbPhase(0), m_notifyflags(0)
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
}
+WorldObject::~WorldObject()
+{
+ // this may happen because there are many !create/delete
+ if (IsWorldObject() && m_currMap)
+ {
+ if (GetTypeId() == TYPEID_CORPSE)
+ {
+ TC_LOG_FATAL("misc", "WorldObject::~WorldObject Corpse Type: {} ({}) deleted but still in map!!",
+ ToCorpse()->GetType(), GetGUID().ToString());
+ ABORT();
+ }
+ ResetMap();
+ }
+}
+
void WorldObject::SetWorldObject(bool on)
{
if (!IsInWorld())
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 3192fb9015e..7297f65bb1a 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -333,16 +333,6 @@ enum CombatRating
#define MAX_COMBAT_RATING 32
-enum DamageEffectType : uint8
-{
- DIRECT_DAMAGE = 0, // used for normal weapon damage (not for class abilities or spells)
- SPELL_DIRECT_DAMAGE = 1, // spell/class abilities damage
- DOT = 2,
- HEAL = 3,
- NODAMAGE = 4, // used also in case when damage applied to health but not applied to spell channelInterruptFlags/etc
- SELF_DAMAGE = 5
-};
-
enum UnitTypeMask
{
UNIT_MASK_NONE = 0x00000000,
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 759f3070458..43fd866adb9 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -122,6 +122,16 @@ enum UnitMoveType
#define MAX_MOVE_TYPE 9
+enum DamageEffectType : uint8
+{
+ DIRECT_DAMAGE = 0, // used for normal weapon damage (not for class abilities or spells)
+ SPELL_DIRECT_DAMAGE = 1, // spell/class abilities damage
+ DOT = 2,
+ HEAL = 3,
+ NODAMAGE = 4, // used also in case when damage applied to health but not applied to spell channelInterruptFlags/etc
+ SELF_DAMAGE = 5
+};
+
// Value masks for UNIT_FIELD_FLAGS
// EnumUtils: DESCRIBE THIS
enum UnitFlags : uint32
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 8e5c5978af9..94023ff1db4 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -1138,7 +1138,7 @@ public:
return true;
}
- static bool HandleNpcEvadeCommand(ChatHandler* handler, Optional<CreatureAI::EvadeReason> why, Optional<EXACT_SEQUENCE("force")> force)
+ static bool HandleNpcEvadeCommand(ChatHandler* handler, Optional<EvadeReason> why, Optional<EXACT_SEQUENCE("force")> force)
{
Creature* creatureTarget = handler->getSelectedCreature();
if (!creatureTarget || creatureTarget->IsPet())
@@ -1157,7 +1157,7 @@ public:
if (force)
creatureTarget->ClearUnitState(UNIT_STATE_EVADE);
- creatureTarget->AI()->EnterEvadeMode(why.value_or(CreatureAI::EVADE_REASON_OTHER));
+ creatureTarget->AI()->EnterEvadeMode(why.value_or(EvadeReason::Other));
return true;
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
index 2a66ff8bf05..4756ad281b5 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp
@@ -113,7 +113,7 @@ struct boss_broodlord : public BossAI
if (me->GetDistance(me->GetHomePosition()) > 150.0f)
{
Talk(SAY_LEASH);
- EnterEvadeMode(EVADE_REASON_BOUNDARY);
+ EnterEvadeMode(EvadeReason::Boundary);
}
events.ScheduleEvent(EVENT_CHECK, 1s);
break;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 06668bbed4f..fb33ea12fdd 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -322,7 +322,7 @@ public:
if (RaidWiped)
{
- EnterEvadeMode();
+ EnterEvadeMode(EvadeReason::Other);
return;
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index 68b0bbf3618..4f7854702a0 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -301,7 +301,7 @@ struct boss_felmyst : public BossAI
if (!target)
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
@@ -327,7 +327,7 @@ struct boss_felmyst : public BossAI
if (!target)
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
@@ -356,7 +356,7 @@ struct boss_felmyst : public BossAI
if (!target)
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
@@ -396,7 +396,7 @@ struct boss_felmyst : public BossAI
DoStartMovement(target);
else
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
break;
@@ -415,7 +415,7 @@ struct boss_felmyst : public BossAI
if (!UpdateVictim())
{
if (phase == PHASE_FLIGHT && !me->IsInEvadeMode())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index c6b116441a9..2157a128fd4 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -499,7 +499,7 @@ struct boss_sathrovarr : public BossAI
else if (Creature* kalecgosHuman = instance->GetCreature(DATA_KALECGOS_HUMAN))
{
if (kalecgosHuman->GetGUID() == target->GetGUID())
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
}
}
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
index acb08d891b9..11cf84b91f6 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h
@@ -126,13 +126,13 @@ struct hyjalAI : public 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(EvadeReason /*why*/ = EVADE_REASON_OTHER) override; // Send creature back to spawn location and evade.
+ void EnterEvadeMode(EvadeReason why) override; // Send creature back to spawn location and evade.
- void JustEngagedWith(Unit* /*who*/) override; // Used to reset cooldowns for our spells and to inform the raid that we're under attack
+ void JustEngagedWith(Unit* who) override; // Used to reset cooldowns for our spells and to inform the raid that we're under attack
void UpdateAI(uint32 diff) override; // Called to summon waves, check for boss deaths and to cast our spells.
- void JustDied(Unit* /*killer*/) override; // Called on death, informs the raid that they have failed.
+ void JustDied(Unit* killer) override; // Called on death, informs the raid that they have failed.
void SetFaction(uint32 _faction) // Set the faction to either Alliance or Horde in Hyjal
{
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/npc_arthas.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/npc_arthas.cpp
index 82ce28abb91..651a6337b4d 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/npc_arthas.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/npc_arthas.cpp
@@ -31,6 +31,7 @@
#include "ScriptedGossip.h"
#include "ScriptMgr.h"
#include "ScriptSystem.h"
+#include "SmartEnum.h"
#include "SpellScript.h"
#include "SplineChainMovementGenerator.h"
#include "TemporarySummon.h"
@@ -1551,7 +1552,7 @@ public:
void EnterEvadeMode(EvadeReason why) override
{
- TC_LOG_TRACE("scripts.cos", "npc_arthas_stratholmeAI::EnterEvadeMode: why = {} ", why);
+ TC_LOG_TRACE("scripts.cos", "npc_arthas_stratholmeAI::EnterEvadeMode: why = {} ", EnumUtils::ToConstant(why));
ScriptedAI::EnterEvadeMode(why);
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index 8975ec6c774..61b5167bcd8 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -150,7 +150,7 @@ struct boss_prince_taldaram : public BossAI
{
if (me->GetThreatManager().IsThreatListEmpty(true))
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index e43c200529b..c72da7380e9 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -148,7 +148,7 @@ struct boss_anub_arak : public BossAI
me->SummonCreatureGroup(SUMMON_GROUP_WORLD_TRIGGER_GUARDIAN, &summoned);
if (summoned.empty()) // something went wrong
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
_guardianTrigger = (*summoned.begin())->GetGUID();
@@ -157,7 +157,7 @@ struct boss_anub_arak : public BossAI
_assassinTrigger = trigger->GetGUID();
else
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
}
@@ -221,7 +221,7 @@ struct boss_anub_arak : public BossAI
events.Repeat(11s);
}
else
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
}
case EVENT_ASSASSIN:
@@ -238,7 +238,7 @@ struct boss_anub_arak : public BossAI
_assassinCount = 0;
}
else // something went wrong
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
case EVENT_GUARDIAN:
if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTrigger))
@@ -254,7 +254,7 @@ struct boss_anub_arak : public BossAI
_guardianCount = 0;
}
else
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
case EVENT_VENOMANCER:
if (Creature* trigger = ObjectAccessor::GetCreature(*me, _guardianTrigger))
@@ -270,7 +270,7 @@ struct boss_anub_arak : public BossAI
_venomancerCount = 0;
}
else
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
default:
break;
@@ -304,7 +304,7 @@ struct boss_anub_arak : public BossAI
if (Creature* creature = ObjectAccessor::GetCreature(*me, guid))
JustSummoned(creature);
else // something has gone horribly wrong
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
}
case GUID_TYPE_IMPALE:
@@ -321,7 +321,7 @@ struct boss_anub_arak : public BossAI
case ACTION_PET_DIED:
if (!_petCount) // underflow check - something has gone horribly wrong
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
if (!--_petCount) // last pet died, emerge
@@ -337,7 +337,7 @@ struct boss_anub_arak : public BossAI
}
break;
case ACTION_PET_EVADE:
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
}
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index 63490558494..30c672d3d6c 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -327,7 +327,7 @@ struct boss_hadronox : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_HADRONOX))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
return;
}
// cancel current point movement if engaged by players
@@ -339,7 +339,7 @@ struct boss_hadronox : public BossAI
}
}
else // we are no longer in combat with players - reset the encounter
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
events.Repeat(Seconds(1));
break;
@@ -408,7 +408,7 @@ struct npc_hadronox_crusherPackAI : public ScriptedAI
void EnterEvadeMode(EvadeReason /*why*/) override
{
if (Creature* hadronox = _instance->GetCreature(DATA_HADRONOX))
- hadronox->AI()->EnterEvadeMode(EVADE_REASON_OTHER);
+ hadronox->AI()->EnterEvadeMode(EvadeReason::Other);
}
uint32 GetData(uint32 data) const override
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 3bed7f43837..7e744bd8cc8 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -218,7 +218,7 @@ struct boss_krik_thir : public BossAI
case ACTION_SILTHIK_DIED:
if (!_watchersActive) // something is wrong
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
if (!--_watchersActive) // if there are no watchers currently in combat...
@@ -235,7 +235,7 @@ struct boss_krik_thir : public BossAI
events.ScheduleEvent(EVENT_SEND_GROUP, 70s);
break;
case ACTION_PET_EVADE:
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
}
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 1a4037914c5..bbf80507f43 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -235,7 +235,7 @@ class boss_halion : public CreatureScript
void EnterEvadeMode(EvadeReason why) override
{
- if (why == EVADE_REASON_BOUNDARY || events.IsInPhase(PHASE_ONE))
+ if (why == EvadeReason::Boundary || events.IsInPhase(PHASE_ONE))
if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->EnterEvadeMode(why);
}
@@ -773,7 +773,7 @@ class npc_halion_controller : public CreatureScript
if (player->IsAlive() && IsInBoundary(player) && !player->IsGameMaster())
return;
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
void SetData(uint32 id, uint32 value) override
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 a6e17d673be..62148407500 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -1367,7 +1367,7 @@ class npc_the_lich_king_escape_hor : public CreatureScript
}
else if (me->GetCombatManager().GetPvECombatRefs().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return false;
}
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 c4043240376..0aa1ae99750 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -266,7 +266,7 @@ struct boss_blood_council_controller : public BossAI
if (!instance->CheckRequiredBosses(DATA_BLOOD_PRINCE_COUNCIL, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -304,7 +304,7 @@ struct boss_blood_council_controller : public BossAI
{
_resetCounter += uint8(data);
if (_resetCounter == 3)
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
}
uint32 GetData(uint32 data) const override
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 69bbd94092e..a98a839653c 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
@@ -170,7 +170,7 @@ struct boss_blood_queen_lana_thel : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 5b43d922e4b..1b43db638bc 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -282,7 +282,7 @@ struct boss_deathbringer_saurfang : public BossAI
if (!instance->CheckRequiredBosses(DATA_DEATHBRINGER_SAURFANG, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -387,7 +387,7 @@ struct boss_deathbringer_saurfang : public BossAI
if (target->GetTransport())
{
summon->DespawnOrUnsummon(1ms);
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
@@ -417,7 +417,7 @@ struct boss_deathbringer_saurfang : public BossAI
{
if (target->GetTransport())
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 57e05600fdc..e10c1069fcb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -114,7 +114,7 @@ struct boss_festergut : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
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 8f1494bf990..3820ec8f52b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -633,7 +633,7 @@ protected:
{
if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS)
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return false;
}
@@ -647,7 +647,7 @@ protected:
}
else if (me->GetThreatManager().IsThreatListEmpty())
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return false;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 44274861f4f..a0e8260dc4e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -283,7 +283,7 @@ struct boss_lady_deathwhisper : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_LADY_DEATHWHISPER, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 7779b0be457..b6d5cbe6ae2 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -126,7 +126,7 @@ struct boss_rotface : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 94bc112d91a..c7f60b6e853 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -271,7 +271,7 @@ struct boss_sindragosa : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_SINDRAGOSA, victim->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
@@ -288,7 +288,7 @@ struct boss_sindragosa : public BossAI
void EnterEvadeMode(EvadeReason why) override
{
- if (_isInAirPhase && why == EVADE_REASON_BOUNDARY)
+ if (_isInAirPhase && why == EvadeReason::Boundary)
return;
BossAI::EnterEvadeMode(why);
}
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 cfccc62fab7..c0e2bd0262b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -544,7 +544,7 @@ struct boss_the_lich_king : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_THE_LICH_KING, target->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 69331e22550..c4a03791d37 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -499,7 +499,7 @@ struct npc_green_dragon_combat_trigger : public BossAI
if (!instance->CheckRequiredBosses(DATA_VALITHRIA_DREAMWALKER, target->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT);
return;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index dc6359628c3..c29fb0ec62d 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -535,7 +535,7 @@ struct boss_four_horsemen_lady : public boss_four_horsemen_baseAI
return;
if (me->GetThreatManager().IsThreatListEmpty())
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
@@ -594,7 +594,7 @@ struct boss_four_horsemen_sir : public boss_four_horsemen_baseAI
return;
if (me->GetThreatManager().IsThreatListEmpty())
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index c5f5964dc57..68e8279c164 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -384,7 +384,7 @@ struct boss_gothik : public BossAI
{
case ACTION_MINION_EVADE:
if (_gateIsOpen || me->GetThreatManager().IsThreatListEmpty())
- return EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ return EnterEvadeMode(EvadeReason::NoHostiles);
if (_gateCanOpen)
OpenGate();
break;
@@ -581,7 +581,7 @@ struct npc_gothik_minion_baseAI : public ScriptedAI
AttackStart(target);
}
else
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
break;
}
}
@@ -610,7 +610,7 @@ struct npc_gothik_minion_baseAI : public ScriptedAI
AttackStart(newTarget);
}
else
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
_UpdateAI(diff);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 6dbc99e7d01..829eafd379f 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -338,7 +338,7 @@ struct boss_kelthuzad : public BossAI
me->GetCreatureListWithEntryInGrid(skeletons, NPC_SKELETON2, 200.0f);
if (skeletons.empty())
{ // prevent UB
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
std::list<Creature*>::iterator it = skeletons.begin();
@@ -594,7 +594,7 @@ struct npc_kelthuzad_minionAI : public ScriptedAI
{
ScriptedAI::EnterEvadeMode(why);
if (Creature* kelThuzad = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KELTHUZAD)))
- kelThuzad->AI()->EnterEvadeMode(EVADE_REASON_OTHER);
+ kelThuzad->AI()->EnterEvadeMode(EvadeReason::Other);
}
void JustEngagedWith(Unit* who) override
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 7603050aec1..4a6bb76f6b3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -120,7 +120,7 @@ struct boss_noth : public BossAI
DoZoneInCombat();
if (!me->IsThreatened())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
else
{
uint8 timeGround;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index c476ba65995..79c5b4cf561 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -119,7 +119,7 @@ struct boss_patchwerk : public BossAI
auto it = list.begin(), end = list.end();
if (it == end)
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index 71aef922a5f..c9c443797e8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -181,7 +181,7 @@ public:
void EnterEvadeMode(EvadeReason why) override
{
- if (!ballLightningEnabled && why == EVADE_REASON_NO_HOSTILES)
+ if (!ballLightningEnabled && why == EvadeReason::NoHostiles)
{
ballLightningEnabled = true;
return; // try again
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 1d3a33f196f..a2c7d55454a 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -560,7 +560,7 @@ struct boss_malygos : public BossAI
me->setActive(true);
if (!instance->CheckRequiredBosses(DATA_MALYGOS_EVENT))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 230a2e59563..265827cbd1d 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -102,7 +102,7 @@ struct boss_sjonnir : public BossAI
{
if (!instance->CheckRequiredBosses(DATA_SJONNIR_THE_IRONSHAPER, who->ToPlayer()))
{
- EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
+ EnterEvadeMode(EvadeReason::SequenceBreak);
return;
}
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 9e61811832c..5eca8427e41 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
@@ -607,7 +607,7 @@ struct boss_algalon_the_observer : public BossAI
events.ScheduleEvent(EVENT_EVADE, 2s + 500ms);
break;
case EVENT_EVADE:
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
break;
case EVENT_COSMIC_SMASH:
Talk(EMOTE_ALGALON_COSMIC_SMASH);
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 f49c57b4e85..457ac16ad2f 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -371,7 +371,7 @@ class boss_flame_leviathan : public CreatureScript
if (!me->IsInCombat())
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return;
}
@@ -1689,7 +1689,7 @@ class spell_pursue : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (Creature* cCaster = caster->ToCreature())
- cCaster->AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES);
+ cCaster->AI()->EnterEvadeMode(EvadeReason::NoHostiles);
}
else
_target = targets.front();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index ea4d81f5c97..1df2ee350d6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -513,7 +513,7 @@ struct boss_razorscale : public BossAI
void EnterEvadeMode(EvadeReason why) override
{
- if (why == EVADE_REASON_BOUNDARY && !events.IsInPhase(PHASE_PERMA_GROUND))
+ if (why == EvadeReason::Boundary && !events.IsInPhase(PHASE_PERMA_GROUND))
return;
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index b8cfe0b3213..b6809ef5f08 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -1265,7 +1265,7 @@ class npc_thorim_arena_phase : public CreatureScript
void EnterEvadeMode(EvadeReason why) override
{
- if (why != EVADE_REASON_NO_HOSTILES && why != EVADE_REASON_BOUNDARY)
+ if (why != EvadeReason::NoHostiles && why != EvadeReason::Boundary)
return;
// this should only happen if theres no alive player in the arena -> summon orb
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 03a61fee5ea..dcf7e993bee 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -540,7 +540,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
return;
if (!me->GetCombatManager().HasPvECombatWithPlayers())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
events.Update(diff);
// don't summon tentacles when illusion is shattered, delay them
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index 9655a4b5851..117e7daca4d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -673,7 +673,7 @@ class spell_skadi_reset_check : public SpellScript
if (InstanceScript* instance = target->GetInstanceScript())
if (instance->GetBossState(DATA_SKADI_THE_RUTHLESS) == IN_PROGRESS)
- target->AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES);
+ target->AI()->EnterEvadeMode(EvadeReason::NoHostiles);
}
void Register() override
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index b94f4e315bd..57b13922988 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -272,7 +272,7 @@ struct npc_tournament_training_dummy : ScriptedAI
case EVENT_DUMMY_RESET:
if (UpdateVictim())
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
events.ScheduleEvent(EVENT_DUMMY_RESET, 10s);
}
break;
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index fca4ef3021e..654e2e687f2 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -700,7 +700,7 @@ struct npc_wild_wyrm : public VehicleAI
if (_playerCheckTimer <= diff)
{
if (!EvadeCheck())
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
_playerCheckTimer = 1 * IN_MILLISECONDS;
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
index 252e1ac88f4..1d246096c7b 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp
@@ -133,7 +133,7 @@ struct boss_ambassador_hellmaw : public EscortAI
if (me->HasAura(SPELL_BANISH))
{
- EnterEvadeMode(EVADE_REASON_OTHER);
+ EnterEvadeMode(EvadeReason::Other);
return;
}
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 39488ff7709..50e8cc2d488 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
@@ -112,7 +112,7 @@ struct boss_blackheart_the_inciter : public BossAI
else
{
if (!charmCount)
- EnterEvadeMode(EVADE_REASON_OTHER); // sanity check
+ EnterEvadeMode(EvadeReason::Other); // sanity check
--charmCount;
}
if (charmCount)
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index 2a072e86ead..7bbd48dfe6a 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -699,7 +699,7 @@ struct boss_illidan_stormrage : public BossAI
if (player->IsAlive() && !player->IsGameMaster() && IsInBoundary(player))
return;
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
void SummonMinions()
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 92d577f4d6d..3ecaaf5e886 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -290,7 +290,7 @@ struct boss_shade_of_akama : public BossAI
if (player->IsAlive() && !player->IsGameMaster() && IsInBoundary(player))
return;
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
}
void UpdateAI(uint32 diff) override
@@ -529,7 +529,7 @@ struct npc_akama_shade : public ScriptedAI
Talk(SAY_DEAD);
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
if (shade->IsAlive())
- shade->AI()->EnterEvadeMode(EVADE_REASON_OTHER);
+ shade->AI()->EnterEvadeMode(EvadeReason::Other);
}
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 8350dc0ad48..4600933b378 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -347,7 +347,7 @@ struct npc_hellfire_channeler : public ScriptedAI
{
if (_instance->GetBossState(DATA_MAGTHERIDON) == IN_PROGRESS)
if (Creature* magtheridon = _instance->GetCreature(DATA_MAGTHERIDON))
- magtheridon->AI()->EnterEvadeMode(EVADE_REASON_OTHER);
+ magtheridon->AI()->EnterEvadeMode(EvadeReason::Other);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp
index c78c3ff7678..714ca28cb93 100644
--- a/src/server/scripts/Pet/pet_mage.cpp
+++ b/src/server/scripts/Pet/pet_mage.cpp
@@ -124,7 +124,7 @@ struct npc_pet_mage_mirror_image : ScriptedAI
if (!selectedTarget)
{
- EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+ EnterEvadeMode(EvadeReason::NoHostiles);
return false;
}
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 48f760eaacb..2d15f0a3f78 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -1069,7 +1069,7 @@ public:
Start(false, true);
}
else
- EnterEvadeMode(); //something went wrong
+ EnterEvadeMode(EvadeReason::Other); //something went wrong
RunAwayTimer = 30000;
}