mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 19:05:42 +00:00
refactor(Scripts/MagistersTerrace): Clean up instance script (#17346)
This commit is contained in:
@@ -105,7 +105,7 @@ public:
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false);
|
||||
instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_KAELTHAS, NOT_STARTED);
|
||||
me->SetImmuneToAll(false);
|
||||
}
|
||||
|
||||
@@ -125,12 +125,17 @@ public:
|
||||
|
||||
void JustDied(Unit*) override
|
||||
{
|
||||
instance->SetData(DATA_KAELTHAS_EVENT, DONE);
|
||||
instance->SetBossState(DATA_KAELTHAS, DONE);
|
||||
|
||||
if (GameObject* orb = instance->GetGameObject(DATA_ESCAPE_ORB))
|
||||
{
|
||||
orb->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
instance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS);
|
||||
me->SetInCombatWithZone();
|
||||
|
||||
events.ScheduleEvent(EVENT_SPELL_FIREBALL, 0);
|
||||
|
||||
@@ -105,7 +105,7 @@ public:
|
||||
{
|
||||
PlayersKilled = SAY_PLAYER_KILLED;
|
||||
HelpersKilled = SAY_HELPER_DIED;
|
||||
instance->SetData(DATA_DELRISSA_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_DELRISSA, NOT_STARTED);
|
||||
summons.Respawn();
|
||||
|
||||
me->SetLootMode(0);
|
||||
@@ -141,7 +141,7 @@ public:
|
||||
{
|
||||
me->loot.clear();
|
||||
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, 1, me);
|
||||
instance->SetData(DATA_DELRISSA_EVENT, DONE);
|
||||
instance->SetBossState(DATA_DELRISSA, DONE);
|
||||
me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
||||
}
|
||||
++HelpersKilled;
|
||||
@@ -151,7 +151,7 @@ public:
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
summons.DoZoneInCombat();
|
||||
instance->SetData(DATA_DELRISSA_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_DELRISSA, IN_PROGRESS);
|
||||
|
||||
events.ScheduleEvent(EVENT_SPELL_FLASH_HEAL, 15000);
|
||||
events.ScheduleEvent(EVENT_SPELL_RENEW, 10000);
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (HelpersKilled == MAX_ACTIVE_HELPERS + 1)
|
||||
instance->SetData(DATA_DELRISSA_EVENT, DONE);
|
||||
instance->SetBossState(DATA_DELRISSA, DONE);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@@ -106,7 +106,7 @@ public:
|
||||
events.Reset();
|
||||
summons.DespawnAll();
|
||||
SpawnCrystals();
|
||||
instance->SetData(DATA_SELIN_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_SELIN_FIREHEART, NOT_STARTED);
|
||||
CrystalGUID.Clear();
|
||||
me->SetPower(POWER_MANA, 0);
|
||||
}
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SetData(DATA_SELIN_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_SELIN_FIREHEART, IN_PROGRESS);
|
||||
|
||||
events.ScheduleEvent(EVENT_SPELL_DRAIN_LIFE, 2500, 1);
|
||||
events.ScheduleEvent(EVENT_SPELL_FEL_EXPLOSION, 2000);
|
||||
@@ -134,7 +134,7 @@ public:
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
instance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete!
|
||||
instance->SetBossState(DATA_SELIN_FIREHEART, DONE); // Encounter complete!
|
||||
summons.DespawnAll();
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
summons.DespawnAll();
|
||||
IntervalHealthAmount = 1;
|
||||
|
||||
instance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_VEXALLUS, NOT_STARTED);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
||||
}
|
||||
|
||||
@@ -100,14 +100,14 @@ public:
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
summons.DespawnAll();
|
||||
instance->SetData(DATA_VEXALLUS_EVENT, DONE);
|
||||
instance->SetBossState(DATA_VEXALLUS, DONE);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_VEXALLUS, IN_PROGRESS);
|
||||
|
||||
events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, 8000);
|
||||
events.ScheduleEvent(EVENT_SPELL_ARCANE_SHOCK, 5000);
|
||||
|
||||
@@ -26,6 +26,21 @@ ObjectData const creatureData[] =
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
ObjectData const gameobjectData[] =
|
||||
{
|
||||
{ GO_ESCAPE_ORB, DATA_ESCAPE_ORB },
|
||||
{ 0, 0, }
|
||||
};
|
||||
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_SELIN_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_PASSAGE },
|
||||
{ GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM },
|
||||
{ GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE },
|
||||
{ GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
Position const KalecgosSpawnPos = { 164.3747f, -397.1197f, 2.151798f, 1.66219f };
|
||||
|
||||
class instance_magisters_terrace : public InstanceMapScript
|
||||
@@ -38,47 +53,16 @@ public:
|
||||
instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
LoadObjectData(creatureData, nullptr);
|
||||
SetBossNumber(MAX_ENCOUNTER);
|
||||
LoadObjectData(creatureData, gameobjectData);
|
||||
LoadDoorData(doorData);
|
||||
}
|
||||
|
||||
uint32 Encounter[MAX_ENCOUNTER];
|
||||
|
||||
ObjectGuid VexallusDoorGUID;
|
||||
ObjectGuid SelinDoorGUID;
|
||||
ObjectGuid SelinEncounterDoorGUID;
|
||||
ObjectGuid DelrissaDoorGUID;
|
||||
ObjectGuid KaelDoorGUID;
|
||||
ObjectGuid EscapeOrbGUID;
|
||||
|
||||
ObjectGuid DelrissaGUID;
|
||||
ObjectGuid KaelGUID;
|
||||
|
||||
void Initialize() override
|
||||
{
|
||||
memset(&Encounter, 0, sizeof(Encounter));
|
||||
}
|
||||
|
||||
bool IsEncounterInProgress() const override
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (Encounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 identifier) const override
|
||||
{
|
||||
switch (identifier)
|
||||
{
|
||||
case DATA_SELIN_EVENT:
|
||||
case DATA_VEXALLUS_EVENT:
|
||||
case DATA_DELRISSA_EVENT:
|
||||
case DATA_KAELTHAS_EVENT:
|
||||
return Encounter[identifier];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override
|
||||
{
|
||||
if (eventId == EVENT_SPAWN_KALECGOS)
|
||||
@@ -97,37 +81,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 identifier, uint32 data) override
|
||||
{
|
||||
switch (identifier)
|
||||
{
|
||||
case DATA_SELIN_EVENT:
|
||||
HandleGameObject(SelinDoorGUID, data == DONE);
|
||||
HandleGameObject(SelinEncounterDoorGUID, data != IN_PROGRESS);
|
||||
Encounter[identifier] = data;
|
||||
break;
|
||||
case DATA_VEXALLUS_EVENT:
|
||||
if (data == DONE)
|
||||
HandleGameObject(VexallusDoorGUID, true);
|
||||
Encounter[identifier] = data;
|
||||
break;
|
||||
case DATA_DELRISSA_EVENT:
|
||||
if (data == DONE)
|
||||
HandleGameObject(DelrissaDoorGUID, true);
|
||||
Encounter[identifier] = data;
|
||||
break;
|
||||
case DATA_KAELTHAS_EVENT:
|
||||
HandleGameObject(KaelDoorGUID, data != IN_PROGRESS);
|
||||
if (data == DONE)
|
||||
if (GameObject* escapeOrb = instance->GetGameObject(EscapeOrbGUID))
|
||||
escapeOrb->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
||||
Encounter[identifier] = data;
|
||||
break;
|
||||
}
|
||||
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
@@ -148,60 +101,11 @@ public:
|
||||
InstanceScript::OnCreatureCreate(creature);
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_SELIN_DOOR:
|
||||
if (GetData(DATA_SELIN_EVENT) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
SelinDoorGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_SELIN_ENCOUNTER_DOOR:
|
||||
SelinEncounterDoorGUID = go->GetGUID();
|
||||
break;
|
||||
|
||||
case GO_VEXALLUS_DOOR:
|
||||
if (GetData(DATA_VEXALLUS_EVENT) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
VexallusDoorGUID = go->GetGUID();
|
||||
break;
|
||||
|
||||
case GO_DELRISSA_DOOR:
|
||||
if (GetData(DATA_DELRISSA_EVENT) == DONE)
|
||||
HandleGameObject(ObjectGuid::Empty, true, go);
|
||||
DelrissaDoorGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_KAEL_DOOR:
|
||||
KaelDoorGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_ESCAPE_ORB:
|
||||
if (GetData(DATA_KAELTHAS_EVENT) == DONE)
|
||||
go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
|
||||
EscapeOrbGUID = go->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// @todo: Use BossStates. This is for code compatibility
|
||||
void ReadSaveDataMore(std::istringstream& data) override
|
||||
{
|
||||
data >> Encounter[1];
|
||||
data >> Encounter[2];
|
||||
data >> Encounter[3];
|
||||
}
|
||||
|
||||
void WriteSaveDataMore(std::ostringstream& data) override
|
||||
{
|
||||
data << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3];
|
||||
}
|
||||
|
||||
ObjectGuid GetGuidData(uint32 identifier) const override
|
||||
{
|
||||
switch (identifier)
|
||||
if (identifier == NPC_DELRISSA)
|
||||
{
|
||||
case NPC_DELRISSA:
|
||||
return DelrissaGUID;
|
||||
return DelrissaGUID;
|
||||
}
|
||||
|
||||
return ObjectGuid::Empty;
|
||||
|
||||
@@ -28,13 +28,14 @@
|
||||
|
||||
enum MTData
|
||||
{
|
||||
DATA_SELIN_EVENT = 0,
|
||||
DATA_VEXALLUS_EVENT = 1,
|
||||
DATA_DELRISSA_EVENT = 2,
|
||||
DATA_KAELTHAS_EVENT = 3,
|
||||
DATA_SELIN_FIREHEART = 0,
|
||||
DATA_VEXALLUS = 1,
|
||||
DATA_DELRISSA = 2,
|
||||
DATA_KAELTHAS = 3,
|
||||
MAX_ENCOUNTER = 4,
|
||||
|
||||
DATA_KALECGOS = 5
|
||||
DATA_KALECGOS = 5,
|
||||
DATA_ESCAPE_ORB = 6
|
||||
};
|
||||
|
||||
enum MTCreatures
|
||||
|
||||
Reference in New Issue
Block a user