aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp70
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h32
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