aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp522
-rw-r--r--src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/def_pinnacle.h37
-rw-r--r--src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp7
3 files changed, 410 insertions, 156 deletions
diff --git a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp
index db5394de8c3..8b0e3ce3942 100644
--- a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp
+++ b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_palehoof.cpp
@@ -12,49 +12,61 @@ update creature_template set scriptname = 'boss_palehoof' where entry = '';
#include "precompiled.h"
#include "def_pinnacle.h"
-//Spells
-#define SPELL_ARCING_SMASH 48260
-#define SPELL_IMPALE 48261
-#define H_SPELL_IMPALE 59268
-#define SPELL_WITHERING_ROAR 48256
-#define H_SPELL_WITHERING_ROAR 59267
-
-#define SPELL_FREEZE 16245
-
-//ravenous furbolg's spells
-#define SPELL_CHAIN_LIGHTING 48140
-#define H_SPELL_CHAIN_LIGHTING 59273
-#define SPELL_CRAZED 48139
-#define SPELL_TERRIFYING_ROAR 48144
-
-//frenzied worgen's spells
-#define SPELL_MORTAL_WOUND 48137
-#define H_SPELL_MORTAL_WOUND 59265
-#define SPELL_ENRAGE_1 48138
-#define SPELL_ENRAGE_2 48142
+enum Spells
+{
+ SPELL_ARCING_SMASH = 48260,
+ SPELL_IMPALE = 48261,
+ H_SPELL_IMPALE = 59268,
+ SPELL_WITHERING_ROAR = 48256,
+ H_SPELL_WITHERING_ROAR = 59267,
+ SPELL_FREEZE = 16245
+};
-//ferocious rhino's spells
-#define SPELL_GORE 48130
-#define H_SPELL_GORE 59264
-#define SPELL_GRIEVOUS_WOUND 48105
-#define H_SPELL_GRIEVOUS_WOUND 59263
-#define SPELL_STOMP 48131
+//Orb spells
+enum OrbSpells
+{
+ SPELL_ORB_VISUAL = 48044,
+ SPELL_ORB_CHANNEL = 48048
+};
-//massive jormungar's spells
-#define SPELL_ACID_SPIT 48132
-#define SPELL_ACID_SPLATTER 48136
-#define H_SPELL_ACID_SPLATTER 59272
-#define SPELL_POISON_BREATH 48133
-#define H_SPELL_POISON_BREATH 59271
+//not in db
+enum Yells
+{
+ SAY_AGGRO = -1575000,
+ SAY_SLAY_1 = -1575001,
+ SAY_SLAY_2 = -1575002,
+ SAY_DEATH = -1575003
+};
-#define CREATURE_JORMUNGAR_WORM 27228
+enum Creatures
+{
+ MOB_STASIS_CONTROLLER = 26688
+};
-//not in db
-//Yell
-#define SAY_AGGRO -1575000
-#define SAY_SLAY_1 -1575001
-#define SAY_SLAY_2 -1575002
-#define SAY_DEATH -1575003
+struct Locations
+{
+ float x, y, z;
+};
+
+struct Locations moveLocs[]=
+{
+ {261.6,-449.3,109.5},
+ {263.3,-454.0,109.5},
+ {291.5,-450.4,109.5},
+ {291.5,-454.0,109.5},
+ {310.0,-453.4,109.5},
+ {238.6,-460.7,109.5}
+};
+
+enum Phase
+{
+ PHASE_FRENZIED_WORGEN,
+ PHASE_RAVENOUS_FURLBORG,
+ PHASE_MASSIVE_JORMUNGAR,
+ PHASE_FEROCIOUS_RHINO,
+ PHASE_GORTOK_PALEHOOF,
+ PHASE_NONE
+};
struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
{
@@ -67,10 +79,9 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
uint32 uiImpaleTimer;
uint32 uiWhiteringRoarTimer;
uint32 uiWaitingTimer;
-
- uint8 Phase;
-
- bool bWaiting;
+ Phase currentPhase;
+ uint8 AddCount;
+ bool DoneAdds[4];
ScriptedInstance *pInstance;
@@ -80,12 +91,13 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
uiImpaleTimer = 12000;
uiWhiteringRoarTimer = 10000;
- Phase = 0;
- bWaiting = false;
-
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(m_creature, SPELL_FREEZE);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
+
+ for(uint32 i=0;i<4;i++)
+ DoneAdds[i]=false;
+ AddCount=0;
+
+ currentPhase=PHASE_NONE;
if (pInstance)
{
@@ -113,62 +125,56 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
{
DoScriptText(SAY_AGGRO, m_creature);
}
+
+ void AttackStart(Unit* who)
+ {
+ if (!who)
+ return;
+
+ if (m_creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ return;
+
+ if (m_creature->Attack(who, true))
+ {
+ m_creature->AddThreat(who, 0.0f);
+ m_creature->SetInCombatWith(who);
+ who->SetInCombatWith(m_creature);
+ DoStartMovement(who);
+ }
+ }
void UpdateAI(const uint32 diff)
{
- if (Phase == 6)
+ if(currentPhase!=PHASE_GORTOK_PALEHOOF)
+ return;
+ //Return since we have no target
+ if (!UpdateVictim())
+ return;
+
+ Creature* pTemp = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_MOB_ORB));
+ if (pTemp && pTemp->isAlive())
+ pTemp->DisappearAndDie();
+
+ if (uiArcingSmashTimer < diff)
{
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- if (uiArcingSmashTimer < diff)
- {
- DoCast(m_creature,SPELL_ARCING_SMASH);
- uiArcingSmashTimer = 13000 + rand()%4000;
- } else uiArcingSmashTimer -= diff;
-
- if (uiImpaleTimer < diff)
- {
- if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
- DoCast(pTarget, HEROIC(SPELL_IMPALE, H_SPELL_IMPALE));
- uiImpaleTimer = 8000 + rand()%4000;
- } else uiImpaleTimer -= diff;
-
- if (uiWhiteringRoarTimer < diff)
- {
- DoCast(m_creature, HEROIC(SPELL_WITHERING_ROAR, H_SPELL_WITHERING_ROAR));
- uiWhiteringRoarTimer = 8000 + rand()%4000;
- } else uiWhiteringRoarTimer -= diff;
-
- DoMeleeAttackIfReady();
- }
- else if (Phase != 0 && bWaiting)
+ DoCast(m_creature,SPELL_ARCING_SMASH);
+ uiArcingSmashTimer = urand(13000,17000);
+ } else uiArcingSmashTimer -= diff;
+
+ if (uiImpaleTimer < diff)
{
- if (uiWaitingTimer < diff)
- {
- Creature *pNext;
- switch(Phase)
- {
- case 1: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FRENZIED_WORGEN) : 0); break;
- case 2: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_RAVENOUS_FURBOLG) : 0); break;
- case 3: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_MASSIVE_JORMUNGAR) : 0); break;
- case 4: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FEROCIOUS_RHINO) : 0); break;
- case 5: pNext = m_creature; ++Phase; break;
- }
-
- if (pNext)
- {
- pNext->RemoveAurasDueToSpell(SPELL_FREEZE);
- pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- ((Unit*)pNext)->SetStandState(UNIT_STAND_STATE_STAND);
- pNext->SetInCombatWithZone();
- }
-
- bWaiting = false;
- } else uiWaitingTimer -= diff;
- }
+ if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,100,true))
+ DoCast(pTarget, HEROIC(SPELL_IMPALE,H_SPELL_IMPALE));
+ uiImpaleTimer = urand(8000,12000);
+ } else uiImpaleTimer -= diff;
+
+ if (uiWhiteringRoarTimer < diff)
+ {
+ DoCast(m_creature, HEROIC(SPELL_WITHERING_ROAR,H_SPELL_WITHERING_ROAR));
+ uiWhiteringRoarTimer = urand(8000,12000);
+ } else uiWhiteringRoarTimer -= diff;
+
+ DoMeleeAttackIfReady();
}
void JustDied(Unit* killer)
@@ -176,6 +182,9 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
DoScriptText(SAY_DEATH, m_creature);
if (pInstance)
pInstance->SetData(DATA_GORTOK_PALEHOOF_EVENT, DONE);
+ Creature* pTemp = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_MOB_ORB));
+ if (pTemp && pTemp->isAlive())
+ pTemp->DisappearAndDie();
}
void KilledUnit(Unit *victim)
@@ -185,10 +194,65 @@ struct TRINITY_DLL_DECL boss_palehoofAI : public ScriptedAI
void NextPhase()
{
- ++Phase;
- bWaiting = true;
- uiWaitingTimer = 1000;
+ if(currentPhase==PHASE_NONE)
+ {
+ pInstance->SetData(DATA_GORTOK_PALEHOOF_EVENT, IN_PROGRESS);
+ m_creature->SummonCreature(MOB_STASIS_CONTROLLER,moveLocs[5].x,moveLocs[5].y,moveLocs[5].z,0,TEMPSUMMON_CORPSE_DESPAWN);
+ }
+ Phase move = PHASE_NONE;
+ if(AddCount>=(HeroicMode?4:2))
+ {
+ move=PHASE_GORTOK_PALEHOOF;
+ }
+ else
+ {
+ //select random not yet defeated add
+ uint8 next = rand()%4;
+ for(int i=0;i<16;i++)
+ {
+ if(!DoneAdds[i%4]&&next==0){
+ move=(Phase)(i%4);
+ break;
+ }else if(!DoneAdds[i%4]&&next>0)
+ next--;
+ }
+ AddCount++;
+ DoneAdds[move]=true;
+ move=(Phase)(move%4);
+ }
+ //send orb to summon spot
+ Creature *pOrb = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_ORB) : 0);
+ if (pOrb && pOrb->isAlive()){
+ if(currentPhase==PHASE_NONE)
+ pOrb->CastSpell(m_creature,SPELL_ORB_VISUAL,true);
+ pOrb->GetMotionMaster()->MovePoint(move,moveLocs[move].x,moveLocs[move].y,moveLocs[move].z);
+ }
+ currentPhase=move;
}
+
+ void JustReachedHome()
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ DoCast(m_creature, SPELL_FREEZE);
+ }
+};
+
+CreatureAI* GetAI_boss_palehoof(Creature* pCreature)
+{
+ return new boss_palehoofAI (pCreature);
+}
+
+//ravenous furbolg's spells
+enum RavenousSpells
+{
+ SPELL_CHAIN_LIGHTING = 48140,
+ H_SPELL_CHAIN_LIGHTING = 59273,
+ SPELL_CRAZED = 48139,
+ SPELL_TERRIFYING_ROAR = 48144
};
struct TRINITY_DLL_DECL mob_ravenous_furbolgAI : public ScriptedAI
@@ -210,9 +274,15 @@ struct TRINITY_DLL_DECL mob_ravenous_furbolgAI : public ScriptedAI
uiCrazedTimer = 10000;
uiTerrifyingRoarTimer = 15000;
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(m_creature, SPELL_FREEZE);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
+
+ if (pInstance)
+ if(pInstance->GetData(DATA_GORTOK_PALEHOOF_EVENT)==IN_PROGRESS)
+ {
+ Creature *pPalehoof = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
+ if (pPalehoof && pPalehoof->isAlive())
+ CAST_AI(boss_palehoofAI, pPalehoof->AI())->Reset();
+ }
}
void UpdateAI(const uint32 diff)
@@ -268,6 +338,30 @@ struct TRINITY_DLL_DECL mob_ravenous_furbolgAI : public ScriptedAI
CAST_AI(boss_palehoofAI, pPalehoof->AI())->NextPhase();
}
}
+
+ void JustReachedHome()
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ DoCast(m_creature, SPELL_FREEZE);
+ }
+};
+
+CreatureAI* GetAI_mob_ravenous_furbolg(Creature* pCreature)
+{
+ return new mob_ravenous_furbolgAI (pCreature);
+}
+
+//frenzied worgen's spells
+enum FrenziedSpells
+{
+ SPELL_MORTAL_WOUND = 48137,
+ H_SPELL_MORTAL_WOUND = 59265,
+ SPELL_ENRAGE_1 = 48138,
+ SPELL_ENRAGE_2 = 48142
};
struct TRINITY_DLL_DECL mob_frenzied_worgenAI : public ScriptedAI
@@ -289,9 +383,15 @@ struct TRINITY_DLL_DECL mob_frenzied_worgenAI : public ScriptedAI
uint32 uiEnrage1Timer = 15000;
uint32 uiEnrage2Timer = 10000;
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(m_creature, SPELL_FREEZE);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
+
+ if (pInstance)
+ if(pInstance->GetData(DATA_GORTOK_PALEHOOF_EVENT)==IN_PROGRESS)
+ {
+ Creature *pPalehoof = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
+ if (pPalehoof && pPalehoof->isAlive())
+ CAST_AI(boss_palehoofAI, pPalehoof->AI())->Reset();
+ }
}
void UpdateAI(const uint32 diff)
@@ -349,6 +449,31 @@ struct TRINITY_DLL_DECL mob_frenzied_worgenAI : public ScriptedAI
CAST_AI(boss_palehoofAI, pPalehoof->AI())->NextPhase();
}
}
+
+ void JustReachedHome()
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ DoCast(m_creature, SPELL_FREEZE);
+ }
+};
+
+CreatureAI* GetAI_mob_frenzied_worgen(Creature* pCreature)
+{
+ return new mob_frenzied_worgenAI (pCreature);
+}
+
+//ferocious rhino's spells
+enum FerociousSpells
+{
+ SPELL_GORE = 48130,
+ H_SPELL_GORE = 59264,
+ SPELL_GRIEVOUS_WOUND = 48105,
+ H_SPELL_GRIEVOUS_WOUND = 59263,
+ SPELL_STOMP = 48131
};
struct TRINITY_DLL_DECL mob_ferocious_rhinoAI : public ScriptedAI
@@ -370,9 +495,15 @@ struct TRINITY_DLL_DECL mob_ferocious_rhinoAI : public ScriptedAI
uiGoreTimer = 15000;
uiGrievousWoundTimer = 20000;
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(m_creature, SPELL_FREEZE);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
+
+ if (pInstance)
+ if(pInstance->GetData(DATA_GORTOK_PALEHOOF_EVENT)==IN_PROGRESS)
+ {
+ Creature *pPalehoof = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
+ if (pPalehoof && pPalehoof->isAlive())
+ CAST_AI(boss_palehoofAI, pPalehoof->AI())->Reset();
+ }
}
void UpdateAI(const uint32 diff)
@@ -429,6 +560,36 @@ struct TRINITY_DLL_DECL mob_ferocious_rhinoAI : public ScriptedAI
CAST_AI(boss_palehoofAI, pPalehoof->AI())->NextPhase();
}
}
+
+ void JustReachedHome()
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ DoCast(m_creature, SPELL_FREEZE);
+ }
+};
+
+CreatureAI* GetAI_mob_ferocious_rhino(Creature* pCreature)
+{
+ return new mob_ferocious_rhinoAI (pCreature);
+}
+
+//massive jormungar's spells
+enum MassiveSpells
+{
+ SPELL_ACID_SPIT = 48132,
+ SPELL_ACID_SPLATTER = 48136,
+ H_SPELL_ACID_SPLATTER = 59272,
+ SPELL_POISON_BREATH = 48133,
+ H_SPELL_POISON_BREATH = 59271
+};
+
+enum MassiveAdds
+{
+ CREATURE_JORMUNGAR_WORM = 27228
};
struct TRINITY_DLL_DECL mob_massive_jormungarAI : public ScriptedAI
@@ -450,9 +611,15 @@ struct TRINITY_DLL_DECL mob_massive_jormungarAI : public ScriptedAI
uiAcidSplatterTimer = 12000;
uiPoisonBreathTimer = 10000;
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(m_creature, SPELL_FREEZE);
+ m_creature->GetMotionMaster()->MoveTargetedHome();
+
+ if (pInstance)
+ if(pInstance->GetData(DATA_GORTOK_PALEHOOF_EVENT) == IN_PROGRESS)
+ {
+ Creature *pPalehoof = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
+ if (pPalehoof && pPalehoof->isAlive())
+ CAST_AI(boss_palehoofAI, pPalehoof->AI())->Reset();
+ }
}
void UpdateAI(const uint32 diff)
@@ -510,8 +677,105 @@ struct TRINITY_DLL_DECL mob_massive_jormungarAI : public ScriptedAI
CAST_AI(boss_palehoofAI,pPalehoof->AI())->NextPhase();
}
}
+
+ void JustReachedHome()
+ {
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ m_creature->SetStandState(UNIT_STAND_STATE_STAND);
+ DoCast(m_creature, SPELL_FREEZE);
+ }
+};
+
+CreatureAI* GetAI_mob_massive_jormungar(Creature* pCreature)
+{
+ return new mob_massive_jormungarAI (pCreature);
+}
+
+struct TRINITY_DLL_DECL mob_palehoof_orbAI : public ScriptedAI
+{
+ mob_palehoof_orbAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ ScriptedInstance *pInstance;
+ uint32 SummonTimer;
+ Phase currentPhase;
+
+ void Reset()
+ {
+ currentPhase=PHASE_NONE;
+ SummonTimer=5000;
+ m_creature->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
+ m_creature->RemoveAurasDueToSpell(SPELL_ORB_VISUAL);
+ m_creature->SetSpeed(MOVE_FLIGHT , 0.5f);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if(currentPhase==PHASE_NONE)
+ return;
+
+ if(SummonTimer<=diff)
+ {
+ if(currentPhase<5&&currentPhase>=0)
+ {
+ Creature *pNext;
+ switch(currentPhase)
+ {
+ case PHASE_FRENZIED_WORGEN: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FRENZIED_WORGEN) : 0); break;
+ case PHASE_RAVENOUS_FURLBORG: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_RAVENOUS_FURBOLG) : 0); break;
+ case PHASE_MASSIVE_JORMUNGAR: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_MASSIVE_JORMUNGAR) : 0); break;
+ case PHASE_FEROCIOUS_RHINO: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FEROCIOUS_RHINO) : 0); break;
+ case PHASE_GORTOK_PALEHOOF: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0); break;
+ }
+
+ if (pNext)
+ {
+ pNext->RemoveAurasDueToSpell(SPELL_FREEZE);
+ pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
+ pNext->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ ((Unit*)pNext)->SetStandState(UNIT_STAND_STATE_STAND);
+ pNext->SetInCombatWithZone();
+ pNext->Attack(pNext->SelectNearestTarget(100),true);
+
+ }
+ currentPhase=PHASE_NONE;
+ }
+ } else SummonTimer-=diff;
+ }
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if (type != POINT_MOTION_TYPE)
+ return;
+ if(id<0&&id>4)
+ return;
+ Creature *pNext;
+ switch(id)
+ {
+ case PHASE_FRENZIED_WORGEN: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FRENZIED_WORGEN) : 0); break;
+ case PHASE_RAVENOUS_FURLBORG: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_RAVENOUS_FURBOLG) : 0); break;
+ case PHASE_MASSIVE_JORMUNGAR: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_MASSIVE_JORMUNGAR) : 0); break;
+ case PHASE_FEROCIOUS_RHINO: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_MOB_FEROCIOUS_RHINO) : 0); break;
+ case PHASE_GORTOK_PALEHOOF: pNext = Unit::GetCreature((*m_creature), pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0); break;
+ }
+ DoCast(pNext,SPELL_ORB_CHANNEL,false);
+ currentPhase=(Phase)id;
+ SummonTimer=5000;
+ }
};
+CreatureAI* GetAI_mob_palehoof_orb(Creature* pCreature)
+{
+ return new mob_palehoof_orbAI (pCreature);
+}
+
bool GOHello_palehoof_sphere(Player *pPlayer, GameObject *pGO)
{
ScriptedInstance *pInstance = pGO->GetInstanceData();
@@ -528,30 +792,7 @@ bool GOHello_palehoof_sphere(Player *pPlayer, GameObject *pGO)
return true;
}
-CreatureAI* GetAI_boss_palehoof(Creature* pCreature)
-{
- return new boss_palehoofAI (pCreature);
-}
-CreatureAI* GetAI_mob_ravenous_furbolg(Creature* pCreature)
-{
- return new mob_ravenous_furbolgAI (pCreature);
-}
-
-CreatureAI* GetAI_mob_frenzied_worgen(Creature* pCreature)
-{
- return new mob_frenzied_worgenAI (pCreature);
-}
-
-CreatureAI* GetAI_mob_ferocious_rhino(Creature* pCreature)
-{
- return new mob_ferocious_rhinoAI (pCreature);
-}
-
-CreatureAI* GetAI_mob_massive_jormungar(Creature* pCreature)
-{
- return new mob_massive_jormungarAI (pCreature);
-}
void AddSC_boss_palehoof()
{
@@ -581,6 +822,11 @@ void AddSC_boss_palehoof()
newscript->Name = "mob_massive_jormungar";
newscript->GetAI = &GetAI_mob_massive_jormungar;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name="mob_palehoof_orb";
+ newscript->GetAI = &GetAI_mob_palehoof_orb;
+ newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "go_palehoof_sphere";
diff --git a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/def_pinnacle.h b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/def_pinnacle.h
index b446b441c17..550e9c28694 100644
--- a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/def_pinnacle.h
+++ b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/def_pinnacle.h
@@ -1,21 +1,26 @@
#ifndef DEF_PINNACLE_H
#define DEF_PINNACLE_H
-#define DATA_SVALA 1
-#define DATA_SVALA_SORROWGRAVE 2
-#define DATA_GORTOK_PALEHOOF 3
-#define DATA_SKADI_THE_RUTHLESS 4
-#define DATA_KING_YMIRON 5
+enum Data
+{
+ DATA_SVALA_SORROWGRAVE_EVENT,
+ DATA_GORTOK_PALEHOOF_EVENT,
+ DATA_SKADI_THE_RUTHLESS_EVENT,
+ DATA_KING_YMIRON_EVENT
+};
+enum Data64
+{
+ DATA_SVALA,
+ DATA_SVALA_SORROWGRAVE,
+ DATA_GORTOK_PALEHOOF,
+ DATA_SKADI_THE_RUTHLESS,
+ DATA_KING_YMIRON,
+ DATA_MOB_FRENZIED_WORGEN,
+ DATA_MOB_RAVENOUS_FURBOLG,
+ DATA_MOB_MASSIVE_JORMUNGAR,
+ DATA_MOB_FEROCIOUS_RHINO,
+ DATA_MOB_ORB,
+ DATA_GORTOK_PALEHOOF_SPHERE
+};
-#define DATA_SVALA_SORROWGRAVE_EVENT 6
-#define DATA_GORTOK_PALEHOOF_EVENT 7
-#define DATA_SKADI_THE_RUTHLESS_EVENT 8
-#define DATA_KING_YMIRON_EVENT 9
-
-#define DATA_MOB_FRENZIED_WORGEN 10
-#define DATA_MOB_RAVENOUS_FURBOLG 11
-#define DATA_MOB_MASSIVE_JORMUNGAR 12
-#define DATA_MOB_FEROCIOUS_RHINO 13
-
-#define DATA_GORTOK_PALEHOOF_SPHERE 14
#endif
diff --git a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
index 23c530f2432..b06fa524b65 100644
--- a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
+++ b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
@@ -31,6 +31,7 @@ struct TRINITY_DLL_DECL instance_pinnacle : public ScriptedInstance
uint64 uiRavenousFurbolg;
uint64 uiFerociousRhino;
uint64 uiMassiveJormungar;
+ uint64 uiPalehoofOrb;
uint64 uiSvala;
@@ -62,9 +63,10 @@ struct TRINITY_DLL_DECL instance_pinnacle : public ScriptedInstance
case 26861: uiKingYmiron = pCreature->GetGUID(); break;
case 26683: uiFrenziedWorgen = pCreature->GetGUID(); break;
case 26684: uiRavenousFurbolg = pCreature->GetGUID(); break;
- case 26685: uiFerociousRhino = pCreature->GetGUID(); break;
- case 26686: uiMassiveJormungar = pCreature->GetGUID(); break;
+ case 26685: uiMassiveJormungar = pCreature->GetGUID(); break;
+ case 26686: uiFerociousRhino = pCreature->GetGUID(); break;
case 29281: uiSvala = pCreature->GetGUID(); break;
+ case 26688: uiPalehoofOrb = pCreature->GetGUID(); break;
}
}
@@ -141,6 +143,7 @@ struct TRINITY_DLL_DECL instance_pinnacle : public ScriptedInstance
case DATA_MOB_RAVENOUS_FURBOLG: return uiRavenousFurbolg;
case DATA_MOB_MASSIVE_JORMUNGAR: return uiMassiveJormungar;
case DATA_MOB_FEROCIOUS_RHINO: return uiFerociousRhino;
+ case DATA_MOB_ORB: return uiPalehoofOrb;
case DATA_SVALA: return uiSvala;
case DATA_GORTOK_PALEHOOF_SPHERE: return uiGortokPalehoofSphere;
}