Don't sync non-existent extras

This commit is contained in:
Sardelka9515
2023-03-20 18:20:07 +08:00
parent 6f2c0077cb
commit e6718cec58
4 changed files with 21 additions and 7 deletions

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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;
} }