From db7146e00ea44da2ef0f76b8e10e5b7a130721c5 Mon Sep 17 00:00:00 2001 From: Hydraxonn <46947651+Hayden-Purificato@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:13:43 -0400 Subject: [PATCH] Add Xenon Headlights Color Sync (#45) --- Client/Scripts/Networking/Receive.cs | 1 + Client/Scripts/Networking/Send.cs | 1 + .../Sync/Entities/Vehicle/SyncedVehicle.Variables.cs | 2 ++ Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.cs | 6 ++++++ Core/Packets/VehicleSync.cs | 6 +++++- 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Client/Scripts/Networking/Receive.cs b/Client/Scripts/Networking/Receive.cs index a94f0ec9..b59a1f35 100644 --- a/Client/Scripts/Networking/Receive.cs +++ b/Client/Scripts/Networking/Receive.cs @@ -349,6 +349,7 @@ private static void VehicleSync(Packets.VehicleSync packet) v.RadioStation = packet.RadioStation; v.LicensePlate = packet.LicensePlate; v.Livery = packet.Livery; + v.HeadlightColor = packet.HeadlightColor; v.ExtrasMask = packet.ExtrasMask; } v.SetLastSynced(full); diff --git a/Client/Scripts/Networking/Send.cs b/Client/Scripts/Networking/Send.cs index a631d4c0..1d6cf5d7 100644 --- a/Client/Scripts/Networking/Send.cs +++ b/Client/Scripts/Networking/Send.cs @@ -136,6 +136,7 @@ public static void SendVehicle(SyncedVehicle v, bool full) packet.LockStatus = veh.LockStatus; packet.LicensePlate = Call(GET_VEHICLE_NUMBER_PLATE_TEXT, veh); packet.Livery = Call(GET_VEHICLE_LIVERY, veh); + packet.HeadlightColor = (byte)Call(GET_VEHICLE_XENON_LIGHT_COLOR_INDEX, veh); packet.ExtrasMask = v.GetVehicleExtras(); packet.RadioStation = v.MainVehicle == LastV ? Util.GetPlayerRadioIndex() : byte.MaxValue; diff --git a/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.Variables.cs b/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.Variables.cs index aa38549e..ead87239 100644 --- a/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.Variables.cs +++ b/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.Variables.cs @@ -30,6 +30,7 @@ public partial class SyncedVehicle internal byte RadioStation = 255; internal string LicensePlate { get; set; } internal int Livery { get; set; } = -1; + internal byte HeadlightColor { get; set; } = 255; internal VehicleDataFlags Flags { get; set; } internal ushort ExtrasMask; @@ -74,6 +75,7 @@ public partial class SyncedVehicle private bool _lastHornActive; private bool _lastTransformed; private int _lastLivery = -1; + private byte _lastHeadlightColor = 255; private Vector3 _predictedPosition; #endregion diff --git a/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.cs b/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.cs index ce290bd7..6fa5ee4e 100644 --- a/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.cs +++ b/Client/Scripts/Sync/Entities/Vehicle/SyncedVehicle.cs @@ -3,6 +3,7 @@ using GTA; using GTA.Math; using GTA.Native; +using GTA.UI; using RageCoop.Core; using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; @@ -151,6 +152,11 @@ internal override void Update() _lastLivery = Livery; } + if (_lastHeadlightColor != HeadlightColor) + { + Call(SET_VEHICLE_XENON_LIGHT_COLOR_INDEX, MainVehicle.Handle, HeadlightColor); + _lastHeadlightColor = HeadlightColor; + } MainVehicle.SetDamageModel(DamageModel); if (MainVehicle.Handle == V?.Handle && Util.GetPlayerRadioIndex() != RadioStation) diff --git a/Core/Packets/VehicleSync.cs b/Core/Packets/VehicleSync.cs index 588e7f78..ed40cad5 100644 --- a/Core/Packets/VehicleSync.cs +++ b/Core/Packets/VehicleSync.cs @@ -100,6 +100,8 @@ protected override void Serialize(NetOutgoingMessage m) m.Write((byte)(Livery + 1)); + m.Write(HeadlightColor); + m.Write(ExtrasMask); } } @@ -173,6 +175,8 @@ public override void Deserialize(NetIncomingMessage m) Livery = m.ReadByte() - 1; + HeadlightColor = m.ReadByte(); + ExtrasMask = m.ReadUInt16(); } @@ -198,7 +202,7 @@ public override void Deserialize(NetIncomingMessage m) public VehicleLockStatus LockStatus { get; set; } public int Livery { get; set; } = -1; - + public byte HeadlightColor { get; set; } = 255; public byte RadioStation { get; set; } = 255; public string LicensePlate { get; set; }