From c20838ceaa5bb5fecda8de332fbe3dfcc09d5224 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Fri, 5 Feb 2021 10:38:05 +0100 Subject: [PATCH] Core/Movement: allow waypoints to have orientation values of 0 --- sql/updates/world/4.3.4/2021_02_05_00_world.sql | 2 ++ .../WaypointMovementGenerator.cpp | 5 ++--- .../game/Movement/Waypoints/WaypointDefines.h | 6 ++++-- .../game/Movement/Waypoints/WaypointManager.cpp | 16 ++++++++++++---- 4 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 sql/updates/world/4.3.4/2021_02_05_00_world.sql diff --git a/sql/updates/world/4.3.4/2021_02_05_00_world.sql b/sql/updates/world/4.3.4/2021_02_05_00_world.sql new file mode 100644 index 00000000000..5fe36aee1a9 --- /dev/null +++ b/sql/updates/world/4.3.4/2021_02_05_00_world.sql @@ -0,0 +1,2 @@ +ALTER TABLE `waypoint_data` CHANGE `orientation` `orientation` FLOAT DEFAULT NULL NULL; +UPDATE `waypoint_data` SET `orientation`= NULL WHERE `orientation`= 0; diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 996b9d0ed65..7272231d300 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -214,9 +214,8 @@ void WaypointMovementGenerator::StartMove(Creature* creature, bool rel init.MoveTo(waypoint.X, waypoint.Y, waypoint.Z); } - //! Accepts angles such as 0.00001 and -0.00001, 0 must be ignored, default value in waypoint table - if (waypoint.Orientation && waypoint.Delay > 0) - init.SetFacing(waypoint.Orientation); + if (waypoint.Orientation.is_initialized() && waypoint.Delay > 0) + init.SetFacing(*waypoint.Orientation); switch (waypoint.MoveType) { diff --git a/src/server/game/Movement/Waypoints/WaypointDefines.h b/src/server/game/Movement/Waypoints/WaypointDefines.h index b455d4cfbf7..cce9799b695 100644 --- a/src/server/game/Movement/Waypoints/WaypointDefines.h +++ b/src/server/game/Movement/Waypoints/WaypointDefines.h @@ -20,6 +20,7 @@ #include "Define.h" #include "G3D/Vector3.h" +#include "Optional.h" #include enum WaypointMoveType @@ -34,7 +35,7 @@ enum WaypointMoveType struct WaypointNode { - WaypointNode() : Id(0), X(0.f), Y(0.f), Z(0.f), Orientation(0.f), Velocity(0.f), Delay(0), EventId(0), MoveType(WAYPOINT_MOVE_TYPE_RUN), EventChance(0) { } + WaypointNode() : Id(0), X(0.f), Y(0.f), Z(0.f), Velocity(0.f), Delay(0), EventId(0), MoveType(WAYPOINT_MOVE_TYPE_RUN), EventChance(0) { } WaypointNode(uint32 id, float x, float y, float z, float orientation = 0.f, float velocity = 0.f, uint32 delay = 0) : Id(id), X(x), Y(y), Z(z), Orientation(orientation), Velocity(velocity), Delay(delay) { @@ -44,7 +45,8 @@ struct WaypointNode } uint32 Id; - float X, Y, Z, Orientation; + float X, Y, Z; + Optional Orientation; float Velocity; int32 Delay; uint32 EventId; diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp index 5ff4f2c8156..848b9df49c8 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.cpp +++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp @@ -43,7 +43,10 @@ void WaypointMgr::Load() float x = fields[2].GetFloat(); float y = fields[3].GetFloat(); float z = fields[4].GetFloat(); - float o = fields[5].GetFloat(); + Optional o; + if (!fields[5].IsNull()) + o = fields[5].GetFloat(); + float velocity = fields[6].GetFloat(); Trinity::NormalizeMapCoord(x); @@ -54,7 +57,8 @@ void WaypointMgr::Load() waypoint.X = x; waypoint.Y = y; waypoint.Z = z; - waypoint.Orientation = o; + if (o.is_initialized()) + waypoint.Orientation = o; waypoint.Velocity = velocity; waypoint.MoveType = fields[7].GetUInt32(); @@ -163,7 +167,10 @@ void WaypointMgr::ReloadPath(uint32 id) float x = fields[1].GetFloat(); float y = fields[2].GetFloat(); float z = fields[3].GetFloat(); - float o = fields[4].GetFloat(); + Optional o; + if (!fields[4].IsNull()) + o = fields[4].GetFloat(); + float velocity = fields[5].GetFloat(); Trinity::NormalizeMapCoord(x); @@ -174,7 +181,8 @@ void WaypointMgr::ReloadPath(uint32 id) waypoint.X = x; waypoint.Y = y; waypoint.Z = z; - waypoint.Orientation = o; + if (o.is_initialized()) + waypoint.Orientation = o; waypoint.Velocity = velocity; waypoint.MoveType = fields[6].GetUInt32();