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 "SpellInfo.h"
34#include "SpellScript.h"
35#include "TemporarySummon.h"
36#include "the_slave_pens.h"
37
39{
40 // Ahune
50 SPELL_STAND = 37752,
51
52 //Earther Ring Flamecaller
59
60 //Ahune Bunny
73
74 // Ice Spear
79
80 // Slippery Floor
85
86 // Frozen Core
89 SPELL_IS_DEAD_CHECK = 61976, // NYI
96};
97
104
111
130
139
141{
143 PHASE_TWO = 1
145
152
154{
157
159{
160 { -99.1021f, -233.7526f, -1.22307f, 1.588250f }, // Ahune
161 { -98.0151f, -230.4555f, -1.21089f, 1.797689f }, // Frozen Core
162 { -143.172f, -147.6801f, -3.16113f, 4.852015f }, // Bonfire Bunny 000
163 { -134.304f, -145.7803f, -1.70332f, 4.677482f }, // Bonfire Bunny 001
164 { -125.036f, -144.2065f, -1.91660f, 4.991642f } // Bonfire Bunny 002
165};
166
168{
169 { -145.2233f, -137.5543f, -1.59056f, 5.427049f },
170 { -137.4383f, -136.4050f, -1.72384f, 5.336747f },
171 { -129.0413f, -132.1494f, -2.09285f, 5.460842f }
172};
173
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.empty())
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
277{
278 npc_frozen_core(Creature* creature) : ScriptedAI(creature)
279 {
281 Initialize();
282 }
283
292
293 void JustDied(Unit* /*killer*/) override
294 {
296 Unit::Kill(me, ahune);
297
300 }
301
302 void DoAction(int32 action) override
303 {
304 if (action == ACTION_AHUNE_RETREAT)
305 {
306 me->SetUninteractible(false);
307 me->SetImmuneToPC(false);
310 }
311 else if (action == ACTION_AHUNE_RESURFACE)
312 {
313 _events.Reset();
315 me->SetUninteractible(true);
316 me->SetImmuneToPC(true);
317 }
318 }
319
320 void UpdateAI(uint32 diff) override
321 {
322 _events.Update(diff);
323
324 while (uint32 eventId = _events.ExecuteEvent())
325 {
326 switch (eventId)
327 {
330 DoCast(ahune, SPELL_SYNCH_HEALTH, true);
331 else
333 _events.Repeat(3s);
334 break;
335 default:
336 break;
337 }
338 }
339 }
340
341private:
344};
345
347{
349 {
351 _submerged = false;
352 }
353
354 void JustSummoned(Creature* summon) override
355 {
356 if (summon->GetEntry() == NPC_AHUNE)
357 return;
358
359 DoZoneInCombat(summon);
360 _summons.Summon(summon);
361 }
362
363 void JustDied(Unit* /*killer*/) override
364 {
367 }
368
400
401 void UpdateAI(uint32 diff) override
402 {
403 _events.Update(diff);
404
405 while (uint32 eventId = _events.ExecuteEvent())
406 {
407 switch (eventId)
408 {
411 for (uint8 counter = 0; counter < MAX_FLAMECALLERS; ++counter)
413 DoCast(flamecaller, SPELL_SHAMANS_LOOK_FOR_OPENING, true);
414 break;
417 break;
421 _events.Repeat(8s);
422 if (_submerged)
424 break;
427 break;
430 {
432 DoZoneInCombat(ahune);
433 DoCast(ahune, SPELL_RESURFACE);
434 }
435 break;
438 flamecaller->AI()->DoAction(ACTION_EMOTE_RESURFACE);
441 break;
444 DoCast(flamecaller, SPELL_FOUND_OPENING);
446 ahune->AI()->DoAction(ACTION_AHUNE_RETREAT);
447 _events.Reset();
451 break;
453 _submerged = true;
454 _events.Reset();
460 break;
461 default:
462 break;
463 }
464 }
465 }
466
468 {
469 for (uint8 counter = 0; counter < MAX_FLAMECALLERS; ++counter)
471 flamecaller->AI()->EnterEvadeMode();
472 }
473
474private:
479};
480
482{
484 {
486 _mySpot = 0;
487 }
488
489 void Reset() override
490 {
491 _events.Reset();
492 }
493
494 void MovementInform(uint32 motionType, uint32 pointId) override
495 {
496 if (motionType != POINT_MOTION_TYPE)
497 return;
498
499 switch (pointId)
500 {
503 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
504 break;
507 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
508 break;
511 me->SetOrientation(FlameCallerSpots[_mySpot].GetOrientation());
512 break;
513 default:
514 break;
515 }
516
518 }
519
520 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
521 {
522 switch (spellInfo->Id)
523 {
526 break;
529 break;
530 default:
531 break;
532 }
533 }
534
535 void DoAction(int action) override
536 {
537 if (action == ACTION_EMOTE_RESURFACE)
539 }
540
541 void UpdateAI(uint32 diff) override
542 {
543 _events.Update(diff);
544
545 while (uint32 eventId = _events.ExecuteEvent())
546 {
547 switch (eventId)
548 {
550 LookOpening(true, 0);
552 break;
554 LookOpening(true, 1);
556 break;
558 LookOpening(true, 2);
560 break;
562 LookOpening(false, _mySpot);
563 break;
564 default:
565 break;
566 }
567 }
568 }
569
570 void LookOpening(bool activate, uint8 spot)
571 {
572 if (_mySpot != spot)
573 return;
574
575 if (Creature* bonfireBunny = _instance->GetCreature(DATA_BONFIRE_BUNNY_000 + spot))
576 if (Creature* beamBunny = _instance->GetCreature(DATA_BEAM_BUNNY_000 + spot))
577 {
578 if (activate)
579 {
580 DoCast(bonfireBunny, SPELL_FIND_OPENING_TRIGGER);
581 bonfireBunny->CastSpell(beamBunny, SPELL_FIND_OPENING_VISUAL, true);
582 }
583 else
584 {
586 bonfireBunny->CastStop();
587 beamBunny->RemoveAurasDueToSpell(SPELL_FIND_OPENING_BEAM_END);
588 }
589 }
590 }
591
592private:
596};
597
599{
601
602 void JustAppeared() override
603 {
606
607 _scheduler.Schedule(2500ms, [this](TaskContext const& /*task*/)
608 {
610 me->DespawnOrUnsummon(3500ms);
611 });
612 }
613
614 void UpdateAI(uint32 diff) override
615 {
616 _scheduler.Update(diff);
617 }
618
619private:
621};
622
624{
626
627 void Reset() override
628 {
629 _scheduler.Schedule(2500ms, [this](TaskContext const& /*context*/)
630 {
632 me->DespawnOrUnsummon(3500ms);
633 });
634 }
635
636 void UpdateAI(uint32 diff) override
637 {
638 _scheduler.Update(diff);
639 }
640
641private:
643};
644
646{
647 go_ahune_ice_stone(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
648
649 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
650 {
651 ClearGossipMenuFor(player);
652
654 ahuneBunny->AI()->DoAction(ACTION_START_EVENT);
655
657 luma->CastSpell(player, SPELL_SUMMONING_RHYME_AURA, true);
658 CloseGossipMenuFor(player);
659 me->Delete();
660 return true;
661 }
662
663private:
665};
666
667// 46430 - Synch Health
680
681// 45926 - Summoning Rhyme Aura
683{
684 bool Validate(SpellInfo const* /*spellInfo*/) override
685 {
687 }
688
689 void PeriodicTick(AuraEffect const* aurEff)
690 {
691 if (!GetCaster())
692 return;
693
694 Creature* caster = GetCaster()->ToCreature();
695 Player* player = GetTarget()->ToPlayer();
696 if (!caster || !player)
697 return;
698
699 player->CastSpell(player, SPELL_FORCE_WHISP_FLIGHT);
700
701 switch (aurEff->GetTickNumber())
702 {
703 case 1:
705 player->CastSpell(player, SPELL_SUMMONING_RHYME_BONFIRE, true);
706 break;
707 case 2:
709 break;
710 case 3:
712 Remove();
713 break;
714 }
715 }
716
721};
722
723// 46878 - Summon Ice Spear Delayer
725{
726 bool Validate(SpellInfo const* /*spellInfo*/) override
727 {
729 }
730
731 void PeriodicTick(AuraEffect const* /*aurEff*/)
732 {
733 Unit* target = GetTarget();
734 target->CastSpell(target, SPELL_ICE_SPEAR_KNOCKBACK);
735 Remove();
736 }
737
742};
743
744// 46371 - Ice Spear Control Aura
746{
747 bool Validate(SpellInfo const* /*spellInfo*/) override
748 {
750 }
751
752 void PeriodicTick(AuraEffect const* /*aurEff*/)
753 {
754 if (Unit* caster = GetCaster())
755 caster->CastSpell(caster, SPELL_ICE_SPEAR_TARGET_PICKER);
756 }
757
762};
763
764// 46372 - Ice Spear Target Picker
766{
767 bool Validate(SpellInfo const* /*spellInfo*/) override
768 {
770 }
771
772 void FilterTargets(std::list<WorldObject*>& targets)
773 {
774 if (targets.empty())
775 return;
776
778 targets.clear();
779 targets.push_back(target);
780 }
781
782 void HandleDummy(SpellEffIndex /*effIndex*/)
783 {
785 }
786
792};
793
794// 46320 - Spell Slippery Floor Periodic
796{
797 bool Validate(SpellInfo const* /*spellInfo*/) override
798 {
800 }
801
803 {
804 if (Unit* target = GetHitUnit())
805 if (target->isMoving())
806 {
807 target->CastSpell(target, SPELL_SLIPPERY_FLOOR_SLIP, true);
808 target->CastSpell(target, SPELL_SLIPPERY_FLOOR_YOU_SLIPPED, true);
809 }
810 }
811
816};
817
818// 46146 - Ahune Spanky Hands
820{
821 bool Validate(SpellInfo const* /*spellInfo*/) override
822 {
824 }
825
826 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
827 {
829 GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_COLD_SLAP, true);
830 }
831
836};
837
838// 46843 - Minion Despawner
852
853// 46398 - Spell Ice Bombardment Dest Picker
855{
856 bool Validate(SpellInfo const* /*spellInfo*/) override
857 {
859 }
860
862 {
863 GetCaster()->CastSpell(GetHitDest()->GetPosition(), SPELL_ICE_BOMBARDMENT, true);
864 }
865
870};
871
#define sCreatureTextMgr
@ TEXT_RANGE_NORMAL
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
#define sLFGMgr
Definition LFGMgr.h:515
@ POINT_MOTION_TYPE
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
Spells
Definition PlayerAI.cpp:32
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1383
void ClearGossipMenuFor(Player *player)
void CloseGossipMenuFor(Player *player)
SpellEffIndex
@ EFFECT_0
@ LANG_UNIVERSAL
@ TARGET_UNIT_SRC_AREA_ENTRY
@ EMOTE_ONESHOT_SUBMERGE
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_APPLY_AURA
@ 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)
EvadeReason
@ REACT_PASSIVE
@ UNIT_STATE_ROOT
Definition Unit.h:271
void AddSC_boss_ahune()
@ SAY_PLAYER_TEXT_1
@ SAY_PLAYER_TEXT_3
@ SAY_PLAYER_TEXT_2
@ ACTION_START_EVENT
@ ACTION_STOP_EVENT
@ ACTION_AHUNE_RESURFACE
@ ACTION_AHUNE_RETREAT
@ ACTION_EMOTE_RESURFACE
@ EMOTE_EARTHEN_ASSAULT
@ EMOTE_RETREAT
@ EMOTE_RESURFACE
@ MAX_FLAMECALLERS
Position const SummonPositions[]
@ POINT_FLAMECALLER_000
@ POINT_FLAMECALLER_002
@ POINT_FLAMECALLER_001
@ 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
@ PHASE_ONE
@ PHASE_TWO
Position const FlameCallerSpots[]
@ 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
uint32 GetTickNumber() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
Unit * GetCaster() const
Unit * GetTarget() const
HookList< EffectProcHandler > OnEffectProc
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
SummonList summons
EventMap events
void DoZoneInCombat()
Definition CreatureAI.h:169
Creature *const me
Definition CreatureAI.h:63
void SetImmuneToPC(bool apply) override
Definition Creature.h:184
void SetReactState(ReactStates st)
Definition Creature.h:174
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetRegenerateHealth(bool value)
Definition Creature.h:373
uint32 ExecuteEvent()
Definition EventMap.cpp:77
void Update(uint32 time)
Definition EventMap.h:61
void Repeat(Milliseconds time)
Definition EventMap.cpp:67
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition EventMap.cpp:40
void SetPhase(uint8 phase)
Definition EventMap.cpp:32
void Reset()
Definition EventMap.cpp:25
GameObject *const me
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
Definition Group.h:205
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
bool empty() const
Definition LinkedList.h:107
PlayerList const & GetPlayers() const
Definition Map.h:403
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
Creature * ToCreature()
Definition Object.h:121
Unit * GetProcTarget() const
Definition Unit.h:501
iterator begin()
Definition RefManager.h:35
uint32 const Id
Definition SpellInfo.h:328
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
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(duration_t time, task_handler_t task)
TaskScheduler & Update()
Update the scheduler to the current time.
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:160
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:89
Definition Unit.h:635
void SetHealth(uint64 val)
Definition Unit.cpp:9973
void SetControlled(bool apply, UnitState state)
Definition Unit.cpp:11545
MotionMaster * GetMotionMaster()
Definition Unit.h:1723
void SetUninteractible(bool apply)
Definition Unit.cpp:8564
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
Definition Unit.cpp:1657
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3974
static void Kill(Unit *attacker, Unit *victim, bool durabilityLoss=true, bool skipSettingDeathState=false)
Definition Unit.cpp:11225
Map * GetMap() const
Definition Object.h:411
InstanceScript * GetInstanceScript() const
Definition Object.cpp:396
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2217
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:1398
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:1441
void HandleScript(SpellEffIndex)
void Register() override
bool Validate(SpellInfo const *) override
void HandleProc(AuraEffect *, ProcEventInfo &eventInfo)
void Register() override
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
void PeriodicTick(AuraEffect const *)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleDummy(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *)
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
Definition Containers.h:110
constexpr void SetOrientation(float orientation)
Definition Position.h:82
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)