refactor(Core/InstanceScript): refactored load and save methods (#14977)

Co-authored-by: joschiwald <736792+joschiwald@users.noreply.github.com>
This commit is contained in:
Skjalf
2023-02-12 15:53:48 -03:00
committed by GitHub
parent 5cc73e1963
commit 0dbb8c814c
126 changed files with 677 additions and 2004 deletions

View File

@@ -32,6 +32,8 @@
#include "SpellMgr.h"
#include "SpellScript.h"
#define DataHeader "IC"
#define ICCScriptName "instance_icecrown_citadel"
uint32 const WeeklyNPCs = 9;

View File

@@ -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