TrinityCore
boss_alysrazor.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 "CellImpl.h"
20#include "Containers.h"
21#include "DB2Stores.h"
22#include "firelands.h"
23#include "GridNotifiersImpl.h"
24#include "MotionMaster.h"
25#include "MoveSplineInit.h"
26#include "ObjectAccessor.h"
27#include "PassiveAI.h"
28#include "ScriptedCreature.h"
29#include "SpellInfo.h"
30#include "SpellScript.h"
31#include "TemporarySummon.h"
32
34{
35 // Egg Pile
36 EMOTE_CRACKING_EGGS = 0, // The Molten Eggs begin to crack and splinter!
37};
38
40{
41 // Harbinger of Flame
46
47 // Blazing Monstrosity
72
73 // Egg Pile
78};
79
80#define SPELL_SHARE_HEALTH (me->GetEntry() == NPC_BLAZING_MONSTROSITY_LEFT ? SPELL_SHARE_HEALTH_LEFT : SPELL_SHARE_HEALTH_RIGHT)
81#define SPELL_MOLTEN_BARRAGE (me->GetEntry() == NPC_BLAZING_MONSTROSITY_LEFT ? SPELL_MOLTEN_BARRAGE_LEFT : SPELL_MOLTEN_BARRAGE_RIGHT)
82#define SPELL_MOLTEN_BARRAGE_EFFECT (me->GetEntry() == NPC_BLAZING_MONSTROSITY_LEFT ? SPELL_MOLTEN_BARRAGE_EFFECT_L : SPELL_MOLTEN_BARRAGE_EFFECT_R)
83
85{
86 // Blazing Monstrosity
89
90 // Harbinger of Flame
93
94 // Egg Pile
96};
97
99{
103};
104
106{
107 public:
108 explicit RespawnEggEvent(Creature* egg) : _egg(egg) { }
109
110 bool Execute(uint64 /*time*/, uint32 /*diff*/) override
111 {
113 return true;
114 }
115
116 private:
118};
119
121{
122 public:
123 explicit MoltenEggCheck(Creature* pile) : _eggPile(pile) { }
124
125 bool operator()(Unit* object) const
126 {
127 if (object->GetEntry() != NPC_MOLTEN_EGG_TRASH)
128 return false;
129
130 if (object->GetDisplayId() != object->GetNativeDisplayId())
131 return false;
132
133 if (_eggPile->GetDistance2d(object) > 20.0f)
134 return false;
135
136 return true;
137 }
138
139 private:
141};
142
144{
145 public:
146 void operator()(Creature* creature) const
147 {
148 switch (creature->GetEntry())
149 {
152 case NPC_EGG_PILE:
155 if (!creature->IsAlive())
156 creature->Respawn(true);
157 break;
159 creature->DespawnOrUnsummon();
160 break;
161 }
162 }
163};
164
165static void AlysrazorTrashEvaded(Creature* creature)
166{
167 TrashRespawnWorker check;
168 Trinity::CreatureWorker<TrashRespawnWorker> worker(creature, check);
169 Cell::VisitGridObjects(creature, worker, SIZE_OF_GRIDS);
170}
171
173{
174 public:
175 npc_harbinger_of_flame() : CreatureScript("npc_harbinger_of_flame") { }
176
178 {
180 {
181 }
182
183 void JustEngagedWith(Unit* /*target*/) override
184 {
185 for (ObjectGuid const& birdGuid : me->m_unitData->ChannelObjects)
186 if (Creature* bird = ObjectAccessor::GetCreature(*me, birdGuid))
187 DoZoneInCombat(bird);
188
190 _events.Reset();
193 }
194
195 void JustReachedHome() override
196 {
198 }
199
200 void MoveInLineOfSight(Unit* unit) override
201 {
202 if (me->IsInCombat())
203 return;
204
206 return;
207
209 }
210
211 void UpdateAI(uint32 diff) override
212 {
213 if (!me->IsInCombat())
215 if (Creature* fireBird = me->FindNearestCreature((me->GetHomePosition().GetPositionY() > -275.0f ? NPC_BLAZING_MONSTROSITY_LEFT : NPC_BLAZING_MONSTROSITY_RIGHT), 100.0f))
216 DoCast(fireBird, SPELL_FIRE_CHANNELING);
217
218 if (!UpdateVictim())
219 return;
220
221 _events.Update(diff);
222
224 return;
225
226 while (uint32 eventId = _events.ExecuteEvent())
227 {
228 switch (eventId)
229 {
230 case EVENT_FIEROBLAST:
231 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, true, -SPELL_RIDE_MONSTROSITY))
233 _events.RescheduleEvent(EVENT_FIEROBLAST, 500ms); // cast time is longer, but thanks to UNIT_STATE_CASTING check it won't trigger more often (need this because this creature gets a stacking haste aura)
234 break;
238 break;
239 }
240 }
241 }
242
243 private:
245 };
246
247 CreatureAI* GetAI(Creature* creature) const override
248 {
249 return GetFirelandsAI<npc_harbinger_of_flameAI>(creature);
250 }
251};
252
254{
255 public:
256 npc_blazing_monstrosity() : CreatureScript("npc_blazing_monstrosity") { }
257
259 {
260 npc_blazing_monstrosityAI(Creature* creature) : PassiveAI(creature), _summons(creature)
261 {
262 }
263
264 void EnterEvadeMode(EvadeReason why) override
265 {
267 _events.Reset();
269 }
270
271 void JustDied(Unit* /*killer*/) override
272 {
274 _events.Reset();
275 }
276
277 void JustReachedHome() override
278 {
280 }
281
282 void JustEngagedWith(Unit* /*target*/) override
283 {
287 _events.Reset();
290 }
291
292 void PassengerBoarded(Unit* passenger, int8 /*seat*/, bool apply) override
293 {
294 if (!apply)
295 return;
296
297 // Our passenger is another vehicle (boardable by players)
298 DoCast(passenger, SPELL_SHARE_HEALTH, true);
299 passenger->SetFaction(35);
300 passenger->SetUninteractible(false);
301
302 // Hack to relocate vehicle on vehicle so exiting players are not moved under map
303 Movement::MoveSplineInit init(passenger);
305 init.MoveTo(0.6654003f, 0.0f, 1.9815f);
306 init.SetFacing(0.0f);
307 init.Launch();
308 }
309
310 void JustSummoned(Creature* summon) override
311 {
312 _summons.Summon(summon);
313 }
314
315 void SummonedCreatureDespawn(Creature* summon) override
316 {
317 _summons.Despawn(summon);
318 }
319
320 void UpdateAI(uint32 diff) override
321 {
322 if (!UpdateVictim())
323 return;
324
325 _events.Update(diff);
326
327 while (uint32 eventId = _events.ExecuteEvent())
328 {
329 switch (eventId)
330 {
332 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, true, -SPELL_RIDE_MONSTROSITY))
334 break;
337 if (Creature* egg = me->FindNearestCreature(NPC_EGG_PILE, 100.0f))
338 egg->AI()->DoAction(me->GetEntry());
339 break;
340 }
341 }
342 }
343
344 private:
347 };
348
349 CreatureAI* GetAI(Creature* creature) const override
350 {
351 return GetFirelandsAI<npc_blazing_monstrosityAI>(creature);
352 }
353};
354
356{
357 public:
358 npc_molten_barrage() : CreatureScript("npc_molten_barrage") { }
359
361 {
363 {
364 }
365
366 void AttackStart(Unit* target) override
367 {
368 if (target)
369 me->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f, {}, MOTION_SLOT_DEFAULT);
370 }
371
372 void IsSummonedBy(WorldObject* /*summoner*/) override
373 {
377 }
378
379 void MovementInform(uint32 movementType, uint32 /*pointId*/) override
380 {
381 if (movementType != EFFECT_MOTION_TYPE)
382 return;
383
386 }
387 };
388
389 CreatureAI* GetAI(Creature* creature) const override
390 {
391 return GetFirelandsAI<npc_molten_barrageAI>(creature);
392 }
393};
394
396{
397 public:
398 npc_egg_pile() : CreatureScript("npc_egg_pile") { }
399
401 {
402 npc_egg_pileAI(Creature* creature) : CreatureAI(creature)
403 {
404 }
405
406 void AttackStart(Unit* /*target*/) override { }
407
408 void Reset() override
409 {
411 _events.Reset();
413 }
414
415 void JustDied(Unit* /*killer*/) override
416 {
417 _events.Reset();
418 std::list<Creature*> eggs;
420 for (std::list<Creature*>::const_iterator itr = eggs.begin(); itr != eggs.end(); ++itr)
422
424 }
425
426 void JustReachedHome() override
427 {
429 }
430
431 void DoAction(int32 action) override
432 {
433 if (action != NPC_BLAZING_MONSTROSITY_LEFT &&
435 return;
436
437 if (action == NPC_BLAZING_MONSTROSITY_LEFT)
439
442 _events.Reset();
444 }
445
446 void UpdateAI(uint32 diff) override
447 {
448 if (!UpdateVictim())
449 return;
450
451 _events.Update(diff);
452
454 return;
455
456 while (uint32 eventId = _events.ExecuteEvent())
457 {
458 switch (eventId)
459 {
461 {
462 std::list<Creature*> eggs;
463 MoltenEggCheck check(me);
465 Cell::VisitGridObjects(me, searcher, 20.0f);
466 if (!eggs.empty())
467 {
471 egg->m_Events.AddEventAtOffset(new RespawnEggEvent(egg), 5s);
472 }
473
477 break;
478 }
479 default:
480 break;
481 }
482 }
483 }
484
485 private:
488 };
489
490 CreatureAI* GetAI(Creature* creature) const override
491 {
492 return GetFirelandsAI<npc_egg_pileAI>(creature);
493 }
494};
495
497{
498 public:
499 spell_alysrazor_cosmetic_egg_xplosion() : SpellScriptLoader("spell_alysrazor_cosmetic_egg_xplosion") { }
500
502 {
503 bool Validate(SpellInfo const* /*spellInfo*/) override
504 {
506 return false;
507 return true;
508 }
509
511 {
512 PreventHitDefaultEffect(effIndex);
514 if (Creature* creature = GetHitCreature())
515 creature->DespawnOrUnsummon(4s);
516 }
517
518 void Register() override
519 {
521 }
522 };
523
524 SpellScript* GetSpellScript() const override
525 {
527 }
528};
529
531{
532 public:
533 spell_alysrazor_turn_monstrosity() : SpellScriptLoader("spell_alysrazor_turn_monstrosity") { }
534
536 {
537 bool Validate(SpellInfo const* /*spellInfo*/) override
538 {
539 return ValidateSpellInfo(
540 {
546 });
547 }
548
550 {
551 PreventHitDefaultEffect(effIndex);
553 if (TempSummon* summ = GetHitUnit()->ToTempSummon())
554 if (WorldObject* summoner = summ->GetSummoner())
556
557 float angle = 0.0f;
558 if (Unit* bird = GetCaster()->GetVehicleBase())
559 {
560 bird->SetInFront(GetHitUnit());
561 angle = bird->GetOrientation();
562 }
563
564 uint32 spellId = 0;
565 switch (GetSpellInfo()->Id)
566 {
569 spellId = SPELL_KNOCKBACK_RIGHT;
570 angle -= float(M_PI) * 0.5f;
571 break;
574 spellId = SPELL_KNOCKBACK_LEFT;
575 angle += float(M_PI) * 0.5f;
576 break;
579 spellId = SPELL_KNOCKBACK_FORWARD;
580 break;
581 case SPELL_TICKLE_R:
582 case SPELL_TICKLE_L:
583 spellId = SPELL_KNOCKBACK_BACK;
584 angle -= float(M_PI);
585 break;
586 }
587
588 // Cannot wait for object update to process facing spline, it's needed in next spell cast
589 GetHitUnit()->SetOrientation(angle);
590 GetHitUnit()->SetFacingTo(angle);
593 }
594
595 void TurnBird(SpellEffIndex effIndex)
596 {
597 PreventHitDefaultEffect(effIndex);
599 }
600
601 void Register() override
602 {
605 }
606 };
607
608 SpellScript* GetSpellScript() const override
609 {
611 }
612};
613
615{
616 public:
617 spell_alysrazor_aggro_closest() : SpellScriptLoader("spell_alysrazor_aggro_closest") { }
618
620 {
621 bool Load() override
622 {
623 return GetCaster()->GetTypeId() == TYPEID_UNIT;
624 }
625
627 {
628 PreventHitDefaultEffect(effIndex);
629 float curThreat = GetCaster()->GetThreatManager().GetThreat(GetHitUnit(), true);
630 GetCaster()->GetThreatManager().AddThreat(GetHitUnit(), -curThreat + 50000.0f / std::min(1.0f, GetCaster()->GetDistance(GetHitUnit())));
631 }
632
634 {
636 GetCaster()->GetAI()->AttackStart(GetCaster()->ToCreature()->SelectVictim());
637 }
638
639 void Register() override
640 {
643 }
644 };
645
646 SpellScript* GetSpellScript() const override
647 {
649 }
650};
651
653{
654 public:
655 spell_alysrazor_fieroblast() : SpellScriptLoader("spell_alysrazor_fieroblast") { }
656
658 {
659 bool Validate(SpellInfo const* /*spellInfo*/) override
660 {
662 }
663
664 void FireItUp()
665 {
667 }
668
669 void Register() override
670 {
672 }
673 };
674
675 SpellScript* GetSpellScript() const override
676 {
678 }
679};
680
682{
685 new npc_molten_barrage();
686 new npc_egg_pile();
691}
Texts
#define M_PI
Definition: Common.h:115
DB2Storage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", &CreatureDisplayInfoLoadInfo::Instance)
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
#define SIZE_OF_GRIDS
Definition: GridDefines.h:40
@ MOTION_SLOT_DEFAULT
@ EFFECT_MOTION_TYPE
@ TYPEID_UNIT
Definition: ObjectGuid.h:40
Spells
Definition: PlayerAI.cpp:32
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_1
Definition: SharedDefines.h:31
@ EFFECT_0
Definition: SharedDefines.h:30
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
Definition: SpellDefines.h:266
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define SpellCastFn(F)
Definition: SpellScript.h:825
EvadeReason
Definition: UnitAICommon.h:30
@ REACT_PASSIVE
Definition: UnitDefines.h:506
@ CURRENT_CHANNELED_SPELL
Definition: Unit.h:591
@ UNIT_STATE_CANNOT_TURN
Definition: Unit.h:299
@ UNIT_STATE_CASTING
Definition: Unit.h:270
#define SPELL_MOLTEN_BARRAGE
MiscData
@ ANIM_KIT_BIRD_WAKE
@ MODEL_INVISIBLE_STALKER
@ ANIM_KIT_BIRD_TURN
#define SPELL_SHARE_HEALTH
static void AlysrazorTrashEvaded(Creature *creature)
@ SPELL_HEAD_BONK_L
@ SPELL_MOLTEN_BARRAGE_LEFT
@ SPELL_RIGHT_SIDE_SMACK_R
@ SPELL_FIRE_IT_UP
@ SPELL_INVISIBILITY_AND_STEALTH_DETECTION
@ SPELL_KNOCKBACK_LEFT
@ SPELL_FIEROBLAST_TRASH
@ SPELL_LEFT_SIDE_SMACK_L
@ SPELL_HEAD_BONK_R
@ SPELL_AGGRO_CLOSEST
@ SPELL_SHARE_HEALTH_RIGHT
@ SPELL_FIEROCLAST_BARRAGE
@ SPELL_FIRE_CHANNELING
@ SPELL_GENERIC_DUMMY_CAST
@ SPELL_MOLTEN_BARRAGE_VISUAL
@ SPELL_RIGHT_SIDE_SMACK_L
@ SPELL_KNOCKBACK_FORWARD
@ SPELL_RIDE_MONSTROSITY
@ SPELL_TICKLE_R
@ SPELL_MOLTEN_EGG_TRASH_CALL_L
@ SPELL_SHARE_HEALTH_LEFT
@ SPELL_LEFT_SIDE_SMACK_R
@ SPELL_MOLTEN_BARRAGE_RIGHT
@ SPELL_SUMMON_SMOULDERING_HATCHLING
@ SPELL_MOLTEN_BARRAGE_EFFECT_L
@ SPELL_KNOCKBACK_RIGHT
@ SPELL_MOLTEN_BARRAGE_EFFECT_R
@ SPELL_TICKLE_L
@ SPELL_SLEEP_ULTRA_HIGH_PRIORITY
@ SPELL_ALYSRAZOR_COSMETIC_EGG_XPLOSION
@ SPELL_KNOCKBACK_BACK
@ SPELL_MOLTEN_EGG_TRASH_CALL_R
@ EMOTE_CRACKING_EGGS
void AddSC_boss_alysrazor()
#define SPELL_MOLTEN_BARRAGE_EFFECT
@ EVENT_CONTINUE_SPITTING
@ EVENT_FIEROCLAST_BARRAGE
@ EVENT_FIEROBLAST
@ EVENT_SUMMON_SMOULDERING_HATCHLING
@ EVENT_START_SPITTING
virtual void MoveInLineOfSight(Unit *)
Definition: CreatureAI.cpp:122
void DoZoneInCombat()
Definition: CreatureAI.h:161
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
Definition: CreatureAI.cpp:219
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
bool UpdateVictim()
Definition: CreatureAI.cpp:245
Creature *const me
Definition: CreatureAI.h:61
void Respawn(bool force=false)
Definition: Creature.cpp:2303
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition: Creature.h:373
void SetReactState(ReactStates st)
Definition: Creature.h:160
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
void SetDisplayId(uint32 displayId, bool setNative=false) override
Definition: Creature.cpp:3402
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 RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:52
void Reset()
Definition: EventMap.cpp:21
void AddEventAtOffset(BasicEvent *event, Milliseconds offset)
Creature * _eggPile
bool operator()(Unit *object) const
MoltenEggCheck(Creature *pile)
void MoveFollow(Unit *target, float dist, ChaseAngle angle, Optional< Milliseconds > duration={}, MovementSlot slot=MOTION_SLOT_ACTIVE)
void MoveTo(Vector3 const &destination, bool generatePath=true, bool forceDestination=false)
void DisableTransportPathTransformations()
void SetFacing(float angle)
TypeID GetTypeId() const
Definition: Object.h:173
uint32 GetEntry() const
Definition: Object.h:161
RespawnEggEvent(Creature *egg)
bool Execute(uint64, uint32) override
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
HookList< CastHandler > AfterCast
Definition: SpellScript.h:824
Creature * GetHitCreature() const
Unit * GetCaster() const
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
SpellInfo const * GetSpellInfo() const
void Despawn(Creature const *summon)
void Summon(Creature const *summon)
void AddThreat(Unit *target, float amount, SpellInfo const *spell=nullptr, bool ignoreModifiers=false, bool ignoreRedirects=false)
== AFFECT MY THREAT LIST ==
float GetThreat(Unit const *who, bool includeOffline=false) const
void operator()(Creature *creature) const
virtual void AttackStart(Unit *victim)
Definition: UnitAI.cpp:29
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:79
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.h:161
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:89
Definition: Unit.h:627
void ClearUnitState(uint32 f)
Definition: Unit.h:733
void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting=false)
Definition: Unit.cpp:10172
ThreatManager & GetThreatManager()
Definition: Unit.h:1063
UF::UpdateField< UF::UnitData, 0, TYPEID_UNIT > m_unitData
Definition: Unit.h:1814
void PlayOneShotAnimKitId(uint16 animKitId)
Definition: Unit.cpp:10529
void SetFaction(uint32 faction) override
Definition: Unit.h:859
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
bool IsAlive() const
Definition: Unit.h:1164
UnitAI * GetAI() const
Definition: Unit.h:660
void SetUninteractible(bool apply)
Definition: Unit.cpp:8147
void AddUnitState(uint32 f)
Definition: Unit.h:731
bool IsCharmedOwnedByPlayerOrPlayer() const
Definition: Unit.h:1196
uint32 GetDisplayId() const
Definition: Unit.h:1567
uint32 GetNativeDisplayId() const
Definition: Unit.h:1570
void SetFacingTo(float const ori, bool force=true)
Definition: Unit.cpp:12653
bool HasUnitState(const uint32 f) const
Definition: Unit.h:732
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
virtual void SetDisplayId(uint32 displayId, bool setNative=false)
Definition: Unit.cpp:10148
bool IsInCombat() const
Definition: Unit.h:1043
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true)
Definition: Unit.cpp:3017
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition: Unit.h:1442
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
float GetDistance2d(WorldObject const *obj) const
Definition: Object.cpp:1096
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
EventProcessor m_Events
Definition: Object.h:777
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
@ NPC_HARBINGER_OF_FLAME
Definition: firelands.h:58
@ NPC_SMOULDERING_HATCHLING
Definition: firelands.h:60
@ NPC_BLAZING_MONSTROSITY_RIGHT
Definition: firelands.h:56
@ NPC_MOLTEN_EGG_TRASH
Definition: firelands.h:59
@ NPC_EGG_PILE
Definition: firelands.h:57
@ NPC_BLAZING_MONSTROSITY_LEFT
Definition: firelands.h:55
void apply(T *val)
Definition: ByteConverter.h:41
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition: Containers.h:109
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:179
constexpr void SetOrientation(float orientation)
Definition: Position.h:71
void PassengerBoarded(Unit *passenger, int8, bool apply) override
== Fields =======================================
void SummonedCreatureDespawn(Creature *summon) override
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
npc_egg_pileAI(Creature *creature)
void JustDied(Unit *) override
void MovementInform(uint32 movementType, uint32) override
void IsSummonedBy(WorldObject *) override
void AttackStart(Unit *target) override