Scripts/HallsOfStone: reworked InstanceScript

This commit is contained in:
joschiwald
2013-09-02 16:31:35 +02:00
parent 79f446364c
commit 579f969d6a
6 changed files with 344 additions and 334 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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