Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_anubarak_trial.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6// Known bugs:
7// Anubarak - underground phase partially not worked
8// - tele after impale hit a permafrost doesn't work (the entire tele spell should be better)
9// Scarab - Kill credit isn't crediting?
10
11#include "ScriptMgr.h"
12#include "ScriptedCreature.h"
14#include "SpellScript.h"
15#include "SpellAuraEffects.h"
16#include <limits>
17
32
34{
36 NPC_BURROW = 34862,
37 NPC_BURROWER = 34607,
38 NPC_SCARAB = 34605,
39 NPC_SPIKE = 34660
40};
41
93
94#define SPELL_PERMAFROST_HELPER RAID_MODE<uint32>(66193, 67855, 67856, 67857)
95
101
103{
104 {779.8038f, 150.6580f, 158.1426f, 0},
105 {736.0243f, 113.4201f, 158.0226f, 0},
106 {712.5712f, 160.9948f, 158.4368f, 0},
107 {701.4271f, 126.4740f, 158.0205f, 0},
108 {747.9202f, 155.0920f, 158.0613f, 0},
109 {769.6285f, 121.1024f, 158.0504f, 0},
110};
111
116
124
139
141{
142 // Anub'arak
145};
146
148{
149 public:
150 boss_anubarak_trial() : CreatureScript("boss_anubarak_trial") { }
151
153 {
155 {
156 }
157
159 {
160 _Reset();
161 events.SetPhase(PHASE_MELEE);
165 events.ScheduleEvent(EVENT_SUBMERGE, 80*IN_MILLISECONDS, 0, PHASE_MELEE);
166 events.ScheduleEvent(EVENT_BERSERK, 10*MINUTE*IN_MILLISECONDS);
167 if (IsHeroic())
169
170 if (!IsHeroic())
172
173 _intro = true;
174 _reachedPhase3 = false;
176 // clean up spawned Frost Spheres
177 std::list<Creature*> FrostSphereList;
178 me->GetCreatureListWithEntryInGrid(FrostSphereList, NPC_FROST_SPHERE, 150.0f);
179 if (!FrostSphereList.empty())
180 for (std::list<Creature*>::iterator itr = FrostSphereList.begin(); itr != FrostSphereList.end(); ++itr)
181 (*itr)->DespawnOrUnsummon();
182
183 _burrowGUID.clear();
184 }
185
187 {
188 if (who->GetTypeId() == TypeID::TYPEID_PLAYER)
189 {
191 if (instance)
193 }
194 }
195
197
198 {
199 if (!_intro)
200 {
202 _intro = false;
203 }
204 }
205
207 {
208 if (instance)
209 instance->SetBossState(BOSS_ANUBARAK, FAIL);
210 //Summon Scarab Swarms neutral at random places
211 for (int i = 0; i < 10; i++)
212 if (Creature* temp = me->SummonCreature(NPC_SCARAB, AnubarakLoc[1].GetPositionX()+(std::rand() % 50)-25, AnubarakLoc[1].GetPositionY()+(std::rand() % 50)-25, AnubarakLoc[1].GetPositionZ()))
213 {
214 temp->setFaction(31);
215 temp->GetMotionMaster()->MoveRandom(10);
216 }
217 }
218
219 void JustDied(Unit* /*killer*/) OVERRIDE
220 {
221 _JustDied();
223
224 // despawn frostspheres and Burrowers on death
225 std::list<Creature*> AddList;
226 me->GetCreatureListWithEntryInGrid(AddList, NPC_FROST_SPHERE, 150.0f);
227 me->GetCreatureListWithEntryInGrid(AddList, NPC_BURROWER, 150.0f);
228 if (!AddList.empty())
229 for (std::list<Creature*>::iterator itr = AddList.begin(); itr != AddList.end(); ++itr)
230 (*itr)->DespawnOrUnsummon();
231 }
232
234 {
235 Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true);
236 switch (summoned->GetEntry())
237 {
238 case NPC_BURROW:
239 _burrowGUID.push_back(summoned->GetGUID());
240 summoned->SetReactState(REACT_PASSIVE);
241 summoned->CastSpell(summoned, SPELL_CHURNING_GROUND, false);
242 summoned->SetDisplayId(summoned->GetCreatureTemplate()->Modelid2);
243 break;
244 case NPC_SPIKE:
245 summoned->CombatStart(target);
246 summoned->SetDisplayId(summoned->GetCreatureTemplate()->Modelid1);
247 Talk(EMOTE_SPIKE, target);
248 break;
249 default:
250 break;
251 }
252 summons.Summon(summoned);
253 }
254
255 void EnterCombat(Unit* /*who*/) OVERRIDE
256 {
257 _EnterCombat();
260
261 // Despawn Scarab Swarms neutral
263 summons.DoAction(ACTION_SCARAB_SUBMERGE, pred);
264
265 // Spawn Burrow
266 for (int i = 0; i < 4; i++)
267 me->SummonCreature(NPC_BURROW, AnubarakLoc[i + 2]);
268
269 // Spawn 6 Frost Spheres at start
270 for (int i = 0; i < 6; i++)
271 if (Unit* summoned = me->SummonCreature(NPC_FROST_SPHERE, SphereSpawn[i]))
272 _sphereGUID[i] = summoned->GetGUID();
273 }
274
276 {
277 if (!UpdateVictim())
278 return;
279
280 if (me->HasUnitState(UNIT_STATE_CASTING))
281 return;
282
283 events.Update(diff);
284
285 while (uint32 eventId = events.ExecuteEvent())
286 {
287 switch (eventId)
288 {
292 return;
294 me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5));
296 return;
298 if (IsHeroic() || !_reachedPhase3)
299 me->CastCustomSpell(SPELL_SUMMON_BURROWER, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4));
301 return;
303 {
305 summons.DoAction(ACTION_SHADOW_STRIKE, pred);
307 break;
308 }
309 case EVENT_SUBMERGE:
310 if (!_reachedPhase3 && !me->HasAura(SPELL_BERSERK))
311 {
316 events.SetPhase(PHASE_SUBMERGED);
320 }
321 break;
324 break;
326 {
327 /* WORKAROUND
328 * - The correct implementation is more likely the comment below but it needs spell knowledge
329 */
330 std::list<uint64>::iterator i = _burrowGUID.begin();
331 uint32 at = std::rand() % (_burrowGUID.size()-1);
332 for (uint32 k = 0; k < at; k++)
333 ++i;
334 if (Creature* pBurrow = Unit::GetCreature(*me, *i))
335 pBurrow->CastSpell(pBurrow, 66340, false);
336
338
339 /*It seems that this spell have something more that needs to be taken into account
340 //Need more sniff info
341 DoCast(SPELL_SUMMON_BEATLES);
342 // Just to make sure it won't happen again in this phase
343 m_uiSummonScarabTimer = 90*IN_MILLISECONDS;*/
344 break;
345 }
346 case EVENT_EMERGE:
347 events.ScheduleEvent(EVENT_SUBMERGE, 80*IN_MILLISECONDS, 0, PHASE_MELEE);
349 summons.DespawnEntry(NPC_SPIKE);
350 me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK);
353 events.SetPhase(PHASE_MELEE);
357 events.ScheduleEvent(EVENT_SUBMERGE, 80*IN_MILLISECONDS, 0, PHASE_MELEE);
358 if (IsHeroic())
360 return;
362 {
363 uint8 startAt = std::rand() % 5;
364 uint8 i = startAt;
365 do
366 {
367 if (Unit* pSphere = Unit::GetCreature(*me, _sphereGUID[i]))
368 {
369 if (!pSphere->HasAura(SPELL_FROST_SPHERE))
370 {
371 if (Creature* summon = me->SummonCreature(NPC_FROST_SPHERE, SphereSpawn[i]))
372 _sphereGUID[i] = summon->GetGUID();
373 break;
374 }
375 }
376 i = (i + 1) % 6;
377 }
378 while
379 (i != startAt);
380 events.ScheduleEvent(EVENT_SUMMON_FROST_SPHERE, std::rand() % (30 * IN_MILLISECONDS) + (20*IN_MILLISECONDS));
381 break;
382 }
383 case EVENT_BERSERK:
385 break;
386 default:
387 break;
388 }
389 }
390
391 if (HealthBelowPct(30) && events.IsInPhase(PHASE_MELEE) && !_reachedPhase3)
392 {
393 _reachedPhase3 = true;
397 }
398
399 if (events.IsInPhase(PHASE_MELEE))
401 }
402
403 private:
404 std::list<uint64> _burrowGUID;
406 bool _intro;
408 };
409
411 {
412 return new boss_anubarak_trialAI(creature);
413 };
414};
415
417{
418 public:
419 npc_swarm_scarab() : CreatureScript("npc_swarm_scarab") { }
420
422 {
424 {
425 _instance = creature->GetInstanceScript();
426 }
427
429 {
430 me->SetCorpseDelay(0);
431 _determinationTimer = std::rand() % (60 * IN_MILLISECONDS) + (5*IN_MILLISECONDS);
433 me->SetInCombatWithZone();
434 if (me->IsInCombat())
435 if (Creature* Anubarak = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK)))
436 Anubarak->AI()->JustSummoned(me);
437 }
438
439 void DoAction(int32 actionId) OVERRIDE
440 {
441 switch (actionId)
442 {
445 me->DespawnOrUnsummon(1*IN_MILLISECONDS);
446 break;
447 default:
448 break;
449 }
450 }
451
456
458 {
459 if (_instance && _instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS)
460 me->DisappearAndDie();
461
462 if (!UpdateVictim())
463 return;
464
465 /* Bosskillers don't recognize */
466 if (_determinationTimer <= diff)
467 {
469 _determinationTimer = std::rand() % (60 * IN_MILLISECONDS) + (10*IN_MILLISECONDS);
470 }
471 else
472 _determinationTimer -= diff;
473
475 }
476
477 private:
480 };
481
483 {
484 return new npc_swarm_scarabAI(creature);
485 };
486};
487
489{
490 public:
491 npc_nerubian_burrower() : CreatureScript("npc_nerubian_burrower") { }
492
494 {
496 {
497 _instance = creature->GetInstanceScript();
498 }
499
501 {
502 me->SetCorpseDelay(10);
507 me->SetInCombatWithZone();
508 if (me->IsInCombat())
509 if (Creature* Anubarak = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK)))
510 Anubarak->AI()->JustSummoned(me);
511 }
512
513 void DoAction(int32 actionId) OVERRIDE
514 {
515 switch (actionId)
516 {
518 if (!me->HasAura(SPELL_AWAKENED))
519 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
521 break;
522 default:
523 break;
524 }
525 }
526
528 {
529 if (_instance && _instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS)
530 me->DisappearAndDie();
531
532 if (!UpdateVictim() && !me->HasAura(SPELL_SUBMERGE_EFFECT))
533 return;
534
535 if (me->HasUnitState(UNIT_STATE_CASTING))
536 return;
537
538 if ((_submergeTimer <= diff) && HealthBelowPct(80))
539 {
540 if (me->HasAura(SPELL_SUBMERGE_EFFECT))
541 {
542 me->RemoveAurasDueToSpell(SPELL_SUBMERGE_EFFECT);
546 }
547 else
548 {
549 if (!me->HasAura(SPELL_PERMAFROST_HELPER))
550 {
554 }
555 }
557 }
558 else
559 _submergeTimer -= diff;
560
562 }
563
564 private:
568 };
569
571 {
572 return new npc_nerubian_burrowerAI(creature);
573 };
574};
575
577{
578 public:
579 npc_frost_sphere() : CreatureScript("npc_frost_sphere") { }
580
582 {
584 {
585 }
586
588 {
589 me->SetReactState(REACT_PASSIVE);
591 me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
592 me->GetMotionMaster()->MoveRandom(20.0f);
593 }
594
595 void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE
596 {
597 if (me->GetHealth() <= damage)
598 {
599 damage = 0;
600 float floorZ = me->GetMap()->GetHeight(me->GetPhaseMask(), me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
601 if (fabs(me->GetPositionZ() - floorZ) < 0.1f)
602 {
603 // we are close to the ground
604 me->GetMotionMaster()->MoveIdle();
606 me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
609 me->SetObjectScale(2.0f);
610 }
611 else
612 {
613 // we are in air
614 me->GetMotionMaster()->MoveIdle();
616 //At hit the ground
617 me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
618 me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
619 }
620 }
621 }
622
624 {
625 if (type != EFFECT_MOTION_TYPE)
626 return;
627
628 switch (pointId)
629 {
631 me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
635 me->SetObjectScale(2.0f);
636 break;
637 default:
638 break;
639 }
640 }
641 };
642
644 {
645 return new npc_frost_sphereAI(creature);
646 };
647};
648
650{
651 public:
652 npc_anubarak_spike() : CreatureScript("npc_anubarak_spike") { }
653
655 {
657 {
658 }
659
661 {
664 // make sure the spike has everyone on threat list
665 me->SetInCombatWithZone();
666 }
667
668 bool CanAIAttack(Unit const* victim) const OVERRIDE
669 {
670 return victim->GetTypeId() == TypeID::TYPEID_PLAYER;
671 }
672
674 {
675 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
676 {
677 StartChase(target);
678 Talk(EMOTE_SPIKE, who);
679 }
680 }
681
682 void DamageTaken(Unit* /*who*/, uint32& uiDamage) OVERRIDE
683 {
684 uiDamage = 0;
685 }
686
688 {
689 if (!UpdateVictim())
690 {
691 me->DisappearAndDie();
692 return;
693 }
694
696 {
697 if (_phaseSwitchTimer <= diff)
698 {
699 switch (_phase)
700 {
705 if (Unit* target2 = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
706 {
707 StartChase(target2);
708 Talk(EMOTE_SPIKE, target2);
709 }
711 return;
716 return;
721 return;
722 default:
723 return;
724 }
725 }
726 else
727 _phaseSwitchTimer -= diff;
728 }
729 }
730
732
733 {
734 if (!pWho)
735 return;
736
737 if (pWho->GetEntry() != NPC_FROST_SPHERE)
738 return;
739
741 return;
742
743 if (me->IsWithinDist(pWho, 7.0f))
744 {
745 switch (_phase)
746 {
748 me->RemoveAurasDueToSpell(SPELL_SPIKE_SPEED1);
749 break;
751 me->RemoveAurasDueToSpell(SPELL_SPIKE_SPEED2);
752 break;
754 me->RemoveAurasDueToSpell(SPELL_SPIKE_SPEED3);
755 break;
756 default:
757 break;
758 }
759
760 me->CastSpell(me, SPELL_SPIKE_FAIL, true);
761
762 pWho->ToCreature()->DespawnOrUnsummon(3*IN_MILLISECONDS);
763
764 // After the spikes hit the icy surface they can't move for about ~5 seconds
767 SetCombatMovement(false);
768 me->GetMotionMaster()->MoveIdle();
769 me->GetMotionMaster()->Clear();
770 }
771 }
772
773 void StartChase(Unit* who)
774 {
775 DoCast(who, SPELL_MARK);
776 me->SetSpeed(MOVE_RUN, 0.5f);
777 // make sure the Spine will really follow the one he should
778 me->getThreatManager().clearReferences();
779 me->SetInCombatWithZone();
780 me->getThreatManager().addThreat(who, std::numeric_limits<float>::max());
781 me->GetMotionMaster()->Clear(true);
782 me->GetMotionMaster()->MoveChase(who);
783 me->TauntApply(who);
784 }
785
786 private:
789 };
790
792 {
793 return new npc_anubarak_spikeAI(creature);
794 };
795};
796
798{
799 public:
800 spell_impale() : SpellScriptLoader("spell_impale") { }
801
803 {
805
807 {
808 Unit* target = GetHitUnit();
809 uint32 permafrost = sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, target);
810
811 // make sure Impale doesnt do damage if we are standing on permafrost
812 if (target && target->HasAura(permafrost))
813 SetHitDamage(0);
814 }
815
820 };
821
823 {
824 return new spell_impale_SpellScript();
825 }
826};
827
829{
830 public:
831 spell_anubarak_leeching_swarm() : SpellScriptLoader("spell_anubarak_leeching_swarm") { }
832
834 {
836
837 bool Validate(SpellInfo const* /*spell*/) OVERRIDE
838 {
839 if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL))
840 return false;
841 return true;
842 }
843
845 {
846 Unit* caster = GetCaster();
847 if (Unit* target = GetTarget())
848 {
849 int32 lifeLeeched = target->CountPctFromCurHealth(aurEff->GetAmount());
850 if (lifeLeeched < 250)
851 lifeLeeched = 250;
852 // Damage
853 caster->CastCustomSpell(target, SPELL_LEECHING_SWARM_DMG, &lifeLeeched, 0, 0, false);
854 // Heal
855 caster->CastCustomSpell(caster, SPELL_LEECHING_SWARM_HEAL, &lifeLeeched, 0, 0, false);
856 }
857 }
858
863 };
864
869};
870
@ IN_MILLISECONDS
Definition Common.h:125
@ MINUTE
Definition Common.h:119
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ IN_PROGRESS
@ FAIL
@ EFFECT_MOTION_TYPE
@ TYPEID_PLAYER
Definition Object.h:55
SpellEffIndex
@ EFFECT_0
@ EMOTE_ONESHOT_FLYDEATH
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_AURA_PERIODIC_DUMMY
#define sSpellMgr
Definition SpellMgr.h:744
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
@ SPELLVALUE_MAX_TARGETS
Definition Unit.h:118
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ MOVE_RUN
Definition Unit.h:556
@ REACT_PASSIVE
Definition Unit.h:1156
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_FLAGS
@ NPC_ANUBARAK
Definition azjol_nerub.h:30
@ SAY_INTRO
@ SPELL_LEECHING_SWARM
#define SPELL_PERMAFROST_HELPER
@ EMOTE_BURROWER
@ EMOTE_SUBMERGE
@ EMOTE_LEECHING_SWARM
@ SAY_KILL_PLAYER
@ SAY_LEECHING_SWARM
void AddSC_boss_anubarak_trial()
@ ACTION_SCARAB_SUBMERGE
@ ACTION_SHADOW_STRIKE
@ PHASE_SUBMERGED
@ SPELL_CLEAR_ALL_DEBUFFS
@ SPELL_FREEZE_SLASH
@ SPELL_SUBMERGE_ANUBARAK
@ SPELL_LEECHING_SWARM
@ SPELL_EMERGE_ANUBARAK
@ SPELL_FROST_SPHERE
@ SPELL_EXPOSE_WEAKNESS
@ SPELL_SUMMON_BURROWER
@ SPELL_SPIKE_CALL
@ SPELL_SUMMON_BEATLES
@ SPELL_DETERMINATION
@ SPELL_CHURNING_GROUND
@ SPELL_SPIKE_TRAIL
@ SPELL_EMERGE_EFFECT
@ SPELL_SPIKE_SPEED2
@ SPELL_SHADOW_STRIKE
@ SPELL_SPIKE_TELE
@ SPELL_SUBMERGE_EFFECT
@ SPELL_PERSISTENT_DIRT
@ SPELL_AWAKENED
@ SPELL_SPIDER_FRENZY
@ SPELL_SPIKE_FAIL
@ SUMMON_FROSTSPHERE
@ SPELL_LEECHING_SWARM_HEAL
@ SPELL_LEECHING_SWARM_DMG
@ SPELL_PENETRATING_COLD
@ SPELL_PERMAFROST_VISUAL
@ SPELL_SUMMON_SPIKE
@ SPELL_PERMAFROST
@ SPELL_BERSERK
@ SPELL_SPIKE_SPEED3
@ SPELL_SPIKE_SPEED1
@ SPELL_PERMAFROST_MODEL
@ SUMMON_SCARAB
@ SPELL_ACID_MANDIBLE
@ POINT_FALL_GROUND
const Position SphereSpawn[6]
@ NPC_FROST_SPHERE
@ PHASE_IMPALE_NORMAL
@ PHASE_NO_MOVEMENT
@ PHASE_IMPALE_MIDDLE
@ PHASE_IMPALE_FAST
@ EVENT_FREEZE_SLASH
@ EVENT_PURSUING_SPIKE
@ EVENT_SUMMON_NERUBIAN
@ EVENT_SUMMON_SCARAB
@ EVENT_PENETRATING_COLD
@ EVENT_SUMMON_FROST_SPHERE
@ EVENT_NERUBIAN_SHADOW_STRIKE
#define SAY_DEATH
#define SAY_AGGRO
#define SPELL_BERSERK
@ SPELL_MARK
@ EVENT_BERSERK
@ EVENT_SUBMERGE
@ PHASE_MELEE
int32 GetAmount() const
HookList< EffectPeriodicHandler > OnEffectPeriodic
Unit * GetCaster() const
Unit * GetTarget() const
InstanceScript *const instance
SummonList summons
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
static Creature * GetCreature(WorldObject const &u, uint64 guid)
HookList< EffectHandler > OnEffectHitTarget
Unit * GetHitUnit()
void SetHitDamage(int32 damage)
SpellScriptLoader(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
Definition Unit.h:1367
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
void CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
PrepareSpellScript(spell_impale_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
bool IsHeroic() const
void SetCombatMovement(bool allowMovement)
Creature * me
bool HealthBelowPct(uint32 pct) const
const T & RAID_MODE(const T &normal10, const T &normal25) const
ScriptedAI(Creature *creature)
void JustSummoned(Creature *summoned) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void DamageTaken(Unit *, uint32 &uiDamage) OVERRIDE
bool CanAIAttack(Unit const *victim) const OVERRIDE
void DamageTaken(Unit *, uint32 &damage) OVERRIDE
void MovementInform(uint32 type, uint32 pointId) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void DoAction(int32 actionId) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
const Position AnubarakLoc[]
@ SPELL_TRAITOR_KING_10
@ SPELL_TRAITOR_KING_25
@ DATA_TRIBUTE_TO_IMMORTALITY_ELIGIBLE
@ BOSS_ANUBARAK