Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---
- sql/updates/world/2013_10_11_R_00_world_misc.sql | 19 +
- .../UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp | 24 +-
- .../UtgardeKeep/UtgardePinnacle/boss_skadi.cpp | 943 ++++++++++-----------
- .../UtgardeKeep/UtgardePinnacle/boss_svala.cpp | 19 +-
- .../UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp | 16 +-
- .../UtgardePinnacle/instance_utgarde_pinnacle.cpp | 492 +++++------
- .../UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h | 53 +-
- 7 files changed, 748 insertions(+), 818 deletions(-)
- create mode 100644 sql/updates/world/2013_10_11_R_00_world_misc.sql
- rewrite src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp (73%)
- rewrite src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp (81%)
- diff --git a/sql/updates/world/2013_10_11_R_00_world_misc.sql b/sql/updates/world/2013_10_11_R_00_world_misc.sql
- new file mode 100644
- index 0000000..6f67dac
- --- /dev/null
- +++ b/sql/updates/world/2013_10_11_R_00_world_misc.sql
- @@ -0,0 +1,19 @@
- +DELETE FROM `creature` WHERE `guid`=126052;
- +DELETE FROM `linked_respawn` WHERE `guid`=126052;
- +DELETE FROM `creature_addon` WHERE `guid`=126052;
- +
- +UPDATE `creature_template` SET `ScriptName` = 'npc_grauf' WHERE `entry` = 26893;
- +
- +DELETE FROM `creature_text` WHERE `entry`=26693 AND `groupid`=2 AND `type`=41;
- +DELETE FROM `creature_text` WHERE `entry`=26693 AND `groupid`=4 AND `type`=41;
- +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
- +(26893, 2, 0, '%s in within range of the harpoon launchers!', 41, 0, 100, 0, 0, 0, 'Grauf EMOTE_RANGE');
- +
- +DELETE FROM `spell_target_position` WHERE `id` = 61790;
- +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
- +('61790', '0', '575', '480.84', '-511.95', '104.72', '2.71');
- +
- +DELETE FROM `spelldifficulty_dbc` WHERE `spellid0` = 50228;
- +INSERT INTO `spelldifficulty_dbc` (`id`, `spellid0`, `spellid1`, `spellid2`, `spellid3`) VALUES
- +('50228', '50228', '59322', '0', '0');
- +
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
- index b70bda7..77cb648 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
- @@ -93,9 +93,9 @@ public:
- return new boss_palehoofAI(creature);
- }
- - struct boss_palehoofAI : public ScriptedAI
- + struct boss_palehoofAI : public BossAI
- {
- - boss_palehoofAI(Creature* creature) : ScriptedAI(creature)
- + boss_palehoofAI(Creature* creature) : BossAI(creature, DATA_GORTOK_PALEHOOF)
- {
- instance = creature->GetInstanceScript();
- }
- @@ -112,6 +112,7 @@ public:
- void Reset() OVERRIDE
- {
- + _Reset();
- /// There is a good reason to store them like this, we are going to shuffle the order.
- for (uint32 i = PHASE_FRENZIED_WORGEN; i < PHASE_GORTOK_PALEHOOF; ++i)
- Sequence[i] = Phase(i);
- @@ -131,8 +132,6 @@ public:
- if (instance)
- {
- - instance->SetData(DATA_GORTOK_PALEHOOF_EVENT, NOT_STARTED);
- -
- Creature* temp = Unit::GetCreature((*me), instance->GetData64(DATA_NPC_FRENZIED_WORGEN));
- if (temp && !temp->IsAlive())
- temp->Respawn();
- @@ -217,9 +216,8 @@ public:
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- + _JustDied();
- //Talk(SAY_DEATH);
- - if (instance)
- - instance->SetData(DATA_GORTOK_PALEHOOF_EVENT, DONE);
- Creature* temp = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_NPC_ORB) : 0);
- if (temp && temp->IsAlive())
- temp->DisappearAndDie();
- @@ -234,9 +232,7 @@ public:
- {
- if (currentPhase == PHASE_NONE)
- {
- - if (instance)
- - instance->SetData(DATA_GORTOK_PALEHOOF_EVENT, IN_PROGRESS);
- -
- + instance->SetBossState(DATA_GORTOK_PALEHOOF, IN_PROGRESS);
- me->SummonCreature(NPC_STASIS_CONTROLLER, moveLocs[5].x, moveLocs[5].y, moveLocs[5].z, 0, TEMPSUMMON_CORPSE_DESPAWN);
- }
- Phase move = PHASE_NONE;
- @@ -306,7 +302,7 @@ public:
- me->GetMotionMaster()->MoveTargetedHome();
- if (instance)
- - if (instance->GetData(DATA_GORTOK_PALEHOOF_EVENT) == IN_PROGRESS)
- + if (instance->GetBossState(DATA_GORTOK_PALEHOOF) == IN_PROGRESS)
- {
- Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
- if (pPalehoof && pPalehoof->IsAlive())
- @@ -419,7 +415,7 @@ public:
- me->GetMotionMaster()->MoveTargetedHome();
- if (instance)
- - if (instance->GetData(DATA_GORTOK_PALEHOOF_EVENT) == IN_PROGRESS)
- + if (instance->GetBossState(DATA_GORTOK_PALEHOOF) == IN_PROGRESS)
- {
- Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
- if (pPalehoof && pPalehoof->IsAlive())
- @@ -470,7 +466,7 @@ public:
- DoStartMovement(who);
- }
- if (instance)
- - instance->SetData(DATA_GORTOK_PALEHOOF_EVENT, IN_PROGRESS);
- + instance->SetBossState(DATA_GORTOK_PALEHOOF, IN_PROGRESS);
- }
- void JustDied(Unit* /*killer*/) OVERRIDE
- @@ -535,7 +531,7 @@ public:
- me->GetMotionMaster()->MoveTargetedHome();
- if (instance)
- - if (instance->GetData(DATA_GORTOK_PALEHOOF_EVENT) == IN_PROGRESS)
- + if (instance->GetBossState(DATA_GORTOK_PALEHOOF) == IN_PROGRESS)
- {
- Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
- if (pPalehoof && pPalehoof->IsAlive())
- @@ -655,7 +651,7 @@ public:
- me->GetMotionMaster()->MoveTargetedHome();
- if (instance)
- - if (instance->GetData(DATA_GORTOK_PALEHOOF_EVENT) == IN_PROGRESS)
- + if (instance->GetBossState(DATA_GORTOK_PALEHOOF) == IN_PROGRESS)
- {
- Creature* pPalehoof = Unit::GetCreature((*me), instance ? instance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
- if (pPalehoof && pPalehoof->IsAlive())
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
- dissimilarity index 73%
- index 08670af..f8c2f3b 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
- @@ -1,490 +1,453 @@
- -/*
- - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- - *
- - * This program is free software; you can redistribute it and/or modify it
- - * under the terms of the GNU General Public License as published by the
- - * Free Software Foundation; either version 2 of the License, or (at your
- - * option) any later version.
- - *
- - * This program is distributed in the hope that it will be useful, but WITHOUT
- - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- - * more details.
- - *
- - * You should have received a copy of the GNU General Public License along
- - * with this program. If not, see <http://www.gnu.org/licenses/>.
- - */
- -
- -/* Script Data Start
- -SDName: Boss_Skadi
- -SDAuthor: LordVanMartin, JohnHoliver
- -SD%Complete: 90%
- -SDComment: <Known Bugs>
- - After Unmount() he appears to still be flying even with SetFlying(false)
- - </Known Bugs>
- -SDCategory: Utgarde Pinnacle
- -Script Data End */
- -
- -#include "ScriptMgr.h"
- -#include "ScriptedCreature.h"
- -#include "utgarde_pinnacle.h"
- -#include "Player.h"
- -#include "SpellInfo.h"
- -
- -enum Yells
- -{
- - SAY_AGGRO = 0,
- - SAY_KILL = 1,
- - EMOTE_RANGE = 2,
- - SAY_DEATH = 3,
- - SAY_DRAKE_DEATH = 4,
- - EMOTE_BREATH = 5,
- - SAY_DRAKE_BREATH = 6
- -};
- -
- -static Position SpawnLoc = {468.931f, -513.555f, 104.723f, 0};
- -static Position Location[]=
- -{
- - // Boss
- - {341.740997f, -516.955017f, 104.66900f, 0}, // 0
- - {293.299f, -505.95f, 142.03f, 0}, // 1
- - {301.664f, -535.164f, 146.097f, 0}, // 2
- - {521.031006f, -544.667847f, 128.80064f, 0}, // 3
- - {477.311981f, -509.296814f, 104.72308f, 0}, // 4
- - {341.740997f, -516.955017f, 104.66900f, 0}, // 5
- - {341.740997f, -516.955017f, 104.66900f, 0}, // 6
- - {341.740997f, -516.955017f, 104.66900f, 0}, // 7
- - // Triggers Left
- - {469.661f, -484.546f, 104.712f, 0}, // 8
- - {483.315f, -485.028f, 104.718f, 0}, // 9
- - {476.87f, -487.994f, 104.735f, 0}, //10
- - {477.512f, -497.772f, 104.728f, 0}, //11
- - {486.287f, -500.759f, 104.722f, 0}, //12
- - {480.1f, -503.895f, 104.722f, 0}, //13
- - {472.391f, -505.103f, 104.723f, 0}, //14
- - {478.885f, -510.803f, 104.723f, 0}, //15
- - {489.529f, -508.615f, 104.723f, 0}, //16
- - {484.272f, -508.589f, 104.723f, 0}, //17
- - {465.328f, -506.495f, 104.427f, 0}, //18
- - {456.885f, -508.104f, 104.447f, 0}, //19
- - {450.177f, -507.989f, 105.247f, 0}, //20
- - {442.273f, -508.029f, 104.813f, 0}, //21
- - {434.225f, -508.19f, 104.787f, 0}, //22
- - {423.902f, -508.525f, 104.274f, 0}, //23
- - {414.551f, -508.645f, 105.136f, 0}, //24
- - {405.787f, -508.755f, 104.988f, 0}, //25
- - {398.812f, -507.224f, 104.82f, 0}, //26
- - {389.702f, -506.846f, 104.729f, 0}, //27
- - {381.856f, -506.76f, 104.756f, 0}, //28
- - {372.881f, -507.254f, 104.779f, 0}, //29
- - {364.978f, -508.182f, 104.673f, 0}, //30
- - {357.633f, -508.075f, 104.647f, 0}, //31
- - {350.008f, -506.826f, 104.588f, 0}, //32
- - {341.69f, -506.77f, 104.499f, 0}, //33
- - {335.31f, -505.745f, 105.18f, 0}, //34
- - {471.178f, -510.74f, 104.723f, 0}, //35
- - {461.759f, -510.365f, 104.199f, 0}, //36
- - {424.07287f, -510.082916f, 104.711082f, 0}, //37
- - // Triggers Right
- - {489.46f, -513.297f, 105.413f, 0}, //38
- - {485.706f, -517.175f, 104.724f, 0}, //39
- - {480.98f, -519.313f, 104.724f, 0}, //40
- - {475.05f, -520.52f, 104.724f, 0}, //41
- - {482.97f, -512.099f, 104.724f, 0}, //42
- - {477.082f, -514.172f, 104.724f, 0}, //43
- - {468.991f, -516.691f, 104.724f, 0}, //44
- - {461.722f, -517.063f, 104.627f, 0}, //45
- - {455.88f, -517.681f, 104.707f, 0}, //46
- - {450.499f, -519.099f, 104.701f, 0}, //47
- - {444.889f, -518.963f, 104.82f, 0}, //48
- - {440.181f, -518.893f, 104.861f, 0}, //49
- - {434.393f, -518.758f, 104.891f, 0}, //50
- - {429.328f, -518.583f, 104.904f, 0}, //51
- - {423.844f, -518.394f, 105.004f, 0}, //52
- - {418.707f, -518.266f, 105.135f, 0}, //53
- - {413.377f, -518.085f, 105.153f, 0}, //54
- - {407.277f, -517.844f, 104.893f, 0}, //55
- - {401.082f, -517.443f, 104.723f, 0}, //56
- - {394.933f, -514.64f, 104.724f, 0}, //57
- - {388.917f, -514.688f, 104.734f, 0}, //58
- - {383.814f, -515.834f, 104.73f, 0}, //59
- - {377.887f, -518.653f, 104.777f, 0}, //60
- - {371.376f, -518.289f, 104.781f, 0}, //61
- - {365.669f, -517.822f, 104.758f, 0}, //62
- - {359.572f, -517.314f, 104.706f, 0}, //63
- - {353.632f, -517.146f, 104.647f, 0}, //64
- - {347.998f, -517.038f, 104.538f, 0}, //65
- - {341.803f, -516.98f, 104.584f, 0}, //66
- - {335.879f, -516.674f, 104.628f, 0}, //67
- - {329.871f, -515.92f, 104.711f, 0}, //68
- - // Breach Zone
- - {485.4577f, -511.2515f, 115.3011f, 0}, //69
- - {435.1892f, -514.5232f, 118.6719f, 0}, //70
- - {413.9327f, -540.9407f, 138.2614f, 0}, //71
- -};
- -
- -enum CombatPhase
- -{
- - FLYING,
- - SKADI
- -};
- -
- -enum Spells
- -{
- - // Skadi Spells
- - SPELL_CRUSH = 50234,
- - SPELL_POISONED_SPEAR = 50225, //isn't being casted =/
- - SPELL_WHIRLWIND = 50228, //random target, but not the tank approx. every 20s
- - SPELL_RAPID_FIRE = 56570,
- - SPELL_HARPOON_DAMAGE = 56578,
- - SPELL_FREEZING_CLOUD = 47579,
- -};
- -
- -enum Creatures
- -{
- - NPC_YMIRJAR_WARRIOR = 26690,
- - NPC_YMIRJAR_WITCH_DOCTOR = 26691,
- - NPC_YMIRJAR_HARPOONER = 26692,
- - NPC_GRAUF = 26893,
- - NPC_TRIGGER = 28351,
- - DATA_MOUNT = 27043,
- -};
- -
- -enum Achievments
- -{
- - ACHIEV_TIMED_START_EVENT = 17726,
- -};
- -
- -class boss_skadi : public CreatureScript
- -{
- -public:
- - boss_skadi() : CreatureScript("boss_skadi") { }
- -
- - CreatureAI* GetAI(Creature* creature) const OVERRIDE
- - {
- - return new boss_skadiAI(creature);
- - }
- -
- - struct boss_skadiAI : public ScriptedAI
- - {
- - boss_skadiAI(Creature* creature) : ScriptedAI(creature), Summons(me)
- - {
- - instance = creature->GetInstanceScript();
- - m_uiGraufGUID = 0;
- - }
- -
- - InstanceScript* instance;
- - SummonList Summons;
- - uint64 m_uiGraufGUID;
- - std::vector<uint64> triggersGUID;
- -
- - uint32 m_uiCrushTimer;
- - uint32 m_uiPoisonedSpearTimer;
- - uint32 m_uiWhirlwindTimer;
- - uint32 m_uiWaypointId;
- - uint32 m_uiMovementTimer;
- - uint32 m_uiMountTimer;
- - uint32 m_uiSummonTimer;
- - uint8 m_uiSpellHitCount;
- - bool m_bSaidEmote;
- -
- - CombatPhase Phase;
- -
- - void Reset() OVERRIDE
- - {
- - triggersGUID.clear();
- -
- - m_uiCrushTimer = 8000;
- - m_uiPoisonedSpearTimer = 10000;
- - m_uiWhirlwindTimer = 20000;
- - m_uiMountTimer = 3000;
- - m_uiWaypointId = 0;
- - m_bSaidEmote = false;
- - m_uiSpellHitCount = 0;
- -
- - Phase = SKADI;
- -
- - Summons.DespawnAll();
- - me->SetSpeed(MOVE_FLIGHT, 3.0f);
- - if ((Unit::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted())
- - me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
- - if (instance)
- - {
- - instance->SetData(DATA_SKADI_THE_RUTHLESS_EVENT, NOT_STARTED);
- - instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- - }
- - }
- -
- - void JustReachedHome() OVERRIDE
- - {
- - me->SetCanFly(false);
- - me->Dismount();
- - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- - if (!Unit::GetCreature(*me, m_uiGraufGUID))
- - me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
- - }
- -
- - void EnterCombat(Unit* /*who*/) OVERRIDE
- - {
- - Talk(SAY_AGGRO);
- -
- - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- -
- - Phase = FLYING;
- -
- - m_uiMovementTimer = 1000;
- - m_uiSummonTimer = 10000;
- - me->SetInCombatWithZone();
- - if (instance)
- - {
- - instance->SetData(DATA_SKADI_THE_RUTHLESS_EVENT, IN_PROGRESS);
- - instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- - me->GetMotionMaster()->MoveJump(Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 5.0f, 10.0f);
- - me->SetWalk(false);
- - m_uiMountTimer = 1000;
- - Summons.DespawnEntry(NPC_GRAUF);
- - }
- - }
- -
- - void JustSummoned(Creature* summoned) OVERRIDE
- - {
- - switch (summoned->GetEntry())
- - {
- - case NPC_GRAUF:
- - m_uiGraufGUID = summoned->GetGUID();
- - break;
- - case NPC_YMIRJAR_WARRIOR:
- - case NPC_YMIRJAR_WITCH_DOCTOR:
- - case NPC_YMIRJAR_HARPOONER:
- - summoned->setActive(true);
- - summoned->SetInCombatWithZone();
- - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- - summoned->AI()->AttackStart(target);
- - break;
- - case NPC_TRIGGER:
- - summoned->CastSpell((Unit*)NULL, SPELL_FREEZING_CLOUD, true);
- - summoned->DespawnOrUnsummon(10*IN_MILLISECONDS);
- - break;
- - }
- - Summons.Summon(summoned);
- - }
- -
- - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
- - {
- - if (summoned->GetEntry() == NPC_GRAUF)
- - m_uiGraufGUID = 0;
- - Summons.Despawn(summoned);
- - }
- -
- - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
- - {
- - if (spell->Id == SPELL_HARPOON_DAMAGE)
- - {
- - m_uiSpellHitCount++;
- - if (m_uiSpellHitCount >= 3)
- - {
- - Phase = SKADI;
- - me->SetCanFly(false);
- - me->Dismount();
- - if (Creature* pGrauf = me->SummonCreature(NPC_GRAUF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3*IN_MILLISECONDS))
- - {
- - pGrauf->GetMotionMaster()->MoveFall();
- - pGrauf->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
- - }
- - me->GetMotionMaster()->MoveJump(Location[4].GetPositionX(), Location[4].GetPositionY(), Location[4].GetPositionZ(), 5.0f, 10.0f);
- - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- - Talk(SAY_DRAKE_DEATH);
- - m_uiCrushTimer = 8000;
- - m_uiPoisonedSpearTimer = 10000;
- - m_uiWhirlwindTimer = 20000;
- - me->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM));
- - }
- - }
- - }
- -
- - void UpdateAI(uint32 diff) OVERRIDE
- - {
- - switch (Phase)
- - {
- - case FLYING:
- - if (!UpdateVictim())
- - return;
- -
- - if (me->GetPositionX() >= 519)
- - {
- - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- - if (!m_bSaidEmote)
- - {
- - Talk(EMOTE_RANGE);
- - m_bSaidEmote = true;
- - }
- - }
- - else
- - {
- - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- - m_bSaidEmote = false;
- - }
- -
- - if (m_uiMountTimer && m_uiMountTimer <= diff)
- - {
- - me->Mount(DATA_MOUNT);
- - me->SetCanFly(true);
- - m_uiMountTimer = 0;
- - } else m_uiMountTimer -= diff;
- -
- - if (m_uiSummonTimer <= diff)
- - {
- - SpawnMobs();
- - m_uiSummonTimer = 25000;
- - } else m_uiSummonTimer -= diff;
- -
- - if (m_uiMovementTimer <= diff)
- - {
- - switch (m_uiWaypointId)
- - {
- - case 0:
- - me->GetMotionMaster()->MovePoint(0, Location[1].GetPositionX(), Location[1].GetPositionY(), Location[1].GetPositionZ());
- - m_uiMovementTimer = 5000;
- - break;
- - case 1:
- - me->GetMotionMaster()->MovePoint(0, Location[2].GetPositionX(), Location[2].GetPositionY(), Location[2].GetPositionZ());
- - m_uiMovementTimer = 2000;
- - break;
- - case 2:
- - me->GetMotionMaster()->MovePoint(0, Location[3].GetPositionX(), Location[3].GetPositionY(), Location[3].GetPositionZ());
- - m_uiMovementTimer = 15000;
- - break;
- - case 3:
- - me->GetMotionMaster()->MovePoint(0, Location[69].GetPositionX(), Location[69].GetPositionY(), Location[69].GetPositionZ());
- - Talk(SAY_DRAKE_BREATH);
- - Talk(EMOTE_BREATH);
- - m_uiMovementTimer = 2500;
- - break;
- - case 4:
- - me->GetMotionMaster()->MovePoint(0, Location[70].GetPositionX(), Location[70].GetPositionY(), Location[70].GetPositionZ());
- - m_uiMovementTimer = 2000;
- - SpawnTrigger();
- - break;
- - case 5:
- - me->GetMotionMaster()->MovePoint(0, Location[71].GetPositionX(), Location[71].GetPositionY(), Location[71].GetPositionZ());
- - m_uiMovementTimer = 3000;
- - break;
- - case 6:
- - me->GetMotionMaster()->MovePoint(0, Location[3].GetPositionX(), Location[3].GetPositionY(), Location[3].GetPositionZ());
- - m_uiWaypointId = 2;
- - m_uiMovementTimer = 15000;
- - break;
- - }
- - m_uiWaypointId++;
- - } else m_uiMovementTimer -= diff;
- - break;
- - case SKADI:
- - //Return since we have no target
- - if (!UpdateVictim())
- - return;
- -
- - if (m_uiCrushTimer <= diff)
- - {
- - DoCastVictim(SPELL_CRUSH);
- - m_uiCrushTimer = 8000;
- - } else m_uiCrushTimer -= diff;
- -
- - if (m_uiPoisonedSpearTimer <= diff)
- - {
- - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- - DoCast(target, SPELL_POISONED_SPEAR);
- - m_uiPoisonedSpearTimer = 10000;
- - } else m_uiPoisonedSpearTimer -= diff;
- -
- - if (m_uiWhirlwindTimer <= diff)
- - {
- - DoCastAOE(SPELL_WHIRLWIND);
- - m_uiWhirlwindTimer = 20000;
- - } else m_uiWhirlwindTimer -= diff;
- -
- - DoMeleeAttackIfReady();
- - break;
- - }
- - }
- -
- - void JustDied(Unit* /*killer*/) OVERRIDE
- - {
- - Talk(SAY_DEATH);
- - Summons.DespawnAll();
- - if (instance)
- - instance->SetData(DATA_SKADI_THE_RUTHLESS_EVENT, DONE);
- - }
- -
- - void KilledUnit(Unit* /*victim*/) OVERRIDE
- - {
- - Talk(SAY_KILL);
- - }
- -
- - void SpawnMobs()
- - {
- - for (uint8 i = 0; i < DUNGEON_MODE(5, 6); ++i)
- - {
- - switch (urand(0, 2))
- - {
- - case 0:
- - me->SummonCreature(NPC_YMIRJAR_WARRIOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- - break;
- -
- - case 1:
- - me->SummonCreature(NPC_YMIRJAR_WITCH_DOCTOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- - break;
- -
- - case 2:
- - me->SummonCreature(NPC_YMIRJAR_HARPOONER, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- - break;
- - }
- - }
- - }
- -
- - void SpawnTrigger()
- - {
- - uint8 iStart = 0, iEnd = 0;
- - switch (urand(0, 1))
- - {
- - case 0:
- - iStart = 8;
- - iEnd = 37;
- - break;
- - case 1:
- - iStart = 38;
- - iEnd = 68;
- - break;
- - default:
- - break;
- - }
- - for (uint32 i = iStart; i < iEnd; ++i)
- - me->SummonCreature(NPC_TRIGGER, Location[i]);
- - }
- - };
- -
- -};
- -
- -class go_harpoon_launcher : public GameObjectScript
- -{
- -public:
- - go_harpoon_launcher() : GameObjectScript("go_harpoon_launcher") { }
- -
- - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
- - {
- - InstanceScript* instance = go->GetInstanceScript();
- - if (!instance)
- - return false;
- -
- - if (Creature* pSkadi = Unit::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
- - player->CastSpell(pSkadi, SPELL_RAPID_FIRE, true);
- -
- - return false;
- - }
- -
- -};
- -
- -void AddSC_boss_skadi()
- -{
- - new boss_skadi();
- - new go_harpoon_launcher();
- -}
- +/*
- +* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- +*
- +* This program is free software; you can redistribute it and/or modify it
- +* under the terms of the GNU General Public License as published by the
- +* Free Software Foundation; either version 2 of the License, or (at your
- +* option) any later version.
- +*
- +* This program is distributed in the hope that it will be useful, but WITHOUT
- +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- +* more details.
- +*
- +* You should have received a copy of the GNU General Public License along
- +* with this program. If not, see <http://www.gnu.org/licenses/>.
- +*/
- +
- +#include "ScriptMgr.h"
- +#include "ScriptedCreature.h"
- +#include "utgarde_pinnacle.h"
- +#include "Player.h"
- +#include "SpellInfo.h"
- +
- +enum Yells
- +{
- + SAY_AGGRO = 0,
- + SAY_KILL = 1,
- + EMOTE_RANGE = 2,
- + SAY_DEATH = 3,
- + SAY_DRAKE_DEATH = 5,
- + //EMOTE_BREATH = 5,
- + SAY_DRAKE_BREATH = 6
- +};
- +
- +static Position SpawnLoc = {468.931f, -513.555f, 104.723f, 0};
- +static Position Location[]=
- +{
- + // Boss
- + {341.740997f, -516.955017f, 104.66900f, 0}, // 0
- + {293.299f, -505.95f, 142.03f, 0}, // 1
- + {301.664f, -535.164f, 146.097f, 0}, // 2
- + {521.031006f, -544.667847f, 128.80064f, 0}, // 3
- + {477.311981f, -509.296814f, 104.72308f, 0}, // 4
- + {341.740997f, -516.955017f, 104.66900f, 0}, // 5
- + {341.740997f, -516.955017f, 104.66900f, 0}, // 6
- + {341.740997f, -516.955017f, 104.66900f, 0}, // 7
- + // Breach Zone
- + {485.4577f, -511.2515f, 115.3011f, 0}, //8
- + {435.1892f, -514.5232f, 118.6719f, 0}, //9
- + {413.9327f, -540.9407f, 138.2614f, 0}, //10
- +};
- +
- +enum Phases
- +{
- + PHASE_INTRO = 1,
- + PHASE_FLYING = 2,
- + PHASE_SHOOTABLE = 3,
- + PHASE_GROUND = 4
- +};
- +
- +enum Events
- +{
- + EVENT_CRUSH = 1,
- + EVENT_POISONED_SPEAR = 2,
- + EVENT_WHIRLWIND = 3,
- + EVENT_MOUNT = 4,
- + EVENT_MOVE = 5,
- + EVENT_STOP_CLOUD = 6,
- + EVENT_SUMMON = 7
- +};
- +
- +enum Spells
- +{
- + // PHASE_INTRO
- + SPELL_RIDE_VEHICLE = 61791,
- + // PHASE_FLYING
- + SPELL_HARPOON_DAMAGE = 48642,
- + SPELL_FREEZING_CLOUD = 47579,
- + SPELL_FREEZING_CLOUD_L = 47590,
- + SPELL_FREEZING_CLOUD_R = 47592,
- + SPELL_SKADI_TELEPORT = 61790,
- + // PHASE_GROUND
- + SPELL_CRUSH = 50234,
- + SPELL_POISONED_SPEAR = 50225, //isn't being casted =/
- + SPELL_WHIRLWIND = 50228 //random target, but not the tank approx. every 20s
- +};
- +
- +enum Creatures
- +{
- + NPC_YMIRJAR_WARRIOR = 26690,
- + NPC_YMIRJAR_WITCH_DOCTOR = 26691,
- + NPC_YMIRJAR_HARPOONER = 26692,
- + NPC_TRIGGER = 28351
- +};
- +
- +enum Achievments
- +{
- + ACHIEV_TIMED_START_EVENT = 17726,
- +};
- +
- +class boss_skadi : public CreatureScript
- +{
- +public:
- + boss_skadi() : CreatureScript("boss_skadi") { }
- +
- + struct boss_skadiAI : public BossAI
- + {
- + boss_skadiAI(Creature* creature) : BossAI(creature, DATA_SKADI_THE_RUTHLESS), Summons(me)
- + {
- + instance = creature->GetInstanceScript();
- + m_uiGraufGUID = 0;
- + }
- +
- + InstanceScript* instance;
- + SummonList Summons;
- + uint64 m_uiGraufGUID;
- + std::vector<uint64> triggersGUID;
- +
- + void Reset() OVERRIDE
- + {
- + _Reset();
- + triggersGUID.clear();
- +
- + events.SetPhase(PHASE_INTRO);
- +
- + Summons.DespawnAll();
- + me->SetSpeed(MOVE_FLIGHT, 3.0f);
- +
- + if ((Unit::GetCreature(*me, instance->GetData64(DATA_NPC_GRAUF)) == NULL) && !me->IsMounted())
- + me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
- + if (instance)
- + instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- + }
- +
- + void JustReachedHome() OVERRIDE
- + {
- + me->Dismount();
- + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- + if (!Unit::GetCreature(*me, instance->GetData64(DATA_NPC_GRAUF)))
- + me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f);
- + }
- +
- + void EnterCombat(Unit* /*who*/) OVERRIDE
- + {
- + _EnterCombat();
- + Talk(SAY_AGGRO);
- + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- + events.SetPhase(PHASE_INTRO);
- + events.ScheduleEvent(EVENT_MOUNT, 1 * IN_MILLISECONDS);
- +
- + if (instance)
- + instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- + }
- +
- + void JustSummoned(Creature* summoned) OVERRIDE
- + {
- + switch (summoned->GetEntry())
- + {
- + case NPC_YMIRJAR_WARRIOR:
- + case NPC_YMIRJAR_WITCH_DOCTOR:
- + case NPC_YMIRJAR_HARPOONER:
- + summoned->setActive(true);
- + summoned->SetInCombatWithZone();
- + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- + summoned->AI()->AttackStart(target);
- + break;
- + }
- + Summons.Summon(summoned);
- + }
- +
- + void SummonedCreatureDespawn(Creature* summoned) OVERRIDE
- + {
- + Summons.Despawn(summoned);
- + }
- +
- + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
- + {
- + if(spell->Id == SPELL_SKADI_TELEPORT)
- + {
- + events.SetPhase(PHASE_GROUND);
- + events.ScheduleEvent(EVENT_CRUSH, 8000, 0, PHASE_GROUND);
- + events.ScheduleEvent(EVENT_POISONED_SPEAR, 10000, 0, PHASE_GROUND);
- + events.ScheduleEvent(EVENT_WHIRLWIND, 20000, 0, PHASE_GROUND);
- + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE );
- + }
- + }
- +
- + void KilledUnit(Unit* victim) OVERRIDE
- + {
- + if(victim->GetTypeId() == TYPEID_PLAYER)
- + Talk(SAY_KILL);
- + }
- +
- + void JustDied(Unit* /*killer*/) OVERRIDE
- + {
- + Talk(SAY_DEATH);
- + _JustDied();
- + }
- +
- + void UpdateAI(uint32 diff) OVERRIDE
- + {
- + events.Update(diff);
- +
- + if((events.IsInPhase(PHASE_FLYING) || events.IsInPhase(PHASE_GROUND)) && !UpdateVictim())
- + return;
- +
- + if(events.IsInPhase(PHASE_GROUND))
- + DoMeleeAttackIfReady();
- +
- + while (uint32 eventId = events.ExecuteEvent())
- + {
- + switch (eventId)
- + {
- + case EVENT_MOUNT:
- + me->CastSpell(me->GetUnit(*me, instance->GetData64(DATA_NPC_GRAUF)), SPELL_RIDE_VEHICLE);
- + events.SetPhase(PHASE_FLYING);
- + events.ScheduleEvent(EVENT_SUMMON, 10000, 0, PHASE_FLYING);
- + break;
- + case EVENT_SUMMON:
- + SpawnMobs();
- + events.ScheduleEvent(EVENT_SUMMON, 20000, 0, PHASE_FLYING); //20000
- + break;
- + case EVENT_CRUSH:
- + DoCastVictim(SPELL_CRUSH);
- + events.ScheduleEvent(EVENT_CRUSH, 8000, 0, PHASE_GROUND);
- + break;
- + case EVENT_POISONED_SPEAR:
- + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- + DoCast(target, SPELL_POISONED_SPEAR);
- + events.ScheduleEvent(EVENT_POISONED_SPEAR, 10000, 0, PHASE_GROUND);
- + break;
- + case EVENT_WHIRLWIND:
- + DoCastAOE(SPELL_WHIRLWIND);
- + events.ScheduleEvent(EVENT_WHIRLWIND, 23000, 0, PHASE_GROUND);
- + break;
- + }
- + }
- + }
- +
- + void SpawnMobs()
- + {
- + for (uint8 i = 0; i < DUNGEON_MODE(5, 6); ++i)
- + {
- + switch (urand(0, 2))
- + {
- + case 0:
- + me->SummonCreature(NPC_YMIRJAR_WARRIOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- + break;
- + case 1:
- + me->SummonCreature(NPC_YMIRJAR_WITCH_DOCTOR, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- + break;
- + case 2:
- + me->SummonCreature(NPC_YMIRJAR_HARPOONER, SpawnLoc.GetPositionX()+rand()%5, SpawnLoc.GetPositionY()+rand()%5, SpawnLoc.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
- + break;
- + }
- + }
- + }
- + };
- + CreatureAI* GetAI(Creature* creature) const OVERRIDE
- + {
- + return new boss_skadiAI(creature);
- + }
- +};
- +
- +class npc_grauf : public CreatureScript
- +{
- +public:
- + npc_grauf() : CreatureScript("npc_grauf") { }
- +
- + struct npc_graufAI : public ScriptedAI
- + {
- + npc_graufAI(Creature* creature) : ScriptedAI(creature)
- + {
- + SetCombatMovement(false);
- + instance = me->GetInstanceScript();
- + }
- +
- + InstanceScript* instance;
- + EventMap events;
- + uint32 m_uiWaypointId;
- + std::list<Creature*> CloudTriggerList;
- + uint8 harpoonsHit;
- +
- + void Reset() OVERRIDE
- + {
- + events.SetPhase(PHASE_INTRO);
- + m_uiWaypointId = 0;
- + harpoonsHit = 0;
- + }
- +
- + void JustReachedHome() OVERRIDE
- + {
- + if(Creature* pSkadi = Unit::GetCreature(*me, DATA_SKADI_THE_RUTHLESS))
- + {
- + pSkadi->AI()->EnterEvadeMode();
- + }
- + me->SetCanFly(false);
- + }
- +
- + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE
- + {
- + if(!instance)
- + return;
- +
- + if(spell->Id == SPELL_HARPOON_DAMAGE)
- + {
- + if(me->GetHealth() <= me->GetMaxHealth() * (IsHeroic() ? 0.17f : 0.27f))
- + {
- + if(Creature* pSkadi = Unit::GetCreature(*me, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
- + {
- + me->RemoveAllAuras();
- + pSkadi->CastSpell(pSkadi, SPELL_SKADI_TELEPORT, true);
- + pSkadi->AI()->Talk(SAY_DRAKE_DEATH);
- + }
- + }
- + me->DealDamage(me, me->GetMaxHealth() * (IsHeroic() ? 0.17f : 0.25f), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, NULL, false);
- + harpoonsHit++;
- + }
- +
- + if(spell->Id == SPELL_RIDE_VEHICLE)
- + {
- + events.SetPhase(PHASE_FLYING);
- + events.ScheduleEvent(EVENT_MOVE, 1000, 0, PHASE_FLYING);
- + me->SetCanFly(true);
- + me->SetDisableGravity(true);
- + me->SetHover(true);
- + me->SetWalk(false);
- + }
- + }
- +
- + void CastFreezingCloud(bool triggerLeft) {
- + me->GetCreatureListWithEntryInGrid(CloudTriggerList, NPC_TRIGGER, 200.0f);
- + if(!CloudTriggerList.empty())
- + {
- + for (std::list<Creature*>::const_iterator itr = CloudTriggerList.begin(); itr != CloudTriggerList.end(); ++itr)
- + {
- + if (Creature* trigger = *itr)
- + {
- + if (trigger->GetPositionY() > -511.0f && triggerLeft == true)
- + trigger->CastSpell(trigger, SPELL_FREEZING_CLOUD, true);
- + else if (trigger->GetPositionY() < -511.0f && triggerLeft == false)
- + trigger->CastSpell(trigger, SPELL_FREEZING_CLOUD, true);
- + }
- + }
- + }
- + }
- +
- + void UpdateAI(uint32 diff) OVERRIDE
- + {
- + events.Update(diff);
- +
- + //if (me->GetPositionX() >= 519)
- + //{
- + // me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- + // Talk(EMOTE_RANGE);
- + //}
- + //else
- + //{
- + // me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- + //}
- +
- + while (uint32 eventId = events.ExecuteEvent())
- + {
- + switch (eventId)
- + {
- + case EVENT_MOVE:
- + switch (m_uiWaypointId)
- + {
- + case 0:
- + me->GetMotionMaster()->MovePoint(0, Location[1].GetPositionX(), Location[1].GetPositionY(), Location[1].GetPositionZ());
- + events.ScheduleEvent(EVENT_MOVE, 5*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 1:
- + me->GetMotionMaster()->MovePoint(0, Location[2].GetPositionX(), Location[2].GetPositionY(), Location[2].GetPositionZ());
- + events.ScheduleEvent(EVENT_MOVE, 2*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 2:
- + me->GetMotionMaster()->MovePoint(0, Location[3].GetPositionX(), Location[3].GetPositionY(), Location[3].GetPositionZ());
- + events.ScheduleEvent(EVENT_MOVE, 1.5*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 3:
- + me->GetMotionMaster()->MovePoint(0, Location[8].GetPositionX(), Location[8].GetPositionY(), Location[8].GetPositionZ());
- + if(Creature* pSkadi = Unit::GetCreature(*me, instance->GetData64(DATA_SKADI_THE_RUTHLESS)))
- + {
- + pSkadi->AI()->Talk(SAY_DRAKE_BREATH);
- + }
- + events.ScheduleEvent(EVENT_MOVE, 2.5*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 4:
- + me->GetMotionMaster()->MovePoint(0, Location[9].GetPositionX(), Location[9].GetPositionY(), Location[9].GetPositionZ());
- + switch(urand(0,1))
- + {
- + case 0 :
- + DoCast(SPELL_FREEZING_CLOUD_L);
- + CastFreezingCloud(true);
- + break;
- + case 1 :
- + DoCast(SPELL_FREEZING_CLOUD_R);
- + CastFreezingCloud(false);
- + break;
- + }
- + events.ScheduleEvent(EVENT_STOP_CLOUD, 5*IN_MILLISECONDS, 0, PHASE_FLYING);
- + events.ScheduleEvent(EVENT_MOVE, 2*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 5:
- + me->GetMotionMaster()->MovePoint(0, Location[10].GetPositionX(), Location[10].GetPositionY(), Location[10].GetPositionZ());
- + events.ScheduleEvent(EVENT_MOVE, 3*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + case 6:
- + me->GetMotionMaster()->MovePoint(0, Location[3].GetPositionX(), Location[3].GetPositionY(), Location[3].GetPositionZ());
- + m_uiWaypointId = 2;
- + events.ScheduleEvent(EVENT_MOVE, 15*IN_MILLISECONDS, 0, PHASE_FLYING);
- + break;
- + }
- + m_uiWaypointId++;
- + break;
- + case EVENT_STOP_CLOUD:
- + me->RemoveAurasDueToSpell(SPELL_FREEZING_CLOUD_L);
- + me->RemoveAurasDueToSpell(SPELL_FREEZING_CLOUD_R);
- + break;
- + }
- + }
- + }
- + };
- +
- + CreatureAI* GetAI(Creature* creature) const OVERRIDE
- + {
- + return new npc_graufAI(creature);
- + }
- +};
- +
- +class go_harpoon_launcher : public GameObjectScript
- +{
- +public:
- + go_harpoon_launcher() : GameObjectScript("go_harpoon_launcher") { }
- +
- + bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
- + {
- + InstanceScript* instance = go->GetInstanceScript();
- +
- + if (!instance)
- + return false;
- +
- + return false;
- + }
- +};
- +
- +void AddSC_boss_skadi()
- +{
- + new boss_skadi();
- + new npc_grauf();
- + new go_harpoon_launcher();
- +}
- \ No newline at end of file
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
- index b8fa871..2c0b72c 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
- @@ -82,11 +82,6 @@ enum Creatures
- NPC_SCOURGE_HULK = 26555
- };
- -enum GameObjects
- -{
- - GO_UTGARDE_MIRROR = 191745
- -};
- -
- enum SvalaPhase
- {
- IDLE,
- @@ -119,9 +114,9 @@ public:
- return new boss_svalaAI(creature);
- }
- - struct boss_svalaAI : public ScriptedAI
- + struct boss_svalaAI : public BossAI
- {
- - boss_svalaAI(Creature* creature) : ScriptedAI(creature), summons(creature)
- + boss_svalaAI(Creature* creature) : BossAI(creature, DATA_SVALA_SORROWGRAVE), summons(creature)
- {
- instance = creature->GetInstanceScript();
- Phase = IDLE;
- @@ -152,6 +147,7 @@ public:
- void Reset() OVERRIDE
- {
- + _Reset();
- sacrificed = false;
- SetCombatMovement(true);
- @@ -169,20 +165,17 @@ public:
- if (instance)
- {
- - instance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, NOT_STARTED);
- instance->SetData64(DATA_SACRIFICED_PLAYER, 0);
- }
- }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- + _EnterCombat();
- Talk(SAY_AGGRO);
- sinsterStrikeTimer = 7 * IN_MILLISECONDS;
- callFlamesTimer = urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
- -
- - if (instance)
- - instance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, IN_PROGRESS);
- }
- void JustSummoned(Creature* summon) OVERRIDE
- @@ -228,6 +221,7 @@ public:
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- + _JustDied();
- if (Phase == SACRIFICING)
- SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
- @@ -235,9 +229,6 @@ public:
- summons.DespawnAll();
- - if (instance)
- - instance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, DONE);
- -
- Talk(SAY_DEATH);
- }
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
- index f592a4b..ac14f0a 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
- @@ -108,9 +108,9 @@ public:
- return new boss_ymironAI(creature);
- }
- - struct boss_ymironAI : public ScriptedAI
- + struct boss_ymironAI : public BossAI
- {
- - boss_ymironAI(Creature* creature) : ScriptedAI(creature)
- + boss_ymironAI(Creature* creature) : BossAI(creature, DATA_KING_YMIRON)
- {
- instance = creature->GetInstanceScript();
- for (int i = 0; i < 4; ++i)
- @@ -159,6 +159,7 @@ public:
- void Reset() OVERRIDE
- {
- + _Reset();
- m_bIsWalking = false;
- m_bIsPause = false;
- m_bIsActiveWithBJORN = false;
- @@ -185,16 +186,13 @@ public:
- DespawnBoatGhosts(m_uiActivedCreatureGUID);
- DespawnBoatGhosts(m_uiOrbGUID);
- - if (instance)
- - instance->SetData(DATA_KING_YMIRON_EVENT, NOT_STARTED);
- +
- }
- void EnterCombat(Unit* /*who*/) OVERRIDE
- {
- + _EnterCombat();
- Talk(SAY_AGGRO);
- -
- - if (instance)
- - instance->SetData(DATA_KING_YMIRON_EVENT, IN_PROGRESS);
- }
- void SpellHitTarget(Unit* who, SpellInfo const* spell) OVERRIDE
- @@ -371,13 +369,11 @@ public:
- void JustDied(Unit* /*killer*/) OVERRIDE
- {
- + _JustDied();
- Talk(SAY_DEATH);
- DespawnBoatGhosts(m_uiActivedCreatureGUID);
- DespawnBoatGhosts(m_uiOrbGUID);
- -
- - if (instance)
- - instance->SetData(DATA_KING_YMIRON_EVENT, DONE);
- }
- void KilledUnit(Unit* /*victim*/) OVERRIDE
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
- dissimilarity index 81%
- index 0277c21..e1064f6 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
- @@ -1,267 +1,225 @@
- -/*
- - * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- - *
- - * This program is free software; you can redistribute it and/or modify it
- - * under the terms of the GNU General Public License as published by the
- - * Free Software Foundation; either version 2 of the License, or (at your
- - * option) any later version.
- - *
- - * This program is distributed in the hope that it will be useful, but WITHOUT
- - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- - * more details.
- - *
- - * You should have received a copy of the GNU General Public License along
- - * with this program. If not, see <http://www.gnu.org/licenses/>.
- - */
- -
- -#include "ScriptMgr.h"
- -#include "InstanceScript.h"
- -#include "utgarde_pinnacle.h"
- -
- -#define MAX_ENCOUNTER 4
- -
- -/* Utgarde Pinnacle encounters:
- -0 - Svala Sorrowgrave
- -1 - Gortok Palehoof
- -2 - Skadi the Ruthless
- -3 - King Ymiron
- -*/
- -
- -enum GameObjects
- -{
- - ENTRY_SKADI_THE_RUTHLESS_DOOR = 192173,
- - ENTRY_KING_YMIRON_DOOR = 192174,
- - ENTRY_GORK_PALEHOOF_SPHERE = 188593
- -};
- -
- -class instance_utgarde_pinnacle : public InstanceMapScript
- -{
- -public:
- - instance_utgarde_pinnacle() : InstanceMapScript("instance_utgarde_pinnacle", 575) { }
- -
- - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- - {
- - return new instance_pinnacle(map);
- - }
- -
- - struct instance_pinnacle : public InstanceScript
- - {
- - instance_pinnacle(Map* map) : InstanceScript(map) {}
- -
- - uint64 uiSvalaSorrowgrave;
- - uint64 uiGortokPalehoof;
- - uint64 uiSkadiTheRuthless;
- - uint64 uiKingYmiron;
- -
- - uint64 uiSkadiTheRuthlessDoor;
- - uint64 uiKingYmironDoor;
- - uint64 uiGortokPalehoofSphere;
- -
- - uint64 uiFrenziedWorgen;
- - uint64 uiRavenousFurbolg;
- - uint64 uiFerociousRhino;
- - uint64 uiMassiveJormungar;
- - uint64 uiPalehoofOrb;
- -
- - uint64 uiSvala;
- - uint64 uiSacrificedPlayer;
- -
- - uint32 m_auiEncounter[MAX_ENCOUNTER];
- -
- - std::string str_data;
- -
- - void Initialize() OVERRIDE
- - {
- - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- - m_auiEncounter[i] = NOT_STARTED;
- -
- - uiSvalaSorrowgrave = 0;
- - uiGortokPalehoof = 0;
- - uiSkadiTheRuthless = 0;
- - uiKingYmiron = 0;
- -
- - uiSkadiTheRuthlessDoor = 0;
- - uiKingYmironDoor = 0;
- - uiGortokPalehoofSphere = 0;
- -
- - uiFrenziedWorgen = 0;
- - uiRavenousFurbolg = 0;
- - uiFerociousRhino = 0;
- - uiMassiveJormungar = 0;
- - uiPalehoofOrb = 0;
- -
- - uiSvala = 0;
- - uiSacrificedPlayer = 0;
- - }
- -
- - bool IsEncounterInProgress() const OVERRIDE
- - {
- - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- - if (m_auiEncounter[i] == IN_PROGRESS)
- - return true;
- -
- - return false;
- - }
- -
- - void OnCreatureCreate(Creature* creature) OVERRIDE
- - {
- - switch (creature->GetEntry())
- - {
- - case BOSS_SVALA_SORROWGRAVE: uiSvalaSorrowgrave = creature->GetGUID(); break;
- - case BOSS_GORTOK_PALEHOOF: uiGortokPalehoof = creature->GetGUID(); break;
- - case BOSS_SKADI_RUTHLESS: uiSkadiTheRuthless = creature->GetGUID(); break;
- - case BOSS_KING_YMIRON: uiKingYmiron = creature->GetGUID(); break;
- - case NPC_FRENZIED_WORGEN: uiFrenziedWorgen = creature->GetGUID(); break;
- - case NPC_RAVENOUS_FURBOLG: uiRavenousFurbolg = creature->GetGUID(); break;
- - case NPC_MASSIVE_JORMUNGAR: uiMassiveJormungar = creature->GetGUID(); break;
- - case NPC_FEROCIOUS_RHINO: uiFerociousRhino = creature->GetGUID(); break;
- - case NPC_SVALA: uiSvala = creature->GetGUID(); break;
- - case NPC_PALEHOOF_ORB: uiPalehoofOrb = creature->GetGUID(); break;
- - }
- - }
- -
- - void OnGameObjectCreate(GameObject* go) OVERRIDE
- - {
- - switch (go->GetEntry())
- - {
- - case ENTRY_SKADI_THE_RUTHLESS_DOOR:
- - uiSkadiTheRuthlessDoor = go->GetGUID();
- - if (m_auiEncounter[2] == DONE) HandleGameObject(0, true, go);
- - break;
- - case ENTRY_KING_YMIRON_DOOR:
- - uiKingYmironDoor = go->GetGUID();
- - if (m_auiEncounter[3] == DONE) HandleGameObject(0, true, go);
- - break;
- - case ENTRY_GORK_PALEHOOF_SPHERE:
- - uiGortokPalehoofSphere = go->GetGUID();
- - if (m_auiEncounter[1] == DONE)
- - {
- - HandleGameObject(0, true, go);
- - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- - }
- - break;
- - }
- - }
- -
- - void SetData(uint32 type, uint32 data) OVERRIDE
- - {
- - switch (type)
- - {
- - case DATA_SVALA_SORROWGRAVE_EVENT:
- - m_auiEncounter[0] = data;
- - break;
- - case DATA_GORTOK_PALEHOOF_EVENT:
- - m_auiEncounter[1] = data;
- - break;
- - case DATA_SKADI_THE_RUTHLESS_EVENT:
- - if (data == DONE)
- - HandleGameObject(uiSkadiTheRuthlessDoor, true);
- - m_auiEncounter[2] = data;
- - break;
- - case DATA_KING_YMIRON_EVENT:
- - if (data == DONE)
- - HandleGameObject(uiKingYmironDoor, true);
- - m_auiEncounter[3] = data;
- - break;
- - }
- -
- - if (data == DONE)
- - SaveToDB();
- - }
- -
- - void SetData64(uint32 type, uint64 data) OVERRIDE
- - {
- - switch (type)
- - {
- - case DATA_SACRIFICED_PLAYER:
- - uiSacrificedPlayer = data;
- - break;
- - }
- - }
- -
- - uint32 GetData(uint32 type) const OVERRIDE
- - {
- - switch (type)
- - {
- - case DATA_SVALA_SORROWGRAVE_EVENT: return m_auiEncounter[0];
- - case DATA_GORTOK_PALEHOOF_EVENT: return m_auiEncounter[1];
- - case DATA_SKADI_THE_RUTHLESS_EVENT: return m_auiEncounter[2];
- - case DATA_KING_YMIRON_EVENT: return m_auiEncounter[3];
- - }
- - return 0;
- - }
- -
- - uint64 GetData64(uint32 identifier) const OVERRIDE
- - {
- - switch (identifier)
- - {
- - case DATA_SVALA_SORROWGRAVE: return uiSvalaSorrowgrave;
- - case DATA_GORTOK_PALEHOOF: return uiGortokPalehoof;
- - case DATA_SKADI_THE_RUTHLESS: return uiSkadiTheRuthless;
- - case DATA_KING_YMIRON: return uiKingYmiron;
- - case DATA_NPC_FRENZIED_WORGEN: return uiFrenziedWorgen;
- - case DATA_NPC_RAVENOUS_FURBOLG: return uiRavenousFurbolg;
- - case DATA_NPC_MASSIVE_JORMUNGAR: return uiMassiveJormungar;
- - case DATA_NPC_FEROCIOUS_RHINO: return uiFerociousRhino;
- - case DATA_NPC_ORB: return uiPalehoofOrb;
- - case DATA_SVALA: return uiSvala;
- - case DATA_GORTOK_PALEHOOF_SPHERE: return uiGortokPalehoofSphere;
- - case DATA_SACRIFICED_PLAYER: return uiSacrificedPlayer;
- - }
- -
- - return 0;
- - }
- -
- - std::string GetSaveData() OVERRIDE
- - {
- - OUT_SAVE_INST_DATA;
- -
- - std::ostringstream saveStream;
- - saveStream << "U P " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' '
- - << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
- -
- - str_data = saveStream.str();
- -
- - OUT_SAVE_INST_DATA_COMPLETE;
- - return str_data;
- - }
- -
- - void Load(const char* in) OVERRIDE
- - {
- - if (!in)
- - {
- - OUT_LOAD_INST_DATA_FAIL;
- - return;
- - }
- -
- - OUT_LOAD_INST_DATA(in);
- -
- - char dataHead1, dataHead2;
- - uint16 data0, data1, data2, data3;
- -
- - std::istringstream loadStream(in);
- - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
- -
- - if (dataHead1 == 'U' && dataHead2 == 'P')
- - {
- - m_auiEncounter[0] = data0;
- - m_auiEncounter[1] = data1;
- - m_auiEncounter[2] = data2;
- - m_auiEncounter[3] = data3;
- -
- - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- - if (m_auiEncounter[i] == IN_PROGRESS)
- - m_auiEncounter[i] = NOT_STARTED;
- -
- - } else OUT_LOAD_INST_DATA_FAIL;
- -
- - OUT_LOAD_INST_DATA_COMPLETE;
- - }
- - };
- -};
- -
- -void AddSC_instance_utgarde_pinnacle()
- -{
- - new instance_utgarde_pinnacle();
- -}
- +/*
- +* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- +*
- +* This program is free software; you can redistribute it and/or modify it
- +* under the terms of the GNU General Public License as published by the
- +* Free Software Foundation; either version 2 of the License, or (at your
- +* option) any later version.
- +*
- +* This program is distributed in the hope that it will be useful, but WITHOUT
- +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- +* more details.
- +*
- +* You should have received a copy of the GNU General Public License along
- +* with this program. If not, see <http://www.gnu.org/licenses/>.
- +*/
- +
- +//#include "ScriptMgr.h"
- +#include "InstanceScript.h"
- +#include "utgarde_pinnacle.h"
- +
- +/* Utgarde Pinnacle encounters:
- +0 - Svala Sorrowgrave
- +1 - Gortok Palehoof
- +2 - Skadi the Ruthless
- +3 - King Ymiron
- +*/
- +
- +DoorData const doorData[] =
- +{
- + { GO_SKADI_THE_RUTHLESS_DOOR, DATA_SKADI_THE_RUTHLESS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- + { GO_KING_YMIRON_DOOR, DATA_KING_YMIRON, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
- + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
- +};
- +
- +class instance_utgarde_pinnacle : public InstanceMapScript
- +{
- +public:
- + instance_utgarde_pinnacle() : InstanceMapScript("instance_utgarde_pinnacle", 575) { }
- +
- + InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- + {
- + return new instance_pinnacle(map);
- + }
- +
- + struct instance_pinnacle : public InstanceScript
- + {
- + instance_pinnacle(Map* map) : InstanceScript(map)
- + {
- + SetBossNumber(EncounterCount);
- + LoadDoorData(doorData);
- +
- + SvalaGUID = 0;
- + SvalaSorrowgraveGUID = 0;
- + SacrificedPlayerGUID = 0;
- +
- + GortokPalehoofGUID = 0;
- + FrenziedWorgenGUID = 0;
- + RavenousFurbolgGUID = 0;
- + MassiveJormungarGUID = 0;
- + FerociousRhinoGUID = 0;
- + PalehoofOrbGUID = 0;
- + PalehoofSphereGUID = 0;
- +
- + SkadiTheRuthlessGUID = 0;
- + GraufGUID = 0;
- + SkadiTheRuthlessDoorGUID= 0;
- +
- + KingYmironGUID = 0;
- + KingYmironDoorGUID = 0;
- + }
- +
- + void OnCreatureCreate(Creature* creature) OVERRIDE
- + {
- + switch (creature->GetEntry())
- + {
- + case BOSS_SVALA_SORROWGRAVE: SvalaSorrowgraveGUID = creature->GetGUID(); break;
- + case BOSS_GORTOK_PALEHOOF: GortokPalehoofGUID = creature->GetGUID(); break;
- + case BOSS_SKADI_RUTHLESS: SkadiTheRuthlessGUID = creature->GetGUID(); break;
- + case BOSS_KING_YMIRON: KingYmironGUID = creature->GetGUID(); break;
- + case NPC_FRENZIED_WORGEN: FrenziedWorgenGUID = creature->GetGUID(); break;
- + case NPC_RAVENOUS_FURBOLG: RavenousFurbolgGUID = creature->GetGUID(); break;
- + case NPC_MASSIVE_JORMUNGAR: MassiveJormungarGUID = creature->GetGUID(); break;
- + case NPC_FEROCIOUS_RHINO: FerociousRhinoGUID = creature->GetGUID(); break;
- + case NPC_SVALA: SvalaGUID = creature->GetGUID(); break;
- + case NPC_PALEHOOF_ORB: PalehoofOrbGUID = creature->GetGUID(); break;
- + case NPC_GRAUF: GraufGUID = creature->GetGUID(); break;
- + }
- + }
- +
- + void OnGameObjectCreate(GameObject* go) OVERRIDE
- + {
- + switch (go->GetEntry())
- + {
- + case GO_PALEHOOF_SPHERE:
- + PalehoofSphereGUID = go->GetGUID();
- + if (GetBossState(DATA_GORTOK_PALEHOOF) == DONE)
- + {
- + HandleGameObject(0, true, go);
- + go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- + }
- + break;
- + case GO_SKADI_THE_RUTHLESS_DOOR:
- + AddDoor(go, true);
- + break;
- + case GO_KING_YMIRON_DOOR:
- + AddDoor(go, true);
- + break;
- +
- + }
- + }
- +
- + void OnGameObjectRemove(GameObject* go) OVERRIDE
- + {
- + switch (go->GetEntry())
- + {
- + case GO_SKADI_THE_RUTHLESS_DOOR:
- + AddDoor(go, false);
- + break;
- + case GO_KING_YMIRON_DOOR:
- + AddDoor(go, false);
- + break;
- + }
- + }
- +
- + void SetData64(uint32 type, uint64 data) OVERRIDE
- + {
- + switch (type)
- + {
- + case DATA_SACRIFICED_PLAYER:
- + SacrificedPlayerGUID = data;
- + break;
- + }
- + }
- +
- + uint64 GetData64(uint32 type) const OVERRIDE
- + {
- + switch (type)
- + {
- + case DATA_SVALA_SORROWGRAVE: return SvalaSorrowgraveGUID;
- + case DATA_GORTOK_PALEHOOF: return GortokPalehoofGUID;
- + case DATA_SKADI_THE_RUTHLESS: return SkadiTheRuthlessGUID;
- + case DATA_KING_YMIRON: return KingYmironGUID;
- + case DATA_NPC_FRENZIED_WORGEN: return FrenziedWorgenGUID;
- + case DATA_NPC_RAVENOUS_FURBOLG: return RavenousFurbolgGUID;
- + case DATA_NPC_MASSIVE_JORMUNGAR: return MassiveJormungarGUID;
- + case DATA_NPC_FEROCIOUS_RHINO: return FerociousRhinoGUID;
- + case DATA_NPC_ORB: return PalehoofOrbGUID;
- + case DATA_NPC_GRAUF: return GraufGUID;
- + case DATA_SVALA: return SvalaGUID;
- + case DATA_GORTOK_PALEHOOF_SPHERE: return PalehoofSphereGUID;
- + case DATA_SACRIFICED_PLAYER: return SacrificedPlayerGUID;
- + }
- +
- + return 0;
- + }
- +
- + std::string GetSaveData() OVERRIDE
- + {
- + OUT_SAVE_INST_DATA;
- +
- + std::ostringstream saveStream;
- + saveStream << "U P " << GetBossSaveData();
- +
- + OUT_SAVE_INST_DATA_COMPLETE;
- + return saveStream.str();
- + }
- +
- + void Load(const char* str) OVERRIDE
- + {
- + if (!str)
- + {
- + OUT_LOAD_INST_DATA_FAIL;
- + return;
- + }
- +
- + OUT_LOAD_INST_DATA(str);
- +
- + char dataHead1, dataHead2;
- +
- + std::istringstream loadStream(str);
- + loadStream >> dataHead1 >> dataHead2;
- +
- + if (dataHead1 == 'U' && dataHead2 == 'P')
- + {
- + for (uint8 i = 0; i < EncounterCount; ++i)
- + {
- + uint32 tmpState;
- + loadStream >> tmpState;
- + if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
- + tmpState = NOT_STARTED;
- + SetBossState(i, EncounterState(tmpState));
- + }
- +
- + } else OUT_LOAD_INST_DATA_FAIL;
- +
- + OUT_LOAD_INST_DATA_COMPLETE;
- + }
- +
- + protected:
- + uint64 SvalaGUID;
- + uint64 SvalaSorrowgraveGUID;
- + uint64 SacrificedPlayerGUID;
- +
- + uint64 GortokPalehoofGUID;
- + uint64 FrenziedWorgenGUID;
- + uint64 RavenousFurbolgGUID;
- + uint64 MassiveJormungarGUID;
- + uint64 FerociousRhinoGUID;
- + uint64 PalehoofOrbGUID;
- + uint64 PalehoofSphereGUID;
- +
- + uint64 SkadiTheRuthlessGUID;
- + uint64 GraufGUID;
- + uint64 SkadiTheRuthlessDoorGUID;
- +
- + uint64 KingYmironGUID;
- + uint64 KingYmironDoorGUID;
- + };
- +};
- +
- +void AddSC_instance_utgarde_pinnacle()
- +{
- + new instance_utgarde_pinnacle();
- +}
- diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
- index 6166b7c..68930e1 100644
- --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
- +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
- @@ -18,31 +18,29 @@
- #ifndef DEF_PINNACLE_H
- #define DEF_PINNACLE_H
- -enum Data
- -{
- - DATA_SVALA_SORROWGRAVE_EVENT,
- - DATA_GORTOK_PALEHOOF_EVENT,
- - DATA_SKADI_THE_RUTHLESS_EVENT,
- - DATA_KING_YMIRON_EVENT
- -};
- +uint32 const EncounterCount = 4;
- -enum Data64
- +enum DataTypes
- {
- - DATA_SVALA,
- - DATA_SVALA_SORROWGRAVE,
- - DATA_GORTOK_PALEHOOF,
- - DATA_SKADI_THE_RUTHLESS,
- - DATA_NPC_GRAUF,
- - DATA_KING_YMIRON,
- - DATA_NPC_FRENZIED_WORGEN,
- - DATA_NPC_RAVENOUS_FURBOLG,
- - DATA_NPC_MASSIVE_JORMUNGAR,
- - DATA_NPC_FEROCIOUS_RHINO,
- - DATA_NPC_ORB,
- - DATA_GORTOK_PALEHOOF_SPHERE,
- - DATA_SACRIFICED_PLAYER
- + DATA_SVALA = 0,
- + DATA_GORTOK_PALEHOOF = 1,
- + DATA_SKADI_THE_RUTHLESS = 2,
- + DATA_KING_YMIRON = 3,
- +
- + DATA_SVALA_SORROWGRAVE = 4,
- + DATA_SACRIFICED_PLAYER = 5,
- +
- + DATA_NPC_FRENZIED_WORGEN = 6,
- + DATA_NPC_RAVENOUS_FURBOLG = 7,
- + DATA_NPC_MASSIVE_JORMUNGAR = 8,
- + DATA_NPC_FEROCIOUS_RHINO = 9,
- + DATA_NPC_ORB = 10,
- + DATA_GORTOK_PALEHOOF_SPHERE = 11,
- +
- + DATA_NPC_GRAUF = 12
- };
- +
- enum CreatureID
- {
- BOSS_SVALA_SORROWGRAVE = 26668,
- @@ -54,7 +52,16 @@ enum CreatureID
- NPC_MASSIVE_JORMUNGAR = 26685,
- NPC_FEROCIOUS_RHINO = 26686,
- NPC_SVALA = 29281,
- - NPC_PALEHOOF_ORB = 26688
- + NPC_PALEHOOF_ORB = 26688,
- + NPC_GRAUF = 26893
- +};
- +
- +enum GameObjects
- +{
- + GO_SKADI_THE_RUTHLESS_DOOR = 192173,
- + GO_KING_YMIRON_DOOR = 192174,
- + GO_PALEHOOF_SPHERE = 188593,
- + GO_UTGARDE_MIRROR = 191745
- };
- -#endif
- +#endif
- \ No newline at end of file
- --
- 1.8.3.msysgit.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement