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 "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: Defending Wyrmrest Temple ID: 12372
364######*/
365
367{
368 // Quest data
371 MENU_ID = 9568,
372
373 // Spells data
375 SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE = 52421, // ID - 52421 Wyrmrest Defender: On Low Health Boss Emote to Controller - Random /self/
376 SPELL_RENEW = 49263, // cast to heal drakes
378
380
381 // Texts data
384
387
389{
391 {
392 Initialize();
393 }
394
396 {
397 hpWarningReady = true;
398 renewRecoveryCanCheck = false;
399
401 }
402
405
407
408 void Reset() override
409 {
410 Initialize();
411 }
412
413 void UpdateAI(uint32 diff) override
414 {
416
417 // Check system for Health Warning should happen first time whenever get under 30%,
418 // after it should be able to happen only after recovery of last renew is fully done (20 sec),
419 // next one used won't interfere
420 if (hpWarningReady && me->GetHealthPct() <= 30.0f)
421 {
423 hpWarningReady = false;
424 }
425
427 {
428 if (RenewRecoveryChecker <= diff)
429 {
430 renewRecoveryCanCheck = false;
431 hpWarningReady = true;
432 }
433 else
434 RenewRecoveryChecker -= diff;
435 }
436 }
437
438 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
439 {
440 switch (spellInfo->Id)
441 {
444 me->SetImmuneToAll(false);
446 break;
447 // Both below are for checking low hp warning
450 break;
451 case SPELL_RENEW:
453 RenewRecoveryChecker = 20000;
454
456 break;
457 }
458 }
459
460 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
461 {
462 if (menuId == MENU_ID && gossipListId == GOSSIP_OPTION_ID)
463 {
464 // Makes player cast trigger spell for 49207 on self
465 player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
466 CloseGossipMenuFor(player);
467 }
468 return true;
469 }
470
471 void OnCharmed(bool /*apply*/) override
472 {
474 }
475};
476
477// 49213 - Defending Wyrmrest Temple: Character Script Cast From Gossip
495
496// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect
498{
499 void HandleDummy(SpellEffIndex /*effIndex*/)
500 {
501 if (GetHitCreature())
502 if (Unit* caster = GetOriginalCaster())
503 if (Vehicle* vehicle = caster->GetVehicleKit())
504 if (Unit* passenger = vehicle->GetPassenger(0))
505 if (Player* player = passenger->ToPlayer())
506 player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT);
507 }
508
513};
514
515/*######
516## Quest 12053: The Might of the Horde
517######*/
518
529
530// 47304 - Warsong Battle Standard
532{
533 bool Validate(SpellInfo const* /*spellInfo*/) override
534 {
535 return sBroadcastTextStore.HasRecord(TEXT_TAUNT_1) &&
542 }
543
544 void HandleScript(SpellEffIndex /*effIndex*/)
545 {
546 Unit* caster = GetCaster();
548 }
549
554};
555
556/*######
557## Quest 12470 & 13343: Mystery of the Infinite & Mystery of the Infinite, Redux
558######*/
559
564
565// 49686 - Mystery of the Infinite: Script Effect Player Cast Mirror Image
583
584// 50020 - Mystery of the Infinite: Hourglass cast See Invis on Master
586{
587 bool Validate(SpellInfo const* spellInfo) override
588 {
589 return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValueAsInt()) });
590 }
591
592 void HandleScript(SpellEffIndex /*effIndex*/)
593 {
594 if (TempSummon* casterSummon = GetCaster()->ToTempSummon())
595 if (Unit* summoner = casterSummon->GetSummonerUnit())
596 summoner->CastSpell(summoner, uint32(GetEffectValueAsInt()));
597 }
598
603};
604
605/*######
606## Quest 12457: The Chain Gun And You
607######*/
608
614
615// 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
616// 49550 - Call Out Injured Soldier
618{
619 bool Validate(SpellInfo const* /*spellInfo*/) override
620 {
622 }
623
624 void HandleScript(SpellEffIndex /*effIndex*/)
625 {
626 if (Vehicle* vehicle = GetCaster()->GetVehicleKit())
627 if (Unit* passenger = vehicle->GetPassenger(0))
628 passenger->Unit::Say(RAND(TEXT_CALL_OUT_1, TEXT_CALL_OUT_2), passenger);
629 }
630
635};
636
637/*######
638## Quest 12252: Torture the Torturer
639######*/
640
653
654// 48603 - High Executor's Branding Iron
656{
657 bool Validate(SpellInfo const* /*spellInfo*/) override
658 {
660 }
661
663 {
664 Player* caster = GetCaster()->ToPlayer();
665 Creature* target = GetHitCreature();
666 if (!caster || !target)
667 return;
668
669 target->CastSpell(target, SPELL_BRANDING_IRON_IMPACT);
670
671 if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
672 {
673 switch (aura->GetStackAmount())
674 {
675 case 1:
676 target->AI()->Talk(WHISPER_TORTURE_1, caster);
677 break;
678 case 2:
679 target->AI()->Talk(WHISPER_TORTURE_2, caster);
680 break;
681 case 3:
682 target->AI()->Talk(WHISPER_TORTURE_3, caster);
683 break;
684 case 4:
685 target->AI()->Talk(WHISPER_TORTURE_4, caster);
686 break;
687 case 5:
688 target->AI()->Talk(WHISPER_TORTURE_5, caster);
689 target->CastSpell(caster, SPELL_TORTURER_KILL_CREDIT);
690 break;
691 case 6:
692 target->AI()->Talk(WHISPER_TORTURE_RANDOM, caster);
693 break;
694 default:
695 return;
696 }
697 }
698 }
699
704};
705
706/*######
707## Quest 12260: The Perfect Dissemblance
708######*/
709
714
715// 48692 - The Perfect Dissemblance: Quest Completion Script
733
734/*######
735## Quest 12274: A Fall From Grace
736######*/
737
743
744// 48762 - A Fall from Grace: Scarlet Raven Priest Image - Master
746{
747 bool Validate(SpellInfo const* /*spellInfo*/) override
748 {
750 }
751
753 {
754 if (Player* target = GetHitUnit()->ToPlayer())
755 target->CastSpell(target, target->GetNativeGender() == GENDER_FEMALE ? SPELL_PRIEST_IMAGE_FEMALE : SPELL_PRIEST_IMAGE_MALE);
756 }
757
762};
763
764// 48769 - A Fall from Grace: Quest Completion Script
783
784/*######
785## Quest 12232: Bombard the Ballistae
786######*/
787
796
797// 48347 - Bombard the Ballistae: FX Master
799{
800 bool Validate(SpellInfo const* /*spellInfo*/) override
801 {
802 return ValidateSpellInfo(
803 {
809 });
810 }
811
812 void HandleScript(SpellEffIndex /*effIndex*/)
813 {
814 Unit* caster = GetCaster();
815 caster->CastSpell(caster, SPELL_BALLISTA_BOW);
816 caster->CastSpell(caster, SPELL_BALLISTA_FRAME);
817 caster->CastSpell(caster, SPELL_BALLISTA_MISSILE);
818 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
819 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
820 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
821 caster->CastSpell(caster, SPELL_BALLISTA_WHEEL);
822 caster->CastSpell(caster, SPELL_BALLISTA_KNOCKBACK);
823 }
824
829};
830
831/*######
832## Quest 12060, 12061: Projections and Plans
833######*/
834
843
844// 47097 - Surge Needle Teleporter
846{
847 bool Validate(SpellInfo const* /*spellInfo*/) override
848 {
850 }
851
852 void HandleScript(SpellEffIndex /*effIndex*/)
853 {
854 Unit* caster = GetCaster();
855 switch (caster->GetAreaId())
856 {
858 caster->CastSpell(caster, SPELL_TELE_MOONREST_GARDENS);
859 break;
861 caster->CastSpell(caster, SPELL_TELE_SURGE_NEEDLE);
862 break;
863 default:
864 break;
865 }
866 }
867
872};
873
874/*######
875## Quest 12125, 12126, 12127: In Service of Blood & In Service of the Unholy & In Service of Frost
876######*/
877
878// 47703 - Unholy Union
879// 47724 - Frost Draw
880// 50252 - Blood Draw
898
899/*######
900## Quest 12076: Messy Business
901######*/
902
907
908// 47435 - Scrape Corrosive Spit
926
927// 47447 - Corrosive Spit
956
957/*######
958## Quest 12065, 12066: The Focus on the Beach
959######*/
960
965
966// 47393 - The Focus on the Beach: Quest Completion Script
984
985/*######
986## Quest 12083, 12084: Atop the Woodlands
987######*/
988
993
994// 47615 - Atop the Woodlands: Quest Completion Script
1012
1013/*######
1014## Quest 12107, 12110: The End of the Line
1015######*/
1016
1021
1022// 47638 - The End of the Line: Quest Completion Script
1040
1041/*######
1042## Quest 12028: Spiritual Insight
1043######*/
1044
1049
1050// 47190 - Toalu'u's Spiritual Incense
1068
1069/*######
1070## Quest 24545: The Sacred and the Corrupt
1071######*/
1072
1077
1078// 70653 - Lich King Zap Player
1080{
1081 bool Validate(SpellInfo const* /*spellInfo*/) override
1082 {
1084 }
1085
1086 void HandleScript(SpellEffIndex /*effIndex*/)
1087 {
1089 }
1090
1095};
1096
1098{
1121}
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:156
uint32_t uint32
Definition Define.h:154
@ POINT_MOTION_TYPE
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:43
#define RegisterCreatureAI(ai_name)
Definition ScriptMgr.h:1392
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1383
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
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
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)
Creature *const me
Definition CreatureAI.h:63
void SetImmuneToAll(bool apply) override
Definition Creature.h:187
CreatureAI * AI() const
Definition Creature.h:235
void Update(uint32 time)
Definition EventMap.h:77
EventId ExecuteEvent()
Definition EventMap.cpp:77
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:40
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={}, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
Player * ToPlayer()
Definition Object.h:126
int32 CalcValueAsInt(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
uint32 const Id
Definition SpellInfo.h:328
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition SpellInfo.h:590
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
int32 GetEffectValueAsInt() const
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
SpellInfo const * GetSpellInfo() const
Unit * GetOriginalCaster() const
Definition Unit.h:647
float GetHealthPct() const
Definition Unit.h:808
MotionMaster * GetMotionMaster()
Definition Unit.h:1750
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:1013
Unit * GetCharmerOrOwner() const
Definition Unit.h:1241
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4718
bool SetWalk(bool enable)
Definition Unit.cpp:13422
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13385
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:861
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3992
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2222
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:1522
uint32 GetAreaId() const
Definition Object.h:333
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 *) override
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void UpdateAI(uint32 diff) override
Definition CombatAI.cpp:246
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
AlexstraszaWrGate
@ QUEST_RETURN_TO_AG_A
@ QUEST_RETURN_TO_AG_H
@ MOVIE_ID_GATES
@ SPELL_CORROSIVE_SPIT
TheSacredAndTheCorrupt
@ SPELL_KNOCKDOWN
@ SPELL_LEY_LINE_INFORMATION_02
@ SPELL_SPIRITUAL_INSIGHT