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

* cherry-picked commit (2da458c56d)
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

View File

@@ -130,9 +130,9 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
// Evade boss
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -199,7 +199,7 @@ public:
Position const& _homePosition = me->GetHomePosition();
if (me->GetDistance2d(_homePosition.GetPositionX(), _homePosition.GetPositionY()) > 50.0f)
{
EnterEvadeMode();
ScriptedAI::EnterEvadeMode();
return;
}
events.ScheduleEvent(EVENT_CHECK_RESET, 5000);

View File

@@ -99,9 +99,9 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
// Evade mini bosses
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -167,7 +167,7 @@ public:
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
EnterEvadeMode();
ScriptedAI::EnterEvadeMode();
Talk(YELL_EVADE);
}
ResetTimer = 5 * IN_MILLISECONDS;

View File

@@ -88,9 +88,9 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
// Evade mini bosses
if (BattlegroundMap* bgMap = me->GetMap()->ToBattlegroundMap())
@@ -149,7 +149,7 @@ public:
{
if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
EnterEvadeMode();
ScriptedAI::EnterEvadeMode();
Talk(YELL_EVADE);
}
ResetTimer = 5 * IN_MILLISECONDS;

View File

@@ -225,7 +225,7 @@ public:
me->GetMotionMaster()->MoveFollow(summoner, 0.f, 0.f);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
if (Creature* flamelasher = ObjectAccessor::GetCreature(*me, _flamelasherGUID))
{

View File

@@ -200,7 +200,7 @@ public:
_events.ScheduleEvent(EVENT_SPELL_SUMMON_VOIDWALKERS, 1000);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->RemoveAllAuras();
me->DeleteThreatList();

View File

@@ -76,10 +76,10 @@ public:
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000));
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
instance->SetBossState(DATA_WARCHIEF_REND_BLACKHAND, FAIL);
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
}
void IsSummonedBy(Unit* /*summoner*/) override

View File

@@ -164,11 +164,11 @@ public:
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(17000, 19000));
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
instance->SetBossState(DATA_WARCHIEF_REND_BLACKHAND, FAIL);
instance->SetBossState(DATA_GYTH, FAIL);
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
me->DespawnOrUnsummon();
}

View File

@@ -63,10 +63,10 @@ MinionData const minionData[] =
DoorData const doorData[] =
{
{ GO_GYTH_EXIT_DOOR, DATA_WARCHIEF_REND_BLACKHAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_DRAKKISATH_DOOR_1, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_DRAKKISATH_DOOR_2, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
{ GO_GYTH_EXIT_DOOR, DATA_WARCHIEF_REND_BLACKHAND, DOOR_TYPE_PASSAGE },
{ GO_DRAKKISATH_DOOR_1, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE },
{ GO_DRAKKISATH_DOOR_2, DATA_GENERAL_DRAKKISATH, DOOR_TYPE_PASSAGE },
{ 0, 0, DOOR_TYPE_ROOM, } // END
};
class instance_blackrock_spire : public InstanceMapScript

View File

@@ -31,16 +31,16 @@
DoorData const doorData[] =
{
{ GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175946 || GUID 7230
{ GO_PORTCULLIS_RAZORGORE_ROOM, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 176964 || GUID 75158
{ GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175185 || GUID 7229
{ GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179365 || GUID 75159
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179116 || GUID 75161
{ GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 179117 || GUID 75164
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
{ GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE }, // ID 175946 || GUID 7230
{ GO_PORTCULLIS_RAZORGORE_ROOM, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_ROOM, }, // ID 176964 || GUID 75158
{ GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE }, // ID 175185 || GUID 7229
{ GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE }, // ID 179365 || GUID 75159
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE }, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE }, // ID 179116 || GUID 75161
{ GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM }, // ID 179117 || GUID 75164
{ 0, 0, DOOR_TYPE_ROOM } // END
};
ObjectData const creatureData[] =

View File

@@ -232,7 +232,7 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
if (!me->getThreatMgr().getThreatList().empty())
{
@@ -245,7 +245,7 @@ public:
}
else
{
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
}
}

View File

@@ -185,7 +185,6 @@ public:
if (me->IsVisible())
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const override

View File

@@ -194,7 +194,7 @@ public:
case EVENT_CHECK_DIST:
if (me->GetDistance(me->GetHomePosition()) > 75.0f)
{
EnterEvadeMode();
EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
events.ScheduleEvent(EVENT_CHECK_DIST, 5000);
@@ -325,7 +325,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
summons.Summon(summon);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
if (Creature* delrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_DELRISSA)))
if (!delrissa->IsAlive())
@@ -333,7 +333,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI
delrissa->Respawn();
return;
}
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
}
void EnterCombat(Unit* who) override

