diff options
Diffstat (limited to 'src/server/scripts')
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; } |
