Don't sync non-existent extras
This commit is contained in:
@ -136,7 +136,7 @@ namespace RageCoop.Client
|
|||||||
packet.LockStatus = veh.LockStatus;
|
packet.LockStatus = veh.LockStatus;
|
||||||
packet.LicensePlate = Call<string>(GET_VEHICLE_NUMBER_PLATE_TEXT, veh);
|
packet.LicensePlate = Call<string>(GET_VEHICLE_NUMBER_PLATE_TEXT, veh);
|
||||||
packet.Livery = Call<int>(GET_VEHICLE_LIVERY, veh);
|
packet.Livery = Call<int>(GET_VEHICLE_LIVERY, veh);
|
||||||
packet.ExtrasMask = v.MainVehicle.GetVehicleExtras();
|
packet.ExtrasMask = v.GetVehicleExtras();
|
||||||
packet.RadioStation = v.MainVehicle == LastV
|
packet.RadioStation = v.MainVehicle == LastV
|
||||||
? Util.GetPlayerRadioIndex() : byte.MaxValue;
|
? Util.GetPlayerRadioIndex() : byte.MaxValue;
|
||||||
if (packet.EngineHealth > v.LastEngineHealth) packet.Flags |= VehicleDataFlags.Repaired;
|
if (packet.EngineHealth > v.LastEngineHealth) packet.Flags |= VehicleDataFlags.Repaired;
|
||||||
|
@ -59,6 +59,7 @@ namespace RageCoop.Client
|
|||||||
internal bool IsSubmarineCar;
|
internal bool IsSubmarineCar;
|
||||||
internal bool IsDeluxo;
|
internal bool IsDeluxo;
|
||||||
internal bool IsTrain;
|
internal bool IsTrain;
|
||||||
|
internal ushort AvalibleExtras;
|
||||||
|
|
||||||
[DebugTunable]
|
[DebugTunable]
|
||||||
static float RotCalMult = 10f;
|
static float RotCalMult = 10f;
|
||||||
@ -72,9 +73,8 @@ namespace RageCoop.Client
|
|||||||
private (int, int)[] _lastVehicleMods = Array.Empty<(int, int)>();
|
private (int, int)[] _lastVehicleMods = Array.Empty<(int, int)>();
|
||||||
private bool _lastHornActive;
|
private bool _lastHornActive;
|
||||||
private bool _lastTransformed;
|
private bool _lastTransformed;
|
||||||
internal int _lastLivery = -1;
|
private int _lastLivery = -1;
|
||||||
private Vector3 _predictedPosition;
|
private Vector3 _predictedPosition;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region OUTGOING
|
#region OUTGOING
|
||||||
|
@ -4,6 +4,7 @@ using GTA;
|
|||||||
using GTA.Math;
|
using GTA.Math;
|
||||||
using GTA.Native;
|
using GTA.Native;
|
||||||
using RageCoop.Core;
|
using RageCoop.Core;
|
||||||
|
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
|
||||||
|
|
||||||
namespace RageCoop.Client
|
namespace RageCoop.Client
|
||||||
{
|
{
|
||||||
@ -159,7 +160,12 @@ namespace RageCoop.Client
|
|||||||
{
|
{
|
||||||
for (int i = 1; i < 15; i++)
|
for (int i = 1; i < 15; i++)
|
||||||
{
|
{
|
||||||
var on = (ExtrasMask & (ushort)(1 << i)) != 0;
|
var flag = (ushort)(1 << i);
|
||||||
|
var hasExtra = (AvalibleExtras & (ushort)(1 << i)) != 0;
|
||||||
|
if (!hasExtra)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var on = (ExtrasMask & flag) != 0;
|
||||||
Call(SET_VEHICLE_EXTRA, MainVehicle.Handle, i, !on);
|
Call(SET_VEHICLE_EXTRA, MainVehicle.Handle, i, !on);
|
||||||
}
|
}
|
||||||
_lastExtras = ExtrasMask;
|
_lastExtras = ExtrasMask;
|
||||||
@ -255,6 +261,12 @@ namespace RageCoop.Client
|
|||||||
IsSubmarineCar = MainVehicle.IsSubmarineCar;
|
IsSubmarineCar = MainVehicle.IsSubmarineCar;
|
||||||
IsDeluxo = MainVehicle.Model == 1483171323;
|
IsDeluxo = MainVehicle.Model == 1483171323;
|
||||||
IsTrain = MainVehicle.IsTrain;
|
IsTrain = MainVehicle.IsTrain;
|
||||||
|
AvalibleExtras = 0;
|
||||||
|
for (int i = 1; i < 15; i++)
|
||||||
|
{
|
||||||
|
if (Call<bool>(DOES_EXTRA_EXIST, MainVehicle.Handle, i))
|
||||||
|
AvalibleExtras |= (ushort)(1 << i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -58,13 +58,15 @@ namespace RageCoop.Client
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ushort GetVehicleExtras(this Vehicle veh)
|
public static ushort GetVehicleExtras(this SyncedVehicle sv)
|
||||||
{
|
{
|
||||||
ushort result = 0;
|
ushort result = 0;
|
||||||
for (int i = 1; i < 15; i++)
|
for (int i = 1; i < 15; i++)
|
||||||
{
|
{
|
||||||
if (Call<bool>(IS_VEHICLE_EXTRA_TURNED_ON, veh.Handle, i))
|
var flag = (ushort)(1 << i);
|
||||||
result |= (ushort)(1 << i);
|
var hasExtra = (sv.AvalibleExtras & (ushort)(1 << i)) != 0;
|
||||||
|
if (hasExtra && Call<bool>(IS_VEHICLE_EXTRA_TURNED_ON, sv.MainVehicle.Handle, i))
|
||||||
|
result |= flag;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user