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