diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-01-03 21:55:45 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-10-04 00:19:38 +0200 |
| commit | 76be303351ae398b7f9e69e4c472cb5b05fce45e (patch) | |
| tree | b7139aa70f1e9492fe8b94224fee28bbbe1ec34c /src/server/scripts/EasternKingdoms | |
| parent | 9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff) | |
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
8 files changed, 64 insertions, 267 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index 8c06fa25d62..61f938dfd2c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -22,7 +22,6 @@ #include "Log.h" #include "Map.h" #include "ScriptedCreature.h" -#include <sstream> #define TIMER_TOMBOFTHESEVEN 15000 #define MAX_ENCOUNTER 6 @@ -84,7 +83,7 @@ public: instance_blackrock_depths_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&encounter, 0, sizeof(encounter)); + SetBossNumber(MAX_ENCOUNTER); BarAleCount = 0; GhostKillCount = 0; @@ -92,9 +91,6 @@ public: TombEventCounter = 0; } - uint32 encounter[MAX_ENCOUNTER]; - std::string str_data; - ObjectGuid EmperorGUID; ObjectGuid PhalanxGUID; ObjectGuid MagmusGUID; @@ -210,44 +206,30 @@ public: switch (type) { case TYPE_RING_OF_LAW: - encounter[0] = data; + SetBossState(0, EncounterState(data)); break; case TYPE_VAULT: - encounter[1] = data; + SetBossState(1, EncounterState(data)); break; case TYPE_BAR: if (data == SPECIAL) ++BarAleCount; else - encounter[2] = data; + SetBossState(2, EncounterState(data)); break; case TYPE_TOMB_OF_SEVEN: - encounter[3] = data; + SetBossState(3, EncounterState(data)); break; case TYPE_LYCEUM: - encounter[4] = data; + SetBossState(4, EncounterState(data)); break; case TYPE_IRON_HALL: - encounter[5] = data; + SetBossState(5, EncounterState(data)); break; case DATA_GHOSTKILL: GhostKillCount += data; break; } - - if (data == DONE || GhostKillCount >= TOMB_OF_SEVEN_BOSS_NUM) - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << encounter[0] << ' ' << encounter[1] << ' ' << encounter[2] << ' ' - << encounter[3] << ' ' << encounter[4] << ' ' << encounter[5] << ' ' << GhostKillCount; - - str_data = saveStream.str(); - - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; - } } uint32 GetData(uint32 type) const override @@ -255,20 +237,20 @@ public: switch (type) { case TYPE_RING_OF_LAW: - return encounter[0]; + return GetBossState(0); case TYPE_VAULT: - return encounter[1]; + return GetBossState(1); case TYPE_BAR: - if (encounter[2] == IN_PROGRESS && BarAleCount == 3) + if (GetBossState(2) == IN_PROGRESS && BarAleCount == 3) return SPECIAL; else - return encounter[2]; + return GetBossState(2); case TYPE_TOMB_OF_SEVEN: - return encounter[3]; + return GetBossState(3); case TYPE_LYCEUM: - return encounter[4]; + return GetBossState(4); case TYPE_IRON_HALL: - return encounter[5]; + return GetBossState(5); case DATA_GHOSTKILL: return GhostKillCount; } @@ -319,36 +301,6 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override - { - return str_data; - } - - void Load(char const* in) override - { - 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] >> encounter[5] >> GhostKillCount; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (encounter[i] == IN_PROGRESS) - encounter[i] = NOT_STARTED; - if (GhostKillCount > 0 && GhostKillCount < TOMB_OF_SEVEN_BOSS_NUM) - GhostKillCount = 0;//reset tomb of seven event - if (GhostKillCount >= TOMB_OF_SEVEN_BOSS_NUM) - GhostKillCount = TOMB_OF_SEVEN_BOSS_NUM; - - OUT_LOAD_INST_DATA_COMPLETE; - } - void TombOfSevenEvent() { if (GhostKillCount < TOMB_OF_SEVEN_BOSS_NUM && !TombBossGUIDs[TombEventCounter].IsEmpty()) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp index c5492c7ef91..187cc0f6d58 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp @@ -172,7 +172,7 @@ class instance_molten_core : public InstanceMapScript return true; } - void ReadSaveDataMore(std::istringstream& /*data*/) override + void AfterDataLoad() override { if (CheckMajordomoExecutus()) _executusSchedule = true; diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index 41a9bdae0aa..6edbfaf0a7c 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -21,7 +21,6 @@ #include "gnomeregan.h" #include "InstanceScript.h" #include "Map.h" -#include <sstream> class instance_gnomeregan : public InstanceMapScript { diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index cbaff8dfd3e..a7d88433b88 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -161,7 +161,7 @@ class instance_scholomance : public InstanceMapScript instance->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc); } - void ReadSaveDataMore(std::istringstream& /*data*/) override + void AfterDataLoad() override { CheckToSpawnGandling(); } diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index c299759aa16..162c4911671 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -30,7 +30,6 @@ EndScriptData */ #include "Map.h" #include "ScriptedCreature.h" #include "TemporarySummon.h" -#include <sstream> #define MAX_ENCOUNTER 4 @@ -84,15 +83,12 @@ public: instance_shadowfang_keep_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(MAX_ENCOUNTER); uiPhase = 0; uiTimer = 0; } - uint32 m_auiEncounter[MAX_ENCOUNTER]; - std::string str_data; - ObjectGuid uiAshGUID; ObjectGuid uiAdaGUID; ObjectGuid uiArchmageArugalGUID; @@ -120,17 +116,17 @@ public: { case GO_COURTYARD_DOOR: DoorCourtyardGUID = go->GetGUID(); - if (m_auiEncounter[0] == DONE) + if (GetBossState(0) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_SORCERER_DOOR: DoorSorcererGUID = go->GetGUID(); - if (m_auiEncounter[2] == DONE) + if (GetBossState(2) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_ARUGAL_DOOR: DoorArugalGUID = go->GetGUID(); - if (m_auiEncounter[3] == DONE) + if (GetBossState(3) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; } @@ -155,12 +151,12 @@ public: case TYPE_FREE_NPC: if (data == DONE) DoUseDoorOrButton(DoorCourtyardGUID); - m_auiEncounter[0] = data; + SetBossState(0, EncounterState(data)); break; case TYPE_RETHILGORE: if (data == DONE) DoSpeech(); - m_auiEncounter[1] = data; + SetBossState(1, EncounterState(data)); break; case TYPE_FENRUS: switch (data) @@ -173,27 +169,14 @@ public: DoUseDoorOrButton(DoorSorcererGUID); break; } - m_auiEncounter[2] = data; + SetBossState(2, EncounterState(data)); break; case TYPE_NANDOS: if (data == DONE) DoUseDoorOrButton(DoorArugalGUID); - m_auiEncounter[3] = data; + SetBossState(3, EncounterState(data)); break; } - - if (data == DONE) - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3]; - - str_data = saveStream.str(); - - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; - } } uint32 GetData(uint32 type) const override @@ -201,44 +184,17 @@ public: switch (type) { case TYPE_FREE_NPC: - return m_auiEncounter[0]; + return GetBossState(0); case TYPE_RETHILGORE: - return m_auiEncounter[1]; + return GetBossState(1); case TYPE_FENRUS: - return m_auiEncounter[2]; + return GetBossState(2); case TYPE_NANDOS: - return m_auiEncounter[3]; + return GetBossState(3); } return 0; } - std::string GetSaveData() override - { - return str_data; - } - - void Load(char const* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - std::istringstream loadStream(in); - loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - - OUT_LOAD_INST_DATA_COMPLETE; - } - void Update(uint32 uiDiff) override { if (GetData(TYPE_FENRUS) != DONE) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index c2c2022f73b..7cf6697426e 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -34,7 +34,6 @@ EndScriptData */ #include "MotionMaster.h" #include "Player.h" #include "stratholme.h" -#include <sstream> enum InstanceEvents { @@ -60,9 +59,7 @@ class instance_stratholme : public InstanceMapScript instance_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { SetHeaders(DataHeader); - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - EncounterState[i] = NOT_STARTED; + SetBossNumber(MAX_ENCOUNTER); for (uint8 i = 0; i < 5; ++i) IsSilverHandDead[i] = false; @@ -71,7 +68,6 @@ class instance_stratholme : public InstanceMapScript scarletsKilled = 0; } - uint32 EncounterState[MAX_ENCOUNTER]; uint8 scarletsKilled; bool IsSilverHandDead[5]; @@ -126,7 +122,7 @@ class instance_stratholme : public InstanceMapScript bool StartSlaugtherSquare() { //change to DONE when crystals implemented - if (EncounterState[1] == IN_PROGRESS && EncounterState[2] == IN_PROGRESS && EncounterState[3] == IN_PROGRESS) + if (GetBossState(1) == IN_PROGRESS && GetBossState(2) == IN_PROGRESS && GetBossState(3) == IN_PROGRESS) { HandleGameObject(portGauntletGUID, true); HandleGameObject(portSlaugtherGUID, true); @@ -254,9 +250,9 @@ class instance_stratholme : public InstanceMapScript switch (data) { case IN_PROGRESS: - if (EncounterState[0] == IN_PROGRESS || EncounterState[0] == FAIL) + if (GetBossState(0) == IN_PROGRESS || GetBossState(0) == FAIL) break; - EncounterState[0] = data; + SetBossState(0, EncounterState(data)); events.ScheduleEvent(EVENT_BARON_RUN, 45min); TC_LOG_DEBUG("scripts", "Instance Stratholme: Baron run in progress."); break; @@ -264,10 +260,10 @@ class instance_stratholme : public InstanceMapScript DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM); if (Creature* ysida = instance->GetCreature(ysidaGUID)) ysida->CastSpell(ysida, SPELL_PERM_FEIGN_DEATH, true); - EncounterState[0] = data; + SetBossState(0, EncounterState(data)); break; case DONE: - EncounterState[0] = data; + SetBossState(0, EncounterState(data)); if (Creature* ysida = instance->GetCreature(ysidaGUID)) { @@ -303,7 +299,7 @@ class instance_stratholme : public InstanceMapScript } break; case TYPE_BARONESS: - EncounterState[1] = data; + SetBossState(1, EncounterState(data)); if (data == IN_PROGRESS) { HandleGameObject(ziggurat1GUID, true); @@ -312,7 +308,7 @@ class instance_stratholme : public InstanceMapScript } break; case TYPE_NERUB: - EncounterState[2] = data; + SetBossState(2, EncounterState(data)); if (data == IN_PROGRESS) { HandleGameObject(ziggurat2GUID, true); @@ -321,7 +317,7 @@ class instance_stratholme : public InstanceMapScript } break; case TYPE_PALLID: - EncounterState[3] = data; + SetBossState(3, EncounterState(data)); if (data == IN_PROGRESS) { HandleGameObject(ziggurat3GUID, true); @@ -362,7 +358,7 @@ class instance_stratholme : public InstanceMapScript events.ScheduleEvent(EVENT_SLAUGHTER_SQUARE, 1min); TC_LOG_DEBUG("scripts", "Instance Stratholme: Slaugther event will continue in 1 minute."); } - EncounterState[4] = data; + SetBossState(4, EncounterState(data)); break; case TYPE_BARON: if (data == IN_PROGRESS) @@ -383,7 +379,7 @@ class instance_stratholme : public InstanceMapScript SetData(TYPE_BARON_RUN, DONE); } - EncounterState[5] = data; + SetBossState(5, EncounterState(data)); break; case TYPE_SH_AELMAR: IsSilverHandDead[0] = (data) ? true : false; @@ -401,46 +397,6 @@ class instance_stratholme : public InstanceMapScript IsSilverHandDead[4] = (data) ? true : false; break; } - - if (data == DONE) - SaveToDB(); - } - - std::string GetSaveData() override - { - 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(); - } - - void Load(char const* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - std::istringstream loadStream(in); - loadStream >> EncounterState[0] >> EncounterState[1] >> EncounterState[2] >> EncounterState[3] - >> EncounterState[4] >> EncounterState[5]; - - // 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; - - OUT_LOAD_INST_DATA_COMPLETE; } uint32 GetData(uint32 type) const override @@ -452,17 +408,17 @@ class instance_stratholme : public InstanceMapScript return 1; return 0; case TYPE_BARON_RUN: - return EncounterState[0]; + return GetBossState(0); case TYPE_BARONESS: - return EncounterState[1]; + return GetBossState(1); case TYPE_NERUB: - return EncounterState[2]; + return GetBossState(2); case TYPE_PALLID: - return EncounterState[3]; + return GetBossState(3); case TYPE_RAMSTEIN: - return EncounterState[4]; + return GetBossState(4); case TYPE_BARON: - return EncounterState[5]; + return GetBossState(5); } return 0; } diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index 4582ed6d45d..b3365ace584 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -32,7 +32,6 @@ EndScriptData */ #include "MotionMaster.h" #include "ObjectAccessor.h" #include "uldaman.h" -#include <sstream> enum Spells { @@ -64,21 +63,12 @@ class instance_uldaman : public InstanceMapScript instance_uldaman_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(MAX_ENCOUNTER); ironayaSealDoorTimer = 27000; //animation time keystoneCheck = false; } - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - - return false; - } - ObjectGuid archaedasGUID; ObjectGuid ironayaGUID; ObjectGuid whoWokeuiArchaedasGUID; @@ -99,9 +89,6 @@ class instance_uldaman : public InstanceMapScript GuidVector earthenGuardians; GuidVector archaedasWallMinions; // minions lined up around the wall - uint32 m_auiEncounter[MAX_ENCOUNTER]; - std::string str_data; - void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) @@ -109,14 +96,14 @@ class instance_uldaman : public InstanceMapScript case GO_ALTAR_OF_THE_KEEPER_TEMPLE_DOOR: // lock the door altarOfTheKeeperTempleDoor = go->GetGUID(); - if (m_auiEncounter[0] == DONE) + if (GetBossState(0) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_ARCHAEDAS_TEMPLE_DOOR: archaedasTempleDoor = go->GetGUID(); - if (m_auiEncounter[0] == DONE) + if (GetBossState(0) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; @@ -125,21 +112,21 @@ class instance_uldaman : public InstanceMapScript go->ReplaceAllFlags(GO_FLAG_IN_USE | GO_FLAG_NODESPAWN); ancientVaultDoor = go->GetGUID(); - if (m_auiEncounter[1] == DONE) + if (GetBossState(1) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_IRONAYA_SEAL_DOOR: ironayaSealDoor = go->GetGUID(); - if (m_auiEncounter[2] == DONE) + if (GetBossState(2) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_KEYSTONE: keystoneGUID = go->GetGUID(); - if (m_auiEncounter[2] == DONE) + if (GetBossState(2) == DONE) { HandleGameObject(ObjectGuid::Empty, true, go); go->SetFlag(GO_FLAG_INTERACT_COND); @@ -345,13 +332,13 @@ class instance_uldaman : public InstanceMapScript switch (type) { case DATA_ALTAR_DOORS: - m_auiEncounter[0] = data; + SetBossState(0, EncounterState(data)); if (data == DONE) SetDoor(altarOfTheKeeperTempleDoor, true); break; case DATA_ANCIENT_DOOR: - m_auiEncounter[1] = data; + SetBossState(1, EncounterState(data)); if (data == DONE) //archeadas defeat { SetDoor(archaedasTempleDoor, true); //re open enter door @@ -360,7 +347,7 @@ class instance_uldaman : public InstanceMapScript break; case DATA_IRONAYA_DOOR: - m_auiEncounter[2] = data; + SetBossState(2, EncounterState(data)); break; case DATA_STONE_KEEPERS: @@ -371,7 +358,7 @@ class instance_uldaman : public InstanceMapScript switch (data) { case NOT_STARTED: - if (m_auiEncounter[0] == DONE) //if players opened the doors + if (GetBossState(0) == DONE) //if players opened the doors SetDoor(archaedasTempleDoor, true); RespawnMinions(); @@ -391,19 +378,6 @@ class instance_uldaman : public InstanceMapScript keystoneCheck = true; break; } - - if (data == DONE) - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2]; - - str_data = saveStream.str(); - - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; - } } void SetGuidData(uint32 type, ObjectGuid data) override @@ -416,33 +390,6 @@ class instance_uldaman : public InstanceMapScript } } - std::string GetSaveData() override - { - return str_data; - } - - void Load(char const* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - std::istringstream loadStream(in); - loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2]; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - - OUT_LOAD_INST_DATA_COMPLETE; - } - void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) @@ -467,7 +414,7 @@ class instance_uldaman : public InstanceMapScript case 7228: // Ironaya ironayaGUID = creature->GetGUID(); - if (m_auiEncounter[2] != DONE) + if (GetBossState(2) != DONE) SetFrozenState (creature); break; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index 3ce83c5867e..4af4457d367 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -22,7 +22,6 @@ #include "Map.h" #include "ScriptedCreature.h" #include "zulaman.h" -#include <sstream> class instance_zulaman : public InstanceMapScript { @@ -31,7 +30,8 @@ class instance_zulaman : public InstanceMapScript struct instance_zulaman_InstanceScript : public InstanceScript { - instance_zulaman_InstanceScript(InstanceMap* map) : InstanceScript(map) + instance_zulaman_InstanceScript(InstanceMap* map) : InstanceScript(map), + ZulAmanState(*this, "TimedRunState", NOT_STARTED) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); @@ -146,7 +146,6 @@ class instance_zulaman : public InstanceMapScript events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 1min); SpeedRunTimer = 15; ZulAmanState = data; - SaveToDB(); } break; } @@ -240,7 +239,6 @@ class instance_zulaman : public InstanceMapScript switch (eventId) { case EVENT_UPDATE_ZULAMAN_TIMER: - SaveToDB(); DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, --SpeedRunTimer); if (SpeedRunTimer) events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 1min); @@ -257,24 +255,13 @@ class instance_zulaman : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << ZulAmanState << ' ' - << SpeedRunTimer << ' ' - << ZulAmanBossCount; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - data >> ZulAmanState; - data >> SpeedRunTimer; - data >> ZulAmanBossCount; - - if (ZulAmanState == IN_PROGRESS && SpeedRunTimer && SpeedRunTimer <= 15) + // Speed run cannot be resumed after reset/crash + if (ZulAmanState != NOT_STARTED) { - events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 1min); - DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer); + SpeedRunTimer = 0; + ZulAmanState.LoadValue(FAIL); } } @@ -291,7 +278,7 @@ class instance_zulaman : public InstanceMapScript ObjectGuid StrangeGongGUID; ObjectGuid MasiveGateGUID; uint32 SpeedRunTimer; - uint32 ZulAmanState; + PersistentInstanceScriptValue<uint32> ZulAmanState; uint32 ZulAmanBossCount; }; |
