aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp98
1 files changed, 84 insertions, 14 deletions
diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
index f27fe6d0226..de45a54e043 100644
--- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
+++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp
@@ -41,16 +41,19 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
instance_shadow_labyrinth(Map *map) : ScriptedInstance(map) {Initialize();};
uint32 Encounter[ENCOUNTERS];
+ std::string str_data;
+
+ uint64 RefectoryDoorGUID;
+ uint64 ScreamingHallDoorGUID;
- GameObject *RefectoryDoor;
- GameObject *ScreamingHallDoor;
uint64 GrandmasterVorpil;
uint32 FelOverseerCount;
void Initialize()
{
- RefectoryDoor = NULL;
- ScreamingHallDoor = NULL;
+ RefectoryDoorGUID = 0;
+ ScreamingHallDoorGUID = 0;
+
GrandmasterVorpil = 0;
FelOverseerCount = 0;
@@ -70,12 +73,8 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
{
switch(go->GetEntry())
{
- case REFECTORY_DOOR:
- RefectoryDoor = go;
- break;
- case SCREAMING_HALL_DOOR:
- ScreamingHallDoor = go;
- break;
+ case REFECTORY_DOOR: RefectoryDoorGUID = go->GetGUID(); break;
+ case SCREAMING_HALL_DOOR: ScreamingHallDoorGUID = go->GetGUID(); break;
}
}
@@ -93,6 +92,37 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
}
}
+ Player* GetPlayerInMap()
+ {
+ Map::PlayerList const& players = instance->GetPlayers();
+
+ if (!players.isEmpty())
+ {
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ {
+ if (Player* plr = itr->getSource())
+ return plr;
+ }
+ }
+
+ debug_log("SD2: Instance Shadow Labyrinth: GetPlayerInMap, but PlayerList is empty!");
+ return NULL;
+ }
+
+ void HandleGameObject(uint64 guid, uint32 state)
+ {
+ Player *player = GetPlayerInMap();
+
+ if (!player || !guid)
+ {
+ debug_log("SD2: Shadow Labyrinth: HandleGameObject fail");
+ return;
+ }
+
+ if (GameObject *go = GameObject::GetGameObject(*player,guid))
+ go->SetGoState(state);
+ }
+
void SetData(uint32 type, uint32 data)
{
switch(type)
@@ -119,8 +149,7 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
case DATA_BLACKHEARTTHEINCITEREVENT:
if( data == DONE )
{
- if( RefectoryDoor )
- RefectoryDoor->UseDoorOrButton();
+ HandleGameObject(RefectoryDoorGUID,0);
}
Encounter[2] = data;
break;
@@ -128,8 +157,7 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
case DATA_GRANDMASTERVORPILEVENT:
if( data == DONE )
{
- if( ScreamingHallDoor )
- ScreamingHallDoor->UseDoorOrButton();
+ HandleGameObject(ScreamingHallDoorGUID,0);
}
Encounter[3] = data;
break;
@@ -138,6 +166,23 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
Encounter[4] = data;
break;
}
+
+ if (data == DONE)
+ {
+ if (type == TYPE_OVERSEER && FelOverseerCount != 0)
+ return;
+
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << Encounter[0] << " " << Encounter[1] << " "
+ << Encounter[2] << " " << Encounter[3] << " " << Encounter[4];
+
+ str_data = saveStream.str();
+
+ SaveToDB();
+ OUT_SAVE_INST_DATA_COMPLETE;
+ }
}
uint32 GetData(uint32 type)
@@ -161,6 +206,31 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
return 0;
}
+
+ const char* Save()
+ {
+ return str_data.c_str();
+ }
+
+ void Load(const char* in)
+ {
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+
+ OUT_LOAD_INST_DATA(in);
+
+ std::istringstream loadStream(in);
+ loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3] >> Encounter[4];
+
+ for(uint8 i = 0; i < ENCOUNTERS; ++i)
+ if (Encounter[i] == IN_PROGRESS)
+ Encounter[i] = NOT_STARTED;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
};
InstanceData* GetInstanceData_instance_shadow_labyrinth(Map* map)