From 8ac9ec27e4909b5fb629eedd3c0c0d5b56a100db Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Tue, 9 Jul 2024 19:34:57 -0700 Subject: [PATCH] fix: Fixes boat component locations when moving (#1868) --- Projects/UOContent/Multis/Boats/BaseBoat.cs | 32 ++++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Projects/UOContent/Multis/Boats/BaseBoat.cs b/Projects/UOContent/Multis/Boats/BaseBoat.cs index 7ebe612fc..55131dcd9 100644 --- a/Projects/UOContent/Multis/Boats/BaseBoat.cs +++ b/Projects/UOContent/Multis/Boats/BaseBoat.cs @@ -7,6 +7,7 @@ using Server.Engines.Spawners; using Server.Items; using Server.Multis.Boats; using Server.Network; +using CalcMoves = Server.Movement.Movement; namespace Server.Multis { @@ -282,15 +283,15 @@ namespace Server.Multis SPlank.SetFacing(_facing); } - var xOffset = X; - var yOffset = Y; - Movement.Movement.Offset(_facing, ref xOffset, ref yOffset); + var xOffset = 0; + var yOffset = 0; + CalcMoves.Offset(_facing, ref xOffset, ref yOffset); if (TillerMan != null) { TillerMan.Location = new Point3D( - xOffset * TillerManDistance + (_facing == Direction.North ? 1 : 0), - yOffset * TillerManDistance, + X + xOffset * TillerManDistance + (_facing == Direction.North ? 1 : 0), + Y + yOffset * TillerManDistance, TillerMan.Z ); TillerMan.SetFacing(_facing); @@ -299,7 +300,7 @@ namespace Server.Multis if (Hold != null) { - Hold.Location = new Point3D(xOffset * HoldDistance, yOffset * HoldDistance, Hold.Z); + Hold.Location = new Point3D(X + xOffset * HoldDistance, Y + yOffset * HoldDistance, Hold.Z); Hold.SetFacing(_facing); } } @@ -2085,8 +2086,8 @@ namespace Server.Multis PPlank?.SetFacing(facing); SPlank?.SetFacing(facing); - var xOffset = X; - var yOffset = Y; + var xOffset = 0; + var yOffset = 0; Movement.Movement.Offset(facing, ref xOffset, ref yOffset); var count = ((_facing - old) & 0x7) / 2; @@ -2112,15 +2113,15 @@ namespace Server.Multis if (TillerMan != null) { TillerMan.Location = new Point3D( - xOffset * TillerManDistance + (facing == Direction.North ? 1 : 0), - yOffset * TillerManDistance, + X + xOffset * TillerManDistance + (facing == Direction.North ? 1 : 0), + Y + yOffset * TillerManDistance, TillerMan.Z ); } if (Hold != null) { - Hold.Location = new Point3D(xOffset * HoldDistance, yOffset * HoldDistance, Hold.Z); + Hold.Location = new Point3D(X + xOffset * HoldDistance, Y + yOffset * HoldDistance, Hold.Z); } if (PPlank != null) @@ -2157,6 +2158,15 @@ namespace Server.Multis { EventSink.WorldLoad += UpdateAllComponents; EventSink.WorldSave += UpdateAllComponents; + + // Fix tiler/hold/plank locations + foreach (var item in World.Items.Values) + { + if (item is BaseBoat boat) + { + boat.UpdateComponents(); + } + } } private class TurnTimer : Timer