From b3c6860b16da458f948b96da9a1b0e449db68bd3 Mon Sep 17 00:00:00 2001 From: EvilShadeZ Date: Tue, 15 Nov 2022 20:41:16 +0000 Subject: [PATCH] Fix Get/Set WindowsParameters being inverted compared to everything else For some reason, the parameters for Windows are inverted compared to everything else. By default these are the values: -1 (Unset) 0 (Closed/Off) 1 (On / Open) For vehicle windows, they are: -1 (Unset) 0 (Open) 1(Closed). This behaviour is making VehicleParameterValue work not as intended. I've added some checks to invert them. --- .../SAMP/Components/Vehicle.cs | 11 +++++++++++ src/SampSharp.GameMode/World/BaseVehicle.cs | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/SampSharp.Entities/SAMP/Components/Vehicle.cs b/src/SampSharp.Entities/SAMP/Components/Vehicle.cs index c01e5200..9321e689 100644 --- a/src/SampSharp.Entities/SAMP/Components/Vehicle.cs +++ b/src/SampSharp.Entities/SAMP/Components/Vehicle.cs @@ -618,6 +618,11 @@ public void SetWindowsParameters(bool driver, bool passenger, bool backLeft, boo public void SetWindowsParameters(VehicleParameterValue driver, VehicleParameterValue passenger, VehicleParameterValue backLeft, VehicleParameterValue backRight) { + if (driver != VehicleParameterValue.Unset) driver = (VehicleParameterValue)(driver == VehicleParameterValue.On ? 0 : 1); + if (passenger != VehicleParameterValue.Unset) passenger = (VehicleParameterValue)(passenger == VehicleParameterValue.On ? 0 : 1); + if (backLeft != VehicleParameterValue.Unset) backLeft = (VehicleParameterValue)(backLeft == VehicleParameterValue.On ? 0 : 1); + if (backRight != VehicleParameterValue.Unset) backRight = (VehicleParameterValue)(backRight == VehicleParameterValue.On ? 0 : 1); + GetComponent() .SetVehicleParamsCarWindows((int)driver, (int)passenger, (int)backLeft, (int)backRight); } @@ -633,6 +638,12 @@ public void GetWindowsParameters(out VehicleParameterValue driver, out VehiclePa GetComponent() .GetVehicleParamsCarWindows(out var tmpDriver, out var tmpPassenger, out var tmpBackLeft, out var tmpBackRight); + if (tmpDriver != -1) tmpDriver = (tmpDriver == 0 ? 1 : 0); + if (tmpPassenger != -1) tmpPassenger = (tmpPassenger == 0 ? 1 : 0); + if (tmpBackLeft != -1) tmpBackLeft = (tmpBackLeft == 0 ? 1 : 0); + if (tmpBackRight != -1) tmpBackRight = (tmpBackRight == 0 ? 1 : 0); + + driver = (VehicleParameterValue)tmpDriver; passenger = (VehicleParameterValue)tmpPassenger; backLeft = (VehicleParameterValue)tmpBackLeft; diff --git a/src/SampSharp.GameMode/World/BaseVehicle.cs b/src/SampSharp.GameMode/World/BaseVehicle.cs index 18d5bbe2..4453c80c 100644 --- a/src/SampSharp.GameMode/World/BaseVehicle.cs +++ b/src/SampSharp.GameMode/World/BaseVehicle.cs @@ -770,7 +770,13 @@ public virtual void SetWindowsParameters(VehicleParameterValue driver, VehiclePa { AssertNotDisposed(); - VehicleInternal.Instance.SetVehicleParamsCarWindows(Id, (int)driver, (int)passenger, (int)backleft, (int)backright); + if (driver != VehicleParameterValue.Unset) driver = (VehicleParameterValue)(driver == VehicleParameterValue.On ? 0 : 1); + if (passenger != VehicleParameterValue.Unset) passenger = (VehicleParameterValue)(passenger == VehicleParameterValue.On ? 0 : 1); + if (backleft != VehicleParameterValue.Unset) backleft = (VehicleParameterValue)(backleft == VehicleParameterValue.On ? 0 : 1); + if (backright != VehicleParameterValue.Unset) backright = (VehicleParameterValue)(backright == VehicleParameterValue.On ? 0 : 1); + + + VehicleInternal.Instance.SetVehicleParamsCarWindows(Id,(int)driver,(int)passenger,(int)backleft,(int)backright); } /// Gets the windows parameters. @@ -784,8 +790,15 @@ public virtual void GetWindowsParameters(out VehicleParameterValue driver, out V AssertNotDisposed(); VehicleInternal.Instance.GetVehicleParamsCarWindows(Id, out var tmpDriver, out var tmpPassenger, out var tmpBackleft, out var tmpBackright); - driver = (VehicleParameterValue)tmpDriver; - passenger = (VehicleParameterValue)tmpPassenger; + if (tmpDriver != -1) tmpDriver = (tmpDriver == 0 ? 1 : 0); + if (tmpPassenger != -1) tmpPassenger = (tmpPassenger == 0 ? 1 : 0); + if (tmpBackleft != -1) tmpBackleft = (tmpBackleft == 0 ? 1 : 0); + if (tmpBackright != -1) tmpBackright = (tmpBackright == 0 ? 1 : 0); + + + + driver = (VehicleParameterValue) tmpDriver; + passenger = (VehicleParameterValue)tmpPassenger; backleft = (VehicleParameterValue)tmpBackleft; backright = (VehicleParameterValue)tmpBackright; }