aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Kalimdor
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-01-03 21:55:45 +0100
committerShauren <shauren.trinity@gmail.com>2022-10-04 00:19:38 +0200
commit76be303351ae398b7f9e69e4c472cb5b05fce45e (patch)
treeb7139aa70f1e9492fe8b94224fee28bbbe1ec34c /src/server/scripts/Kalimdor
parent9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff)
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/Kalimdor')
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp21
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp36
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp2
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/instance_halls_of_origination.cpp13
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp77
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;
- }
-
};
};