diff options
author | Subv <s.v.h21@hotmail.com> | 2012-11-18 20:33:03 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-11-18 20:33:03 -0500 |
commit | bbe146d1048103fb3cc7d491f33231a12ba46364 (patch) | |
tree | be9651629fe72e604352c9338b43a940891a42fa /src | |
parent | 27cf98dac126631a0ea67c1d3c02ee74e82c8294 (diff) |
Scripts/Instances: Save Magister's Terrace door (and statue) state.
Closes #6889
Diffstat (limited to 'src')
4 files changed, 86 insertions, 51 deletions
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index e21a84d9499..30f28175306 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -140,12 +140,7 @@ public: Phase = 0; if (instance) - { instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED); - instance->HandleGameObject(instance->GetData64(DATA_KAEL_DOOR), true); - // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here) - // Small door opened after event are expected to be closed by default - } } void JustDied(Unit* /*killer*/) @@ -155,12 +150,11 @@ public: if (!instance) return; - // Open the encounter door - instance->HandleGameObject(instance->GetData64(DATA_KAEL_DOOR), true); + instance->SetData(DATA_KAELTHAS_EVENT, DONE); // Enable the Translocation Orb Exit if (GameObject* escapeOrb = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_ESCAPE_ORB))) - escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) @@ -173,9 +167,8 @@ public: { if (!instance) return; - - //Close the encounter door, open it in JustDied/Reset - instance->HandleGameObject(instance->GetData64(DATA_KAEL_DOOR), false); + + instance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS); } void MoveInLineOfSight(Unit* who) @@ -369,14 +362,10 @@ public: FirstGravityLapse = false; if (instance) - { - instance->HandleGameObject(instance->GetData64(DATA_KAEL_STATUE_LEFT), true); - instance->HandleGameObject(instance->GetData64(DATA_KAEL_STATUE_RIGHT), true); - } - }else - { - DoScriptText(SAY_RECAST_GRAVITY, me); + instance->SetData(DATA_KAELTHAS_STATUES, 1); } + else + DoScriptText(SAY_RECAST_GRAVITY, me); DoCast(me, SPELL_GRAVITY_LAPSE_INITIAL); GravityLapseTimer = 2000 + diff;// Don't interrupt the visual spell diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 430bbb79bde..74d1b5b9f1b 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -115,10 +115,6 @@ public: } } - instance->HandleGameObject(instance->GetData64(DATA_SELIN_ENCOUNTER_DOOR), true); - // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here) - // Small door opened after event are expected to be closed by default - // Set Inst data for encounter instance->SetData(DATA_SELIN_EVENT, NOT_STARTED); } else sLog->outError(LOG_FILTER_TSCR, ERROR_INST_DATA); @@ -196,10 +192,8 @@ public: void EnterCombat(Unit* /*who*/) { DoScriptText(SAY_AGGRO, me); - if (instance) - instance->HandleGameObject(instance->GetData64(DATA_SELIN_ENCOUNTER_DOOR), false); - //Close the encounter door, open it in JustDied/Reset + instance->SetData(DATA_SELIN_EVENT, IN_PROGRESS); } void KilledUnit(Unit* /*victim*/) @@ -237,8 +231,6 @@ public: return; instance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete! - instance->HandleGameObject(instance->GetData64(DATA_SELIN_ENCOUNTER_DOOR), true); // Open the encounter door - instance->HandleGameObject(instance->GetData64(DATA_SELIN_DOOR), true); // Open the door leading further in ShatterRemainingCrystals(); } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index da8b24c3985..da15f9020da 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -84,6 +84,7 @@ public: uint64 KaelDoorGUID; uint64 KaelStatue[2]; uint64 EscapeOrbGUID; + uint32 StatuesState; bool InitializedItr; @@ -105,6 +106,7 @@ public: KaelStatue[0] = 0; KaelStatue[1] = 0; EscapeOrbGUID = 0; + StatuesState = 0; InitializedItr = false; } @@ -142,21 +144,35 @@ public: switch (identifier) { case DATA_SELIN_EVENT: + if (data == DONE) + { + HandleGameObject(SelinEncounterDoorGUID, true); + HandleGameObject(SelinDoorGUID, true); + } + else if (data == IN_PROGRESS) + HandleGameObject(SelinEncounterDoorGUID, false); + else if (data == NOT_STARTED) + HandleGameObject(SelinEncounterDoorGUID, true); + Encounter[0] = data; break; case DATA_VEXALLUS_EVENT: if (data == DONE) - DoUseDoorOrButton(VexallusDoorGUID); + HandleGameObject(VexallusDoorGUID, true); Encounter[1] = data; break; case DATA_DELRISSA_EVENT: if (data == DONE) - DoUseDoorOrButton(DelrissaDoorGUID); + HandleGameObject(DelrissaDoorGUID, true); if (data == IN_PROGRESS) DelrissaDeathCount = 0; Encounter[2] = data; break; case DATA_KAELTHAS_EVENT: + if (data == NOT_STARTED || data == DONE) + HandleGameObject(KaelDoorGUID, true); + else if (data == IN_PROGRESS) + HandleGameObject(KaelDoorGUID, false); Encounter[3] = data; break; case DATA_DELRISSA_DEATH_COUNT: @@ -165,7 +181,14 @@ public: else DelrissaDeathCount = 0; break; + case DATA_KAELTHAS_STATUES: + HandleGameObject(KaelStatue[0], data); + HandleGameObject(KaelStatue[1], data); + StatuesState = data; + break; } + + SaveToDB(); } void OnCreatureCreate(Creature* creature) @@ -215,6 +238,44 @@ public: } } + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3] << ' ' << StatuesState; + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(const char* str) + { + 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); + } + + loadStream >> StatuesState; + SetData(DATA_KAELTHAS_STATUES, StatuesState); + + OUT_LOAD_INST_DATA_COMPLETE; + } + uint64 GetData64(uint32 identifier) { switch (identifier) @@ -225,10 +286,6 @@ public: return DelrissaGUID; case DATA_VEXALLUS_DOOR: return VexallusDoorGUID; - case DATA_SELIN_DOOR: - return SelinDoorGUID; - case DATA_SELIN_ENCOUNTER_DOOR: - return SelinEncounterDoorGUID; case DATA_DELRISSA_DOOR: return DelrissaDoorGUID; case DATA_KAEL_DOOR: @@ -239,7 +296,6 @@ public: return KaelStatue[1]; case DATA_ESCAPE_ORB: return EscapeOrbGUID; - case DATA_FEL_CRYSTAL: { if (FelCrystals.empty()) diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index 660e58d325a..540d7b52393 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -23,28 +23,26 @@ enum Data { - DATA_SELIN_EVENT = 0, - DATA_VEXALLUS_EVENT = 1, - DATA_DELRISSA_EVENT = 2, - DATA_KAELTHAS_EVENT = 3, + DATA_SELIN_EVENT, + DATA_VEXALLUS_EVENT, + DATA_DELRISSA_EVENT, + DATA_KAELTHAS_EVENT, - DATA_SELIN = 4, - DATA_FEL_CRYSTAL = 5, - DATA_FEL_CRYSTAL_SIZE = 6, + DATA_SELIN, + DATA_FEL_CRYSTAL, + DATA_FEL_CRYSTAL_SIZE, - DATA_VEXALLUS_DOOR = 7, - DATA_SELIN_DOOR = 8, - DATA_DELRISSA = 9, - DATA_DELRISSA_DOOR = 10, - DATA_SELIN_ENCOUNTER_DOOR = 11, + DATA_VEXALLUS_DOOR, + DATA_DELRISSA, + DATA_DELRISSA_DOOR, - DATA_KAEL_DOOR = 12, - DATA_KAEL_STATUE_LEFT = 13, - DATA_KAEL_STATUE_RIGHT = 14, + DATA_KAEL_DOOR, + DATA_KAEL_STATUE_LEFT, + DATA_KAEL_STATUE_RIGHT, - DATA_DELRISSA_DEATH_COUNT = 15, + DATA_DELRISSA_DEATH_COUNT, - DATA_ESCAPE_ORB = 16 + DATA_ESCAPE_ORB }; #endif |