TrinityCore
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 "DB2Stores.h"
22#include "MotionMaster.h"
23#include "ObjectAccessor.h"
24#include "Player.h"
25#include "ScriptedCreature.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 }
344 }
345 private:
350};
351
353{
354 // Quest
357
358 // Movie
359 MOVIE_ID_GATES = 14
361
362/*######
363## Quest Strengthen the Ancients (12096|12092)
364######*/
365
367{
371
374
375 NPC_LOTHALOR = 26321
377
378// 47575 - Strengthen the Ancients: On Interact Dummy to Woodlands Walker
380{
381 void HandleDummy(SpellEffIndex /*effIndex*/)
382 {
383 uint32 roll = rand32() % 2;
384
385 Creature* tree = GetHitCreature();
386 Player* player = GetCaster()->ToPlayer();
387
388 if (!tree || !player)
389 return;
390
392
393 if (roll == 1) // friendly version
394 {
395 tree->CastSpell(player, SPELL_CREATE_ITEM_BARK);
396 tree->AI()->Talk(SAY_WALKER_FRIENDLY, player);
397 tree->DespawnOrUnsummon(1s);
398 }
399 else // enemy version
400 {
401 tree->AI()->Talk(SAY_WALKER_ENEMY, player);
403 tree->Attack(player, true);
404 }
405 }
406
407 void Register() override
408 {
410 }
411};
412
413// 47530 - Bark of the Walkers
415{
416 void HandleDummy(SpellEffIndex /*effIndex*/)
417 {
418 Creature* lothalor = GetHitCreature();
419 if (!lothalor || lothalor->GetEntry() != NPC_LOTHALOR)
420 return;
421
422 lothalor->AI()->Talk(SAY_LOTHALOR);
423 lothalor->RemoveAura(SPELL_CONFUSED);
424 lothalor->DespawnOrUnsummon(4s);
425 }
426
427 void Register() override
428 {
430 }
431};
432
433/*######
434## Quest: Defending Wyrmrest Temple ID: 12372
435######*/
436
438{
439 // Quest data
442 MENU_ID = 9568,
443
444 // Spells data
446 SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE = 52421, // ID - 52421 Wyrmrest Defender: On Low Health Boss Emote to Controller - Random /self/
447 SPELL_RENEW = 49263, // cast to heal drakes
449
450 // Texts data
454
456{
458 {
459 Initialize();
460 }
461
463 {
464 hpWarningReady = true;
465 renewRecoveryCanCheck = false;
466
468 }
469
472
474
475 void Reset() override
476 {
477 Initialize();
478 }
479
480 void UpdateAI(uint32 diff) override
481 {
483
484 // Check system for Health Warning should happen first time whenever get under 30%,
485 // after it should be able to happen only after recovery of last renew is fully done (20 sec),
486 // next one used won't interfere
487 if (hpWarningReady && me->GetHealthPct() <= 30.0f)
488 {
490 hpWarningReady = false;
491 }
492
494 {
495 if (RenewRecoveryChecker <= diff)
496 {
497 renewRecoveryCanCheck = false;
498 hpWarningReady = true;
499 }
500 else
501 RenewRecoveryChecker -= diff;
502 }
503 }
504
505 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
506 {
507 switch (spellInfo->Id)
508 {
511 me->SetImmuneToAll(false);
513 break;
514 // Both below are for checking low hp warning
517 break;
518 case SPELL_RENEW:
520 RenewRecoveryChecker = 20000;
521
523 break;
524 }
525 }
526
527 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
528 {
529 if (menuId == MENU_ID && gossipListId == GOSSIP_OPTION_ID)
530 {
531 // Makes player cast trigger spell for 49207 on self
532 player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
533 CloseGossipMenuFor(player);
534 }
535 return true;
536 }
537
538 void OnCharmed(bool /*apply*/) override
539 {
541 }
542};
543
544/*######
545## Quest 12053: The Might of the Horde
546######*/
547
549{
556 TEXT_TAUNT_7 = 25894
558
559// 47304 - Warsong Battle Standard
561{
562 bool Validate(SpellInfo const* /*spellInfo*/) override
563 {
564 return sBroadcastTextStore.HasRecord(TEXT_TAUNT_1) &&
571 }
572
573 void HandleScript(SpellEffIndex /*effIndex*/)
574 {
575 Unit* caster = GetCaster();
577 }
578
579 void Register() override
580 {
582 }
583};
584
585/*######
586## Quest 12470 & 13343: Mystery of the Infinite & Mystery of the Infinite, Redux
587######*/
588
590{
593
594// 49686 - Mystery of the Infinite: Script Effect Player Cast Mirror Image
596{
597 bool Validate(SpellInfo const* /*spellInfo*/) override
598 {
600 }
601
602 void HandleScript(SpellEffIndex /*effIndex*/)
603 {
605 }
606
607 void Register() override
608 {
610 }
611};
612
613// 50020 - Mystery of the Infinite: Hourglass cast See Invis on Master
615{
616 bool Validate(SpellInfo const* spellInfo) override
617 {
618 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
619 }
620
621 void HandleScript(SpellEffIndex /*effIndex*/)
622 {
623 if (TempSummon* casterSummon = GetCaster()->ToTempSummon())
624 if (Unit* summoner = casterSummon->GetSummonerUnit())
625 summoner->CastSpell(summoner, uint32(GetEffectValue()));
626 }
627
628 void Register() override
629 {
631 }
632};
633
634/*######
635## Quest 12457: The Chain Gun And You
636######*/
637
639{
641 TEXT_CALL_OUT_2 = 27084
643
644// 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
645// 49550 - Call Out Injured Soldier
647{
648 bool Validate(SpellInfo const* /*spellInfo*/) override
649 {
651 }
652
653 void HandleScript(SpellEffIndex /*effIndex*/)
654 {
655 if (Vehicle* vehicle = GetCaster()->GetVehicleKit())
656 if (Unit* passenger = vehicle->GetPassenger(0))
657 passenger->Unit::Say(RAND(TEXT_CALL_OUT_1, TEXT_CALL_OUT_2), passenger);
658 }
659
660 void Register() override
661 {
663 }
664};
665
666/*######
667## Quest 12252: Torture the Torturer
668######*/
669
671{
678
682
683// 48603 - High Executor's Branding Iron
685{
686 bool Validate(SpellInfo const* /*spellInfo*/) override
687 {
689 }
690
692 {
693 Player* caster = GetCaster()->ToPlayer();
694 Creature* target = GetHitCreature();
695 if (!caster || !target)
696 return;
697
698 target->CastSpell(target, SPELL_BRANDING_IRON_IMPACT);
699
700 if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
701 {
702 switch (aura->GetStackAmount())
703 {
704 case 1:
705 target->AI()->Talk(WHISPER_TORTURE_1, caster);
706 break;
707 case 2:
708 target->AI()->Talk(WHISPER_TORTURE_2, caster);
709 break;
710 case 3:
711 target->AI()->Talk(WHISPER_TORTURE_3, caster);
712 break;
713 case 4:
714 target->AI()->Talk(WHISPER_TORTURE_4, caster);
715 break;
716 case 5:
717 target->AI()->Talk(WHISPER_TORTURE_5, caster);
718 target->CastSpell(caster, SPELL_TORTURER_KILL_CREDIT);
719 break;
720 case 6:
721 target->AI()->Talk(WHISPER_TORTURE_RANDOM, caster);
722 break;
723 default:
724 return;
725 }
726 }
727 }
728
729 void Register() override
730 {
732 }
733};
734
735/*######
736## Quest 12260: The Perfect Dissemblance
737######*/
738
740{
743
744// 48692 - The Perfect Dissemblance: Quest Completion Script
746{
747 bool Validate(SpellInfo const* /*spellInfo*/) override
748 {
750 }
751
752 void HandleScript(SpellEffIndex /*effIndex*/)
753 {
755 }
756
757 void Register() override
758 {
760 }
761};
762
763/*######
764## Quest 12274: A Fall From Grace
765######*/
766
768{
772
773// 48762 - A Fall from Grace: Scarlet Raven Priest Image - Master
775{
776 bool Validate(SpellInfo const* /*spellInfo*/) override
777 {
779 }
780
782 {
783 if (Player* target = GetHitUnit()->ToPlayer())
784 target->CastSpell(target, target->GetNativeGender() == GENDER_FEMALE ? SPELL_PRIEST_IMAGE_FEMALE : SPELL_PRIEST_IMAGE_MALE);
785 }
786
787 void Register() override
788 {
790 }
791};
792
793// 48769 - A Fall from Grace: Quest Completion Script
795{
796 bool Validate(SpellInfo const* /*spellInfo*/) override
797 {
799 }
800
801 void HandleScript(SpellEffIndex /*effIndex*/)
802 {
805 }
806
807 void Register() override
808 {
810 }
811};
812
813/*######
814## Quest 12232: Bombard the Ballistae
815######*/
816
818{
825
826// 48347 - Bombard the Ballistae: FX Master
828{
829 bool Validate(SpellInfo const* /*spellInfo*/) override
830 {
831 return ValidateSpellInfo(
832 {
838 });
839 }
840
841 void HandleScript(SpellEffIndex /*effIndex*/)
842 {
843 Unit* caster = GetCaster();
844 caster->CastSpell(caster, SPELL_BALLISTA_BOW);
845 caster->CastSpell(caster, SPELL_BALLISTA_FRAME);
846 caster->CastSpell(caster, SPELL_BALLISTA_MISSILE);
847 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
848 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
849 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
850 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
851 caster->CastSpell(caster, SPELL_BALLISTA_KNOCKBACK);
852 }
853
854 void Register() override
855 {
857 }
858};
859
860/*######
861## Quest 12060, 12061: Projections and Plans
862######*/
863
865{
868
872
873// 47097 - Surge Needle Teleporter
875{
876 bool Validate(SpellInfo const* /*spellInfo*/) override
877 {
879 }
880
881 void HandleScript(SpellEffIndex /*effIndex*/)
882 {
883 Unit* caster = GetCaster();
884 switch (caster->GetAreaId())
885 {
887 caster->CastSpell(caster, SPELL_TELE_MOONREST_GARDENS);
888 break;
890 caster->CastSpell(caster, SPELL_TELE_SURGE_NEEDLE);
891 break;
892 default:
893 break;
894 }
895 }
896
897 void Register() override
898 {
900 }
901};
902
903/*######
904## Quest 12125, 12126, 12127: In Service of Blood & In Service of the Unholy & In Service of Frost
905######*/
906
907// 47703 - Unholy Union
908// 47724 - Frost Draw
909// 50252 - Blood Draw
911{
912 bool Validate(SpellInfo const* spellInfo) override
913 {
914 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
915 }
916
917 void HandleScript(SpellEffIndex /*effIndex*/)
918 {
920 }
921
922 void Register() override
923 {
925 }
926};
927
928// 47447 - Corrosive Spit
930{
931 bool Validate(SpellInfo const* spellInfo) override
932 {
933 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
934 }
935
936 void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
937 {
938 if (GetTarget()->HasAura(GetEffectInfo(EFFECT_0).CalcValue()))
939 GetAura()->Remove();
940 }
941
942 void PeriodicTick(AuraEffect const* /*aurEff*/)
943 {
944 if (GetTarget()->HasAura(GetEffectInfo(EFFECT_0).CalcValue()))
945 {
947 GetAura()->Remove();
948 }
949 }
950
951 void Register() override
952 {
955 }
956};
957
959{
976}
First const & RAND(First const &first, Second const &second, Rest const &... rest)
DB2Storage< BroadcastTextEntry > sBroadcastTextStore("BroadcastText.db2", &BroadcastTextLoadInfo::Instance)
uint8_t uint8
Definition: Define.h:144
uint32_t uint32
Definition: Define.h:142
@ POINT_MOTION_TYPE
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:42
uint32 rand32()
Definition: Random.cpp:70
#define RegisterCreatureAI(ai_name)
Definition: ScriptMgr.h:1380
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void CloseGossipMenuFor(Player *player)
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_1
Definition: SharedDefines.h:31
@ EFFECT_0
Definition: SharedDefines.h:30
@ GENDER_FEMALE
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ FACTION_MONSTER
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK
@ SPELL_AURA_PERIODIC_DAMAGE
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define AuraEffectPeriodicFn(F, I, N)
Definition: SpellScript.h:2046
#define AuraEffectApplyFn(F, I, N, M)
Definition: SpellScript.h:2029
#define SpellHitFn(F)
Definition: SpellScript.h:854
@ UNIT_NPC_FLAG_GOSSIP
Definition: UnitDefines.h:297
@ UNIT_NPC_FLAG_SPELLCLICK
Definition: UnitDefines.h:321
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition: UnitDefines.h:147
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
Definition: SpellScript.h:2045
HookList< EffectApplyHandler > AfterEffectApply
Definition: SpellScript.h:2028
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
Aura * GetAura() const
Unit * GetTarget() const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
Creature *const me
Definition: CreatureAI.h:61
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
void SetImmuneToAll(bool apply) override
Definition: Creature.h:167
CreatureAI * AI() const
Definition: Creature.h:214
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 MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
uint32 GetEntry() const
Definition: Object.h:161
static Player * ToPlayer(Object *o)
Definition: Object.h:213
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
Definition: SpellInfo.cpp:495
uint32 const Id
Definition: SpellInfo.h:325
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition: SpellInfo.h:577
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
Definition: SpellScript.h:852
HookList< EffectHandler > OnEffectHit
Definition: SpellScript.h:839
Unit * GetHitUnit() const
int32 GetEffectValue() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
SpellInfo const * GetSpellInfo() const
Definition: Unit.h:627
float GetHealthPct() const
Definition: Unit.h:784
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3685
void SetFaction(uint32 faction) override
Definition: Unit.h:859
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
void RemoveNpcFlag(NPCFlags flags)
Definition: Unit.h:983
Unit * GetCharmerOrOwner() const
Definition: Unit.h:1200
bool Attack(Unit *victim, bool meleeAttack)
Definition: Unit.cpp:5670
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition: Unit.cpp:4560
bool SetWalk(bool enable)
Definition: Unit.cpp:12707
void SetFacingTo(float const ori, bool force=true)
Definition: Unit.cpp:12653
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:833
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
uint32 GetAreaId() const
Definition: Object.h:546
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *)
bool Validate(SpellInfo const *spellInfo) override
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *spellInfo) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
void HandleDummy(SpellEffIndex)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void UpdateAI(uint32 diff) override
Definition: CombatAI.cpp:238
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
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()
CommanderEligorDawnbringer
@ EVENT_TALK_COMPLETE
@ EVENT_DEATH_KNIGHTS_4
@ EVENT_KELTHUZAD_2
@ SAY_NOTH
@ SAY_LOATHEB
@ SAY_DEATH_KNIGHTS_2
@ NPC_IMAGE_OF_THADDIUS
@ NPC_IMAGE_OF_ZELIEK
@ SAY_PLAGUE_WING
@ MODEL_IMAGE_OF_BLAUMEUX
@ SAY_GLUTH
@ 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]
AFallFromGrace
@ SPELL_PRIEST_IMAGE_MALE
@ SPELL_PRIEST_IMAGE_FEMALE
WyrmDefenderEnum
@ 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
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
StrengthenAncientsMisc
@ SPELL_CONFUSED
@ SAY_LOTHALOR
@ SAY_WALKER_ENEMY
@ SPELL_CREATE_ITEM_BARK
@ NPC_LOTHALOR
@ SAY_WALKER_FRIENDLY
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
AlexstraszaWrGate
@ QUEST_RETURN_TO_AG_A
@ QUEST_RETURN_TO_AG_H
@ MOVIE_ID_GATES