diff options
| author | Shauren <shauren.trinity@gmail.com> | 2011-01-31 14:04:51 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2011-01-31 14:04:51 +0100 |
| commit | 08f251bdb088821483699fdc0c9e45c1d50f86b4 (patch) | |
| tree | a5d090b769853de50adb9978368e23dd4492d9af /src | |
| parent | 6bbff14083bbac4abd131e33df2ab23cf79b9e3d (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.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp | 704 |
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); + } }; |
