aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_07_29_00_world_drak_tharon_keep.sql2
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp8
-rw-r--r--src/server/scripts/Northrend/CMakeLists.txt2
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp (renamed from src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp)42
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp18
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp11
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp12
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h71
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp388
9 files changed, 241 insertions, 313 deletions
diff --git a/sql/updates/world/2013_07_29_00_world_drak_tharon_keep.sql b/sql/updates/world/2013_07_29_00_world_drak_tharon_keep.sql
new file mode 100644
index 00000000000..bfcc29c1080
--- /dev/null
+++ b/sql/updates/world/2013_07_29_00_world_drak_tharon_keep.sql
@@ -0,0 +1,2 @@
+UPDATE `instance_template` SET `script`="instance_drak_tharon_keep" WHERE `map`=600;
+UPDATE `creature_template` SET `ScriptName`="boss_king_dred" WHERE `entry`=27483;
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index ea23d439eb2..c67a0aec4be 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -468,9 +468,9 @@ void AddSC_boss_toravon();
void AddSC_instance_archavon();
void AddSC_boss_trollgore(); //Drak'Tharon Keep
void AddSC_boss_novos();
-void AddSC_boss_dred();
+void AddSC_boss_king_dred();
void AddSC_boss_tharon_ja();
-void AddSC_instance_drak_tharon();
+void AddSC_instance_drak_tharon_keep();
void AddSC_boss_cyanigosa(); //Violet Hold
void AddSC_boss_erekem();
void AddSC_boss_ichoron();
@@ -1211,9 +1211,9 @@ void AddNorthrendScripts()
AddSC_instance_archavon();
AddSC_boss_trollgore(); //Drak'Tharon Keep
AddSC_boss_novos();
- AddSC_boss_dred();
+ AddSC_boss_king_dred();
AddSC_boss_tharon_ja();
- AddSC_instance_drak_tharon();
+ AddSC_instance_drak_tharon_keep();
AddSC_boss_cyanigosa(); //Violet Hold
AddSC_boss_erekem();
AddSC_boss_ichoron();
diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt
index 674c35836a2..e04a4c43479 100644
--- a/src/server/scripts/Northrend/CMakeLists.txt
+++ b/src/server/scripts/Northrend/CMakeLists.txt
@@ -193,7 +193,7 @@ set(scripts_STAT_SRCS
Northrend/DraktharonKeep/boss_novos.cpp
Northrend/DraktharonKeep/drak_tharon_keep.h
Northrend/DraktharonKeep/boss_tharon_ja.cpp
- Northrend/DraktharonKeep/boss_dred.cpp
+ Northrend/DraktharonKeep/boss_king_dred.cpp
)
message(" -> Prepared: Northrend")
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
index 34ced66c8be..de3ee0f2bea 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
@@ -36,26 +36,20 @@ enum Spells
SPELL_REND = 13738
};
-enum Creatures
-{
- NPC_RAPTOR_1 = 26641,
- NPC_RAPTOR_2 = 26628
-};
-
enum Misc
{
ACTION_RAPTOR_KILLED = 1,
- DATA_KING_DRED = 2
+ DATA_RAPTORS_KILLED = 2
};
-class boss_dred : public CreatureScript
+class boss_king_dred : public CreatureScript
{
public:
- boss_dred() : CreatureScript("boss_dred") { }
+ boss_king_dred() : CreatureScript("boss_king_dred") { }
- struct boss_dredAI : public ScriptedAI
+ struct boss_king_dredAI : public ScriptedAI
{
- boss_dredAI(Creature* creature) : ScriptedAI(creature)
+ boss_king_dredAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
}
@@ -73,7 +67,7 @@ class boss_dred : public CreatureScript
void Reset() OVERRIDE
{
if (instance)
- instance->SetData(DATA_DRED_EVENT, NOT_STARTED);
+ instance->SetData(DATA_KING_DRED, NOT_STARTED);
uiBellowingRoarTimer = 33000;
uiGrievousBiteTimer = 20000;
@@ -86,7 +80,7 @@ class boss_dred : public CreatureScript
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_DRED_EVENT, IN_PROGRESS);
+ instance->SetData(DATA_KING_DRED, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -141,7 +135,7 @@ class boss_dred : public CreatureScript
float x, y, z;
me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f);
- me->SummonCreature(RAND(NPC_RAPTOR_1, NPC_RAPTOR_2), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000);
+ me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000);
uiRaptorCallTimer = urand(20000, 25000);
}
@@ -159,7 +153,7 @@ class boss_dred : public CreatureScript
uint32 GetData(uint32 type) const OVERRIDE
{
- if (type == DATA_KING_DRED)
+ if (type == DATA_RAPTORS_KILLED)
return raptorsKilled;
return 0;
@@ -168,13 +162,13 @@ class boss_dred : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_DRED_EVENT, DONE);
+ instance->SetData(DATA_KING_DRED, DONE);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_dredAI(creature);
+ return GetDrakTharonKeepAI<boss_king_dredAI>(creature);
}
};
@@ -217,14 +211,14 @@ class npc_drakkari_gutripper : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
- if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED)))
+ if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new npc_drakkari_gutripperAI(creature);
+ return GetDrakTharonKeepAI<npc_drakkari_gutripperAI>(creature);
}
};
@@ -267,14 +261,14 @@ class npc_drakkari_scytheclaw : public CreatureScript
void JustDied(Unit* /*killer*/) OVERRIDE
{
- if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED)))
+ if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED)))
Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new npc_drakkari_scytheclawAI(creature);
+ return GetDrakTharonKeepAI<npc_drakkari_scytheclawAI>(creature);
}
};
@@ -291,16 +285,16 @@ class achievement_king_dred : public AchievementCriteriaScript
return false;
if (Creature* Dred = target->ToCreature())
- if (Dred->AI()->GetData(DATA_KING_DRED) >= 6)
+ if (Dred->AI()->GetData(DATA_RAPTORS_KILLED) >= 6)
return true;
return false;
}
};
-void AddSC_boss_dred()
+void AddSC_boss_king_dred()
{
- new boss_dred;
+ new boss_king_dred;
new npc_drakkari_gutripper;
new npc_drakkari_scytheclaw;
new achievement_king_dred();
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 120d52a3050..785038137d9 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -32,8 +32,7 @@ enum Misc
enum Creatures
{
- NPC_CRYSTAL_CHANNEL_TARGET = 26712,
- NPC_FETID_TROLL_CORPSE = 27597,
+ NPC_FETID_TROLL_CORPSE = 27598,
NPC_RISEN_SHADOWCASTER = 27600,
NPC_HULKING_CORPSE = 27597
};
@@ -77,13 +76,11 @@ public:
struct boss_novosAI : public BossAI
{
- boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS_EVENT) {}
+ boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { }
void Reset() OVERRIDE
{
- events.Reset();
- summons.DespawnAll();
- instance->SetData(DATA_NOVOS_EVENT, NOT_STARTED);
+ _Reset();
_ohNovos = true;
_crystalHandlerCount = 0;
@@ -94,9 +91,7 @@ public:
void EnterCombat(Unit* /* victim */) OVERRIDE
{
- me->setActive(true);
- DoZoneInCombat();
- instance->SetData(DATA_NOVOS_EVENT, IN_PROGRESS);
+ _EnterCombat();
SetCrystalsStatus(true);
SetSummonerStatus(true);
@@ -148,7 +143,6 @@ public:
}
void MoveInLineOfSight(Unit* who) OVERRIDE
-
{
BossAI::MoveInLineOfSight(who);
@@ -260,7 +254,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_novosAI(creature);
+ return GetDrakTharonKeepAI<boss_novosAI>(creature);
}
};
@@ -323,7 +317,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new npc_crystal_channel_targetAI(creature);
+ return GetDrakTharonKeepAI<npc_crystal_channel_targetAI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
index 63b23eb594e..e090f3db7c0 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp
@@ -95,16 +95,13 @@ public:
uiShadowVolleyTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS);
Phase = SKELETAL;
me->SetDisplayId(me->GetNativeDisplayId());
- if (instance)
- instance->SetData(DATA_THARON_JA_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_THARON_JA, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
Talk(SAY_AGGRO);
-
- if (instance)
- instance->SetData(DATA_THARON_JA_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_THARON_JA, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -239,14 +236,14 @@ public:
DoCast(me, SPELL_ACHIEVEMENT_CHECK);
- instance->SetData(DATA_THARON_JA_EVENT, DONE);
+ instance->SetBossState(DATA_THARON_JA, DONE);
}
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_tharon_jaAI(creature);
+ return GetDrakTharonKeepAI<boss_tharon_jaAI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index f0e72d16f58..d126340ef51 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -99,16 +99,13 @@ public:
me->RemoveAura(DUNGEON_MODE(SPELL_CONSUME_AURA, H_SPELL_CONSUME_AURA));
- if (instance)
- instance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED);
+ instance->SetData(DATA_TROLLGORE, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
Talk(SAY_AGGRO);
-
- if (instance)
- instance->SetData(DATA_TROLLGORE_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -167,8 +164,7 @@ public:
lSummons.DespawnAll();
- if (instance)
- instance->SetData(DATA_TROLLGORE_EVENT, DONE);
+ instance->SetBossState(DATA_TROLLGORE, DONE);
}
uint32 GetData(uint32 type) const OVERRIDE
@@ -197,7 +193,7 @@ public:
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_trollgoreAI(creature);
+ return GetDrakTharonKeepAI<boss_trollgoreAI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
index e17cba4bccd..cc0fb9a0090 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
+++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h
@@ -15,22 +15,26 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_DRAK_THARON_H
-#define DEF_DRAK_THARON_H
-enum Data
-{
- DATA_TROLLGORE_EVENT,
- DATA_NOVOS_EVENT,
- DATA_DRED_EVENT,
- DATA_THARON_JA_EVENT,
- DATA_KING_DRED_ACHIEV
-};
-enum Data64
+#ifndef DRAK_THARON_KEEP_H_
+#define DRAK_THARON_KEEP_H_
+
+#include "Map.h"
+#include "Creature.h"
+
+#define DrakTharonKeepScriptName "instance_drak_tharon_keep"
+
+uint32 const EncounterCount = 4;
+
+enum DataTypes
{
- DATA_TROLLGORE,
- DATA_NOVOS,
- DATA_DRED,
- DATA_THARON_JA,
+ // Encounter States/Boss GUIDs
+ DATA_TROLLGORE = 0,
+ DATA_NOVOS = 1,
+ DATA_KING_DRED = 2,
+ DATA_THARON_JA = 3,
+
+ // Additional data
+ //DATA_KING_DRED_ACHIEV,
DATA_NOVOS_CRYSTAL_1,
DATA_NOVOS_CRYSTAL_2,
@@ -43,4 +47,39 @@ enum Data64
ACTION_CRYSTAL_HANDLER_DIED
};
-#endif
+
+enum CreatureIds
+{
+ NPC_TROLLGORE = 26630,
+ NPC_NOVOS = 26631,
+ NPC_KING_DRED = 27483,
+ NPC_THARON_JA = 26632,
+
+ // Novos
+ NPC_CRYSTAL_CHANNEL_TARGET = 26712,
+ NPC_CRYSTAL_HANDLER = 26627,
+
+ // King Dred
+ NPC_DRAKKARI_GUTRIPPER = 26641,
+ NPC_DRAKKARI_SCYTHECLAW = 26628
+};
+
+enum GameObjectIds
+{
+ GO_NOVOS_CRYSTAL_1 = 189299,
+ GO_NOVOS_CRYSTAL_2 = 189300,
+ GO_NOVOS_CRYSTAL_3 = 189301,
+ GO_NOVOS_CRYSTAL_4 = 189302
+};
+
+template<class AI>
+AI* GetDrakTharonKeepAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(DrakTharonKeepScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
+#endif // DRAK_THARON_KEEP_H_
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 61dfced65ed..ed7647be89c 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp
@@ -20,279 +20,185 @@
#include "InstanceScript.h"
#include "drak_tharon_keep.h"
-#define MAX_ENCOUNTER 4
-
-/* Drak'Tharon Keep encounters:
-0 - Trollgore
-1 - Novos
-2 - King Dred
-3 - Tharon Ja
-*/
-
-enum Creatures
-{
- NPC_TROLLGORE = 26630,
- NPC_NOVOS = 26631,
- NPC_KING_DRED = 27483,
- NPC_THARON_JA = 26632,
- NPC_CRYSTAL_CHANNEL_TARGET = 26712,
- NPC_CRYSTAL_HANDLER = 26627
-};
-enum GameObjects
+class instance_drak_tharon_keep : public InstanceMapScript
{
- GO_NOVOS_CRYSTAL_1 = 189299,
- GO_NOVOS_CRYSTAL_2 = 189300,
- GO_NOVOS_CRYSTAL_3 = 189301,
- GO_NOVOS_CRYSTAL_4 = 189302
-};
-enum Achievements
-{
- ACM_CRITERIA_OH_NOVOS = 7361
-};
-
-class instance_drak_tharon : public InstanceMapScript
-{
-public:
- instance_drak_tharon() : InstanceMapScript("instance_drak_tharon", 600) { }
-
- struct instance_drak_tharon_InstanceScript : public InstanceScript
- {
- instance_drak_tharon_InstanceScript(Map* map) : InstanceScript(map) {}
-
- uint8 dredAchievCounter;
-
- uint64 trollgoreGUID;
- uint64 novosGUID;
- uint64 dredGUID;
- uint64 tharonJaGUID;
-
- uint64 novosCrystalGUID1;
- uint64 novosCrystalGUID2;
- uint64 novosCrystalGUID3;
- uint64 novosCrystalGUID4;
-
- uint64 novosSummonerGUID1;
- uint64 novosSummonerGUID2;
- uint64 novosSummonerGUID3;
- uint64 novosSummonerGUID4;
-
- uint16 m_auiEncounter[MAX_ENCOUNTER];
+ public:
+ instance_drak_tharon_keep() : InstanceMapScript(DrakTharonKeepScriptName, 600) { }
- std::string str_data;
-
- void Initialize()
- {
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- dredAchievCounter = 0;
-
- trollgoreGUID = 0;
- novosGUID = 0;
- dredGUID = 0;
- tharonJaGUID = 0;
-
- novosCrystalGUID1 = 0;
- novosCrystalGUID2 = 0;
- novosCrystalGUID3 = 0;
- novosCrystalGUID4 = 0;
-
- novosSummonerGUID1 = 0;
- novosSummonerGUID2 = 0;
- novosSummonerGUID3 = 0;
- novosSummonerGUID4 = 0;
- }
-
- bool IsEncounterInProgress() const
+ struct instance_drak_tharon_keep_InstanceScript : public InstanceScript
{
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
+ instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map)
+ {
+ SetBossNumber(EncounterCount);
- return false;
- }
+ TrollgoreGUID = 0;
+ NovosGUID = 0;
+ KingDredGUID = 0;
+ TharonJaGUID = 0;
- void OnGameObjectCreate(GameObject* go)
- {
- switch (go->GetEntry())
- {
- case GO_NOVOS_CRYSTAL_1:
- novosCrystalGUID1 = go->GetGUID();
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_NOVOS_CRYSTAL_2:
- novosCrystalGUID2 = go->GetGUID();
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_NOVOS_CRYSTAL_3:
- novosCrystalGUID3 = go->GetGUID();
- go->SetGoState(GO_STATE_READY);
- break;
- case GO_NOVOS_CRYSTAL_4:
- novosCrystalGUID4 = go->GetGUID();
- go->SetGoState(GO_STATE_READY);
- break;
+ memset(NovosCrystalGUIDs, 0, 4 * sizeof(uint64));
+ memset(NovosSummonerGUIDs, 0, 4 * sizeof(uint64));
}
- }
- void OnCreatureCreate(Creature* creature)
- {
- switch (creature->GetEntry())
+ void OnCreatureCreate(Creature* creature)
{
- case NPC_TROLLGORE:
- trollgoreGUID = creature->GetGUID();
- break;
- case NPC_NOVOS:
- novosGUID = creature->GetGUID();
- break;
- case NPC_KING_DRED:
- dredGUID = creature->GetGUID();
- break;
- case NPC_THARON_JA:
- tharonJaGUID = creature->GetGUID();
- break;
- case NPC_CRYSTAL_CHANNEL_TARGET:
- InitializeNovosSummoner(creature);
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_TROLLGORE:
+ TrollgoreGUID = creature->GetGUID();
+ break;
+ case NPC_NOVOS:
+ NovosGUID = creature->GetGUID();
+ break;
+ case NPC_KING_DRED:
+ KingDredGUID = creature->GetGUID();
+ break;
+ case NPC_THARON_JA:
+ TharonJaGUID = creature->GetGUID();
+ break;
+ case NPC_CRYSTAL_CHANNEL_TARGET:
+ InitializeNovosSummoner(creature);
+ break;
+ default:
+ break;
+ }
}
- }
-
- void InitializeNovosSummoner(Creature* creature)
- {
- float x = creature->GetPositionX();
- float y = creature->GetPositionY();
- float z = creature->GetPositionZ();
-
- if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
- novosSummonerGUID1 = creature->GetGUID();
- else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
- novosSummonerGUID2 = creature->GetGUID();
- else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f)
- novosSummonerGUID3 = creature->GetGUID();
- else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f)
- novosSummonerGUID4 = creature->GetGUID();
- }
- uint64 GetData64(uint32 identifier) const OVERRIDE
- {
- switch (identifier)
+ void OnGameObjectCreate(GameObject* go)
{
- case DATA_TROLLGORE: return trollgoreGUID;
- case DATA_NOVOS: return novosGUID;
- case DATA_DRED: return dredGUID;
- case DATA_THARON_JA: return tharonJaGUID;
- case DATA_NOVOS_CRYSTAL_1: return novosCrystalGUID1;
- case DATA_NOVOS_CRYSTAL_2: return novosCrystalGUID2;
- case DATA_NOVOS_CRYSTAL_3: return novosCrystalGUID3;
- case DATA_NOVOS_CRYSTAL_4: return novosCrystalGUID4;
- case DATA_NOVOS_SUMMONER_1: return novosSummonerGUID1;
- case DATA_NOVOS_SUMMONER_2: return novosSummonerGUID2;
- case DATA_NOVOS_SUMMONER_3: return novosSummonerGUID3;
- case DATA_NOVOS_SUMMONER_4: return novosSummonerGUID4;
+ switch (go->GetEntry())
+ {
+ case GO_NOVOS_CRYSTAL_1:
+ NovosCrystalGUIDs[0] = go->GetGUID();
+ go->SetGoState(GO_STATE_READY);
+ break;
+ case GO_NOVOS_CRYSTAL_2:
+ NovosCrystalGUIDs[1] = go->GetGUID();
+ go->SetGoState(GO_STATE_READY);
+ break;
+ case GO_NOVOS_CRYSTAL_3:
+ NovosCrystalGUIDs[2] = go->GetGUID();
+ go->SetGoState(GO_STATE_READY);
+ break;
+ case GO_NOVOS_CRYSTAL_4:
+ NovosCrystalGUIDs[3] = go->GetGUID();
+ go->SetGoState(GO_STATE_READY);
+ break;
+ default:
+ break;
+ }
}
- return 0;
- }
-
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ void InitializeNovosSummoner(Creature* creature)
{
- case DATA_TROLLGORE_EVENT:
- m_auiEncounter[0] = data;
- break;
- case DATA_NOVOS_EVENT:
- m_auiEncounter[1] = data;
- break;
- case DATA_DRED_EVENT:
- m_auiEncounter[2] = data;
- break;
- case DATA_THARON_JA_EVENT:
- m_auiEncounter[3] = data;
- break;
-
- case DATA_KING_DRED_ACHIEV:
- dredAchievCounter = data;
- break;
+ float x = creature->GetPositionX();
+ float y = creature->GetPositionY();
+ float z = creature->GetPositionZ();
+
+ if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
+ NovosCrystalGUIDs[0] = creature->GetGUID();
+ else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f)
+ NovosCrystalGUIDs[1] = creature->GetGUID();
+ else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f)
+ NovosCrystalGUIDs[2] = creature->GetGUID();
+ else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f)
+ NovosCrystalGUIDs[3] = creature->GetGUID();
}
- if (data == DONE)
+ uint64 GetData64(uint32 type) const OVERRIDE
{
- SaveToDB();
+ switch (type)
+ {
+ case DATA_TROLLGORE:
+ return TrollgoreGUID;
+ case DATA_NOVOS:
+ return NovosGUID;
+ case DATA_KING_DRED:
+ return KingDredGUID;
+ case DATA_THARON_JA:
+ return TharonJaGUID;
+ case DATA_NOVOS_CRYSTAL_1:
+ case DATA_NOVOS_CRYSTAL_2:
+ case DATA_NOVOS_CRYSTAL_3:
+ case DATA_NOVOS_CRYSTAL_4:
+ return NovosCrystalGUIDs[type - DATA_NOVOS_CRYSTAL_1];
+ case DATA_NOVOS_SUMMONER_1:
+ case DATA_NOVOS_SUMMONER_2:
+ case DATA_NOVOS_SUMMONER_3:
+ case DATA_NOVOS_SUMMONER_4:
+ return NovosSummonerGUIDs[type - DATA_NOVOS_SUMMONER_1];
+ }
+
+ return 0;
}
- }
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ void OnUnitDeath(Unit* unit)
{
- case DATA_TROLLGORE_EVENT: return m_auiEncounter[0];
- case DATA_NOVOS_EVENT: return m_auiEncounter[1];
- case DATA_DRED_EVENT: return m_auiEncounter[2];
- case DATA_THARON_JA_EVENT: return m_auiEncounter[3];
- case DATA_KING_DRED_ACHIEV: return dredAchievCounter;
+ if (unit->GetEntry() == NPC_CRYSTAL_HANDLER)
+ if (Creature* novos = instance->GetCreature(NovosGUID))
+ novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED);
}
- return 0;
- }
- std::string GetSaveData()
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << "D K " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' '
- << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
+ std::string GetSaveData()
+ {
+ OUT_SAVE_INST_DATA;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ std::ostringstream saveStream;
+ saveStream << "D K " << GetBossSaveData();
- void OnUnitDeath(Unit* unit)
- {
- if (unit->GetEntry() == NPC_CRYSTAL_HANDLER)
- if (novosGUID)
- if (Creature* novos = instance->GetCreature(novosGUID))
- novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED);
- }
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
- void Load(const char* in)
- {
- if (!in)
+ void Load(char const* str)
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ 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 == 'D' && dataHead2 == 'K')
+ {
+ 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;
}
- OUT_LOAD_INST_DATA(in);
-
- char dataHead1, dataHead2;
- uint16 data0, data1, data2, data3;
+ protected:
+ uint64 TrollgoreGUID;
+ uint64 NovosGUID;
+ uint64 KingDredGUID;
+ uint64 TharonJaGUID;
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
-
- if (dataHead1 == 'D' && dataHead2 == 'K')
- {
- m_auiEncounter[0] = data0;
- m_auiEncounter[1] = data1;
- m_auiEncounter[2] = data2;
- m_auiEncounter[3] = data3;
+ uint64 NovosCrystalGUIDs[4];
+ uint64 NovosSummonerGUIDs[4];
+ };
- 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;
+ InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ {
+ return new instance_drak_tharon_keep_InstanceScript(map);
}
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_drak_tharon_InstanceScript(map);
- }
};
-void AddSC_instance_drak_tharon()
+void AddSC_instance_drak_tharon_keep()
{
- new instance_drak_tharon;
+ new instance_drak_tharon_keep();
}