aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms
diff options
context:
space:
mode:
authorVincent_Michael <Vincent_Michael@gmx.de>2013-01-13 01:25:56 +0100
committerVincent_Michael <Vincent_Michael@gmx.de>2013-01-13 01:25:56 +0100
commitb08ea19affc7818af33a0af5cbf03eae7de362a5 (patch)
tree08454bd226548e1fabb348126c7ed77bad7916f7 /src/server/scripts/EasternKingdoms
parent7fbd6d33dd9546fffe81aa241463af005b3dd7d1 (diff)
parentabe4b656c8775c2fe25649e83c135510442dc2b8 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into mmaps
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp5
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp8
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp9
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp10
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp311
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h12
12 files changed, 207 insertions, 188 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
index 047ad3f7096..da38fe9f54b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp
@@ -66,7 +66,6 @@ public:
{
if (instance->GetBossState(DATA_PYROGAURD_EMBERSEER) == IN_PROGRESS)
OpenDoors(false);
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER,NOT_STARTED);
// respawn any dead Blackhand Incarcerators
DoCast(me, SPELL_ENCAGED_EMBERSEER);
//DoCast(me, SPELL_FIRE_SHIELD_TRIGGER);
@@ -83,7 +82,6 @@ public:
void JustDied(Unit* /*killer*/)
{
- instance->SetBossState(DATA_PYROGAURD_EMBERSEER,DONE);
OpenDoors(true);
_JustDied();
}
@@ -102,7 +100,6 @@ public:
void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
-
return;
events.Update(diff);
@@ -115,11 +112,11 @@ public:
switch (eventId)
{
case EVENT_FIRENOVA:
- DoCast(me->getVictim(), SPELL_FIRENOVA);
+ DoCastVictim(SPELL_FIRENOVA);
events.ScheduleEvent(EVENT_FIRENOVA, 6 * IN_MILLISECONDS);
break;
case EVENT_FLAMEBUFFET:
- DoCast(me->getVictim(), SPELL_FLAMEBUFFET);
+ DoCastVictim(SPELL_FLAMEBUFFET);
events.ScheduleEvent(EVENT_FLAMEBUFFET, 14 * IN_MILLISECONDS);
break;
case EVENT_PYROBLAST:
@@ -129,6 +126,7 @@ public:
break;
}
}
+
DoMeleeAttackIfReady();
}
};
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
index 72a5712181e..06ba0036ef3 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp
@@ -215,7 +215,8 @@ public:
switch (eventId)
{
case EVENT_PYROGUARD_EMBERSEER:
- SetBossState(DATA_PYROGAURD_EMBERSEER,IN_PROGRESS);
+ if (GetBossState(DATA_PYROGAURD_EMBERSEER) == NOT_STARTED)
+ SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS);
break;
default:
break;
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 4e2a1b6fa19..b596ad3f609 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -58,20 +58,21 @@ class boss_darkmaster_gandling : public CreatureScript
void Reset()
{
+ _Reset();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
void JustDied(Unit* /*killer*/)
{
- if (instance)
- instance->SetData(DATA_DARKMASTERGANDLING, DONE);
+ _JustDied();
if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING)))
gate->SetGoState(GO_STATE_ACTIVE);
}
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_ARCANEMISSILES, 4500);
events.ScheduleEvent(EVENT_SHADOWSHIELD, 12000);
events.ScheduleEvent(EVENT_CURSE, 2000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
index fc54b90ab45..b2a91f4efe4 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp
@@ -53,16 +53,9 @@ class boss_doctor_theolen_krastinov : public CreatureScript
{
boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_DOCTORTHEOLENKRASTINOV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_REND, 8000);
events.ScheduleEvent(EVENT_BACKHAND, 9000);
events.ScheduleEvent(EVENT_FRENZY, 1000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
index 64d827e41f1..d09a5ae96c9 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp
@@ -50,16 +50,9 @@ class boss_illucia_barov : public CreatureScript
{
boss_illuciabarovAI(Creature* creature) : BossAI(creature,DATA_LADYILLUCIABAROV) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LADYILLUCIABAROV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_CURSEOFAGONY, 18000);
events.ScheduleEvent(EVENT_SHADOWSHOCK, 9000);
events.ScheduleEvent(EVENT_SILENCE, 5000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
index 1f55666acc3..5036158cae2 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp
@@ -57,18 +57,14 @@ class boss_instructor_malicia : public CreatureScript
void Reset()
{
+ _Reset();
FlashCounter = 0;
TouchCounter = 0;
}
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_INSTRUCTORMALICIA, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_CALLOFGRAVES, 4000);
events.ScheduleEvent(EVENT_CORRUPTION, 8000);
events.ScheduleEvent(EVENT_RENEW, 32000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index 9d8f448964c..32c16a1c70c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -103,8 +103,7 @@ class boss_kirtonos_the_herald : public CreatureScript
brazier->ResetDoorOrButton();
brazier->SetGoState(GO_STATE_READY);
}
- if (instance)
- instance->SetData(DATA_KIRTONOS, DONE);
+ _JustDied();
}
void EnterEvadeMode()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
index c246e781bd8..e8fb4324d00 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp
@@ -48,17 +48,13 @@ class boss_lord_alexei_barov : public CreatureScript
void Reset()
{
+ _Reset();
me->LoadCreaturesAddon();
}
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LORDALEXEIBAROV, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_IMMOLATE, 7000);
events.ScheduleEvent(EVENT_VEILOFSHADOW, 15000);
}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
index 2239194a5e3..d06189d5054 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
@@ -50,16 +50,9 @@ class boss_lorekeeper_polkelt : public CreatureScript
{
boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_LOREKEEPERPOLKELT, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_VOLATILEINFECTION, 38000);
events.ScheduleEvent(EVENT_DARKPLAGUE, 8000);
events.ScheduleEvent(EVENT_CORROSIVEACID, 45000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
index e2e04ae7b81..99b9fba958c 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp
@@ -42,7 +42,6 @@ enum Events
EVENT_KNOCKAWAY = 4
};
-
class boss_the_ravenian : public CreatureScript
{
public: boss_the_ravenian() : CreatureScript("boss_the_ravenian") { }
@@ -51,16 +50,9 @@ class boss_the_ravenian : public CreatureScript
{
boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) {}
- void Reset() {}
-
- void JustDied(Unit* /*killer*/)
- {
- if (instance)
- instance->SetData(DATA_THERAVENIAN, DONE);
- }
-
void EnterCombat(Unit* /*who*/)
{
+ _EnterCombat();
events.ScheduleEvent(EVENT_TRAMPLE, 24000);
events.ScheduleEvent(EVENT_CLEAVE, 15000);
events.ScheduleEvent(EVENT_SUNDERINCLEAVE, 40000);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index d97372d4379..0da31fbe428 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -15,160 +15,215 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-Name: Instance_Scholomance
-%Complete: 100
-Comment:
-Category: Scholomance
-EndScriptData */
-
#include "ScriptMgr.h"
#include "InstanceScript.h"
-#include "scholomance.h"
#include "Player.h"
+#include "scholomance.h"
-enum CreatureId
-{
- NPC_DARKMASTER_GANDLING = 1853
-};
-
-Position const GandlingLoc = {180.7712f, -5.428603f, 75.57024f, 1.291544f};
+Position const GandlingLoc = { 180.7712f, -5.428603f, 75.57024f, 1.291544f };
class instance_scholomance : public InstanceMapScript
{
-public:
- instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { }
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const
- {
- return new instance_scholomance_InstanceMapScript(map);
- }
-
- struct instance_scholomance_InstanceMapScript : public InstanceScript
- {
- instance_scholomance_InstanceMapScript(Map* map) : InstanceScript(map) {}
-
- //Lord Alexei Barov, Doctor Theolen Krastinov, The Ravenian, Lorekeeper Polkelt, Instructor Malicia and the Lady Illucia Barov.
- uint32 m_auiEncounter[MAX_ENCOUNTER];
- uint64 GateKirtonosGUID;
- uint64 GateGandlingGUID;
- uint64 GateMiliciaGUID;
- uint64 GateTheolenGUID;
- uint64 GatePolkeltGUID;
- uint64 GateRavenianGUID;
- uint64 GateBarovGUID;
- uint64 GateIlluciaGUID;
- uint64 BrazierOfTheHeraldGUID;
-
- void Initialize()
+ public:
+ instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { }
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const
{
- GateKirtonosGUID = 0;
- GateGandlingGUID = 0;
- GateMiliciaGUID = 0;
- GateTheolenGUID = 0;
- GatePolkeltGUID = 0;
- GateRavenianGUID = 0;
- GateBarovGUID = 0;
- GateIlluciaGUID = 0;
- BrazierOfTheHeraldGUID = 0;
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- m_auiEncounter[i] = NOT_STARTED;
+ return new instance_scholomance_InstanceMapScript(map);
}
- void OnGameObjectCreate(GameObject* go)
+ struct instance_scholomance_InstanceMapScript : public InstanceScript
{
- switch (go->GetEntry())
+ instance_scholomance_InstanceMapScript(Map* map) : InstanceScript(map)
{
- case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
- case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
- case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
- case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
- case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
- case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
- case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
- case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
- case GO_BRAZIER_OF_THE_HERALD: BrazierOfTheHeraldGUID = go->GetGUID(); break;
+ SetBossNumber(EncounterCount);
+ GateKirtonosGUID = 0;
+ GateGandlingGUID = 0;
+ GateMiliciaGUID = 0;
+ GateTheolenGUID = 0;
+ GatePolkeltGUID = 0;
+ GateRavenianGUID = 0;
+ GateBarovGUID = 0;
+ GateIlluciaGUID = 0;
+ BrazierOfTheHeraldGUID = 0;
}
- }
- void SetData(uint32 type, uint32 data)
- {
- switch (type)
+ void OnGameObjectCreate(GameObject* go)
{
- case DATA_LORDALEXEIBAROV:
- m_auiEncounter[DATA_LORDALEXEIBAROV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_DOCTORTHEOLENKRASTINOV:
- m_auiEncounter[DATA_DOCTORTHEOLENKRASTINOV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_THERAVENIAN:
- m_auiEncounter[DATA_THERAVENIAN] = data;
- CheckToSpawnGandling();
- break;
- case DATA_LOREKEEPERPOLKELT:
- m_auiEncounter[DATA_LOREKEEPERPOLKELT] = data;
- CheckToSpawnGandling();
- break;
- case DATA_INSTRUCTORMALICIA:
- m_auiEncounter[DATA_INSTRUCTORMALICIA] = data;
- CheckToSpawnGandling();
- break;
- case DATA_LADYILLUCIABAROV:
- m_auiEncounter[DATA_LADYILLUCIABAROV] = data;
- CheckToSpawnGandling();
- break;
- case DATA_DARKMASTERGANDLING:
- m_auiEncounter[DATA_DARKMASTERGANDLING] = data;
- break;
- case DATA_KIRTONOS:
- m_auiEncounter[DATA_KIRTONOS] = data;
- break;
+ switch (go->GetEntry())
+ {
+ case GO_GATE_KIRTONOS:
+ GateKirtonosGUID = go->GetGUID();
+ break;
+ case GO_GATE_GANDLING:
+ GateGandlingGUID = go->GetGUID();
+ break;
+ case GO_GATE_MALICIA:
+ GateMiliciaGUID = go->GetGUID();
+ break;
+ case GO_GATE_THEOLEN:
+ GateTheolenGUID = go->GetGUID();
+ break;
+ case GO_GATE_POLKELT:
+ GatePolkeltGUID = go->GetGUID();
+ break;
+ case GO_GATE_RAVENIAN:
+ GateRavenianGUID = go->GetGUID();
+ break;
+ case GO_GATE_BAROV:
+ GateBarovGUID = go->GetGUID();
+ break;
+ case GO_GATE_ILLUCIA:
+ GateIlluciaGUID = go->GetGUID();
+ break;
+ case GO_BRAZIER_OF_THE_HERALD:
+ BrazierOfTheHeraldGUID = go->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- uint32 GetData(uint32 type) const
- {
- return type == (m_auiEncounter[DATA_LORDALEXEIBAROV] == DONE) && (m_auiEncounter[DATA_DOCTORTHEOLENKRASTINOV] == DONE) &&
- (m_auiEncounter[DATA_THERAVENIAN] == DONE) && (m_auiEncounter[DATA_LOREKEEPERPOLKELT] == DONE) &&
- (m_auiEncounter[DATA_INSTRUCTORMALICIA] == DONE) && (m_auiEncounter[DATA_LADYILLUCIABAROV] == DONE)
- ? IN_PROGRESS : 0;
- }
+ bool SetBossState(uint32 type, EncounterState state)
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_LORDALEXEIBAROV:
+ case DATA_DOCTORTHEOLENKRASTINOV:
+ case DATA_THERAVENIAN:
+ case DATA_LOREKEEPERPOLKELT:
+ case DATA_INSTRUCTORMALICIA:
+ case DATA_LADYILLUCIABAROV:
+ CheckToSpawnGandling();
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- uint64 GetData64(uint32 type) const
- {
- switch (type)
+ uint64 GetData64(uint32 type) const
{
- case GO_GATE_KIRTONOS: return GateKirtonosGUID; break;
- case GO_GATE_GANDLING: return GateGandlingGUID; break;
- case GO_GATE_MALICIA: return GateMiliciaGUID; break;
- case GO_GATE_THEOLEN: return GateTheolenGUID; break;
- case GO_GATE_POLKELT: return GatePolkeltGUID; break;
- case GO_GATE_RAVENIAN: return GateRavenianGUID; break;
- case GO_GATE_BAROV: return GateBarovGUID; break;
- case GO_GATE_ILLUCIA: return GateIlluciaGUID; break;
- case GO_BRAZIER_OF_THE_HERALD: return BrazierOfTheHeraldGUID; break;
+ switch (type)
+ {
+ case GO_GATE_KIRTONOS:
+ return GateKirtonosGUID;
+ case GO_GATE_GANDLING:
+ return GateGandlingGUID;
+ case GO_GATE_MALICIA:
+ return GateMiliciaGUID;
+ case GO_GATE_THEOLEN:
+ return GateTheolenGUID;
+ case GO_GATE_POLKELT:
+ return GatePolkeltGUID;
+ case GO_GATE_RAVENIAN:
+ return GateRavenianGUID;
+ case GO_GATE_BAROV:
+ return GateBarovGUID;
+ case GO_GATE_ILLUCIA:
+ return GateIlluciaGUID;
+ case GO_BRAZIER_OF_THE_HERALD:
+ return BrazierOfTheHeraldGUID;
+ default:
+ break;
+ }
+
+ return 0;
}
- return 0;
- }
+ bool CheckPreBosses(uint32 bossId) const
+ {
+ switch (bossId)
+ {
+ case DATA_DARKMASTERGANDLING:
+ if (GetBossState(DATA_LORDALEXEIBAROV) != DONE)
+ return false;
+ if (GetBossState(DATA_DOCTORTHEOLENKRASTINOV) != DONE)
+ return false;
+ if (GetBossState(DATA_THERAVENIAN) != DONE)
+ return false;
+ if (GetBossState(DATA_LOREKEEPERPOLKELT) != DONE)
+ return false;
+ if (GetBossState(DATA_INSTRUCTORMALICIA) != DONE)
+ return false;
+ if (GetBossState(DATA_LADYILLUCIABAROV) != DONE)
+ return false;
+ if (GetBossState(DATA_DARKMASTERGANDLING) == DONE)
+ return false;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+ }
- void CheckToSpawnGandling()
- {
- if (GetData(DATA_DARKMASTERGANDLING) == IN_PROGRESS)
+ void CheckToSpawnGandling()
+ {
+ if (CheckPreBosses(DATA_DARKMASTERGANDLING))
+ instance->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc);
+ }
+
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "S O " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
+
+ void Load(const char* str)
{
- Map::PlayerList const &PlayerList = instance->GetPlayers();
- if (PlayerList.isEmpty())
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
return;
+ }
+
+ OUT_LOAD_INST_DATA(str);
+
+ char dataHead1, dataHead2;
+
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
- Map::PlayerList::const_iterator i = PlayerList.begin();
- if (Player* i_pl = i->getSource())
- i_pl->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc);
+ if (dataHead1 == 'S' && dataHead2 == 'O')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
+
+ CheckToSpawnGandling();
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- }
- };
+
+ protected:
+ uint64 GateKirtonosGUID;
+ uint64 GateGandlingGUID;
+ uint64 GateMiliciaGUID;
+ uint64 GateTheolenGUID;
+ uint64 GatePolkeltGUID;
+ uint64 GateRavenianGUID;
+ uint64 GateBarovGUID;
+ uint64 GateIlluciaGUID;
+ uint64 BrazierOfTheHeraldGUID;
+ };
};
void AddSC_instance_scholomance()
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index 2d9c8c7bbe7..5c38cc39e3d 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -18,6 +18,8 @@
#ifndef DEF_SCHOLOMANCE_H
#define DEF_SCHOLOMANCE_H
+uint32 const EncounterCount = 8;
+
enum DataTypes
{
DATA_DOCTORTHEOLENKRASTINOV = 0,
@@ -30,6 +32,11 @@ enum DataTypes
DATA_KIRTONOS = 7
};
+enum CreatureIds
+{
+ NPC_DARKMASTER_GANDLING = 1853
+};
+
enum GameobjectIds
{
GO_GATE_KIRTONOS = 175570,
@@ -43,9 +50,4 @@ enum GameobjectIds
GO_BRAZIER_OF_THE_HERALD = 175564
};
-enum Misc
-{
- MAX_ENCOUNTER = 8
-};
-
#endif