*Updated Shadow Labyrinth script
--HG-- branch : trunk
This commit is contained in:
+84
-14
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user