Utgarde Pinnacle: Boss Palehoof script completion, by Tommassino.

Code cleanup on Utgarde Pinnacle scripts

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-10-18 03:01:13 +02:00
parent 3a016c82b3
commit 5dc0490fd9
4 changed files with 415 additions and 160 deletions
+4 -3
View File
@@ -1186,8 +1186,9 @@ UPDATE `creature_template` SET `ScriptName`='boss_skadi' WHERE `entry`=26693;
UPDATE `creature_template` SET `ScriptName`='boss_ymiron' WHERE `entry`=26861;
UPDATE `creature_template` SET `ScriptName`='mob_frenzied_worgen' WHERE `entry`=26683;
UPDATE `creature_template` SET `ScriptName`='mob_ravenous_furbolg' WHERE `entry`=26684;
UPDATE `creature_template` SET `ScriptName`='mob_ferocious_rhino' WHERE `entry`=26685;
UPDATE `creature_template` SET `ScriptName`='mob_massive_jormungar' WHERE `entry`=26686;
UPDATE `creature_template` SET `ScriptName`='mob_massive_jormungar' WHERE `entry`=26685;
UPDATE `creature_template` SET `ScriptName`='mob_ferocious_rhino' WHERE `entry`=26686;
UPDATE `creature_template` SET `ScriptName`='mob_palehoof_orb' WHERE `entry`=26688;
UPDATE `instance_template` SET `script`='instance_utgarde_pinnacle' WHERE `map`=575;
UPDATE `gameobject_template` SET `ScriptName`='go_palehoof_sphere'WHERE `entry`=188593;
@@ -1205,7 +1206,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_lavanthor' WHERE `entry`=29312
UPDATE `creature_template` SET `ScriptName`='boss_ichoron' WHERE `entry`=29313;
UPDATE `creature_template` SET `ScriptName`='boss_zuramat' WHERE `entry`=29314;
UPDATE `creature_template` SET `ScriptName`='boss_erekem' WHERE `entry`=29315;
UPDATE `creature_template` SET `ScriptName`='mob_erekem_guard' WHERE `entry`=29395;
UPDATE `creature_template` SET `ScriptName`='mob_erekem_guard' WHERE `entry`=32226;
UPDATE `creature_template` SET `ScriptName`='boss_moragg' WHERE `entry`=29316;
UPDATE `creature_template` SET `ScriptName`='boss_xevozz' WHERE `entry`=29266;
UPDATE `creature_template` SET `ScriptName`='boss_cyanigosa' WHERE `entry`=31134;
@@ -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
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
};
#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
//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
//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
#define CREATURE_JORMUNGAR_WORM 27228
//Orb spells
enum OrbSpells
{
SPELL_ORB_VISUAL = 48044,
SPELL_ORB_CHANNEL = 48048
};
//not in db
//Yell
#define SAY_AGGRO -1575000
#define SAY_SLAY_1 -1575001
#define SAY_SLAY_2 -1575002
#define SAY_DEATH -1575003
enum Yells
{
SAY_AGGRO = -1575000,
SAY_SLAY_1 = -1575001,
SAY_SLAY_2 = -1575002,
SAY_DEATH = -1575003
};
enum Creatures
{
MOB_STASIS_CONTROLLER = 26688
};
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";
@@ -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
@@ -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;
}