Scripts/Stratholme: Cleaned up instance script a bit

This commit is contained in:
Shauren
2011-01-31 14:04:51 +01:00
parent 6bbff14083
commit 08f251bdb0
2 changed files with 379 additions and 363 deletions
@@ -68,11 +68,11 @@ public:
for (uint8 i = 0; i < 30; ++i)
{
if (Creature* mob = me->SummonCreature(C_MINDLESS_UNDEAD,3969.35f+irand(-10,10),-3391.87f+irand(-10,10),119.11f,5.91f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000))
mob->AI()->AttackStart(me->SelectNearestTarget(500));
mob->AI()->AttackStart(me->SelectNearestTarget(100.0f));
}
if (pInstance)
pInstance->SetData(TYPE_RAMSTEIN,DONE);
pInstance->SetData(TYPE_RAMSTEIN, DONE);
}
void UpdateAI(const uint32 diff)
@@ -49,411 +49,427 @@ EndScriptData */
#define MAX_ENCOUNTER 6
enum InstanceEvents
{
EVENT_BARON_RUN = 1,
EVENT_SLAUGHTER_SQUARE = 2,
};
class instance_stratholme : public InstanceMapScript
{
public:
instance_stratholme() : InstanceMapScript("instance_stratholme", 329) { }
public:
instance_stratholme() : InstanceMapScript("instance_stratholme", 329) { }
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
{
return new instance_stratholme_InstanceMapScript(pMap);
}
struct instance_stratholme_InstanceMapScript : public InstanceScript
{
instance_stratholme_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {}
uint32 Encounter[MAX_ENCOUNTER];
bool IsSilverHandDead[5];
uint32 BaronRun_Timer;
uint32 SlaugtherSquare_Timer;
uint64 serviceEntranceGUID;
uint64 gauntletGate1GUID;
uint64 ziggurat1GUID;
uint64 ziggurat2GUID;
uint64 ziggurat3GUID;
uint64 ziggurat4GUID;
uint64 ziggurat5GUID;
uint64 portGauntletGUID;
uint64 portSlaugtherGUID;
uint64 portElderGUID;
uint64 baronGUID;
uint64 ysidaTriggerGUID;
std::set<uint64> crystalsGUID;
std::set<uint64> abomnationGUID;
void Initialize()
struct instance_stratholme_InstanceMapScript : public InstanceScript
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
Encounter[i] = NOT_STARTED;
for (uint8 i = 0; i < 5; ++i)
IsSilverHandDead[i] = false;
BaronRun_Timer = 0;
SlaugtherSquare_Timer = 0;
serviceEntranceGUID = 0;
gauntletGate1GUID = 0;
ziggurat1GUID = 0;
ziggurat2GUID = 0;
ziggurat3GUID = 0;
ziggurat4GUID = 0;
ziggurat5GUID = 0;
portGauntletGUID = 0;
portSlaugtherGUID = 0;
portElderGUID = 0;
baronGUID = 0;
ysidaTriggerGUID = 0;
crystalsGUID.clear();
abomnationGUID.clear();
}
bool StartSlaugtherSquare()
{
//change to DONE when crystals implemented
if (Encounter[1] == IN_PROGRESS && Encounter[2] == IN_PROGRESS && Encounter[3] == IN_PROGRESS)
instance_stratholme_InstanceMapScript(Map* map) : InstanceScript(map)
{
HandleGameObject(portGauntletGUID, true);
HandleGameObject(portSlaugtherGUID, true);
return true;
}
sLog->outDebug("TSCR: Instance Stratholme: Cannot open slaugther square yet.");
return false;
}
uint32 EncounterState[MAX_ENCOUNTER];
//if withRestoreTime true, then newState will be ignored and GO should be restored to original state after 10 seconds
void UpdateGoState(uint64 goGuid, uint32 newState, bool withRestoreTime)
{
if (!goGuid)
return;
bool IsSilverHandDead[5];
if (GameObject* go = instance->GetGameObject(goGuid))
uint64 serviceEntranceGUID;
uint64 gauntletGate1GUID;
uint64 ziggurat1GUID;
uint64 ziggurat2GUID;
uint64 ziggurat3GUID;
uint64 ziggurat4GUID;
uint64 ziggurat5GUID;
uint64 portGauntletGUID;
uint64 portSlaugtherGUID;
uint64 portElderGUID;
uint64 baronGUID;
uint64 ysidaTriggerGUID;
std::set<uint64> crystalsGUID;
std::set<uint64> abomnationGUID;
EventMap events;
void Initialize()
{
if (withRestoreTime)
go->UseDoorOrButton(10);
else
go->SetGoState((GOState)newState);
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
EncounterState[i] = NOT_STARTED;
for (uint8 i = 0; i < 5; ++i)
IsSilverHandDead[i] = false;
serviceEntranceGUID = 0;
gauntletGate1GUID = 0;
ziggurat1GUID = 0;
ziggurat2GUID = 0;
ziggurat3GUID = 0;
ziggurat4GUID = 0;
ziggurat5GUID = 0;
portGauntletGUID = 0;
portSlaugtherGUID = 0;
portElderGUID = 0;
baronGUID = 0;
ysidaTriggerGUID = 0;
crystalsGUID.clear();
abomnationGUID.clear();
}
}
void OnCreatureCreate(Creature* creature)
{
switch(creature->GetEntry())
bool StartSlaugtherSquare()
{
case C_BARON: baronGUID = creature->GetGUID(); break;
case C_YSIDA_TRIGGER: ysidaTriggerGUID = creature->GetGUID(); break;
case C_CRYSTAL: crystalsGUID.insert(creature->GetGUID()); break;
case C_ABOM_BILE:
case C_ABOM_VENOM: abomnationGUID.insert(creature->GetGUID()); break;
}
}
void OnGameObjectCreate(GameObject* go)
{
switch(go->GetEntry())
{
case GO_SERVICE_ENTRANCE:
serviceEntranceGUID = go->GetGUID();
break;
case GO_GAUNTLET_GATE1:
//weird, but unless flag is set, client will not respond as expected. DB bug?
go->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_LOCKED);
gauntletGate1GUID = go->GetGUID();
break;
case GO_ZIGGURAT1:
ziggurat1GUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT2:
ziggurat2GUID = go->GetGUID();
if (GetData(TYPE_NERUB) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT3:
ziggurat3GUID = go->GetGUID();
if (GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT4:
ziggurat4GUID = go->GetGUID();
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT5:
ziggurat5GUID = go->GetGUID();
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
HandleGameObject(0, true, go);
break;
case GO_PORT_GAUNTLET:
portGauntletGUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_PORT_SLAUGTHER:
portSlaugtherGUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_PORT_ELDERS:
portElderGUID = go->GetGUID();
break;
}
}
void SetData(uint32 type, uint32 data)
{
switch(type)
{
case TYPE_BARON_RUN:
switch(data)
//change to DONE when crystals implemented
if (EncounterState[1] == IN_PROGRESS && EncounterState[2] == IN_PROGRESS && EncounterState[3] == IN_PROGRESS)
{
case IN_PROGRESS:
if (Encounter[0] == IN_PROGRESS || Encounter[0] == FAIL)
break;
Encounter[0] = data;
BaronRun_Timer = 2700000;
sLog->outDebug("TSCR: Instance Stratholme: Baron run in progress.");
break;
case FAIL:
//may add code to remove aura from players, but in theory the time should be up already and removed.
Encounter[0] = data;
break;
case DONE:
Encounter[0] = data;
if (Creature* pYsidaT = instance->GetCreature(ysidaTriggerGUID))
pYsidaT->SummonCreature(C_YSIDA,
pYsidaT->GetPositionX(),pYsidaT->GetPositionY(),pYsidaT->GetPositionZ(),pYsidaT->GetOrientation(),
TEMPSUMMON_TIMED_DESPAWN,1800000);
BaronRun_Timer = 0;
break;
}
break;
case TYPE_BARONESS:
Encounter[1] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat1GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_NERUB:
Encounter[2] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat2GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_PALLID:
Encounter[3] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat3GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_RAMSTEIN:
if (data == IN_PROGRESS)
{
HandleGameObject(portGauntletGUID, false);
uint32 count = abomnationGUID.size();
for (std::set<uint64>::const_iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i)
{
if (Creature* pAbom = instance->GetCreature(*i))
{
if (!pAbom->isAlive())
--count;
}
}
if (!count)
{
//a bit itchy, it should close the door after 10 secs, but it doesn't. skipping it for now.
//UpdateGoState(ziggurat4GUID,0,true);
if (Creature* pBaron = instance->GetCreature(baronGUID))
pBaron->SummonCreature(C_RAMSTEIN,4032.84f,-3390.24f,119.73f,4.71f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
sLog->outDebug("TSCR: Instance Stratholme: Ramstein spawned.");
}
else
sLog->outDebug("TSCR: Instance Stratholme: %u Abomnation left to kill.",count);
}
if (data == NOT_STARTED)
HandleGameObject(portGauntletGUID, true);
if (data == DONE)
{
SlaugtherSquare_Timer = 300000;
sLog->outDebug("TSCR: Instance Stratholme: Slaugther event will continue in 5 minutes.");
HandleGameObject(portSlaugtherGUID, true);
return true;
}
Encounter[4] = data;
break;
case TYPE_BARON:
if (data == IN_PROGRESS)
sLog->outDebug("TSCR: Instance Stratholme: Cannot open slaugther square yet.");
return false;
}
//if withRestoreTime true, then newState will be ignored and GO should be restored to original state after 10 seconds
void UpdateGoState(uint64 goGuid, uint32 newState, bool withRestoreTime)
{
if (!goGuid)
return;
if (GameObject* go = instance->GetGameObject(goGuid))
{
HandleGameObject(ziggurat4GUID, false);
HandleGameObject(ziggurat5GUID, false);
if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
{
Map::PlayerList const& players = instance->GetPlayers();
if (withRestoreTime)
go->UseDoorOrButton(10);
else
go->SetGoState((GOState)newState);
}
}
if (!players.isEmpty())
void OnCreatureCreate(Creature* creature)
{
switch (creature->GetEntry())
{
case C_BARON:
baronGUID = creature->GetGUID();
break;
case C_YSIDA_TRIGGER:
ysidaTriggerGUID = creature->GetGUID();
break;
case C_CRYSTAL:
crystalsGUID.insert(creature->GetGUID());
break;
case C_ABOM_BILE:
case C_ABOM_VENOM:
abomnationGUID.insert(creature->GetGUID());
break;
}
}
void OnCreatureRemove(Creature* creature)
{
switch (creature->GetEntry())
{
case C_CRYSTAL:
crystalsGUID.erase(creature->GetGUID());
break;
case C_ABOM_BILE:
case C_ABOM_VENOM:
abomnationGUID.erase(creature->GetGUID());
break;
}
}
void OnGameObjectCreate(GameObject* go)
{
switch (go->GetEntry())
{
case GO_SERVICE_ENTRANCE:
serviceEntranceGUID = go->GetGUID();
break;
case GO_GAUNTLET_GATE1:
//weird, but unless flag is set, client will not respond as expected. DB bug?
go->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_LOCKED);
gauntletGate1GUID = go->GetGUID();
break;
case GO_ZIGGURAT1:
ziggurat1GUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT2:
ziggurat2GUID = go->GetGUID();
if (GetData(TYPE_NERUB) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT3:
ziggurat3GUID = go->GetGUID();
if (GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT4:
ziggurat4GUID = go->GetGUID();
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
HandleGameObject(0, true, go);
break;
case GO_ZIGGURAT5:
ziggurat5GUID = go->GetGUID();
if (GetData(TYPE_BARON) == DONE || GetData(TYPE_RAMSTEIN) == DONE)
HandleGameObject(0, true, go);
break;
case GO_PORT_GAUNTLET:
portGauntletGUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_PORT_SLAUGTHER:
portSlaugtherGUID = go->GetGUID();
if (GetData(TYPE_BARONESS) == IN_PROGRESS && GetData(TYPE_NERUB) == IN_PROGRESS && GetData(TYPE_PALLID) == IN_PROGRESS)
HandleGameObject(0, true, go);
break;
case GO_PORT_ELDERS:
portElderGUID = go->GetGUID();
break;
}
}
void SetData(uint32 type, uint32 data)
{
switch (type)
{
case TYPE_BARON_RUN:
switch (data)
{
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{
if (Player* pPlayer = itr->getSource())
case IN_PROGRESS:
if (EncounterState[0] == IN_PROGRESS || EncounterState[0] == FAIL)
break;
EncounterState[0] = data;
events.ScheduleEvent(EVENT_BARON_RUN, 2700000);
sLog->outDebug("TSCR: Instance Stratholme: Baron run in progress.");
break;
case FAIL:
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
EncounterState[0] = data;
break;
case DONE:
EncounterState[0] = data;
if (Creature* ysidaTrigger = instance->GetCreature(ysidaTriggerGUID))
{
if (pPlayer->HasAura(SPELL_BARON_ULTIMATUM))
pPlayer->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM);
if (pPlayer->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE)
pPlayer->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA);
Position ysidaPos;
ysidaTrigger->GetPosition(&ysidaPos);
ysidaTrigger->SummonCreature(C_YSIDA, ysidaPos, TEMPSUMMON_TIMED_DESPAWN, 1800000);
}
events.CancelEvent(EVENT_BARON_RUN);
break;
}
break;
case TYPE_BARONESS:
EncounterState[1] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat1GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_NERUB:
EncounterState[2] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat2GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_PALLID:
EncounterState[3] = data;
if (data == IN_PROGRESS)
HandleGameObject(ziggurat3GUID, true);
if (data == IN_PROGRESS) //change to DONE when crystals implemented
StartSlaugtherSquare();
break;
case TYPE_RAMSTEIN:
if (data == IN_PROGRESS)
{
HandleGameObject(portGauntletGUID, false);
uint32 count = abomnationGUID.size();
for (std::set<uint64>::const_iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i)
{
if (Creature* pAbom = instance->GetCreature(*i))
if (!pAbom->isAlive())
--count;
}
if (!count)
{
//a bit itchy, it should close the door after 10 secs, but it doesn't. skipping it for now.
//UpdateGoState(ziggurat4GUID,0,true);
if (Creature* pBaron = instance->GetCreature(baronGUID))
pBaron->SummonCreature(C_RAMSTEIN, 4032.84f, -3390.24f, 119.73f, 4.71f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 1800000);
sLog->outDebug("TSCR: Instance Stratholme: Ramstein spawned.");
}
else
sLog->outDebug("TSCR: Instance Stratholme: %u Abomnation left to kill.",count);
}
if (data == NOT_STARTED)
HandleGameObject(portGauntletGUID, true);
if (data == DONE)
{
events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 60000);
sLog->outDebug("TSCR: Instance Stratholme: Slaugther event will continue in 1 minute.");
}
EncounterState[4] = data;
break;
case TYPE_BARON:
if (data == IN_PROGRESS)
{
HandleGameObject(ziggurat4GUID, false);
HandleGameObject(ziggurat5GUID, false);
if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
{
DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM);
Map::PlayerList const& players = instance->GetPlayers();
if (!players.isEmpty())
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->getSource())
if (player->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA);
SetData(TYPE_BARON_RUN,DONE);
}
}
if (data == DONE || data == NOT_STARTED)
{
HandleGameObject(ziggurat4GUID, true);
HandleGameObject(ziggurat5GUID, true);
}
if (data == DONE)
HandleGameObject(portGauntletGUID, true);
EncounterState[5] = data;
break;
case TYPE_SH_AELMAR:
IsSilverHandDead[0] = (data) ? true : false;
break;
case TYPE_SH_CATHELA:
IsSilverHandDead[1] = (data) ? true : false;
break;
case TYPE_SH_GREGOR:
IsSilverHandDead[2] = (data) ? true : false;
break;
case TYPE_SH_NEMAS:
IsSilverHandDead[3] = (data) ? true : false;
break;
case TYPE_SH_VICAR:
IsSilverHandDead[4] = (data) ? true : false;
break;
}
SetData(TYPE_BARON_RUN,DONE);
}
}
if (data == DONE || data == NOT_STARTED)
{
HandleGameObject(ziggurat4GUID, true);
HandleGameObject(ziggurat5GUID, true);
}
if (data == DONE)
HandleGameObject(portGauntletGUID, true);
Encounter[5] = data;
break;
case TYPE_SH_AELMAR:
IsSilverHandDead[0] = (data) ? true : false;
break;
case TYPE_SH_CATHELA:
IsSilverHandDead[1] = (data) ? true : false;
break;
case TYPE_SH_GREGOR:
IsSilverHandDead[2] = (data) ? true : false;
break;
case TYPE_SH_NEMAS:
IsSilverHandDead[3] = (data) ? true : false;
break;
case TYPE_SH_VICAR:
IsSilverHandDead[4] = (data) ? true : false;
break;
SaveToDB();
}
if (data == DONE)SaveToDB();
}
std::string GetSaveData()
{
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " "
<< Encounter[3] << " " << Encounter[4] << " " << Encounter[5];
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
}
void Load(const char* in)
{
if (!in)
std::string GetSaveData()
{
OUT_LOAD_INST_DATA_FAIL;
return;
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << EncounterState[0] << " " << EncounterState[1] << " " << EncounterState[2] << " "
<< EncounterState[3] << " " << EncounterState[4] << " " << EncounterState[5];
OUT_SAVE_INST_DATA_COMPLETE;
return saveStream.str();
}
OUT_LOAD_INST_DATA(in);
void Load(const char* in)
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
std::istringstream loadStream(in);
loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3]
>> Encounter[4] >> Encounter[5];
OUT_LOAD_INST_DATA(in);
// Do not reset 1, 2 and 3. they are not set to done, yet .
if (Encounter[0] == IN_PROGRESS)
Encounter[0] = NOT_STARTED;
if (Encounter[4] == IN_PROGRESS)
Encounter[4] = NOT_STARTED;
if (Encounter[5] == IN_PROGRESS)
Encounter[5] = NOT_STARTED;
std::istringstream loadStream(in);
loadStream >> EncounterState[0] >> EncounterState[1] >> EncounterState[2] >> EncounterState[3]
>> EncounterState[4] >> EncounterState[5];
OUT_LOAD_INST_DATA_COMPLETE;
}
// Do not reset 1, 2 and 3. they are not set to done, yet .
if (EncounterState[0] == IN_PROGRESS)
EncounterState[0] = NOT_STARTED;
if (EncounterState[4] == IN_PROGRESS)
EncounterState[4] = NOT_STARTED;
if (EncounterState[5] == IN_PROGRESS)
EncounterState[5] = NOT_STARTED;
uint32 GetData(uint32 type)
{
switch(type)
{
case TYPE_SH_QUEST:
if (IsSilverHandDead[0] && IsSilverHandDead[1] && IsSilverHandDead[2] && IsSilverHandDead[3] && IsSilverHandDead[4])
return 1;
OUT_LOAD_INST_DATA_COMPLETE;
}
uint32 GetData(uint32 type)
{
switch (type)
{
case TYPE_SH_QUEST:
if (IsSilverHandDead[0] && IsSilverHandDead[1] && IsSilverHandDead[2] && IsSilverHandDead[3] && IsSilverHandDead[4])
return 1;
return 0;
case TYPE_BARON_RUN:
return EncounterState[0];
case TYPE_BARONESS:
return EncounterState[1];
case TYPE_NERUB:
return EncounterState[2];
case TYPE_PALLID:
return EncounterState[3];
case TYPE_RAMSTEIN:
return EncounterState[4];
case TYPE_BARON:
return EncounterState[5];
}
return 0;
case TYPE_BARON_RUN:
return Encounter[0];
case TYPE_BARONESS:
return Encounter[1];
case TYPE_NERUB:
return Encounter[2];
case TYPE_PALLID:
return Encounter[3];
case TYPE_RAMSTEIN:
return Encounter[4];
case TYPE_BARON:
return Encounter[5];
}
return 0;
}
uint64 GetData64(uint32 data)
{
switch(data)
{
case DATA_BARON:
return baronGUID;
case DATA_YSIDA_TRIGGER:
return ysidaTriggerGUID;
}
return 0;
}
void Update(uint32 diff)
{
if (BaronRun_Timer)
{
if (BaronRun_Timer <= diff)
{
if (GetData(TYPE_BARON_RUN) != DONE)
SetData(TYPE_BARON_RUN, FAIL);
BaronRun_Timer = 0;
sLog->outDebug("TSCR: Instance Stratholme: Baron run event reached end. Event has state %u.",GetData(TYPE_BARON_RUN));
} else BaronRun_Timer -= diff;
}
if (SlaugtherSquare_Timer)
uint64 GetData64(uint32 data)
{
if (SlaugtherSquare_Timer <= diff)
switch (data)
{
if (Creature* pBaron = instance->GetCreature(baronGUID))
case DATA_BARON:
return baronGUID;
case DATA_YSIDA_TRIGGER:
return ysidaTriggerGUID;
}
return 0;
}
void Update(uint32 diff)
{
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
for (uint8 i = 0; i < 4; ++i)
pBaron->SummonCreature(C_BLACK_GUARD,4032.84f,-3390.24f,119.73f,4.71f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);
case EVENT_BARON_RUN:
if (GetData(TYPE_BARON_RUN) != DONE)
SetData(TYPE_BARON_RUN, FAIL);
sLog->outDebug("TSCR: Instance Stratholme: Baron run event reached end. Event has state %u.", GetData(TYPE_BARON_RUN));
break;
case EVENT_SLAUGHTER_SQUARE:
if (Creature* baron = instance->GetCreature(baronGUID))
{
for (uint8 i = 0; i < 4; ++i)
baron->SummonCreature(C_BLACK_GUARD, 4032.84f, -3390.24f, 119.73f, 4.71f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 1800000);
HandleGameObject(ziggurat4GUID, true);
HandleGameObject(ziggurat5GUID, true);
sLog->outDebug("TSCR: Instance Stratholme: Black guard sentries spawned. Opening gates to baron.");
HandleGameObject(ziggurat4GUID, true);
HandleGameObject(ziggurat5GUID, true);
sLog->outDebug("TSCR: Instance Stratholme: Black guard sentries spawned. Opening gates to baron.");
}
break;
default:
break;
}
SlaugtherSquare_Timer = 0;
} else SlaugtherSquare_Timer -= diff;
}
}
}
};
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
{
return new instance_stratholme_InstanceMapScript(map);
}
};