diff options
Diffstat (limited to 'src')
12 files changed, 313 insertions, 287 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index e60f30741b6..c1f042111cc 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -990,32 +990,6 @@ void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool Add(new GenericMovementGenerator(std::move(initializer), EFFECT_MOTION_TYPE, 0, { .Duration = duration, .ScriptResult = std::move(scriptResult) })); } -void MotionMaster::MoveSmoothPath(uint32 pointId, Position const* pathPoints, size_t pathSize, bool walk, bool fly) -{ - Movement::PointsArray path; - path.reserve(pathSize); - std::transform(pathPoints, pathPoints + pathSize, std::back_inserter(path), [](Position const& point) - { - return G3D::Vector3(point.GetPositionX(), point.GetPositionY(), point.GetPositionZ()); - }); - std::function<void(Movement::MoveSplineInit&)> initializer = [=](Movement::MoveSplineInit& init) - { - init.MovebyPath(path); - init.SetWalk(walk); - if (fly) - { - init.SetFly(); - init.SetUncompressed(); - init.SetSmooth(); - } - }; - - // This code is not correct - // GenericMovementGenerator does not affect UNIT_STATE_ROAMING_MOVE - // need to call PointMovementGenerator with various pointIds - Add(new GenericMovementGenerator(std::move(initializer), EFFECT_MOTION_TYPE, pointId)); -} - void MotionMaster::MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk) { Creature* owner = _owner->ToCreature(); diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 4fed7e9ea07..e7db6694429 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -201,7 +201,6 @@ class TC_GAME_API MotionMaster Optional<Milliseconds> duration = {}, Optional<float> speed = {}, MovementWalkRunSpeedSelectionMode speedSelectionMode = MovementWalkRunSpeedSelectionMode::Default, Optional<Scripting::v2::ActionResultSetter<MovementStopReason>>&& scriptResult = {}); - void MoveSmoothPath(uint32 pointId, Position const* pathPoints, size_t pathSize, bool walk = false, bool fly = false); // Walk along spline chain stored in DB (script_spline_chain_meta and script_spline_chain_waypoints) void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk); void MoveAlongSplineChain(uint32 pointId, std::vector<SplineChainLink> const& chain, bool walk); diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index 45ebc48ebe5..1a5f1c8f4fa 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -277,9 +277,6 @@ bool MoveSplineInitArgs::_checkPathLengths() if (path.size() > 2) { - if ((path[2] - path[1]).length() < 0.1f) - return false; - Vector3 middle = (path.front() + path.back()) / 2; for (uint32 i = 1; i < path.size() - 1; ++i) { diff --git a/src/server/game/Movement/Waypoints/WaypointDefines.h b/src/server/game/Movement/Waypoints/WaypointDefines.h index b49ebc8a1d2..68225a7e8b5 100644 --- a/src/server/game/Movement/Waypoints/WaypointDefines.h +++ b/src/server/game/Movement/Waypoints/WaypointDefines.h @@ -41,14 +41,16 @@ enum class WaypointPathFlags : uint8 None = 0x00, FollowPathBackwardsFromEndToStart = 0x01, ExactSplinePath = 0x02, // Points are going to be merged into single packets and pathfinding is disabled + + FlyingPath = ExactSplinePath // flying paths are always exact splines }; DEFINE_ENUM_FLAG(WaypointPathFlags); struct WaypointNode { - WaypointNode() : Id(0), X(0.f), Y(0.f), Z(0.f), MoveType(WaypointMoveType::Walk) { } - WaypointNode(uint32 id, float x, float y, float z, Optional<float> orientation = { }, Optional<Milliseconds> delay = {}) + constexpr WaypointNode() : Id(0), X(0.f), Y(0.f), Z(0.f), MoveType(WaypointMoveType::Walk) { } + constexpr WaypointNode(uint32 id, float x, float y, float z, Optional<float> orientation = { }, Optional<Milliseconds> delay = {}) { Id = id; X = x; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 44688f980e5..23719d2a0f7 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -34,6 +34,7 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" #include "SpellInfo.h" +#include "WaypointDefines.h" enum HeadlessHorsemanSays { @@ -152,29 +153,33 @@ enum HeadlessHorsemanMisc QUEST_CALL_THE_HEADLESS_HORSEMAN = 11405 }; -uint32 const HorsemanPathSize = 20; -Position const HeadlessHorsemanFlightPoints[HorsemanPathSize] = +WaypointPath const HeadlessHorsemanFlightPoints = { - { 1765.00f, 1347.00f, 19.00f }, - { 1784.00f, 1346.80f, 25.40f }, - { 1803.30f, 1347.60f, 33.00f }, - { 1824.00f, 1350.00f, 42.60f }, - { 1838.80f, 1353.20f, 49.80f }, - { 1852.00f, 1357.60f, 55.70f }, - { 1861.30f, 1364.00f, 59.40f }, - { 1866.30f, 1374.80f, 61.70f }, - { 1864.00f, 1387.30f, 63.20f }, - { 1854.80f, 1399.40f, 64.10f }, - { 1844.00f, 1406.90f, 64.10f }, - { 1824.30f, 1411.40f, 63.30f }, - { 1801.00f, 1412.30f, 60.40f }, - { 1782.00f, 1410.10f, 55.50f }, - { 1770.50f, 1405.20f, 50.30f }, - { 1765.20f, 1400.70f, 46.60f }, - { 1761.40f, 1393.40f, 41.70f }, - { 1759.10f, 1386.70f, 36.60f }, - { 1757.80f, 1378.20f, 29.00f }, - { 1758.00f, 1367.00f, 19.51f } + POINT_HORSEMAN_FINISH_PATH, + { + { 0, 1765.00f, 1347.00f, 19.00f }, + { 1, 1784.00f, 1346.80f, 25.40f }, + { 2, 1803.30f, 1347.60f, 33.00f }, + { 3, 1824.00f, 1350.00f, 42.60f }, + { 4, 1838.80f, 1353.20f, 49.80f }, + { 5, 1852.00f, 1357.60f, 55.70f }, + { 6, 1861.30f, 1364.00f, 59.40f }, + { 7, 1866.30f, 1374.80f, 61.70f }, + { 8, 1864.00f, 1387.30f, 63.20f }, + { 9, 1854.80f, 1399.40f, 64.10f }, + { 10, 1844.00f, 1406.90f, 64.10f }, + { 11, 1824.30f, 1411.40f, 63.30f }, + { 12, 1801.00f, 1412.30f, 60.40f }, + { 13, 1782.00f, 1410.10f, 55.50f }, + { 14, 1770.50f, 1405.20f, 50.30f }, + { 15, 1765.20f, 1400.70f, 46.60f }, + { 16, 1761.40f, 1393.40f, 41.70f }, + { 17, 1759.10f, 1386.70f, 36.60f }, + { 18, 1757.80f, 1378.20f, 29.00f }, + { 19, 1758.00f, 1367.00f, 19.51f } + }, + WaypointMoveType::Run, + WaypointPathFlags::FlyingPath }; std::vector<uint32> HeadlessHorsemanRandomLaughSound = { SOUNDID_MANIACAL_LAUGH, SOUNDID_MANIACAL_LAUGH_2, SOUNDID_MANIACAL_LAUGH_3 }; @@ -411,7 +416,7 @@ struct boss_headless_horseman : public ScriptedAI case ACTION_HORSEMAN_EVENT_START: DoCastSelf(SPELL_HEADLESS_HORSEMAN_YELL_TIMER, true); DoCastSelf(SPELL_HEADLESS_HORSEMAN_MANIACAL_LAUGH, true); - me->GetMotionMaster()->MoveSmoothPath(POINT_HORSEMAN_FINISH_PATH, HeadlessHorsemanFlightPoints, HorsemanPathSize, false); + me->GetMotionMaster()->MovePath(HeadlessHorsemanFlightPoints, false); break; case ACTION_HORSEMAN_REQUEST_BODY: me->RemoveAurasDueToSpell(SPELL_HEADLESS_HORSEMAN_C_BODY_REGEN_CONFUSE); @@ -512,21 +517,11 @@ struct boss_headless_horseman : public ScriptedAI void MovementInform(uint32 type, uint32 id) override { - if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) + if (type != POINT_MOTION_TYPE) return; switch (id) { - case POINT_HORSEMAN_FINISH_PATH: - _introDone = true; - me->SetImmuneToPC(false); - me->SetDisableGravity(false); - me->SetHover(false); - me->SetHomePosition(me->GetPosition()); - DoCastSelf(SPELL_HEADLESS_HORSEMAN_C_BODY_STAGE_1); - me->SetReactState(REACT_AGGRESSIVE); - DoZoneInCombat(); - break; case POINT_HEAD: me->SetWalk(false); me->RemoveAurasDueToSpell(SPELL_HEADLESS_HORSEMAN_C_HORSEMANS_WHIRLWIND); @@ -537,6 +532,21 @@ struct boss_headless_horseman : public ScriptedAI } } + void WaypointPathEnded(uint32 /*waypointId*/, uint32 pathId) override + { + if (pathId != POINT_HORSEMAN_FINISH_PATH) + return; + + _introDone = true; + me->SetImmuneToPC(false); + me->SetDisableGravity(false); + me->SetHover(false); + me->SetHomePosition(me->GetPosition()); + DoCastSelf(SPELL_HEADLESS_HORSEMAN_C_BODY_STAGE_1); + me->SetReactState(REACT_AGGRESSIVE); + DoZoneInCombat(); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp index 7ab449b9191..598e705c0eb 100644 --- a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp +++ b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp @@ -26,6 +26,7 @@ #include "SpellInfo.h" #include "SpellScript.h" #include "TemporarySummon.h" +#include "WaypointDefines.h" enum WoundedColdridgeMountaineer { @@ -221,37 +222,42 @@ enum MilosGyro EVENT_MILO_SAY_4 = 10, EVENT_MILO_SAY_5 = 11, EVENT_MILO_SAY_6 = 12, - EVENT_MILO_DESPAWN = 13 + EVENT_MILO_DESPAWN = 13, + PATH_MILO = 24 }; -Position const kharanosPath[] = +WaypointPath const kharanosPath = { - { -6247.328f, 299.5365f, 390.266f }, - { -6247.328f, 299.5365f, 390.266f }, - { -6250.934f, 283.5417f, 393.46f }, - { -6253.335f, 252.7066f, 403.0702f }, - { -6257.292f, 217.4167f, 424.3807f }, - { -6224.2f, 159.9861f, 447.0882f }, - { -6133.597f, 164.3177f, 491.0316f }, - { -6084.236f, 183.375f, 508.5401f }, - { -6020.382f, 179.5052f, 521.5396f }, - { -5973.592f, 161.7396f, 521.5396f }, - { -5953.665f, 151.6111f, 514.5687f }, - { -5911.031f, 146.4462f, 482.1806f }, - { -5886.389f, 124.125f, 445.6252f }, - { -5852.08f, 55.80903f, 406.7922f }, - { -5880.707f, 12.59028f, 406.7922f }, - { -5927.887f, -74.02257f, 406.7922f }, - { -5988.436f, -152.0174f, 425.6251f }, - { -6015.274f, -279.467f, 449.528f }, - { -5936.465f, -454.1875f, 449.528f }, - { -5862.575f, -468.0504f, 444.3899f }, - { -5783.58f, -458.6042f, 432.5026f }, - { -5652.707f, -463.4427f, 415.0308f }, - { -5603.897f, -466.3438f, 409.8931f }, - { -5566.957f, -472.5642f, 399.0056f } + PATH_MILO, + { + { 0, -6247.328f, 299.5365f, 390.266f }, + { 1, -6247.328f, 299.5365f, 390.266f }, + { 2, -6250.934f, 283.5417f, 393.46f }, + { 3, -6253.335f, 252.7066f, 403.0702f }, + { 4, -6257.292f, 217.4167f, 424.3807f }, + { 5, -6224.2f, 159.9861f, 447.0882f }, + { 6, -6133.597f, 164.3177f, 491.0316f }, + { 7, -6084.236f, 183.375f, 508.5401f }, + { 8, -6020.382f, 179.5052f, 521.5396f }, + { 9, -5973.592f, 161.7396f, 521.5396f }, + { 10, -5953.665f, 151.6111f, 514.5687f }, + { 11, -5911.031f, 146.4462f, 482.1806f }, + { 12, -5886.389f, 124.125f, 445.6252f }, + { 13, -5852.08f, 55.80903f, 406.7922f }, + { 14, -5880.707f, 12.59028f, 406.7922f }, + { 15, -5927.887f, -74.02257f, 406.7922f }, + { 16, -5988.436f, -152.0174f, 425.6251f }, + { 17, -6015.274f, -279.467f, 449.528f }, + { 18, -5936.465f, -454.1875f, 449.528f }, + { 19, -5862.575f, -468.0504f, 444.3899f }, + { 20, -5783.58f, -458.6042f, 432.5026f }, + { 21, -5652.707f, -463.4427f, 415.0308f }, + { 22, -5603.897f, -466.3438f, 409.8931f }, + { 23, -5566.957f, -472.5642f, 399.0056f } + }, + WaypointMoveType::Run, + WaypointPathFlags::FlyingPath }; -size_t const pathSize = std::extent<decltype(kharanosPath)>::value; class npc_milos_gyro : public CreatureScript { @@ -283,9 +289,9 @@ public: } } - void MovementInform(uint32 type, uint32 pointId) override + void WaypointPathEnded(uint32 /*pointId*/, uint32 pathId) override { - if (type == EFFECT_MOTION_TYPE && pointId == pathSize) + if (pathId == PATH_MILO) _events.ScheduleEvent(EVENT_MILO_DESPAWN, Seconds(1)); } @@ -304,7 +310,7 @@ public: switch (eventId) { case EVENT_START_PATH: - me->GetMotionMaster()->MoveSmoothPath(uint32(pathSize), kharanosPath, pathSize, false, true); + me->GetMotionMaster()->MovePath(kharanosPath, false); _events.ScheduleEvent(EVENT_MILO_SAY_0, Seconds(5)); break; case EVENT_MILO_SAY_0: diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index 78f3d722b72..b0fb815c51c 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -25,10 +25,10 @@ EndScriptData */ /* ContentData EndContentData */ -#include "ScriptMgr.h" #include "MotionMaster.h" -#include "Position.h" +#include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "WaypointDefines.h" /*###### ## npc_sharpbeak used by Entrys 43161 & 51125 @@ -38,50 +38,57 @@ enum Sharpbeak { NPC_SHARPBEAK_CAMP = 43161, NPC_SHARPBEAK_JINTHAALOR = 51125, - SPELL_EJECT_ALL_PASSENGERS = 50630 + SPELL_EJECT_ALL_PASSENGERS = 50630, + PATH_HARDCODED_ID = 1 }; -Position const campPath[] = +WaypointPath const campPath = { - { -75.40077f, -4037.111f, 114.6418f }, - { -68.80193f, -4034.235f, 123.6844f }, - { -62.2031f, -4031.36f, 132.727f }, - { -48.5851f, -4008.04f, 156.977f }, - { -26.2691f, -3987.88f, 176.755f }, - { 11.5087f, -3960.86f, 203.561f }, - { 45.0087f, -3922.58f, 236.672f }, - { 75.4427f, -3856.91f, 255.672f }, - { 74.8351f, -3768.84f, 279.839f }, - { -53.0104f, -3582.62f, 287.755f }, - { -169.123f, -3582.08f, 282.866f }, - { -241.8403f, -3625.01f, 247.4203f } + PATH_HARDCODED_ID, + { + { 1, -68.80193f, -4034.235f, 123.6844f }, + { 2, -62.2031f, -4031.36f, 132.727f }, + { 3, -48.5851f, -4008.04f, 156.977f }, + { 4, -26.2691f, -3987.88f, 176.755f }, + { 5, 11.5087f, -3960.86f, 203.561f }, + { 6, 45.0087f, -3922.58f, 236.672f }, + { 7, 75.4427f, -3856.91f, 255.672f }, + { 8, 74.8351f, -3768.84f, 279.839f }, + { 9, -53.0104f, -3582.62f, 287.755f }, + { 10, -169.123f, -3582.08f, 282.866f }, + { 11, -241.8403f, -3625.01f, 247.4203f } + }, + WaypointMoveType::Run, + WaypointPathFlags::FlyingPath }; -size_t constexpr campPathSize = std::extent<decltype(campPath)>::value; -Position const jinthaalorPath[] = +WaypointPath const jinthaalorPath = { - { -249.4681f, -3632.487f, 232.6947f }, - { -241.606f, -3627.713f, 236.61870f }, - { -235.6163f, -3624.076f, 239.6081f }, - { -226.8698f, -3623.929f, 244.8882f }, - { -193.6406f, -3618.776f, 244.8882f }, - { -149.7292f, -3613.349f, 244.8882f }, - { -103.8976f, -3623.828f, 238.0368f }, - { -41.33681f, -3710.568f, 232.4109f }, - { 6.201389f, -3739.243f, 214.2869f }, - { 37.44097f, -3773.431f, 189.4650f }, - { 44.21875f, -3884.991f, 177.7446f }, - { 39.81424f, -3934.679f, 168.1627f }, - { 32.17535f, -3983.781f, 166.1228f }, - { 21.34896f, -4005.293f, 162.9598f }, - { -5.734375f, -4028.695f, 149.0161f }, - { -23.23611f, -4040.689f, 140.1189f }, - { -35.45139f, -4047.543f, 133.2071f }, - { -59.21181f, -4051.257f, 128.0297f }, - { -76.90625f, -4040.207f, 126.0433f }, - { -77.51563f, -4022.026f, 123.2135f } + PATH_HARDCODED_ID, + { + { 1, -241.606f, -3627.713f, 236.61870f }, + { 2, -235.6163f, -3624.076f, 239.6081f }, + { 3, -226.8698f, -3623.929f, 244.8882f }, + { 4, -193.6406f, -3618.776f, 244.8882f }, + { 5, -149.7292f, -3613.349f, 244.8882f }, + { 6, -103.8976f, -3623.828f, 238.0368f }, + { 7, -41.33681f, -3710.568f, 232.4109f }, + { 8, 6.201389f, -3739.243f, 214.2869f }, + { 9, 37.44097f, -3773.431f, 189.4650f }, + { 10, 44.21875f, -3884.991f, 177.7446f }, + { 11, 39.81424f, -3934.679f, 168.1627f }, + { 12, 32.17535f, -3983.781f, 166.1228f }, + { 13, 21.34896f, -4005.293f, 162.9598f }, + { 14, -5.734375f, -4028.695f, 149.0161f }, + { 15, -23.23611f, -4040.689f, 140.1189f }, + { 16, -35.45139f, -4047.543f, 133.2071f }, + { 17, -59.21181f, -4051.257f, 128.0297f }, + { 18, -76.90625f, -4040.207f, 126.0433f }, + { 19, -77.51563f, -4022.026f, 123.2135f } + }, + WaypointMoveType::Run, + WaypointPathFlags::FlyingPath }; -size_t constexpr jinthaalorPathSize = std::extent<decltype(jinthaalorPath)>::value; class npc_sharpbeak : public CreatureScript { @@ -90,15 +97,7 @@ public: struct npc_sharpbeak_AI : public ScriptedAI { - npc_sharpbeak_AI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - } - - void Initialize() - { - endPoint = 0; - } + using ScriptedAI::ScriptedAI; void PassengerBoarded(Unit* /*who*/, int8 /*seatId*/, bool apply) override { @@ -108,26 +107,21 @@ public: switch (me->GetEntry()) { case NPC_SHARPBEAK_CAMP: - me->GetMotionMaster()->MoveSmoothPath(uint32(campPathSize), campPath, campPathSize, false); - endPoint = campPathSize; + me->GetMotionMaster()->MovePath(campPath, false); break; case NPC_SHARPBEAK_JINTHAALOR: - me->GetMotionMaster()->MoveSmoothPath(uint32(jinthaalorPathSize), jinthaalorPath, jinthaalorPathSize, false, true); - endPoint = jinthaalorPathSize; + me->GetMotionMaster()->MovePath(jinthaalorPath, false); break; } } - void MovementInform(uint32 type, uint32 pointId) override + void WaypointPathEnded(uint32 /*pointId*/, uint32 pathId) override { - if (type == EFFECT_MOTION_TYPE && pointId == endPoint) + if (pathId == PATH_HARDCODED_ID) { DoCast(SPELL_EJECT_ALL_PASSENGERS); } } - - private: - size_t endPoint; }; CreatureAI* GetAI(Creature* creature) const override diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index 0eb97cec0ee..19db563152d 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -25,6 +25,7 @@ Script Data End */ #include "ScriptedCreature.h" #include "MotionMaster.h" #include "ObjectAccessor.h" +#include "WaypointDefines.h" enum DumpyKeeshan { @@ -283,17 +284,20 @@ const Emote EmoteID[6] = EMOTE_ONESHOT_NO }; -uint32 const pathSize = 8; -Position const TownhallPath[pathSize] = +WaypointPath const TownhallPath = { - { -9221.39f, -2198.45f, 66.34846f }, - { -9221.39f, -2198.45f, 66.34846f }, - { -9226.39f, -2196.45f, 66.34846f }, - { -9231.64f, -2196.45f, 65.34846f }, - { -9231.39f, -2205.45f, 66.34846f }, - { -9231.64f, -2210.45f, 66.34846f }, - { -9244.14f, -2211.20f, 66.34846f }, - { -9255.31f, -2211.62f, 63.93340f } + 8, + { + { 0, -9221.39f, -2198.45f, 66.34846f }, + { 1, -9221.39f, -2198.45f, 66.34846f }, + { 2, -9226.39f, -2196.45f, 66.34846f }, + { 3, -9231.64f, -2196.45f, 65.34846f }, + { 4, -9231.39f, -2205.45f, 66.34846f }, + { 5, -9231.64f, -2210.45f, 66.34846f }, + { 6, -9244.14f, -2211.20f, 66.34846f }, + { 7, -9255.31f, -2211.62f, 63.93340f } + }, + WaypointMoveType::Walk }; class npc_redridge_citizen : public CreatureScript @@ -343,7 +347,7 @@ public: _events.Repeat(Seconds(30), Seconds(60)); break; case EVENT_LEAVE_TOWNHALL: - me->GetMotionMaster()->MoveSmoothPath(pathSize, TownhallPath, pathSize, true, false); + me->GetMotionMaster()->MovePath(TownhallPath, false); me->DespawnOrUnsummon(Seconds(30), Seconds(60)); break; default: diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp index d1fcd7c2cd9..6d9b2c8db5e 100644 --- a/src/server/scripts/Kalimdor/zone_mulgore.cpp +++ b/src/server/scripts/Kalimdor/zone_mulgore.cpp @@ -15,9 +15,10 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ScriptMgr.h" #include "MotionMaster.h" +#include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "WaypointDefines.h" /*###### ## npc_eagle_spirit @@ -29,17 +30,21 @@ enum EagleSpirit SPELL_SPIRIT_FORM = 69324 }; -Position const EagleSpiritflightPath[] = +WaypointPath const EagleSpiritflightPath = { - { -2884.155f, -71.08681f, 242.0678f }, - { -2720.592f, -111.0035f, 242.5955f }, - { -2683.951f, -382.9010f, 231.1792f }, - { -2619.148f, -484.9288f, 231.1792f }, - { -2543.868f, -525.3333f, 231.1792f }, - { -2465.321f, -502.4896f, 190.7347f }, - { -2343.872f, -401.8281f, -8.320873f } + 0, + { + { 0, -2884.155f, -71.08681f, 242.0678f }, + { 1, -2720.592f, -111.0035f, 242.5955f }, + { 2, -2683.951f, -382.9010f, 231.1792f }, + { 3, -2619.148f, -484.9288f, 231.1792f }, + { 4, -2543.868f, -525.3333f, 231.1792f }, + { 5, -2465.321f, -502.4896f, 190.7347f }, + { 6, -2343.872f, -401.8281f, -8.320873f } + }, + WaypointMoveType::Run, + WaypointPathFlags::FlyingPath }; -size_t const EagleSpiritflightPathSize = std::extent<decltype(EagleSpiritflightPath)>::value; class npc_eagle_spirit : public CreatureScript { @@ -55,16 +60,13 @@ public: if (!apply) return; - me->GetMotionMaster()->MoveSmoothPath(uint32(EagleSpiritflightPathSize), EagleSpiritflightPath, EagleSpiritflightPathSize, false, true); + me->GetMotionMaster()->MovePath(EagleSpiritflightPath, false); me->CastSpell(me, SPELL_SPIRIT_FORM); } - void MovementInform(uint32 type, uint32 pointId) override + void WaypointPathEnded(uint32 /*pointId*/, uint32 /*pathId*/) override { - if (type == EFFECT_MOTION_TYPE && pointId == EagleSpiritflightPathSize) - { - DoCast(SPELL_EJECT_ALL_PASSENGERS); - } + DoCast(SPELL_EJECT_ALL_PASSENGERS); } }; diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index 8bc988e8560..f2f259e102b 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -70,12 +70,6 @@ struct boss_erekem : public BossAI DoCast(me, SPELL_EARTH_SHIELD); } - void MovementInform(uint32 type, uint32 pointId) override - { - if (type == EFFECT_MOTION_TYPE && pointId == POINT_INTRO) - me->SetFacingTo(4.921828f); - } - void JustReachedHome() override { BossAI::JustReachedHome(); diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index bc68f6b08d3..a055f79ce6f 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -23,9 +23,10 @@ #include "Map.h" #include "MotionMaster.h" #include "Player.h" -#include "TaskScheduler.h" #include "ScriptMgr.h" +#include "TaskScheduler.h" #include "TemporarySummon.h" +#include "WaypointDefines.h" /* * TODO: @@ -69,70 +70,94 @@ Position const PortalIntroPositions[PortalIntroPositionsSize] = // sniff uint32 const EncouterPortalsCount = PortalPositionsSize + PortalElitePositionsSize; -uint32 const MoraggPathSize = 3; -Position const MoraggPath[MoraggPathSize] = // sniff +WaypointPath const MoraggPath = // sniff { - { 1893.895f, 728.1261f, 47.75016f }, - { 1892.997f, 738.4987f, 47.66684f }, - { 1889.76f, 758.1089f, 47.66684f } + POINT_INTRO, + { + { 0, 1893.895f, 728.1261f, 47.75016f }, + { 1, 1892.997f, 738.4987f, 47.66684f }, + { 2, 1889.76f, 758.1089f, 47.66684f } + }, + WaypointMoveType::Walk }; -uint32 const ErekemPathSize = 3; -Position const ErekemPath[ErekemPathSize] = // sniff +WaypointPath const ErekemPath = // sniff { - { 1871.456f, 871.0361f, 43.41524f }, - { 1874.948f, 859.5452f, 43.33349f }, - { 1877.245f, 851.967f, 43.3335f } + POINT_INTRO, + { + { 0, 1871.456f, 871.0361f, 43.41524f }, + { 1, 1874.948f, 859.5452f, 43.33349f }, + { 2, 1877.245f, 851.967f, 43.3335f, 4.921828f } + }, + WaypointMoveType::Walk }; -uint32 const ErekemGuardLeftPathSize = 3; -Position const ErekemGuardLeftPath[ErekemGuardLeftPathSize] = // sniff +WaypointPath const ErekemGuardLeftPath = // sniff { - { 1853.752f, 862.4528f, 43.41614f }, - { 1866.931f, 854.577f, 43.3335f }, - { 1872.973f, 850.7875f, 43.3335f } + POINT_INTRO, + { + { 0, 1853.752f, 862.4528f, 43.41614f }, + { 1, 1866.931f, 854.577f, 43.3335f }, + { 2, 1872.973f, 850.7875f, 43.3335f } + }, + WaypointMoveType::Walk }; -uint32 const ErekemGuardRightPathSize = 3; -Position const ErekemGuardRightPath[ErekemGuardRightPathSize] = // sniff +WaypointPath const ErekemGuardRightPath = // sniff { - { 1892.418f, 872.2831f, 43.41563f }, - { 1885.639f, 859.0245f, 43.3335f }, - { 1882.432f, 852.2423f, 43.3335f } + POINT_INTRO, + { + { 0, 1892.418f, 872.2831f, 43.41563f }, + { 1, 1885.639f, 859.0245f, 43.3335f }, + { 2, 1882.432f, 852.2423f, 43.3335f } + }, + WaypointMoveType::Walk }; -uint32 const IchoronPathSize = 5; -Position const IchoronPath[IchoronPathSize] = // sniff +WaypointPath const IchoronPath = // sniff { - { 1942.041f, 749.5228f, 30.95229f }, - { 1930.571f, 762.9065f, 31.98814f }, - { 1923.657f, 770.6718f, 34.07256f }, - { 1910.631f, 784.4096f, 37.09015f }, - { 1906.595f, 788.3828f, 37.99429f } + POINT_INTRO, + { + { 0, 1942.041f, 749.5228f, 30.95229f }, + { 1, 1930.571f, 762.9065f, 31.98814f }, + { 2, 1923.657f, 770.6718f, 34.07256f }, + { 3, 1910.631f, 784.4096f, 37.09015f }, + { 4, 1906.595f, 788.3828f, 37.99429f } + }, + WaypointMoveType::Walk }; -uint32 const LavanthorPathSize = 3; -Position const LavanthorPath[LavanthorPathSize] = // sniff +WaypointPath const LavanthorPath = // sniff { - { 1844.557f, 748.7083f, 38.74205f }, - { 1854.618f, 761.5295f, 38.65631f }, - { 1862.17f, 773.2255f, 38.74879f } + POINT_INTRO, + { + { 0, 1844.557f, 748.7083f, 38.74205f }, + { 1, 1854.618f, 761.5295f, 38.65631f }, + { 2, 1862.17f, 773.2255f, 38.74879f } + }, + WaypointMoveType::Walk }; -uint32 const XevozzPathSize = 3; -Position const XevozzPath[XevozzPathSize] = // sniff +WaypointPath const XevozzPath = // sniff { - { 1908.417f, 845.8502f, 38.71947f }, - { 1905.557f, 841.3157f, 38.65529f }, - { 1899.453f, 832.533f, 38.70752f } + POINT_INTRO, + { + { 0, 1908.417f, 845.8502f, 38.71947f }, + { 1, 1905.557f, 841.3157f, 38.65529f }, + { 2, 1899.453f, 832.533f, 38.70752f } + }, + WaypointMoveType::Walk }; -uint32 const ZuramatPathSize = 3; -Position const ZuramatPath[ZuramatPathSize] = // sniff +WaypointPath const ZuramatPath = // sniff { - { 1934.151f, 860.9463f, 47.29499f }, - { 1927.085f, 852.1342f, 47.19214f }, - { 1923.226f, 847.3297f, 47.15541f } + POINT_INTRO, + { + { 0, 1934.151f, 860.9463f, 47.29499f }, + { 1, 1927.085f, 852.1342f, 47.19214f }, + { 2, 1923.226f, 847.3297f, 47.15541f } + }, + WaypointMoveType::Walk }; enum Yells @@ -553,7 +578,7 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(3), [this](TaskContext task) { if (Creature* moragg = GetCreature(DATA_MORAGG)) - moragg->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, MoraggPath, MoraggPathSize, true); + moragg->GetMotionMaster()->MovePath(MoraggPath, false); task.Schedule(Seconds(8), [this](TaskContext /*task*/) { @@ -575,12 +600,12 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(5), [this](TaskContext task) { if (Creature* erekem = GetCreature(DATA_EREKEM)) - erekem->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ErekemPath, ErekemPathSize, true); + erekem->GetMotionMaster()->MovePath(ErekemPath, false); if (Creature* guard = instance->GetCreature(GetGuidData(DATA_EREKEM_GUARD_1))) - guard->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ErekemGuardLeftPath, ErekemGuardLeftPathSize, true); + guard->GetMotionMaster()->MovePath(ErekemGuardLeftPath, false); if (Creature* guard = instance->GetCreature(GetGuidData(DATA_EREKEM_GUARD_2))) - guard->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ErekemGuardRightPath, ErekemGuardRightPathSize, true); + guard->GetMotionMaster()->MovePath(ErekemGuardRightPath, false); task.Schedule(Seconds(6), [this](TaskContext task) { @@ -614,7 +639,7 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(3), [this](TaskContext task) { if (Creature* ichoron = GetCreature(DATA_ICHORON)) - ichoron->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, IchoronPath, IchoronPathSize, true); + ichoron->GetMotionMaster()->MovePath(IchoronPath, false); task.Schedule(Seconds(14), [this](TaskContext /*task*/) { @@ -636,7 +661,7 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(3), [this](TaskContext task) { if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR)) - lavanthor->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, LavanthorPath, LavanthorPathSize, true); + lavanthor->GetMotionMaster()->MovePath(LavanthorPath, false); task.Schedule(Seconds(8), [this](TaskContext /*task*/) { @@ -663,7 +688,7 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(4), [this](TaskContext task) { if (Creature* xevozz = GetCreature(DATA_XEVOZZ)) - xevozz->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, XevozzPath, XevozzPathSize, true); + xevozz->GetMotionMaster()->MovePath(XevozzPath, false); task.Schedule(Seconds(4), [this](TaskContext /*task*/) { @@ -689,7 +714,7 @@ class instance_violet_hold : public InstanceMapScript task.Schedule(Seconds(6), [this](TaskContext task) { if (Creature* zuramat = GetCreature(DATA_ZURAMAT)) - zuramat->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, ZuramatPath, ZuramatPathSize, true); + zuramat->GetMotionMaster()->MovePath(ZuramatPath, false); task.Schedule(Seconds(4), [this](TaskContext /*task*/) { diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 5111e238054..aa674a17e91 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -15,19 +15,20 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ScriptMgr.h" +#include "violet_hold.h" #include "GameObject.h" +#include "GameObjectAI.h" #include "InstanceScript.h" #include "Map.h" #include "MotionMaster.h" #include "Player.h" -#include "GameObjectAI.h" +#include "ScriptMgr.h" #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" #include "SpellAuraEffects.h" #include "SpellScript.h" #include "TemporarySummon.h" -#include "violet_hold.h" +#include "WaypointDefines.h" /* * TODO: @@ -294,55 +295,79 @@ Position const DefaultPortalWPs[] = { 1843.567017f, 804.288208f, 44.139091f } }; -Position const SaboteurMoraggPath[] = // sniff +static WaypointPath const SaboteurMoraggPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1885.71f, 799.8929f, 38.37241f }, - { 1889.505f, 762.3288f, 47.66684f }, - { 1894.542f, 742.1829f, 47.66684f }, - { 1894.603f, 739.9231f, 47.66684f }, + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1885.71f, 799.8929f, 38.37241f }, + { 2, 1889.505f, 762.3288f, 47.66684f }, + { 3, 1894.542f, 742.1829f, 47.66684f }, + { 4, 1894.603f, 739.9231f, 47.66684f } + }, + WaypointMoveType::Run }; -Position const SaboteurErekemPath[] = // sniff +static WaypointPath const SaboteurErekemPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1881.047f, 829.6866f, 38.64856f }, - { 1877.585f, 844.6685f, 38.49014f }, - { 1876.085f, 851.6685f, 42.99014f }, - { 1873.747f, 864.1373f, 43.33349f } + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1881.047f, 829.6866f, 38.64856f }, + { 2, 1877.585f, 844.6685f, 43.33349f }, + { 3, 1876.085f, 851.6685f, 42.99014f }, + { 4, 1873.747f, 864.1373f, 43.33349f } + }, + WaypointMoveType::Run }; -Position const SaboteurIchoronPath[] = // sniff +static WaypointPath const SaboteurIchoronPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1888.672f, 801.2348f, 38.42305f }, - { 1901.987f, 793.3254f, 38.65126f } + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1888.672f, 801.2348f, 38.42305f }, + { 2, 1901.987f, 793.3254f, 38.65126f } + }, + WaypointMoveType::Run }; -Position const SaboteurLavanthorPath[] = // sniff +static WaypointPath const SaboteurLavanthorPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1867.925f, 778.8035f, 38.64702f }, - { 1853.304f, 759.0161f, 38.65761f } + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1867.925f, 778.8035f, 38.64702f }, + { 2, 1853.304f, 759.0161f, 38.65761f } + }, + WaypointMoveType::Run }; -Position const SaboteurXevozzPath[] = // sniff +static WaypointPath const SaboteurXevozzPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1889.096f, 810.0487f, 38.43871f }, - { 1896.547f, 823.5473f, 38.72863f }, - { 1906.666f, 842.3111f, 38.63351f } + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1889.096f, 810.0487f, 38.43871f }, + { 2, 1896.547f, 823.5473f, 38.72863f }, + { 3, 1906.666f, 842.3111f, 38.63351f } + }, + WaypointMoveType::Run }; -Position const SaboteurZuramatPath[] = // sniff +static WaypointPath const SaboteurZuramatPath = // sniff { - { 1886.251f, 803.0743f, 38.42326f }, - { 1889.69f, 807.0032f, 38.39914f }, - { 1906.91f, 818.2574f, 38.86596f }, - { 1929.03f, 824.2713f, 46.09165f }, - { 1928.441f, 842.8891f, 47.15078f }, - { 1927.454f, 851.6091f, 47.19094f }, - { 1927.947f, 852.2986f, 47.19637f } + POINT_INTRO, + { + { 0, 1886.251f, 803.0743f, 38.42326f }, + { 1, 1889.69f, 807.0032f, 38.39914f }, + { 2, 1906.91f, 818.2574f, 38.86596f }, + { 3, 1929.03f, 824.2713f, 46.09165f }, + { 4, 1928.441f, 842.8891f, 47.15078f }, + { 5, 1927.454f, 851.6091f, 47.19094f }, + { 6, 1927.947f, 852.2986f, 47.19637f } + }, + WaypointMoveType::Run }; Position const SinclariPositions[] = // sniff @@ -563,33 +588,27 @@ struct npc_azure_saboteur : public ScriptedAI _bossId = _instance->GetData(DATA_2ND_BOSS); } - template <size_t N> - void StartSmoothPath(Position const (&path)[N]) - { - me->GetMotionMaster()->MoveSmoothPath(POINT_INTRO, &path[0], N, false); - } - void StartMovement() { switch (_bossId) { case DATA_MORAGG: - StartSmoothPath(SaboteurMoraggPath); + me->GetMotionMaster()->MovePath(SaboteurMoraggPath, false); break; case DATA_EREKEM: - StartSmoothPath(SaboteurErekemPath); + me->GetMotionMaster()->MovePath(SaboteurErekemPath, false); break; case DATA_ICHORON: - StartSmoothPath(SaboteurIchoronPath); + me->GetMotionMaster()->MovePath(SaboteurIchoronPath, false); break; case DATA_LAVANTHOR: - StartSmoothPath(SaboteurLavanthorPath); + me->GetMotionMaster()->MovePath(SaboteurLavanthorPath, false); break; case DATA_XEVOZZ: - StartSmoothPath(SaboteurXevozzPath); + me->GetMotionMaster()->MovePath(SaboteurXevozzPath, false); break; case DATA_ZURAMAT: - StartSmoothPath(SaboteurZuramatPath); + me->GetMotionMaster()->MovePath(SaboteurZuramatPath, false); break; } } @@ -603,9 +622,9 @@ struct npc_azure_saboteur : public ScriptedAI }); } - void MovementInform(uint32 type, uint32 pointId) override + void WaypointPathEnded(uint32 /*waypointId*/, uint32 pathId) override { - if (type == EFFECT_MOTION_TYPE && pointId == POINT_INTRO) + if (pathId == POINT_INTRO) { _scheduler.Schedule(0s, [this](TaskContext task) { |