diff options
4 files changed, 35 insertions, 4 deletions
diff --git a/sql/updates/world/master/2024_04_02_00_world.sql b/sql/updates/world/master/2024_04_02_00_world.sql new file mode 100644 index 00000000000..a40494c0ea4 --- /dev/null +++ b/sql/updates/world/master/2024_04_02_00_world.sql @@ -0,0 +1,17 @@ +DELIMITER ;; +CREATE PROCEDURE waypoint_path_velocity_2024_04_02_00() BEGIN + IF NOT EXISTS (SELECT * FROM `information_schema`.`columns` WHERE `table_schema`=SCHEMA() AND `table_name`='waypoint_path' AND `column_name`='Velocity') THEN + + ALTER TABLE `waypoint_path` + ADD COLUMN `Velocity` float NULL DEFAULT NULL AFTER `Flags`; + + END IF; +END;; + +DELIMITER ; +CALL waypoint_path_velocity_2024_04_02_00(); + +DROP PROCEDURE IF EXISTS waypoint_path_velocity_2024_04_02_00; + +UPDATE `waypoint_path` SET `Velocity`=4.0 WHERE `PathId`=9301100; +UPDATE `waypoint_path` SET `Velocity`=35.0 WHERE `PathId` IN(11432300, 11432301, 11432302, 11432303, 11432304); diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 4676ebb8141..afbaae40562 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -417,6 +417,9 @@ void WaypointMovementGenerator<Creature>::StartMove(Creature* owner, bool relaun break; } + if (GetPath()->Velocity && !_speed) + _speed = GetPath()->Velocity; + if (_speed) init.SetVelocity(*_speed); diff --git a/src/server/game/Movement/Waypoints/WaypointDefines.h b/src/server/game/Movement/Waypoints/WaypointDefines.h index af47ccfd0db..ebd31ea3da7 100644 --- a/src/server/game/Movement/Waypoints/WaypointDefines.h +++ b/src/server/game/Movement/Waypoints/WaypointDefines.h @@ -81,6 +81,7 @@ struct WaypointPath uint32 Id = 0; WaypointMoveType MoveType = WaypointMoveType::Walk; EnumFlag<WaypointPathFlags> Flags = WaypointPathFlags::None; + Optional<float> Velocity; }; #endif diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp index eec635bf6d1..dd21721a66c 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.cpp +++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp @@ -38,8 +38,8 @@ void WaypointMgr::_LoadPaths() _pathStore.clear(); - // 0 1 2 - QueryResult result = WorldDatabase.Query("SELECT PathId, MoveType, Flags FROM waypoint_path"); + // 0 1 2 3 + QueryResult result = WorldDatabase.Query("SELECT PathId, MoveType, Flags, Velocity FROM waypoint_path"); if (!result) { @@ -88,15 +88,25 @@ void WaypointMgr::LoadPathFromDB(Field* fields) uint32 pathId = fields[0].GetUInt32(); WaypointPath& path = _pathStore[pathId]; - path.Id = pathId; - path.MoveType = WaypointMoveType(fields[1].GetUInt8()); + path.MoveType = WaypointMoveType(fields[1].GetUInt8());; if (path.MoveType >= WaypointMoveType::Max) { TC_LOG_ERROR("sql.sql", "PathId {} in `waypoint_path` has invalid MoveType {}, ignoring", pathId, AsUnderlyingType(path.MoveType)); return; } + + path.Id = pathId; path.Flags = WaypointPathFlags(fields[2].GetUInt8()); + + if (!fields[3].IsNull()) + { + if (fields[3].GetFloat() > 0.0f) + path.Velocity = fields[3].GetFloat(); + else + TC_LOG_ERROR("sql.sql", "PathId {} in `waypoint_path` has invalid velocity {}, using default velocity instead", pathId, fields[3].GetFloat()); + } + path.Nodes.clear(); } |
