Scripts/Halls of Stone: Modernized Halls of Stone instance script (#28280)

(cherry picked from commit f82f97305d28247e80b9220479b59896de501b7c)
This commit is contained in:
Ovah
2022-09-30 20:29:10 +02:00
committed by Shauren
parent 5f05df2b15
commit 406663806d
3 changed files with 49 additions and 119 deletions
@@ -95,12 +95,12 @@ Position const CenterPoint = { 1293.8799f, 666.942f, 189.60754f, 0.0f };
struct boss_sjonnir : public BossAI
{
boss_sjonnir(Creature* creature) : BossAI(creature, DATA_SJONNIR),
boss_sjonnir(Creature* creature) : BossAI(creature, DATA_SJONNIR_THE_IRONSHAPER),
_sludgesKilled(0), _summonsTroggs(false), _summonsOozes(false), _summonsDwarfs(false), _frenzied(false) { }
void JustEngagedWith(Unit* who) override
{
if (!instance->CheckRequiredBosses(DATA_SJONNIR, who->ToPlayer()))
if (!instance->CheckRequiredBosses(DATA_SJONNIR_THE_IRONSHAPER, who->ToPlayer()))
{
EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK);
return;
@@ -359,8 +359,9 @@ struct npc_iron_sludge : public ScriptedAI
me->SetCorpseDelay(4, true);
DoCastSelf(SPELL_IRON_SLUDGE_SPAWN_VISUAL);
if (Creature* sjonnir = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SJONNIR)))
sjonnir->AI()->JustSummoned(me);
if (Creature* sjonnir = _instance->GetCreature(DATA_SJONNIR_THE_IRONSHAPER))
if (CreatureAI* ai = sjonnir->AI())
ai->JustSummoned(me);
}
void JustEngagedWith(Unit* /*who*/) override
@@ -374,8 +375,9 @@ struct npc_iron_sludge : public ScriptedAI
void JustDied(Unit* /*killer*/) override
{
if (Creature* sjonnir = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SJONNIR)))
sjonnir->AI()->DoAction(ACTION_SLUDGE_DEAD);
if (Creature* sjonnir = _instance->GetCreature(DATA_SJONNIR_THE_IRONSHAPER))
if (CreatureAI* ai = sjonnir->AI())
ai->DoAction(ACTION_SLUDGE_DEAD);
}
void UpdateAI(uint32 diff) override
@@ -27,28 +27,30 @@ uint32 const EncounterCount = 4;
enum HOSDataTypes
{
// Encounter States/Boss GUIDs
// Bosses
DATA_KRYSTALLUS = 0,
DATA_MAIDEN_OF_GRIEF = 1,
DATA_TRIBUNAL_OF_AGES = 2,
DATA_SJONNIR = 3,
DATA_SJONNIR_THE_IRONSHAPER = 3,
// Additional data
DATA_KADDRAK = 4,
DATA_MARNAK = 5,
DATA_ABEDNEUM = 6,
DATA_GO_TRIBUNAL_CONSOLE = 7,
DATA_GO_KADDRAK = 8,
DATA_GO_MARNAK = 9,
DATA_GO_ABEDNEUM = 10,
DATA_GO_SKY_FLOOR = 11
/*Tribunal of Ages*/
DATA_KADDRAK,
DATA_MARNAK,
DATA_ABEDNEUM,
DATA_GO_TRIBUNAL_CONSOLE,
DATA_GO_KADDRAK,
DATA_GO_MARNAK,
DATA_GO_ABEDNEUM,
DATA_GO_SKY_FLOOR,
DATA_GO_TRIBUNAL_CHEST
};
enum HOSCreatureIds
{
NPC_MAIDEN = 27975,
NPC_MAIDEN_OF_GRIEF = 27975,
NPC_KRYSTALLUS = 27977,
NPC_SJONNIR = 27978,
NPC_SJONNIR_THE_IRONSHAPER = 27978,
NPC_MARNAK = 30897,
NPC_KADDRAK = 30898,
NPC_ABEDNEUM = 30899,
@@ -25,7 +25,30 @@
DoorData const doorData[] =
{
{ GO_SJONNIR_DOOR, DATA_TRIBUNAL_OF_AGES, DOOR_TYPE_PASSAGE },
{ 0, 0, DOOR_TYPE_ROOM } // END
{ 0, 0, DOOR_TYPE_ROOM } // END
};
ObjectData const creatureData[] =
{
{ NPC_KRYSTALLUS, DATA_KRYSTALLUS },
{ NPC_MAIDEN_OF_GRIEF, DATA_MAIDEN_OF_GRIEF },
{ NPC_SJONNIR_THE_IRONSHAPER, DATA_SJONNIR_THE_IRONSHAPER },
{ NPC_KADDRAK, DATA_KADDRAK },
{ NPC_MARNAK, DATA_MARNAK },
{ NPC_ABEDNEUM, DATA_ABEDNEUM },
{ 0, 0 } // END
};
ObjectData const gameObjectData[] =
{
{ GO_KADDRAK, DATA_GO_KADDRAK },
{ GO_MARNAK, DATA_GO_MARNAK },
{ GO_ABEDNEUM, DATA_GO_ABEDNEUM },
{ GO_TRIBUNAL_CONSOLE, DATA_GO_TRIBUNAL_CONSOLE },
{ GO_TRIBUNAL_SKY_FLOOR, DATA_GO_SKY_FLOOR },
{ GO_TRIBUNAL_CHEST, DATA_GO_TRIBUNAL_CHEST },
{ GO_TRIBUNAL_CHEST_HERO, DATA_GO_TRIBUNAL_CHEST },
{ 0, 0 } // END
};
class instance_halls_of_stone : public InstanceMapScript
@@ -39,104 +62,26 @@ class instance_halls_of_stone : public InstanceMapScript
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadObjectData(creatureData, gameObjectData);
LoadDoorData(doorData);
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case NPC_KRYSTALLUS:
KrystallusGUID = creature->GetGUID();
break;
case NPC_MAIDEN:
MaidenOfGriefGUID = creature->GetGUID();
break;
case NPC_SJONNIR:
SjonnirGUID = creature->GetGUID();
break;
case NPC_MARNAK:
MarnakGUID = creature->GetGUID();
break;
case NPC_KADDRAK:
KaddrakGUID = creature->GetGUID();
break;
case NPC_ABEDNEUM:
AbedneumGUID = creature->GetGUID();
break;
case NPC_BRANN:
BrannGUID = creature->GetGUID();
break;
default:
break;
}
}
void OnGameObjectCreate(GameObject* go) override
{
InstanceScript::OnGameObjectCreate(go);
switch (go->GetEntry())
{
case GO_ABEDNEUM:
AbedneumGoGUID = go->GetGUID();
break;
case GO_MARNAK:
MarnakGoGUID = go->GetGUID();
break;
case GO_KADDRAK:
KaddrakGoGUID = go->GetGUID();
break;
case GO_TRIBUNAL_CONSOLE:
TribunalConsoleGUID = go->GetGUID();
break;
case GO_TRIBUNAL_CHEST:
case GO_TRIBUNAL_CHEST_HERO:
TribunalChestGUID = go->GetGUID();
if (GetBossState(DATA_TRIBUNAL_OF_AGES) == DONE)
go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GO_TRIBUNAL_SKY_FLOOR:
TribunalSkyFloorGUID = go->GetGUID();
break;
default:
break;
}
}
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
case DATA_MAIDEN_OF_GRIEF:
return MaidenOfGriefGUID;
case DATA_KRYSTALLUS:
return KrystallusGUID;
case DATA_SJONNIR:
return SjonnirGUID;
case DATA_KADDRAK:
return KaddrakGUID;
case DATA_MARNAK:
return MarnakGUID;
case DATA_ABEDNEUM:
return AbedneumGUID;
case DATA_GO_TRIBUNAL_CONSOLE:
return TribunalConsoleGUID;
case DATA_GO_KADDRAK:
return KaddrakGoGUID;
case DATA_GO_ABEDNEUM:
return AbedneumGoGUID;
case DATA_GO_MARNAK:
return MarnakGoGUID;
case DATA_GO_SKY_FLOOR:
return TribunalSkyFloorGUID;
default:
break;
}
return ObjectGuid::Empty;
}
bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
@@ -146,10 +91,8 @@ class instance_halls_of_stone : public InstanceMapScript
{
case DATA_TRIBUNAL_OF_AGES:
if (state == DONE)
{
if (GameObject* go = instance->GetGameObject(TribunalChestGUID))
if (GameObject* go = GetGameObject(DATA_GO_TRIBUNAL_CHEST))
go->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
}
break;
default:
break;
@@ -165,7 +108,7 @@ class instance_halls_of_stone : public InstanceMapScript
switch (bossId)
{
case DATA_SJONNIR:
case DATA_SJONNIR_THE_IRONSHAPER:
if (GetBossState(DATA_TRIBUNAL_OF_AGES) != DONE)
return false;
break;
@@ -175,23 +118,6 @@ class instance_halls_of_stone : public InstanceMapScript
return true;
}
protected:
ObjectGuid KrystallusGUID;
ObjectGuid MaidenOfGriefGUID;
ObjectGuid SjonnirGUID;
ObjectGuid KaddrakGUID;
ObjectGuid AbedneumGUID;
ObjectGuid MarnakGUID;
ObjectGuid BrannGUID;
ObjectGuid TribunalConsoleGUID;
ObjectGuid TribunalChestGUID;
ObjectGuid TribunalSkyFloorGUID;
ObjectGuid KaddrakGoGUID;
ObjectGuid AbedneumGoGUID;
ObjectGuid MarnakGoGUID;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override