TrinityCore
Loading...
Searching...
No Matches
boss_ahune.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 "Containers.h"
20#include "CreatureTextMgr.h"
21#include "GameObject.h"
22#include "GameObjectAI.h"
23#include "Group.h"
24#include "InstanceScript.h"
25#include "LFGMgr.h"
26#include "Map.h"
27#include "MotionMaster.h"
28#include "ObjectAccessor.h"
29#include "Player.h"
30#include "ScriptedCreature.h"
31#include "ScriptedGossip.h"
32#include "SpellAuraEffects.h"
33#include "SpellScript.h"
34#include "TemporarySummon.h"
35#include "the_slave_pens.h"
36
38{
39 // Ahune
49 SPELL_STAND = 37752,
50
51 //Earther Ring Flamecaller
58
59 //Ahune Bunny
72
73 // Ice Spear
78
79 // Slippery Floor
84
85 // Frozen Core
88 SPELL_IS_DEAD_CHECK = 61976, // NYI
95};
96
103
110
129
138
140{
142 PHASE_TWO = 1
144
151
153{
156
158{
159 { -99.1021f, -233.7526f, -1.22307f, 1.588250f }, // Ahune
160 { -98.0151f, -230.4555f, -1.21089f, 1.797689f }, // Frozen Core
161 { -143.172f, -147.6801f, -3.16113f, 4.852015f }, // Bonfire Bunny 000
162 { -134.304f, -145.7803f, -1.70332f, 4.677482f }, // Bonfire Bunny 001
163 { -125.036f, -144.2065f, -1.91660f, 4.991642f } // Bonfire Bunny 002
164};
165
167{
168 { -145.2233f, -137.5543f, -1.59056f, 5.427049f },
169 { -137.4383f, -136.4050f, -1.72384f, 5.336747f },
170 { -129.0413f, -132.1494f, -2.09285f, 5.460842f }
171};
172
173// 25740 - Ahune
174struct boss_ahune : public BossAI
175{
176 boss_ahune(Creature* creature) : BossAI(creature, DATA_AHUNE)
177 {
179 }
180
187
188 void EnterEvadeMode(EvadeReason /*why*/) override
189 {
190 if (Creature* ahuneBunny = instance->GetCreature(DATA_AHUNE_BUNNY))
191 ahuneBunny->AI()->DoAction(ACTION_STOP_EVENT);
194 }
195
196 void JustDied(Unit* /*killer*/) override
197 {
199
200 if (Creature* ahuneBunny = instance->GetCreature(DATA_AHUNE_BUNNY))
201 Unit::Kill(me, ahuneBunny);
202 if (Creature* frozenCore = instance->GetCreature(DATA_FROZEN_CORE))
203 Unit::Kill(me, frozenCore);
204
205 Map::PlayerList const& players = me->GetMap()->GetPlayers();
206 if (!players.isEmpty())
207 {
208 if (Group* group = players.begin()->GetSource()->GetGroup())
209 if (group->isLFGGroup())
210 sLFGMgr->FinishDungeon(group->GetGUID(), 286, me->GetMap());
211 }
212
213 _JustDied();
214 }
215
216 void DoAction(int32 action) override
217 {
218 if (action == ACTION_AHUNE_RETREAT)
219 {
220 Submerge();
222 }
223 }
224
225 void ExecuteEvent(uint32 eventId) override
226 {
227 switch (eventId)
228 {
233 break;
234 case EVENT_EMERGE:
235 Emerge();
236 break;
238 if (Creature* frozenCore = instance->GetCreature(DATA_FROZEN_CORE))
239 DoCast(frozenCore, SPELL_SYNCH_HEALTH, true);
240 else
242 events.Repeat(3s);
243 break;
244 default:
245 break;
246 }
247 }
248
262
274};
275
276// 25865 - Frozen Core
278{
279 npc_frozen_core(Creature* creature) : ScriptedAI(creature)
280 {
282 Initialize();
283 }
284
293
294 void JustDied(Unit* /*killer*/) override
295 {
297 Unit::Kill(me, ahune);
298
301 }
302
320
321 void UpdateAI(uint32 diff) override
322 {
323 _events.Update(diff);
324
325 while (uint32 eventId = _events.ExecuteEvent())
326 {
327 switch (eventId)
328 {
331 DoCast(ahune, SPELL_SYNCH_HEALTH, true);
332 else
334 _events.Repeat(3s);
335 break;
336 default:
337 break;
338 }
339 }
340 }
341
342private:
345};
346
347// 25745 - [PH] Ahune Summon Loc Bunny
349{
351 {
353 _submerged = false;
354 }
355
356 void JustSummoned(Creature* summon) override
357 {
358 if (summon->GetEntry() == NPC_AHUNE)
359 return;
360
361 DoZoneInCombat(summon);
362 _summons.Summon(summon);
363 }
364
365 void JustDied(Unit* /*killer*/) override
366 {
369 }
370
402
403 void UpdateAI(uint32 diff) override
404 {
405 _events.Update(diff);
406
407 while (uint32 eventId = _events.ExecuteEvent())
408 {
409 switch (eventId)
410 {
413 for (uint8 counter = 0; counter < MAX_FLAMECALLERS; ++counter)
415 DoCast(flamecaller, SPELL_SHAMANS_LOOK_FOR_OPENING, true);
416 break;
419 break;
423 _events.Repeat(8s);
424 if (_submerged)
426 break;
429 break;
432 {
434 DoZoneInCombat(ahune);
435 DoCast(ahune, SPELL_RESURFACE);
436 }
437 break;
440 flamecaller->AI()->DoAction(ACTION_EMOTE_RESURFACE);
443 break;
446 DoCast(flamecaller, SPELL_FOUND_OPENING);
448 ahune->AI()->DoAction(ACTION_AHUNE_RETREAT);
449 _events.Reset();
453 break;
455 _submerged = true;
456 _events.Reset();
462 break;
463 default:
464 break;
465 }
466 }
467 }
468
470 {
471 for (uint8 counter = 0; counter < MAX_FLAMECALLERS; ++counter)
473 flamecaller->AI()->EnterEvadeMode();
474 }
475
476private:
481};
482
483// 25754 - Earthen Ring Flamecaller
485{
487 {
489 _mySpot = 0;
490 }
491
492 void Reset() override
493 {
494 _events.Reset();
495 }
496
497 void MovementInform(uint32 motionType, uint32 pointId) override
498 {
499 if (motionType != POINT_MOTION_TYPE)
500 return;
501
502 switch (pointId)
503 {
506 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
507 break;
510 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
511 break;
514 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
515 break;
516 default:
517 break;
518 }
519
521 }
522
523 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
524 {
525 switch (spellInfo->Id)
526 {
529 break;
532 break;
533 default:
534 break;
535 }
536 }
537
538 void DoAction(int action) override
539 {
540 if (action == ACTION_EMOTE_RESURFACE)
542 }
543
544 void UpdateAI(uint32 diff) override
545 {
546 _events.Update(diff);
547
548 while (uint32 eventId = _events.ExecuteEvent())
549 {
550 switch (eventId)
551 {
553 LookOpening(true, 0);
555 break;
557 LookOpening(true, 1);
559 break;
561 LookOpening(true, 2);
563 break;
565 LookOpening(false, _mySpot);
566 break;
567 default:
568 break;
569 }
570 }
571 }
572
573 void LookOpening(bool activate, uint8 spot)
574 {
575 if (_mySpot != spot)
576 return;
577
578 if (Creature* bonfireBunny = _instance->GetCreature(DATA_BONFIRE_BUNNY_000 + spot))
579 if (Creature* beamBunny = _instance->GetCreature(DATA_BEAM_BUNNY_000 + spot))
580 {
581 if (activate)
582 {
583 DoCast(bonfireBunny, SPELL_FIND_OPENING_TRIGGER);
584 bonfireBunny->CastSpell(beamBunny, SPELL_FIND_OPENING_VISUAL, true);
585 }
586 else
587 {
589 bonfireBunny->CastStop();
590 beamBunny->RemoveAurasDueToSpell(SPELL_FIND_OPENING_BEAM_END);
591 }
592 }
593 }
594
595private:
599};
600
601// 25985 - Ahune Ice Spear Bunny
603{
605
606 void JustAppeared() override
607 {
610
611 _scheduler.Schedule(2500ms, [this](TaskContext /*task*/)
612 {
614 me->DespawnOrUnsummon(3500ms);
615 });
616 }
617
618 void UpdateAI(uint32 diff) override
619 {
620 _scheduler.Update(diff);
621 }
622
623private:
625};
626
628{
630
631 void Reset() override
632 {
633 _scheduler.Schedule(2500ms, [this](TaskContext /*context*/)
634 {
636 me->DespawnOrUnsummon(3500ms);
637 });
638 }
639
640 void UpdateAI(uint32 diff) override
641 {
642 _scheduler.Update(diff);
643 }
644
645private:
647};
648
650{
651 go_ahune_ice_stone(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
652
653 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
654 {
655 ClearGossipMenuFor(player);
656
658 ahuneBunny->AI()->DoAction(ACTION_START_EVENT);
659
661 luma->CastSpell(player, SPELL_SUMMONING_RHYME_AURA, true);
662 CloseGossipMenuFor(player);
663 me->Delete();
664 return true;
665 }
666
667private:
669};
670
671// 46430 - Synch Health
686
687// 45926 - Summoning Rhyme Aura
689{
691
692 bool Validate(SpellInfo const* /*spellInfo*/) override
693 {
695 }
696
697 void PeriodicTick(AuraEffect const* aurEff)
698 {
699 if (!GetCaster())
700 return;
701
702 Creature* caster = GetCaster()->ToCreature();
703 Player* player = GetTarget()->ToPlayer();
704 if (!caster || !player)
705 return;
706
707 player->CastSpell(player, SPELL_FORCE_WHISP_FLIGHT);
708
709 switch (aurEff->GetTickNumber())
710 {
711 case 1:
712 sCreatureTextMgr->SendChat(caster, SAY_PLAYER_TEXT_1, nullptr, CHAT_MSG_SAY, LANG_UNIVERSAL, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
713 player->CastSpell(player, SPELL_SUMMONING_RHYME_BONFIRE, true);
714 break;
715 case 2:
716 sCreatureTextMgr->SendChat(caster, SAY_PLAYER_TEXT_2, nullptr, CHAT_MSG_SAY, LANG_UNIVERSAL, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
717 break;
718 case 3:
719 sCreatureTextMgr->SendChat(caster, SAY_PLAYER_TEXT_3, nullptr, CHAT_MSG_SAY, LANG_UNIVERSAL, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
720 Remove();
721 break;
722 }
723 }
724
729};
730
731// 46878 - Summon Ice Spear Delayer
753
754// 46371 - Ice Spear Control Aura
756{
758
759 bool Validate(SpellInfo const* /*spellInfo*/) override
760 {
762 }
763
764 void PeriodicTick(AuraEffect const* /*aurEff*/)
765 {
766 if (Unit* caster = GetCaster())
767 caster->CastSpell(caster, SPELL_ICE_SPEAR_TARGET_PICKER);
768 }
769
774};
775
776// 46372 - Ice Spear Target Picker
778{
780
781 bool Validate(SpellInfo const* /*spellInfo*/) override
782 {
784 }
785
786 void FilterTargets(std::list<WorldObject*>& targets)
787 {
788 if (targets.empty())
789 return;
790
792 targets.clear();
793 targets.push_back(target);
794 }
795
796 void HandleDummy(SpellEffIndex /*effIndex*/)
797 {
799 }
800
806};
807
808// 46320 - Spell Slippery Floor Periodic
810{
812
813 bool Validate(SpellInfo const* /*spellInfo*/) override
814 {
816 }
817
819 {
820 if (Unit* target = GetHitUnit())
821 if (target->isMoving())
822 {
823 target->CastSpell(target, SPELL_SLIPPERY_FLOOR_SLIP, true);
824 target->CastSpell(target, SPELL_SLIPPERY_FLOOR_YOU_SLIPPED, true);
825 }
826 }
827
832};
833
834// 46146 - Ahune Spanky Hands
836{
838
839 bool Validate(SpellInfo const* /*spellInfo*/) override
840 {
842 }
843
844 void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
845 {
847 eventInfo.GetActor()->CastSpell(eventInfo.GetActionTarget(), SPELL_COLD_SLAP, true);
848 }
849
854};
855
856// 46843 - Minion Despawner
872
873// 46398 - Spell Ice Bombardment Dest Picker
893
#define sCreatureTextMgr
@ TEXT_RANGE_NORMAL
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
#define sLFGMgr
Definition LFGMgr.h:492
@ POINT_MOTION_TYPE
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
void ClearGossipMenuFor(Player *player)
void CloseGossipMenuFor(Player *player)
SpellEffIndex
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_APPLY_AURA
@ LANG_UNIVERSAL
@ TARGET_UNIT_SRC_AREA_ENTRY
@ EMOTE_ONESHOT_SUBMERGE
@ TEAM_OTHER
@ CHAT_MSG_SAY
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_PERIODIC_DUMMY
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
@ REACT_PASSIVE
@ UNIT_FLAG_UNINTERACTIBLE
@ UNIT_STATE_ROOT
Definition Unit.h:230
AhuneSpells
@ SPELL_SUMMONING_RHYME_AURA
@ SPELL_SUMMON_LOOT_MISSILE
@ SPELL_FIND_OPENING_BEAM_END
@ SPELL_ICE_SPEAR_CONTROL_AURA
@ SPELL_FROZEN_CORE_GETS_HIT
@ SPELL_AHUNES_SHIELD
@ SPELL_AHUNE_SELF_STUN
@ SPELL_SUBMERGED
@ SPELL_COLD_SLAP
@ SPELL_SLIPPERY_FLOOR_YOU_SLIPPED
@ SPELL_IS_DEAD_CHECK
@ SPELL_MINION_DESPAWNER
@ SPELL_ICE_SPEAR_VISUAL
@ SPELL_FIND_OPENING_VISUAL
@ SPELL_SUMMONING_VISUAL_1
@ SPELL_RESURFACE
@ SPELL_ICE_SPEAR_TARGET_PICKER
@ SPELL_SUMMON_ICE_SPEAR_GO
@ SPELL_SUMMON_ICE_SPEAR_BUNNY
@ SPELL_ICE_BOMBARD
@ SPELL_STAY_SUBMERGED
@ SPELL_FIND_OPENING_CHANNEL
@ SPELL_ICE_SPEAR_KNOCKBACK
@ SPELL_SLIPPERY_FLOOR_SLIP
@ SPELL_STAND
@ SPELL_ICE_BOMBARDMENT
@ SPELL_FOUND_OPENING
@ SPELL_FORCE_WHISP_FLIGHT
@ SPELL_SUMMONING_RHYME_BONFIRE
@ SPELL_SLIPPERY_FLOOR_PERIODIC
@ SPELL_SUICIDE
@ SPELL_SYNCH_HEALTH
@ SPELL_SHAMANS_LOOK_FOR_OPENING
@ SPELL_SLIPPERY_FLOOR_AMBIENT
@ SPELL_BONFIRE_VISUAL
@ SPELL_AHUNE_ACHIEVEMENT
@ SPELL_SUMMON_FROSTWIND
@ SPELL_ICE_SPEAR_DELAY
@ SPELL_GHOST_DISGUISE
@ SPELL_AHUNE_SPANKY_HANDS
@ SPELL_SUMMON_COLDWEAVE
@ SPELL_FIND_OPENING_TRIGGER
@ SPELL_ICE_BOMBARDMENT_DEST_PICKER
@ SPELL_SUMMON_HAILSTONE
@ SPELL_CLOSE_OPENING_VISUAL
void AddSC_boss_ahune()
AhuneMisc
@ MAX_FLAMECALLERS
Position const SummonPositions[]
AhuneTexts
@ SAY_PLAYER_TEXT_1
@ SAY_PLAYER_TEXT_3
@ SAY_PLAYER_TEXT_2
Position const FlameCallerSpots[]
AhuneEmotes
@ EMOTE_EARTHEN_ASSAULT
@ EMOTE_RETREAT
@ EMOTE_RESURFACE
AhunePoints
@ POINT_FLAMECALLER_000
@ POINT_FLAMECALLER_002
@ POINT_FLAMECALLER_001
AhunePhases
@ PHASE_ONE
@ PHASE_TWO
AhuneEvents
@ EVENT_EMERGE
@ EVENT_SUMMON_FROSTWIND
@ EVENT_SUMMON_AHUNE
@ EVENT_SUMMON_COLDWEAVE
@ EVENT_AHUNE_PHASE_ONE
@ EVENT_SUMMON_HAILSTONE
@ EVENT_CLOSE_OPENING
@ EVENT_INITIAL_EMERGE
@ EVENT_STOP_LOOKING_FOR_OPENING
@ EVENT_LOOKFOROPENING_0
@ EVENT_LOOKFOROPENING_2
@ EVENT_LOOKFOROPENING_1
@ EVENT_AHUNE_PHASE_TWO
@ EVENT_SYNCH_HEALTH
@ EVENT_START_LOOKING_FOR_OPENING
AhuneActions
@ ACTION_START_EVENT
@ ACTION_STOP_EVENT
@ ACTION_AHUNE_RESURFACE
@ ACTION_AHUNE_RETREAT
@ ACTION_EMOTE_RESURFACE
uint32 GetTickNumber() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
Unit * GetCaster() const
Unit * GetTarget() const
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
SummonList summons
EventMap events
void DoZoneInCombat(Creature *creature=nullptr)
Creature *const me
Definition CreatureAI.h:82
void SetImmuneToPC(bool apply) override
Definition Creature.h:129
void SetReactState(ReactStates st)
Definition Creature.h:119
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetRegenerateHealth(bool value)
Definition Creature.h:285
void Update(uint32 time)
Definition EventMap.h:67
void Repeat(Milliseconds time)
Definition EventMap.cpp:63
EventId ExecuteEvent()
Definition EventMap.cpp:73
void SetPhase(PhaseIndex phase)
Definition EventMap.cpp:28
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void Reset()
Definition EventMap.cpp:21
GameObject *const me
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
void Delete()
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
Definition Group.h:165
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
bool isEmpty() const
Definition LinkedList.h:108
iterator begin()
PlayerList const & GetPlayers() const
Definition Map.h:448
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
static Creature * ToCreature(Object *o)
Definition Object.h:186
uint32 GetEntry() const
Definition Object.h:81
static Player * ToPlayer(Object *o)
Definition Object.h:180
Group * GetGroup()
Definition Player.h:2171
Unit * GetActionTarget() const
Definition Unit.h:509
Unit * GetActor()
Definition Unit.h:508
FROM * GetSource() const
Definition Reference.h:96
uint32 Id
Definition SpellInfo.h:289
WorldLocation * GetHitDest() const
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void Summon(Creature const *summon)
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
TaskScheduler & Update(success_t const &callback=EmptyCallback)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:769
void SetControlled(bool apply, UnitState state)
Definition Unit.cpp:11256
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
void SetHealth(uint32 val)
Definition Unit.cpp:9361
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
void HandleEmoteCommand(Emote emoteId)
Definition Unit.cpp:1568
static void Kill(Unit *attacker, Unit *victim, bool durabilityLoss=true)
Definition Unit.cpp:10930
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
void RemoveUnitFlag(UnitFlags flags)
Definition Unit.h:955
Map * GetMap() const
Definition Object.h:449
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2015
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
PrepareSpellScript(spell_ahune_ice_bombardment_dest_picker)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_ahune_ice_spear_control_aura)
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *)
PrepareSpellScript(spell_ahune_ice_spear_target_picker)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
PrepareSpellScript(spell_ahune_minion_despawner)
PrepareSpellScript(spell_ahune_slippery_floor_periodic)
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect const *, ProcEventInfo &eventInfo)
PrepareAuraScript(spell_ahune_spanky_hands)
void Register() override
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *)
PrepareAuraScript(spell_ahune_summon_ice_spear_delayer)
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *aurEff)
PrepareAuraScript(spell_ahune_summoning_rhyme_aura)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_ahune_synch_health)
void Register() override
void HandleScript(SpellEffIndex)
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:108
void SetOrientation(float orientation)
Definition Position.h:74
void EnterEvadeMode(EvadeReason) override
void ExecuteEvent(uint32 eventId) override
void Emerge()
void DoAction(int32 action) override
boss_ahune(Creature *creature)
void Submerge()
void JustEngagedWith(Unit *who) override
void JustDied(Unit *) override
go_ahune_ice_spear(GameObject *go)
TaskScheduler _scheduler
void Reset() override
void UpdateAI(uint32 diff) override
bool OnGossipSelect(Player *player, uint32, uint32) override
InstanceScript * _instance
go_ahune_ice_stone(GameObject *go)
void JustSummoned(Creature *summon) override
void ResetFlameCallers()
void JustDied(Unit *) override
SummonList _summons
InstanceScript * _instance
void UpdateAI(uint32 diff) override
void DoAction(int32 action) override
npc_ahune_bunny(Creature *creature)
void UpdateAI(uint32 diff) override
void JustAppeared() override
npc_ahune_ice_spear_bunny(Creature *creature)
void MovementInform(uint32 motionType, uint32 pointId) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void UpdateAI(uint32 diff) override
npc_earthen_ring_flamecaller(Creature *creature)
void LookOpening(bool activate, uint8 spot)
void DoAction(int action) override
void JustDied(Unit *) override
void DoAction(int32 action) override
InstanceScript * _instance
npc_frozen_core(Creature *creature)
void UpdateAI(uint32 diff) override
@ GO_ICE_STONE
@ NPC_SHAMAN_BONFIRE_BUNNY_001
@ NPC_FROZEN_CORE
@ NPC_AHUNE
@ NPC_SHAMAN_BONFIRE_BUNNY_002
@ NPC_SHAMAN_BONFIRE_BUNNY_000
#define RegisterSlavePensGameObjectAI(ai_name)
@ DATA_BONFIRE_BUNNY_000
@ DATA_AHUNE_BUNNY
@ DATA_FLAMECALLER_000
@ DATA_FROZEN_CORE
@ DATA_AHUNE
@ DATA_LUMA_SKYMOTHER
@ DATA_BEAM_BUNNY_000
#define RegisterSlavePensCreatureAI(ai_name)