diff --git a/Client/Entities/Sync/VehicleSync.cs b/Client/Entities/Sync/VehicleSync.cs index 3a2ac8b..3f1cd3b 100644 --- a/Client/Entities/Sync/VehicleSync.cs +++ b/Client/Entities/Sync/VehicleSync.cs @@ -70,7 +70,7 @@ namespace CoopClient.Entities internal bool VehAreLightsOn { get; set; } internal bool VehAreHighBeamsOn { get; set; } internal byte VehLandingGear { get; set; } - + internal bool VehRoofOpened { get; set; } internal bool VehIsSireneActive { get; set; } private VehicleDoors[] LastVehDoors; internal VehicleDoors[] VehDoors { get; set; } @@ -273,6 +273,15 @@ namespace CoopClient.Entities MainVehicle.SoundHorn(1); } + if (MainVehicle.HasRoof) + { + bool roofOpened = MainVehicle.RoofState == VehicleRoofState.Opened || MainVehicle.RoofState == VehicleRoofState.Opening; + if (roofOpened != VehRoofOpened) + { + MainVehicle.RoofState = VehRoofOpened ? VehicleRoofState.Opening : VehicleRoofState.Closing; + } + } + Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle, CurrentVehicleSpeed > 0.2f && LastVehicleSpeed > CurrentVehicleSpeed); if (LastSyncWasFull) diff --git a/Client/Main.cs b/Client/Main.cs index 1570d71..d406dbd 100644 --- a/Client/Main.cs +++ b/Client/Main.cs @@ -251,11 +251,11 @@ namespace CoopClient } Players.Clear(); - foreach (KeyValuePair Npc in NPCs) + foreach (KeyValuePair npc in NPCs) { - Npc.Value.Character?.CurrentVehicle?.Delete(); - Npc.Value.Character?.Kill(); - Npc.Value.Character?.Delete(); + npc.Value.Character?.CurrentVehicle?.Delete(); + npc.Value.Character?.Kill(); + npc.Value.Character?.Delete(); } NPCs.Clear(); @@ -332,6 +332,7 @@ namespace CoopClient DebugSyncPed.VehicleDead = (flags.Value & (byte)VehicleDataFlags.IsDead) > 0; DebugSyncPed.IsHornActive = (flags.Value & (byte)VehicleDataFlags.IsHornActive) > 0; DebugSyncPed.Transformed = (flags.Value & (byte)VehicleDataFlags.IsTransformed) > 0; + DebugSyncPed.VehRoofOpened = (flags.Value & (byte)VehicleDataFlags.RoofOpened) > 0; DebugSyncPed.VehLandingGear = veh.IsPlane ? (byte)veh.LandingGearState : (byte)0; if (DebugSyncPed.MainVehicle != null && DebugSyncPed.MainVehicle.Exists() && player.IsInVehicle()) diff --git a/Client/Networking.cs b/Client/Networking.cs index 60f9e98..d10d8ab 100644 --- a/Client/Networking.cs +++ b/Client/Networking.cs @@ -340,6 +340,7 @@ namespace CoopClient player.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0; player.IsHornActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsHornActive) > 0; player.Transformed = (packet.Flag.Value & (byte)VehicleDataFlags.IsTransformed) > 0; + player.VehRoofOpened = (packet.Flag.Value & (byte)VehicleDataFlags.RoofOpened) > 0; player.IsInVehicle = true; player.LastSyncWasFull = true; @@ -397,6 +398,7 @@ namespace CoopClient player.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0; player.IsHornActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsHornActive) > 0; player.Transformed = (packet.Flag.Value & (byte)VehicleDataFlags.IsTransformed) > 0; + player.VehRoofOpened = (packet.Flag.Value & (byte)VehicleDataFlags.RoofOpened) > 0; player.IsInVehicle = true; player.LastSyncWasFull = false; @@ -639,6 +641,7 @@ namespace CoopClient npc.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0; npc.IsHornActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsHornActive) > 0; npc.Transformed = (packet.Flag.Value & (byte)VehicleDataFlags.IsTransformed) > 0; + npc.VehRoofOpened = (packet.Flag.Value & (byte)VehicleDataFlags.RoofOpened) > 0; npc.IsInVehicle = true; npc.LastSyncWasFull = true; @@ -674,6 +677,7 @@ namespace CoopClient VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0, IsHornActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsHornActive) > 0, Transformed = (packet.Flag.Value & (byte)VehicleDataFlags.IsTransformed) > 0, + VehRoofOpened = (packet.Flag.Value & (byte)VehicleDataFlags.RoofOpened) > 0, IsInVehicle = true, LastSyncWasFull = true, diff --git a/Client/Packets.cs b/Client/Packets.cs index 09da01b..050d258 100644 --- a/Client/Packets.cs +++ b/Client/Packets.cs @@ -164,7 +164,8 @@ namespace CoopClient IsSirenActive = 1 << 3, IsDead = 1 << 4, IsHornActive = 1 << 5, - IsTransformed = 1 << 6 + IsTransformed = 1 << 6, + RoofOpened = 1 << 7 } /// diff --git a/Client/Util.cs b/Client/Util.cs index f550faf..50fafd0 100644 --- a/Client/Util.cs +++ b/Client/Util.cs @@ -207,6 +207,11 @@ namespace CoopClient flags |= (byte)VehicleDataFlags.IsTransformed; } + if (veh.HasRoof && (veh.RoofState == VehicleRoofState.Opened || veh.RoofState == VehicleRoofState.Opening)) + { + flags |= (byte)VehicleDataFlags.RoofOpened; + } + return flags; } diff --git a/Server/Packets.cs b/Server/Packets.cs index f33179c..4d022f6 100644 --- a/Server/Packets.cs +++ b/Server/Packets.cs @@ -107,7 +107,8 @@ namespace CoopServer IsSirenActive = 1 << 3, IsDead = 1 << 4, IsHornActive = 1 << 5, - IsTransformed = 1 << 6 + IsTransformed = 1 << 6, + RoofOpened = 1 << 7 } [ProtoContract]