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/Kalimdor | |
| parent | 9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff) | |
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/Kalimdor')
5 files changed, 43 insertions, 106 deletions
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index fab847ec648..6e368abee84 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -30,7 +30,6 @@ EndScriptData */ #include "InstanceScript.h" #include "Log.h" #include "Map.h" -#include <sstream> /* Battle of Mount Hyjal encounters: 0 - Rage Winterchill event @@ -157,12 +156,10 @@ public: case DATA_ALLIANCE_RETREAT: allianceRetreat = data; HandleGameObject(HordeGate, true); - SaveToDB(); break; case DATA_HORDE_RETREAT: hordeRetreat = data; HandleGameObject(ElfGate, true); - SaveToDB(); break; case DATA_RAIDDAMAGE: RaidDamage += data; @@ -206,16 +203,6 @@ public: return true; } - void ReadSaveDataMore(std::istringstream& loadStream) override - { - loadStream >> allianceRetreat >> hordeRetreat >> RaidDamage; - } - - void WriteSaveDataMore(std::ostringstream& saveStream) override - { - saveStream << allianceRetreat << ' ' << hordeRetreat << ' ' << RaidDamage; - } - uint32 GetData(uint32 type) const override { switch (type) @@ -228,6 +215,14 @@ public: return 0; } + void AfterDataLoad() override + { + if (GetBossState(DATA_ANETHERON) == DONE) + allianceRetreat = 1; + if (GetBossState(DATA_AZGALOR) == DONE) + hordeRetreat = 1; + } + protected: GuidList m_uiAncientGemGUID; ObjectGuid HordeGate; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 7b504ed8375..167082fd16e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -265,7 +265,11 @@ class instance_culling_of_stratholme : public InstanceMapScript struct instance_culling_of_stratholme_InstanceMapScript : public InstanceScript { - instance_culling_of_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map), _currentState(JUST_STARTED), _infiniteGuardianTimeout(0), _waveCount(0), _currentSpawnLoc(0) + instance_culling_of_stratholme_InstanceMapScript(InstanceMap* map) : InstanceScript(map), + _currentState(*this, "currentState", JUST_STARTED), + _infiniteGuardianTimeout(*this, "infiniteGuardianTimeout", 0), + _waveCount(0), + _currentSpawnLoc(0) { SetHeaders(DataHeader); SetBossNumber(EncounterCount); @@ -275,30 +279,16 @@ class instance_culling_of_stratholme : public InstanceMapScript _plagueCrates.reserve(NUM_PLAGUE_CRATES); } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << _currentState << ' ' << _infiniteGuardianTimeout; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - // read current instance progress from save data, then regress to the previous stable state - uint32 state = JUST_STARTED; - time_t infiniteGuardianTime = 0; - data >> state; - data >> infiniteGuardianTime; // UNIX timestamp - - COSProgressStates loadState = GetStableStateFor(COSProgressStates(state)); + COSProgressStates loadState = GetStableStateFor(_currentState); SetInstanceProgress(loadState, true); - if (infiniteGuardianTime) - { - _infiniteGuardianTimeout = infiniteGuardianTime; + if (_infiniteGuardianTimeout) events.ScheduleEvent(EVENT_GUARDIAN_TICK, 0s); - } - time_t timediff = (infiniteGuardianTime - GameTime::GetGameTime()); - if (!infiniteGuardianTime) + time_t timediff = (_infiniteGuardianTimeout - GameTime::GetGameTime()); + if (!_infiniteGuardianTimeout) timediff = -1; TC_LOG_DEBUG("scripts.cos", "instance_culling_of_stratholme::ReadSaveDataMore: Loaded with state %u and guardian timeout at %zu minutes %zu seconds from now", (uint32)loadState, timediff / MINUTE, timediff % MINUTE); @@ -752,8 +742,6 @@ class instance_culling_of_stratholme : public InstanceMapScript SpawnInfiniteCorruptor(); events.RescheduleEvent(EVENT_RESPAWN_ARTHAS, 1s); } - - SaveToDB(); } private: @@ -791,9 +779,9 @@ class instance_culling_of_stratholme : public InstanceMapScript } EventMap events; - COSProgressStates _currentState; + PersistentInstanceScriptValue<COSProgressStates> _currentState; std::unordered_map<uint32, uint32> _currentWorldStates; - time_t _infiniteGuardianTimeout; + PersistentInstanceScriptValue<time_t> _infiniteGuardianTimeout; // Generic ObjectGuid _chromieGUID; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index cef1bc9ad92..9f5c2510f26 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -167,7 +167,7 @@ public: return ObjectGuid::Empty; } - void ReadSaveDataMore(std::istringstream&) override + void AfterDataLoad() override { if (GetBossState(DATA_LIEUTENANT_DRAKE) == DONE) mBarrelCount = 5; diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp index dddd6ec7ef7..484d29d0487 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp @@ -22,7 +22,6 @@ #include "halls_of_origination.h" #include "InstanceScript.h" #include "Map.h" -#include <sstream> DoorData const doorData[] = { @@ -201,16 +200,10 @@ class instance_halls_of_origination : public InstanceMapScript } } - void WriteSaveDataMore(std::ostringstream& data) override + void AfterDataLoad() override { - data << _deadElementals; - } - - void ReadSaveDataMore(std::istringstream& data) override - { - uint32 deadElementals; - data >> deadElementals; - IncreaseDeadElementals(deadElementals); + if (GetBossState(BOSS_ANRAPHET) == DONE) + IncreaseDeadElementals(4); } protected: diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index d7730710aa2..f0606e6bca5 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -28,7 +28,6 @@ EndScriptData */ #include "Log.h" #include "Map.h" #include "wailing_caverns.h" -#include <sstream> #define MAX_ENCOUNTER 9 @@ -47,13 +46,11 @@ public: instance_wailing_caverns_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(MAX_ENCOUNTER); yelled = false; } - uint32 m_auiEncounter[MAX_ENCOUNTER]; - bool yelled; ObjectGuid NaralexGUID; @@ -67,33 +64,32 @@ public: { switch (type) { - case TYPE_LORD_COBRAHN: m_auiEncounter[0] = data;break; - case TYPE_LORD_PYTHAS: m_auiEncounter[1] = data;break; - case TYPE_LADY_ANACONDRA: m_auiEncounter[2] = data;break; - case TYPE_LORD_SERPENTIS: m_auiEncounter[3] = data;break; - case TYPE_NARALEX_EVENT: m_auiEncounter[4] = data;break; - case TYPE_NARALEX_PART1: m_auiEncounter[5] = data;break; - case TYPE_NARALEX_PART2: m_auiEncounter[6] = data;break; - case TYPE_NARALEX_PART3: m_auiEncounter[7] = data;break; - case TYPE_MUTANUS_THE_DEVOURER: m_auiEncounter[8] = data;break; + case TYPE_LORD_COBRAHN: SetBossState(0, EncounterState(data));break; + case TYPE_LORD_PYTHAS: SetBossState(1, EncounterState(data));break; + case TYPE_LADY_ANACONDRA: SetBossState(2, EncounterState(data));break; + case TYPE_LORD_SERPENTIS: SetBossState(3, EncounterState(data));break; + case TYPE_NARALEX_EVENT: SetBossState(4, EncounterState(data));break; + case TYPE_NARALEX_PART1: SetBossState(5, EncounterState(data));break; + case TYPE_NARALEX_PART2: SetBossState(6, EncounterState(data));break; + case TYPE_NARALEX_PART3: SetBossState(7, EncounterState(data));break; + case TYPE_MUTANUS_THE_DEVOURER: SetBossState(8, EncounterState(data));break; case TYPE_NARALEX_YELLED: yelled = true; break; } - if (data == DONE)SaveToDB(); } uint32 GetData(uint32 type) const override { switch (type) { - case TYPE_LORD_COBRAHN: return m_auiEncounter[0]; - case TYPE_LORD_PYTHAS: return m_auiEncounter[1]; - case TYPE_LADY_ANACONDRA: return m_auiEncounter[2]; - case TYPE_LORD_SERPENTIS: return m_auiEncounter[3]; - case TYPE_NARALEX_EVENT: return m_auiEncounter[4]; - case TYPE_NARALEX_PART1: return m_auiEncounter[5]; - case TYPE_NARALEX_PART2: return m_auiEncounter[6]; - case TYPE_NARALEX_PART3: return m_auiEncounter[7]; - case TYPE_MUTANUS_THE_DEVOURER: return m_auiEncounter[8]; + case TYPE_LORD_COBRAHN: return GetBossState(0); + case TYPE_LORD_PYTHAS: return GetBossState(1); + case TYPE_LADY_ANACONDRA: return GetBossState(2); + case TYPE_LORD_SERPENTIS: return GetBossState(3); + case TYPE_NARALEX_EVENT: return GetBossState(4); + case TYPE_NARALEX_PART1: return GetBossState(5); + case TYPE_NARALEX_PART2: return GetBossState(6); + case TYPE_NARALEX_PART3: return GetBossState(7); + case TYPE_MUTANUS_THE_DEVOURER: return GetBossState(8); case TYPE_NARALEX_YELLED: return yelled; } return 0; @@ -104,41 +100,6 @@ public: if (data == DATA_NARALEX)return NaralexGUID; return ObjectGuid::Empty; } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' - << m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' ' << m_auiEncounter[5] << ' ' - << m_auiEncounter[6] << ' ' << m_auiEncounter[7] << ' ' << m_auiEncounter[8]; - - 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 >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] - >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7] >> m_auiEncounter[8]; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] != DONE) - m_auiEncounter[i] = NOT_STARTED; - - OUT_LOAD_INST_DATA_COMPLETE; - } - }; }; |
