aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp159
-rw-r--r--src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp36
-rw-r--r--src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h3
3 files changed, 120 insertions, 78 deletions
diff --git a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
index 99e3fee4069..f90711c3858 100644
--- a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
+++ b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
@@ -1,61 +1,66 @@
-/* Script Data Start
-SDName: Boss svala
-SDAuthor: Tartalo
-SD%Complete:
-SDComment:
-SDCategory:
-Script Data End */
-
-/*** SQL START ***
-update creature_template set scriptname = 'boss_svala' where entry = '';
-*** SQL END ***/
+/* Copyright (C) 2008 - 2010 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
#include "ScriptedPch.h"
#include "utgarde_pinnacle.h"
enum Spells
{
- SPELL_CALL_FLAMES = 48258,
- SPELL_RITUAL_OF_THE_SWORD = 48276, //Effect #1 Teleport, Effect #2 Dummy
- SPELL_SINSTER_STRIKE = 15667,
- H_SPELL_SINSTER_STRIKE = 59409,
- SPELL_SVALA_TRANSFORMING1 = 54140,
- SPELL_SVALA_TRANSFORMING2 = 54205
+ SPELL_CALL_FLAMES = 48258,
+ SPELL_RITUAL_OF_THE_SWORD = 48276, //Effect #1 Teleport, Effect #2 Dummy
+ SPELL_SINSTER_STRIKE = 15667,
+ H_SPELL_SINSTER_STRIKE = 59409,
+ SPELL_SVALA_TRANSFORMING1 = 54140,
+ SPELL_SVALA_TRANSFORMING2 = 54205
};
//not in db
enum Yells
{
- SAY_DIALOG_WITH_ARTHAS_1 = -1575015,
- SAY_DIALOG_WITH_ARTHAS_2 = -1575016,
- SAY_DIALOG_WITH_ARTHAS_3 = -1575017,
- SAY_AGGRO = -1575018,
- SAY_SLAY_1 = -1575019,
- SAY_SLAY_2 = -1575020,
- SAY_SLAY_3 = -1575021,
- SAY_DEATH = -1575022,
- SAY_SACRIFICE_PLAYER_1 = -1575023,
- SAY_SACRIFICE_PLAYER_2 = -1575024,
- SAY_SACRIFICE_PLAYER_3 = -1575025,
- SAY_SACRIFICE_PLAYER_4 = -1575026,
- SAY_SACRIFICE_PLAYER_5 = -1575027,
- SAY_DIALOG_OF_ARTHAS_1 = -1575028,
- SAY_DIALOG_OF_ARTHAS_2 = -1575029
+ SAY_DIALOG_WITH_ARTHAS_1 = -1575015,
+ SAY_DIALOG_WITH_ARTHAS_2 = -1575016,
+ SAY_DIALOG_WITH_ARTHAS_3 = -1575017,
+ SAY_AGGRO = -1575018,
+ SAY_SLAY_1 = -1575019,
+ SAY_SLAY_2 = -1575020,
+ SAY_SLAY_3 = -1575021,
+ SAY_DEATH = -1575022,
+ SAY_SACRIFICE_PLAYER_1 = -1575023,
+ SAY_SACRIFICE_PLAYER_2 = -1575024,
+ SAY_SACRIFICE_PLAYER_3 = -1575025,
+ SAY_SACRIFICE_PLAYER_4 = -1575026,
+ SAY_SACRIFICE_PLAYER_5 = -1575027,
+ SAY_DIALOG_OF_ARTHAS_1 = -1575028,
+ SAY_DIALOG_OF_ARTHAS_2 = -1575029
};
enum Creatures
{
- CREATURE_ARTHAS = 24266, // Image of Arthas
- CREATURE_SVALA_SORROWGRAVE = 26668, // Svala after transformation
- CREATURE_SVALA = 29281, // Svala before transformation
- CREATURE_RITUAL_CHANNELER = 27281
+ CREATURE_ARTHAS = 24266, // Image of Arthas
+ CREATURE_SVALA_SORROWGRAVE = 26668, // Svala after transformation
+ CREATURE_SVALA = 29281, // Svala before transformation
+ CREATURE_RITUAL_CHANNELER = 27281
};
enum ChannelerSpells
{
//ritual channeler's spells
- SPELL_PARALYZE = 48278,
- SPELL_SHADOWS_IN_THE_DARK = 59407
+ SPELL_PARALYZE = 48278,
+ SPELL_SHADOWS_IN_THE_DARK = 59407
};
enum Misc
{
- DATA_SVALA_DISPLAY_ID = 25944
+ DATA_SVALA_DISPLAY_ID = 25944
};
enum IntroPhase
{
@@ -68,12 +73,15 @@ enum CombatPhase
NORMAL,
SACRIFICING
};
+
static Position RitualChannelerPos[]=
{
{296.42, -355.01, 90.94},
{302.36, -352.01, 90.54},
{291.39, -350.89, 90.54}
};
+static Position ArthasPos = { 295.81, -366.16, 92.57, 1.58 };
+static Position SvalaPos = { 296.632, -346.075, 90.6307, 1.58 };
struct boss_svalaAI : public ScriptedAI
{
@@ -89,16 +97,16 @@ struct boss_svalaAI : public ScriptedAI
IntroPhase Phase;
TempSummon* pArthas;
- uint64 ArthasGUID;
+ uint64 uiArthasGUID;
ScriptedInstance* pInstance;
void Reset()
{
Phase = IDLE;
- uiIntroTimer = 1000;
+ uiIntroTimer = 1*IN_MILISECONDS;
uiIntroPhase = 0;
- ArthasGUID = 0;
+ uiArthasGUID = 0;
if (pInstance)
pInstance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, NOT_STARTED);
@@ -114,11 +122,11 @@ struct boss_svalaAI : public ScriptedAI
Phase = INTRO;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- if (Creature *pArthas = m_creature->SummonCreature(CREATURE_ARTHAS, 295.81, -366.16, 92.57, 1.58, TEMPSUMMON_MANUAL_DESPAWN))
+ if (Creature *pArthas = m_creature->SummonCreature(CREATURE_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN))
{
pArthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
pArthas->SetFloatValue(OBJECT_FIELD_SCALE_X, 5);
- ArthasGUID = pArthas->GetGUID();
+ uiArthasGUID = pArthas->GetGUID();
}
}
}
@@ -132,7 +140,7 @@ struct boss_svalaAI : public ScriptedAI
if (uiIntroTimer <= diff)
{
- Creature *pArthas = Unit::GetCreature(*m_creature, ArthasGUID);
+ Creature *pArthas = Unit::GetCreature(*m_creature, uiArthasGUID);
if (!pArthas)
return;
@@ -141,28 +149,28 @@ struct boss_svalaAI : public ScriptedAI
case 0:
DoScriptText(SAY_DIALOG_WITH_ARTHAS_1, m_creature);
++uiIntroPhase;
- uiIntroTimer = 3500;
+ uiIntroTimer = 3.5*IN_MILISECONDS;
break;
case 1:
DoScriptText(SAY_DIALOG_OF_ARTHAS_1, pArthas);
++uiIntroPhase;
- uiIntroTimer = 3500;
+ uiIntroTimer = 3.5*IN_MILISECONDS;
break;
case 2:
DoScriptText(SAY_DIALOG_WITH_ARTHAS_2, m_creature);
++uiIntroPhase;
- uiIntroTimer = 3500;
+ uiIntroTimer = 3.5*IN_MILISECONDS;
break;
case 3:
DoScriptText(SAY_DIALOG_OF_ARTHAS_2, pArthas);
++uiIntroPhase;
- uiIntroTimer = 3500;
+ uiIntroTimer = 3.5*IN_MILISECONDS;
break;
case 4:
DoScriptText(SAY_DIALOG_WITH_ARTHAS_3, m_creature);
DoCast(m_creature, SPELL_SVALA_TRANSFORMING1);
++uiIntroPhase;
- uiIntroTimer = 2800;
+ uiIntroTimer = 2.8*IN_MILISECONDS;
break;
case 5:
DoCast(m_creature, SPELL_SVALA_TRANSFORMING2);
@@ -170,12 +178,12 @@ struct boss_svalaAI : public ScriptedAI
uiIntroTimer = 200;
break;
case 6:
- if (Creature* pSvalaSorrowgrave = m_creature->SummonCreature(CREATURE_SVALA_SORROWGRAVE, 296.632, -346.075, 90.6307, 1.58, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000))
+ if (Creature* pSvalaSorrowgrave = m_creature->SummonCreature(CREATURE_SVALA_SORROWGRAVE, SvalaPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60*IN_MILISECONDS))
{
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetDisplayId(DATA_SVALA_DISPLAY_ID);
pArthas->ToTempSummon()->UnSummon();
- ArthasGUID = 0;
+ uiArthasGUID = 0;
Phase = FINISHED;
}
else
@@ -201,10 +209,11 @@ struct mob_ritual_channelerAI : public Scripted_NoMovementAI
}
// called by svala sorrowgrave to set guid of victim
- void SetGUID(const uint64 &guid, int32 id)
+ void DoAction(uint32 action)
{
- if (Unit *pVictim = m_creature->GetUnit(*m_creature, guid))
- DoCast(pVictim, SPELL_PARALYZE);
+ if (pInstance)
+ if (Unit *pVictim = m_creature->GetUnit(*m_creature, pInstance->GetData64(DATA_SACRIFICED_PLAYER)))
+ DoCast(pVictim, SPELL_PARALYZE);
}
void EnterCombat(Unit* who)
@@ -227,18 +236,17 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
CombatPhase Phase;
SummonList summons;
- Unit* pSacrificeTarget;
-
+
bool bSacrificed;
ScriptedInstance* pInstance;
void Reset()
{
- uiSinsterStrikeTimer = 7000;
- uiCallFlamesTimer = 10000;
- uiRitualOfSwordTimer = 20000;
- uiSacrificeTimer = 8000;
+ uiSinsterStrikeTimer = 7*IN_MILISECONDS;
+ uiCallFlamesTimer = 10*IN_MILISECONDS;
+ uiRitualOfSwordTimer = 20*IN_MILISECONDS;
+ uiSacrificeTimer = 8*IN_MILISECONDS;
bSacrificed = false;
@@ -248,10 +256,12 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
summons.DespawnAll();
- pSacrificeTarget = NULL;
if (pInstance)
+ {
pInstance->SetData(DATA_SVALA_SORROWGRAVE_EVENT, NOT_STARTED);
+ pInstance->SetData64(DATA_SACRIFICED_PLAYER,0);
+ }
}
void EnterCombat(Unit* who)
@@ -283,7 +293,7 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
if (uiSinsterStrikeTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SINSTER_STRIKE, H_SPELL_SINSTER_STRIKE));
- uiSinsterStrikeTimer = urand(5000,9000);
+ uiSinsterStrikeTimer = urand(5*IN_MILISECONDS,9*IN_MILISECONDS);
} else uiSinsterStrikeTimer -= diff;
if (uiCallFlamesTimer <= diff)
@@ -291,15 +301,14 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
DoCast(pTarget, SPELL_CALL_FLAMES);
- uiCallFlamesTimer = urand(8000,12000);
+ uiCallFlamesTimer = urand(8*IN_MILISECONDS,12*IN_MILISECONDS);
}
} else uiCallFlamesTimer -= diff;
if (!bSacrificed)
if (uiRitualOfSwordTimer <= diff)
{
- pSacrificeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (pSacrificeTarget)
+ if (Unit* pSacrificeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
DoScriptText(RAND(SAY_SACRIFICE_PLAYER_1,SAY_SACRIFICE_PLAYER_2,SAY_SACRIFICE_PLAYER_3,SAY_SACRIFICE_PLAYER_4,SAY_SACRIFICE_PLAYER_5),m_creature);
DoCast(pSacrificeTarget, SPELL_RITUAL_OF_THE_SWORD);
@@ -308,11 +317,14 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_FLY_MODE);
DoTeleportTo(296.632, -346.075, 120.85);
Phase = SACRIFICING;
-
- for (uint8 i = 0; i < 3; ++i)
- if (Creature* pRitualChanneler = m_creature->SummonCreature(CREATURE_RITUAL_CHANNELER, RitualChannelerPos[i], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
- if (pRitualChanneler->AI())
- pRitualChanneler->AI()->SetGUID(pSacrificeTarget->GetGUID());
+ if (pInstance)
+ {
+ pInstance->SetData64(DATA_SACRIFICED_PLAYER,pSacrificeTarget->GetGUID());
+
+ for (uint8 i = 0; i < 3; ++i)
+ if (Creature* pSummon = m_creature->SummonCreature(CREATURE_RITUAL_CHANNELER, RitualChannelerPos[i], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
+ pSummon->AI()->DoAction(0);
+ }
bSacrificed = true;
}
@@ -324,7 +336,8 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
{
if (uiSacrificeTimer <= diff)
{
- if (!summons.empty() && pSacrificeTarget && pSacrificeTarget->isAlive())
+ Unit* pSacrificeTarget = pInstance ? Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_SACRIFICED_PLAYER)) : NULL;
+ if (pInstance && !summons.empty() && pSacrificeTarget && pSacrificeTarget->isAlive())
m_creature->Kill(pSacrificeTarget, false); // durability damage?
//go down
@@ -334,7 +347,7 @@ struct boss_svala_sorrowgraveAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->GetMotionMaster()->MoveChase(pTarget);
- uiSacrificeTimer = 8000;
+ uiSacrificeTimer = 8*IN_MILISECONDS;
}
else uiSacrificeTimer -= diff;
}
diff --git a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
index d00d27c7203..b5b7ccc8a32 100644
--- a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
+++ b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/instance_pinnacle.cpp
@@ -10,9 +10,12 @@
3 - King Ymiron
*/
-#define ENTRY_SKADI_THE_RUTHLESS_DOOR 192173
-#define ENTRY_KING_YMIRON_DOOR 192174
-#define ENTRY_GORK_PALEHOOF_SPHERE 188593
+enum GameObjects
+{
+ ENTRY_SKADI_THE_RUTHLESS_DOOR = 192173,
+ ENTRY_KING_YMIRON_DOOR = 192174,
+ ENTRY_GORK_PALEHOOF_SPHERE = 188593
+};
struct instance_pinnacle : public ScriptedInstance
{
@@ -34,6 +37,7 @@ struct instance_pinnacle : public ScriptedInstance
uint64 uiPalehoofOrb;
uint64 uiSvala;
+ uint64 uiSacrificedPlayer;
uint32 m_auiEncounter[MAX_ENCOUNTER];
@@ -43,6 +47,24 @@ struct instance_pinnacle : public ScriptedInstance
{
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
@@ -119,6 +141,12 @@ struct instance_pinnacle : public ScriptedInstance
SaveToDB();
}
+ void SetData64(uint32 type, uint64 data)
+ {
+ if (type == DATA_SACRIFICED_PLAYER)
+ uiSacrificedPlayer = data;
+ }
+
uint32 GetData(uint32 type)
{
switch(type)
@@ -181,7 +209,7 @@ struct instance_pinnacle : public ScriptedInstance
std::istringstream loadStream(in);
loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3;
- if (dataHead1 == 'U' && dataHead2 == 'K')
+ if (dataHead1 == 'U' && dataHead2 == 'P')
{
m_auiEncounter[0] = data0;
m_auiEncounter[1] = data1;
diff --git a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h
index 550e9c28694..eb79eee5f5a 100644
--- a/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h
+++ b/src/scripts/northrend/utgarde_keep/utgarde_pinnacle/utgarde_pinnacle.h
@@ -20,7 +20,8 @@ enum Data64
DATA_MOB_MASSIVE_JORMUNGAR,
DATA_MOB_FEROCIOUS_RHINO,
DATA_MOB_ORB,
- DATA_GORTOK_PALEHOOF_SPHERE
+ DATA_GORTOK_PALEHOOF_SPHERE,
+ DATA_SACRIFICED_PLAYER
};
#endif