mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-28 16:16:27 +00:00
feat(Core/Maps): AreaBoundary (#10525)
* cherry-picked commit (2da458c56d)
This commit is contained in:
committed by
GitHub
parent
c1747f2fbf
commit
ab4ee71762
@@ -65,10 +65,10 @@ public:
|
||||
EventMap events;
|
||||
ObjectGuid focusGUID;
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
|
||||
@@ -94,11 +94,11 @@ public:
|
||||
instance->SetData(DATA_BLACKHEARTTHEINCITEREVENT, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
if (InciteChaos && SelectTargetFromPlayerList(100.0f))
|
||||
return;
|
||||
CreatureAI::EnterEvadeMode();
|
||||
CreatureAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@@ -188,7 +188,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -232,12 +232,12 @@ public:
|
||||
beamPosId = urand(0, 3);
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
BossAI::EnterEvadeMode();
|
||||
BossAI::EnterEvadeMode(why);
|
||||
|
||||
if (Creature* akama = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_AKAMA)))
|
||||
akama->AI()->EnterEvadeMode();
|
||||
akama->AI()->EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
bool CanAIAttack(Unit const* target) const override
|
||||
@@ -462,8 +462,6 @@ public:
|
||||
break;
|
||||
}
|
||||
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
|
||||
@@ -250,8 +250,6 @@ public:
|
||||
me->CastCustomSpell(SPELL_SUMMON_ENSLAVED_SOUL, SPELLVALUE_MAX_TARGETS, 1, me, false);
|
||||
break;
|
||||
}
|
||||
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -135,9 +135,9 @@ public:
|
||||
me->SetWalk(true);
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
BossAI::EnterEvadeMode();
|
||||
BossAI::EnterEvadeMode(why);
|
||||
summonsGenerator.DoAction(ACTION_DESPAWN_ALL);
|
||||
events2.ScheduleEvent(EVENT_SHADE_RESET_ENCOUNTER, 20000);
|
||||
me->SetVisible(false);
|
||||
@@ -172,7 +172,7 @@ public:
|
||||
}
|
||||
else if (param == ACTION_AKAMA_DIED)
|
||||
{
|
||||
EnterEvadeMode();
|
||||
EnterEvadeMode(EVADE_REASON_OTHER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -258,7 +258,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -194,7 +194,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -178,7 +178,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -239,10 +239,10 @@ struct boss_illidari_council_memberAI : public ScriptedAI
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
me->SetOwnerGUID(ObjectGuid::Empty);
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void DoAction(int32 param) override
|
||||
|
||||
@@ -21,23 +21,23 @@
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_TEMPLE_DOOR, DATA_TERON_GOREFIEND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
|
||||
{ GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE },
|
||||
{ GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM },
|
||||
{ GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE },
|
||||
{ GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM },
|
||||
{ GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
|
||||
{ GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
|
||||
{ GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_TEMPLE_DOOR, DATA_TERON_GOREFIEND, DOOR_TYPE_PASSAGE },
|
||||
{ GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE },
|
||||
{ GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE },
|
||||
{ GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
|
||||
{ GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
|
||||
{ GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE },
|
||||
{ GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
|
||||
{ GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM }
|
||||
};
|
||||
|
||||
class instance_black_temple : public InstanceMapScript
|
||||
|
||||
@@ -195,7 +195,6 @@ public:
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ public:
|
||||
ObjectGuid ownerGUID;
|
||||
EventMap events;
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
me->DespawnOrUnsummon(1);
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }
|
||||
{ GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
|
||||
{ GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
|
||||
{ GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE },
|
||||
{ GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }
|
||||
};
|
||||
|
||||
class instance_serpent_shrine : public InstanceMapScript
|
||||
|
||||
@@ -179,7 +179,7 @@ public:
|
||||
me->SetInCombatWithZone();
|
||||
if (!me->IsInCombat())
|
||||
{
|
||||
EnterEvadeMode();
|
||||
EnterEvadeMode(EVADE_REASON_OTHER);
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -260,14 +260,14 @@ public:
|
||||
|
||||
void MoveInLineOfSight(Unit* /*who*/) override {}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
me->DespawnOrUnsummon(1);
|
||||
|
||||
ScriptedAI::EnterEvadeMode();
|
||||
ScriptedAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
|
||||
{ GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE },
|
||||
{ GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
MinionData const minionData[] =
|
||||
|
||||
@@ -163,7 +163,7 @@ public:
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
me->DespawnOrUnsummon(1);
|
||||
}
|
||||
@@ -267,7 +267,7 @@ public:
|
||||
events.Reset();
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||
{
|
||||
Talk(SAY_WIPE);
|
||||
me->DespawnOrUnsummon(1);
|
||||
|
||||
@@ -19,10 +19,15 @@
|
||||
#include "ScriptMgr.h"
|
||||
#include "magtheridons_lair.h"
|
||||
|
||||
BossBoundaryData const boundaries =
|
||||
{
|
||||
{ TYPE_MAGTHERIDON, new CircleBoundary(Position(-18.70f, 2.24f), 52.30) }
|
||||
};
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_MAGTHERIDON_DOORS, TYPE_MAGTHERIDON, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
|
||||
{ GO_MAGTHERIDON_DOORS, TYPE_MAGTHERIDON, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
MinionData const minionData[] =
|
||||
@@ -42,6 +47,7 @@ public:
|
||||
SetBossNumber(MAX_ENCOUNTER);
|
||||
LoadDoorData(doorData);
|
||||
LoadMinionData(minionData);
|
||||
LoadBossBoundaries(boundaries);
|
||||
}
|
||||
|
||||
void Initialize() override
|
||||
|
||||
@@ -227,7 +227,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -373,7 +373,6 @@ public:
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (EnterEvadeIfOutOfCombatArea())
|
||||
return;
|
||||
|
||||
events2.Update(diff);
|
||||
|
||||
@@ -115,7 +115,6 @@ public:
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
EnterEvadeIfOutOfCombatArea();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
|
||||
static DoorData const doorData[] =
|
||||
{
|
||||
{ GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
|
||||
{ GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM }
|
||||
};
|
||||
|
||||
class instance_mechanar : public InstanceMapScript
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE },
|
||||
{ GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
class instance_arcatraz : public InstanceMapScript
|
||||
|
||||
@@ -1170,13 +1170,13 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void EnterEvadeMode() override
|
||||
void EnterEvadeMode(EvadeReason why) override
|
||||
{
|
||||
if (fight)
|
||||
SetEscortPaused(false);
|
||||
|
||||
SummonsAction(nullptr);
|
||||
npc_escortAI::EnterEvadeMode();
|
||||
npc_escortAI::EnterEvadeMode(why);
|
||||
}
|
||||
|
||||
void SummonsAction(Unit* who)
|
||||
|
||||
Reference in New Issue
Block a user