Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_palehoof.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/* Script Data Start
7SDName: Boss palehoof
8SDAuthor: LordVanMartin
9SD%Complete:
10SDComment:
11SDCategory:
12Script Data End */
13
14#include <random>
15#include <algorithm>
16#include "ScriptMgr.h"
17#include "ScriptedCreature.h"
18#include "utgarde_pinnacle.h"
19
29
30//Orb spells
32{
35};
36
37//not in db
39{
42 //SAY_DEATH = 2 Missing in database
43};
44
46{
48};
49
50struct Locations
51{
52 float x, y, z;
53};
54
56{
57 {261.6f, -449.3f, 109.5f},
58 {263.3f, -454.0f, 109.5f},
59 {291.5f, -450.4f, 109.5f},
60 {291.5f, -454.0f, 109.5f},
61 {310.0f, -453.4f, 109.5f},
62 {238.6f, -460.7f, 109.5f}
63};
64
74
76{
77public:
78 boss_palehoof() : CreatureScript("boss_palehoof") { }
79
81 {
82 return new boss_palehoofAI(creature);
83 }
84
86 {
87 boss_palehoofAI(Creature* creature) : ScriptedAI(creature)
88 {
89 instance = creature->GetInstanceScript();
90 }
91
99
101
103 {
105 for (uint32 i = PHASE_FRENZIED_WORGEN; i < PHASE_NONE; ++i)
106 Sequence[i] = Phase(i);
107
108 std::vector<int> v = { Sequence[0], Sequence[1], Sequence[2], Sequence[3], Sequence[4] };
109 std::random_device rd;
110 std::mt19937 g(rd());
111
113 std::shuffle(v.begin(), v.end(), g);
114
115 uiArcingSmashTimer = 15000;
116 uiImpaleTimer = 12000;
117 uiWhiteringRoarTimer = 10000;
118
119 me->GetMotionMaster()->MoveTargetedHome();
120
121 AddCount = 0;
122
124
125 if (instance)
126 {
128
130 if (temp && !temp->IsAlive())
131 temp->Respawn();
132
134 if (temp && !temp->IsAlive())
135 temp->Respawn();
136
138 if (temp && !temp->IsAlive())
139 temp->Respawn();
140
142 if (temp && !temp->IsAlive())
143 temp->Respawn();
144
145 GameObject* go = instance->instance->GetGameObject(instance->GetData64(DATA_GORTOK_PALEHOOF_SPHERE));
146 if (go)
147 {
150 }
151 }
152 }
153
154 void EnterCombat(Unit* /*who*/) OVERRIDE
155 {
157 }
158
160 {
161 if (!who)
162 return;
163
165 return;
166
167 if (me->Attack(who, true))
168 {
169 me->AddThreat(who, 0.0f);
170 me->SetInCombatWith(who);
171 who->SetInCombatWith(me);
172 DoStartMovement(who);
173 }
174 }
175
177 {
179 return;
180
181 //Return since we have no target
182 if (!UpdateVictim())
183 return;
184
185 Creature* temp = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_ORB) : 0);
186 if (temp && temp->IsAlive())
187 temp->DisappearAndDie();
188
189 if (uiArcingSmashTimer <= diff)
190 {
192 uiArcingSmashTimer = std::rand() % 17000 + 13000;
193 } else uiArcingSmashTimer -= diff;
194
195 if (uiImpaleTimer <= diff)
196 {
197 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
198 DoCast(target, SPELL_IMPALE);
199 uiImpaleTimer = std::rand() % 12000 + 8000;
200 } else uiImpaleTimer -= diff;
201
202 if (uiWhiteringRoarTimer <= diff)
203 {
205 uiWhiteringRoarTimer = std::rand() % 12000 + 8000;
206 } else uiWhiteringRoarTimer -= diff;
207
209 }
210
211 void JustDied(Unit* /*killer*/) OVERRIDE
212 {
213 //Talk(SAY_DEATH);
214 if (instance)
216 Creature* temp = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_ORB) : 0);
217 if (temp && temp->IsAlive())
218 temp->DisappearAndDie();
219 }
220
221 void KilledUnit(Unit* /*victim*/) OVERRIDE
222 {
223 Talk(SAY_SLAY);
224 }
225
227 {
229 {
230 if (instance)
232
234 }
235 Phase move = PHASE_NONE;
236 if (AddCount >= DUNGEON_MODE(2, 4))
238 else
239 move = Sequence[AddCount++];
240 //send orb to summon spot
241 Creature* pOrb = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_ORB) : 0);
242 if (pOrb && pOrb->IsAlive())
243 {
245 pOrb->CastSpell(me, SPELL_ORB_VISUAL, true);
246 pOrb->GetMotionMaster()->MovePoint(move, moveLocs[move].x, moveLocs[move].y, moveLocs[move].z);
247 }
248 currentPhase = move;
249 }
250
257 };
258};
259
260//ravenous furbolg's spells
268
270{
271public:
272 npc_ravenous_furbolg() : CreatureScript("npc_ravenous_furbolg") { }
273
275 {
276 return new npc_ravenous_furbolgAI(creature);
277 }
278
280 {
282 {
283 instance = creature->GetInstanceScript();
284 }
285
289
291
293 {
295 uiCrazedTimer = 10000;
296 uiTerrifyingRoarTimer = 15000;
297
298 me->GetMotionMaster()->MoveTargetedHome();
299
300 if (instance)
302 {
303 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
304 if (pPalehoof && pPalehoof->IsAlive())
305 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->Reset();
306 }
307 }
308
310 {
311 //Return since we have no target
312 if (!UpdateVictim())
313 return;
314
315 if (uiChainLightingTimer <= diff)
316 {
318 uiChainLightingTimer = 5000 + rand() % 5000;
319 } else uiChainLightingTimer -= diff;
320
321 if (uiCrazedTimer <= diff)
322 {
324 uiCrazedTimer = 8000 + rand() % 4000;
325 } else uiCrazedTimer -= diff;
326
327 if (uiTerrifyingRoarTimer <= diff)
328 {
330 uiTerrifyingRoarTimer = 10000 + rand() % 10000;
331 } else uiTerrifyingRoarTimer -= diff;
332
334 }
335
337 {
338 if (!who)
339 return;
340
342 return;
343
344 if (me->Attack(who, true))
345 {
346 me->AddThreat(who, 0.0f);
347 me->SetInCombatWith(who);
348 who->SetInCombatWith(me);
349 DoStartMovement(who);
350 }
351 }
352
353 void JustDied(Unit* /*killer*/) OVERRIDE
354 {
355 if (instance)
356 {
357 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
358 if (pPalehoof)
359 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->NextPhase();
360 }
361 }
362
369 };
370};
371
372//frenzied worgen's spells
380
382{
383public:
384 npc_frenzied_worgen() : CreatureScript("npc_frenzied_worgen") { }
385
387 {
388 return new npc_frenzied_worgenAI(creature);
389 }
390
392 {
394 {
395 instance = creature->GetInstanceScript();
396 }
397
401
403
405 {
406 uiMortalWoundTimer = 5000;
407 uiEnrage1Timer = 15000;
408 uiEnrage2Timer = 10000;
409
410 me->GetMotionMaster()->MoveTargetedHome();
411
412 if (instance)
414 {
415 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
416 if (pPalehoof && pPalehoof->IsAlive())
417 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->Reset();
418 }
419 }
420
422 {
423 //Return since we have no target
424 if (!UpdateVictim())
425 return;
426
427 if (uiMortalWoundTimer <= diff)
428 {
430 uiMortalWoundTimer = 3000 + rand() % 4000;
431 } else uiMortalWoundTimer -= diff;
432
433 if (uiEnrage1Timer <= diff)
434 {
436 uiEnrage1Timer = 15000;
437 } else uiEnrage1Timer -= diff;
438
439 if (uiEnrage2Timer <= diff)
440 {
442 uiEnrage2Timer = 10000;
443 } else uiEnrage2Timer -= diff;
444
446 }
447
449 {
450 if (!who)
451 return;
452
454 return;
455
456 if (me->Attack(who, true))
457 {
458 me->AddThreat(who, 0.0f);
459 me->SetInCombatWith(who);
460 who->SetInCombatWith(me);
461 DoStartMovement(who);
462 }
463 if (instance)
465 }
466
467 void JustDied(Unit* /*killer*/) OVERRIDE
468 {
469 if (instance)
470 {
471 Creature* pPalehoof = Unit::GetCreature((*me), instance->GetData64(DATA_GORTOK_PALEHOOF));
472 if (pPalehoof)
473 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->NextPhase();
474 }
475 }
476
483 };
484};
485
486//ferocious rhino's spells
495
497{
498public:
499 npc_ferocious_rhino() : CreatureScript("npc_ferocious_rhino") { }
500
502 {
503 return new npc_ferocious_rhinoAI(creature);
504 }
505
507 {
509 {
510 instance = creature->GetInstanceScript();
511 }
512
516
518
520 {
521 uiStompTimer = 10000;
522 uiGoreTimer = 15000;
523 uiGrievousWoundTimer = 20000;
524
525 me->GetMotionMaster()->MoveTargetedHome();
526
527 if (instance)
529 {
530 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
531 if (pPalehoof && pPalehoof->IsAlive())
532 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->Reset();
533 }
534 }
535
537 {
538 //Return since we have no target
539 if (!UpdateVictim())
540 return;
541
542 if (uiStompTimer <= diff)
543 {
545 uiStompTimer = 8000 + rand() % 4000;
546 } else uiStompTimer -= diff;
547
548 if (uiGoreTimer <= diff)
549 {
551 uiGoreTimer = 13000 + rand() % 4000;
552 } else uiGoreTimer -= diff;
553
554 if (uiGrievousWoundTimer <= diff)
555 {
556 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
558 uiGrievousWoundTimer = 18000 + rand() % 4000;
559 } else uiGrievousWoundTimer -= diff;
560
562 }
563
565 {
566 if (!who)
567 return;
568
570 return;
571
572 if (me->Attack(who, true))
573 {
574 me->AddThreat(who, 0.0f);
575 me->SetInCombatWith(who);
576 who->SetInCombatWith(me);
577 DoStartMovement(who);
578 }
579 }
580
581 void JustDied(Unit* /*killer*/) OVERRIDE
582 {
583 if (instance)
584 {
585 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
586 if (pPalehoof)
587 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->NextPhase();
588 }
589 }
590
597 };
598};
599
600//massive jormungar's spells
609
614
616{
617public:
618 npc_massive_jormungar() : CreatureScript("npc_massive_jormungar") { }
619
621 {
622 return new npc_massive_jormungarAI(creature);
623 }
624
626 {
628 {
629 instance = creature->GetInstanceScript();
630 }
631
635
637
639 {
640 uiAcidSpitTimer = 3000;
641 uiAcidSplatterTimer = 12000;
642 uiPoisonBreathTimer = 10000;
643
644 me->GetMotionMaster()->MoveTargetedHome();
645
646 if (instance)
648 {
649 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
650 if (pPalehoof && pPalehoof->IsAlive())
651 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->Reset();
652 }
653 }
654
656 {
657 //Return since we have no target
658 if (!UpdateVictim())
659 return;
660
661 if (uiAcidSpitTimer <= diff)
662 {
663 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
664 DoCast(target, SPELL_ACID_SPIT);
665 uiAcidSpitTimer = 2000 + rand() % 2000;
666 } else uiAcidSpitTimer -= diff;
667
668 if (uiAcidSplatterTimer <= diff)
669 {
671 uiAcidSplatterTimer = 10000 + rand() % 4000;
672 } else uiAcidSplatterTimer -= diff;
673
674 if (uiPoisonBreathTimer <= diff)
675 {
676 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
678 uiPoisonBreathTimer = 8000 + rand() % 4000;
679 } else uiPoisonBreathTimer -= diff;
680
682 }
683
685 {
686 if (!who)
687 return;
688
690 return;
691
692 if (me->Attack(who, true))
693 {
694 me->AddThreat(who, 0.0f);
695 me->SetInCombatWith(who);
696 who->SetInCombatWith(me);
697 DoStartMovement(who);
698 }
699 }
700
701 void JustDied(Unit* /*killer*/) OVERRIDE
702 {
703 if (instance)
704 {
705 Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
706 if (pPalehoof)
707 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->NextPhase();
708 }
709 }
710
717 };
718};
719
721{
722public:
723 npc_palehoof_orb() : CreatureScript("npc_palehoof_orb") { }
724
726 {
727 return new npc_palehoof_orbAI(creature);
728 }
729
731 {
733 {
734 instance = creature->GetInstanceScript();
735 }
736
740
742 {
744 SummonTimer = 5000;
746 me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
747 me->RemoveAurasDueToSpell(SPELL_ORB_VISUAL);
748 me->SetSpeed(MOVE_FLIGHT, 0.5f);
749 }
750
752 {
754 return;
755
756 if (SummonTimer <= diff)
757 {
759 {
760 Creature* pNext = NULL;
761 switch (currentPhase)
762 {
763 case PHASE_FRENZIED_WORGEN: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_FRENZIED_WORGEN) : 0); break;
766 case PHASE_FEROCIOUS_RHINO: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_FEROCIOUS_RHINO) : 0); break;
767 case PHASE_GORTOK_PALEHOOF: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0); break;
768 default: break;
769 }
770
771 if (pNext)
772 {
776 pNext->SetInCombatWithZone();
777 pNext->Attack(pNext->SelectNearestTarget(100), true);
778 }
780 }
781 } else SummonTimer -= diff;
782 }
783
785 {
786 if (type != POINT_MOTION_TYPE)
787 return;
788 if (id > 4)
789 return;
790 Creature* pNext = NULL;
791 switch (id)
792 {
793 case PHASE_FRENZIED_WORGEN: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_FRENZIED_WORGEN) : 0); break;
796 case PHASE_FEROCIOUS_RHINO: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_FEROCIOUS_RHINO) : 0); break;
797 case PHASE_GORTOK_PALEHOOF: pNext = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0); break;
798 default: break;
799 }
800 if (pNext)
801 DoCast(pNext, SPELL_ORB_CHANNEL, false);
802 currentPhase = (Phase)id;
803 SummonTimer = 5000;
804 }
805 };
806};
807
809{
810public:
811 go_palehoof_sphere() : GameObjectScript("go_palehoof_sphere") { }
812
814 {
815 InstanceScript* instance = go->GetInstanceScript();
816
817 Creature* pPalehoof = Unit::GetCreature(*go, instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
818 if (pPalehoof && pPalehoof->IsAlive())
819 {
821 go->SetGoState(GOState::GO_STATE_ACTIVE);
822
823 CAST_AI(boss_palehoof::boss_palehoofAI, pPalehoof->AI())->NextPhase();
824 }
825 return true;
826 }
827};
828
830{
831 new boss_palehoof();
836 new npc_palehoof_orb();
837 new go_palehoof_sphere();
838}
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ GO_STATE_ACTIVE
Definition GameObject.h:576
@ GO_STATE_READY
Definition GameObject.h:577
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
@ POINT_MOTION_TYPE
@ TEMPSUMMON_CORPSE_DESPAWN
Definition Object.h:72
#define CAST_AI(a, b)
@ GO_FLAG_NOT_SELECTABLE
@ MOVEMENTFLAG_FLYING
Definition Unit.h:747
@ UNIT_STAND_STATE_STAND
Definition Unit.h:162
@ MOVE_FLIGHT
Definition Unit.h:561
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FLAG_NOT_ATTACKABLE_1
Definition Unit.h:632
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_FLAGS
@ GAMEOBJECT_FIELD_FLAGS
Creatures
@ SAY_SLAY
#define SAY_AGGRO
@ PHASE_NONE
@ SPELL_FREEZE
Definition boss_gyth.cpp:15
MassiveAdds
@ CREATURE_JORMUNGAR_WORM
void AddSC_boss_palehoof()
@ NPC_STASIS_CONTROLLER
@ SAY_AGGRO
@ SAY_SLAY
struct Locations moveLocs[]
@ SPELL_WITHERING_ROAR
@ SPELL_FREEZE
@ H_SPELL_WITHERING_ROAR
@ H_SPELL_IMPALE
@ SPELL_ARCING_SMASH
@ SPELL_IMPALE
MassiveSpells
@ SPELL_POISON_BREATH
@ H_SPELL_POISON_BREATH
@ H_SPELL_ACID_SPLATTER
@ SPELL_ACID_SPLATTER
@ SPELL_ACID_SPIT
FrenziedSpells
@ SPELL_ENRAGE_2
@ H_SPELL_MORTAL_WOUND
@ SPELL_ENRAGE_1
@ SPELL_MORTAL_WOUND
RavenousSpells
@ SPELL_CRAZED
@ SPELL_TERRIFYING_ROAR
@ SPELL_CHAIN_LIGHTING
@ H_SPELL_CHAIN_LIGHTING
@ PHASE_FRENZIED_WORGEN
@ PHASE_NONE
@ PHASE_MASSIVE_JORMUNGAR
@ PHASE_RAVENOUS_FURLBORG
@ PHASE_FEROCIOUS_RHINO
@ PHASE_GORTOK_PALEHOOF
OrbSpells
@ SPELL_ORB_CHANNEL
@ SPELL_ORB_VISUAL
FerociousSpells
@ SPELL_STOMP
@ SPELL_GRIEVOUS_WOUND
@ SPELL_GORE
@ H_SPELL_GRIEVOUS_WOUND
@ H_SPELL_GORE
@ SPELL_CHAIN_LIGHTING
@ SPELL_MORTAL_WOUND
@ SPELL_ARCING_SMASH
@ SPELL_STOMP
Definition chapter5.cpp:158
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
void SetInCombatWithZone()
void Respawn(bool force=false)
Unit * SelectNearestTarget(float dist=0, bool playerOnly=false) const
CreatureAI * AI() const
Definition Creature.h:483
void DisappearAndDie()
Definition Creature.cpp:206
CreatureScript(const char *name)
void SetGoState(GOState state)
GameObjectScript(const char *name)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:1280
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
Definition Unit.h:1367
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
bool IsAlive() const
Definition Unit.h:2032
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
bool Attack(Unit *victim, bool meleeAttack)
void SetStandState(uint8 state)
Definition Unit.cpp:5902
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
virtual uint64 GetData64(uint32) const
Definition ZoneScript.h:32
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *, GameObject *go) 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
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Creature * me
ScriptedAI(Creature *creature)
const T & DUNGEON_MODE(const T &normal5, const T &heroic5) const
void DoStartMovement(Unit *target, float distance=0.0f, float angle=0.0f)
void JustDied(Unit *) OVERRIDE
void EnterCombat(Unit *) OVERRIDE
boss_palehoofAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void KilledUnit(Unit *) OVERRIDE
void AttackStart(Unit *who) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void MovementInform(uint32 type, uint32 id) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
@ DATA_GORTOK_PALEHOOF_SPHERE
@ DATA_NPC_RAVENOUS_FURBOLG
@ DATA_NPC_FRENZIED_WORGEN
@ DATA_NPC_MASSIVE_JORMUNGAR
@ DATA_NPC_FEROCIOUS_RHINO
@ DATA_GORTOK_PALEHOOF
@ DATA_NPC_ORB
@ DATA_GORTOK_PALEHOOF_EVENT