aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
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
parent9b924522d0549dd67b10e2cbdfc20297dd21e182 (diff)
Core/Scripts: Save instance data in JSON format
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_instance.cpp30
-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
-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
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp15
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp28
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp136
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp34
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp29
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp59
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h7
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp181
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp25
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp25
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp113
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h6
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp17
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp23
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp13
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp49
33 files changed, 196 insertions, 1094 deletions
diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp
index 63d43b525bf..210f23ebae4 100644
--- a/src/server/scripts/Commands/cs_instance.cpp
+++ b/src/server/scripts/Commands/cs_instance.cpp
@@ -164,23 +164,23 @@ public:
static bool HandleInstanceSaveDataCommand(ChatHandler* handler)
{
- Player* player = handler->GetSession()->GetPlayer();
- InstanceMap* map = player->GetMap()->ToInstanceMap();
- if (!map)
- {
- handler->PSendSysMessage(LANG_NOT_DUNGEON);
- handler->SetSentErrorMessage(true);
- return false;
- }
+ //Player* player = handler->GetSession()->GetPlayer();
+ //InstanceMap* map = player->GetMap()->ToInstanceMap();
+ //if (!map)
+ //{
+ // handler->PSendSysMessage(LANG_NOT_DUNGEON);
+ // handler->SetSentErrorMessage(true);
+ // return false;
+ //}
- if (!map->GetInstanceScript())
- {
- handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
- handler->SetSentErrorMessage(true);
- return false;
- }
+ //if (!map->GetInstanceScript())
+ //{
+ // handler->PSendSysMessage(LANG_NO_INSTANCE_DATA);
+ // handler->SetSentErrorMessage(true);
+ // return false;
+ //}
- map->GetInstanceScript()->SaveToDB();
+ //map->GetInstanceScript()->SaveToDB();
return true;
}
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;
};
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;
- }
-
};
};
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
index 3eb08a405e0..fce945a8e11 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp
@@ -21,7 +21,6 @@
#include "InstanceScript.h"
#include "Map.h"
#include "ScriptMgr.h"
-#include <sstream>
DoorData const doorData[] =
{
@@ -128,15 +127,13 @@ class instance_ahnkahet : public InstanceMapScript
return 0;
}
- void WriteSaveDataMore(std::ostringstream& data) override
+ void AfterDataLoad() override
{
- data << SpheresState[0] << ' ' << SpheresState[1];
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- data >> SpheresState[0];
- data >> SpheresState[1];
+ if (GetBossState(DATA_PRINCE_TALDARAM) == DONE)
+ {
+ SpheresState[0] = IN_PROGRESS;
+ SpheresState[1] = IN_PROGRESS;
+ }
}
protected:
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
index a970518ff33..4735f87452b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp
@@ -30,7 +30,6 @@ EndScriptData */
#include "MotionMaster.h"
#include "Player.h"
#include "trial_of_the_champion.h"
-#include <sstream>
constexpr uint32 ToCEncounterCount = 4;
@@ -46,12 +45,11 @@ public:
struct instance_trial_of_the_champion_InstanceMapScript : public InstanceScript
{
- instance_trial_of_the_champion_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
+ instance_trial_of_the_champion_InstanceMapScript(InstanceMap* map) : InstanceScript(map),
+ uiMovementDone(*this, "uiMovementDone"), uiGrandChampionsDeaths(*this, "uiGrandChampionsDeaths")
{
SetHeaders(DataHeader);
SetBossNumber(ToCEncounterCount);
- uiMovementDone = 0;
- uiGrandChampionsDeaths = 0;
uiArgentSoldierDeaths = 0;
teamInInstance = 0;
@@ -59,8 +57,8 @@ public:
}
uint32 teamInInstance;
- uint16 uiMovementDone;
- uint16 uiGrandChampionsDeaths;
+ PersistentInstanceScriptValue<uint16> uiMovementDone;
+ PersistentInstanceScriptValue<uint16> uiGrandChampionsDeaths;
uint8 uiArgentSoldierDeaths;
ObjectGuid uiAnnouncerGUID;
@@ -165,7 +163,7 @@ public:
}
else if (state == DONE)
{
- ++uiGrandChampionsDeaths;
+ uiGrandChampionsDeaths = uiGrandChampionsDeaths + 1;
if (uiGrandChampionsDeaths == 3)
{
if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
@@ -227,10 +225,10 @@ public:
}
}
break;
+ case BOSS_BLACK_KNIGHT:
+ SetBossState(BOSS_BLACK_KNIGHT, EncounterState(uiData));
+ break;
}
-
- if (uiData == DONE)
- SaveToDB();
}
uint32 GetData(uint32 uiData) const override
@@ -274,16 +272,6 @@ public:
break;
}
}
-
- void WriteSaveDataMore(std::ostringstream& stream) override
- {
- stream << uiGrandChampionsDeaths << ' ' << uiMovementDone;
- }
-
- void ReadSaveDataMore(std::istringstream& stream) override
- {
- stream >> uiGrandChampionsDeaths >> uiMovementDone;
- }
};
};
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
index 2da7435e328..b4542a73582 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h
@@ -21,7 +21,7 @@
#include "CreatureAIImpl.h"
#define ToCScriptName "instance_trial_of_the_champion"
-#define DataHeader "TC"
+#define DataHeader "TCv0.1"
enum TCData
{
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
index 4a6f285d4ae..00551025db4 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp
@@ -25,7 +25,6 @@
#include "ScriptedCreature.h"
#include "TemporarySummon.h"
#include "trial_of_the_crusader.h"
-#include <sstream>
// ToDo: Remove magic numbers of events
@@ -107,7 +106,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
LoadBossBoundaries(boundaries);
LoadObjectData(creatureData, gameObjectData);
LoadDoorData(doorData);
- TrialCounter = 50;
EventStage = 0;
NorthrendBeasts = NOT_STARTED;
NorthrendBeastsCount = 4;
@@ -118,7 +116,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
SnoboldCount = 0;
MistressOfPainCount = 0;
PlayerDeathCount = 0;
- NeedSave = false;
CrusadersSpecialState = false;
TributeToDedicatedInsanity = false; // NYI, set to true when implement it
DoUpdateWorldState(UPDATE_STATE_UI_SHOW, instance->IsHeroic() ? 1 : 0);
@@ -140,15 +137,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
snoboldGUIDS.push_back(creature->GetGUID());
}
- // Summon prevention to heroic modes
- uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
- {
- if (!TrialCounter)
- return 0;
-
- return data->id;
- }
-
void OnGameObjectCreate(GameObject* go) override
{
InstanceScript::OnGameObjectCreate(go);
@@ -241,46 +229,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
case DONE:
{
EventStage = 6000;
- uint32 tributeChest = 0;
- if (instance->GetDifficultyID() == DIFFICULTY_10_HC)
- {
- if (TrialCounter >= 50)
- tributeChest = GO_TRIBUTE_CHEST_10H_99;
- else
- {
- if (TrialCounter >= 45)
- tributeChest = GO_TRIBUTE_CHEST_10H_50;
- else
- {
- if (TrialCounter >= 25)
- tributeChest = GO_TRIBUTE_CHEST_10H_45;
- else
- tributeChest = GO_TRIBUTE_CHEST_10H_25;
- }
- }
- }
- else if (instance->GetDifficultyID() == DIFFICULTY_25_HC)
- {
- if (TrialCounter >= 50)
- tributeChest = GO_TRIBUTE_CHEST_25H_99;
- else
- {
- if (TrialCounter >= 45)
- tributeChest = GO_TRIBUTE_CHEST_25H_50;
- else
- {
- if (TrialCounter >= 25)
- tributeChest = GO_TRIBUTE_CHEST_25H_45;
- else
- tributeChest = GO_TRIBUTE_CHEST_25H_25;
- }
- }
- }
-
- if (tributeChest)
- if (Creature* tirion = GetCreature(DATA_FORDRING))
- if (GameObject* chest = tirion->SummonGameObject(tributeChest, 805.62f, 134.87f, 142.16f, 3.27f, QuaternionData::fromEulerAnglesZYX(3.27f, 0.0f, 0.0f), 7_days))
- chest->SetRespawnTime(chest->GetRespawnDelay());
break;
}
default:
@@ -296,26 +244,9 @@ class instance_trial_of_the_crusader : public InstanceMapScript
TC_LOG_DEBUG("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state);
if (state == FAIL)
{
- if (instance->IsHeroic())
- {
- --TrialCounter;
- // decrease attempt counter at wipe
- DoUpdateWorldState(UPDATE_STATE_UI_COUNT, TrialCounter);
-
- // if theres no more attemps allowed
- if (!TrialCounter)
- {
- if (Creature* anubarak = GetCreature(DATA_ANUBARAK))
- anubarak->DespawnOrUnsummon();
- }
- }
- NeedSave = true;
EventStage = (type == DATA_NORTHREND_BEASTS ? 666 : 0);
state = NOT_STARTED;
}
-
- if (state == DONE || NeedSave)
- Save();
}
return true;
}
@@ -354,10 +285,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
{
switch (type)
{
- case TYPE_COUNTER:
- TrialCounter = data;
- data = DONE;
- break;
case TYPE_EVENT:
EventStage = data;
data = NOT_STARTED;
@@ -440,10 +367,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
{
switch (type)
{
- case DATA_TEAM:
- return Team;
- case TYPE_COUNTER:
- return TrialCounter;
case TYPE_EVENT:
return EventStage;
case TYPE_NORTHREND_BEASTS:
@@ -563,60 +486,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
}
- void Save()
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
-
- for (uint8 i = 0; i < EncounterCount; ++i)
- saveStream << GetBossState(i) << ' ';
-
- saveStream << TrialCounter << ' '
- << PlayerDeathCount << ' '
- << uint32(TributeToDedicatedInsanity ? 1 : 0);
- SaveDataBuffer = saveStream.str();
-
- SaveToDB();
- OUT_SAVE_INST_DATA_COMPLETE;
- NeedSave = false;
- }
-
- std::string GetSaveData() override
- {
- return SaveDataBuffer;
- }
-
- void Load(char const* strIn) override
- {
- if (!strIn)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
-
- OUT_LOAD_INST_DATA(strIn);
-
- std::istringstream loadStream(strIn);
-
- uint32 tmpState;
- for (uint8 i = 0; i < EncounterCount; ++i)
- {
- loadStream >> tmpState;
- if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- tmpState = NOT_STARTED;
- SetBossState(i, EncounterState(tmpState));
- }
-
- loadStream >> TrialCounter;
- loadStream >> PlayerDeathCount;
- loadStream >> tmpState;
- TributeToDedicatedInsanity = tmpState != 0;
- EventStage = 0;
-
- OUT_LOAD_INST_DATA_COMPLETE;
- }
-
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override
{
switch (criteria_id)
@@ -633,7 +502,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript
case THREE_SIXTY_PAIN_SPIKE_25_PLAYER_HEROIC:
return MistressOfPainCount >= 2;
case A_TRIBUTE_TO_DEDICATED_INSANITY:
- return false/*TrialCounter == 50 && TributeToDedicatedInsanity*/;
+ return false; // no longer obtainable
default:
break;
}
@@ -642,14 +511,11 @@ class instance_trial_of_the_crusader : public InstanceMapScript
}
protected:
- uint32 TrialCounter;
uint32 EventStage;
uint32 EventTimer;
uint32 NorthrendBeasts;
uint32 Team;
- bool NeedSave;
bool CrusadersSpecialState;
- std::string SaveDataBuffer;
GuidVector snoboldGUIDS;
// Achievement stuff
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
index ab46d266aa1..f2d5624a4bf 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp
@@ -24,7 +24,6 @@
#include "ScriptMgr.h"
#include "TemporarySummon.h"
#include "Transport.h"
-#include <sstream>
Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position
Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed)
@@ -457,8 +456,6 @@ class instance_halls_of_reflection : public InstanceMapScript
default:
break;
}
-
- SaveToDB();
}
void SetGuidData(uint32 type, ObjectGuid data) override
@@ -728,31 +725,16 @@ class instance_halls_of_reflection : public InstanceMapScript
return ObjectGuid::Empty;
}
- void WriteSaveDataMore(std::ostringstream& data) override
+ void AfterDataLoad() override
{
- data << _introState << ' ' << _frostswornGeneralState << ' ' << _quelDelarState;
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- uint32 temp = 0;
- data >> temp;
- if (temp == DONE)
- SetData(DATA_INTRO_EVENT, DONE);
- else
- SetData(DATA_INTRO_EVENT, NOT_STARTED);
-
- data >> temp;
- if (temp == DONE)
- SetData(DATA_FROSTSWORN_GENERAL, DONE);
- else
- SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
+ if (GetBossState(DATA_FALRIC) == DONE)
+ {
+ _introState = DONE;
+ _quelDelarState = DONE;
+ }
- data >> temp;
- if (temp == DONE)
- SetData(DATA_QUEL_DELAR_EVENT, DONE);
- else
- SetData(DATA_QUEL_DELAR_EVENT, NOT_STARTED);
+ if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ _frostswornGeneralState = DONE;
}
private:
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index 49eb21f8f72..62004f0396b 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -23,7 +23,6 @@
#include "gundrak.h"
#include "Map.h"
#include "ScriptMgr.h"
-#include <sstream>
DoorData const doorData[] =
{
@@ -242,25 +241,14 @@ class instance_gundrak : public InstanceMapScript
}
}
- void WriteSaveDataMore(std::ostringstream& data) override
+ void AfterDataLoad() override
{
- data << uint32(SladRanStatueState) << ' ';
- data << uint32(DrakkariColossusStatueState) << ' ';
- data << uint32(MoorabiStatueState) << ' ';
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- uint32 temp;
-
- data >> temp;
- SladRanStatueState = GOState(temp);
-
- data >> temp;
- DrakkariColossusStatueState = GOState(temp);
-
- data >> temp;
- MoorabiStatueState = GOState(temp);
+ if (GetBossState(DATA_SLAD_RAN) == DONE)
+ SladRanStatueState = GO_STATE_DESTROYED;
+ if (GetBossState(DATA_DRAKKARI_COLOSSUS) == DONE)
+ DrakkariColossusStatueState = GO_STATE_DESTROYED;
+ if (GetBossState(DATA_MOORABI) == DONE)
+ MoorabiStatueState = GO_STATE_DESTROYED;
if (IsBridgeReady())
Events.ScheduleEvent(DATA_BRIDGE, TIMER_STATUE_ACTIVATION);
@@ -314,7 +302,6 @@ class instance_gundrak : public InstanceMapScript
ToggleGameObject(type, GO_STATE_DESTROYED);
ToggleGameObject(DATA_TRAPDOOR, GO_STATE_READY);
ToggleGameObject(DATA_COLLISION, GO_STATE_ACTIVE);
- SaveToDB();
return;
default:
return;
@@ -329,8 +316,6 @@ class instance_gundrak : public InstanceMapScript
if (IsBridgeReady())
Events.ScheduleEvent(DATA_BRIDGE, TIMER_STATUE_ACTIVATION);
-
- SaveToDB();
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index 6533aea45cb..14850f3f014 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -69,7 +69,6 @@ enum Spells
SPELL_TWILIGHT_BLOODBOLT = 71446,
SPELL_INCITE_TERROR = 73070,
SPELL_BLOODBOLT_WHIRL = 71772,
- SPELL_ANNIHILATE = 71322,
SPELL_CLEAR_ALL_STATUS_AILMENTS = 70939,
// Blood Infusion
@@ -125,12 +124,10 @@ enum Points
POINT_CENTER = 1,
POINT_AIR = 2,
POINT_GROUND = 3,
- POINT_MINCHAR = 4,
};
Position const centerPos = {4595.7090f, 2769.4190f, 400.6368f, 0.000000f};
Position const airPos = {4595.7090f, 2769.4190f, 422.3893f, 0.000000f};
-Position const mincharPos = {4629.3711f, 2782.6089f, 424.6390f, 0.000000f};
bool IsVampire(Unit const* unit)
{
@@ -150,8 +147,6 @@ struct boss_blood_queen_lana_thel : public BossAI
void Initialize()
{
_offtankGUID.Clear();
- _creditBloodQuickening = false;
- _killMinchar = false;
}
void Reset() override
@@ -188,7 +183,6 @@ struct boss_blood_queen_lana_thel : public BossAI
DoCast(me, SPELL_SHROUD_OF_SORROW, true);
DoCast(me, SPELL_FRENZIED_BLOODTHIRST_VISUAL, true);
DoCastSelf(SPELL_CLEAR_ALL_STATUS_AILMENTS, true);
- _creditBloodQuickening = instance->GetData(DATA_BLOOD_QUICKENING_STATE) == IN_PROGRESS;
}
void JustDied(Unit* /*killer*/) override
@@ -200,22 +194,6 @@ struct boss_blood_queen_lana_thel : public BossAI
DoCastAOE(SPELL_BLOOD_INFUSION_CREDIT, true);
CleanAuras();
-
- // Blah, credit the quest
- if (_creditBloodQuickening)
- {
- instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE);
- if (Player* player = me->GetLootRecipient())
- player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player);
- if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
- {
- minchar->SetEmoteState(EMOTE_ONESHOT_NONE);
- minchar->SetAnimTier(AnimTier::Ground);
- minchar->SetCanFly(false);
- minchar->RemoveAllAuras();
- minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f);
- }
- }
}
void CleanAuras()
@@ -232,38 +210,15 @@ struct boss_blood_queen_lana_thel : public BossAI
instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN);
}
- void DoAction(int32 action) override
- {
- if (action != ACTION_KILL_MINCHAR)
- return;
-
- if (instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == IN_PROGRESS)
- _killMinchar = true;
- else
- {
- me->SetDisableGravity(true);
- me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
- }
- }
-
void EnterEvadeMode(EvadeReason why) override
{
if (!_EnterEvadeMode(why))
return;
CleanAuras();
- if (_killMinchar)
- {
- _killMinchar = false;
- me->SetDisableGravity(true);
- me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
- }
- else
- {
- me->AddUnitState(UNIT_STATE_EVADE);
- me->GetMotionMaster()->MoveTargetedHome();
- Reset();
- }
+ me->AddUnitState(UNIT_STATE_EVADE);
+ me->GetMotionMaster()->MoveTargetedHome();
+ Reset();
}
void JustReachedHome() override
@@ -323,12 +278,6 @@ struct boss_blood_queen_lana_thel : public BossAI
AttackStart(victim);
events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500ms, EVENT_GROUP_CANCELLABLE);
break;
- case POINT_MINCHAR:
- DoCast(me, SPELL_ANNIHILATE, true);
- // already in evade mode
- me->GetMotionMaster()->MoveTargetedHome();
- Reset();
- break;
default:
break;
}
@@ -508,8 +457,6 @@ private:
GuidSet _vampires;
GuidSet _bloodboltedPlayers;
ObjectGuid _offtankGUID;
- bool _creditBloodQuickening;
- bool _killMinchar;
};
// helper for shortened code
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 31e1d23e11f..94bc112d91a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -1501,9 +1501,6 @@ class at_sindragosa_lair : public AreaTriggerScript
if (!instance->GetData(DATA_SINDRAGOSA_FROSTWYRMS) && !instance->GetGuidData(DATA_SINDRAGOSA) && instance->GetBossState(DATA_SINDRAGOSA) != DONE)
{
- if (player->GetMap()->IsHeroic() && !instance->GetData(DATA_HEROIC_ATTEMPTS))
- return true;
-
player->GetMap()->LoadGrid(SindragosaSpawnPos.GetPositionX(), SindragosaSpawnPos.GetPositionY());
if (Creature* sindragosa = player->GetMap()->SummonCreature(NPC_SINDRAGOSA, SindragosaSpawnPos))
sindragosa->AI()->DoAction(ACTION_START_FROSTWYRM);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 276d6a7b0bf..81859e1cfe0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -1559,20 +1559,6 @@ class at_icc_shutdown_traps : public AreaTriggerScript
}
};
-class at_icc_start_blood_quickening : public AreaTriggerScript
-{
- public:
- at_icc_start_blood_quickening() : AreaTriggerScript("at_icc_start_blood_quickening") { }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
- {
- if (InstanceScript* instance = player->GetInstanceScript())
- if (instance->GetData(DATA_BLOOD_QUICKENING_STATE) == NOT_STARTED)
- instance->SetData(DATA_BLOOD_QUICKENING_STATE, IN_PROGRESS);
- return true;
- }
-};
-
class at_icc_nerubar_broodkeeper : public OnlyOnceAreaTriggerScript
{
public:
@@ -1627,6 +1613,5 @@ void AddSC_icecrown_citadel()
// AreaTriggers
new at_icc_saurfang_portal();
new at_icc_shutdown_traps();
- new at_icc_start_blood_quickening();
new at_icc_nerubar_broodkeeper();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index da491854aa8..7b8570fd82c 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -23,7 +23,7 @@
#include "SpellScript.h"
#define ICCScriptName "instance_icecrown_citadel"
-#define DataHeader "IC"
+#define DataHeader "ICCv1"
uint32 const EncounterCount = 13;
@@ -103,8 +103,6 @@ enum ICDataTypes
DATA_RIMEFANG = 25,
DATA_COLDFLAME_JETS = 26,
DATA_TEAM_IN_INSTANCE = 27,
- DATA_BLOOD_QUICKENING_STATE = 28,
- DATA_HEROIC_ATTEMPTS = 29,
DATA_CROK_SCOURGEBANE = 30,
DATA_CAPTAIN_ARNATH = 31,
DATA_CAPTAIN_BRANDON = 32,
@@ -499,9 +497,6 @@ enum ICSharedActions
ACTION_ROTFACE_DEATH = -366272,
ACTION_CHANGE_PHASE = -366780,
- // Blood-Queen Lana'thel
- ACTION_KILL_MINCHAR = -379550,
-
// Frostwing Halls gauntlet event
ACTION_VRYKUL_DEATH = 37129,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 6b71835447b..132980fae3f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -29,7 +29,6 @@
#include "TemporarySummon.h"
#include "Transport.h"
#include "TransportMgr.h"
-#include <sstream>
#include <unordered_set>
enum EventIds
@@ -46,7 +45,6 @@ enum EventIds
enum TimedEvents
{
- EVENT_UPDATE_EXECUTION_TIME = 1,
EVENT_QUAKE_SHATTER = 2,
EVENT_REBUILD_PLATFORM = 3,
EVENT_RESPAWN_GUNSHIP = 4
@@ -122,27 +120,6 @@ DungeonEncounterData const encounters[] =
{ DATA_THE_LICH_KING, {{ 1106 }} }
};
-// this doesnt have to only store questgivers, also can be used for related quest spawns
-struct WeeklyQuest
-{
- uint32 creatureEntry;
- uint32 questId[2]; // 10 and 25 man versions
-};
-
-// when changing the content, remember to update SetData, DATA_BLOOD_QUICKENING_STATE case for NPC_ALRIN_THE_AGILE index
-WeeklyQuest const WeeklyQuestData[WeeklyNPCs] =
-{
- { NPC_INFILTRATOR_MINCHAR, { QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25 } }, // Deprogramming
- { NPC_KOR_KRON_LIEUTENANT, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts
- { NPC_ROTTING_FROST_GIANT_10, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts
- { NPC_ROTTING_FROST_GIANT_25, { QUEST_SECURING_THE_RAMPARTS_10, QUEST_SECURING_THE_RAMPARTS_25 } }, // Securing the Ramparts
- { NPC_ALCHEMIST_ADRIANNA, { QUEST_RESIDUE_RENDEZVOUS_10, QUEST_RESIDUE_RENDEZVOUS_25 } }, // Residue Rendezvous
- { NPC_ALRIN_THE_AGILE, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening
- { NPC_INFILTRATOR_MINCHAR_BQ, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening
- { NPC_MINCHAR_BEAM_STALKER, { QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 } }, // Blood Quickening
- { NPC_VALITHRIA_DREAMWALKER_QUEST, { QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25 } } // Respite for a Tormented Soul
-};
-
// NPCs spawned at Light's Hammer on Lich King dead
Position const JainaSpawnPos = { -48.65278f, 2211.026f, 27.98586f, 3.124139f };
Position const MuradinSpawnPos = { -47.34549f, 2208.087f, 27.98586f, 3.106686f };
@@ -163,11 +140,6 @@ class instance_icecrown_citadel : public InstanceMapScript
LoadDungeonEncounterData(encounters);
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
- HeroicAttempts = MaxHeroicAttempts;
- ColdflameJetsState = NOT_STARTED;
- UpperSpireTeleporterActiveState = NOT_STARTED;
- BloodQuickeningState = NOT_STARTED;
- BloodQuickeningMinutes = 0;
BloodPrinceIntro = 1;
SindragosaIntro = 1;
IsBonedEligible = true;
@@ -358,22 +330,7 @@ class instance_icecrown_citadel : public InstanceMapScript
case NPC_INFILTRATOR_MINCHAR_BQ:
case NPC_MINCHAR_BEAM_STALKER:
case NPC_VALITHRIA_DREAMWALKER_QUEST:
- {
- for (uint8 questIndex = 0; questIndex < WeeklyNPCs; ++questIndex)
- {
- if (WeeklyQuestData[questIndex].creatureEntry == entry)
- {
- uint8 diffIndex = instance->Is25ManRaid() ? 1 : 0;
- if (!sQuestPoolMgr->IsQuestActive(WeeklyQuestData[questIndex].questId[diffIndex]))
- return 0;
- break;
- }
- }
-
- if (entry == NPC_KOR_KRON_LIEUTENANT && GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
- return NPC_SKYBREAKER_LIEUTENANT;
- break;
- }
+ return 0;
case NPC_HORDE_GUNSHIP_CANNON:
case NPC_ORGRIMS_HAMMER_CREW:
case NPC_SKY_REAVER_KORM_BLACKSCAR:
@@ -487,9 +444,6 @@ class instance_icecrown_citadel : public InstanceMapScript
case NPC_RIMEFANG:
case NPC_SPINESTALKER:
{
- if (instance->IsHeroic() && !HeroicAttempts)
- return;
-
if (GetBossState(DATA_SINDRAGOSA) == DONE)
return;
@@ -747,10 +701,6 @@ class instance_icecrown_citadel : public InstanceMapScript
return UpperSpireTeleporterActiveState;
case DATA_TEAM_IN_INSTANCE:
return instance->GetTeamInInstance();
- case DATA_BLOOD_QUICKENING_STATE:
- return BloodQuickeningState;
- case DATA_HEROIC_ATTEMPTS:
- return HeroicAttempts;
case DATA_BLOOD_PRINCE_COUNCIL_INTRO:
return BloodPrinceIntro;
case DATA_SINDRAGOSA_INTRO:
@@ -838,25 +788,6 @@ class instance_icecrown_citadel : public InstanceMapScript
return ObjectGuid::Empty;
}
- void HandleHeroicAttempts()
- {
- if (HeroicAttempts)
- {
- --HeroicAttempts;
- DoUpdateWorldState(WORLDSTATE_ATTEMPTS_REMAINING, HeroicAttempts);
- }
-
- if (!HeroicAttempts)
- {
- for (ObjectGuid const& bossGuid : { ProfessorPutricideGUID, BloodQueenLanaThelGUID, SindragosaGUID, TheLichKingGUID })
- {
- if (Creature* boss = instance->GetCreature(bossGuid))
- if (boss->IsAlive())
- boss->DespawnOrUnsummon();
- }
- }
- }
-
bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
@@ -973,32 +904,22 @@ class instance_icecrown_citadel : public InstanceMapScript
break;
case DATA_PROFESSOR_PUTRICIDE:
HandleGameObject(PlagueSigilGUID, state != DONE);
- if (instance->IsHeroic() && state == FAIL)
- HandleHeroicAttempts();
- else if (state == DONE)
+ if (state == DONE)
CheckLichKingAvailability();
break;
case DATA_BLOOD_QUEEN_LANA_THEL:
HandleGameObject(BloodwingSigilGUID, state != DONE);
- if (instance->IsHeroic() && state == FAIL)
- HandleHeroicAttempts();
- else if (state == DONE)
+ if (state == DONE)
CheckLichKingAvailability();
break;
case DATA_VALITHRIA_DREAMWALKER:
if (state == DONE)
- {
- if (sQuestPoolMgr->IsQuestActive(WeeklyQuestData[8].questId[instance->Is25ManRaid() ? 1 : 0]))
- instance->SummonCreature(NPC_VALITHRIA_DREAMWALKER_QUEST, ValithriaSpawnPos);
if (GameObject* teleporter = instance->GetGameObject(TeleporterSindragosaGUID))
SetTeleporterState(teleporter, true);
- }
break;
case DATA_SINDRAGOSA:
HandleGameObject(FrostwingSigilGUID, state != DONE);
- if (instance->IsHeroic() && state == FAIL)
- HandleHeroicAttempts();
- else if (state == DONE)
+ if (state == DONE)
CheckLichKingAvailability();
break;
case DATA_THE_LICH_KING:
@@ -1011,9 +932,7 @@ class instance_icecrown_citadel : public InstanceMapScript
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
platform->SetFarVisible(state == IN_PROGRESS);
- if (instance->IsHeroic() && state == FAIL)
- HandleHeroicAttempts();
- else if (state == DONE)
+ if (state == DONE)
{
if (GameObject* bolvar = instance->GetGameObject(FrozenBolvarGUID))
bolvar->SetRespawnTime(7 * DAY);
@@ -1065,48 +984,12 @@ class instance_icecrown_citadel : public InstanceMapScript
break;
case DATA_COLDFLAME_JETS:
ColdflameJetsState = data;
- if (ColdflameJetsState == DONE)
- SaveToDB();
- break;
- case DATA_BLOOD_QUICKENING_STATE:
- {
- // skip if nothing changes
- if (BloodQuickeningState == data)
- break;
-
- // 5 is the index of Blood Quickening
- if (!sQuestPoolMgr->IsQuestActive(WeeklyQuestData[5].questId[instance->Is25ManRaid() ? 1 : 0]))
- break;
-
- switch (data)
- {
- case IN_PROGRESS:
- Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min);
- BloodQuickeningMinutes = 30;
- DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
- DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
- break;
- case DONE:
- Events.CancelEvent(EVENT_UPDATE_EXECUTION_TIME);
- BloodQuickeningMinutes = 0;
- DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
- break;
- default:
- break;
- }
-
- BloodQuickeningState = data;
- SaveToDB();
break;
- }
case DATA_UPPERSPIRE_TELE_ACT:
UpperSpireTeleporterActiveState = data;
if (UpperSpireTeleporterActiveState == DONE)
- {
if (GameObject* go = instance->GetGameObject(TeleporterUpperSpireGUID))
SetTeleporterState(go, true);
- SaveToDB();
- }
break;
case DATA_BLOOD_PRINCE_COUNCIL_INTRO:
BloodPrinceIntro = data;
@@ -1343,36 +1226,18 @@ class instance_icecrown_citadel : public InstanceMapScript
}
}
- void WriteSaveDataMore(std::ostringstream& data) override
+ void AfterDataLoad() override
{
- data << HeroicAttempts << ' '
- << ColdflameJetsState << ' '
- << BloodQuickeningState << ' '
- << BloodQuickeningMinutes << ' '
- << UpperSpireTeleporterActiveState;
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- uint32 temp = 0;
-
- data >> HeroicAttempts;
-
- data >> temp;
- ColdflameJetsState = temp == DONE ? DONE : NOT_STARTED;
-
- data >> temp;
- BloodQuickeningState = temp == DONE ? DONE : NOT_STARTED;
-
- data >> BloodQuickeningMinutes;
-
- data >> temp;
- UpperSpireTeleporterActiveState = temp == DONE ? DONE : NOT_STARTED;
+ if (GetBossState(DATA_DEATHBRINGER_SAURFANG) == DONE)
+ {
+ ColdflameJetsState = DONE;
+ UpperSpireTeleporterActiveState = DONE;
+ }
}
void Update(uint32 diff) override
{
- if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL)
+ if (GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL)
return;
Events.Update(diff);
@@ -1381,25 +1246,6 @@ class instance_icecrown_citadel : public InstanceMapScript
{
switch (eventId)
{
- case EVENT_UPDATE_EXECUTION_TIME:
- {
- --BloodQuickeningMinutes;
- if (BloodQuickeningMinutes)
- {
- Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min);
- DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1);
- DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes);
- }
- else
- {
- BloodQuickeningState = DONE;
- DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 0);
- if (Creature* bq = instance->GetCreature(BloodQueenLanaThelGUID))
- bq->AI()->DoAction(ACTION_KILL_MINCHAR);
- }
- SaveToDB();
- break;
- }
case EVENT_QUAKE_SHATTER:
{
if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID))
@@ -1552,9 +1398,6 @@ class instance_icecrown_citadel : public InstanceMapScript
std::unordered_set<ObjectGuid::LowType> FrostwyrmGUIDs;
std::unordered_set<ObjectGuid::LowType> SpinestalkerTrash;
std::unordered_set<ObjectGuid::LowType> RimefangTrash;
- uint32 BloodQuickeningState;
- uint32 HeroicAttempts;
- uint16 BloodQuickeningMinutes;
uint8 BloodPrinceIntro;
uint8 SindragosaIntro;
bool IsBonedEligible;
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 3e145abe5b2..48bf18f6d4e 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -124,8 +124,6 @@ class instance_naxxramas : public InstanceMapScript
hadSapphironBirth = false;
CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT;
-
- playerDied = false;
}
void OnCreatureCreate(Creature* creature) override
@@ -250,12 +248,6 @@ class instance_naxxramas : public InstanceMapScript
void OnUnitDeath(Unit* unit) override
{
- if (!playerDied && unit->IsPlayer() && IsEncounterInProgress())
- {
- playerDied = true;
- SaveToDB();
- }
-
if (Creature* creature = unit->ToCreature())
if (creature->GetEntry() == NPC_BIGGLESWORTH)
{
@@ -544,26 +536,12 @@ class instance_naxxramas : public InstanceMapScript
case 13239: // Loatheb
case 13240: // Thaddius
case 7617: // Kel'Thuzad
- if (AreAllEncountersDone() && !playerDied)
- return true;
return false;
}
return false;
}
- void WriteSaveDataMore(std::ostringstream& data) override
- {
- data << uint32(playerDied ? 1 : 0);
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- uint32 tmpState;
- data >> tmpState;
- playerDied = tmpState != 0;
- }
-
protected:
/* The Arachnid Quarter */
// Anub'rekhan
@@ -608,9 +586,6 @@ class instance_naxxramas : public InstanceMapScript
bool hadSapphironBirth;
uint8 CurrentWingTaunt;
- /* The Immortal / The Undying */
- bool playerDied;
-
EventMap events;
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 850f9fd886a..0b7f8d2eb7a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -152,9 +152,6 @@ enum Events
EVENT_OUTRO_9,
EVENT_OUTRO_10,
EVENT_OUTRO_11,
- EVENT_DESPAWN_ALGALON_1,
- EVENT_DESPAWN_ALGALON_2,
- EVENT_DESPAWN_ALGALON_3,
// Living Constellation
EVENT_ARCANE_BARRAGE
@@ -334,18 +331,6 @@ struct boss_algalon_the_observer : public BossAI
events.CancelEvent(EVENT_RESUME_UPDATING);
events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1s + 500ms);
break;
- case EVENT_DESPAWN_ALGALON:
- events.Reset();
- events.SetPhase(PHASE_ROLE_PLAY);
- if (me->IsInCombat())
- events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1ms);
- events.ScheduleEvent(EVENT_DESPAWN_ALGALON_1, 5s);
- events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17s);
- events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26s);
- me->DespawnOrUnsummon(34s);
- me->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
- me->SetImmuneToNPC(true);
- break;
case ACTION_INIT_ALGALON:
_firstPull = false;
me->SetImmuneToPC(false);
@@ -385,7 +370,6 @@ struct boss_algalon_the_observer : public BossAI
DoZoneInCombat();
introDelay = 26500ms;
summons.DespawnEntry(NPC_AZEROTH);
- instance->SetData(EVENT_DESPAWN_ALGALON, 0);
events.ScheduleEvent(EVENT_START_COMBAT, 16s);
}
@@ -687,15 +671,6 @@ struct boss_algalon_the_observer : public BossAI
DoCastSelf(SPELL_TELEPORT);
me->DespawnOrUnsummon(1s + 200ms);
break;
- case EVENT_DESPAWN_ALGALON_1:
- Talk(SAY_ALGALON_DESPAWN_1);
- break;
- case EVENT_DESPAWN_ALGALON_2:
- Talk(SAY_ALGALON_DESPAWN_2);
- break;
- case EVENT_DESPAWN_ALGALON_3:
- Talk(SAY_ALGALON_DESPAWN_3);
- break;
default:
break;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 1df315a7cc7..32b0ad030cf 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -27,7 +27,6 @@
#include "ScriptMgr.h"
#include "TemporarySummon.h"
#include "Vehicle.h"
-#include <sstream>
static BossBoundaryData const boundaries =
{
@@ -168,7 +167,6 @@ class instance_ulduar : public InstanceMapScript
LoadMinionData(minionData);
LoadObjectData(creatureData, objectData);
- _algalonTimer = 61;
_maxArmorItemLevel = 0;
_maxWeaponItemLevel = 0;
TeamInInstance = 0;
@@ -183,7 +181,7 @@ class instance_ulduar : public InstanceMapScript
IsDriveMeCrazyEligible = true;
_algalonSummoned = false;
_summonAlgalon = false;
- _CoUAchivePlayerDeathMask = 0;
+ _algalonFirstIntro = true;
memset(_summonObservationRingKeeper, 0, sizeof(_summonObservationRingKeeper));
memset(_summonYSKeeper, 0, sizeof(_summonYSKeeper));
@@ -234,7 +232,7 @@ class instance_ulduar : public InstanceMapScript
{
_summonAlgalon = false;
TempSummon* algalon = instance->SummonCreature(NPC_ALGALON, AlgalonLandPos);
- if (_algalonTimer && _algalonTimer <= 60)
+ if (!_algalonFirstIntro)
algalon->AI()->DoAction(ACTION_INIT_ALGALON);
else
algalon->SetImmuneToPC(false);
@@ -349,28 +347,24 @@ class instance_ulduar : public InstanceMapScript
case NPC_FREYA_YS:
KeeperGUIDs[0] = creature->GetGUID();
_summonYSKeeper[0] = false;
- SaveToDB();
++keepersCount;
DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount);
break;
case NPC_HODIR_YS:
KeeperGUIDs[1] = creature->GetGUID();
_summonYSKeeper[1] = false;
- SaveToDB();
++keepersCount;
DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount);
break;
case NPC_THORIM_YS:
KeeperGUIDs[2] = creature->GetGUID();
_summonYSKeeper[2] = false;
- SaveToDB();
++keepersCount;
DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount);
break;
case NPC_MIMIRON_YS:
KeeperGUIDs[3] = creature->GetGUID();
_summonYSKeeper[3] = false;
- SaveToDB();
++keepersCount;
DoUpdateWorldState(WORLD_STATE_YOGG_SARON_KEEPERS, keepersCount);
break;
@@ -526,19 +520,6 @@ class instance_ulduar : public InstanceMapScript
void OnUnitDeath(Unit* unit) override
{
- // Champion/Conqueror of Ulduar
- if (unit->GetTypeId() == TYPEID_PLAYER)
- {
- for (uint8 i = 0; i < DATA_ALGALON; ++i)
- {
- if (GetBossState(i) == IN_PROGRESS)
- {
- _CoUAchivePlayerDeathMask |= (1 << i);
- SaveToDB();
- }
- }
- }
-
Creature* creature = unit->ToCreature();
if (!creature)
return;
@@ -690,10 +671,6 @@ class instance_ulduar : public InstanceMapScript
case DATA_ALGALON:
if (state == DONE)
{
- _events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
- _events.CancelEvent(EVENT_DESPAWN_ALGALON);
- DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
- _algalonTimer = 61;
if (GameObject* gift = GetGameObject(DATA_GIFT_OF_THE_OBSERVER))
gift->SetRespawnTime(gift->GetRespawnDelay());
// get item level (recheck weapons)
@@ -707,6 +684,7 @@ class instance_ulduar : public InstanceMapScript
}
else if (state == IN_PROGRESS)
{
+ _algalonFirstIntro = false;
// get item level (armor cannot be swapped in combat)
Map::PlayerList const& players = instance->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
@@ -747,7 +725,6 @@ class instance_ulduar : public InstanceMapScript
if (data >= 2 && GetBossState(DATA_FLAME_LEVIATHAN) == NOT_STARTED)
{
_events.ScheduleEvent(EVENT_LEVIATHAN_BREAK_DOOR, 5s);
- SaveToDB();
}
break;
case DATA_HODIR_RARE_CACHE:
@@ -768,13 +745,6 @@ class instance_ulduar : public InstanceMapScript
case DATA_DRIVE_ME_CRAZY:
IsDriveMeCrazyEligible = data ? true : false;
break;
- case EVENT_DESPAWN_ALGALON:
- DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, 60);
- _algalonTimer = 60;
- _events.ScheduleEvent(EVENT_DESPAWN_ALGALON, 1h);
- _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min);
- break;
case DATA_ALGALON_SUMMON_STATE:
_algalonSummoned = true;
break;
@@ -883,94 +853,49 @@ class instance_ulduar : public InstanceMapScript
return IsDriveMeCrazyEligible;
case CRITERIA_C_O_U_LEVIATHAN_10:
case CRITERIA_C_O_U_LEVIATHAN_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_FLAME_LEVIATHAN)) == 0;
case CRITERIA_C_O_U_IGNIS_10:
case CRITERIA_C_O_U_IGNIS_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_IGNIS)) == 0;
case CRITERIA_C_O_U_RAZORSCALE_10:
case CRITERIA_C_O_U_RAZORSCALE_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_RAZORSCALE)) == 0;
case CRITERIA_C_O_U_XT002_10:
case CRITERIA_C_O_U_XT002_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_XT002)) == 0;
case CRITERIA_C_O_U_IRON_COUNCIL_10:
case CRITERIA_C_O_U_IRON_COUNCIL_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_ASSEMBLY_OF_IRON)) == 0;
case CRITERIA_C_O_U_KOLOGARN_10:
case CRITERIA_C_O_U_KOLOGARN_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_KOLOGARN)) == 0;
case CRITERIA_C_O_U_AURIAYA_10:
case CRITERIA_C_O_U_AURIAYA_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_AURIAYA)) == 0;
case CRITERIA_C_O_U_HODIR_10:
case CRITERIA_C_O_U_HODIR_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_HODIR)) == 0;
case CRITERIA_C_O_U_THORIM_10:
case CRITERIA_C_O_U_THORIM_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_THORIM)) == 0;
case CRITERIA_C_O_U_FREYA_10:
case CRITERIA_C_O_U_FREYA_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_FREYA)) == 0;
case CRITERIA_C_O_U_MIMIRON_10:
case CRITERIA_C_O_U_MIMIRON_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_MIMIRON)) == 0;
case CRITERIA_C_O_U_VEZAX_10:
case CRITERIA_C_O_U_VEZAX_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_VEZAX)) == 0;
case CRITERIA_C_O_U_YOGG_SARON_10:
case CRITERIA_C_O_U_YOGG_SARON_25:
- return (_CoUAchivePlayerDeathMask & (1 << DATA_YOGG_SARON)) == 0;
+ return false;
}
return false;
}
- void WriteSaveDataMore(std::ostringstream& data) override
- {
- data << ColossusData << ' ' << _algalonTimer << ' ' << uint32(_algalonSummoned ? 1 : 0);
-
- for (uint8 i = 0; i < 4; ++i)
- data << ' ' << uint32(!KeeperGUIDs[i].IsEmpty() ? 1 : 0);
-
- data << ' ' << _CoUAchivePlayerDeathMask;
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
+ void AfterDataLoad() override
{
- uint32 tempState;
- data >> tempState;
- SetData(DATA_COLOSSUS, tempState);
-
- data >> _algalonTimer;
- data >> tempState;
- _algalonSummoned = tempState != 0;
- if (_algalonSummoned && GetBossState(DATA_ALGALON) != DONE)
- {
- _summonAlgalon = true;
- if (_algalonTimer && _algalonTimer <= 60)
- {
- _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min);
- DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1);
- DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, _algalonTimer);
- }
- }
-
- for (uint8 i = 0; i < 4; ++i)
- {
- data >> tempState;
- _summonYSKeeper[i] = tempState != 0;
- }
+ if (GetBossState(DATA_FLAME_LEVIATHAN) == DONE)
+ SetData(DATA_COLOSSUS, DONE);
- if (GetBossState(DATA_FREYA) == DONE && !_summonYSKeeper[0])
+ if (GetBossState(DATA_FREYA) == DONE)
_summonObservationRingKeeper[0] = true;
- if (GetBossState(DATA_HODIR) == DONE && !_summonYSKeeper[1])
+ if (GetBossState(DATA_HODIR) == DONE)
_summonObservationRingKeeper[1] = true;
- if (GetBossState(DATA_THORIM) == DONE && !_summonYSKeeper[2])
+ if (GetBossState(DATA_THORIM) == DONE)
_summonObservationRingKeeper[2] = true;
- if (GetBossState(DATA_MIMIRON) == DONE && !_summonYSKeeper[3])
+ if (GetBossState(DATA_MIMIRON) == DONE)
_summonObservationRingKeeper[3] = true;
-
- data >> _CoUAchivePlayerDeathMask;
}
void Update(uint32 diff) override
@@ -984,19 +909,6 @@ class instance_ulduar : public InstanceMapScript
{
switch (eventId)
{
- case EVENT_UPDATE_ALGALON_TIMER:
- SaveToDB();
- DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, --_algalonTimer);
- if (_algalonTimer)
- _events.ScheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min);
- else
- {
- DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
- _events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
- if (Creature* algalon = GetCreature(DATA_ALGALON))
- algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON);
- }
- break;
case EVENT_DESPAWN_LEVIATHAN_VEHICLES:
// Eject all players from vehicles and make them untargetable.
// They will be despawned after a while
@@ -1054,14 +966,13 @@ class instance_ulduar : public InstanceMapScript
private:
EventMap _events;
- uint32 _algalonTimer;
bool _summonAlgalon;
bool _algalonSummoned;
+ bool _algalonFirstIntro;
bool _summonObservationRingKeeper[4];
bool _summonYSKeeper[4];
uint32 _maxArmorItemLevel;
uint32 _maxWeaponItemLevel;
- uint32 _CoUAchivePlayerDeathMask;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index 2056d438e7d..5df7b50bcaa 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -477,8 +477,8 @@ enum UlduarAchievementData
{
// FL Achievement boolean
DATA_UNBROKEN = 29052906, // 2905, 2906 are achievement IDs,
- MAX_HERALD_ARMOR_ITEMLEVEL = 226,
- MAX_HERALD_WEAPON_ITEMLEVEL = 232
+ MAX_HERALD_ARMOR_ITEMLEVEL = 35,
+ MAX_HERALD_WEAPON_ITEMLEVEL = 35
};
enum UlduarSharedSpells
@@ -489,8 +489,6 @@ enum UlduarSharedSpells
enum UlduarEvents
{
- EVENT_DESPAWN_ALGALON = 1,
- EVENT_UPDATE_ALGALON_TIMER = 2,
ACTION_INIT_ALGALON = 6,
EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7,
EVENT_LEVIATHAN_BREAK_DOOR = 8
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
index 7eb762e21b8..4b1fedc4b97 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp
@@ -20,7 +20,6 @@
#include "GameObject.h"
#include "InstanceScript.h"
#include "utgarde_keep.h"
-#include <sstream>
DoorData const doorData[] =
{
@@ -166,9 +165,6 @@ class instance_utgarde_keep : public InstanceMapScript
HandleGameObject(Forges[i].BellowGUID, data != NOT_STARTED);
HandleGameObject(Forges[i].FireGUID, data != NOT_STARTED);
Forges[i].Event = data;
-
- if (data == DONE)
- SaveToDB();
break;
}
default:
@@ -176,16 +172,11 @@ class instance_utgarde_keep : public InstanceMapScript
}
}
- void WriteSaveDataMore(std::ostringstream& data) override
- {
- for (uint8 i = 0; i < 3; ++i)
- data << Forges[i].Event << ' ';
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
+ void AfterDataLoad() override
{
- for (uint8 i = 0; i < 3; ++i)
- data >> Forges[i].Event;
+ if (GetBossState(DATA_PRINCE_KELESETH) == DONE)
+ for (uint8 i = 0; i < 3; ++i)
+ Forges[i].Event = DONE;
}
protected:
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 58723958ed4..8cbeee0cb1b 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -26,7 +26,6 @@
#include "TaskScheduler.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
-#include <sstream>
/*
* TODO:
@@ -197,16 +196,15 @@ class instance_violet_hold : public InstanceMapScript
struct instance_violet_hold_InstanceMapScript : public InstanceScript
{
- instance_violet_hold_InstanceMapScript(InstanceMap* map) : InstanceScript(map)
+ instance_violet_hold_InstanceMapScript(InstanceMap* map) : InstanceScript(map),
+ FirstBossId(*this, "FirstBossId", 0),
+ SecondBossId(*this, "SecondBossId", 0)
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadObjectData(creatureData, gameObjectData);
LoadMinionData(minionData);
- FirstBossId = 0;
- SecondBossId = 0;
-
DoorIntegrity = 100;
WaveCount = 0;
EventState = NOT_STARTED;
@@ -794,17 +792,6 @@ class instance_violet_hold : public InstanceMapScript
}
}
- void WriteSaveDataMore(std::ostringstream& data) override
- {
- data << FirstBossId << ' ' << SecondBossId;
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- data >> FirstBossId;
- data >> SecondBossId;
- }
-
bool CheckWipe() const
{
Map::PlayerList const& players = instance->GetPlayers();
@@ -943,8 +930,8 @@ class instance_violet_hold : public InstanceMapScript
static uint8 const ActivationCrystalCount = 5;
ObjectGuid ActivationCrystalGUIDs[ActivationCrystalCount];
- uint32 FirstBossId;
- uint32 SecondBossId;
+ PersistentInstanceScriptValue<uint32> FirstBossId;
+ PersistentInstanceScriptValue<uint32> SecondBossId;
uint8 DoorIntegrity;
uint8 WaveCount;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
index ebde8fa0ccc..d50073a73d5 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp
@@ -26,12 +26,10 @@ EndScriptData */
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
-#include "Log.h"
#include "Map.h"
#include "Player.h"
#include "serpent_shrine.h"
#include "TemporarySummon.h"
-#include <sstream>
#define MAX_ENCOUNTER 6
@@ -285,7 +283,6 @@ class instance_serpent_shrine : public InstanceMapScript
case DATA_TRASH:
if (data == 1 && TrashCount < MIN_KILLS)
++TrashCount;//+1 died
- SaveToDB();
break;
case DATA_WATER:
Water = data;
@@ -350,16 +347,6 @@ class instance_serpent_shrine : public InstanceMapScript
return 0;
}
- void WriteSaveDataMore(std::ostringstream& stream) override
- {
- stream << TrashCount;
- }
-
- void ReadSaveDataMore(std::istringstream& stream) override
- {
- stream >> TrashCount;
- }
-
private:
ObjectGuid LurkerBelow;
ObjectGuid Sharkkis;
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
index cb856a4de10..52dec1e3174 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp
@@ -30,7 +30,6 @@ EndScriptData */
#include "shattered_halls.h"
#include "SpellAuras.h"
#include "TemporarySummon.h"
-#include <sstream>
DoorData const doorData[] =
{
@@ -118,7 +117,6 @@ class instance_shattered_halls : public InstanceMapScript
executionTimer = 55 * MINUTE * IN_MILLISECONDS;
DoCastSpellOnPlayers(SPELL_KARGATH_EXECUTIONER_1);
executionerGUID = creature->GetGUID();
- SaveToDB();
break;
case NPC_CAPTAIN_ALINA:
case NPC_CAPTAIN_BONESHATTER:
@@ -153,7 +151,6 @@ class instance_shattered_halls : public InstanceMapScript
{
DoCastSpellOnPlayers(SPELL_REMOVE_KARGATH_EXECUTIONER);
executionTimer = 0;
- SaveToDB();
}
break;
case DATA_KARGATH:
@@ -185,47 +182,11 @@ class instance_shattered_halls : public InstanceMapScript
}
}
- void WriteSaveDataMore(std::ostringstream& data) override
+ void AfterDataLoad() override
{
- if (!instance->IsHeroic())
- return;
-
- data << uint32(executed) << ' '
- << executionTimer << ' ';
- }
-
- void ReadSaveDataMore(std::istringstream& data) override
- {
- if (!instance->IsHeroic())
- return;
-
- uint32 readbuff;
- data >> readbuff;
- executed = uint8(readbuff);
- data >> readbuff;
-
- if (executed > VictimCount)
- {
- executed = VictimCount;
- executionTimer = 0;
- return;
- }
-
- if (!readbuff)
- return;
-
- Creature* executioner = nullptr;
-
- instance->LoadGrid(Executioner.GetPositionX(), Executioner.GetPositionY());
- if (Creature* kargath = instance->GetCreature(kargathGUID))
- if (executionerGUID.IsEmpty())
- executioner = kargath->SummonCreature(NPC_SHATTERED_EXECUTIONER, Executioner);
-
- if (executioner)
- for (uint8 i = executed; i < VictimCount; ++i)
- executioner->SummonCreature(executionerVictims[i](GetData(DATA_TEAM_IN_INSTANCE)), executionerVictims[i].GetPos());
-
- executionTimer = readbuff;
+ // timed events are not resumable after reset/crash
+ executed = VictimCount;
+ executionTimer = 0;
}
uint32 GetData(uint32 type) const override
@@ -266,8 +227,6 @@ class instance_shattered_halls : public InstanceMapScript
if (Creature* executioner = instance->GetCreature(executionerGUID))
executioner->AI()->SetData(DATA_PRISONERS_EXECUTED, executed);
-
- SaveToDB();
}
else
executionTimer -= diff;