View File

@@ -240,7 +240,7 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DeleteThreatList();
me->CombatStop(false);

View File

@@ -100,7 +100,7 @@ public:
instance->SetData(DATA_KIRTONOS_THE_HERALD, DONE);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL);
me->DespawnOrUnsummon(1);

View File

@@ -111,15 +111,15 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
if (Creature* alythess = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_GRAND_WARLOCK_ALYTHESS)))
{
if (!alythess->IsAlive())
alythess->Respawn(true);
else if (!alythess->IsInEvadeMode())
alythess->AI()->EnterEvadeMode();
alythess->AI()->EnterEvadeMode(why);
}
}
@@ -259,15 +259,15 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
if (Creature* scorlash = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_LADY_SACROLASH)))
{
if (!scorlash->IsAlive())
scorlash->Respawn(true);
else if (!scorlash->IsInEvadeMode())
scorlash->AI()->EnterEvadeMode();
scorlash->AI()->EnterEvadeMode(why);
}
}

View File

@@ -308,11 +308,11 @@ public:
events.Reset();
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
if (me->GetReactState() == REACT_PASSIVE)
return;
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
}
void AttackStart(Unit* who) override

View File

@@ -176,12 +176,12 @@ public:
me->SetReactState(REACT_PASSIVE);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* muru = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MURU)))
if (!muru->IsInEvadeMode())
muru->AI()->EnterEvadeMode();
muru->AI()->EnterEvadeMode(why);
me->DespawnOrUnsummon();
}

View File

@@ -22,13 +22,13 @@
DoorData const doorData[] =
{
{ GO_FIRE_BARRIER, DATA_FELMYST_DOORS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
{ GO_FIRE_BARRIER, DATA_FELMYST_DOORS, DOOR_TYPE_PASSAGE },
{ GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM },
{ GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE },
{ GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM },
{ GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM },
{ GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_sunwell_plateau : public InstanceMapScript

View File

@@ -402,8 +402,6 @@ public:
else HatcherTimer -= diff;
}
EnterEvadeIfOutOfCombatArea();
DoMeleeAttackIfReady();
if (FireBreathTimer <= diff)

View File

@@ -150,9 +150,9 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
BossAI::EnterEvadeMode();
BossAI::EnterEvadeMode(why);
if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GONG_OF_BETHEKK)))
object->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
me->DespawnOrUnsummon(4000);

View File

@@ -28,8 +28,8 @@ EndScriptData */
DoorData const doorData[] =
{
{ GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
{ GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
};
class instance_zulgurub : public InstanceMapScript

View File

@@ -215,7 +215,7 @@ public:
{
damage = 0;
me->setActive(false);
EnterEvadeMode();
EnterEvadeMode(EVADE_REASON_OTHER);
}
}
@@ -243,7 +243,7 @@ public:
break;
}
me->setActive(false);
EnterEvadeMode();
EnterEvadeMode(EVADE_REASON_OTHER);
return;
case EVENT_SUMMON_SOLDIERS:
for (uint8 i = 0; i < SUNWELL_DEFENDER_NUM; ++i)
@@ -393,7 +393,7 @@ public:
case EVENT_DISAPPEAR:
me->SetVisible(false);
me->setActive(false);
EnterEvadeMode();
EnterEvadeMode(EVADE_REASON_OTHER);
break;
case EVENT_SET_FACING:
me->SetFacingTo(2.45f);
@@ -425,11 +425,11 @@ public:
events.ScheduleEvent(EVENT_SET_FACING, 0);
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason why) override
{
if (me->isActiveObject())
return;
ScriptedAI::EnterEvadeMode();
ScriptedAI::EnterEvadeMode(why);
}
void SetData(uint32 type, uint32 id) override

View File

@@ -155,7 +155,7 @@ public:
MarzonGUID.Clear();
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DisappearAndDie();
@@ -317,7 +317,7 @@ public:
}
}
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DisappearAndDie();

View File

@@ -1011,7 +1011,7 @@ public:
EventMap _events;
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->DeleteThreatList();
me->CombatStop(true);
@@ -2353,7 +2353,7 @@ public:
EventMap _events;
void EnterEvadeMode() override
void EnterEvadeMode(EvadeReason /*why*/) override
{
me->RemoveAura(SPELL_HEROIC_VANGUARD);
me->DeleteThreatList();