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 Strengthen the Ancients (12096|12092)
364######*/
365
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
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
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
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
583};
584
585/*######
586## Quest 12470 & 13343: Mystery of the Infinite & Mystery of the Infinite, Redux
587######*/
588
593
594// 49686 - Mystery of the Infinite: Script Effect Player Cast Mirror Image
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).CalcValueAsInt()) });
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(GetEffectValueAsInt()));
626 }
627
632};
633
634/*######
635## Quest 12457: The Chain Gun And You
636######*/
637
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
664};
665
666/*######
667## Quest 12252: Torture the Torturer
668######*/
669
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
733};
734
735/*######
736## Quest 12260: The Perfect Dissemblance
737######*/
738
743
744// 48692 - The Perfect Dissemblance: Quest Completion Script
762
763/*######
764## Quest 12274: A Fall From Grace
765######*/
766
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
791};
792
793// 48769 - A Fall from Grace: Quest Completion Script
812
813/*######
814## Quest 12232: Bombard the Ballistae
815######*/
816
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
858};
859
860/*######
861## Quest 12060, 12061: Projections and Plans
862######*/
863
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
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
927
928// 47447 - Corrosive Spit
957
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:42
uint32 rand32()
Definition Random.cpp:70
#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
@ 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)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define SpellHitFn(F)
@ UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_SPELLCLICK
@ 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 DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetImmuneToAll(bool apply) override
Definition Creature.h:181
CreatureAI * AI() const
Definition Creature.h:228
uint32 ExecuteEvent()
Definition EventMap.cpp:77
void Update(uint32 time)
Definition EventMap.h:61
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
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
uint32 GetEntry() const
Definition Object.h:89
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:588
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
Definition Unit.h:635
float GetHealthPct() const
Definition Unit.h:796
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3828
void SetFaction(uint32 faction) override
Definition Unit.h:872
MotionMaster * GetMotionMaster()
Definition Unit.h:1723
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:998
Unit * GetCharmerOrOwner() const
Definition Unit.h:1221
bool Attack(Unit *victim, bool meleeAttack)
Definition Unit.cpp:5853
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4700
bool SetWalk(bool enable)
Definition Unit.cpp:13343
void SetFacingTo(float const ori, bool force=true)
Definition Unit.cpp:13289
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:846
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3974
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2217
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:1517
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
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:241
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_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_PRIEST_IMAGE_MALE
@ SPELL_PRIEST_IMAGE_FEMALE
@ 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