refactor(Scripts/MagistersTerrace): Clean up instance script (#17346)

This commit is contained in:
Skjalf
2023-09-25 06:11:12 -03:00
committed by GitHub
parent 13a9de1083
commit f0c4ab3c95
6 changed files with 44 additions and 134 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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