mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 08:28:32 +01:00
Scripts/Ulduar: Cleanup in Flame Leviathan.
This commit is contained in:
@@ -31,139 +31,143 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "ulduar.h"
|
||||
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_PURSUED = 62374,
|
||||
SPELL_GATHERING_SPEED = 62375,
|
||||
SPELL_BATTERING_RAM = 62376,
|
||||
SPELL_FLAME_VENTS = 62396,
|
||||
SPELL_MISSILE_BARRAGE = 62400,
|
||||
SPELL_SYSTEMS_SHUTDOWN = 62475,
|
||||
SPELL_OVERLOAD_CIRCUIT = 62399,
|
||||
SPELL_START_THE_ENGINE = 62472,
|
||||
SPELL_SEARING_FLAME = 62402,
|
||||
SPELL_BLAZE = 62292,
|
||||
SPELL_TAR_PASSIVE = 62288,
|
||||
SPELL_SMOKE_TRAIL = 63575,
|
||||
SPELL_ELECTROSHOCK = 62522,
|
||||
SPELL_NAPALM = 63666,
|
||||
SPELL_PURSUED = 62374,
|
||||
SPELL_GATHERING_SPEED = 62375,
|
||||
SPELL_BATTERING_RAM = 62376,
|
||||
SPELL_FLAME_VENTS = 62396,
|
||||
SPELL_MISSILE_BARRAGE = 62400,
|
||||
SPELL_SYSTEMS_SHUTDOWN = 62475,
|
||||
SPELL_OVERLOAD_CIRCUIT = 62399,
|
||||
SPELL_START_THE_ENGINE = 62472,
|
||||
SPELL_SEARING_FLAME = 62402,
|
||||
SPELL_BLAZE = 62292,
|
||||
SPELL_TAR_PASSIVE = 62288,
|
||||
SPELL_SMOKE_TRAIL = 63575,
|
||||
SPELL_ELECTROSHOCK = 62522,
|
||||
SPELL_NAPALM = 63666,
|
||||
//TOWER Additional SPELLS
|
||||
SPELL_THORIM_S_HAMMER = 62911, // Tower of Storms
|
||||
SPELL_MIMIRON_S_INFERNO = 62909, // Tower of Flames
|
||||
SPELL_HODIR_S_FURY = 62533, // Tower of Frost
|
||||
SPELL_FREYA_S_WARD = 62906, // Tower of Nature
|
||||
SPELL_FREYA_SUMMONS = 62947, // Tower of Nature
|
||||
SPELL_THORIM_S_HAMMER = 62911, // Tower of Storms
|
||||
SPELL_MIMIRON_S_INFERNO = 62909, // Tower of Flames
|
||||
SPELL_HODIR_S_FURY = 62533, // Tower of Frost
|
||||
SPELL_FREYA_S_WARD = 62906, // Tower of Nature
|
||||
SPELL_FREYA_SUMMONS = 62947, // Tower of Nature
|
||||
//TOWER ap & health spells
|
||||
SPELL_BUFF_TOWER_OF_STORMS = 65076,
|
||||
SPELL_BUFF_TOWER_OF_FLAMES = 65075,
|
||||
SPELL_BUFF_TOWER_OF_FR0ST = 65077,
|
||||
SPELL_BUFF_TOWER_OF_LIFE = 64482,
|
||||
SPELL_BUFF_TOWER_OF_STORMS = 65076,
|
||||
SPELL_BUFF_TOWER_OF_FLAMES = 65075,
|
||||
SPELL_BUFF_TOWER_OF_FR0ST = 65077,
|
||||
SPELL_BUFF_TOWER_OF_LIFE = 64482,
|
||||
//Additional Spells
|
||||
SPELL_LASH = 65062,
|
||||
SPELL_FREYA_S_WARD_EFFECT_1 = 62947,
|
||||
SPELL_FREYA_S_WARD_EFFECT_2 = 62907,
|
||||
SPELL_AUTO_REPAIR = 62705,
|
||||
AURA_DUMMY_BLUE = 63294,
|
||||
AURA_DUMMY_GREEN = 63295,
|
||||
AURA_DUMMY_YELLOW = 63292,
|
||||
SPELL_LIQUID_PYRITE = 62494,
|
||||
SPELL_DUSTY_EXPLOSION = 63360,
|
||||
SPELL_DUST_CLOUD_IMPACT = 54740,
|
||||
AURA_STEALTH_DETECTION = 18950,
|
||||
SPELL_RIDE_VEHICLE = 46598,
|
||||
SPELL_LASH = 65062,
|
||||
SPELL_FREYA_S_WARD_EFFECT_1 = 62947,
|
||||
SPELL_FREYA_S_WARD_EFFECT_2 = 62907,
|
||||
SPELL_AUTO_REPAIR = 62705,
|
||||
AURA_DUMMY_BLUE = 63294,
|
||||
AURA_DUMMY_GREEN = 63295,
|
||||
AURA_DUMMY_YELLOW = 63292,
|
||||
SPELL_LIQUID_PYRITE = 62494,
|
||||
SPELL_DUSTY_EXPLOSION = 63360,
|
||||
SPELL_DUST_CLOUD_IMPACT = 54740,
|
||||
AURA_STEALTH_DETECTION = 18950,
|
||||
SPELL_RIDE_VEHICLE = 46598,
|
||||
};
|
||||
|
||||
enum Creatures
|
||||
{
|
||||
NPC_SEAT = 33114,
|
||||
NPC_MECHANOLIFT = 33214,
|
||||
NPC_LIQUID = 33189,
|
||||
NPC_CONTAINER = 33218,
|
||||
NPC_THORIM_BEACON = 33365,
|
||||
NPC_MIMIRON_BEACON = 33370,
|
||||
NPC_HODIR_BEACON = 33212,
|
||||
NPC_FREYA_BEACON = 33367,
|
||||
NPC_THORIM_TARGET_BEACON = 33364,
|
||||
NPC_MIMIRON_TARGET_BEACON = 33369,
|
||||
NPC_HODIR_TARGET_BEACON = 33108,
|
||||
NPC_FREYA_TARGET_BEACON = 33366,
|
||||
NPC_LOREKEEPER = 33686, //Hard mode starter
|
||||
NPC_BRANZ_BRONZBEARD = 33579,
|
||||
NPC_DELORAH = 33701,
|
||||
NPC_ULDUAR_GAUNTLET_GENERATOR = 33571, // Trigger tied to towers
|
||||
NPC_SEAT = 33114,
|
||||
NPC_MECHANOLIFT = 33214,
|
||||
NPC_LIQUID = 33189,
|
||||
NPC_CONTAINER = 33218,
|
||||
NPC_THORIM_BEACON = 33365,
|
||||
NPC_MIMIRON_BEACON = 33370,
|
||||
NPC_HODIR_BEACON = 33212,
|
||||
NPC_FREYA_BEACON = 33367,
|
||||
NPC_THORIM_TARGET_BEACON = 33364,
|
||||
NPC_MIMIRON_TARGET_BEACON = 33369,
|
||||
NPC_HODIR_TARGET_BEACON = 33108,
|
||||
NPC_FREYA_TARGET_BEACON = 33366,
|
||||
NPC_LOREKEEPER = 33686, // Hard mode starter
|
||||
NPC_BRANZ_BRONZBEARD = 33579,
|
||||
NPC_DELORAH = 33701,
|
||||
NPC_ULDUAR_GAUNTLET_GENERATOR = 33571, // Trigger tied to towers
|
||||
};
|
||||
|
||||
enum Towers
|
||||
{
|
||||
GO_TOWER_OF_STORMS = 194377,
|
||||
GO_TOWER_OF_FLAMES = 194371,
|
||||
GO_TOWER_OF_FROST = 194370,
|
||||
GO_TOWER_OF_LIFE = 194375,
|
||||
GO_TOWER_OF_STORMS = 194377,
|
||||
GO_TOWER_OF_FLAMES = 194371,
|
||||
GO_TOWER_OF_FROST = 194370,
|
||||
GO_TOWER_OF_LIFE = 194375,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_PURSUE = 1,
|
||||
EVENT_MISSILE = 2,
|
||||
EVENT_VENT = 3,
|
||||
EVENT_SPEED = 4,
|
||||
EVENT_SUMMON = 5,
|
||||
EVENT_SHUTDOWN = 6,
|
||||
EVENT_REPAIR = 7,
|
||||
EVENT_THORIM_S_HAMMER = 8, // Tower of Storms
|
||||
EVENT_MIMIRON_S_INFERNO = 9, // Tower of Flames
|
||||
EVENT_HODIR_S_FURY = 10, // Tower of Frost
|
||||
EVENT_FREYA_S_WARD = 11, // Tower of Nature
|
||||
EVENT_PURSUE = 1,
|
||||
EVENT_MISSILE = 2,
|
||||
EVENT_VENT = 3,
|
||||
EVENT_SPEED = 4,
|
||||
EVENT_SUMMON = 5,
|
||||
EVENT_SHUTDOWN = 6,
|
||||
EVENT_REPAIR = 7,
|
||||
EVENT_THORIM_S_HAMMER = 8, // Tower of Storms
|
||||
EVENT_MIMIRON_S_INFERNO = 9, // Tower of Flames
|
||||
EVENT_HODIR_S_FURY = 10, // Tower of Frost
|
||||
EVENT_FREYA_S_WARD = 11, // Tower of Nature
|
||||
};
|
||||
|
||||
enum Seats
|
||||
{
|
||||
SEAT_PLAYER = 0,
|
||||
SEAT_TURRET = 1,
|
||||
SEAT_DEVICE = 2,
|
||||
SEAT_CANNON = 7,
|
||||
SEAT_PLAYER = 0,
|
||||
SEAT_TURRET = 1,
|
||||
SEAT_DEVICE = 2,
|
||||
SEAT_CANNON = 7,
|
||||
};
|
||||
|
||||
enum Vehicles
|
||||
{
|
||||
VEHICLE_SIEGE = 33060,
|
||||
VEHICLE_CHOPPER = 33062,
|
||||
VEHICLE_DEMOLISHER = 33109,
|
||||
VEHICLE_SIEGE = 33060,
|
||||
VEHICLE_CHOPPER = 33062,
|
||||
VEHICLE_DEMOLISHER = 33109,
|
||||
};
|
||||
|
||||
#define EMOTE_PURSUE "Flame Leviathan pursues $N."
|
||||
#define EMOTE_OVERLOAD "Flame Leviathan's circuits overloaded."
|
||||
#define EMOTE_REPAIR "Automatic repair sequence initiated."
|
||||
#define DATA_SHUTOUT 29112912 // 2911, 2912 are achievement IDs
|
||||
#define DATA_UNBROKEN 29052906 // 2905, 2906 are achievement IDs
|
||||
#define EMOTE_PURSUE "Flame Leviathan pursues $N."
|
||||
#define EMOTE_OVERLOAD "Flame Leviathan's circuits overloaded."
|
||||
#define EMOTE_REPAIR "Automatic repair sequence initiated."
|
||||
#define DATA_SHUTOUT 29112912 // 2911, 2912 are achievement IDs
|
||||
#define DATA_UNBROKEN 29052906 // 2905, 2906 are achievement IDs
|
||||
#define DATA_ORBIT_ACHIEVEMENTS 1
|
||||
#define VEHICLE_SPAWNS 5
|
||||
#define FREYA_SPAWNS 4
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = -1603060,
|
||||
SAY_SLAY = -1603061,
|
||||
SAY_DEATH = -1603062,
|
||||
SAY_TARGET_1 = -1603063,
|
||||
SAY_TARGET_2 = -1603064,
|
||||
SAY_TARGET_3 = -1603065,
|
||||
SAY_HARDMODE = -1603066,
|
||||
SAY_TOWER_NONE = -1603067,
|
||||
SAY_TOWER_FROST = -1603068,
|
||||
SAY_TOWER_FLAME = -1603069,
|
||||
SAY_TOWER_NATURE = -1603070,
|
||||
SAY_TOWER_STORM = -1603071,
|
||||
SAY_PLAYER_RIDING = -1603072,
|
||||
SAY_OVERLOAD_1 = -1603073,
|
||||
SAY_OVERLOAD_2 = -1603074,
|
||||
SAY_OVERLOAD_3 = -1603075,
|
||||
SAY_AGGRO = -1603060,
|
||||
SAY_SLAY = -1603061,
|
||||
SAY_DEATH = -1603062,
|
||||
SAY_TARGET_1 = -1603063,
|
||||
SAY_TARGET_2 = -1603064,
|
||||
SAY_TARGET_3 = -1603065,
|
||||
SAY_HARDMODE = -1603066,
|
||||
SAY_TOWER_NONE = -1603067,
|
||||
SAY_TOWER_FROST = -1603068,
|
||||
SAY_TOWER_FLAME = -1603069,
|
||||
SAY_TOWER_NATURE = -1603070,
|
||||
SAY_TOWER_STORM = -1603071,
|
||||
SAY_PLAYER_RIDING = -1603072,
|
||||
SAY_OVERLOAD_1 = -1603073,
|
||||
SAY_OVERLOAD_2 = -1603074,
|
||||
SAY_OVERLOAD_3 = -1603075,
|
||||
};
|
||||
|
||||
enum actions
|
||||
enum MiscellanousData
|
||||
{
|
||||
ACTION_TOWER_OF_STORM_DESTROYED = 1,
|
||||
ACTION_TOWER_OF_FROST_DESTROYED = 2,
|
||||
ACTION_TOWER_OF_FLAMES_DESTROYED = 3,
|
||||
ACTION_TOWER_OF_LIFE_DESTROYED = 4,
|
||||
// Other actions are in Ulduar.h
|
||||
ACTION_START_HARD_MODE = 5,
|
||||
ACTION_SPAWN_VEHICLES = 6,
|
||||
// Amount of seats depending on Raid mode
|
||||
TWO_SEATS = 2,
|
||||
FOUR_SEATS = 4,
|
||||
};
|
||||
|
||||
Position const Center[]=
|
||||
@@ -171,7 +175,12 @@ Position const Center[]=
|
||||
{354.8771f, -12.90240f, 409.803650f, 0.0f},
|
||||
};
|
||||
|
||||
Position const PosSiege[5] =
|
||||
Position const InfernoStart[]=
|
||||
{
|
||||
{390.93f, -13.91f, 409.81f, 0.0f},
|
||||
};
|
||||
|
||||
Position const PosSiege[VEHICLE_SPAWNS] =
|
||||
{
|
||||
{-814.59f, -64.54f, 429.92f, 5.969f},
|
||||
{-784.37f, -33.31f, 429.92f, 5.096f},
|
||||
@@ -180,7 +189,7 @@ Position const PosSiege[5] =
|
||||
{-812.83f, -77.71f, 429.92f, 0.046f},
|
||||
};
|
||||
|
||||
Position const PosChopper[5] =
|
||||
Position const PosChopper[VEHICLE_SPAWNS] =
|
||||
{
|
||||
{-717.83f, -106.56f, 430.02f, 0.122f},
|
||||
{-717.83f, -114.23f, 430.44f, 0.122f},
|
||||
@@ -189,7 +198,7 @@ Position const PosChopper[5] =
|
||||
{-718.45f, -123.58f, 430.41f, 0.085f},
|
||||
};
|
||||
|
||||
Position const PosDemolisher[5] =
|
||||
Position const PosDemolisher[VEHICLE_SPAWNS] =
|
||||
{
|
||||
{-724.12f, -176.64f, 430.03f, 2.543f},
|
||||
{-766.70f, -225.03f, 430.50f, 1.710f},
|
||||
@@ -198,7 +207,13 @@ Position const PosDemolisher[5] =
|
||||
{-798.01f, -227.24f, 429.84f, 1.446f},
|
||||
};
|
||||
|
||||
#define DATA_ORBIT_ACHIEVEMENTS 1
|
||||
Position const FreyaBeacons[FREYA_SPAWNS] =
|
||||
{
|
||||
{377.02f, -119.10f, 409.81f, 0.0f},
|
||||
{185.62f, -119.10f, 409.81f, 0.0f},
|
||||
{377.02f, 54.78f, 409.81f, 0.0f},
|
||||
{185.62f, 54.78f, 409.81f, 0.0f},
|
||||
};
|
||||
|
||||
class boss_flame_leviathan : public CreatureScript
|
||||
{
|
||||
@@ -244,6 +259,7 @@ class boss_flame_leviathan : public CreatureScript
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
//resets shutdown counter to 0. 2 or 4 depending on raid mode
|
||||
Shutdown = 0;
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
}
|
||||
@@ -298,7 +314,8 @@ class boss_flame_leviathan : public CreatureScript
|
||||
DoScriptText(SAY_AGGRO, me);
|
||||
}
|
||||
|
||||
// TODO: effect 0 and effect 1 may be on different target
|
||||
//TODO: effect 0 and effect 1 may be on different target
|
||||
//TODO: Move to spellscript
|
||||
void SpellHitTarget(Unit* target, SpellEntry const* spell)
|
||||
{
|
||||
if (spell->Id == SPELL_PURSUED)
|
||||
@@ -354,7 +371,7 @@ class boss_flame_leviathan : public CreatureScript
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (Shutdown == RAID_MODE(2, 4))
|
||||
if (Shutdown == RAID_MODE(TWO_SEATS, FOUR_SEATS))
|
||||
{
|
||||
Shutdown = 0;
|
||||
events.ScheduleEvent(EVENT_SHUTDOWN, 4000);
|
||||
@@ -381,134 +398,111 @@ class boss_flame_leviathan : public CreatureScript
|
||||
if (me->HasUnitState(UNIT_STAT_CASTING))
|
||||
return;
|
||||
|
||||
uint32 eventId = events.GetEvent();
|
||||
|
||||
switch(eventId)
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
case 0:
|
||||
break; // this is a must
|
||||
case EVENT_PURSUE:
|
||||
DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me);
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 75, true))
|
||||
{
|
||||
me->AddAura(SPELL_PURSUED, target);
|
||||
me->MonsterTextEmote(EMOTE_PURSUE, target->GetGUID(), true);
|
||||
}
|
||||
events.RepeatEvent(30*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_MISSILE:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
|
||||
DoCast(target, SPELL_MISSILE_BARRAGE);
|
||||
events.RepeatEvent(1500);
|
||||
break;
|
||||
case EVENT_VENT:
|
||||
DoCastAOE(SPELL_FLAME_VENTS);
|
||||
events.RepeatEvent(20*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SPEED:
|
||||
DoCastAOE(SPELL_GATHERING_SPEED);
|
||||
events.RepeatEvent(15*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SUMMON:
|
||||
if (summons.size() < 15)
|
||||
if (Creature* lift = DoSummonFlyer(NPC_MECHANOLIFT, me, 30.0f, 50.0f, 0))
|
||||
lift->GetMotionMaster()->MoveRandom(100);
|
||||
events.RepeatEvent(2*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SHUTDOWN:
|
||||
DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me);
|
||||
me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true);
|
||||
me->AddAura(SPELL_SYSTEMS_SHUTDOWN, me);
|
||||
me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED);
|
||||
events.ScheduleEvent(EVENT_REPAIR, 4000);
|
||||
events.CancelEvent(EVENT_SHUTDOWN);
|
||||
break;
|
||||
case EVENT_REPAIR:
|
||||
me->MonsterTextEmote(EMOTE_REPAIR, 0, true);
|
||||
me->ClearUnitState(UNIT_STAT_STUNNED | UNIT_STAT_ROOT);
|
||||
events.ScheduleEvent(EVENT_SHUTDOWN, 150*IN_MILLISECONDS);
|
||||
events.CancelEvent(EVENT_REPAIR);
|
||||
break;
|
||||
case EVENT_THORIM_S_HAMMER: // Tower of Storms
|
||||
for (uint8 i = 0; i < 7; ++i)
|
||||
{
|
||||
if (Creature* thorim = DoSummon(NPC_THORIM_BEACON, me, float(urand(20, 60)), 20000, TEMPSUMMON_TIMED_DESPAWN))
|
||||
thorim->GetMotionMaster()->MoveRandom(100);
|
||||
}
|
||||
DoScriptText(SAY_TOWER_STORM, me);
|
||||
events.CancelEvent(EVENT_THORIM_S_HAMMER);
|
||||
break;
|
||||
case EVENT_MIMIRON_S_INFERNO: // Tower of Flames
|
||||
me->SummonCreature(NPC_MIMIRON_BEACON, 390.93f, -13.91f, 409.81f);
|
||||
DoScriptText(SAY_TOWER_FLAME, me);
|
||||
events.CancelEvent(EVENT_MIMIRON_S_INFERNO);
|
||||
break;
|
||||
case EVENT_HODIR_S_FURY: // Tower of Frost
|
||||
for (uint8 i = 0; i < 7; ++i)
|
||||
{
|
||||
if (Creature* hodir = DoSummon(NPC_HODIR_BEACON, me, 50, 0))
|
||||
hodir->GetMotionMaster()->MoveRandom(100);
|
||||
}
|
||||
DoScriptText(SAY_TOWER_FROST, me);
|
||||
events.CancelEvent(EVENT_HODIR_S_FURY);
|
||||
break;
|
||||
case EVENT_FREYA_S_WARD: // Tower of Nature
|
||||
DoScriptText(SAY_TOWER_NATURE, me);
|
||||
StartFreyaEvent();
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
|
||||
DoCast(target, SPELL_FREYA_S_WARD);
|
||||
events.CancelEvent(EVENT_FREYA_S_WARD);
|
||||
break;
|
||||
default:
|
||||
events.PopEvent();
|
||||
break;
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_PURSUE:
|
||||
DoScriptText(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3), me);
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 75, true))
|
||||
{
|
||||
me->CastSpell(target, SPELL_PURSUED, true);
|
||||
me->MonsterTextEmote(EMOTE_PURSUE, target->GetGUID(), true);
|
||||
}
|
||||
events.RepeatEvent(30*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_MISSILE:
|
||||
DoCast(me, SPELL_MISSILE_BARRAGE, true);
|
||||
events.RepeatEvent(2*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_VENT:
|
||||
DoCastAOE(SPELL_FLAME_VENTS);
|
||||
events.RepeatEvent(20*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SPEED:
|
||||
DoCastAOE(SPELL_GATHERING_SPEED);
|
||||
events.RepeatEvent(15*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SUMMON:
|
||||
if (summons.size() < 15)
|
||||
if (Creature* lift = DoSummonFlyer(NPC_MECHANOLIFT, me, 30.0f, 50.0f, 0))
|
||||
lift->GetMotionMaster()->MoveRandom(100);
|
||||
events.RepeatEvent(2*IN_MILLISECONDS);
|
||||
break;
|
||||
case EVENT_SHUTDOWN:
|
||||
DoScriptText(RAND(SAY_OVERLOAD_1, SAY_OVERLOAD_2, SAY_OVERLOAD_3), me);
|
||||
me->MonsterTextEmote(EMOTE_OVERLOAD, 0, true);
|
||||
me->CastSpell(me, SPELL_SYSTEMS_SHUTDOWN, true);
|
||||
me->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED);
|
||||
events.ScheduleEvent(EVENT_REPAIR, 4000);
|
||||
events.CancelEvent(EVENT_SHUTDOWN);
|
||||
break;
|
||||
case EVENT_REPAIR:
|
||||
me->MonsterTextEmote(EMOTE_REPAIR, 0, true);
|
||||
me->ClearUnitState(UNIT_STAT_STUNNED | UNIT_STAT_ROOT);
|
||||
events.ScheduleEvent(EVENT_SHUTDOWN, 150*IN_MILLISECONDS);
|
||||
events.CancelEvent(EVENT_REPAIR);
|
||||
break;
|
||||
case EVENT_THORIM_S_HAMMER: // Tower of Storms
|
||||
for (uint8 i = 0; i < 7; ++i)
|
||||
{
|
||||
if (Creature* thorim = DoSummon(NPC_THORIM_BEACON, me, float(urand(20, 60)), 20000, TEMPSUMMON_TIMED_DESPAWN))
|
||||
thorim->GetMotionMaster()->MoveRandom(100);
|
||||
}
|
||||
DoScriptText(SAY_TOWER_STORM, me);
|
||||
events.CancelEvent(EVENT_THORIM_S_HAMMER);
|
||||
break;
|
||||
case EVENT_MIMIRON_S_INFERNO: // Tower of Flames
|
||||
me->SummonCreature(NPC_MIMIRON_BEACON, InfernoStart->GetPositionX(), InfernoStart->GetPositionY(), InfernoStart->GetPositionZ());
|
||||
DoScriptText(SAY_TOWER_FLAME, me);
|
||||
events.CancelEvent(EVENT_MIMIRON_S_INFERNO);
|
||||
break;
|
||||
case EVENT_HODIR_S_FURY: // Tower of Frost
|
||||
for (uint8 i = 0; i < 7; ++i)
|
||||
{
|
||||
if (Creature* hodir = DoSummon(NPC_HODIR_BEACON, me, 50, 0))
|
||||
hodir->GetMotionMaster()->MoveRandom(100);
|
||||
}
|
||||
DoScriptText(SAY_TOWER_FROST, me);
|
||||
events.CancelEvent(EVENT_HODIR_S_FURY);
|
||||
break;
|
||||
case EVENT_FREYA_S_WARD: // Tower of Nature
|
||||
DoScriptText(SAY_TOWER_NATURE, me);
|
||||
for (int32 i = 0; i < 4; ++i)
|
||||
me->SummonCreature(NPC_FREYA_BEACON, FreyaBeacons[i]);
|
||||
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
|
||||
DoCast(target, SPELL_FREYA_S_WARD);
|
||||
events.CancelEvent(EVENT_FREYA_S_WARD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//TODO: Fix this spell, gets applied on players who are on leviathan should be excluded?
|
||||
/*if (me->IsWithinMeleeRange(me->getVictim())) //bugged spell casts on units that are boarded on leviathan
|
||||
DoSpellAttackIfReady(SPELL_BATTERING_RAM);*/
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
void StartFreyaEvent()//summon these 4 on each corner wich wil spawn additional hostile mobs
|
||||
{
|
||||
me->SummonCreature(NPC_FREYA_BEACON, 377.02f, -119.10f, 409.81f);
|
||||
me->SummonCreature(NPC_FREYA_BEACON, 377.02f, 54.78f, 409.81f);
|
||||
me->SummonCreature(NPC_FREYA_BEACON, 185.62f, 54.78f, 409.81f);
|
||||
me->SummonCreature(NPC_FREYA_BEACON, 185.62f, -119.10f, 409.81f);
|
||||
}
|
||||
|
||||
void DoAction(int32 const action)
|
||||
{
|
||||
// Start encounter
|
||||
if (action == 10)
|
||||
if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count
|
||||
{
|
||||
if (!me->isDead())
|
||||
{
|
||||
me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0);
|
||||
me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower
|
||||
{
|
||||
if (me->HasLootMode(31) && ActiveTowersCount == 4)
|
||||
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4) && ActiveTowersCount == 4)
|
||||
{
|
||||
me->RemoveLootMode(LOOT_MODE_HARD_MODE_4);
|
||||
--ActiveTowersCount;
|
||||
}
|
||||
if (me->HasLootMode(15) && ActiveTowersCount == 3)
|
||||
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3) && ActiveTowersCount == 3)
|
||||
{
|
||||
me->RemoveLootMode(LOOT_MODE_HARD_MODE_3);
|
||||
--ActiveTowersCount;
|
||||
}
|
||||
if (me->HasLootMode(7) && ActiveTowersCount == 2)
|
||||
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2) && ActiveTowersCount == 2)
|
||||
{
|
||||
me->RemoveLootMode(LOOT_MODE_HARD_MODE_2);
|
||||
--ActiveTowersCount;
|
||||
}
|
||||
if (me->HasLootMode(3) && ActiveTowersCount == 1)
|
||||
if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1) && ActiveTowersCount == 1)
|
||||
{
|
||||
me->RemoveLootMode(LOOT_MODE_HARD_MODE_1);
|
||||
--ActiveTowersCount;
|
||||
@@ -517,25 +511,35 @@ class boss_flame_leviathan : public CreatureScript
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case 0: // Activate hard-mode setting counter to 4 towers, enable all towers apply buffs on levithian
|
||||
case ACTION_TOWER_OF_STORM_DESTROYED:
|
||||
towerOfStorms = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_FROST_DESTROYED:
|
||||
towerOfFrost = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_FLAMES_DESTROYED:
|
||||
towerOfFlames = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_LIFE_DESTROYED:
|
||||
towerOfLife = false;
|
||||
break;
|
||||
case ACTION_START_HARD_MODE: // Activate hard-mode enable all towers, apply buffs on leviathan
|
||||
ActiveTowers = true;
|
||||
towerOfStorms = true;
|
||||
towerOfLife = true;
|
||||
towerOfFlames = true;
|
||||
towerOfFrost = true;
|
||||
me->SetLootMode(31);
|
||||
me->SetLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4);
|
||||
break;
|
||||
case ACTION_TOWER_OF_STORM_DESTROYED: // Tower of Storms destroyed
|
||||
towerOfStorms = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_FROST_DESTROYED: // Tower of Frost destroyed
|
||||
towerOfFrost = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_FLAMES_DESTROYED: // Tower of Flames destroyed
|
||||
towerOfFlames = false;
|
||||
break;
|
||||
case ACTION_TOWER_OF_LIFE_DESTROYED: // Tower of Nature destroyed
|
||||
towerOfLife = false;
|
||||
case ACTION_MOVE_TO_CENTER_POSITION: // Triggered by 2 Collossus near door
|
||||
if (!me->isDead())
|
||||
{
|
||||
me->SetHomePosition(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ(), 0);
|
||||
me->GetMotionMaster()->MoveCharge(Center->GetPositionX(), Center->GetPositionY(), Center->GetPositionZ()); //position center
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -628,7 +632,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
|
||||
|
||||
void Reset ()
|
||||
{
|
||||
NapalmTimer = 5000;
|
||||
NapalmTimer = 5*IN_MILLISECONDS;
|
||||
DoCast(me, AURA_STEALTH_DETECTION);
|
||||
}
|
||||
|
||||
@@ -833,7 +837,7 @@ class npc_pool_of_tar : public CreatureScript
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->AddAura(SPELL_TAR_PASSIVE, me);
|
||||
me->CastSpell(me, SPELL_TAR_PASSIVE, true);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*who*/, uint32& damage)
|
||||
@@ -873,7 +877,7 @@ class npc_colossus : public CreatureScript
|
||||
void JustDied(Unit* /*Who*/)
|
||||
{
|
||||
if (me->GetHomePosition().IsInDist(Center, 50.f))
|
||||
instance->SetData(TYPE_COLOSSUS, instance->GetData(TYPE_COLOSSUS)+1);
|
||||
instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 const /*diff*/)
|
||||
@@ -901,7 +905,7 @@ class npc_thorims_hammer : public CreatureScript
|
||||
npc_thorims_hammerAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->AddAura(AURA_DUMMY_BLUE, me);
|
||||
me->CastSpell(me, AURA_DUMMY_BLUE, true);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
@@ -916,7 +920,7 @@ class npc_thorims_hammer : public CreatureScript
|
||||
void UpdateAI(uint32 const /*diff*/)
|
||||
{
|
||||
if (!me->HasAura(AURA_DUMMY_BLUE))
|
||||
me->AddAura(AURA_DUMMY_BLUE, me);
|
||||
me->CastSpell(me, AURA_DUMMY_BLUE, true);
|
||||
|
||||
UpdateVictim();
|
||||
}
|
||||
@@ -943,7 +947,7 @@ public:
|
||||
npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->AddAura(AURA_DUMMY_YELLOW, me);
|
||||
me->CastSpell(me, AURA_DUMMY_YELLOW, true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
|
||||
@@ -978,7 +982,7 @@ public:
|
||||
infernoTimer -= diff;
|
||||
|
||||
if (!me->HasAura(AURA_DUMMY_YELLOW))
|
||||
me->AddAura(AURA_DUMMY_YELLOW, me);
|
||||
me->CastSpell(me, AURA_DUMMY_YELLOW, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -995,7 +999,7 @@ class npc_hodirs_fury : public CreatureScript
|
||||
npc_hodirs_furyAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->AddAura(AURA_DUMMY_GREEN, me);
|
||||
me->CastSpell(me, AURA_DUMMY_GREEN, true);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
@@ -1010,7 +1014,7 @@ class npc_hodirs_fury : public CreatureScript
|
||||
void UpdateAI(uint32 const /*diff*/)
|
||||
{
|
||||
if (!me->HasAura(AURA_DUMMY_GREEN))
|
||||
me->AddAura(AURA_DUMMY_GREEN, me);
|
||||
me->CastSpell(me, AURA_DUMMY_GREEN, true);
|
||||
|
||||
UpdateVictim();
|
||||
}
|
||||
@@ -1031,7 +1035,7 @@ class npc_freyas_ward : public CreatureScript
|
||||
{
|
||||
npc_freyas_wardAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->AddAura(AURA_DUMMY_GREEN, me);
|
||||
me->CastSpell(me, AURA_DUMMY_GREEN, true);
|
||||
}
|
||||
|
||||
uint32 summonTimer;
|
||||
@@ -1053,7 +1057,7 @@ class npc_freyas_ward : public CreatureScript
|
||||
summonTimer -= diff;
|
||||
|
||||
if (!me->HasAura(AURA_DUMMY_GREEN))
|
||||
me->AddAura(AURA_DUMMY_GREEN, me);
|
||||
me->CastSpell(me, AURA_DUMMY_GREEN, true);
|
||||
|
||||
UpdateVictim();
|
||||
}
|
||||
@@ -1110,6 +1114,7 @@ class npc_freya_ward_summon : public CreatureScript
|
||||
//npc lore keeper
|
||||
#define GOSSIP_ITEM_1 "Activate secondary defensive systems"
|
||||
#define GOSSIP_ITEM_2 "Confirmed"
|
||||
|
||||
class npc_lorekeeper : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -1124,7 +1129,7 @@ class npc_lorekeeper : public CreatureScript
|
||||
void DoAction(int32 const action)
|
||||
{
|
||||
// Start encounter
|
||||
if (action == 0)
|
||||
if (action == ACTION_SPAWN_VEHICLES)
|
||||
{
|
||||
for (int32 i = 0; i < RAID_MODE(2, 5); ++i)
|
||||
DoSummon(VEHICLE_SIEGE, PosSiege[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
|
||||
@@ -1162,9 +1167,9 @@ class npc_lorekeeper : public CreatureScript
|
||||
|
||||
if (Creature* leviathan = instance->instance->GetCreature(instance->GetData64(BOSS_LEVIATHAN)))
|
||||
{
|
||||
CAST_AI(boss_flame_leviathan::boss_flame_leviathanAI, (leviathan->AI()))->DoAction(0); //enable hard mode activating the 4 additional events spawning additional vehicles
|
||||
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
|
||||
creature->SetVisible(false);
|
||||
creature->AI()->DoAction(0); // spawn the vehicles
|
||||
creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles
|
||||
if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true))
|
||||
{
|
||||
if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true))
|
||||
|
||||
@@ -390,23 +390,20 @@ class instance_ulduar : public InstanceMapScript
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_TOWER_OF_STORM_DESTROYED:
|
||||
FlameLeviathan->AI()->DoAction(1);
|
||||
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
|
||||
break;
|
||||
case EVENT_TOWER_OF_FROST_DESTROYED:
|
||||
FlameLeviathan->AI()->DoAction(2);
|
||||
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
|
||||
break;
|
||||
case EVENT_TOWER_OF_FLAMES_DESTROYED:
|
||||
FlameLeviathan->AI()->DoAction(3);
|
||||
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
|
||||
break;
|
||||
case EVENT_TOWER_OF_LIFE_DESTROYED:
|
||||
FlameLeviathan->AI()->DoAction(4);
|
||||
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessEvent(Unit* /*unit*/, uint32 /*eventId*/)
|
||||
{
|
||||
}
|
||||
|
||||
bool SetBossState(uint32 type, EncounterState state)
|
||||
{
|
||||
@@ -475,12 +472,12 @@ class instance_ulduar : public InstanceMapScript
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_COLOSSUS:
|
||||
Encounter[TYPE_COLOSSUS] = data;
|
||||
case DATA_COLOSSUS:
|
||||
Encounter[DATA_COLOSSUS] = data;
|
||||
if (data == 2)
|
||||
{
|
||||
if (Creature* Leviathan = instance->GetCreature(LeviathanGUID))
|
||||
Leviathan->AI()->DoAction(10);
|
||||
Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
|
||||
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
|
||||
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||
SaveToDB();
|
||||
@@ -591,7 +588,7 @@ class instance_ulduar : public InstanceMapScript
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_COLOSSUS:
|
||||
case DATA_COLOSSUS:
|
||||
return Encounter[type];
|
||||
case DATA_HODIR_RARE_CACHE:
|
||||
return HodirRareCacheData;
|
||||
@@ -607,7 +604,7 @@ class instance_ulduar : public InstanceMapScript
|
||||
OUT_SAVE_INST_DATA;
|
||||
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "U U " << GetBossSaveData() << GetData(TYPE_COLOSSUS);
|
||||
saveStream << "U U " << GetBossSaveData() << GetData(DATA_COLOSSUS);
|
||||
|
||||
OUT_SAVE_INST_DATA_COMPLETE;
|
||||
return saveStream.str();
|
||||
@@ -637,7 +634,7 @@ class instance_ulduar : public InstanceMapScript
|
||||
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
|
||||
tmpState = NOT_STARTED;
|
||||
|
||||
if (i == TYPE_COLOSSUS)
|
||||
if (i == DATA_COLOSSUS)
|
||||
SetData(i, tmpState);
|
||||
else
|
||||
SetBossState(i, EncounterState(tmpState));
|
||||
|
||||
@@ -23,29 +23,149 @@
|
||||
|
||||
enum UlduarBosses
|
||||
{
|
||||
MAX_ENCOUNTER = 20,
|
||||
MAX_ENCOUNTER = 20,
|
||||
|
||||
BOSS_LEVIATHAN = 0,
|
||||
BOSS_IGNIS = 1,
|
||||
BOSS_RAZORSCALE = 2,
|
||||
BOSS_XT002 = 3,
|
||||
BOSS_ASSEMBLY_OF_IRON = 4,
|
||||
BOSS_STEELBREAKER = 5,
|
||||
BOSS_MOLGEIM = 6,
|
||||
BOSS_BRUNDIR = 7,
|
||||
BOSS_KOLOGARN = 8,
|
||||
BOSS_AURIAYA = 9,
|
||||
BOSS_MIMIRON = 10,
|
||||
BOSS_HODIR = 11,
|
||||
BOSS_THORIM = 12,
|
||||
BOSS_FREYA = 13,
|
||||
BOSS_BRIGHTLEAF = 14,
|
||||
BOSS_IRONBRANCH = 15,
|
||||
BOSS_STONEBARK = 16,
|
||||
BOSS_VEZAX = 17,
|
||||
BOSS_YOGGSARON = 18,
|
||||
BOSS_ALGALON = 19,
|
||||
TYPE_COLOSSUS = 20,
|
||||
BOSS_LEVIATHAN = 0,
|
||||
BOSS_IGNIS = 1,
|
||||
BOSS_RAZORSCALE = 2,
|
||||
BOSS_XT002 = 3,
|
||||
BOSS_ASSEMBLY_OF_IRON = 4,
|
||||
BOSS_STEELBREAKER = 5,
|
||||
BOSS_MOLGEIM = 6,
|
||||
BOSS_BRUNDIR = 7,
|
||||
BOSS_KOLOGARN = 8,
|
||||
BOSS_AURIAYA = 9,
|
||||
BOSS_MIMIRON = 10,
|
||||
BOSS_HODIR = 11,
|
||||
BOSS_THORIM = 12,
|
||||
BOSS_FREYA = 13,
|
||||
BOSS_BRIGHTLEAF = 14,
|
||||
BOSS_IRONBRANCH = 15,
|
||||
BOSS_STONEBARK = 16,
|
||||
BOSS_VEZAX = 17,
|
||||
BOSS_YOGGSARON = 18,
|
||||
BOSS_ALGALON = 19,
|
||||
};
|
||||
|
||||
enum UlduarNPCs
|
||||
{
|
||||
// General
|
||||
NPC_LEVIATHAN = 33113,
|
||||
NPC_IGNIS = 33118,
|
||||
NPC_RAZORSCALE = 33186,
|
||||
NPC_RAZORSCALE_CONTROLLER = 33233,
|
||||
NPC_STEELFORGED_DEFFENDER = 33236,
|
||||
NPC_EXPEDITION_COMMANDER = 33210,
|
||||
NPC_XT002 = 33293,
|
||||
NPC_XT_TOY_PILE = 33337,
|
||||
NPC_STEELBREAKER = 32867,
|
||||
NPC_MOLGEIM = 32927,
|
||||
NPC_BRUNDIR = 32857,
|
||||
NPC_KOLOGARN = 32930,
|
||||
NPC_FOCUSED_EYEBEAM = 33632,
|
||||
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
|
||||
NPC_LEFT_ARM = 32933,
|
||||
NPC_RIGHT_ARM = 32934,
|
||||
NPC_RUBBLE = 33768,
|
||||
NPC_AURIAYA = 33515,
|
||||
NPC_MIMIRON = 33350,
|
||||
NPC_HODIR = 32845,
|
||||
NPC_THORIM = 32865,
|
||||
NPC_FREYA = 32906,
|
||||
NPC_VEZAX = 33271,
|
||||
NPC_YOGGSARON = 33288,
|
||||
NPC_ALGALON = 32871,
|
||||
|
||||
// Mimiron
|
||||
NPC_LEVIATHAN_MKII = 33432,
|
||||
NPC_VX_001 = 33651,
|
||||
NPC_AERIAL_COMMAND_UNIT = 33670,
|
||||
|
||||
// Freya's Keepers
|
||||
NPC_IRONBRANCH = 32913,
|
||||
NPC_BRIGHTLEAF = 32915,
|
||||
NPC_STONEBARK = 32914,
|
||||
|
||||
// Hodir's Helper NPCs
|
||||
NPC_TOR_GREYCLOUD = 32941,
|
||||
NPC_KAR_GREYCLOUD = 33333,
|
||||
NPC_EIVI_NIGHTFEATHER = 33325,
|
||||
NPC_ELLIE_NIGHTFEATHER = 32901,
|
||||
NPC_SPIRITWALKER_TARA = 33332,
|
||||
NPC_SPIRITWALKER_YONA = 32950,
|
||||
NPC_ELEMENTALIST_MAHFUUN = 33328,
|
||||
NPC_ELEMENTALIST_AVUUN = 32900,
|
||||
NPC_AMIRA_BLAZEWEAVER = 33331,
|
||||
NPC_VEESHA_BLAZEWEAVER = 32946,
|
||||
NPC_MISSY_FLAMECUFFS = 32893,
|
||||
NPC_SISSY_FLAMECUFFS = 33327,
|
||||
NPC_BATTLE_PRIEST_ELIZA = 32948,
|
||||
NPC_BATTLE_PRIEST_GINA = 33330,
|
||||
NPC_FIELD_MEDIC_PENNY = 32897,
|
||||
NPC_FIELD_MEDIC_JESSI = 33326,
|
||||
|
||||
// Freya's trash NPCs
|
||||
NPC_CORRUPTED_SERVITOR = 33354,
|
||||
NPC_MISGUIDED_NYMPH = 33355,
|
||||
NPC_GUARDIAN_LASHER = 33430,
|
||||
NPC_FOREST_SWARMER = 33431,
|
||||
NPC_MANGROVE_ENT = 33525,
|
||||
NPC_IRONROOT_LASHER = 33526,
|
||||
NPC_NATURES_BLADE = 33527,
|
||||
NPC_GUARDIAN_OF_LIFE = 33528,
|
||||
};
|
||||
|
||||
enum UlduarGameObjects
|
||||
{
|
||||
GO_KOLOGARN_CHEST_HERO = 195047,
|
||||
GO_KOLOGARN_CHEST = 195046,
|
||||
GO_KOLOGARN_BRIDGE = 194232,
|
||||
GO_KOLOGARN_DOOR = 194553,
|
||||
GO_THORIM_CHEST_HERO = 194315,
|
||||
GO_THORIM_CHEST = 194314,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER = 194200,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER_HERO = 194201,
|
||||
GO_HODIR_CHEST_HERO = 194308,
|
||||
GO_HODIR_CHEST = 194307,
|
||||
GO_FREYA_CHEST_HERO = 194325,
|
||||
GO_FREYA_CHEST = 194324,
|
||||
GO_LEVIATHAN_DOOR = 194905,
|
||||
GO_LEVIATHAN_GATE = 194630,
|
||||
GO_VEZAX_DOOR = 194750,
|
||||
GO_MOLE_MACHINE = 194316,
|
||||
GO_RAZOR_HARPOON_1 = 194542,
|
||||
GO_RAZOR_HARPOON_2 = 194541,
|
||||
GO_RAZOR_HARPOON_3 = 194543,
|
||||
GO_RAZOR_HARPOON_4 = 194519,
|
||||
GO_RAZOR_BROKEN_HARPOON = 194565,
|
||||
GO_HODIR_DOOR = 194634,
|
||||
GO_HODIR_ICE_DOOR = 194441,
|
||||
GO_ARCHIVUM_DOOR = 194556,
|
||||
};
|
||||
|
||||
enum LeviathanData
|
||||
{
|
||||
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
|
||||
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
|
||||
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
|
||||
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
|
||||
ACTION_TOWER_OF_STORM_DESTROYED = 1,
|
||||
ACTION_TOWER_OF_FROST_DESTROYED = 2,
|
||||
ACTION_TOWER_OF_FLAMES_DESTROYED = 3,
|
||||
ACTION_TOWER_OF_LIFE_DESTROYED = 4,
|
||||
ACTION_MOVE_TO_CENTER_POSITION = 10,
|
||||
};
|
||||
|
||||
enum UlduarAchievementCriteriaIds
|
||||
{
|
||||
CRITERIA_CON_SPEED_ATORY = 21597,
|
||||
CRITERIA_DISARMED = 21687,
|
||||
};
|
||||
|
||||
enum UlduarData
|
||||
{
|
||||
// Collosus (Leviathan)
|
||||
DATA_COLOSSUS = 20,
|
||||
|
||||
// Razorscale
|
||||
DATA_EXPEDITION_COMMANDER,
|
||||
@@ -65,116 +185,6 @@ enum UlduarBosses
|
||||
DATA_HODIR_RARE_CACHE,
|
||||
};
|
||||
|
||||
enum UlduarNPCs
|
||||
{
|
||||
// General
|
||||
NPC_LEVIATHAN = 33113,
|
||||
NPC_IGNIS = 33118,
|
||||
NPC_RAZORSCALE = 33186,
|
||||
NPC_RAZORSCALE_CONTROLLER = 33233,
|
||||
NPC_STEELFORGED_DEFFENDER = 33236,
|
||||
NPC_EXPEDITION_COMMANDER = 33210,
|
||||
NPC_XT002 = 33293,
|
||||
NPC_XT_TOY_PILE = 33337,
|
||||
NPC_STEELBREAKER = 32867,
|
||||
NPC_MOLGEIM = 32927,
|
||||
NPC_BRUNDIR = 32857,
|
||||
NPC_KOLOGARN = 32930,
|
||||
NPC_FOCUSED_EYEBEAM = 33632,
|
||||
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
|
||||
NPC_LEFT_ARM = 32933,
|
||||
NPC_RIGHT_ARM = 32934,
|
||||
NPC_RUBBLE = 33768,
|
||||
NPC_AURIAYA = 33515,
|
||||
NPC_MIMIRON = 33350,
|
||||
NPC_HODIR = 32845,
|
||||
NPC_THORIM = 32865,
|
||||
NPC_FREYA = 32906,
|
||||
NPC_VEZAX = 33271,
|
||||
NPC_YOGGSARON = 33288,
|
||||
NPC_ALGALON = 32871,
|
||||
|
||||
// Mimiron
|
||||
NPC_LEVIATHAN_MKII = 33432,
|
||||
NPC_VX_001 = 33651,
|
||||
NPC_AERIAL_COMMAND_UNIT = 33670,
|
||||
|
||||
// Freya's Keepers
|
||||
NPC_IRONBRANCH = 32913,
|
||||
NPC_BRIGHTLEAF = 32915,
|
||||
NPC_STONEBARK = 32914,
|
||||
|
||||
// Hodir's Helper NPCs
|
||||
NPC_TOR_GREYCLOUD = 32941,
|
||||
NPC_KAR_GREYCLOUD = 33333,
|
||||
NPC_EIVI_NIGHTFEATHER = 33325,
|
||||
NPC_ELLIE_NIGHTFEATHER = 32901,
|
||||
NPC_SPIRITWALKER_TARA = 33332,
|
||||
NPC_SPIRITWALKER_YONA = 32950,
|
||||
NPC_ELEMENTALIST_MAHFUUN = 33328,
|
||||
NPC_ELEMENTALIST_AVUUN = 32900,
|
||||
NPC_AMIRA_BLAZEWEAVER = 33331,
|
||||
NPC_VEESHA_BLAZEWEAVER = 32946,
|
||||
NPC_MISSY_FLAMECUFFS = 32893,
|
||||
NPC_SISSY_FLAMECUFFS = 33327,
|
||||
NPC_BATTLE_PRIEST_ELIZA = 32948,
|
||||
NPC_BATTLE_PRIEST_GINA = 33330,
|
||||
NPC_FIELD_MEDIC_PENNY = 32897,
|
||||
NPC_FIELD_MEDIC_JESSI = 33326,
|
||||
|
||||
// Freya's trash NPCs
|
||||
NPC_CORRUPTED_SERVITOR = 33354,
|
||||
NPC_MISGUIDED_NYMPH = 33355,
|
||||
NPC_GUARDIAN_LASHER = 33430,
|
||||
NPC_FOREST_SWARMER = 33431,
|
||||
NPC_MANGROVE_ENT = 33525,
|
||||
NPC_IRONROOT_LASHER = 33526,
|
||||
NPC_NATURES_BLADE = 33527,
|
||||
NPC_GUARDIAN_OF_LIFE = 33528,
|
||||
};
|
||||
|
||||
enum UlduarGameObjects
|
||||
{
|
||||
GO_KOLOGARN_CHEST_HERO = 195047,
|
||||
GO_KOLOGARN_CHEST = 195046,
|
||||
GO_KOLOGARN_BRIDGE = 194232,
|
||||
GO_KOLOGARN_DOOR = 194553,
|
||||
GO_THORIM_CHEST_HERO = 194315,
|
||||
GO_THORIM_CHEST = 194314,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER = 194200,
|
||||
GO_HODIR_RARE_CACHE_OF_WINTER_HERO = 194201,
|
||||
GO_HODIR_CHEST_HERO = 194308,
|
||||
GO_HODIR_CHEST = 194307,
|
||||
GO_FREYA_CHEST_HERO = 194325,
|
||||
GO_FREYA_CHEST = 194324,
|
||||
GO_LEVIATHAN_DOOR = 194905,
|
||||
GO_LEVIATHAN_GATE = 194630,
|
||||
GO_VEZAX_DOOR = 194750,
|
||||
GO_MOLE_MACHINE = 194316,
|
||||
GO_RAZOR_HARPOON_1 = 194542,
|
||||
GO_RAZOR_HARPOON_2 = 194541,
|
||||
GO_RAZOR_HARPOON_3 = 194543,
|
||||
GO_RAZOR_HARPOON_4 = 194519,
|
||||
GO_RAZOR_BROKEN_HARPOON = 194565,
|
||||
GO_HODIR_DOOR = 194634,
|
||||
GO_HODIR_ICE_DOOR = 194441,
|
||||
GO_ARCHIVUM_DOOR = 194556,
|
||||
};
|
||||
|
||||
enum UlduarTowerEvents
|
||||
{
|
||||
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
|
||||
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
|
||||
EVENT_TOWER_OF_FLAMES_DESTROYED = 21033,
|
||||
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
|
||||
};
|
||||
|
||||
enum UlduarAchievementCriteriaIds
|
||||
{
|
||||
CRITERIA_CON_SPEED_ATORY = 21597,
|
||||
CRITERIA_DISARMED = 21687,
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
CreatureAI* GetUlduarAI(Creature* creature)
|
||||
{
|
||||
|
||||
@@ -97,7 +97,7 @@ class ulduar_teleporter : public GameObjectScript
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP);
|
||||
if (InstanceScript* instance = gameObject->GetInstanceScript())
|
||||
{
|
||||
if (instance->GetData(TYPE_COLOSSUS) == 2) //count of 2 collossus death
|
||||
if (instance->GetData(DATA_COLOSSUS) == 2) //count of 2 collossus death
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS);
|
||||
if (instance->GetBossState(BOSS_LEVIATHAN) == DONE)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE);
|
||||
|
||||
Reference in New Issue
Block a user