TrinityCore
Loading...
Searching...
No Matches
zone_dragonblight.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 "CombatAI.h"
20#include "CreatureAIImpl.h"
21#include "MotionMaster.h"
22#include "ObjectAccessor.h"
23#include "ObjectMgr.h"
24#include "Player.h"
25#include "ScriptedEscortAI.h"
26#include "ScriptedGossip.h"
27#include "SpellAuras.h"
28#include "SpellAuraEffects.h"
29#include "SpellInfo.h"
30#include "SpellScript.h"
31#include "TemporarySummon.h"
32#include "Vehicle.h"
33
34/*#####
35# npc_commander_eligor_dawnbringer
36#####*/
37
39{
40 MODEL_IMAGE_OF_KELTHUZAD = 24787, // Image of Kel'Thuzad
41 MODEL_IMAGE_OF_SAPPHIRON = 24788, // Image of Sapphiron
42 MODEL_IMAGE_OF_RAZUVIOUS = 24799, // Image of Razuvious
43 MODEL_IMAGE_OF_GOTHIK = 24804, // Image of Gothik
44 MODEL_IMAGE_OF_THANE = 24802, // Image of Thane Korth'azz
45 MODEL_IMAGE_OF_BLAUMEUX = 24794, // Image of Lady Blaumeux
46 MODEL_IMAGE_OF_ZELIEK = 24800, // Image of Sir Zeliek
47 MODEL_IMAGE_OF_PATCHWERK = 24798, // Image of Patchwerk
48 MODEL_IMAGE_OF_GROBBULUS = 24792, // Image of Grobbulus
49 MODEL_IMAGE_OF_THADDIUS = 24801, // Image of Thaddius
50 MODEL_IMAGE_OF_GLUTH = 24803, // Image of Gluth
51 MODEL_IMAGE_OF_ANUBREKHAN = 24789, // Image of Anub'rekhan
52 MODEL_IMAGE_OF_FAERLINA = 24790, // Image of Faerlina
53 MODEL_IMAGE_OF_MAEXXNA = 24796, // Image of Maexxna
54 MODEL_IMAGE_OF_NOTH = 24797, // Image of Noth
55 MODEL_IMAGE_OF_HEIGAN = 24793, // Image of Heigan
56 MODEL_IMAGE_OF_LOATHEB = 24795, // Image of Loatheb
57
58 NPC_IMAGE_OF_KELTHUZAD = 27766, // Image of Kel'Thuzad
59 NPC_IMAGE_OF_SAPPHIRON = 27767, // Image of Sapphiron
60 NPC_IMAGE_OF_RAZUVIOUS = 27768, // Image of Razuvious
61 NPC_IMAGE_OF_GOTHIK = 27769, // Image of Gothik
62 NPC_IMAGE_OF_THANE = 27770, // Image of Thane Korth'azz
63 NPC_IMAGE_OF_BLAUMEUX = 27771, // Image of Lady Blaumeux
64 NPC_IMAGE_OF_ZELIEK = 27772, // Image of Sir Zeliek
65 NPC_IMAGE_OF_PATCHWERK = 27773, // Image of Patchwerk
66 NPC_IMAGE_OF_GROBBULUS = 27774, // Image of Grobbulus
67 NPC_IMAGE_OF_THADDIUS = 27775, // Image of Thaddius
68 NPC_IMAGE_OF_GLUTH = 27782, // Image of Gluth
69 NPC_IMAGE_OF_ANUBREKHAN = 27776, // Image of Anub'rekhan
70 NPC_IMAGE_OF_FAERLINA = 27777, // Image of Faerlina
71 NPC_IMAGE_OF_MAEXXNA = 27778, // Image of Maexxna
72 NPC_IMAGE_OF_NOTH = 27779, // Image of Noth
73 NPC_IMAGE_OF_HEIGAN = 27780, // Image of Heigan
74 NPC_IMAGE_OF_LOATHEB = 27781, // Image of Loatheb
75
76 NPC_INFANTRYMAN = 27160, // Add in case I randomize the spawning
77 NPC_SENTINAL = 27162,
79
80 // Five platforms to choose from
86 // Used in all talks
88 // Pinnacle of Naxxramas
93 // Death knight wing of Naxxramas
100 // Blighted abomination wing of Naxxramas
105 // Accursed spider wing of Naxxramas
109 // Dread plague wing of Naxxramas
114
116
126 EVENT_HEIGAN_2 = 10
128
130
132{
133 { 3805.453f, -682.9075f, 222.2917f, 2.793398f }, // Pinnacle of Naxxramas
134 { 3807.508f, -691.0882f, 221.9688f, 2.094395f }, // Death knight wing of Naxxramas
135 { 3797.228f, -690.3555f, 222.5019f, 1.134464f }, // Blighted abomination wing of Naxxramas
136 { 3804.038f, -672.3098f, 222.5019f, 4.578917f }, // Accursed spider wing of Naxxramas
137 { 3815.097f, -680.2596f, 221.9777f, 2.86234f }, // Dread plague wing of Naxxramas
138 { 3798.05f, -680.611f, 222.9825f, 6.038839f }, // Home
139};
140
142{
144 {
145 talkWing = 0;
146 }
147
148 void Reset() override
149 {
150 talkWing = 0;
151 for (ObjectGuid& guid : audienceList)
152 guid.Clear();
153
154 for (ObjectGuid& guid : imageList)
155 guid.Clear();
156
159 }
160
161 void MovementInform(uint32 type, uint32 id) override
162 {
163 if (type == POINT_MOTION_TYPE)
164 {
165 if (id == 1)
166 {
167 me->SetFacingTo(PosTalkLocations[talkWing].GetOrientation());
168 TurnAudience();
169
170 switch (talkWing)
171 {
172 case 0: // Pinnacle of Naxxramas
173 {
174 switch (urand (0, 1))
175 {
179 }
180 }
181 break;
182 case 1: // Death knight wing of Naxxramas
183 {
184 switch (urand (0, 2))
185 {
190 }
191 }
192 break;
193 case 2: // Blighted abomination wing of Naxxramas
194 {
195 switch (urand (0, 3))
196 {
201 }
202 }
203 break;
204 case 3: // Accursed spider wing of Naxxramas
205 {
206 switch (urand (0, 2))
207 {
211 }
212 }
213 break;
214 case 4: // Dread plague wing of Naxxramas
215 {
216 switch (urand (0, 2))
217 {
222 }
223 }
224 break;
225 case 5: // Home
227 break;
228 }
229 }
230 }
231 }
232
234 {
235 uint8 creaturecount;
236
237 creaturecount = 0;
238
239 for (uint8 ii = 0; ii < 3; ++ii)
240 {
241 std::list<Creature*> creatureList;
242 GetCreatureListWithEntryInGrid(creatureList, me, AudienceMobs[ii], 15.0f);
243 for (Creature* creature : creatureList)
244 {
245 audienceList[creaturecount] = creature->GetGUID();
246 ++creaturecount;
247 }
248 }
249
250 if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_KELTHUZAD, 20.0f, true))
251 imageList[0] = creature->GetGUID();
252 if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_RAZUVIOUS, 20.0f, true))
253 imageList[1] = creature->GetGUID();
254 if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_PATCHWERK, 20.0f, true))
255 imageList[2] = creature->GetGUID();
256 if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_ANUBREKHAN, 20.0f, true))
257 imageList[3] = creature->GetGUID();
258 if (Creature* creature = me->FindNearestCreature(NPC_IMAGE_OF_NOTH, 20.0f, true))
259 imageList[4] = creature->GetGUID();
260 }
261
262 void ChangeImage(uint32 entry, uint32 model, uint8 text)
263 {
265 {
266 Talk(text);
267 creature->SetEntry(entry);
268 creature->SetDisplayId(model);
269 creature->CastSpell(creature, SPELL_HEROIC_IMAGE_CHANNEL);
271 }
272 }
273
275 {
276 for (uint8 i = 0; i < 10; ++i)
277 {
279 creature->SetFacingToObject(me);
280 }
281 }
282
283 void UpdateAI(uint32 diff) override
284 {
285 _events.Update(diff);
286
287 while (uint32 eventId = _events.ExecuteEvent())
288 {
289 switch (eventId)
290 {
292 talkWing = urand (0, 4);
293 Talk(talkWing);
295 break;
297 me->SetWalk(true);
300 break;
302 talkWing = 5;
303 Talk(talkWing);
305 break;
307 StoreTargets();
308 break;
312 break;
315 break;
319 {
320 creature->SetEntry(NPC_IMAGE_OF_BLAUMEUX);
321 creature->SetDisplayId(MODEL_IMAGE_OF_BLAUMEUX);
322 }
324 break;
328 {
329 creature->SetEntry(NPC_IMAGE_OF_ZELIEK);
330 creature->SetDisplayId(MODEL_IMAGE_OF_ZELIEK);
331 }
333 break;
336 break;
337 case EVENT_HEIGAN_2:
339 break;
340 default:
341 break;
342 }
343 }
345 }
346 private:
351};
352
353/*######
354## Quest: Defending Wyrmrest Temple ID: 12372
355######*/
356
358{
359 // Quest data
362 MENU_ID = 9568,
363
364 // Spells data
366 SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE = 52421, // ID - 52421 Wyrmrest Defender: On Low Health Boss Emote to Controller - Random /self/
367 SPELL_RENEW = 49263, // cast to heal drakes
369
371
372 // Texts data
375
378
380{
382 {
383 Initialize();
384 }
385
387 {
388 hpWarningReady = true;
389 renewRecoveryCanCheck = false;
390
392 }
393
396
398
399 void Reset() override
400 {
401 Initialize();
402 }
403
404 void UpdateAI(uint32 diff) override
405 {
407
408 // Check system for Health Warning should happen first time whenever get under 30%,
409 // after it should be able to happen only after recovery of last renew is fully done (20 sec),
410 // next one used won't interfere
411 if (hpWarningReady && me->GetHealthPct() <= 30.0f)
412 {
414 hpWarningReady = false;
415 }
416
418 {
419 if (RenewRecoveryChecker <= diff)
420 {
421 renewRecoveryCanCheck = false;
422 hpWarningReady = true;
423 }
424 else
425 RenewRecoveryChecker -= diff;
426 }
427 }
428
429 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
430 {
431 switch (spellInfo->Id)
432 {
435 me->SetImmuneToAll(false);
437 break;
438 // Both below are for checking low hp warning
441 break;
442 case SPELL_RENEW:
444 RenewRecoveryChecker = 20000;
445
447 break;
448 }
449 }
450
451 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
452 {
453 if (menuId == MENU_ID && gossipListId == GOSSIP_OPTION_ID)
454 {
455 // Makes player cast trigger spell for 49207 on self
456 player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
457 CloseGossipMenuFor(player);
458 }
459 return true;
460 }
461
462 void OnCharmed(bool /*apply*/) override
463 {
465 }
466};
467
468// 49213 - Defending Wyrmrest Temple: Character Script Cast From Gossip
488
489// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect
491{
493
494 void HandleDummy(SpellEffIndex /*effIndex*/)
495 {
496 if (GetHitCreature())
497 if (Unit* caster = GetOriginalCaster())
498 if (Vehicle* vehicle = caster->GetVehicleKit())
499 if (Unit* passenger = vehicle->GetPassenger(0))
500 if (Player* player = passenger->ToPlayer())
501 player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT);
502 }
503
508};
509
510/*######
511## Quest 12053: The Might of the Horde
512######*/
513
524
525// 47304 - Warsong Battle Standard
527{
529
530 bool Validate(SpellInfo const* /*spellInfo*/) override
531 {
532 return sObjectMgr->GetBroadcastText(TEXT_TAUNT_1) &&
533 sObjectMgr->GetBroadcastText(TEXT_TAUNT_2) &&
534 sObjectMgr->GetBroadcastText(TEXT_TAUNT_3) &&
535 sObjectMgr->GetBroadcastText(TEXT_TAUNT_4) &&
536 sObjectMgr->GetBroadcastText(TEXT_TAUNT_5) &&
537 sObjectMgr->GetBroadcastText(TEXT_TAUNT_6) &&
538 sObjectMgr->GetBroadcastText(TEXT_TAUNT_7);
539 }
540
541 void HandleScript(SpellEffIndex /*effIndex*/)
542 {
543 Unit* caster = GetCaster();
545 }
546
551};
552
553/*######
554## Quest 12470 & 13343: Mystery of the Infinite & Mystery of the Infinite, Redux
555######*/
556
561
562// 49686 - Mystery of the Infinite: Script Effect Player Cast Mirror Image
582
583// 50020 - Mystery of the Infinite: Hourglass cast See Invis on Master
585{
587
588 bool Validate(SpellInfo const* spellInfo) override
589 {
590 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
591 }
592
593 void HandleScript(SpellEffIndex /*effIndex*/)
594 {
595 if (TempSummon* casterSummon = GetCaster()->ToTempSummon())
596 if (Unit* summoner = casterSummon->GetSummonerUnit())
597 summoner->CastSpell(summoner, uint32(GetEffectValue()));
598 }
599
604};
605
606/*######
607## Quest 12457: The Chain Gun And You
608######*/
609
615
616// BasePoints of the dummy effect is ID of npc_text used to group texts, it's not implemented so texts are grouped manually. Same with 49556 but looks like it's not used
617// 49550 - Call Out Injured Soldier
619{
621
622 bool Validate(SpellInfo const* /*spellInfo*/) override
623 {
624 return sObjectMgr->GetBroadcastText(TEXT_CALL_OUT_1) && sObjectMgr->GetBroadcastText(TEXT_CALL_OUT_2);
625 }
626
627 void HandleScript(SpellEffIndex /*effIndex*/)
628 {
629 if (Vehicle* vehicle = GetCaster()->GetVehicleKit())
630 if (Unit* passenger = vehicle->GetPassenger(0))
631 passenger->Unit::Say(RAND(TEXT_CALL_OUT_1, TEXT_CALL_OUT_2), passenger);
632 }
633
638};
639
640/*######
641## Quest 12252: Torture the Torturer
642######*/
643
656
657// 48603 - High Executor's Branding Iron
659{
661
662 bool Validate(SpellInfo const* /*spellInfo*/) override
663 {
665 }
666
668 {
669 Player* caster = GetCaster()->ToPlayer();
670 Creature* target = GetHitCreature();
671 if (!caster || !target)
672 return;
673
674 target->CastSpell(target, SPELL_BRANDING_IRON_IMPACT);
675
676 if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
677 {
678 switch (aura->GetStackAmount())
679 {
680 case 1:
681 target->AI()->Talk(WHISPER_TORTURE_1, caster);
682 break;
683 case 2:
684 target->AI()->Talk(WHISPER_TORTURE_2, caster);
685 break;
686 case 3:
687 target->AI()->Talk(WHISPER_TORTURE_3, caster);
688 break;
689 case 4:
690 target->AI()->Talk(WHISPER_TORTURE_4, caster);
691 break;
692 case 5:
693 target->AI()->Talk(WHISPER_TORTURE_5, caster);
694 target->CastSpell(caster, SPELL_TORTURER_KILL_CREDIT);
695 break;
696 case 6:
697 target->AI()->Talk(WHISPER_TORTURE_RANDOM, caster);
698 break;
699 default:
700 return;
701 }
702 }
703 }
704
709};
710
711/*######
712## Quest 12260: The Perfect Dissemblance
713######*/
714
719
720// 48692 - The Perfect Dissemblance: Quest Completion Script
740
741/*######
742## Quest 12274: A Fall From Grace
743######*/
744
750
751// 48762 - A Fall from Grace: Scarlet Raven Priest Image - Master
772
773// 48769 - A Fall from Grace: Quest Completion Script
794
795/*######
796## Quest 12232: Bombard the Ballistae
797######*/
798
807
808// 48347 - Bombard the Ballistae: FX Master
843
844/*######
845## Quest 12060, 12061: Projections and Plans
846######*/
847
856
857// 47097 - Surge Needle Teleporter
859{
861
862 bool Validate(SpellInfo const* /*spellInfo*/) override
863 {
865 }
866
867 void HandleScript(SpellEffIndex /*effIndex*/)
868 {
869 Unit* caster = GetCaster();
870 switch (caster->GetAreaId())
871 {
873 caster->CastSpell(caster, SPELL_TELE_MOONREST_GARDENS);
874 break;
876 caster->CastSpell(caster, SPELL_TELE_SURGE_NEEDLE);
877 break;
878 default:
879 break;
880 }
881 }
882
887};
888
889/*######
890## Quest 12125, 12126, 12127: In Service of Blood & In Service of the Unholy & In Service of Frost
891######*/
892
893// 47703 - Unholy Union
894// 47724 - Frost Draw
895// 50252 - Blood Draw
915
916/*######
917## Quest 12076: Messy Business
918######*/
919
924
925// 47435 - Scrape Corrosive Spit
945
946// 47447 - Corrosive Spit
977
978/*######
979## Quest 12065, 12066: The Focus on the Beach
980######*/
981
986
987// 47393 - The Focus on the Beach: Quest Completion Script
1007
1008/*######
1009## Quest 12083, 12084: Atop the Woodlands
1010######*/
1011
1016
1017// 47615 - Atop the Woodlands: Quest Completion Script
1037
1038/*######
1039## Quest 12107, 12110: The End of the Line
1040######*/
1041
1046
1047// 47638 - The End of the Line: Quest Completion Script
1067
1068/*######
1069## Quest 12028: Spiritual Insight
1070######*/
1071
1076
1077// 47190 - Toalu'u's Spiritual Incense
1097
1098/*######
1099## Quest 24545: The Sacred and the Corrupt
1100######*/
1101
1106
1107// 70653 - Lich King Zap Player
1127
1129{
1152}
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
@ POINT_MOTION_TYPE
#define sObjectMgr
Definition ObjectMgr.h:1721
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
#define RegisterCreatureAI(ai_name)
Definition ScriptMgr.h:1139
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void CloseGossipMenuFor(Player *player)
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ GENDER_FEMALE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_DUMMY
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define SpellHitFn(F)
@ UNIT_NPC_FLAG_GOSSIP
@ UNIT_FLAG_PLAYER_CONTROLLED
SpellInfo const * GetSpellInfo() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
Aura * GetAura() const
Unit * GetTarget() const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Creature *const me
Definition CreatureAI.h:82
void SetImmuneToAll(bool apply) override
Definition Creature.h:126
CreatureAI * AI() const
Definition Creature.h:154
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:73
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
static Player * ToPlayer(Object *o)
Definition Object.h:180
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
uint32 Id
Definition SpellInfo.h:289
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition SpellInfo.h:483
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
SpellInfo const * GetSpellInfo() const
Unit * GetOriginalCaster() const
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
Definition Unit.h:769
float GetHealthPct() const
Definition Unit.h:921
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4439
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:1098
Unit * GetCharmerOrOwner() const
Definition Unit.h:1265
bool SetWalk(bool enable)
Definition Unit.cpp:13268
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13250
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2099
uint32 GetAreaId() const
Definition Object.h:374
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
PrepareSpellScript(spell_dragonblight_atop_the_woodlands_quest_completion_script)
PrepareSpellScript(spell_dragonblight_bombard_the_ballistae_fx_master)
PrepareSpellScript(spell_dragonblight_call_out_injured_soldier)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_dragonblight_cancel_banshees_magic_mirror)
PrepareSpellScript(spell_dragonblight_cancel_scarlet_raven_priest_image)
void PeriodicTick(AuraEffect const *aurEff)
void AfterApply(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
PrepareAuraScript(spell_dragonblight_corrosive_spit)
PrepareSpellScript(spell_dragonblight_defending_wyrmrest_temple_cast_from_gossip)
PrepareSpellScript(spell_dragonblight_defending_wyrmrest_temple_dummy)
PrepareSpellScript(spell_dragonblight_end_of_the_line_quest_completion_script)
PrepareSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_dragonblight_focus_on_the_beach_quest_completion_script)
PrepareSpellScript(spell_dragonblight_high_executor_branding_iron)
PrepareSpellScript(spell_dragonblight_lich_king_zap_player)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_dragonblight_moti_hourglass_cast_see_invis_on_master)
PrepareSpellScript(spell_dragonblight_moti_mirror_image_script_effect)
PrepareSpellScript(spell_dragonblight_scarlet_raven_priest_image_master)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_dragonblight_scrape_corrosive_spit)
PrepareSpellScript(spell_dragonblight_surge_needle_teleporter)
bool Validate(SpellInfo const *) override
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_dragonblight_toaluus_spiritual_incense)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_dragonblight_warsong_battle_standard)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void UpdateAI(uint32 diff) override
Definition CombatAI.cpp:279
void MovementInform(uint32 type, uint32 id) override
void UpdateAI(uint32 diff) override
npc_commander_eligor_dawnbringer(Creature *creature)
void ChangeImage(uint32 entry, uint32 model, uint8 text)
npc_wyrmrest_defender(Creature *creature)
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
void OnCharmed(bool) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void UpdateAI(uint32 diff) override
TheChainGunAndYou
@ TEXT_CALL_OUT_2
@ TEXT_CALL_OUT_1
TheFocusOnTheBeach
@ SPELL_LEY_LINE_INFORMATION_01
WarsongBattleStandard
@ TEXT_TAUNT_2
@ TEXT_TAUNT_3
@ TEXT_TAUNT_1
@ TEXT_TAUNT_4
@ TEXT_TAUNT_6
@ TEXT_TAUNT_5
@ TEXT_TAUNT_7
void AddSC_dragonblight()
DefendingWyrmrestTemple
@ NPC_WYRMREST_TEMPLE_CREDIT
@ WHISPER_MOUNTED
@ QUEST_DEFENDING_WYRMREST_TEMPLE
@ GOSSIP_OPTION_ID
@ SPELL_CHARACTER_SCRIPT
@ SPELL_RENEW
@ SPELL_WYRMREST_DEFENDER_MOUNT
@ BOSS_EMOTE_ON_LOW_HEALTH
@ SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE
@ SPELL_SUMMON_WYRMREST_DEFENDER
CommanderEligorDawnbringer
@ EVENT_TALK_COMPLETE
@ EVENT_DEATH_KNIGHTS_4
@ EVENT_KELTHUZAD_2
@ SAY_LOATHEB
@ SAY_DEATH_KNIGHTS_2
@ NPC_IMAGE_OF_THADDIUS
@ NPC_IMAGE_OF_ZELIEK
@ SAY_PLAGUE_WING
@ MODEL_IMAGE_OF_BLAUMEUX
@ EVENT_START_RANDOM
@ MODEL_IMAGE_OF_GROBBULUS
@ SAY_SAPPHIRON
@ EVENT_GET_TARGETS
@ EVENT_HEIGAN_2
@ SAY_DEATH_KNIGHTS_3
@ SAY_MAEXXNA
@ NPC_INFANTRYMAN
@ EVENT_KELTHUZAD_3
@ MODEL_IMAGE_OF_GOTHIK
@ MODEL_IMAGE_OF_RAZUVIOUS
@ NPC_IMAGE_OF_THANE
@ MODEL_IMAGE_OF_LOATHEB
@ MODEL_IMAGE_OF_THADDIUS
@ MODEL_IMAGE_OF_FAERLINA
@ SAY_KELTHUZAD_2
@ SAY_PATCHWERK
@ SAY_PINNACLE
@ EVENT_DEATH_KNIGHTS_2
@ SAY_DEATH_KNIGHTS_4
@ NPC_IMAGE_OF_GOTHIK
@ NPC_IMAGE_OF_ANUBREKHAN
@ SAY_DEATH_KNIGHTS_1
@ MODEL_IMAGE_OF_NOTH
@ SAY_HEIGAN_1
@ MODEL_IMAGE_OF_ZELIEK
@ EVENT_MOVE_TO_POINT
@ NPC_IMAGE_OF_BLAUMEUX
@ SAY_FAERLINA
@ MODEL_IMAGE_OF_MAEXXNA
@ SAY_GROBBULUS
@ MODEL_IMAGE_OF_PATCHWERK
@ NPC_IMAGE_OF_KELTHUZAD
@ NPC_IMAGE_OF_FAERLINA
@ SAY_KELTHUZAD_3
@ EVENT_DEATH_KNIGHTS_3
@ SAY_ANUBREKHAN
@ SAY_GOTHIK
@ SPELL_HEROIC_IMAGE_CHANNEL
@ SAY_TALK_COMPLETE
@ SAY_ABOMINATION_WING
@ SAY_SPIDER_WING
@ MODEL_IMAGE_OF_SAPPHIRON
@ MODEL_IMAGE_OF_ANUBREKHAN
@ MODEL_IMAGE_OF_KELTHUZAD
@ NPC_SENTINAL
@ SAY_HEIGAN_2
@ NPC_IMAGE_OF_MAEXXNA
@ NPC_IMAGE_OF_PATCHWERK
@ SAY_KELTHUZAD_1
@ NPC_BATTLE_MAGE
@ SAY_DEATH_KNIGHT_WING
@ NPC_IMAGE_OF_GLUTH
@ NPC_IMAGE_OF_RAZUVIOUS
@ NPC_IMAGE_OF_HEIGAN
@ NPC_IMAGE_OF_SAPPHIRON
@ NPC_IMAGE_OF_NOTH
@ MODEL_IMAGE_OF_GLUTH
@ MODEL_IMAGE_OF_HEIGAN
@ NPC_IMAGE_OF_GROBBULUS
@ NPC_IMAGE_OF_LOATHEB
@ SAY_RAZUVIOUS
@ SAY_THADDIUS
@ MODEL_IMAGE_OF_THANE
Position const PosTalkLocations[6]
@ SPELL_LEY_LINE_INFORMATION_03
@ SPELL_PRIEST_IMAGE_MALE
@ SPELL_PRIEST_IMAGE_FEMALE
TortureTheTorturer
@ WHISPER_TORTURE_5
@ SPELL_TORTURER_KILL_CREDIT
@ SPELL_BRANDING_IRON_IMPACT
@ WHISPER_TORTURE_RANDOM
@ WHISPER_TORTURE_1
@ WHISPER_TORTURE_4
@ WHISPER_TORTURE_3
@ WHISPER_TORTURE_2
ProjectionsAndPlans
@ AREA_SURGE_NEEDLE
@ SPELL_TELE_SURGE_NEEDLE
@ SPELL_TELE_MOONREST_GARDENS
@ AREA_MOONREST_GARDENS
MysteryOfTheInfinite
@ SPELL_MIRROR_IMAGE_AURA
uint32 const AudienceMobs[3]
ThePerfectDissemblance
@ SPELL_BANSHEES_MAGIC_MIRROR
BombardTheBallistae
@ SPELL_BALLISTA_BOW
@ SPELL_BALLISTA_KNOCKBACK
@ SPELL_BALLISTA_MISSILE
@ SPELL_BALLISTA_FRAME
@ SPELL_BALLISTA_WHEEL
@ SPELL_CORROSIVE_SPIT
TheSacredAndTheCorrupt
@ SPELL_KNOCKDOWN
@ SPELL_LEY_LINE_INFORMATION_02
@ SPELL_SPIRITUAL_INSIGHT