mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Scripts/HallsOfStone: reworked InstanceScript
This commit is contained in:
@@ -56,11 +56,6 @@ class boss_krystallus : public CreatureScript
|
||||
public:
|
||||
boss_krystallus() : CreatureScript("boss_krystallus") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_krystallusAI(creature);
|
||||
}
|
||||
|
||||
struct boss_krystallusAI : public ScriptedAI
|
||||
{
|
||||
boss_krystallusAI(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -89,14 +84,14 @@ public:
|
||||
uiShatterTimer = 0;
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_KRYSTALLUS_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_KRYSTALLUS, NOT_STARTED);
|
||||
}
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_KRYSTALLUS_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_KRYSTALLUS, IN_PROGRESS);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) OVERRIDE
|
||||
@@ -149,7 +144,7 @@ public:
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_KRYSTALLUS_EVENT, DONE);
|
||||
instance->SetBossState(DATA_KRYSTALLUS, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) OVERRIDE
|
||||
@@ -182,6 +177,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<boss_krystallusAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_krystallus_shatter : public SpellScriptLoader
|
||||
|
||||
@@ -56,11 +56,6 @@ class boss_maiden_of_grief : public CreatureScript
|
||||
public:
|
||||
boss_maiden_of_grief() : CreatureScript("boss_maiden_of_grief") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_maiden_of_griefAI(creature);
|
||||
}
|
||||
|
||||
struct boss_maiden_of_griefAI : public ScriptedAI
|
||||
{
|
||||
boss_maiden_of_griefAI(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -84,7 +79,7 @@ public:
|
||||
|
||||
if (instance)
|
||||
{
|
||||
instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_MAIDEN_OF_GRIEF, NOT_STARTED);
|
||||
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
|
||||
}
|
||||
}
|
||||
@@ -95,14 +90,15 @@ public:
|
||||
|
||||
if (instance)
|
||||
{
|
||||
/*
|
||||
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_MAIDEN_DOOR)))
|
||||
if (pDoor->GetGoState() == GO_STATE_READY)
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, IN_PROGRESS);
|
||||
*/
|
||||
instance->SetBossState(DATA_MAIDEN_OF_GRIEF, IN_PROGRESS);
|
||||
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT);
|
||||
}
|
||||
}
|
||||
@@ -158,7 +154,7 @@ public:
|
||||
Talk(SAY_DEATH);
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, DONE);
|
||||
instance->SetBossState(DATA_MAIDEN_OF_GRIEF, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) OVERRIDE
|
||||
@@ -170,6 +166,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<boss_maiden_of_griefAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_maiden_of_grief()
|
||||
|
||||
@@ -84,11 +84,6 @@ class boss_sjonnir : public CreatureScript
|
||||
public:
|
||||
boss_sjonnir() : CreatureScript("boss_sjonnir") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new boss_sjonnirAI(creature);
|
||||
}
|
||||
|
||||
struct boss_sjonnirAI : public ScriptedAI
|
||||
{
|
||||
boss_sjonnirAI(Creature* creature) : ScriptedAI(creature), lSummons(me)
|
||||
@@ -127,7 +122,7 @@ public:
|
||||
lSummons.DespawnAll();
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_SJONNIR_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_SJONNIR, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) OVERRIDE
|
||||
@@ -138,14 +133,15 @@ public:
|
||||
|
||||
if (instance)
|
||||
{
|
||||
/*
|
||||
if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_SJONNIR_DOOR)))
|
||||
if (pDoor->GetGoState() == GO_STATE_READY)
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
}
|
||||
|
||||
instance->SetData(DATA_SJONNIR_EVENT, IN_PROGRESS);
|
||||
*/
|
||||
instance->SetBossState(DATA_SJONNIR, IN_PROGRESS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,7 +217,7 @@ public:
|
||||
lSummons.DespawnAll();
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_SJONNIR_EVENT, DONE);
|
||||
instance->SetBossState(DATA_SJONNIR, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) OVERRIDE
|
||||
@@ -247,6 +243,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<boss_sjonnirAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_malformed_ooze : public CreatureScript
|
||||
@@ -254,11 +254,6 @@ class npc_malformed_ooze : public CreatureScript
|
||||
public:
|
||||
npc_malformed_ooze() : CreatureScript("npc_malformed_ooze") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new npc_malformed_oozeAI(creature);
|
||||
}
|
||||
|
||||
struct npc_malformed_oozeAI : public ScriptedAI
|
||||
{
|
||||
npc_malformed_oozeAI(Creature* creature) : ScriptedAI(creature) {}
|
||||
@@ -290,35 +285,37 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<npc_malformed_oozeAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_iron_sludge : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_iron_sludge() : CreatureScript("npc_iron_sludge") { }
|
||||
public:
|
||||
npc_iron_sludge() : CreatureScript("npc_iron_sludge") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new npc_iron_sludgeAI(creature);
|
||||
}
|
||||
|
||||
struct npc_iron_sludgeAI : public ScriptedAI
|
||||
{
|
||||
npc_iron_sludgeAI(Creature* creature) : ScriptedAI(creature)
|
||||
struct npc_iron_sludgeAI : public ScriptedAI
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
npc_iron_sludgeAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
InstanceScript* instance;
|
||||
|
||||
void JustDied(Unit* /*killer*/) OVERRIDE
|
||||
{
|
||||
if (instance)
|
||||
void JustDied(Unit* /*killer*/) OVERRIDE
|
||||
{
|
||||
if (Creature* Sjonnir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SJONNIR)))
|
||||
Sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<npc_iron_sludgeAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_abuse_the_ooze : public AchievementCriteriaScript
|
||||
|
||||
@@ -137,11 +137,6 @@ class npc_tribuna_controller : public CreatureScript
|
||||
public:
|
||||
npc_tribuna_controller() : CreatureScript("npc_tribuna_controller") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new npc_tribuna_controllerAI(creature);
|
||||
}
|
||||
|
||||
struct npc_tribuna_controllerAI : public ScriptedAI
|
||||
{
|
||||
npc_tribuna_controllerAI(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -263,6 +258,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<npc_tribuna_controllerAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_brann_hos : public CreatureScript
|
||||
@@ -293,11 +292,6 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return new npc_brann_hosAI(creature);
|
||||
}
|
||||
|
||||
struct npc_brann_hosAI : public npc_escortAI
|
||||
{
|
||||
npc_brann_hosAI(Creature* creature) : npc_escortAI(creature)
|
||||
@@ -331,7 +325,7 @@ public:
|
||||
DespawnDwarf();
|
||||
|
||||
if (instance)
|
||||
instance->SetData(DATA_BRANN_EVENT, NOT_STARTED);
|
||||
instance->SetBossState(DATA_BRANN_EVENT, NOT_STARTED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -446,9 +440,9 @@ public:
|
||||
case 1:
|
||||
if (instance)
|
||||
{
|
||||
if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED)
|
||||
if (instance->GetBossState(DATA_BRANN_EVENT) != NOT_STARTED)
|
||||
return;
|
||||
instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS);
|
||||
instance->SetBossState(DATA_BRANN_EVENT, IN_PROGRESS);
|
||||
}
|
||||
bIsBattle = false;
|
||||
Talk(SAY_ESCORT_START);
|
||||
@@ -598,7 +592,7 @@ public:
|
||||
case 29:
|
||||
Talk(SAY_EVENT_END_02);
|
||||
if (instance)
|
||||
instance->SetData(DATA_BRANN_EVENT, DONE);
|
||||
instance->SetBossState(DATA_BRANN_EVENT, DONE);
|
||||
me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true);
|
||||
JumpToNextStep(5500);
|
||||
break;
|
||||
@@ -735,6 +729,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const OVERRIDE
|
||||
{
|
||||
return GetHallsOfStoneAI<npc_brann_hosAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_brann_spankin_new : public AchievementCriteriaScript
|
||||
|
||||
@@ -15,55 +15,61 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef DEF_HALLS_OF_STONE_H
|
||||
#define DEF_HALLS_OF_STONE_H
|
||||
enum Data
|
||||
#ifndef HALLS_OF_STONE_H_
|
||||
#define HALLS_OF_STONE_H_
|
||||
|
||||
#define HoSScriptName "instance_halls_of_stone"
|
||||
|
||||
uint32 const EncounterCount = 4;
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
DATA_KRYSTALLUS_EVENT,
|
||||
DATA_MAIDEN_OF_GRIEF_EVENT,
|
||||
DATA_SJONNIR_EVENT,
|
||||
DATA_BRANN_EVENT
|
||||
// Encounter States/Boss GUIDs
|
||||
DATA_KRYSTALLUS = 0,
|
||||
DATA_MAIDEN_OF_GRIEF = 1,
|
||||
DATA_BRANN_EVENT = 2,
|
||||
DATA_SJONNIR = 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
|
||||
};
|
||||
|
||||
enum Data64
|
||||
enum CreatureIds
|
||||
{
|
||||
DATA_KRYSTALLUS,
|
||||
DATA_MAIDEN_OF_GRIEF,
|
||||
DATA_SJONNIR,
|
||||
DATA_KADDRAK,
|
||||
DATA_MARNAK,
|
||||
DATA_ABEDNEUM,
|
||||
DATA_GO_TRIBUNAL_CONSOLE,
|
||||
DATA_GO_KADDRAK,
|
||||
DATA_GO_MARNAK,
|
||||
DATA_GO_ABEDNEUM,
|
||||
DATA_GO_SKY_FLOOR,
|
||||
DATA_SJONNIR_DOOR,
|
||||
DATA_MAIDEN_DOOR
|
||||
};
|
||||
|
||||
enum CreaturesIds
|
||||
{
|
||||
CREATURE_MAIDEN = 27975,
|
||||
CREATURE_KRYSTALLUS = 27977,
|
||||
CREATURE_SJONNIR = 27978,
|
||||
CREATURE_MARNAK = 30897,
|
||||
CREATURE_KADDRAK = 30898,
|
||||
CREATURE_ABEDNEUM = 30899,
|
||||
CREATURE_BRANN = 28070
|
||||
NPC_MAIDEN = 27975,
|
||||
NPC_KRYSTALLUS = 27977,
|
||||
NPC_SJONNIR = 27978,
|
||||
NPC_MARNAK = 30897,
|
||||
NPC_KADDRAK = 30898,
|
||||
NPC_ABEDNEUM = 30899,
|
||||
NPC_BRANN = 28070
|
||||
};
|
||||
|
||||
enum GameObjectIds
|
||||
{
|
||||
GO_ABEDNEUM = 191669,
|
||||
GO_MARNAK = 192170,
|
||||
GO_KADDRAK = 192171,
|
||||
GO_MAIDEN_DOOR = 191292,
|
||||
GO_BRANN_DOOR = 191295,
|
||||
GO_SJONNIR_DOOR = 191296,
|
||||
GO_TRIBUNAL_CONSOLE = 193907,
|
||||
GO_TRIBUNAL_CHEST = 190586,
|
||||
GO_TRIBUNAL_CHEST_HERO = 193996
|
||||
GO_ABEDNEUM = 191669,
|
||||
GO_MARNAK = 191670,
|
||||
GO_KADDRAK = 191671,
|
||||
GO_MAIDEN_DOOR = 191292,
|
||||
GO_BRANN_DOOR = 191295,
|
||||
GO_SJONNIR_DOOR = 191296,
|
||||
GO_TRIBUNAL_CONSOLE = 193907,
|
||||
GO_TRIBUNAL_CHEST = 190586,
|
||||
GO_TRIBUNAL_CHEST_HERO = 193996,
|
||||
GO_TRIBUNAL_SKY_FLOOR = 191527
|
||||
};
|
||||
|
||||
#endif
|
||||
template<class AI>
|
||||
AI* GetHallsOfStoneAI(Creature* creature)
|
||||
{
|
||||
return GetInstanceAI<AI>(creature, HoSScriptName);
|
||||
}
|
||||
|
||||
#endif // HALLS_OF_STONE_H_
|
||||
|
||||
@@ -17,256 +17,266 @@
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "WorldSession.h"
|
||||
#include "halls_of_stone.h"
|
||||
|
||||
#define MAX_ENCOUNTER 4
|
||||
|
||||
/* Halls of Stone encounters:
|
||||
0- Krystallus
|
||||
1- Maiden of Grief
|
||||
2- Escort Event
|
||||
3- Sjonnir The Ironshaper
|
||||
*/
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_MAIDEN_DOOR, DATA_KRYSTALLUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_BRANN_DOOR, DATA_MAIDEN_OF_GRIEF, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ GO_SJONNIR_DOOR, DATA_BRANN_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
|
||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
|
||||
};
|
||||
|
||||
class instance_halls_of_stone : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_halls_of_stone() : InstanceMapScript("instance_halls_of_stone", 599) { }
|
||||
public:
|
||||
instance_halls_of_stone() : InstanceMapScript(HoSScriptName, 599) { }
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
|
||||
{
|
||||
return new instance_halls_of_stone_InstanceMapScript(map);
|
||||
}
|
||||
|
||||
struct instance_halls_of_stone_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_halls_of_stone_InstanceMapScript(Map* map) : InstanceScript(map) {}
|
||||
|
||||
uint64 uiMaidenOfGrief;
|
||||
uint64 uiKrystallus;
|
||||
uint64 uiSjonnir;
|
||||
|
||||
uint64 uiKaddrak;
|
||||
uint64 uiAbedneum;
|
||||
uint64 uiMarnak;
|
||||
uint64 uiBrann;
|
||||
|
||||
uint64 uiMaidenOfGriefDoor;
|
||||
uint64 uiSjonnirDoor;
|
||||
uint64 uiBrannDoor;
|
||||
uint64 uiTribunalConsole;
|
||||
uint64 uiTribunalChest;
|
||||
uint64 uiTribunalSkyFloor;
|
||||
uint64 uiKaddrakGo;
|
||||
uint64 uiAbedneumGo;
|
||||
uint64 uiMarnakGo;
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
|
||||
std::string str_data;
|
||||
|
||||
void Initialize() OVERRIDE
|
||||
struct instance_halls_of_stone_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
uiMaidenOfGrief = 0;
|
||||
uiKrystallus = 0;
|
||||
uiSjonnir = 0;
|
||||
|
||||
uiKaddrak = 0;
|
||||
uiMarnak = 0;
|
||||
uiAbedneum = 0;
|
||||
uiBrann = 0;
|
||||
|
||||
uiMaidenOfGriefDoor = 0;
|
||||
uiSjonnirDoor = 0;
|
||||
uiBrannDoor = 0;
|
||||
uiKaddrakGo = 0;
|
||||
uiMarnakGo = 0;
|
||||
uiAbedneumGo = 0;
|
||||
uiTribunalConsole = 0;
|
||||
uiTribunalChest = 0;
|
||||
uiTribunalSkyFloor = 0;
|
||||
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
m_auiEncounter[i] = NOT_STARTED;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) OVERRIDE
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
instance_halls_of_stone_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
case CREATURE_MAIDEN: uiMaidenOfGrief = creature->GetGUID(); break;
|
||||
case CREATURE_KRYSTALLUS: uiKrystallus = creature->GetGUID(); break;
|
||||
case CREATURE_SJONNIR: uiSjonnir = creature->GetGUID(); break;
|
||||
case CREATURE_MARNAK: uiMarnak = creature->GetGUID(); break;
|
||||
case CREATURE_KADDRAK: uiKaddrak = creature->GetGUID(); break;
|
||||
case CREATURE_ABEDNEUM: uiAbedneum = creature->GetGUID(); break;
|
||||
case CREATURE_BRANN: uiBrann = creature->GetGUID(); break;
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(doorData);
|
||||
|
||||
KrystallusGUID = 0;
|
||||
MaidenOfGriefGUID = 0;
|
||||
SjonnirGUID = 0;
|
||||
|
||||
KaddrakGUID = 0;
|
||||
AbedneumGUID = 0;
|
||||
MarnakGUID = 0;
|
||||
BrannGUID = 0;
|
||||
|
||||
TribunalConsoleGUID = 0;
|
||||
TribunalChestGUID = 0;
|
||||
TribunalSkyFloorGUID = 0;
|
||||
KaddrakGoGUID = 0;
|
||||
AbedneumGoGUID = 0;
|
||||
MarnakGoGUID = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) OVERRIDE
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
void OnCreatureCreate(Creature* creature) OVERRIDE
|
||||
{
|
||||
case GO_ABEDNEUM:
|
||||
uiAbedneumGo = go->GetGUID();
|
||||
break;
|
||||
case GO_MARNAK:
|
||||
uiMarnakGo = go->GetGUID();
|
||||
break;
|
||||
case GO_KADDRAK:
|
||||
uiKaddrakGo = go->GetGUID();
|
||||
break;
|
||||
case GO_MAIDEN_DOOR:
|
||||
uiMaidenOfGriefDoor = go->GetGUID();
|
||||
if (m_auiEncounter[0] == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
else
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
break;
|
||||
case GO_BRANN_DOOR:
|
||||
uiBrannDoor = go->GetGUID();
|
||||
if (m_auiEncounter[1] == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
else
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
break;
|
||||
case GO_SJONNIR_DOOR:
|
||||
uiSjonnirDoor = go->GetGUID();
|
||||
if (m_auiEncounter[2] == DONE)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
else
|
||||
go->SetGoState(GO_STATE_READY);
|
||||
break;
|
||||
case GO_TRIBUNAL_CONSOLE:
|
||||
uiTribunalConsole = go->GetGUID();
|
||||
break;
|
||||
case GO_TRIBUNAL_CHEST:
|
||||
case GO_TRIBUNAL_CHEST_HERO:
|
||||
uiTribunalChest = go->GetGUID();
|
||||
if (m_auiEncounter[2] == DONE)
|
||||
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
|
||||
break;
|
||||
case 191527:
|
||||
uiTribunalSkyFloor = go->GetGUID();
|
||||
break;
|
||||
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 SetData(uint32 type, uint32 data) OVERRIDE
|
||||
{
|
||||
switch (type)
|
||||
void OnGameObjectCreate(GameObject* go) OVERRIDE
|
||||
{
|
||||
case DATA_MAIDEN_OF_GRIEF_EVENT:
|
||||
m_auiEncounter[1] = data;
|
||||
if (m_auiEncounter[1] == DONE)
|
||||
HandleGameObject(uiBrannDoor, true);
|
||||
break;
|
||||
case DATA_KRYSTALLUS_EVENT:
|
||||
m_auiEncounter[0] = data;
|
||||
if (m_auiEncounter[0] == DONE)
|
||||
HandleGameObject(uiMaidenOfGriefDoor, true);
|
||||
break;
|
||||
case DATA_SJONNIR_EVENT:
|
||||
m_auiEncounter[3] = data;
|
||||
break;
|
||||
case DATA_BRANN_EVENT:
|
||||
m_auiEncounter[2] = data;
|
||||
if (m_auiEncounter[2] == DONE)
|
||||
{
|
||||
HandleGameObject(uiSjonnirDoor, true);
|
||||
GameObject* go = instance->GetGameObject(uiTribunalChest);
|
||||
if (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_BRANN_EVENT) == DONE)
|
||||
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND);
|
||||
break;
|
||||
case GO_TRIBUNAL_SKY_FLOOR:
|
||||
TribunalSkyFloorGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_MAIDEN_DOOR:
|
||||
case GO_BRANN_DOOR:
|
||||
case GO_SJONNIR_DOOR:
|
||||
AddDoor(go, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectRemove(GameObject* go) OVERRIDE
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_MAIDEN_DOOR:
|
||||
case GO_BRANN_DOOR:
|
||||
case GO_SJONNIR_DOOR:
|
||||
AddDoor(go, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 GetData64(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 0;
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 type, EncounterState state) OVERRIDE
|
||||
{
|
||||
if (!InstanceScript::SetBossState(type, state))
|
||||
return false;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DATA_BRANN_EVENT:
|
||||
if (state == DONE)
|
||||
{
|
||||
if (GameObject* go = instance->GetGameObject(TribunalChestGUID))
|
||||
go->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_INTERACT_COND);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const OVERRIDE
|
||||
{
|
||||
if (player && player->GetSession()->HasPermission(RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
|
||||
return true;
|
||||
|
||||
switch (bossId)
|
||||
{
|
||||
case DATA_MAIDEN_OF_GRIEF:
|
||||
if (GetBossState(DATA_KRYSTALLUS) != DONE)
|
||||
return false;
|
||||
break;
|
||||
case DATA_SJONNIR:
|
||||
if (GetBossState(DATA_BRANN_EVENT) != DONE)
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string GetSaveData() OVERRIDE
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "H S " << GetBossSaveData();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(char const* str) OVERRIDE
|
||||
{
|
||||
if (!str)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(str);
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
|
||||
std::istringstream loadStream(str);
|
||||
loadStream >> dataHead1 >> dataHead2;
|
||||
|
||||
if (dataHead1 == 'H' && dataHead2 == 'S')
|
||||
{
|
||||
for (uint32 i = 0; i < EncounterCount; ++i)
|
||||
{
|
||||
uint32 tmpState;
|
||||
loadStream >> tmpState;
|
||||
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
|
||||
tmpState = NOT_STARTED;
|
||||
SetBossState(i, EncounterState(tmpState));
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
protected:
|
||||
uint64 KrystallusGUID;
|
||||
uint64 MaidenOfGriefGUID;
|
||||
uint64 SjonnirGUID;
|
||||
|
||||
uint32 GetData(uint32 type) const OVERRIDE
|
||||
uint64 KaddrakGUID;
|
||||
uint64 AbedneumGUID;
|
||||
uint64 MarnakGUID;
|
||||
uint64 BrannGUID;
|
||||
|
||||
uint64 TribunalConsoleGUID;
|
||||
uint64 TribunalChestGUID;
|
||||
uint64 TribunalSkyFloorGUID;
|
||||
uint64 KaddrakGoGUID;
|
||||
uint64 AbedneumGoGUID;
|
||||
uint64 MarnakGoGUID;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_KRYSTALLUS_EVENT: return m_auiEncounter[0];
|
||||
case DATA_MAIDEN_OF_GRIEF_EVENT: return m_auiEncounter[1];
|
||||
case DATA_SJONNIR_EVENT: return m_auiEncounter[2];
|
||||
case DATA_BRANN_EVENT: return m_auiEncounter[3];
|
||||
}
|
||||
|
||||
return 0;
|
||||
return new instance_halls_of_stone_InstanceMapScript(map);
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 identifier) const OVERRIDE
|
||||
{
|
||||
switch (identifier)
|
||||
{
|
||||
case DATA_MAIDEN_OF_GRIEF: return uiMaidenOfGrief;
|
||||
case DATA_KRYSTALLUS: return uiKrystallus;
|
||||
case DATA_SJONNIR: return uiSjonnir;
|
||||
case DATA_KADDRAK: return uiKaddrak;
|
||||
case DATA_MARNAK: return uiMarnak;
|
||||
case DATA_ABEDNEUM: return uiAbedneum;
|
||||
case DATA_GO_TRIBUNAL_CONSOLE: return uiTribunalConsole;
|
||||
case DATA_GO_KADDRAK: return uiKaddrakGo;
|
||||
case DATA_GO_ABEDNEUM: return uiAbedneumGo;
|
||||
case DATA_GO_MARNAK: return uiMarnakGo;
|
||||
case DATA_GO_SKY_FLOOR: return uiTribunalSkyFloor;
|
||||
case DATA_SJONNIR_DOOR: return uiSjonnirDoor;
|
||||
case DATA_MAIDEN_DOOR: return uiMaidenOfGriefDoor;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string GetSaveData() OVERRIDE
|
||||
{
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "H S " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
|
||||
|
||||
str_data = saveStream.str();
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return str_data;
|
||||
}
|
||||
|
||||
void Load(const char* in) OVERRIDE
|
||||
{
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
uint16 data0, data1, data2, data3;
|
||||
|
||||
std::istringstream loadStream(in);
|
||||
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
|
||||
|
||||
if (dataHead1 == 'H' && dataHead2 == 'S')
|
||||
{
|
||||
m_auiEncounter[0] = data0;
|
||||
m_auiEncounter[1] = data1;
|
||||
m_auiEncounter[2] = data2;
|
||||
m_auiEncounter[3] = data3;
|
||||
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
m_auiEncounter[i] = NOT_STARTED;
|
||||
|
||||
} else OUT_LOAD_INST_DATA_FAIL;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
void AddSC_instance_halls_of_stone()
|
||||
|
||||
Reference in New Issue
Block a user