aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h60
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp8
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp13
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp297
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp1
6 files changed, 196 insertions, 189 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
index 5970a85cc38..ea0382cdd80 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h
@@ -15,24 +15,56 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef DEF_AZJOL_NERUB_H
-#define DEF_AZJOL_NERUB_H
+#ifndef AZJOL_NERUB_H_
+#define AZJOL_NERUB_H_
-enum Data64
+#include "Map.h"
+#include "Creature.h"
+
+#define AzjolNerubScriptName "instance_azjol_nerub"
+
+uint32 const EncounterCount = 3;
+
+enum DataTypes
+{
+ // Encounter States/Boss GUIDs
+ DATA_KRIKTHIR_THE_GATEWATCHER = 0,
+ DATA_HADRONOX = 1,
+ DATA_ANUBARAK = 2,
+
+ // Additional Data
+ DATA_WATCHER_GASHRA = 3,
+ DATA_WATCHER_SILTHIK = 4,
+ DATA_WATCHER_NARJIL = 5
+};
+
+enum CreatureIds
{
- DATA_KRIKTHIR_THE_GATEWATCHER,
- DATA_HADRONOX,
- DATA_ANUBARAK,
- DATA_WATCHER_GASHRA,
- DATA_WATCHER_SILTHIK,
- DATA_WATCHER_NARJIL
+ NPC_KRIKTHIR = 28684,
+ NPC_HADRONOX = 28921,
+ NPC_ANUBARAK = 29120,
+
+ NPC_WATCHER_NARJIL = 28729,
+ NPC_WATCHER_GASHRA = 28730,
+ NPC_WATCHER_SILTHIK = 28731
};
-enum Data
+enum GameObjectIds
{
- DATA_KRIKTHIR_THE_GATEWATCHER_EVENT,
- DATA_HADRONOX_EVENT,
- DATA_ANUBARAK_EVENT
+ GO_KRIKTHIR_DOOR = 192395,
+ GO_ANUBARAK_DOOR_1 = 192396,
+ GO_ANUBARAK_DOOR_2 = 192397,
+ GO_ANUBARAK_DOOR_3 = 192398
};
-#endif
+template<class AI>
+AI* GetAzjolNerubAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(AzjolNerubScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
+#endif // AZJOL_NERUB_H_
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index 05e758f5cf9..81530265617 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -132,7 +132,7 @@ public:
if (instance)
{
- instance->SetData(DATA_ANUBARAK_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_ANUBARAK, NOT_STARTED);
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
}
@@ -165,7 +165,7 @@ public:
void DelayEventStart()
{
if (instance)
- instance->SetData(DATA_ANUBARAK_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_ANUBARAK, IN_PROGRESS);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -336,7 +336,7 @@ public:
Talk(SAY_DEATH);
Summons.DespawnAll();
if (instance)
- instance->SetData(DATA_ANUBARAK_EVENT, DONE);
+ instance->SetBossState(DATA_ANUBARAK, DONE);
}
void KilledUnit(Unit* victim) OVERRIDE
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index 6b556f4fe4d..1664a1375ae 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -84,8 +84,8 @@ public:
uiDoorsTimer = urand(20*IN_MILLISECONDS, 30*IN_MILLISECONDS);
uiCheckDistanceTimer = 2*IN_MILLISECONDS;
- if (instance && (instance->GetData(DATA_HADRONOX_EVENT) != DONE && !bFirstTime))
- instance->SetData(DATA_HADRONOX_EVENT, FAIL);
+ if (instance && (instance->GetBossState(DATA_HADRONOX) != DONE && !bFirstTime))
+ instance->SetBossState(DATA_HADRONOX, FAIL);
bFirstTime = false;
}
@@ -103,13 +103,13 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_HADRONOX_EVENT, DONE);
+ instance->SetBossState(DATA_HADRONOX, DONE);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_HADRONOX_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_HADRONOX, IN_PROGRESS);
me->SetInCombatWithZone();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 2222d16f68b..c5e40052a9d 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -105,7 +105,7 @@ public:
uiCurseFatigueTimer = 12*IN_MILLISECONDS;
if (instance)
- instance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
@@ -115,7 +115,7 @@ public:
uiSummonTimer = 15*IN_MILLISECONDS;
if (instance)
- instance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, IN_PROGRESS);
}
void Summon()
@@ -176,7 +176,7 @@ public:
Talk(SAY_DEATH);
if (instance)
- instance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE);
+ instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, DONE);
}
void KilledUnit(Unit* victim) OVERRIDE
@@ -537,15 +537,14 @@ class achievement_watch_him_die : public AchievementCriteriaScript
return false;
InstanceScript* instance = target->GetInstanceScript();
- Creature* Watcher[3];
if (!instance)
return false;
for (uint8 n = 0; n < 3; ++n)
{
- Watcher[n] = ObjectAccessor::GetCreature(*target, instance->GetData64(DATA_WATCHER_GASHRA + n));
- if (Watcher[n] && !Watcher[n]->IsAlive())
- return false;
+ if (Creature* watcher = ObjectAccessor::GetCreature(*target, instance->GetData64(DATA_WATCHER_GASHRA + n)))
+ if (!watcher->IsAlive())
+ return false;
}
return true;
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
index 261a2748579..b20a28b7a75 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp
@@ -19,196 +19,171 @@
#include "InstanceScript.h"
#include "azjol_nerub.h"
-#define MAX_ENCOUNTER 3
-
-/* Azjol Nerub encounters:
-0 - Krik'thir the Gatewatcher
-1 - Hadronox
-2 - Anub'arak
-*/
+DoorData const doorData[] =
+{
+ { GO_KRIKTHIR_DOOR, DATA_KRIKTHIR_THE_GATEWATCHER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_ANUBARAK_DOOR_1, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_ANUBARAK_DOOR_2, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_ANUBARAK_DOOR_3, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+};
class instance_azjol_nerub : public InstanceMapScript
{
-public:
- instance_azjol_nerub() : InstanceMapScript("instance_azjol_nerub", 601) { }
-
- struct instance_azjol_nerub_InstanceScript : public InstanceScript
- {
- instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map) {}
-
- uint64 uiKrikthir;
- uint64 uiHadronox;
- uint64 uiAnubarak;
- uint64 uiWatcherGashra;
- uint64 uiWatcherSilthik;
- uint64 uiWatcherNarjil;
- uint64 uiAnubarakDoor[3];
-
- uint64 uiKrikthirDoor;
-
- uint32 auiEncounter[MAX_ENCOUNTER];
-
- void Initialize() OVERRIDE
- {
- memset(&auiEncounter, 0, sizeof(auiEncounter));
- memset(&uiAnubarakDoor, 0, sizeof(uiAnubarakDoor));
-
- uiKrikthir = 0;
- uiHadronox = 0;
- uiAnubarak = 0;
- uiWatcherGashra = 0;
- uiWatcherSilthik = 0;
- uiWatcherNarjil = 0;
- uiKrikthirDoor = 0;
- }
+ public:
+ instance_azjol_nerub() : InstanceMapScript(AzjolNerubScriptName, 601) { }
- bool IsEncounterInProgress() const OVERRIDE
+ struct instance_azjol_nerub_InstanceScript : public InstanceScript
{
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (auiEncounter[i] == IN_PROGRESS)
- return true;
-
- return false;
- }
-
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map)
{
- case 28684: uiKrikthir = creature->GetGUID(); break;
- case 28921: uiHadronox = creature->GetGUID(); break;
- case 29120: uiAnubarak = creature->GetGUID(); break;
- case 28730: uiWatcherGashra = creature->GetGUID(); break;
- case 28731: uiWatcherSilthik = creature->GetGUID(); break;
- case 28729: uiWatcherNarjil = creature->GetGUID(); break;
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
+
+ KrikthirGUID = 0;
+ HadronoxGUID = 0;
+ AnubarakGUID = 0;
+ WatcherGashraGUID = 0;
+ WatcherSilthikGUID = 0;
+ WatcherNarjilGUID = 0;
}
- }
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
+ void OnCreatureCreate(Creature* creature) OVERRIDE
{
- case 192395:
- uiKrikthirDoor = go->GetGUID();
- if (auiEncounter[0] == DONE)
- HandleGameObject(0, true, go);
- break;
- case 192396:
- uiAnubarakDoor[0] = go->GetGUID();
- break;
- case 192397:
- uiAnubarakDoor[1] = go->GetGUID();
- break;
- case 192398:
- uiAnubarakDoor[2] = go->GetGUID();
- break;
+ switch (creature->GetEntry())
+ {
+ case NPC_KRIKTHIR:
+ KrikthirGUID = creature->GetGUID();
+ break;
+ case NPC_HADRONOX:
+ HadronoxGUID = creature->GetGUID();
+ break;
+ case NPC_ANUBARAK:
+ AnubarakGUID = creature->GetGUID();
+ break;
+ case NPC_WATCHER_NARJIL:
+ WatcherNarjilGUID = creature->GetGUID();
+ break;
+ case NPC_WATCHER_GASHRA:
+ WatcherGashraGUID = creature->GetGUID();
+ break;
+ case NPC_WATCHER_SILTHIK:
+ WatcherSilthikGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
}
- }
- uint64 GetData64(uint32 identifier) const OVERRIDE
- {
- switch (identifier)
+ void OnGameObjectCreate(GameObject* go) OVERRIDE
{
- case DATA_KRIKTHIR_THE_GATEWATCHER: return uiKrikthir;
- case DATA_HADRONOX: return uiHadronox;
- case DATA_ANUBARAK: return uiAnubarak;
- case DATA_WATCHER_GASHRA: return uiWatcherGashra;
- case DATA_WATCHER_SILTHIK: return uiWatcherSilthik;
- case DATA_WATCHER_NARJIL: return uiWatcherNarjil;
+ switch (go->GetEntry())
+ {
+ case GO_KRIKTHIR_DOOR:
+ case GO_ANUBARAK_DOOR_1:
+ case GO_ANUBARAK_DOOR_2:
+ case GO_ANUBARAK_DOOR_3:
+ AddDoor(go, true);
+ break;
+ default:
+ break;
+ }
}
- return 0;
- }
-
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ void OnGameObjectRemove(GameObject* go) OVERRIDE
{
- case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT:
- auiEncounter[0] = data;
- if (data == DONE)
- HandleGameObject(uiKrikthirDoor, true);
- break;
- case DATA_HADRONOX_EVENT:
- auiEncounter[1] = data;
- break;
- case DATA_ANUBARAK_EVENT:
- auiEncounter[2] = data;
- if (data == IN_PROGRESS)
- for (uint8 i = 0; i < 3; ++i)
- HandleGameObject(uiAnubarakDoor[i], false);
- else if (data == NOT_STARTED || data == DONE)
- for (uint8 i = 0; i < 3; ++i)
- HandleGameObject(uiAnubarakDoor[i], true);
- break;
+ switch (go->GetEntry())
+ {
+ case GO_KRIKTHIR_DOOR:
+ case GO_ANUBARAK_DOOR_1:
+ case GO_ANUBARAK_DOOR_2:
+ case GO_ANUBARAK_DOOR_3:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
}
- if (data == DONE)
+ uint64 GetData64(uint32 type) const OVERRIDE
{
- SaveToDB();
+ switch (type)
+ {
+ case DATA_KRIKTHIR_THE_GATEWATCHER:
+ return KrikthirGUID;
+ case DATA_HADRONOX:
+ return HadronoxGUID;
+ case DATA_ANUBARAK:
+ return AnubarakGUID;
+ case DATA_WATCHER_GASHRA:
+ return WatcherGashraGUID;
+ case DATA_WATCHER_SILTHIK:
+ return WatcherSilthikGUID;
+ case DATA_WATCHER_NARJIL:
+ return WatcherNarjilGUID;
+ default:
+ break;
+ }
+
+ return 0;
}
- }
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ std::string GetSaveData() OVERRIDE
{
- case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT: return auiEncounter[0];
- case DATA_HADRONOX_EVENT: return auiEncounter[1];
- case DATA_ANUBARAK_EVENT: return auiEncounter[2];
- }
-
- return 0;
- }
-
- std::string GetSaveData() OVERRIDE
- {
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << "A N " << auiEncounter[0] << ' ' << auiEncounter[1] << ' '
- << auiEncounter[2];
+ OUT_SAVE_INST_DATA;
- OUT_SAVE_INST_DATA_COMPLETE;
- return saveStream.str();
- }
+ std::ostringstream saveStream;
+ saveStream << "A N " << GetBossSaveData();
- void Load(const char* in) OVERRIDE
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- OUT_LOAD_INST_DATA(in);
-
- char dataHead1, dataHead2;
- uint16 data0, data1, data2;
-
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2;
-
- if (dataHead1 == 'A' && dataHead2 == 'N')
+ void Load(char const* str) OVERRIDE
{
- auiEncounter[0] = data0;
- auiEncounter[1] = data1;
- auiEncounter[2] = data2;
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (auiEncounter[i] == IN_PROGRESS)
- auiEncounter[i] = NOT_STARTED;
+ 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 == 'A' && dataHead2 == 'N')
+ {
+ 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;
+ }
- } else OUT_LOAD_INST_DATA_FAIL;
+ protected:
+ uint64 KrikthirGUID;
+ uint64 HadronoxGUID;
+ uint64 AnubarakGUID;
+ uint64 WatcherGashraGUID;
+ uint64 WatcherSilthikGUID;
+ uint64 WatcherNarjilGUID;
+ };
- OUT_LOAD_INST_DATA_COMPLETE;
+ InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ {
+ return new instance_azjol_nerub_InstanceScript(map);
}
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_azjol_nerub_InstanceScript(map);
- }
};
void AddSC_instance_azjol_nerub()
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
index 95967f3a7bc..6baf5dc6d93 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp
@@ -25,6 +25,7 @@ DoorData const doorData[] =
{ GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
};
class instance_halls_of_lightning : public InstanceMapScript