Scripts/Halls of Stone: Modernized Halls of Stone instance script (#28280)
(cherry picked from commit f82f97305d28247e80b9220479b59896de501b7c)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user