diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 2d6735753..daba9b609 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -134,6 +134,17 @@ void InstanceScript::LoadBossBoundaries(const BossBoundaryData& data) bosses[entry.bossId].boundary.push_back(entry.boundary); } +void InstanceScript::SetHeaders(std::string const& dataHeaders) +{ + for (char header : dataHeaders) + { + if (isalpha(header)) + { + headers.push_back(header); + } + } +} + void InstanceScript::LoadMinionData(const MinionData* data) { while (data->entry) @@ -340,30 +351,89 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) return false; } -void InstanceScript::LoadBossState(const char* data) +void InstanceScript::Load(const char* data) { if (!data) + { + OUT_LOAD_INST_DATA_FAIL; return; + } + + OUT_LOAD_INST_DATA(data); std::istringstream loadStream(data); - uint32 buff; + + if (ReadSaveDataHeaders(loadStream)) + { + ReadSaveDataBossStates(loadStream); + ReadSaveDataMore(loadStream); + } + else + OUT_LOAD_INST_DATA_FAIL; + + OUT_LOAD_INST_DATA_COMPLETE; +} + +bool InstanceScript::ReadSaveDataHeaders(std::istringstream& data) +{ + for (char header : headers) + { + char buff; + data >> buff; + + if (header != buff) + return false; + } + + return true; +} + +void InstanceScript::ReadSaveDataBossStates(std::istringstream& data) +{ uint32 bossId = 0; for (std::vector::iterator i = bosses.begin(); i != bosses.end(); ++i, ++bossId) { - loadStream >> buff; + uint32 buff; + data >> buff; + if (buff == IN_PROGRESS || buff == FAIL || buff == SPECIAL) + buff = NOT_STARTED; + if (buff < TO_BE_DECIDED) - SetBossState(bossId, (EncounterState)buff); + SetBossState(bossId, EncounterState(buff)); } } -std::string InstanceScript::GetBossSaveData() +std::string InstanceScript::GetSaveData() { + OUT_SAVE_INST_DATA; + std::ostringstream saveStream; - for (std::vector::iterator i = bosses.begin(); i != bosses.end(); ++i) - saveStream << (uint32)i->state << ' '; + + WriteSaveDataHeaders(saveStream); + WriteSaveDataBossStates(saveStream); + WriteSaveDataMore(saveStream); + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); } +void InstanceScript::WriteSaveDataHeaders(std::ostringstream& data) +{ + for (char header : headers) + { + data << header << ' '; + } +} + +void InstanceScript::WriteSaveDataBossStates(std::ostringstream& data) +{ + for (BossInfo const& bossInfo : bosses) + { + data << uint32(bossInfo.state) << ' '; + } +} + void InstanceScript::DoUseDoorOrButton(ObjectGuid uiGuid, uint32 uiWithRestoreTime, bool bUseAlternativeState) { if (!uiGuid) diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index f294bf2a3..92c98110d 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -148,14 +148,14 @@ public: //On creation, NOT load. virtual void Initialize() {} - //On load - virtual void Load(char const* data) { LoadBossState(data); } + // On load + virtual void Load(char const* data); //Called when creature is Looted virtual void CreatureLooted(Creature* /*creature*/, LootType) {} - //When save is needed, this function generates the data - virtual std::string GetSaveData() { return GetBossSaveData(); } + // When save is needed, this function generates the data + virtual std::string GetSaveData(); void SaveToDB(); @@ -255,6 +255,7 @@ public: // Allows to perform particular actions virtual void DoAction(int32 /*action*/) {} protected: + void SetHeaders(std::string const& dataHeaders); void SetBossNumber(uint32 number) { bosses.resize(number); } void LoadBossBoundaries(BossBoundaryData const& data); void LoadDoorData(DoorData const* data); @@ -271,11 +272,18 @@ protected: void UpdateDoorState(GameObject* door); void UpdateMinionState(Creature* minion, EncounterState state); - void LoadBossState(char const* data); - std::string GetBossSaveData(); + // Instance Load and Save + bool ReadSaveDataHeaders(std::istringstream& data); + void ReadSaveDataBossStates(std::istringstream& data); + virtual void ReadSaveDataMore(std::istringstream& /*data*/) { } + void WriteSaveDataHeaders(std::ostringstream& data); + void WriteSaveDataBossStates(std::ostringstream& data); + virtual void WriteSaveDataMore(std::ostringstream& /*data*/) { } + private: static void LoadObjectData(ObjectData const* creatureData, ObjectInfoMap& objectInfo); + std::vector headers; std::vector bosses; DoorInfoMap doors; MinionInfoMap minions; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h index 67fe9be83..0ba8145c3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h @@ -19,6 +19,8 @@ #define DEF_BRD_H #include "CreatureAIImpl.h" + +#define DataHeader "BRD" #define BRDScriptName "instance_blackrock_depths" enum FactionIds 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 4470a091b..6d706d99a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -107,7 +107,10 @@ public: struct instance_blackrock_depths_InstanceMapScript : public InstanceScript { - instance_blackrock_depths_InstanceMapScript(Map* map) : InstanceScript(map) { } + instance_blackrock_depths_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + } uint32 encounter[MAX_ENCOUNTER]; std::string str_data; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h index 0d5060e9c..fa9446d06 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h @@ -22,6 +22,8 @@ uint32 const EncounterCount = 23; +#define DataHeader "BRS" + #define BRSScriptName "instance_blackrock_spire" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp index 701cf4e49..eb6ef3ddb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp @@ -85,6 +85,7 @@ public: instance_blackrock_spireMapScript(InstanceMap* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadMinionData(minionData); LoadDoorData(doorData); @@ -672,50 +673,6 @@ public: } } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B S " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* strIn) override - { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'B' && dataHead2 == 'S') - { - for (uint8 i = 0; i < EncounterCount; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: EventMap Events; ObjectGuid HighlordOmokk; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 7a4ba7113..4aec41e16 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -78,7 +78,7 @@ public: { instance_blackwing_lair_InstanceMapScript(Map* map) : InstanceScript(map) { - //SetHeaders(DataHeader); + SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(creatureData, objectData); @@ -432,52 +432,15 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B W L " << GetBossSaveData() << NefarianLeftTunnel << ' ' << NefarianRightTunnel; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> NefarianLeftTunnel; + data >> NefarianRightTunnel; } - void Load(char const* data) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!data) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(data); - - char dataHead1, dataHead2, dataHead3; - - std::istringstream loadStream(data); - loadStream >> dataHead1 >> dataHead2 >> dataHead3; - - if (dataHead1 == 'B' && dataHead2 == 'W' && dataHead3 == 'L') - { - for (uint32 i = 0; i < EncounterCount; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState == FAIL || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - - loadStream >> NefarianLeftTunnel; - loadStream >> NefarianRightTunnel; - } - else - { - OUT_LOAD_INST_DATA_FAIL; - } - - OUT_LOAD_INST_DATA_COMPLETE; + data << NefarianLeftTunnel << ' ' << NefarianRightTunnel; } protected: 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 6465de471..f97f3661a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp @@ -62,6 +62,7 @@ public: { instance_molten_core_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); LoadMinionData(minionData); } @@ -404,59 +405,6 @@ public: return true; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "M C " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* data) override - { - if (!data) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(data); - - char dataHead1, dataHead2; - - std::istringstream loadStream(data); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'M' && dataHead2 == 'C') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > TO_BE_DECIDED) - { - tmpState = NOT_STARTED; - } - - SetBossState(i, static_cast(tmpState)); - } - - if (CheckMajordomoExecutus()) - { - SummonMajordomoExecutus(); - } - } - else - { - OUT_LOAD_INST_DATA_FAIL; - } - - OUT_LOAD_INST_DATA_COMPLETE; - } - private: std::unordered_map _circlesGUIDs; std::unordered_map _runesGUIDs; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h index 807cc6c72..aad474bef 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "Object.h" +#define DataHeader "MC" + constexpr auto MCScriptName = "instance_molten_core"; constexpr uint32 MAX_ENCOUNTER = 10; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h index 3694c5993..6ff733ad8 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h +++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h @@ -20,6 +20,7 @@ #include "CreatureAIImpl.h" +#define DataHeader "DM" #define DeadminesScriptName "instance_deadmines" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 430ea08db..0d92d33a6 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -28,6 +28,7 @@ public: { instance_deadmines_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); } void Initialize() override diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h index 02d916f58..375f759e6 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "GNO" + #define GnomereganScriptName "instance_gnomeregan" template diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index 26767b10a..a67da8176 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -36,6 +36,7 @@ public: { instance_gnomeregan_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); } void OnCreatureCreate(Creature* creature) override @@ -77,30 +78,14 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "D E " << _encounters[0]; - return saveStream.str(); + data >> _encounters[TYPE_GRUBBIS]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'D' && dataHead2 == 'E') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[TYPE_GRUBBIS]; } private: diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 2d116dc85..e6d6115e7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -46,6 +46,7 @@ public: { instance_karazhan_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); // 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered. diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 26e547c90..7f812f34c 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -26,7 +26,10 @@ public: struct instance_magisters_terrace_InstanceMapScript : public InstanceScript { - instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) { } + instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + } uint32 Encounter[MAX_ENCOUNTER]; @@ -150,39 +153,17 @@ public: } } - std::string GetSaveData() override + // @todo: Use BossStates. This is for code compatibility + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> Encounter[1]; + data >> Encounter[2]; + data >> Encounter[3]; } - void Load(const char* str) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - std::istringstream loadStream(str); - - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetData(i, tmpState); - } - - OUT_LOAD_INST_DATA_COMPLETE; + data << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3]; } ObjectGuid GetGuidData(uint32 identifier) const override diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index 0aac2e80e..20bb86b22 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -23,6 +23,7 @@ #include "Player.h" #include "SpellScript.h" +#define DataHeader "MT" #define MTScriptName "instance_magisters_terrace" enum MTData diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index 2b90f373e..e3a9318b0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -66,7 +66,10 @@ public: struct instance_scarlet_monastery_InstanceMapScript : public InstanceScript { - instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_scarlet_monastery_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + } void OnPlayerEnter(Player* player) override { diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarletmonastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarletmonastery.h index 286d8f8dc..92db65f7a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarletmonastery.h +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarletmonastery.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "SM" + #define ScarletMonasteryScriptName "instance_scarlet_monastery" template diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index 873c49852..c8dd58d23 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -211,30 +211,15 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "S O " << _kirtonosState << ' ' << _miniBosses; - return saveStream.str(); + data >> _kirtonosState; + data >> _miniBosses; } - void Load(const char* str) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!str) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'O') - { - loadStream >> _kirtonosState; - loadStream >> _miniBosses; - - if (_kirtonosState == IN_PROGRESS) - _kirtonosState = NOT_STARTED; - } + data << _kirtonosState << ' ' << _miniBosses; } protected: diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index d667691f8..0e4b6ce5e 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -37,7 +37,10 @@ public: struct instance_shadowfang_keep_InstanceMapScript : public InstanceScript { - instance_shadowfang_keep_InstanceMapScript(Map* map) : InstanceScript(map) { } + instance_shadowfang_keep_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + } void Initialize() override { @@ -112,30 +115,16 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "S K " << _encounters[0] << ' ' << _encounters[1] << ' ' << _encounters[2]; - return saveStream.str(); + data >> _encounters[0]; + data >> _encounters[1]; + data >> _encounters[2]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'S' && dataHead2 == 'K') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[0] << ' ' << _encounters[1] << ' ' << _encounters[2]; } private: diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h index fada11a7a..9d8a9428b 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h @@ -22,6 +22,7 @@ #include "SpellScript.h" #include "CreatureAIImpl.h" +#define DataHeader "SK" #define ShadowfangKeepScriptName "instance_shadowfang_keep" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index a6b6d8c72..2de15bdf7 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -60,6 +60,7 @@ public: { instance_stratholme_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); } void Initialize() override @@ -344,37 +345,36 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "S T " << _baronRunProgress << ' ' << _baronRunTime << ' ' << _zigguratState1 << ' ' << _zigguratState2 << ' ' << _zigguratState3 << ' ' << _slaughterProgress << ' ' << _postboxesOpened; - return saveStream.str(); - } + data >> _baronRunProgress; + data >> _baronRunTime; + data >> _zigguratState1; + data >> _zigguratState2; + data >> _zigguratState3; + data >> _slaughterProgress; + data >> _postboxesOpened; - void Load(const char* in) override - { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'S' && dataHead2 == 'T') + if (_baronRunTime) { - loadStream >> _baronRunProgress; - loadStream >> _baronRunTime; - loadStream >> _zigguratState1; - loadStream >> _zigguratState2; - loadStream >> _zigguratState3; - loadStream >> _slaughterProgress; - loadStream >> _postboxesOpened; + events.ScheduleEvent(EVENT_BARON_TIME, 60000); } - if (_baronRunTime > 0) - events.ScheduleEvent(EVENT_BARON_TIME, 60000); - if (_slaughterProgress > 0 && _slaughterProgress < 4) + { events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5000); + } + } + + void WriteSaveDataMore(std::ostringstream& data) override + { + data << _baronRunProgress << ' ' + << _baronRunTime << ' ' + << _zigguratState1 << ' ' + << _zigguratState2 << ' ' + << _zigguratState3 << ' ' + << _slaughterProgress << ' ' + << _postboxesOpened; } uint32 GetData(uint32 type) const override diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h index 16e7fc766..33ea5114e 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h @@ -20,6 +20,7 @@ #include "SpellAuras.h" +#define DataHeader "STR" #define StratholmeScriptName "instance_stratholme" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 3032794d8..dec10234d 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -33,6 +33,7 @@ public: { instance_sunken_temple_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); } void Initialize() override @@ -168,33 +169,22 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "T A " << _encounters[0] << ' ' << _encounters[1] << ' ' << _encounters[2] << ' ' << _statuePhase << ' ' << _defendersKilled; - return saveStream.str(); + data >> _encounters[0]; + data >> _encounters[1]; + data >> _encounters[2]; + data >> _statuePhase; + data >> _defendersKilled; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'T' && dataHead2 == 'A') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - - loadStream >> _statuePhase; - loadStream >> _defendersKilled; - } + data << _encounters[0] << ' ' + << _encounters[1] << ' ' + << _encounters[2] << ' ' + << _statuePhase << ' ' + << _defendersKilled; } private: diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h index d94c1eee8..a30d47443 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h @@ -18,6 +18,8 @@ #ifndef DEF_SUNKEN_TEMPLE_H #define DEF_SUNKEN_TEMPLE_H +#define DataHeader "STR" + enum DataTypes { DATA_STATUES = 10, diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 36f6ad57a..39e4c9f8b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -40,6 +40,7 @@ public: { instance_sunwell_plateau_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); } @@ -233,49 +234,6 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "S P " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'P') - { - for (uint32 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: ObjectGuid KalecgosDragonGUID; ObjectGuid SathrovarrGUID; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h index 4aee9c649..1eb558cb6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h @@ -24,6 +24,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "SWP" + #define SWPScriptName "instance_sunwell_plateau" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index aec0b170e..f1a69a4ef 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -43,6 +43,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&_encounters, 0, sizeof(_encounters)); } @@ -101,31 +102,18 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "U D " << _encounters[DATA_IRONAYA_DOORS] << ' ' << _encounters[DATA_STONE_KEEPERS] << ' ' << _encounters[DATA_ARCHAEDAS]; - return saveStream.str(); + data >> _encounters[DATA_IRONAYA_DOORS]; + data >> _encounters[DATA_STONE_KEEPERS]; + data >> _encounters[DATA_ARCHAEDAS]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'U' && dataHead2 == 'D') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[DATA_IRONAYA_DOORS] << ' ' + << _encounters[DATA_STONE_KEEPERS] << ' ' + << _encounters[DATA_ARCHAEDAS]; } void OnCreatureCreate(Creature* creature) override diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h index a76f0b6a7..13196f6ff 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h @@ -18,6 +18,8 @@ #ifndef DEF_ULDAMAN_H #define DEF_ULDAMAN_H +#define DataHeader "UD" + enum DataTypes { DATA_IRONAYA_DOORS = 0, diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index c54148ddf..e6934009f 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -91,6 +91,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); QuestTimer = 0; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index 6c19fdbda..d8a5fdd1c 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -20,6 +20,7 @@ #include "CreatureAIImpl.h" +#define DataHeader "ZA" #define ZulAmanScriptName "instance_zulaman" enum DataTypes diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 2e1af2680..25395d4df 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -50,6 +50,7 @@ public: { instance_zulgurub_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); @@ -170,48 +171,6 @@ public: return true; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "Z G " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'Z' && dataHead2 == 'G') - { - for (uint32 i = 0; i < EncounterCount; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } private: // If all High Priest bosses were killed. Ohgan is added too. // Jindo is needed for healfunction. diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h index 7c88c3fa0..1db3e27a1 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h +++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h @@ -22,6 +22,8 @@ uint32 const EncounterCount = 13; +#define DataHeader "ZG" + #define ZGScriptName "instance_zulgurub" enum DataTypes diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h index c30314752..5fef90f4b 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h @@ -18,6 +18,8 @@ #ifndef BFD_H_ #define BFD_H_ +#define DataHeader "BFD" + enum Data { TYPE_GELIHAST = 0, diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 24332165b..c1207cb3a 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -35,6 +35,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&_encounters, 0, sizeof(_encounters)); _requiredDeaths = 0; } @@ -111,30 +112,24 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "B L " << _encounters[0] << ' ' << _encounters[1] << ' ' << _encounters[2] << ' ' << _encounters[3] << ' ' << _encounters[4] << ' ' << _encounters[5]; - return saveStream.str(); + data >> _encounters[0]; + data >> _encounters[1]; + data >> _encounters[2]; + data >> _encounters[3]; + data >> _encounters[4]; + data >> _encounters[5]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'B' && dataHead2 == 'L') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[0] << ' ' + << _encounters[1] << ' ' + << _encounters[2] << ' ' + << _encounters[3] << ' ' + << _encounters[4] << ' ' + << _encounters[5]; } bool IsFireEventDone() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h index 13210662c..76987a6c9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "GridNotifiers.h" +#define DataHeader "HY" + #define HyjalScriptName "instance_hyjal" uint32 const EncounterCount = 5; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index fe5ef1f43..0c4dab7ab 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -55,6 +55,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); m_uiAncientGemGUID.clear(); @@ -257,18 +258,7 @@ public: if (data == DONE) { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' - << m_auiEncounter[3] << ' ' << m_auiEncounter[4] - << ' ' << allianceRetreat << ' ' << hordeRetreat - << ' ' << RaidDamage; - - str_data = saveStream.str(); - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; } } @@ -298,31 +288,32 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - return str_data; + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> m_auiEncounter[3]; + data >> m_auiEncounter[4]; + data >> allianceRetreat; + data >> hordeRetreat; + data >> RaidDamage; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) 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] >> allianceRetreat >> hordeRetreat >> RaidDamage; - for (uint8 i = 0; i < EncounterCount; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as IN_PROGRESS - reset it instead. - m_auiEncounter[i] = NOT_STARTED; - OUT_LOAD_INST_DATA_COMPLETE; + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << m_auiEncounter[3] << ' ' + << m_auiEncounter[4]<< ' ' + << allianceRetreat << ' ' + << hordeRetreat << ' ' + << RaidDamage; } protected: uint32 m_auiEncounter[EncounterCount]; - std::string str_data; GuidList m_uiAncientGemGUID; ObjectGuid RageWinterchill; ObjectGuid Anetheron; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h index 8e0e0407f..28d7a36dd 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h @@ -20,6 +20,7 @@ #include "CreatureAIImpl.h" +#define DataHeader "CS" #define CullingOfStratholmeScriptName "instance_culling_of_stratholme" enum Data 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 f0fd316cb..55166324f 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 @@ -38,6 +38,7 @@ public: instance_culling_of_stratholme_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { // Instance + SetHeaders(DataHeader); _crateCount = 0; _showCrateTimer = 0; _guardianTimer = 0; 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 fc741ea92..d11b888a9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -53,6 +53,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); _encounterProgress = 0; _barrelCount = 0; _attemptsCount = 0; @@ -298,42 +299,15 @@ public: instance->LoadGrid(thrallPositions[i].GetPositionX(), thrallPositions[i].GetPositionY()); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "O H " << _encounterProgress << ' ' << _attemptsCount; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> _encounterProgress; + data >> _attemptsCount; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1; - - if (dataHead1 == 'O' && dataHead2 == 'H') - { - _encounterProgress = data0; - _attemptsCount = data1; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << _encounterProgress << ' ' << _attemptsCount; } private: diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h index 39e4ee9be..e7b96c383 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "OH" + #define OldHillsbradScriptName "instance_old_hillsbrad" enum DataIds diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 086d08b93..876dc4a7d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -53,6 +53,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&encounters, 0, sizeof(encounters)); _currentRift = 0; _shieldPercent = 100; @@ -327,40 +328,18 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B M " << encounters[0] << ' ' << encounters[1] << ' ' << encounters[2]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> encounters[0]; + data >> encounters[1]; + data >> encounters[2]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'B' && dataHead2 == 'M') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - loadStream >> encounters[i]; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << encounters[0] << ' ' + << encounters[1] << ' ' + << encounters[2] << ' '; } protected: diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index 73874f7c0..eb6aabd17 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -22,6 +22,8 @@ #include "PassiveAI.h" #include "SpellScript.h" +#define DataHeader "TBM" + #define TheBlackMorassScriptName "instance_the_black_morass" enum DataTypes diff --git a/src/server/scripts/Kalimdor/DireMaul/dire_maul.h b/src/server/scripts/Kalimdor/DireMaul/dire_maul.h index a1c60c8b5..ef958c22b 100644 --- a/src/server/scripts/Kalimdor/DireMaul/dire_maul.h +++ b/src/server/scripts/Kalimdor/DireMaul/dire_maul.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "DML" + constexpr auto DMScriptName = "instance_dire_maul"; enum DataTypes diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp index 1e33528f9..ab34bc3ff 100644 --- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp +++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp @@ -30,6 +30,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); _eastWingProgress = 0; _westWingProgress = 0; _pylonsState = 0; @@ -144,29 +145,22 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "D M " << _eastWingProgress << ' ' << _westWingProgress << ' ' << _pylonsState << ' ' << _northWingProgress << ' ' << _northWingBosses; - return saveStream.str(); + data >> _eastWingProgress; + data >> _westWingProgress; + data >> _pylonsState; + data >> _northWingProgress; + data >> _northWingBosses; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'D' && dataHead2 == 'M') - { - loadStream >> _eastWingProgress; - loadStream >> _westWingProgress; - loadStream >> _pylonsState; - loadStream >> _northWingProgress; - loadStream >> _northWingBosses; - } + data << _eastWingProgress << ' ' + << _westWingProgress << ' ' + << _pylonsState << ' ' + << _northWingProgress << ' ' + << _northWingBosses; } private: diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp index 969854c99..3d8bffce2 100644 --- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp @@ -32,6 +32,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&_encounters, 0, sizeof(_encounters)); } @@ -59,30 +60,14 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "M A " << _encounters[0]; - return saveStream.str(); + data >> _encounters[0]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'M' && dataHead2 == 'A') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[0]; } private: diff --git a/src/server/scripts/Kalimdor/Maraudon/maraudon.h b/src/server/scripts/Kalimdor/Maraudon/maraudon.h index 68aff349b..c9fb5c4ac 100644 --- a/src/server/scripts/Kalimdor/Maraudon/maraudon.h +++ b/src/server/scripts/Kalimdor/Maraudon/maraudon.h @@ -18,6 +18,8 @@ #ifndef DEF_MARAUDON_H #define DEF_MARAUDON_H +#define DataHeader "MA" + enum DataTypes { TYPE_NOXXION = 0, diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index 25af7297d..2410d352c 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -44,6 +44,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); ManyWhelpsCounter = 0; bDeepBreath = true; @@ -93,50 +94,6 @@ public: } } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - std::ostringstream saveStream; - saveStream << "O L " << GetBossSaveData(); - str_data = saveStream.str(); - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; - } - - void Load(const char* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0; - - if (dataHead1 == 'O' && dataHead2 == 'L') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState == FAIL || tmpState > SPECIAL) - { - tmpState = NOT_STARTED; - } - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override { switch(criteria_id) diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h index 7d78bc694..1b987076d 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h +++ b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "OL" + #define OnyxiasLairScriptName "instance_onyxias_lair" enum eInstanceData diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp index a22751437..04e8f6ab9 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp @@ -33,6 +33,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); _gongPhase = 0; _firesState = 0; } @@ -70,27 +71,15 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "R D " << _gongPhase << ' ' << _firesState; - return saveStream.str(); + data >> _gongPhase; + data >> _firesState; } - void Load(const char* str) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!str) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'R' && dataHead2 == 'D') - { - loadStream >> _gongPhase; - loadStream >> _firesState; - } + data << _gongPhase << ' ' << _firesState; } private: diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h index 61a9da0b2..259c26d43 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "PassiveAI.h" +#define DataHeader "RFD" + #define RazorfenDownsScriptName "instance_razorfen_downs" enum CreatureIds diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp index fc897bc6a..a1f7e531c 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp @@ -72,6 +72,7 @@ public: { instance_ruins_of_ahnqiraj_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(NUM_ENCOUNTER); LoadObjectData(creatureData, nullptr); _rajaxWaveCounter = 0; @@ -244,49 +245,6 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "R A" << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* data) override - { - if (!data) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(data); - - char dataHead1, dataHead2; - - std::istringstream loadStream(data); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'R' && dataHead2 == 'A') - { - for (uint8 i = 0; i < NUM_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > TO_BE_DECIDED) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - void CallNextRajaxxLeader(bool announce = false) { ++_rajaxWaveCounter; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h index 91024c36b..3261b5f6a 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h @@ -20,6 +20,7 @@ #include "CreatureAIImpl.h" +#define DataHeader "RA" #define RuinsOfAhnQirajScriptName "instance_ruins_of_ahnqiraj" enum DataTypes diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp index 749a11e43..f18981d13 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp @@ -60,6 +60,7 @@ public: { instance_temple_of_ahnqiraj_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_BOSS_NUMBER); LoadObjectData(creatureData, nullptr); LoadDoorData(doorData); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h index 2527a960b..916b996cf 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h @@ -20,6 +20,7 @@ #include "CreatureAIImpl.h" +#define DataHeader "AQT" #define TempleOfAhnQirajScriptName "instance_temple_of_ahnqiraj" enum DataTypes diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index e5d31327d..d9ea29f03 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -91,30 +91,22 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "W C " << _encounters[0] << ' ' << _encounters[1] << ' ' << _encounters[2] << ' ' << _encounters[3] << ' ' << _encounters[4]; - return saveStream.str(); + data >> _encounters[0]; + data >> _encounters[1]; + data >> _encounters[2]; + data >> _encounters[3]; + data >> _encounters[4]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'W' && dataHead2 == 'C') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - loadStream >> _encounters[i]; - if (_encounters[i] == IN_PROGRESS) - _encounters[i] = NOT_STARTED; - } - } + data << _encounters[0] << ' ' + << _encounters[1] << ' ' + << _encounters[2] << ' ' + << _encounters[3] << ' ' + << _encounters[4] << ' '; } private: diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h index 9683dee87..239e1eea7 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h @@ -18,6 +18,8 @@ #ifndef DEF_WAILING_CAVERNS_H #define DEF_WAILING_CAVERNS_H +#define DataHeader "WC" + #include "CreatureAI.h" enum DataTypes diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index 877922a82..e7d4f6100 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -133,6 +133,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); GahzrillaSummoned = NOT_STARTED; PyramidPhase = 0; @@ -440,27 +441,15 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "Z F " << PyramidPhase << ' ' << GahzrillaSummoned; - return saveStream.str(); + data >> PyramidPhase; + data >> GahzrillaSummoned; } - void Load(const char* str) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!str) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'Z' && dataHead2 == 'F') - { - loadStream >> PyramidPhase; - loadStream >> GahzrillaSummoned; - } + data << PyramidPhase << ' ' << GahzrillaSummoned; } }; }; diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h index bd7ff856e..3202de53e 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h @@ -22,6 +22,8 @@ #include "CreatureAIImpl.h" #include "SpellScript.h" +#define DataHeader "ZF" + #define ZFScriptName "instance_zulfarrak" enum ZulFarrakCreatures diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h index 266175f16..2f6c474a3 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h @@ -23,6 +23,8 @@ #include "SpellAuras.h" #include "SpellScript.h" +#define DataHeader "AN" + #define AzjolNerubScriptName "instance_azjol_nerub" enum ANData diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 55fa7d7c5..551dbca7f 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -51,6 +51,7 @@ public: { instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadBossBoundaries(boundaries); LoadDoorData(doorData); @@ -102,39 +103,6 @@ public: break; } } - - bool SetBossState(uint32 id, EncounterState state) override - { - return InstanceScript::SetBossState(id, state); - } - - std::string GetSaveData() override - { - std::ostringstream saveStream; - saveStream << "A N " << GetBossSaveData(); - return saveStream.str(); - } - - void Load(const char* in) override - { - if( !in ) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'A' && dataHead2 == 'N') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h index 438ab4647..e384d0291 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h @@ -18,6 +18,7 @@ #ifndef DEF_AHNKAHET_H #define DEF_AHNKAHET_H +#define DataHeader "AK" #define AhnKahetScriptName "instance_ahnkahet" constexpr uint32 MAX_ENCOUNTER = 5; enum AhnkahetData diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp index f26e66845..c7d284979 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp @@ -31,6 +31,7 @@ public: { instance_ahnkahet_InstanceScript(Map* pMap) : InstanceScript(pMap), canSaveBossStates(false) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); teldaramSpheres.fill(NOT_STARTED); } @@ -172,62 +173,18 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - // Encounter states - saveStream << "A K " << GetBossSaveData(); - - // Extra data - saveStream << teldaramSpheres[0] << ' ' << teldaramSpheres[1]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'A' && dataHead2 == 'K') - { - // Encounter states - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - { - tmpState = NOT_STARTED; - } - - SetBossState(i, EncounterState(tmpState)); - } - - // Extra data - loadStream >> teldaramSpheres[0] >> teldaramSpheres[1]; - } - else - { - OUT_LOAD_INST_DATA_FAIL; - return; - } + data >> teldaramSpheres[0]; + data >> teldaramSpheres[1]; canSaveBossStates = true; - OUT_LOAD_INST_DATA_COMPLETE; + } + + void WriteSaveDataMore(std::ostringstream& data) override + { + data << teldaramSpheres[0] << ' ' + << teldaramSpheres[1]; } private: diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp index dcd0ee6a3..401179a6a 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp @@ -41,6 +41,7 @@ public: { instance_obsidian_sanctum_InstanceMapScript(Map* pMap) : InstanceScript(pMap), portalCount(0) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadBossBoundaries(boundaries); } @@ -204,48 +205,6 @@ public: } } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "O S " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* strIn) override - { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'O' && dataHead2 == 'S') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 temp; - loadStream >> temp; - if (temp == IN_PROGRESS) - temp = NOT_STARTED; - - SetBossState(i, static_cast(temp)); - } - } - - OUT_LOAD_INST_DATA_COMPLETE; - } - private: ObjectGuid m_uiSartharionGUID; ObjectGuid m_uiTenebronGUID; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h index 3142d5934..665d8a417 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "OS" + #define ObsidianSanctumScriptName "instance_obsidian_sanctum" enum Data : uint32 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 43b161bbf..126c0caa2 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -51,6 +51,7 @@ public: { instance_ruby_sanctum_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadBossBoundaries(boundaries); LoadDoorData(doorData); @@ -183,6 +184,13 @@ public: switch (type) { + case DATA_HALION_INTRO_DONE: + if (state != DONE) + { + SetBossState(DATA_HALION_INTRO1, NOT_STARTED); + SetBossState(DATA_HALION_INTRO2, NOT_STARTED); + } + break; case DATA_SAVIANA_RAGEFIRE: case DATA_BALTHARUS_THE_WARBORN: if (GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE) @@ -208,17 +216,6 @@ public: return true; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "R S " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - void FillInitialWorldStates(WorldPacket& data) override { data << uint32(WORLDSTATE_CORPOREALITY_MATERIAL) << uint32(50); @@ -226,46 +223,6 @@ public: data << uint32(WORLDSTATE_CORPOREALITY_TOGGLE) << uint32(0); } - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'R' && dataHead2 == 'S') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - - SetBossState(i, EncounterState(tmpState)); - } - - // Xinef: additional check - if (GetBossState(DATA_HALION_INTRO_DONE) != DONE) - { - SetBossState(DATA_HALION_INTRO1, NOT_STARTED); - SetBossState(DATA_HALION_INTRO2, NOT_STARTED); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: ObjectGuid BaltharusTheWarbornGUID; ObjectGuid XerestraszaGUID; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h index 7d8809d42..6e6f59b76 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h @@ -27,6 +27,8 @@ #include "Player.h" #include "SpellScript.h" +#define DataHeader "RS" + #define RubySanctumScriptName "instance_ruby_sanctum" enum DataTypes 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 792e1a15c..8e54fb614 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 @@ -39,7 +39,11 @@ public: struct instance_trial_of_the_champion_InstanceMapScript : public InstanceScript { - instance_trial_of_the_champion_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); } + instance_trial_of_the_champion_InstanceMapScript(Map* pMap) : InstanceScript(pMap) + { + SetHeaders(DataHeader); + Initialize(); + } bool CLEANED; TeamId TeamIdInInstance; 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 5636b1eaf..8d41e0f7e 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,6 +21,8 @@ #include "CombatAI.h" #include "CreatureAIImpl.h" +#define DataHeader "TC" + #define TrialOfTheChampionScriptName "instance_trial_of_the_champion" enum eData 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 3058e6810..70dda3ebf 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 @@ -32,7 +32,11 @@ public: struct instance_trial_of_the_crusader_InstanceMapScript : public InstanceScript { - instance_trial_of_the_crusader_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); } + instance_trial_of_the_crusader_InstanceMapScript(Map* pMap) : InstanceScript(pMap) + { + SetHeaders(DataHeader); + Initialize(); + } bool CLEANED; uint32 EncounterStatus; @@ -1589,54 +1593,32 @@ public: events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - std::ostringstream saveStream; - saveStream << "T C " << InstanceProgress; - if( instance->IsHeroic() ) - saveStream << ' ' << AttemptsLeft << ' ' << (bDedicatedInsanity ? (uint32)1 : (uint32)0) << ' ' << (bNooneDied ? (uint32)1 : (uint32)0); - str_data = saveStream.str(); - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data >> InstanceProgress; + + if (instance->IsHeroic()) + { + data >> AttemptsLeft; + uint32 temp = 0; + data >> temp; + bDedicatedInsanity = !!temp; + data >> temp; + bNooneDied = !!temp; + } } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - EncounterStatus = NOT_STARTED; - CLEANED = false; - events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + data << InstanceProgress; - if( !in ) + if (instance->IsHeroic()) { - OUT_LOAD_INST_DATA_FAIL; - return; + data << ' ' + << AttemptsLeft << ' ' + << (bDedicatedInsanity ? 1 : 0) << ' ' + << (bNooneDied ? 1 : 0); } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0; - - if( dataHead1 == 'T' && dataHead2 == 'C' ) - { - InstanceProgress = data0; - if( instance->IsHeroic() ) - { - uint32 data1 = 0, data2 = 0, data3 = 0; - loadStream >> data1 >> data2 >> data3; - AttemptsLeft = data1; - bDedicatedInsanity = !!data2; - bNooneDied = !!data3; - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; } bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h index 1acb10e7c..320f316e2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h @@ -22,6 +22,8 @@ #include "GridNotifiers.h" #include "SpellAuraEffects.h" +#define DataHeader "TCR" + #define TrialOfTheCrusaderScriptName "instance_trial_of_the_crusader" enum DataTypes diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h index d7abf5be2..43a52b2ec 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h +++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h @@ -22,6 +22,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "DTK" + #define DraktharonKeepScriptName "instance_drak_tharon_keep" enum Data diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index 83e212d20..0956ff233 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -37,6 +37,7 @@ public: { instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); } @@ -66,34 +67,6 @@ public: break; } } - - std::string GetSaveData() override - { - std::ostringstream saveStream; - saveStream << "D K " << GetBossSaveData(); - return saveStream.str(); - } - - void Load(const char* in) override - { - if( !in ) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'D' && dataHead2 == 'K') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h index 353d4c398..b8b94e438 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "GridNotifiers.h" +#define DataHeader "FOS" + #define ForgeOfSoulsScriptName "instance_forge_of_souls" enum Data diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp index 7a65bde9f..8d7a416f2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp @@ -40,6 +40,7 @@ public: { instance_forge_of_souls_InstanceScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); LoadBossBoundaries(boundaries); } @@ -200,46 +201,15 @@ public: return false; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "F S " << m_auiEncounter[0] << ' ' << m_auiEncounter[1]; - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1; - - if (dataHead1 == 'F' && dataHead2 == 'S') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << m_auiEncounter[0] << ' ' << m_auiEncounter[1]; } }; }; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index 93fd62c60..9c1d584a3 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -28,6 +28,8 @@ #include "SpellAuras.h" #include "SpellScript.h" +#define DataHeader "HOR" + #define HallsOfReflectionScriptName "instance_halls_of_reflection" enum Data 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 4b3be91d4..41660c3bc 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 @@ -126,7 +126,10 @@ public: struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript { - instance_halls_of_reflection_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {}; + instance_halls_of_reflection_InstanceMapScript(Map* pMap) : InstanceScript(pMap) + { + SetHeaders(DataHeader); + }; uint32 EncounterMask; TeamId TeamIdInInstance; @@ -705,42 +708,15 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "H R " << EncounterMask; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> EncounterMask; + BatteredHiltStatus = (EncounterMask & (1 << DATA_BATTERED_HILT)) ? BHSF_FINISHED : BHSF_NONE; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0; - - if (dataHead1 == 'H' && dataHead2 == 'R') - { - EncounterMask = data0; - BatteredHiltStatus = (EncounterMask & (1 << DATA_BATTERED_HILT)) ? BHSF_FINISHED : BHSF_NONE; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << EncounterMask; } void OnUnitDeath(Unit* unit) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index 9a26bcfe9..fe28bcc4f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -27,7 +27,10 @@ public: struct instance_pit_of_saron_InstanceScript : public InstanceScript { - instance_pit_of_saron_InstanceScript(Map* map) : InstanceScript(map) {} + instance_pit_of_saron_InstanceScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + } uint32 m_auiEncounter[MAX_ENCOUNTER]; TeamId teamIdInInstance; @@ -378,48 +381,20 @@ public: return false; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "P S " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << InstanceProgress; - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> InstanceProgress; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1, data2, data3; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3; - - if (dataHead1 == 'P' && dataHead2 == 'S') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - InstanceProgress = data3; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << InstanceProgress; } }; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index 193d89de7..64f752a24 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -21,6 +21,8 @@ #include "Chat.h" #include "CreatureAIImpl.h" +#define DataHeader "POS" + #define PitOfSaronScriptName "instance_pit_of_saron" enum DataTypes diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index 90b8932a7..ec6da02e0 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "SpellScript.h" +#define DataHeader "GD" + #define GundrakScriptName "instance_gundrak" enum Data diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 73587356b..3859e54aa 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -43,6 +43,7 @@ public: { instance_gundrak_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); } ObjectGuid _sladRanAltarGUID; @@ -197,34 +198,6 @@ public: return true; } - std::string GetSaveData() override - { - std::ostringstream saveStream; - saveStream << "G D " << GetBossSaveData(); - return saveStream.str(); - } - - void Load(const char* in) override - { - if (!in) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'G' && dataHead2 == 'D') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - } - void Update(uint32 diff) override { if (!_activateTimer) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 3e3212f17..73eac4e21 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -32,6 +32,8 @@ #include "SpellMgr.h" #include "SpellScript.h" +#define DataHeader "IC" + #define ICCScriptName "instance_icecrown_citadel" uint32 const WeeklyNPCs = 9; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 829e12173..5415a43b8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -197,6 +197,7 @@ public: LichKingRandomWhisperTimer = 120 * IN_MILLISECONDS; DarkwhisperElevatorTimer = 3000; + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadBossBoundaries(boundaries); LoadDoorData(doorData); @@ -1576,73 +1577,54 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; + data >> HeroicAttempts; - std::ostringstream saveStream; - saveStream << "I C " << GetBossSaveData() << HeroicAttempts << ' ' - << ColdflameJetsState << ' ' << BloodQuickeningState << ' ' << BloodQuickeningMinutes << ' ' << WeeklyQuestId10 << ' ' << PutricideEventProgress << ' ' - << uint32(LichKingHeroicAvailable ? 1 : 0) << ' ' << BloodPrinceTrashCount << ' ' << uint32(IsBuffAvailable ? 1 : 0); + uint32 temp = 0; + data >> temp; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* str) override - { - if (!str) + if (temp == IN_PROGRESS) { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'I' && dataHead2 == 'C') - { - for (uint32 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState == FAIL || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - - loadStream >> HeroicAttempts; - - uint32 temp = 0; - loadStream >> temp; - ColdflameJetsState = temp ? DONE : NOT_STARTED; - - loadStream >> BloodQuickeningState; - loadStream >> BloodQuickeningMinutes; - if (BloodQuickeningState == IN_PROGRESS) - { - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000); - DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); - DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); - } - - loadStream >> WeeklyQuestId10; - loadStream >> PutricideEventProgress; - PutricideEventProgress &= ~PUTRICIDE_EVENT_FLAG_TRAP_INPROGRESS; - loadStream >> temp; - LichKingHeroicAvailable = !!temp; - loadStream >> BloodPrinceTrashCount; - loadStream >> temp; - SetData(DATA_BUFF_AVAILABLE, !!temp); + ColdflameJetsState = NOT_STARTED; } else - OUT_LOAD_INST_DATA_FAIL; + { + ColdflameJetsState = temp ? DONE : NOT_STARTED; + } - OUT_LOAD_INST_DATA_COMPLETE; + data >> temp; + data >> BloodQuickeningState; + data >> BloodQuickeningMinutes; + + if (BloodQuickeningState == IN_PROGRESS) + { + Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000); + DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); + DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); + } + + data >> WeeklyQuestId10; + data >> PutricideEventProgress; + PutricideEventProgress &= ~PUTRICIDE_EVENT_FLAG_TRAP_INPROGRESS; + data >> temp; + LichKingHeroicAvailable = !!temp; + data >> BloodPrinceTrashCount; + data >> temp; + SetData(DATA_BUFF_AVAILABLE, !!temp); + } + + void WriteSaveDataMore(std::ostringstream& data) override + { + data << HeroicAttempts << ' ' + << ColdflameJetsState << ' ' + << BloodQuickeningState << ' ' + << BloodQuickeningMinutes << ' ' + << WeeklyQuestId10 << ' ' + << PutricideEventProgress << ' ' + << uint32(LichKingHeroicAvailable ? 1 : 0) << ' ' + << BloodPrinceTrashCount << ' ' + << uint32(IsBuffAvailable ? 1 : 0); } void Update(uint32 diff) override diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index fa67832af..638c294c4 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -64,6 +64,7 @@ public: { explicit instance_naxxramas_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); for (auto& i : HeiganEruption) i.clear(); @@ -1119,55 +1120,14 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "N X X " << GetBossSaveData() << ' ' << immortalAchievement; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> immortalAchievement; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2, dataHead3; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> dataHead3; - - if (dataHead1 == 'N' && dataHead2 == 'X' && dataHead3 == 'X') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS) - { - tmpState = NOT_STARTED; - } - if (i == BOSS_HORSEMAN && tmpState == DONE) - { - _horsemanLoadDoneState = true; - } - SetBossState(i, EncounterState(tmpState)); - } - loadStream >> immortalAchievement; - - OUT_LOAD_INST_DATA_COMPLETE; - } - else - { - OUT_LOAD_INST_DATA_FAIL; - } + data << immortalAchievement; } }; }; diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index ed4425b0d..dcbeb811f 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "SpellScript.h" +#define DataHeader "NAX" + #define NaxxramasScriptName "instance_naxxramas" enum Encouters diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index c9ac5e54e..b61b1d7cb 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -21,6 +21,7 @@ #include "Chat.h" #include "CreatureAIImpl.h" +#define DataHeader "EOE" #define EyeOfEternityScriptName "instance_eye_of_eternity" enum Objects diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index ed593811c..07023e5cc 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -208,51 +208,27 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - std::ostringstream saveStream; - saveStream << "E E " << EncounterStatus; - str_data = saveStream.str(); - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data >> EncounterStatus; + + switch (EncounterStatus) + { + case IN_PROGRESS: + EncounterStatus = NOT_STARTED; + break; + case DONE: + // destroy platform, hide iris + ProcessEvent(nullptr, 20158); + if (GameObject* go = instance->GetGameObject(GO_IrisGUID)) + go->SetPhaseMask(2, true); + break; + } } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if( !in ) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0; - - if( dataHead1 == 'E' && dataHead2 == 'E' ) - { - EncounterStatus = data0; - switch(EncounterStatus) - { - case IN_PROGRESS: - EncounterStatus = NOT_STARTED; - break; - case DONE: - // destroy platform, hide iris - ProcessEvent(nullptr, 20158); - if (GameObject* go = instance->GetGameObject(GO_IrisGUID)) - go->SetPhaseMask(2, true); - break; - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << EncounterStatus; } bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* source, Unit const* /*target*/, uint32 /*miscvalue1*/) override diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index 8b355d0ef..0f022848f 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -43,6 +43,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); } @@ -151,34 +152,6 @@ public: (*i)->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); return true; } - - std::string GetSaveData() override - { - std::ostringstream saveStream; - saveStream << "N E X " << GetBossSaveData(); - return saveStream.str(); - } - - void Load(const char* in) override - { - if( !in ) - return; - - char dataHead1, dataHead2, dataHead3; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> dataHead3; - if (dataHead1 == 'N' && dataHead2 == 'E' && dataHead3 == 'X') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - } }; }; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index 2b80fbf74..6186b7a71 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -26,6 +26,8 @@ #include "SpellAuras.h" #include "SpellScript.h" +#define DataHeader "NEX" + #define NexusScriptName "instance_nexus" enum eTypes diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 3c6ad2e2c..3c10df6e5 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -52,6 +52,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); CentrifugeCount = 0; bAmberVoid = false; bEmeraldVoid = false; @@ -238,43 +239,22 @@ public: return ObjectGuid::Empty; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "T O " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3] << ' ' << CentrifugeCount; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> m_auiEncounter[3]; + data >> CentrifugeCount; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if( !in ) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; - - if( dataHead1 == 'T' && dataHead2 == 'O' ) - { - loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] >> CentrifugeCount; - - for( uint8 i = 0; i < MAX_ENCOUNTER; ++i ) - if( m_auiEncounter[i] == IN_PROGRESS ) - m_auiEncounter[i] = NOT_STARTED; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << m_auiEncounter[3] << ' ' + << CentrifugeCount; } bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* source, Unit const* /*target*/, uint32 /*miscvalue1*/) override diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h index 5570d424f..69e5fd5c3 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h @@ -23,6 +23,8 @@ #include "SpellAuras.h" #include "SpellScript.h" +#define DataHeader "OC" + #define OculusScriptName "instance_oculus" Position const VerdisaPOS = { 949.056f, 1032.97f, 359.967f, 1.035795f }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h index 4bf633f9b..dac581309 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "HOL" + #define HallsOfLightningScriptName "instance_halls_of_lightning" enum HoLEvents diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp index b79fe2e03..aefa0995a 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp @@ -51,6 +51,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); volkhanAchievement = false; @@ -172,50 +173,20 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "H L " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' - << m_auiEncounter[2] << ' ' << m_auiEncounter[3] << ' ' << m_auiEncounter[4]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> m_auiEncounter[3]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1, data2, data3, data4; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4; - - if (dataHead1 == 'H' && dataHead2 == 'L') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - m_auiEncounter[3] = data3; - m_auiEncounter[4] = data4; - - for (uint8 i = 0; i < TYPE_LOKEN_INTRO; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - - OUT_LOAD_INST_DATA_COMPLETE; - } - else - OUT_LOAD_INST_DATA_FAIL; + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << m_auiEncounter[3] << ' '; } uint32 GetData(uint32 uiType) const override diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h index cd1dc614d..f027fa014 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "HOS" + #define HallsOfStoneScriptName "instance_halls_of_stone" enum Encounter diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 9af56f3b2..96f24a0f4 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -56,6 +56,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&Encounter, 0, sizeof(Encounter)); brannAchievement = false; @@ -242,42 +243,22 @@ public: SaveToDB(); } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "H O S " << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3] << ' ' << Encounter[4]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> Encounter[0]; + data >> Encounter[1]; + data >> Encounter[2]; + data >> Encounter[3]; + data >> Encounter[4]; } - void Load(const char* strIn) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2, dataHead3; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2 >> dataHead3; - - if (dataHead1 == 'H' && dataHead2 == 'O' && dataHead3 == 'S') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - loadStream >> Encounter[i]; - if( Encounter[i] == IN_PROGRESS ) - Encounter[i] = NOT_STARTED; - } - } - OUT_LOAD_INST_DATA_COMPLETE; + data << Encounter[0] << ' ' + << Encounter[1] << ' ' + << Encounter[2] << ' ' + << Encounter[3] << ' ' + << Encounter[4] << ' '; } }; }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 39054e7bf..f9acc923d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -40,6 +40,7 @@ public: instance_ulduar_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); + SetHeaders(DataHeader); // 0: 10 man difficulty // 1: 25 man difficulty m_difficulty = (pMap->Is25ManRaid() ? 0 : 1); @@ -1056,69 +1057,46 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[3]; + data >> m_auiEncounter[4]; + data >> m_auiEncounter[5]; + data >> m_auiEncounter[6]; + data >> m_auiEncounter[7]; + data >> m_auiEncounter[8]; + data >> m_auiEncounter[9]; + data >> m_auiEncounter[10]; + data >> m_auiEncounter[11]; + data >> m_auiEncounter[12]; + data >> m_auiEncounter[13]; + data >> m_auiEncounter[14]; + data >> m_conspeedatoryAttempt; + data >> m_unbrokenAchievement; + data >> m_algalonTimer; - std::ostringstream saveStream; - saveStream << "U U " << 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] << ' ' << m_auiEncounter[9] << ' ' << m_auiEncounter[10] << ' ' << m_auiEncounter[11] << ' ' - << m_auiEncounter[12] << ' ' << m_auiEncounter[13] << ' ' << m_auiEncounter[14] << ' ' << m_conspeedatoryAttempt << ' ' - << m_unbrokenAchievement << ' ' << m_algalonTimer << ' ' << C_of_Ulduar_MASK << ' ' << m_mageBarrier; + if (m_algalonTimer == TIMER_ALGALON_SUMMONED) + m_algalonTimer = TIMER_ALGALON_TO_SUMMON; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + if (m_algalonTimer && m_algalonTimer <= 60 && GetData(TYPE_ALGALON) != DONE) + { + DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, m_algalonTimer); + } + + data >> C_of_Ulduar_MASK; + data >> m_mageBarrier; } - void Load(const char* strIn) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'U' && dataHead2 == 'U') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - loadStream >> m_auiEncounter[i]; - - if (m_auiEncounter[i] == IN_PROGRESS && i != TYPE_WATCHERS) - m_auiEncounter[i] = NOT_STARTED; - } - - // Achievements - loadStream >> m_conspeedatoryAttempt; - loadStream >> m_unbrokenAchievement; - - // Algalon - loadStream >> m_algalonTimer; - if (m_algalonTimer == TIMER_ALGALON_SUMMONED) - m_algalonTimer = TIMER_ALGALON_TO_SUMMON; - - if (m_algalonTimer && m_algalonTimer <= 60 && GetData(TYPE_ALGALON) != DONE) - { - DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, m_algalonTimer); - } - - // achievement Conqueror/Champion of Ulduar - loadStream >> C_of_Ulduar_MASK; - - //Base Camp - Mage Barrier status - loadStream >> m_mageBarrier; - } - - OUT_LOAD_INST_DATA_COMPLETE; + data << 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] << ' ' << m_auiEncounter[9] << ' ' << m_auiEncounter[10] << ' ' << m_auiEncounter[11] << ' ' + << m_auiEncounter[12] << ' ' << m_auiEncounter[13] << ' ' << m_auiEncounter[14] << ' ' << m_conspeedatoryAttempt << ' ' + << m_unbrokenAchievement << ' ' << m_algalonTimer << ' ' << C_of_Ulduar_MASK << ' ' << m_mageBarrier; } void Update(uint32 diff) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index d42daffc3..186bcde78 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -24,6 +24,8 @@ #include "GridNotifiers.h" #include "GridNotifiersImpl.h" +#define DataHeader "UU" + #define UlduarScriptName "instance_ulduar" enum UlduarEncounters 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 a90be6c4f..e034b7ef1 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -318,49 +318,17 @@ public: return 0; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "U K " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << ForgeEventMask; - - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> ForgeEventMask; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1, data2, data3; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3; - - if (dataHead1 == 'U' && dataHead2 == 'K') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - ForgeEventMask = data3; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << ForgeEventMask; } bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index df43f7ff8..40101acd6 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -57,6 +57,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); SkadiHits = 0; SkadiInRange = 0; @@ -192,43 +193,20 @@ public: OUT_SAVE_INST_DATA_COMPLETE; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - std::ostringstream saveStream; - saveStream << "U P " << Encounters[0] << ' ' << Encounters[1] << ' ' << Encounters[2] << ' ' << Encounters[3]; - return saveStream.str(); + data >> Encounters[0]; + data >> Encounters[1]; + data >> Encounters[2]; + data >> Encounters[3]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0, data1, data2, data3; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3; - - if (dataHead1 == 'U' && dataHead2 == 'P') - { - Encounters[0] = data0; - Encounters[1] = data1; - Encounters[2] = data2; - Encounters[3] = data3; - - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - if (Encounters[i] == IN_PROGRESS) - Encounters[i] = NOT_STARTED; - } - else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << Encounters[0] << ' ' + << Encounters[1] << ' ' + << Encounters[2] << ' ' + << Encounters[3]; } uint32 GetData(uint32 type) const override diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h index d39a95dc1..ce37fa561 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "Opcodes.h" +#define DataHeader "UP" + #define UtgardePinnacleScriptName "instance_utgarde_pinnacle" enum Data diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 8937a3a61..b3980021b 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -44,6 +44,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); ArchavonDeath = 0; @@ -230,44 +231,20 @@ public: return false; } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "V O A " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3]; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> m_auiEncounter[3]; } - void Load(const char* in) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2, dataHead3; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> dataHead3; - - if (dataHead1 == 'V' && dataHead2 == 'O' && dataHead3 == 'A') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - { - loadStream >> m_auiEncounter[i]; - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } - - OUT_LOAD_INST_DATA_COMPLETE; - } - else - OUT_LOAD_INST_DATA_FAIL; + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << m_auiEncounter[3]; } private: diff --git a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h index bc0646be1..a8e8a047c 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h +++ b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h @@ -20,6 +20,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "VA" + #define VaultOfArchavonScriptName "instance_vault_of_archavon" enum Creatures diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 644718725..6df100c1f 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -84,6 +84,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); CLEANED = false; EncounterStatus = NOT_STARTED; @@ -637,57 +638,26 @@ public: return false; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "V H " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << uiFirstBoss << ' ' << uiSecondBoss; - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; - } - - void Load(const char* in) override + void ReadSaveDataMore(std::istringstream& data) override { EncounterStatus = NOT_STARTED; CLEANED = false; events.Reset(); events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } + data >> m_auiEncounter[0]; + data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; + data >> uiFirstBoss; + } - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint32 data0, data1, data2, data3, data4; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4; - - if (dataHead1 == 'V' && dataHead2 == 'H') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - uiFirstBoss = data3; - uiSecondBoss = data4; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - - if (m_auiEncounter[MAX_ENCOUNTER - 1] == DONE) - EncounterStatus = DONE; - } - else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + void WriteSaveDataMore(std::ostringstream& data) override + { + data << m_auiEncounter[0] << ' ' + << m_auiEncounter[1] << ' ' + << m_auiEncounter[2] << ' ' + << uiFirstBoss << ' ' + << uiSecondBoss << ' '; } }; }; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h index 85be8d76e..84d3baa14 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.h +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h @@ -22,6 +22,8 @@ #include "CreatureAIImpl.h" +#define DataHeader "VIO" + #define VioletHoldScriptName "instance_violet_hold" enum Creatures diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp index f599201bb..3294874d9 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp @@ -29,12 +29,9 @@ public: { instance_auchenai_crypts_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); } - - void Load(char const* data) override { LoadBossState(data); } - - std::string GetSaveData() override { return DataHeader + GetBossSaveData(); } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp index 55377d766..3407aacf8 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp @@ -29,12 +29,9 @@ public: { instance_mana_tombs_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(EncounterCount); } - - void Load(char const* data) override { LoadBossState(data); } - - std::string GetSaveData() override { return DataHeader + GetBossSaveData(); } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h index cc5898335..bcff3b3a0 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.h +++ b/src/server/scripts/Outland/BlackTemple/black_temple.h @@ -26,6 +26,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "BT" + #define BlackTempleScriptName "instance_black_temple" enum DataTypes diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index 1b76c37f6..13b27e4df 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -64,6 +64,7 @@ public: { instance_black_temple_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); LoadBossBoundaries(boundaries); @@ -229,49 +230,6 @@ public: return true; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B T " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'B' && dataHead2 == 'T') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: ObjectGuid ShadeOfAkamaGUID; ObjectGuid AkamaShadeGUID; 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 fb76249ca..d22cd4c47 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -42,6 +42,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); LoadDoorData(doorData); @@ -173,49 +174,6 @@ public: return 0; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "S C " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'C') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - private: ObjectGuid LadyVashjGUID; ObjectGuid ShieldGeneratorGUID[4]; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h index 1bc1ee14d..ad3b54f5f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h @@ -25,6 +25,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "SS" + #define SerpentShrineScriptName "instance_serpent_shrine" enum DataTypes diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/instance_the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/instance_the_slave_pens.cpp index c95b5ffe7..f48474783 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/instance_the_slave_pens.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/instance_the_slave_pens.cpp @@ -37,11 +37,10 @@ public: { instance_the_slave_pens_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); counter = DATA_FLAMECALLER_000; } - void Load(char const* /*data*/) override { LoadBossState(DataHeader); } - void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) diff --git a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h index aa8247b4f..91244e4af 100644 --- a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h +++ b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h @@ -22,6 +22,8 @@ #include "CreatureAIImpl.h" #include "SpellAuraEffects.h" +#define DataHeader "GL" + #define GruulsLairScriptName "instance_gruuls_lair" enum DataTypes diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp index 94d0b57be..5fbfadbcb 100644 --- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp +++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp @@ -44,6 +44,7 @@ public: { instance_gruuls_lair_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); LoadDoorData(doorData); LoadMinionData(minionData); @@ -127,49 +128,6 @@ public: return 0; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "G L " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'G' && dataHead2 == 'L') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: uint32 _addsKilled; ObjectGuid _maulgarGUID; diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h index 834fb1e8d..35c71f723 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h @@ -21,6 +21,7 @@ #include "CreatureAIImpl.h" #include "SpellScript.h" +#define DataHeader "HR" #define HellfireRampartsScriptName "instance_hellfire_ramparts" enum DataTypes diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index b20442cca..07bdac483 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -30,6 +30,7 @@ public: void Initialize() override { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); } @@ -55,36 +56,6 @@ public: return true; } - std::string GetSaveData() override - { - std::ostringstream saveStream; - saveStream << "H R " << GetBossSaveData(); - return saveStream.str(); - } - - void Load(const char* strIn) override - { - if (!strIn) - return; - - char dataHead1, dataHead2; - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'H' && dataHead2 == 'R') - { - for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - - SetBossState(i, EncounterState(tmpState)); - } - } - } - protected: ObjectGuid felIronChestGUID; }; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index 779f25b84..454479e9c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -44,6 +44,7 @@ public: { instance_magtheridons_lair_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); LoadDoorData(doorData); LoadMinionData(minionData); @@ -179,49 +180,6 @@ public: } } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "M L " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'M' && dataHead2 == 'L') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - private: ObjectGuid _magtheridonGUID; GuidSet _wardersSet; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h index 3eef4674f..9f38598fc 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h @@ -21,6 +21,8 @@ #include "CreatureAIImpl.h" #include "SpellScript.h" +#define DataHeader "ML" + #define MagtheridonsLairScriptName "instance_magtheridons_lair" enum DataTypes 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 f15a02cb0..161393275 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -186,49 +186,14 @@ public: } } - std::string GetSaveData() override + void ReadSaveDataMore(std::istringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "S H " << GetBossSaveData() << ' ' << RescueTimer; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); + data >> RescueTimer; } - void Load(const char* strIn) override + void WriteSaveDataMore(std::ostringstream& data) override { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'H') - { - for (uint8 i = 0; i < ENCOUNTER_COUNT; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - - loadStream >> RescueTimer; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << RescueTimer; } protected: diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 49c9ec9fb..ff9c4f096 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -26,7 +26,11 @@ public: struct instance_the_eye_InstanceMapScript : public InstanceScript { - instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map) {} + instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetHeaders(DataHeader); + SetBossNumber(MAX_ENCOUNTER); + } ObjectGuid ThaladredTheDarkenerGUID; ObjectGuid LordSanguinarGUID; @@ -38,11 +42,6 @@ public: ObjectGuid KaelStateRightGUID; ObjectGuid KaelStateLeftGUID; - void Initialize() override - { - SetBossNumber(MAX_ENCOUNTER); - } - void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) @@ -110,49 +109,6 @@ public: return ObjectGuid::Empty; } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "E Y " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'E' && dataHead2 == 'Y') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h index 9e359fb9e..e7f2b0625 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h @@ -24,6 +24,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "TE" + #define TheEyeScriptName "instance_the_eye" enum EyeData diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index b1a01653e..a13c4d32e 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -36,6 +36,7 @@ public: { instance_mechanar_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); LoadDoorData(doorData); @@ -192,60 +193,19 @@ public: } } - bool SetBossState(uint32 type, EncounterState state) override + void ReadSaveDataMore(std::istringstream& data) override { - if (!InstanceScript::SetBossState(type, state)) - return false; + data >> _passageEncounter; - return true; + if (_passageEncounter == ENCOUNTER_PASSAGE_DONE) + { + _passageEncounter = ENCOUNTER_PASSAGE_PHASE6; + } } - std::string GetSaveData() override + void WriteSaveDataMore(std::ostringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - // Xinef: no space needed - saveStream << "M E " << GetBossSaveData() << _passageEncounter; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'M' && dataHead2 == 'E') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - - loadStream >> _passageEncounter; - if (_passageEncounter == ENCOUNTER_PASSAGE_DONE) - _passageEncounter = ENCOUNTER_PASSAGE_PHASE6; - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data << _passageEncounter; } private: diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h index 361383f3c..bcd8fae64 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h @@ -24,6 +24,8 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" +#define DataHeader "MR" + #define MechanarScriptName "instance_mechanar" enum DataTypes diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h index e8fbe7c83..9625baee4 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h @@ -23,6 +23,8 @@ #include "Player.h" #include "SpellScript.h" +#define DataHeader "AZ" + #define ArcatrazScriptName "instance_arcatraz" enum DataTypes diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index b92cd7bfd..45492b0e5 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -35,6 +35,7 @@ public: { instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUTER); LoadDoorData(doorData); } @@ -154,49 +155,6 @@ public: return true; } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "A Z " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'A' && dataHead2 == 'Z') - { - for (uint32 i = 0; i < MAX_ENCOUTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } - protected: ObjectGuid DalliahGUID; ObjectGuid SoccothratesGUID; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp index bacbe7cfd..c7a1f4d76 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp @@ -29,59 +29,9 @@ public: { instance_the_botanica_InstanceMapScript(Map* map) : InstanceScript(map) { + SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); } - - bool SetBossState(uint32 type, EncounterState state) override - { - if (!InstanceScript::SetBossState(type, state)) - return false; - - return true; - } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B O " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* str) override - { - if (!str) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(str); - - char dataHead1, dataHead2; - - std::istringstream loadStream(str); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'B' && dataHead2 == 'O') - { - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } - } - else - OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; - } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h index 083c83272..44d4e44a8 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h @@ -23,6 +23,8 @@ #define TheBotanicaScriptName "instance_the_botanica" +#define DataHeader "BC" + enum DataTypes { DATA_COMMANDER_SARANNIS = 0,