aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms
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/EasternKingdoms
parent9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff)
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp76
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp1
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp68
-rw-r--r--src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp78
-rw-r--r--src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp75
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp29
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;
};