aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-01-31 14:04:51 +0100
committerShauren <shauren.trinity@gmail.com>2011-01-31 14:04:51 +0100
commit08f251bdb088821483699fdc0c9e45c1d50f86b4 (patch)
treea5d090b769853de50adb9978368e23dd4492d9af /src
parent6bbff14083bbac4abd131e33df2ab23cf79b9e3d (diff)
Scripts/Stratholme: Cleaned up instance script a bit
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp704
2 files changed, 362 insertions, 346 deletions
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
index d894e45a447..66b67a22614 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp
@@ -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)
diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
index 37dadcdde48..f1ccedb08a3 100644
--- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
+++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp
@@ -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) { }
-
- 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()
- {
- 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();
- }
+ public:
+ instance_stratholme() : InstanceMapScript("instance_stratholme", 329) { }
- bool StartSlaugtherSquare()
+ struct instance_stratholme_InstanceMapScript : public InstanceScript
{
- //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];
+
+ uint64 serviceEntranceGUID;
+ uint64 gauntletGate1GUID;
+ uint64 ziggurat1GUID;
+ uint64 ziggurat2GUID;
+ uint64 ziggurat3GUID;
+ uint64 ziggurat4GUID;
+ uint64 ziggurat5GUID;
+ uint64 portGauntletGUID;
+ uint64 portSlaugtherGUID;
+ uint64 portElderGUID;
- if (GameObject* go = instance->GetGameObject(goGuid))
+ 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;
+ //change to DONE when crystals implemented
+ if (EncounterState[1] == IN_PROGRESS && EncounterState[2] == IN_PROGRESS && EncounterState[3] == IN_PROGRESS)
+ {
+ HandleGameObject(portGauntletGUID, true);
+ HandleGameObject(portSlaugtherGUID, true);
+ return true;
+ }
+
+ sLog->outDebug("TSCR: Instance Stratholme: Cannot open slaugther square yet.");
+ return false;
}
- }
- void OnGameObjectCreate(GameObject* go)
- {
- switch(go->GetEntry())
+ //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)
{
- 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;
+ if (!goGuid)
+ return;
+
+ if (GameObject* go = instance->GetGameObject(goGuid))
+ {
+ if (withRestoreTime)
+ go->UseDoorOrButton(10);
+ else
+ go->SetGoState((GOState)newState);
+ }
}
- }
- void SetData(uint32 type, uint32 data)
- {
- switch(type)
+ void OnCreatureCreate(Creature* creature)
{
- case TYPE_BARON_RUN:
- switch(data)
+ switch (creature->GetEntry())
{
- case IN_PROGRESS:
- if (Encounter[0] == IN_PROGRESS || Encounter[0] == FAIL)
+ 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;
- 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);
+ 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;
}
+ }
- if (data == NOT_STARTED)
- HandleGameObject(portGauntletGUID, true);
-
- if (data == DONE)
+ void OnGameObjectCreate(GameObject* go)
+ {
+ switch (go->GetEntry())
{
- SlaugtherSquare_Timer = 300000;
- sLog->outDebug("TSCR: Instance Stratholme: Slaugther event will continue in 5 minutes.");
+ 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;
}
- Encounter[4] = data;
- break;
- case TYPE_BARON:
- if (data == IN_PROGRESS)
- {
- HandleGameObject(ziggurat4GUID, false);
- HandleGameObject(ziggurat5GUID, false);
- if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)
- {
- Map::PlayerList const& players = instance->GetPlayers();
+ }
- if (!players.isEmpty())
+ 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);
}
- SetData(TYPE_BARON_RUN,DONE);
- }
- }
- if (data == DONE || data == NOT_STARTED)
- {
- HandleGameObject(ziggurat4GUID, true);
- HandleGameObject(ziggurat5GUID, true);
+ 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;
}
+
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];
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ std::ostringstream saveStream;
+ saveStream << EncounterState[0] << " " << EncounterState[1] << " " << EncounterState[2] << " "
+ << EncounterState[3] << " " << EncounterState[4] << " " << EncounterState[5];
- void Load(const char* in)
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ 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;
- 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;
- }
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
- uint64 GetData64(uint32 data)
- {
- switch(data)
+ uint32 GetData(uint32 type)
{
- case DATA_BARON:
- return baronGUID;
- case DATA_YSIDA_TRIGGER:
- return ysidaTriggerGUID;
+ 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;
}
- return 0;
- }
- void Update(uint32 diff)
- {
- if (BaronRun_Timer)
+ uint64 GetData64(uint32 data)
{
- if (BaronRun_Timer <= diff)
+ switch (data)
{
- 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;
+ case DATA_BARON:
+ return baronGUID;
+ case DATA_YSIDA_TRIGGER:
+ return ysidaTriggerGUID;
+ }
+ return 0;
}
- if (SlaugtherSquare_Timer)
+ void Update(uint32 diff)
{
- if (SlaugtherSquare_Timer <= diff)
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (Creature* pBaron = instance->GetCreature(baronGUID))
+ 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);
+ }
};