TrinityCore
instance_naxxramas.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ScriptMgr.h"
19#include "AreaBoundary.h"
20#include "CreatureAI.h"
21#include "EventMap.h"
22#include "GameObject.h"
23#include "InstanceScript.h"
24#include "Map.h"
25#include "naxxramas.h"
26#include "TemporarySummon.h"
27#include <sstream>
28
30{
31 /* Arachnid Quarter */
32 { BOSS_ANUBREKHAN, new CircleBoundary(Position(3273.376709f, -3475.876709f), Position(3195.668213f, -3475.930176f)) },
33 { BOSS_FAERLINA, new RectangleBoundary(3315.0f, 3402.0f, -3727.0f, -3590.0f) },
34 { BOSS_FAERLINA, new CircleBoundary(Position(3372.68f, -3648.2f), Position(3316.0f, -3704.26f)) },
35 { BOSS_MAEXXNA, new CircleBoundary(Position(3502.2587f, -3892.1697f), Position(3418.7422f, -3840.271f)) },
36
37 /* Plague Quarter */
38 { BOSS_NOTH, new RectangleBoundary(2618.0f, 2754.0f, -3557.43f, -3450.0f) },
39 { BOSS_HEIGAN, new CircleBoundary(Position(2772.57f, -3685.28f), 56.0f) },
40 { BOSS_LOATHEB, new CircleBoundary(Position(2909.0f, -3997.41f), 57.0f) },
41
42 /* Military Quarter */
43 { BOSS_RAZUVIOUS, new ZRangeBoundary(260.0f, 287.0f) }, // will not chase onto the upper floor
44 { BOSS_GOTHIK, new RectangleBoundary(2627.0f, 2764.0f, -3440.0f, -3275.0f) },
45 { BOSS_HORSEMEN, new ParallelogramBoundary(Position(2646.0f, -2959.0f), Position(2529.0f, -3075.0f), Position(2506.0f, -2854.0f)) },
46
47 /* Construct Quarter */
48 { BOSS_PATCHWERK, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) },
49 { BOSS_PATCHWERK, new CircleBoundary(Position(3130.8576f, -3210.36f), Position(3085.37f, -3219.85f), true) }, // entrance slime circle blocker
50 { BOSS_GROBBULUS, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) },
51 { BOSS_GROBBULUS, new RectangleBoundary(3295.0f, 3340.0f, -3254.2f, -3230.18f, true) }, // entrance door blocker
52 { BOSS_GLUTH, new CircleBoundary(Position(3293.0f, -3142.0f), 80.0) },
53 { BOSS_GLUTH, new ParallelogramBoundary(Position(3401.0f, -3149.0f), Position(3261.0f, -3028.0f), Position(3320.0f, -3267.0f)) },
54 { BOSS_GLUTH, new ZRangeBoundary(285.0f, 310.0f) },
55 { BOSS_THADDIUS, new ParallelogramBoundary(Position(3478.3f, -3070.0f), Position(3370.0f, -2961.5f), Position(3580.0f, -2961.5f)) },
56
57 /* Frostwyrm Lair */
58 { BOSS_SAPPHIRON, new CircleBoundary(Position(3517.627f, -5255.5f), 110.0) },
59 { BOSS_KELTHUZAD, new CircleBoundary(Position(3716.0f, -5107.0f), 85.0) }
60};
61
63{
98};
99
101{
107 { 0, 0, }
108};
109
111{
112 { BOSS_ANUBREKHAN, {{ 1107 }} },
113 { BOSS_FAERLINA, {{ 1110 }} },
114 { BOSS_MAEXXNA, {{ 1116 }} },
115 { BOSS_NOTH, {{ 1117 }} },
116 { BOSS_HEIGAN, {{ 1112 }} },
117 { BOSS_LOATHEB, {{ 1115 }} },
118 { BOSS_PATCHWERK, {{ 1118 }} },
119 { BOSS_GROBBULUS, {{ 1111 }} },
120 { BOSS_GLUTH, {{ 1108 }} },
121 { BOSS_THADDIUS, {{ 1120 }} },
122 { BOSS_RAZUVIOUS, {{ 1113 }} },
123 { BOSS_GOTHIK, {{ 1109 }} },
124 { BOSS_HORSEMEN, {{ 1121 }} },
125 { BOSS_SAPPHIRON, {{ 1119 }} },
126 { BOSS_KELTHUZAD, {{ 1114 }} }
127};
128
130{
131 public:
133
135 {
137 {
142 LoadObjectData(nullptr, objectData);
144
145 hadSapphironBirth = false;
147 }
148
149 void OnCreatureCreate(Creature* creature) override
150 {
151 switch (creature->GetEntry())
152 {
153 case NPC_ANUBREKHAN:
154 AnubRekhanGUID = creature->GetGUID();
155 break;
156 case NPC_FAERLINA:
157 FaerlinaGUID = creature->GetGUID();
158 break;
159 case NPC_RAZUVIOUS:
160 RazuviousGUID = creature->GetGUID();
161 break;
162 case NPC_GOTHIK:
163 GothikGUID = creature->GetGUID();
164 break;
165 case NPC_THANE:
166 ThaneGUID = creature->GetGUID();
167 break;
168 case NPC_LADY:
169 LadyGUID = creature->GetGUID();
170 break;
171 case NPC_BARON:
172 BaronGUID = creature->GetGUID();
173 break;
174 case NPC_SIR:
175 SirGUID = creature->GetGUID();
176 break;
177 case NPC_GLUTH:
178 GluthGUID = creature->GetGUID();
179 break;
180 case NPC_HEIGAN:
181 HeiganGUID = creature->GetGUID();
182 break;
183 case NPC_THADDIUS:
184 ThaddiusGUID = creature->GetGUID();
185 break;
186 case NPC_FEUGEN:
187 FeugenGUID = creature->GetGUID();
188 break;
189 case NPC_STALAGG:
190 StalaggGUID = creature->GetGUID();
191 break;
192 case NPC_SAPPHIRON:
193 SapphironGUID = creature->GetGUID();
194 break;
195 case NPC_KEL_THUZAD:
196 KelthuzadGUID = creature->GetGUID();
197 break;
198 case NPC_LICH_KING:
199 LichKingGUID = creature->GetGUID();
200 break;
201 default:
202 break;
203 }
204 }
205
207 {
208 switch (go->GetEntry())
209 {
210 case GO_GOTHIK_GATE:
211 GothikGateGUID = go->GetGUID();
212 break;
216 break;
218 PortalsGUID[0] = go->GetGUID();
219 break;
221 PortalsGUID[1] = go->GetGUID();
222 break;
224 PortalsGUID[2] = go->GetGUID();
225 break;
227 PortalsGUID[3] = go->GetGUID();
228 break;
231 break;
234 break;
238 break;
242 break;
246 break;
250 break;
254 break;
255 case GO_BIRTH:
257 {
258 hadSapphironBirth = true;
259 go->Delete();
260 }
261 break;
262 default:
263 break;
264 }
265
267 }
268
269 void OnUnitDeath(Unit* unit) override
270 {
271 if (Creature* creature = unit->ToCreature())
272 if (creature->GetEntry() == NPC_BIGGLESWORTH)
273 {
274 // Loads Kel'Thuzad's grid. We need this as he must be active in order for his texts to work.
275 instance->LoadGrid(3749.67f, -5114.06f);
276 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
277 kelthuzad->AI()->Talk(SAY_KELTHUZAD_CAT_DIED);
278 }
279 }
280
281 void SetData(uint32 id, uint32 value) override
282 {
283 switch (id)
284 {
285 case DATA_GOTHIK_GATE:
287 gate->SetGoState(GOState(value));
288 break;
290 hadSapphironBirth = (value == 1u);
291 break;
292 default:
293 break;
294 }
295 }
296
297 uint32 GetData(uint32 id) const override
298 {
299 switch (id)
300 {
302 return hadSapphironBirth ? 1u : 0u;
303 default:
304 break;
305 }
306
307 return 0;
308 }
309
310 ObjectGuid GetGuidData(uint32 id) const override
311 {
312 switch (id)
313 {
314 case DATA_ANUBREKHAN:
315 return AnubRekhanGUID;
316 case DATA_FAERLINA:
317 return FaerlinaGUID;
318 case DATA_RAZUVIOUS:
319 return RazuviousGUID;
320 case DATA_GOTHIK:
321 return GothikGUID;
322 case DATA_THANE:
323 return ThaneGUID;
324 case DATA_LADY:
325 return LadyGUID;
326 case DATA_BARON:
327 return BaronGUID;
328 case DATA_SIR:
329 return SirGUID;
330 case DATA_HEIGAN:
331 return HeiganGUID;
332 case DATA_GLUTH:
333 return GluthGUID;
334 case DATA_FEUGEN:
335 return FeugenGUID;
336 case DATA_STALAGG:
337 return StalaggGUID;
338 case DATA_THADDIUS:
339 return ThaddiusGUID;
340 case DATA_SAPPHIRON:
341 return SapphironGUID;
342 case DATA_KELTHUZAD:
343 return KelthuzadGUID;
345 return PortalsGUID[0];
347 return PortalsGUID[1];
349 return PortalsGUID[2];
351 return PortalsGUID[3];
354 case DATA_LICH_KING:
355 return LichKingGUID;
356 }
357
358 return ObjectGuid::Empty;
359 }
360
361 bool SetBossState(uint32 id, EncounterState state) override
362 {
363 if (!InstanceScript::SetBossState(id, state))
364 return false;
365
366 switch (id)
367 {
368 case BOSS_MAEXXNA:
369 if (state == DONE)
370 {
372 teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
373
375 }
376 break;
377 case BOSS_LOATHEB:
378 if (state == DONE)
379 {
381 teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
382
384 }
385 break;
386 case BOSS_THADDIUS:
387 if (state == DONE)
388 {
390 teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
391
393 }
394 break;
395 case BOSS_GOTHIK:
396 if (state == DONE)
398 break;
399 case BOSS_HORSEMEN:
400 if (state == DONE)
401 {
402 if (GameObject* horsemenChest = instance->GetGameObject(HorsemenChestGUID))
403 {
404 horsemenChest->SetRespawnTime(horsemenChest->GetRespawnDelay());
405 horsemenChest->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
406 }
407
409 teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
410
412 }
413 break;
414 case BOSS_SAPPHIRON:
415 if (state == DONE)
418 break;
419 case BOSS_KELTHUZAD:
420 if (state == DONE)
422 throne->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
423 break;
424 default:
425 break;
426 }
427
428 return true;
429 }
430
431 void Update(uint32 diff) override
432 {
433 events.Update(diff);
434
435 while (uint32 eventId = events.ExecuteEvent())
436 {
437 switch (eventId)
438 {
440 if (Creature* korthazz = instance->GetCreature(ThaneGUID))
441 korthazz->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN);
443 break;
445 if (Creature* zeliek = instance->GetCreature(SirGUID))
446 zeliek->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN);
448 break;
450 if (Creature* blaumeux = instance->GetCreature(LadyGUID))
451 blaumeux->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN);
453 break;
455 if (Creature* rivendare = instance->GetCreature(BaronGUID))
456 rivendare->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN);
458 break;
460 if (Creature* blaumeux = instance->GetCreature(LadyGUID))
461 blaumeux->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN2);
463 break;
465 if (Creature* zeliek = instance->GetCreature(SirGUID))
466 zeliek->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN2);
468 break;
470 if (Creature* korthazz = instance->GetCreature(ThaneGUID))
471 korthazz->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN2);
473 break;
475 if (Creature* rivendare = instance->GetCreature(BaronGUID))
476 rivendare->AI()->Talk(SAY_DIALOGUE_GOTHIK_HORSEMAN2);
477 break;
479 // Loads Kel'Thuzad's grid. We need this as he must be active in order for his texts to work.
480 instance->LoadGrid(3749.67f, -5114.06f);
481 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
482 kelthuzad->AI()->Talk(CurrentWingTaunt);
484 break;
486 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
487 kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD);
489 break;
491 if (Creature* lichKing = instance->GetCreature(LichKingGUID))
492 lichKing->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_LICH_KING);
494 break;
496 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
497 kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD2);
499 break;
501 if (Creature* lichKing = instance->GetCreature(LichKingGUID))
502 lichKing->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_LICH_KING2);
504 break;
506 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
507 kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD3);
509 break;
511 if (Creature* kelthuzad = instance->GetCreature(KelthuzadGUID))
512 kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD4);
514 break;
515 default:
516 break;
517 }
518 }
519 }
520
521 // This Function is called in CheckAchievementCriteriaMeet and CheckAchievementCriteriaMeet is called before SetBossState(bossId, DONE),
522 // so to check if all bosses are done the checker must exclude 1 boss, the last done, if there is at most 1 encouter in progress when is
523 // called this function then all bosses are done. The one boss that check is the boss that calls this function, so it is dead.
525 {
526 uint32 numBossAlive = 0;
527 for (uint32 i = 0; i < EncounterCount; ++i)
528 if (GetBossState(i) != DONE)
529 numBossAlive++;
530
531 if (numBossAlive > 1)
532 return false;
533 return true;
534 }
535
536 bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target = nullptr*/, uint32 /*miscvalue1 = 0*/) override
537 {
538 switch (criteria_id)
539 {
540 // And They Would All Go Down Together (kill 4HM within 15sec of each other)
541 case 7600: // 25-man
542 case 7601: // 10-man
543 if (Creature* baron = instance->GetCreature(BaronGUID)) // it doesn't matter which one we use, really
544 return (baron->AI()->GetData(DATA_HORSEMEN_CHECK_ACHIEVEMENT_CREDIT) == 1u);
545 return false;
546 // Difficulty checks are done on DB.
547 // Criteria for achievement 2186: The Immortal (25-man)
548 case 13233: // The Four Horsemen
549 case 13234: // Maexxna
550 case 13235: // Thaddius
551 case 13236: // Loatheb
552 case 7616: // Kel'Thuzad
553 // Criteria for achievement 2187: The Undying (10-man)
554 case 13237: // The Four Horsemen
555 case 13238: // Maexxna
556 case 13239: // Loatheb
557 case 13240: // Thaddius
558 case 7617: // Kel'Thuzad
559 return false;
560 }
561
562 return false;
563 }
564
565 protected:
566 /* The Arachnid Quarter */
567 // Anub'rekhan
569 // Grand Widow Faerlina
571
572 /* The Plague Quarter */
573 // Heigan the Unclean
575
576 /* The Military Quarter */
577 // Instructor Razuvious
579 // Gothik the Harvester
582 // The Four Horsemen
588
589 /* The Construct Quarter */
590 // Gluth
592 // Thaddius
596
597 /* Frostwyrm Lair */
598 // Sapphiron
600 // Kel'Thuzad
608
610 };
611
613 {
615 }
616};
617
619{
620 new instance_naxxramas();
621}
uint8_t uint8
Definition: Define.h:144
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
EncounterState
@ DONE
@ GO_FLAG_NOT_SELECTABLE
GOState
#define DataHeader
uint32 const EncounterCount
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void RemoveFlag(GameObjectFlags flags)
Definition: GameObject.h:275
void Delete()
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
void LoadDungeonEncounterData(T const &encounters)
InstanceMap * instance
EncounterState GetBossState(uint32 id) const
virtual void OnGameObjectCreate(GameObject *go) override
void LoadDoorData(DoorData const *data)
GameObject * GetGameObject(uint32 type)
void LoadBossBoundaries(BossBoundaryData const &data)
void SetHeaders(std::string const &dataHeaders)
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
void LoadGrid(float x, float y)
Definition: Map.cpp:405
GameObject * GetGameObject(ObjectGuid const &guid)
Definition: Map.cpp:3489
Creature * GetCreature(ObjectGuid const &guid)
Definition: Map.cpp:3479
static ObjectGuid const Empty
Definition: ObjectGuid.h:274
static Creature * ToCreature(Object *o)
Definition: Object.h:219
uint32 GetEntry() const
Definition: Object.h:161
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
Definition: Unit.h:627
InstanceScript * GetInstanceScript(InstanceMap *map) const override
ObjectData const objectData[]
DoorData const doorData[]
BossBoundaryData const boundaries
void AddSC_instance_naxxramas()
DungeonEncounterData const encounters[]
@ NPC_BIGGLESWORTH
Definition: naxxramas.h:108
@ NPC_ANUBREKHAN
Definition: naxxramas.h:88
@ NPC_FEUGEN
Definition: naxxramas.h:99
@ NPC_THADDIUS
Definition: naxxramas.h:98
@ NPC_GOTHIK
Definition: naxxramas.h:91
@ NPC_LADY
Definition: naxxramas.h:93
@ NPC_KEL_THUZAD
Definition: naxxramas.h:103
@ NPC_FAERLINA
Definition: naxxramas.h:89
@ NPC_SAPPHIRON
Definition: naxxramas.h:102
@ NPC_STALAGG
Definition: naxxramas.h:100
@ NPC_HEIGAN
Definition: naxxramas.h:97
@ NPC_RAZUVIOUS
Definition: naxxramas.h:90
@ NPC_THANE
Definition: naxxramas.h:92
@ NPC_SIR
Definition: naxxramas.h:95
@ NPC_GLUTH
Definition: naxxramas.h:96
@ BOSS_RAZUVIOUS
Definition: naxxramas.h:40
@ BOSS_HEIGAN
Definition: naxxramas.h:34
@ BOSS_GROBBULUS
Definition: naxxramas.h:37
@ BOSS_LOATHEB
Definition: naxxramas.h:35
@ BOSS_GLUTH
Definition: naxxramas.h:38
@ BOSS_GOTHIK
Definition: naxxramas.h:41
@ BOSS_SAPPHIRON
Definition: naxxramas.h:43
@ BOSS_MAEXXNA
Definition: naxxramas.h:32
@ BOSS_THADDIUS
Definition: naxxramas.h:39
@ BOSS_KELTHUZAD
Definition: naxxramas.h:44
@ BOSS_ANUBREKHAN
Definition: naxxramas.h:30
@ BOSS_NOTH
Definition: naxxramas.h:33
@ BOSS_PATCHWERK
Definition: naxxramas.h:36
@ BOSS_HORSEMEN
Definition: naxxramas.h:42
@ BOSS_FAERLINA
Definition: naxxramas.h:31
@ GO_PASSAGE_SAPPHIRON
Definition: naxxramas.h:140
@ GO_ARAC_EYE_RAMP
Definition: naxxramas.h:150
@ GO_NAXX_PORTAL_CONSTRUCT
Definition: naxxramas.h:166
@ GO_KELTHUZAD_TRIGGER
Definition: naxxramas.h:123
@ GO_ROOM_HORSEMEN
Definition: naxxramas.h:139
@ GO_MILI_EYE_RAMP
Definition: naxxramas.h:152
@ GO_PASSAGE_ANUBREKHAN
Definition: naxxramas.h:126
@ GO_GOTHIK_GATE
Definition: naxxramas.h:118
@ GO_ROOM_LOATHEB
Definition: naxxramas.h:133
@ GO_CONS_EYE_RAMP
Definition: naxxramas.h:153
@ GO_KELTHUZAD_THRONE
Definition: naxxramas.h:124
@ GO_NAXX_PORTAL_ARACHNID
Definition: naxxramas.h:165
@ GO_ROOM_HEIGAN
Definition: naxxramas.h:131
@ GO_PASSAGE_GLUTH
Definition: naxxramas.h:135
@ GO_KELTHUZAD_PORTAL03
Definition: naxxramas.h:121
@ GO_HORSEMEN_CHEST_HERO
Definition: naxxramas.h:116
@ GO_HORSEMEN_CHEST
Definition: naxxramas.h:117
@ GO_CONS_EYE_RAMP_BOSS
Definition: naxxramas.h:159
@ GO_PLAG_EYE_RAMP_BOSS
Definition: naxxramas.h:157
@ GO_BIRTH
Definition: naxxramas.h:162
@ GO_PASSAGE_NOTH
Definition: naxxramas.h:130
@ GO_ROOM_GROBBULUS
Definition: naxxramas.h:134
@ GO_PASSAGE_HEIGAN
Definition: naxxramas.h:132
@ GO_MILI_EYE_RAMP_BOSS
Definition: naxxramas.h:158
@ GO_NAXX_PORTAL_PLAGUE
Definition: naxxramas.h:167
@ GO_ROOM_ANUBREKHAN
Definition: naxxramas.h:125
@ GO_ROOM_KELTHUZAD
Definition: naxxramas.h:141
@ GO_ROOM_GOTHIK
Definition: naxxramas.h:137
@ GO_NAXX_PORTAL_MILITARY
Definition: naxxramas.h:168
@ GO_KELTHUZAD_PORTAL01
Definition: naxxramas.h:119
@ GO_PASSAGE_FAERLINA
Definition: naxxramas.h:127
@ GO_ROOM_THADDIUS
Definition: naxxramas.h:136
@ GO_PLAG_EYE_RAMP
Definition: naxxramas.h:151
@ GO_ROOM_NOTH
Definition: naxxramas.h:129
@ GO_PASSAGE_GOTHIK
Definition: naxxramas.h:138
@ GO_ROOM_MAEXXNA
Definition: naxxramas.h:128
@ GO_KELTHUZAD_PORTAL04
Definition: naxxramas.h:122
@ GO_KELTHUZAD_PORTAL02
Definition: naxxramas.h:120
@ GO_ARAC_EYE_RAMP_BOSS
Definition: naxxramas.h:156
@ DATA_NAXX_PORTAL_CONSTRUCT
Definition: naxxramas.h:55
@ DATA_NAXX_PORTAL_MILITARY
Definition: naxxramas.h:57
@ DATA_HAD_SAPPHIRON_BIRTH
Definition: naxxramas.h:50
@ DATA_GOTHIK_GATE
Definition: naxxramas.h:49
@ DATA_HORSEMEN_CHECK_ACHIEVEMENT_CREDIT
Definition: naxxramas.h:52
@ DATA_NAXX_PORTAL_ARACHNID
Definition: naxxramas.h:54
@ DATA_NAXX_PORTAL_PLAGUE
Definition: naxxramas.h:56
@ DATA_KELTHUZAD_THRONE
Definition: naxxramas.h:58
#define NaxxramasScriptName
Definition: naxxramas.h:23
@ DATA_GOTHIK
Definition: naxxramas.h:66
@ DATA_SAPPHIRON
Definition: naxxramas.h:76
@ DATA_THANE
Definition: naxxramas.h:67
@ DATA_HEIGAN
Definition: naxxramas.h:73
@ DATA_SIR
Definition: naxxramas.h:70
@ DATA_KELTHUZAD
Definition: naxxramas.h:77
@ DATA_KELTHUZAD_PORTAL02
Definition: naxxramas.h:79
@ DATA_FAERLINA
Definition: naxxramas.h:64
@ DATA_KELTHUZAD_PORTAL01
Definition: naxxramas.h:78
@ DATA_THADDIUS
Definition: naxxramas.h:72
@ DATA_LADY
Definition: naxxramas.h:68
@ DATA_FEUGEN
Definition: naxxramas.h:74
@ DATA_KELTHUZAD_PORTAL04
Definition: naxxramas.h:81
@ DATA_RAZUVIOUS
Definition: naxxramas.h:65
@ DATA_KELTHUZAD_TRIGGER
Definition: naxxramas.h:82
@ DATA_STALAGG
Definition: naxxramas.h:75
@ DATA_ANUBREKHAN
Definition: naxxramas.h:63
@ DATA_KELTHUZAD_PORTAL03
Definition: naxxramas.h:80
@ DATA_GLUTH
Definition: naxxramas.h:71
@ SAY_KELTHUZAD_CAT_DIED
Definition: naxxramas.h:207
@ SAY_DIALOGUE_SAPPHIRON_KELTHUZAD2
Definition: naxxramas.h:203
@ SAY_DIALOGUE_GOTHIK_HORSEMAN2
Definition: naxxramas.h:199
@ SAY_DIALOGUE_SAPPHIRON_LICH_KING2
Definition: naxxramas.h:212
@ SAY_DIALOGUE_SAPPHIRON_KELTHUZAD4
Definition: naxxramas.h:205
@ SAY_DIALOGUE_SAPPHIRON_KELTHUZAD3
Definition: naxxramas.h:204
@ SAY_KELTHUZAD_FIRST_WING_TAUNT
Definition: naxxramas.h:208
@ SAY_DIALOGUE_GOTHIK_HORSEMAN
Definition: naxxramas.h:198
@ SAY_DIALOGUE_SAPPHIRON_KELTHUZAD
Definition: naxxramas.h:202
@ SAY_DIALOGUE_SAPPHIRON_LICH_KING
Definition: naxxramas.h:211
@ EVENT_DIALOGUE_SAPPHIRON_KELTHUZAD4
Definition: naxxramas.h:192
@ EVENT_DIALOGUE_GOTHIK_BLAUMEUX2
Definition: naxxramas.h:178
@ EVENT_DIALOGUE_GOTHIK_ZELIEK
Definition: naxxramas.h:175
@ EVENT_DIALOGUE_SAPPHIRON_LICHKING
Definition: naxxramas.h:188
@ EVENT_DIALOGUE_GOTHIK_KORTHAZZ
Definition: naxxramas.h:174
@ EVENT_DIALOGUE_GOTHIK_KORTHAZZ2
Definition: naxxramas.h:180
@ EVENT_DIALOGUE_SAPPHIRON_KELTHUZAD2
Definition: naxxramas.h:189
@ EVENT_DIALOGUE_SAPPHIRON_LICHKING2
Definition: naxxramas.h:190
@ EVENT_KELTHUZAD_WING_TAUNT
Definition: naxxramas.h:184
@ EVENT_DIALOGUE_GOTHIK_RIVENDARE
Definition: naxxramas.h:177
@ EVENT_DIALOGUE_GOTHIK_ZELIEK2
Definition: naxxramas.h:179
@ EVENT_DIALOGUE_GOTHIK_BLAUMEUX
Definition: naxxramas.h:176
@ EVENT_DIALOGUE_GOTHIK_RIVENDARE2
Definition: naxxramas.h:181
@ EVENT_DIALOGUE_SAPPHIRON_KELTHUZAD3
Definition: naxxramas.h:191
@ EVENT_DIALOGUE_SAPPHIRON_KELTHUZAD
Definition: naxxramas.h:187
@ NPC_BARON
Definition: stratholme.h:74
@ DATA_BARON
Definition: stratholme.h:55
bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const *, Unit const *, uint32) override
bool SetBossState(uint32 id, EncounterState state) override
@ NPC_LICH_KING
@ DATA_LICH_KING