aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp79
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp15
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp18
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp16
6 files changed, 65 insertions, 68 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index a4a0b46ceb7..71232530505 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -104,7 +104,7 @@ enum Spells
SPELL_LEAVE_TWILIGHT_REALM = 74812,
SPELL_TWILIGHT_PHASING = 74808, // Phase spell from phase 1 to phase 2
SPELL_SUMMON_TWILIGHT_PORTAL = 74809, // Summons go 202794
- SPELL_SUMMON_EXIT_PORTALS = 74805, // Custom spell created in spell_dbc.
+ SPELL_SUMMON_EXIT_PORTALS = 74805, // Custom spell created in spell_dbc. // Used in Cataclysm, need a sniff of cata and up
SPELL_TWILIGHT_MENDING = 75509,
SPELL_TWILIGHT_REALM = 74807,
SPELL_DUSK_SHROUD = 75476,
@@ -123,20 +123,20 @@ enum Events
EVENT_TAIL_LASH = 6,
// Twilight Halion
- EVENT_SOUL_CONSUMPTION = 8,
+ EVENT_SOUL_CONSUMPTION = 7,
// Meteor Strike
- EVENT_SPAWN_METEOR_FLAME = 9,
+ EVENT_SPAWN_METEOR_FLAME = 8,
// Halion Controller
- EVENT_START_INTRO = 10,
- EVENT_INTRO_PROGRESS_1 = 11,
- EVENT_INTRO_PROGRESS_2 = 12,
- EVENT_INTRO_PROGRESS_3 = 13,
- EVENT_CHECK_CORPOREALITY = 14,
- EVENT_SHADOW_PULSARS_SHOOT = 15,
- EVENT_TRIGGER_BERSERK = 16,
- EVENT_TWILIGHT_MENDING = 17,
+ EVENT_START_INTRO = 9,
+ EVENT_INTRO_PROGRESS_1 = 10,
+ EVENT_INTRO_PROGRESS_2 = 11,
+ EVENT_INTRO_PROGRESS_3 = 12,
+ EVENT_CHECK_CORPOREALITY = 13,
+ EVENT_SHADOW_PULSARS_SHOOT = 14,
+ EVENT_TRIGGER_BERSERK = 15,
+ EVENT_TWILIGHT_MENDING = 16
};
enum Actions
@@ -149,13 +149,7 @@ enum Actions
ACTION_MONITOR_CORPOREALITY = 3,
// Orb Carrier
- ACTION_SHOOT = 4,
-
- // Living Inferno
- ACTION_SUMMON_LIVING_EMBERS = 5,
-
- // Meteor Flame
- ACTION_SUMMON_FLAME = 6
+ ACTION_SHOOT = 4
};
enum Phases
@@ -1005,8 +999,7 @@ class npc_meteor_strike_initial : public CreatureScript
if (HalionAI* halionAI = CAST_AI(HalionAI, owner->AI()))
{
Position const* ownerPos = halionAI->GetMeteorStrikePosition();
- // Adjust randomness between 0 and pi.
- float randomAdjustment = frand(static_cast<float>(M_PI / 14), static_cast<float>(13 * M_PI / 14));
+ float randomAdjustment = frand(0.0f, static_cast<float>(M_PI / 5.0f));
float angle[4];
angle[0] = me->GetAngle(ownerPos);
angle[1] = angle[0] + randomAdjustment;
@@ -1087,16 +1080,12 @@ class npc_meteor_strike : public CreatureScript
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
+
if (_events.ExecuteEvent() == EVENT_SPAWN_METEOR_FLAME)
{
- Position pos = me->GetNearPosition(5.0f, 0.0f);
+ Position pos = me->GetNearPosition(5.0f, frand(-static_cast<float>(M_PI / 6.0f), static_cast<float>(M_PI / 6.0f)));
if (Creature* flame = me->SummonCreature(NPC_METEOR_STRIKE_FLAME, pos, TEMPSUMMON_TIMED_DESPAWN, 25000))
- {
- flame->SetOrientation(me->GetOrientation());
-
- flame->AI()->SetGUID(GetGUID());
- flame->AI()->DoAction(ACTION_SUMMON_FLAME);
- }
+ flame->AI()->SetGUID(me->GetGUID());
}
}
@@ -1128,43 +1117,43 @@ class npc_meteor_strike_flame : public CreatureScript
void SetGUID(ObjectGuid guid, int32 /*id = 0 */) override
{
_rootOwnerGuid = guid;
+ _events.ScheduleEvent(EVENT_SPAWN_METEOR_FLAME, 800);
}
- void DoAction(int32 action) override
+ void IsSummonedBy(Unit* /*summoner*/) override
+ {
+ // Let Halion Controller count as summoner.
+ if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ controller->AI()->JustSummoned(me);
+ }
+
+ void UpdateAI(uint32 diff) override
{
- if (action != ACTION_SUMMON_FLAME || _rootOwnerGuid.IsEmpty())
+ _events.Update(diff);
+ if (_events.ExecuteEvent() != EVENT_SPAWN_METEOR_FLAME)
return;
me->CastSpell(me, SPELL_METEOR_STRIKE_FIRE_AURA_2, true);
Creature* meteorStrike = ObjectAccessor::GetCreature(*me, _rootOwnerGuid);
- if (!meteorStrike || meteorStrike->AI()->GetData(DATA_SPAWNED_FLAMES) > 5)
+ if (!meteorStrike)
return;
- me->SetOrientation(me->GetOrientation() + frand(static_cast<float>(-M_PI / 16), static_cast<float>(M_PI / 16)));
- Position pos = me->GetNearPosition(5.0f, 0.0f);
+ meteorStrike->AI()->SetData(DATA_SPAWNED_FLAMES, 1);
+ if (meteorStrike->AI()->GetData(DATA_SPAWNED_FLAMES) > 5)
+ return;
+ Position pos = me->GetNearPosition(5.0f, frand(-static_cast<float>(M_PI / 6.0f), static_cast<float>(M_PI / 6.0f)));
if (Creature* flame = me->SummonCreature(NPC_METEOR_STRIKE_FLAME, pos, TEMPSUMMON_TIMED_DESPAWN, 25000))
- {
flame->AI()->SetGUID(_rootOwnerGuid);
- meteorStrike->AI()->SetData(DATA_SPAWNED_FLAMES, 1);
- }
- }
-
- void IsSummonedBy(Unit* /*summoner*/) override
- {
- // Let Halion Controller count as summoner.
- if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
- controller->AI()->JustSummoned(me);
}
- void UpdateAI(uint32 /*diff*/) override { }
void EnterEvadeMode() override { }
private:
InstanceScript* _instance;
EventMap _events;
- ObjectGuid _rootOwnerGuid = ObjectGuid::Empty;
+ ObjectGuid _rootOwnerGuid;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -1361,7 +1350,7 @@ class go_twilight_portal : public GameObjectScript
_spellId = gameobject->GetGOInfo()->goober.spell;
break;
case GO_HALION_PORTAL_1:
- case GO_HALION_PORTAL_2: // Not used, not seen in sniffs. Just in case.
+ case GO_HALION_PORTAL_2:
gameobject->SetPhaseMask(0x1, true);
/// Because WDB template has non-existent spell ID, not seen in sniffs either, meh
_spellId = SPELL_TWILIGHT_REALM;
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index f10c108c00c..5111247b84c 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -20,6 +20,7 @@
#include "ScriptMgr.h"
#include "WorldSession.h"
#include "gundrak.h"
+#include "EventMap.h"
DoorData const doorData[] =
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index 816895684f1..5368dde12c6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -19,6 +19,7 @@
#include "CreatureTextMgr.h"
#include "GridNotifiersImpl.h"
#include "GossipDef.h"
+#include "MovementPackets.h"
#include "MoveSpline.h"
#include "MoveSplineInit.h"
#include "PassiveAI.h"
@@ -2083,7 +2084,7 @@ class spell_igb_overheat : public SpellScriptLoader
return GetUnitOwner()->IsVehicle();
}
- void SendClientControl(uint8 value)
+ void SendClientControl(bool value)
{
if (Vehicle* vehicle = GetUnitOwner()->GetVehicleKit())
{
@@ -2091,10 +2092,10 @@ class spell_igb_overheat : public SpellScriptLoader
{
if (Player* player = passenger->ToPlayer())
{
- WorldPacket data(SMSG_CONTROL_UPDATE, GetUnitOwner()->GetPackGUID().size() + 1);
- data << GetUnitOwner()->GetPackGUID();
- data << uint8(value);
- player->GetSession()->SendPacket(&data);
+ WorldPackets::Movement::ControlUpdate data;
+ data.Guid = GetUnitOwner()->GetGUID();
+ data.On = value;
+ player->GetSession()->SendPacket(data.Write());
}
}
}
@@ -2102,12 +2103,12 @@ class spell_igb_overheat : public SpellScriptLoader
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- SendClientControl(0);
+ SendClientControl(false);
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- SendClientControl(1);
+ SendClientControl(true);
}
void Register() override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 5f5c944ee6c..b1a816b896b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -594,8 +594,8 @@ class boss_freya : public CreatureScript
const uint32 summonSpell[2][4] =
{
/* 0Elder, 1Elder, 2Elder, 3Elder */
- /* 10N */ {62950, 62953, 62955, 62957},
- /* 25N */ {62952, 62954, 62956, 62958}
+ /* 10N */ {62950, 62952, 62953, 62954},
+ /* 25N */ {62955, 62956, 62957, 62958}
};
me->CastSpell((Unit*)NULL, summonSpell[me->GetMap()->GetDifficultyID() - DIFFICULTY_10_N][elderCount], true);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 5dcf4854943..e3ee2928fdf 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -120,7 +120,7 @@ enum Spells
SPELL_SUMMON_ROCKET_STRIKE = 63036,
SPELL_SCRIPT_EFFECT_ROCKET_STRIKE = 63681, // Cast by Rocket (Mimiron Visual)
SPELL_ROCKET_STRIKE = 64064, // Added in creature_template_addon
- SPELL_ROCKET_STRIKE_LEFT = 64402, // Cast by VX-001
+ SPELL_ROCKET_STRIKE_SINGLE = 64402, // Cast by VX-001
SPELL_ROCKET_STRIKE_BOTH = 65034, // Cast by VX-001
// Flames
@@ -320,6 +320,12 @@ enum Waypoints
WP_AERIAL_P4_POS
};
+enum SeatIds : int8
+{
+ ROCKET_SEAT_LEFT = 5,
+ ROCKET_SEAT_RIGHT = 6
+};
+
uint32 const RepairSpells[4] =
{
SPELL_SEAT_1,
@@ -1043,18 +1049,18 @@ class boss_vx_001 : public CreatureScript
events.RescheduleEvent(EVENT_RAPID_BURST, 3000, 0, PHASE_VX_001);
break;
case EVENT_ROCKET_STRIKE:
- DoCastAOE(events.IsInPhase(PHASE_VX_001) ? SPELL_ROCKET_STRIKE_LEFT : SPELL_ROCKET_STRIKE_BOTH);
+ DoCastAOE(events.IsInPhase(PHASE_VX_001) ? SPELL_ROCKET_STRIKE_SINGLE : SPELL_ROCKET_STRIKE_BOTH);
events.ScheduleEvent(EVENT_RELOAD, 10000);
events.RescheduleEvent(EVENT_ROCKET_STRIKE, urand(20000, 25000));
break;
case EVENT_RELOAD:
- for (uint8 seat = 6; seat <= 7; seat++)
+ for (int8 seat = ROCKET_SEAT_LEFT; seat <= ROCKET_SEAT_RIGHT; ++seat)
if (Unit* rocket = me->GetVehicleKit()->GetPassenger(seat))
rocket->SetDisplayId(rocket->GetNativeDisplayId());
break;
case EVENT_HAND_PULSE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 120, true))
- DoCast(target, urand(0, 1) == 0 ? SPELL_HAND_PULSE_LEFT : SPELL_HAND_PULSE_RIGHT);
+ DoCast(target, RAND(SPELL_HAND_PULSE_LEFT, SPELL_HAND_PULSE_RIGHT));
events.RescheduleEvent(EVENT_HAND_PULSE, urand(1500, 3000), 0, PHASE_VOL7RON);
break;
case EVENT_FROST_BOMB:
@@ -2187,8 +2193,8 @@ class spell_mimiron_rocket_strike : public SpellScriptLoader
if (targets.empty())
return;
- if (m_scriptSpellId == SPELL_ROCKET_STRIKE_LEFT && GetCaster()->IsVehicle())
- if (WorldObject* target = GetCaster()->GetVehicleKit()->GetPassenger(6))
+ if (m_scriptSpellId == SPELL_ROCKET_STRIKE_SINGLE && GetCaster()->IsVehicle())
+ if (WorldObject* target = GetCaster()->GetVehicleKit()->GetPassenger(RAND(ROCKET_SEAT_LEFT, ROCKET_SEAT_RIGHT)))
{
targets.clear();
targets.push_back(target);
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index fef04ac5c07..fe0f161cc27 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -220,14 +220,14 @@ public:
DoCast(SPELL_SUMMON_ETHEREAL_SPHERE_2);
break;
case EVENT_SUMMON_PLAYERS:
- {
- Creature* sphere = me->FindNearestCreature(NPC_ETHEREAL_SPHERE, 150.0f);
- if (!sphere)
- sphere = me->FindNearestCreature(NPC_ETHEREAL_SPHERE2, 150.0f);
- if (sphere)
- sphere->GetAI()->DoAction(ACTION_SUMMON);
- break;
- }
+ {
+ Creature* sphere = me->FindNearestCreature(NPC_ETHEREAL_SPHERE, 150.0f);
+ if (!sphere)
+ sphere = me->FindNearestCreature(NPC_ETHEREAL_SPHERE2, 150.0f);
+ if (sphere)
+ sphere->GetAI()->DoAction(ACTION_SUMMON);
+ break;
+ }
default:
break;
}