diff options
-rw-r--r-- | sql/updates/world/2013_07_29_00_world_drak_tharon_keep.sql | 2 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptLoader.cpp | 8 | ||||
-rw-r--r-- | src/server/scripts/Northrend/CMakeLists.txt | 2 | ||||
-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.cpp | 18 | ||||
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp | 12 | ||||
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h | 71 | ||||
-rw-r--r-- | src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp | 388 |
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(); } |