*Updated Shadow Labyrinth script

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2009-01-18 17:14:54 +01:00
parent d289e3e3b9
commit bed8e3b87a
@@ -41,16 +41,19 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
instance_shadow_labyrinth(Map *map) : ScriptedInstance(map) {Initialize();}; instance_shadow_labyrinth(Map *map) : ScriptedInstance(map) {Initialize();};
uint32 Encounter[ENCOUNTERS]; uint32 Encounter[ENCOUNTERS];
std::string str_data;
uint64 RefectoryDoorGUID;
uint64 ScreamingHallDoorGUID;
GameObject *RefectoryDoor;
GameObject *ScreamingHallDoor;
uint64 GrandmasterVorpil; uint64 GrandmasterVorpil;
uint32 FelOverseerCount; uint32 FelOverseerCount;
void Initialize() void Initialize()
{ {
RefectoryDoor = NULL; RefectoryDoorGUID = 0;
ScreamingHallDoor = NULL; ScreamingHallDoorGUID = 0;
GrandmasterVorpil = 0; GrandmasterVorpil = 0;
FelOverseerCount = 0; FelOverseerCount = 0;
@@ -70,12 +73,8 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
{ {
switch(go->GetEntry()) switch(go->GetEntry())
{ {
case REFECTORY_DOOR: case REFECTORY_DOOR: RefectoryDoorGUID = go->GetGUID(); break;
RefectoryDoor = go; case SCREAMING_HALL_DOOR: ScreamingHallDoorGUID = go->GetGUID(); break;
break;
case SCREAMING_HALL_DOOR:
ScreamingHallDoor = go;
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) void SetData(uint32 type, uint32 data)
{ {
switch(type) switch(type)
@@ -119,8 +149,7 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
case DATA_BLACKHEARTTHEINCITEREVENT: case DATA_BLACKHEARTTHEINCITEREVENT:
if( data == DONE ) if( data == DONE )
{ {
if( RefectoryDoor ) HandleGameObject(RefectoryDoorGUID,0);
RefectoryDoor->UseDoorOrButton();
} }
Encounter[2] = data; Encounter[2] = data;
break; break;
@@ -128,8 +157,7 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
case DATA_GRANDMASTERVORPILEVENT: case DATA_GRANDMASTERVORPILEVENT:
if( data == DONE ) if( data == DONE )
{ {
if( ScreamingHallDoor ) HandleGameObject(ScreamingHallDoorGUID,0);
ScreamingHallDoor->UseDoorOrButton();
} }
Encounter[3] = data; Encounter[3] = data;
break; break;
@@ -138,6 +166,23 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
Encounter[4] = data; Encounter[4] = data;
break; 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) uint32 GetData(uint32 type)
@@ -161,6 +206,31 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
return 0; 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) InstanceData* GetInstanceData_instance_shadow_labyrinth(Map* map)