diff options
Diffstat (limited to 'src')
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&¤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"; 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; } |