feat(Core/Maps): AreaBoundary (#10525)

* cherry-picked commit (https://github.com/TrinityCore/TrinityCore/commit/2da458c56d024aac04468ce2af454a83ad790bf6)
This commit is contained in:
IntelligentQuantum
2022-04-15 16:40:41 +04:30
committed by GitHub
parent c1747f2fbf
commit ab4ee71762
169 changed files with 918 additions and 628 deletions
@@ -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
@@ -195,7 +195,6 @@ public:
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -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[] =
@@ -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
{
@@ -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);
}
}
@@ -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
}
@@ -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
{
}
@@ -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);
}
@@ -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;
@@ -591,7 +591,7 @@ public:
}
}
void EnterEvadeMode() override {}
void EnterEvadeMode(EvadeReason /*why*/) override {}
void WaypointReached(uint32 i) override
{
@@ -389,7 +389,7 @@ public:
Talk(SAY_KILL_PLAYER);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
events.Reset();
summons.DespawnAll();
@@ -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();
}
@@ -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();
}
@@ -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);
@@ -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);
@@ -244,8 +244,6 @@ public:
events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500);
break;
}
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -152,7 +152,6 @@ public:
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -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
@@ -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);
}
};
@@ -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);
}
};
@@ -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();
}
@@ -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();
}
@@ -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);
}
};
@@ -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);
}
};
@@ -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;
@@ -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
@@ -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;
}
};
@@ -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;
@@ -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);
}
@@ -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
@@ -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;
@@ -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
@@ -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()
@@ -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();
}
@@ -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
@@ -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;
@@ -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
{
@@ -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);
@@ -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;
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -192,7 +192,6 @@ public:
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -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
@@ -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);
}
};
};
@@ -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 {}
@@ -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;
}
@@ -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;
@@ -724,7 +724,7 @@ public:
Vehicle* vehicle;
uint32 _despawnTimer;
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
vehicle->InstallAllAccessories(false);
}
@@ -667,7 +667,6 @@ public:
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override
@@ -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
@@ -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);
}
};
};
@@ -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 {}
@@ -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;
}
@@ -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);
}
};
};
@@ -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 {}
@@ -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;
}
@@ -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 {}
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -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)
@@ -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);
}
@@ -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);
}
@@ -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)
@@ -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)
@@ -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)
@@ -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))
{
@@ -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);
@@ -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);
@@ -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;
@@ -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
{
@@ -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;
}