This patch should work with TrinityCore rev. a793f2714605+ 2014-04-05 19:25:23 +0200
[SPOILER]>>
diff --git a/sql/updates/world/2014_04_04_R_world_misc.sql b/sql/updates/world/2014_04_04_R_world_misc.sql
new file mode 100644
index 0000000…a87e2cb
— /dev/null
+++ b/sql/updates/world/2014_04_04_R_world_misc.sql
@@ -0,0 +1,20 @@
+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 7c42f75…577bf85 100644
— a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -123,7 +123,7 @@ public:
currentPhase = PHASE_NONE;
- for (uint8 i = DATA_FRENZIED_WORGEN; i <= DATA_FEROCIOUS_RHINO; ++i)
- for (uint8 i = DATA_NPC_FRENZIED_WORGEN; i <= DATA_NPC_FEROCIOUS_RHINO; ++i)
if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(i)))
if (!temp->IsAlive())
temp->Respawn();
@@ -219,7 +219,7 @@ public:
move = Sequence[AddCount++];
// send orb to summon spot
- if (Creature* orb = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_ORB)))
- if (Creature* orb = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_NPC_ORB)))
if (orb->IsAlive())
orb->GetMotionMaster()->MovePoint(move, moveLocs[move]);
@@ -725,16 +725,16 @@ public:
switch (currentPhase)
{
case PHASE_FRENZIED_WORGEN:
- nextBossId = DATA_FRENZIED_WORGEN;
- nextBossId = DATA_NPC_FRENZIED_WORGEN;
break;
case PHASE_RAVENOUS_FURLBORG:
- nextBossId = DATA_RAVENOUS_FURBOLG;
- nextBossId = DATA_NPC_RAVENOUS_FURBOLG;
break;
case PHASE_MASSIVE_JORMUNGAR:
- nextBossId = DATA_MASSIVE_JORMUNGAR;
- nextBossId = DATA_NPC_MASSIVE_JORMUNGAR;
break;
case PHASE_FEROCIOUS_RHINO:
- nextBossId = DATA_FEROCIOUS_RHINO;
- nextBossId = DATA_NPC_FEROCIOUS_RHINO;
break;
case PHASE_GORTOK_PALEHOOF:
nextBossId = DATA_GORTOK_PALEHOOF;
@@ -769,16 +769,16 @@ public:
switch (id)
{
case PHASE_FRENZIED_WORGEN:
- nextBossId = DATA_FRENZIED_WORGEN;
- nextBossId = DATA_NPC_FRENZIED_WORGEN;
break;
case PHASE_RAVENOUS_FURLBORG:
- nextBossId = DATA_RAVENOUS_FURBOLG;
- nextBossId = DATA_NPC_RAVENOUS_FURBOLG;
break;
case PHASE_MASSIVE_JORMUNGAR:
- nextBossId = DATA_MASSIVE_JORMUNGAR;
- nextBossId = DATA_NPC_MASSIVE_JORMUNGAR;
break;
case PHASE_FEROCIOUS_RHINO:
- nextBossId = DATA_FEROCIOUS_RHINO;
- nextBossId = DATA_NPC_FEROCIOUS_RHINO;
break;
case PHASE_GORTOK_PALEHOOF:
nextBossId = DATA_GORTOK_PALEHOOF;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index e9cf806…e39dd93 100644
— a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -1,29 +1,19 @@
/*
-
- Copyright (C) 2008-2014 TrinityCore
-
-
- 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
-
-
-
- You should have received a copy of the GNU General Public License along
-
- with this program. If not, see .
- */
-
-/* Script Data Start
-SDName: Boss_Skadi
-SDAuthor: LordVanMartin, JohnHoliver
-SD%Complete: 90%
-SDComment:
- After Unmount() he appears to still be flying even with SetFlying(false)
-
-SDCategory: Utgarde Pinnacle
-Script Data End /
+ Copyright (C) 2008-2014 TrinityCore
+*
+* 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 .
+*/
#include “ScriptMgr.h”
#include “ScriptedCreature.h”
@@ -37,8 +27,8 @@ enum Yells
SAY_KILL = 1,
EMOTE_RANGE = 2,
SAY_DEATH = 3,
- SAY_DRAKE_DEATH = 4,
- EMOTE_BREATH = 5,
- SAY_DRAKE_DEATH = 5,
- //EMOTE_BREATH = 5,
SAY_DRAKE_BREATH = 6
};
@@ -54,90 +44,45 @@ static Position Location[]=
{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
- {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 CombatPhase
+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
{
- // Skadi Spells
- SPELL_CRUSH = 50234,
- SPELL_POISONED_SPEAR = 50225, //isn’t being cast
- SPELL_WHIRLWIND = 50228, //random target, but not the tank approx. every 20s
- SPELL_RAPID_FIRE = 56570,
- SPELL_HARPOON_DAMAGE = 56578,
- // 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
@@ -145,9 +90,7 @@ 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
@@ -160,14 +103,9 @@ class boss_skadi : public CreatureScript
public:
boss_skadi() : CreatureScript(“boss_skadi”) { }
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- struct boss_skadiAI : public BossAI
{
- return GetInstanceAI(creature);
- }
-
- struct boss_skadiAI : public ScriptedAI
- {
- boss_skadiAI(Creature* creature) : ScriptedAI(creature), Summons(me)
- boss_skadiAI(Creature* creature) : BossAI(creature, DATA_SKADI_THE_RUTHLESS), Summons(me)
{
instance = creature->GetInstanceScript();
m_uiGraufGUID = 0;
@@ -178,284 +116,317 @@ public:
uint64 m_uiGraufGUID;
std::vector 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
{
- _Reset();
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;
- events.SetPhase(PHASE_INTRO);
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);
- instance->SetBossState(DATA_SKADI_THE_RUTHLESS, NOT_STARTED);
- instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
-
- 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->SetCanFly(false);
me->Dismount();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- if (!Unit::GetCreature(*me, m_uiGraufGUID))
- 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_FLYING);
- events.ScheduleEvent(EVENT_MOUNT, 1 * IN_MILLISECONDS);
- Phase = FLYING;
-
- m_uiMovementTimer = 1000;
- m_uiSummonTimer = 10000;
- me->SetInCombatWithZone();
- instance->SetBossState(DATA_SKADI_THE_RUTHLESS, 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);
- if (instance)
- instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
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;
- 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
{
- 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)
- if(spell->Id == SPELL_SKADI_TELEPORT)
{
- 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;
- AttackStart(SelectTarget(SELECT_TARGET_RANDOM));
- }
- 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 UpdateAI(uint32 diff) OVERRIDE
- void KilledUnit(Unit* victim) 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(victim->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_KILL);
- }
- if (m_uiSummonTimer <= diff)
- {
- SpawnMobs();
- m_uiSummonTimer = 25000;
- } else m_uiSummonTimer -= diff;
- void JustDied(Unit* /killer/) OVERRIDE
- {
- Talk(SAY_DEATH);
- _JustDied();
- }
- 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;
- void UpdateAI(uint32 diff) OVERRIDE
- {
- events.Update(diff);
- if (m_uiCrushTimer <= diff)
- {
- DoCastVictim(SPELL_CRUSH);
- m_uiCrushTimer = 8000;
- } else m_uiCrushTimer -= diff;
- if((events.IsInPhase(PHASE_FLYING) || events.IsInPhase(PHASE_GROUND)) && !UpdateVictim())
- return;
- if (m_uiPoisonedSpearTimer <= diff)
- {
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- DoCast(target, SPELL_POISONED_SPEAR);
- m_uiPoisonedSpearTimer = 10000;
- } else m_uiPoisonedSpearTimer -= diff;
- if(events.IsInPhase(PHASE_GROUND))
- DoMeleeAttackIfReady();
- if (m_uiWhirlwindTimer <= diff)
- {
- DoCastAOE(SPELL_WHIRLWIND);
- m_uiWhirlwindTimer = 20000;
- } else m_uiWhirlwindTimer -= diff;
- 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);
- }
+};
- void JustDied(Unit* /killer/) OVERRIDE
+class npc_grauf : public CreatureScript
+{
+public:
- npc_grauf() : CreatureScript(“npc_grauf”) { }
-
- struct npc_graufAI : public ScriptedAI
- {
- npc_graufAI(Creature* creature) : ScriptedAI(creature)
{
- Talk(SAY_DEATH);
- Summons.DespawnAll();
- instance->SetBossState(DATA_SKADI_THE_RUTHLESS, DONE);
- SetCombatMovement(false);
- instance = me->GetInstanceScript();
}
- void KilledUnit(Unit* who) OVERRIDE
- InstanceScript* instance;
- EventMap events;
- uint32 m_uiWaypointId;
- std::list CloudTriggerList;
- uint8 harpoonsHit;
-
- void Reset() OVERRIDE
{
- if (who->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_KILL);
- events.SetPhase(PHASE_INTRO);
- m_uiWaypointId = 0;
- harpoonsHit = 0;
}
- void JustReachedHome() OVERRIDE
{
- for (uint8 i = 0; i < DUNGEON_MODE(5, 6); ++i)
- 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))
{
- 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;
- 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++;
- }
- 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;
- 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);
- }
- }
- 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 CastFreezingCloud(bool triggerLeft) {
- me->GetCreatureListWithEntryInGrid(CloudTriggerList, NPC_TRIGGER, 200.0f);
- if(!CloudTriggerList.empty())
- {
- for (std::list::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
{
- uint8 iStart = 0, iEnd = 0;
- switch (urand(0, 1))
- 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())
{
- case 0:
- iStart = 8;
- iEnd = 37;
- break;
- case 1:
- iStart = 38;
- iEnd = 68;
- 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;
- }
}
- for (uint32 i = iStart; i < iEnd; ++i)
- me->SummonCreature(NPC_TRIGGER, Location[i]);
}
};
- CreatureAI* GetAI(Creature* creature) const OVERRIDE
- {
- return new npc_graufAI(creature);
- }
};
class go_harpoon_launcher : public GameObjectScript
@@ -466,19 +437,17 @@ public:
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 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 2a24b11…f92433a 100644
— a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -181,7 +181,7 @@ class boss_svala : public CreatureScript
events.SetPhase(INTRO);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, DATA_UTGARDE_MIRROR))
- if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, GO_UTGARDE_MIRROR))
mirror->SetGoState(GO_STATE_READY);
if (Creature* arthas = me->SummonCreature(NPC_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN))
@@ -324,7 +324,7 @@ class boss_svala : public CreatureScript
break;
}
case EVENT_INTRO_DESPAWN_ARTHAS:
- if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, DATA_UTGARDE_MIRROR))
- if (GameObject* mirror = ObjectAccessor::GetGameObject(me, GO_UTGARDE_MIRROR))
mirror->SetGoState(GO_STATE_ACTIVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (Creature arthas = ObjectAccessor::GetCreature(me, _arthasGUID))
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
index 5068abd…8d2082f 100644
— a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp
@@ -1,256 +1,226 @@
/
-
- Copyright (C) 2008-2014 TrinityCore
-
-
- 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
-
-
-
- You should have received a copy of the GNU General Public License along
-
- with this program. If not, see .
- */
-
-#include “ScriptMgr.h”
+* Copyright (C) 2008-2014 TrinityCore
+*
+* 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 .
+*/
+
+//#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_W },
- { GO_KING_YMIRON_DOOR, DATA_KING_YMIRON, DOOR_TYPE_PASSAGE, BOUNDARY_N },
- { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
- { 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(UPScriptName, 575) { }
-
- struct instance_utgarde_pinnacle_InstanceMapScript : public InstanceScript
- {
- instance_utgarde_pinnacle_InstanceMapScript(Map* map) : InstanceScript(map)
- {
- SetBossNumber(EncounterCount);
- LoadDoorData(doorData);
-
- SvalaSorrowgraveGUID = 0;
- GortokPalehoofGUID = 0;
- SkadiTheRuthlessGUID = 0;
- KingYmironGUID = 0;
-
- UtgardeMirrorGUID = 0;
- GortokPalehoofSphereGUID = 0;
-
- FrenziedWorgenGUID = 0;
- RavenousFurbolgGUID = 0;
- FerociousRhinoGUID = 0;
- MassiveJormungarGUID = 0;
- PalehoofOrbGUID = 0;
-
- SvalaGUID = 0;
- SacrificedPlayerGUID = 0;
- }
-
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
- {
- case NPC_SVALA_SORROWGRAVE:
- SvalaSorrowgraveGUID = creature->GetGUID();
- break;
- case NPC_GORTOK_PALEHOOF:
- GortokPalehoofGUID = creature->GetGUID();
- break;
- case NPC_SKADI_THE_RUTHLESS:
- SkadiTheRuthlessGUID = creature->GetGUID();
- break;
- case NPC_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;
- default:
- break;
- }
- }
-
- void OnGameObjectCreate(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
- {
- case GO_UTGARDE_MIRROR:
- UtgardeMirrorGUID = go->GetGUID();
- break;
- case GO_GORTOK_PALEHOOF_SPHERE:
- GortokPalehoofSphereGUID = 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:
- case GO_KING_YMIRON_DOOR:
- AddDoor(go, true);
- break;
- default:
- break;
- }
- }
-
- void OnGameObjectRemove(GameObject* go) OVERRIDE
- {
- switch (go->GetEntry())
- {
- case GO_SKADI_THE_RUTHLESS_DOOR:
- case GO_KING_YMIRON_DOOR:
- AddDoor(go, false);
- break;
- default:
- break;
- }
- }
-
- void SetData64(uint32 type, uint64 data) OVERRIDE
- {
- switch (type)
- {
- case DATA_SACRIFICED_PLAYER:
- SacrificedPlayerGUID = data;
- break;
- default:
- 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_FRENZIED_WORGEN:
- return FrenziedWorgenGUID;
- case DATA_RAVENOUS_FURBOLG:
- return RavenousFurbolgGUID;
- case DATA_MASSIVE_JORMUNGAR:
- return MassiveJormungarGUID;
- case DATA_FEROCIOUS_RHINO:
- return FerociousRhinoGUID;
- case DATA_GORTOK_ORB:
- return PalehoofOrbGUID;
- case DATA_GORTOK_PALEHOOF_SPHERE:
- return GortokPalehoofSphereGUID;
- case DATA_UTGARDE_MIRROR:
- return UtgardeMirrorGUID;
- case DATA_SVALA:
- return SvalaGUID;
- case DATA_SACRIFICED_PLAYER:
- return SacrificedPlayerGUID;
- default:
- break;
- }
-
- 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(char const* 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 (uint32 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 SvalaSorrowgraveGUID;
- uint64 GortokPalehoofGUID;
- uint64 SkadiTheRuthlessGUID;
- uint64 KingYmironGUID;
-
- uint64 UtgardeMirrorGUID;
- uint64 GortokPalehoofSphereGUID;
-
- uint64 FrenziedWorgenGUID;
- uint64 RavenousFurbolgGUID;
- uint64 FerociousRhinoGUID;
- uint64 MassiveJormungarGUID;
-
- uint64 PalehoofOrbGUID;
-
- uint64 SvalaGUID;
- uint64 SacrificedPlayerGUID;
- };
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_utgarde_pinnacle_InstanceMapScript(map);
- }
+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 NPC_SVALA_SORROWGRAVE: SvalaSorrowgraveGUID = creature->GetGUID(); break;
- case NPC_GORTOK_PALEHOOF: GortokPalehoofGUID = creature->GetGUID(); break;
- case NPC_SKADI_THE_RUTHLESS: SkadiTheRuthlessGUID = creature->GetGUID(); break;
- case NPC_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();
-}
- new instance_utgarde_pinnacle();
+}
No newline at end of file
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
index 99acef0…c1c35ed 100644
— a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
@@ -24,25 +24,25 @@ uint32 const EncounterCount = 4;
enum DataTypes
{
- // Encounter States/Boss GUIDs
- DATA_SVALA_SORROWGRAVE = 0,
- DATA_GORTOK_PALEHOOF = 1,
- DATA_SKADI_THE_RUTHLESS = 2,
- DATA_KING_YMIRON = 3,
- // Encounter States/Boss GUIDs
- DATA_SVALA = 0,
- DATA_GORTOK_PALEHOOF = 1,
- DATA_SKADI_THE_RUTHLESS = 2,
- DATA_KING_YMIRON = 3,
- // Additional Data
- DATA_UTGARDE_MIRROR = 4,
- DATA_SVALA = 5,
- DATA_SACRIFICED_PLAYER = 6,
- // Additional Data
- DATA_SVALA_SORROWGRAVE = 4,
- DATA_SACRIFICED_PLAYER = 5,
- DATA_FRENZIED_WORGEN = 7,
- DATA_RAVENOUS_FURBOLG = 8,
- DATA_MASSIVE_JORMUNGAR = 9,
- DATA_FEROCIOUS_RHINO = 10,
- DATA_GORTOK_ORB = 11,
- DATA_GORTOK_PALEHOOF_SPHERE = 12
-};
-
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 CreatureIds
{
NPC_SVALA_SORROWGRAVE = 26668,
@@ -58,15 +58,16 @@ enum CreatureIds
NPC_RAVENOUS_FURBOLG = 26684,
NPC_MASSIVE_JORMUNGAR = 26685,
NPC_FEROCIOUS_RHINO = 26686,
- NPC_PALEHOOF_ORB = 26688,
- NPC_GRAUF = 26893
};
-enum GameObjectIds
+enum GameObjects
{
- GO_GORTOK_PALEHOOF_SPHERE = 188593,
- GO_UTGARDE_MIRROR = 191745,
- GO_SKADI_THE_RUTHLESS_DOOR = 192173,
- GO_KING_YMIRON_DOOR = 192174
- GO_SKADI_THE_RUTHLESS_DOOR = 192173,
- GO_KING_YMIRON_DOOR = 192174,
- GO_PALEHOOF_SPHERE = 188593,
- GO_UTGARDE_MIRROR = 191745
};
template
[/SPOILER]
Thanks to @Carbenium for all the work done on this script! It is really appreciated