diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp | 98 |
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) |