Utgarde Pinnacle: Boss Palehoof script completion, by Tommassino.
Code cleanup on Utgarde Pinnacle scripts --HG-- branch : trunk
This commit is contained in:
@@ -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;
|
||||
|
||||
+385
-139
@@ -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&¤tPhase>=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";
|
||||
|
||||
+21
-16
@@ -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
|
||||
|
||||
+5
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user