diff --git a/data/sql/updates/pending_db_world/skadi_gauntlet_adds_movement.sql b/data/sql/updates/pending_db_world/skadi_gauntlet_adds_movement.sql new file mode 100644 index 000000000..fc6092c6e --- /dev/null +++ b/data/sql/updates/pending_db_world/skadi_gauntlet_adds_movement.sql @@ -0,0 +1,25 @@ +DELETE FROM `waypoint_data` WHERE `id` = 2669000; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(2669000, 1, 478.743, -505.576, 104.724, 0, 0, 1, 0, 100, 0), +(2669000, 2, 318.177, -503.8898, 104.5326, 0, 0, 1, 0, 100, 0); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 26690 AND `source_type` = 0 AND `id` IN (2); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26690, 0, 2, 0, 109, 0, 100, 0, 0, 2669000, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ymirjar Warrior - On Path 2669000 Finished - Set In Combat With Zone'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 26691 AND `source_type` = 0 AND `id` IN (2); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26691, 0, 2, 0, 109, 0, 100, 0, 0, 2669000, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ymirjar Witch Doctor - On Path 2669000 Finished - Set In Combat With Zone'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 26692 AND `source_type` = 0 AND `id` IN (3); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26692, 0, 3, 0, 109, 0, 100, 0, 0, 2669000, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ymirjar Harpooner - On Path 2669000 Finished - Set In Combat With Zone'); + +UPDATE `spell_area` SET `gender` = 2 WHERE `spell` = 47546; + +DELETE FROM `waypoint_data` WHERE `id` IN (2689303, 2689304); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(2689303, 1, 520.483, -541.563, 119.842, 0, 0, 2, 0, 100, 0), +(2689303, 2, 496.434, -517.578, 120, 0, 0, 2, 0, 100, 0), +(2689304, 1, 520.483, -541.563, 119.842, 0, 0, 2, 0, 100, 0), +(2689304, 2, 500.243, -501.693, 120, 0, 0, 2, 0, 100, 0); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index c983d83a0..e3feb9bb9 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -113,8 +113,6 @@ Position const FirstWaveLocations[FIRST_WAVE_SIZE] = { 481.388f, -507.109f, 104.724f, 3.26377f }, }; -Position const SecondaryWavesInitialPoint = { 478.743f, -505.576f, 104.724f }; - enum GraufPoints { POINT_BREACH = 0, @@ -122,11 +120,19 @@ enum GraufPoints POINT_RIGHT = 2, }; -uint32 const PATH_INITIAL = 2689300; -uint32 const PATH_RIGHT = 2689301; -uint32 const PATH_LEFT = 2689302; +enum GraufPaths +{ + PATH_INITIAL = 2689300, + PATH_RIGHT = 2689301, + PATH_LEFT = 2689302, + PATH_BREACH_RIGHT = 2689303, + PATH_BREACH_LEFT = 2689304, + PATH_GAUNTLET_ADDS = 2669000, +}; float const BreachFacing = 2.670354f; +float const BreathFacingRight = 3.124139f; +float const BreathFacingLeft = 3.228859f; enum Events { @@ -139,6 +145,7 @@ enum Events // Grauf EVENT_GRAUF_START = 10, EVENT_GRAUF_LEAVE_BREACH = 11, + EVENT_GRAUF_BREATH_START = 12, EVENT_GRAUF_REMOVE_AURA = 13, }; @@ -193,7 +200,10 @@ public: case NPC_YMIRJAR_WITCH_DOCTOR: case NPC_YMIRJAR_HARPOONER: if (_firstWaveSummoned) - summon->GetMotionMaster()->MovePoint(1, SecondaryWavesInitialPoint); + { + summon->LoadPath(PATH_GAUNTLET_ADDS); + summon->GetMotionMaster()->MoveWaypoint(PATH_GAUNTLET_ADDS, false); + } break; default: break; @@ -404,6 +414,7 @@ public: _summons.DespawnAll(); me->SetReactState(REACT_PASSIVE); me->SetSpeedRate(MOVE_RUN, 2.5f); + _flyingToSide = false; } void DoAction(int32 param) override @@ -430,9 +441,19 @@ public: { if (type == ESCORT_MOTION_TYPE && me->movespline->Finalized()) { - me->SetFacingTo(BreachFacing); - Talk(EMOTE_ON_RANGE); - _events.ScheduleEvent(EVENT_GRAUF_LEAVE_BREACH, 10s); + if (_flyingToSide) + { + _flyingToSide = false; + me->SetFacingTo(_lastSide == POINT_LEFT ? BreathFacingLeft : BreathFacingRight); + Talk(EMOTE_DEEP_BREATH); + _events.ScheduleEvent(EVENT_GRAUF_BREATH_START, 2s); + } + else + { + me->SetFacingTo(BreachFacing); + Talk(EMOTE_ON_RANGE); + _events.ScheduleEvent(EVENT_GRAUF_LEAVE_BREACH, 10s); + } } } @@ -443,16 +464,20 @@ public: { case EVENT_GRAUF_LEAVE_BREACH: _lastSide = RAND(POINT_LEFT, POINT_RIGHT); - me->GetMotionMaster()->MovePath(_lastSide == POINT_LEFT ? PATH_LEFT : PATH_RIGHT, FORCED_MOVEMENT_RUN); - - if (_lastSide == POINT_LEFT) - DoCast(me, SPELL_FREEZING_CLOUD_LEFT_PERIODIC); - else - DoCast(me, SPELL_FREEZING_CLOUD_RIGHT_PERIODIC); - + _flyingToSide = true; + me->GetMotionMaster()->MovePath( + _lastSide == POINT_LEFT ? PATH_BREACH_LEFT : PATH_BREACH_RIGHT, + FORCED_MOVEMENT_RUN); + break; + case EVENT_GRAUF_BREATH_START: + me->GetMotionMaster()->MovePath( + _lastSide == POINT_LEFT ? PATH_LEFT : PATH_RIGHT, + FORCED_MOVEMENT_RUN); + DoCast(me, _lastSide == POINT_LEFT + ? SPELL_FREEZING_CLOUD_LEFT_PERIODIC + : SPELL_FREEZING_CLOUD_RIGHT_PERIODIC); if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS)) skadi->AI()->DoAction(ACTION_DRAKE_BREATH); - _events.ScheduleEvent(EVENT_GRAUF_REMOVE_AURA, 10s); break; case EVENT_GRAUF_REMOVE_AURA: @@ -480,6 +505,7 @@ public: EventMap _events; SummonList _summons; uint8 _lastSide = POINT_LEFT; + bool _flyingToSide = false; }; };