Some changes and bug fixes
This commit is contained in:
@ -40,15 +40,26 @@ namespace CoopClient.Entities.Player
|
|||||||
private void DisplayOnFoot()
|
private void DisplayOnFoot()
|
||||||
{
|
{
|
||||||
if (Character.IsInVehicle())
|
if (Character.IsInVehicle())
|
||||||
|
{
|
||||||
|
Character.Task.ClearAll();
|
||||||
|
Character.Task.ClearSecondary();
|
||||||
|
|
||||||
|
if (MainVehicle == null)
|
||||||
{
|
{
|
||||||
Character.Task.LeaveVehicle();
|
Character.Task.LeaveVehicle();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (MainVehicle != null)
|
|
||||||
{
|
{
|
||||||
|
MainVehicle.Doors[(VehicleDoorIndex)VehicleSeatIndex + 1]?.Open(true, true);
|
||||||
|
Character.Task.LeaveVehicle(MainVehicle, false);
|
||||||
|
|
||||||
MainVehicle = null;
|
MainVehicle = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Character.PositionNoOffset = Position;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsInParachuteFreeFall)
|
if (IsInParachuteFreeFall)
|
||||||
{
|
{
|
||||||
Character.PositionNoOffset = Vector3.Lerp(Character.Position, Position + Velocity, 0.5f);
|
Character.PositionNoOffset = Vector3.Lerp(Character.Position, Position + Velocity, 0.5f);
|
||||||
@ -109,7 +120,7 @@ namespace CoopClient.Entities.Player
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!IsOnLadder && Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, Character.Handle, ETasks.CLIMB_LADDER))
|
if (!IsOnLadder && Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, Character.Handle, ETasks.CLIMB_LADDER))
|
||||||
{
|
{
|
||||||
Character.Task.ClearAllImmediately();
|
Character.Task.ClearAllImmediately();
|
||||||
}
|
}
|
||||||
@ -125,7 +136,7 @@ namespace CoopClient.Entities.Player
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!IsVaulting && Character.IsVaulting)
|
if (!IsVaulting && Character.IsVaulting)
|
||||||
{
|
{
|
||||||
Character.Task.ClearAllImmediately();
|
Character.Task.ClearAllImmediately();
|
||||||
}
|
}
|
||||||
@ -176,7 +187,7 @@ namespace CoopClient.Entities.Player
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (!IsRagdoll && Character.IsRagdoll)
|
if (!IsRagdoll && Character.IsRagdoll)
|
||||||
{
|
{
|
||||||
Character.CanRagdoll = false;
|
Character.CanRagdoll = false;
|
||||||
Character.Task.ClearAllImmediately();
|
Character.Task.ClearAllImmediately();
|
||||||
|
@ -10,8 +10,6 @@ namespace CoopClient.Entities.Player
|
|||||||
public partial class EntitiesPlayer
|
public partial class EntitiesPlayer
|
||||||
{
|
{
|
||||||
#region -- VARIABLES --
|
#region -- VARIABLES --
|
||||||
private ulong _vehicleStopTime { get; set; }
|
|
||||||
|
|
||||||
internal bool IsInVehicle { get; set; }
|
internal bool IsInVehicle { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The latest vehicle model hash (may not have been applied yet)
|
/// The latest vehicle model hash (may not have been applied yet)
|
||||||
@ -62,6 +60,8 @@ namespace CoopClient.Entities.Player
|
|||||||
internal VehicleDamageModel VehDamageModel { get; set; }
|
internal VehicleDamageModel VehDamageModel { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private ulong _lastVehicleEnter = 0;
|
||||||
|
|
||||||
private void DisplayInVehicle()
|
private void DisplayInVehicle()
|
||||||
{
|
{
|
||||||
if (MainVehicle == null || !MainVehicle.Exists() || MainVehicle.Model.Hash != VehicleModelHash)
|
if (MainVehicle == null || !MainVehicle.Exists() || MainVehicle.Model.Hash != VehicleModelHash)
|
||||||
@ -89,6 +89,7 @@ namespace CoopClient.Entities.Player
|
|||||||
if (!vehFound)
|
if (!vehFound)
|
||||||
{
|
{
|
||||||
MainVehicle = World.CreateVehicle(vehicleModel, Position);
|
MainVehicle = World.CreateVehicle(vehicleModel, Position);
|
||||||
|
MainVehicle.IsVisible = false;
|
||||||
MainVehicle.Quaternion = _vehicleRotation;
|
MainVehicle.Quaternion = _vehicleRotation;
|
||||||
|
|
||||||
MainVehicle.IsInvincible = true;
|
MainVehicle.IsInvincible = true;
|
||||||
@ -104,24 +105,53 @@ namespace CoopClient.Entities.Player
|
|||||||
}
|
}
|
||||||
|
|
||||||
vehicleModel.MarkAsNoLongerNeeded();
|
vehicleModel.MarkAsNoLongerNeeded();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Character.IsInVehicle() || (int)Character.SeatIndex != VehicleSeatIndex || Character.CurrentVehicle.Handle != MainVehicle.Handle)
|
if (_lastVehicleEnter != 0)
|
||||||
{
|
{
|
||||||
if (VehicleSeatIndex == -1 &&
|
if (Util.GetTickCount64() - _lastVehicleEnter < 1500)
|
||||||
Game.Player.Character.IsInVehicle() &&
|
{
|
||||||
(int)Game.Player.Character.SeatIndex == -1 &&
|
return;
|
||||||
Game.Player.Character.CurrentVehicle.Handle == MainVehicle.Handle)
|
}
|
||||||
|
|
||||||
|
_lastVehicleEnter = 0;
|
||||||
|
|
||||||
|
Character.Task.ClearAllImmediately();
|
||||||
|
Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex);
|
||||||
|
}
|
||||||
|
else if (!Character.IsInVehicle() || Character.CurrentVehicle.Handle != MainVehicle.Handle)
|
||||||
|
{
|
||||||
|
MainVehicle.IsVisible = true;
|
||||||
|
|
||||||
|
if (Game.Player.Character.CurrentVehicle?.Handle == MainVehicle.Handle &&
|
||||||
|
VehicleSeatIndex == (int)Game.Player.Character.SeatIndex)
|
||||||
{
|
{
|
||||||
Game.Player.Character.Task.WarpOutOfVehicle(MainVehicle);
|
Game.Player.Character.Task.WarpOutOfVehicle(MainVehicle);
|
||||||
GTA.UI.Notification.Show("~r~Car jacked!");
|
GTA.UI.Notification.Show("~r~Car jacked!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VehicleSpeed > 0.2f || !Character.IsInRange(MainVehicle.Position, 4f))
|
||||||
|
{
|
||||||
Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex);
|
Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex);
|
||||||
Character.IsVisible = true;
|
Character.IsVisible = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_lastVehicleEnter = Util.GetTickCount64();
|
||||||
|
|
||||||
|
Character.Task.ClearAllImmediately();
|
||||||
|
Character.IsVisible = true;
|
||||||
|
Character.Task.EnterVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex, -1, 2f, EnterVehicleFlags.WarpToDoor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((int)Character.SeatIndex != VehicleSeatIndex)
|
||||||
|
{
|
||||||
|
Character.Task.ShuffleToNextVehicleSeat(MainVehicle);
|
||||||
|
}
|
||||||
|
|
||||||
#region -- VEHICLE SYNC --
|
|
||||||
if (AimCoords != default)
|
if (AimCoords != default)
|
||||||
{
|
{
|
||||||
if (MainVehicle.IsTurretSeat(VehicleSeatIndex))
|
if (MainVehicle.IsTurretSeat(VehicleSeatIndex))
|
||||||
@ -140,6 +170,12 @@ namespace CoopClient.Entities.Player
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateVehicleInfo();
|
||||||
|
UpdateVehiclePosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateVehicleInfo()
|
||||||
|
{
|
||||||
if (VehicleColors != null && VehicleColors != _lastVehicleColors)
|
if (VehicleColors != null && VehicleColors != _lastVehicleColors)
|
||||||
{
|
{
|
||||||
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]);
|
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]);
|
||||||
@ -269,7 +305,10 @@ namespace CoopClient.Entities.Player
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateVehiclePosition()
|
||||||
|
{
|
||||||
float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / AverageLatency);
|
float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / AverageLatency);
|
||||||
|
|
||||||
if (_lastVehicleSteeringAngle != VehicleSteeringAngle)
|
if (_lastVehicleSteeringAngle != VehicleSteeringAngle)
|
||||||
@ -280,8 +319,7 @@ namespace CoopClient.Entities.Player
|
|||||||
MainVehicle.CustomSteeringAngle(steeringLerp);
|
MainVehicle.CustomSteeringAngle(steeringLerp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Good enough for now, but we need to create a better sync
|
if (VehicleSpeed != 0f && MainVehicle.IsInRange(Position, 7.0f))
|
||||||
if (VehicleSpeed > 0.05f && MainVehicle.IsInRange(Position, 7.0f))
|
|
||||||
{
|
{
|
||||||
dynamic speedLerp = Util.Lerp(_lastVehicleSpeed, VehicleSpeed, avrLat);
|
dynamic speedLerp = Util.Lerp(_lastVehicleSpeed, VehicleSpeed, avrLat);
|
||||||
_lastVehicleSpeed = Speed;
|
_lastVehicleSpeed = Speed;
|
||||||
@ -291,22 +329,12 @@ namespace CoopClient.Entities.Player
|
|||||||
|
|
||||||
MainVehicle.Velocity = Velocity * forceVelo + ((Position - MainVehicle.Position) * force);
|
MainVehicle.Velocity = Velocity * forceVelo + ((Position - MainVehicle.Position) * force);
|
||||||
MainVehicle.Quaternion = _lastVehicleRotation != null ? Quaternion.Slerp(_lastVehicleRotation.Value, _vehicleRotation, avrLat) : _vehicleRotation;
|
MainVehicle.Quaternion = _lastVehicleRotation != null ? Quaternion.Slerp(_lastVehicleRotation.Value, _vehicleRotation, avrLat) : _vehicleRotation;
|
||||||
|
|
||||||
_vehicleStopTime = Util.GetTickCount64();
|
|
||||||
}
|
|
||||||
else if ((Util.GetTickCount64() - _vehicleStopTime) <= 1000)
|
|
||||||
{
|
|
||||||
Vector3 posTarget = Util.LinearVectorLerp(MainVehicle.Position, Position + (Position - MainVehicle.Position), Util.GetTickCount64() - _vehicleStopTime, 1000);
|
|
||||||
|
|
||||||
MainVehicle.PositionNoOffset = posTarget;
|
|
||||||
MainVehicle.Quaternion = Quaternion.Slerp(_lastVehicleRotation.Value, _vehicleRotation, avrLat);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MainVehicle.PositionNoOffset = Position;
|
MainVehicle.PositionNoOffset = Position;
|
||||||
MainVehicle.Quaternion = _vehicleRotation;
|
MainVehicle.Quaternion = _vehicleRotation;
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region -- PEDALING --
|
#region -- PEDALING --
|
||||||
|
@ -440,8 +440,8 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
BrokenDoors = reader.ReadByte(),
|
BrokenDoors = reader.ReadByte(),
|
||||||
BrokenWindows = reader.ReadByte(),
|
BrokenWindows = reader.ReadByte(),
|
||||||
BurstedTires = reader.ReadUShort(),
|
BurstedTires = reader.ReadShort(),
|
||||||
PuncturedTires = reader.ReadUShort(),
|
PuncturedTires = reader.ReadShort(),
|
||||||
LeftHeadLightBroken = reader.ReadByte(),
|
LeftHeadLightBroken = reader.ReadByte(),
|
||||||
RightHeadLightBroken = reader.ReadByte()
|
RightHeadLightBroken = reader.ReadByte()
|
||||||
};
|
};
|
||||||
|
@ -168,8 +168,8 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
public byte BrokenWindows { get; set; }
|
public byte BrokenWindows { get; set; }
|
||||||
public byte BrokenDoors { get; set; }
|
public byte BrokenDoors { get; set; }
|
||||||
public ushort BurstedTires { get; set; }
|
public short BurstedTires { get; set; }
|
||||||
public ushort PuncturedTires { get; set; }
|
public short PuncturedTires { get; set; }
|
||||||
public byte LeftHeadLightBroken { get; set; }
|
public byte LeftHeadLightBroken { get; set; }
|
||||||
public byte RightHeadLightBroken { get; set; }
|
public byte RightHeadLightBroken { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -672,8 +672,8 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
BrokenDoors = reader.ReadByte(),
|
BrokenDoors = reader.ReadByte(),
|
||||||
BrokenWindows = reader.ReadByte(),
|
BrokenWindows = reader.ReadByte(),
|
||||||
BurstedTires = reader.ReadUShort(),
|
BurstedTires = reader.ReadShort(),
|
||||||
PuncturedTires = reader.ReadUShort(),
|
PuncturedTires = reader.ReadShort(),
|
||||||
LeftHeadLightBroken = reader.ReadByte(),
|
LeftHeadLightBroken = reader.ReadByte(),
|
||||||
RightHeadLightBroken = reader.ReadByte()
|
RightHeadLightBroken = reader.ReadByte()
|
||||||
};
|
};
|
||||||
|
@ -359,49 +359,52 @@ namespace CoopClient
|
|||||||
|
|
||||||
public static VehicleDamageModel GetVehicleDamageModel(this Vehicle veh)
|
public static VehicleDamageModel GetVehicleDamageModel(this Vehicle veh)
|
||||||
{
|
{
|
||||||
VehicleDamageModel result = new VehicleDamageModel()
|
|
||||||
{
|
|
||||||
BrokenDoors = 0,
|
|
||||||
BrokenWindows = 0,
|
|
||||||
BurstedTires = 0,
|
|
||||||
PuncturedTires = 0,
|
|
||||||
LeftHeadLightBroken = (byte)(veh.IsLeftHeadLightBroken ? 1 : 0),
|
|
||||||
RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Broken windows
|
// Broken windows
|
||||||
|
byte brokenWindows = 0;
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
if (!veh.Windows[(VehicleWindowIndex)i].IsIntact)
|
if (!veh.Windows[(VehicleWindowIndex)i].IsIntact)
|
||||||
{
|
{
|
||||||
result.BrokenWindows |= (byte)(1 << i);
|
brokenWindows |= (byte)(1 << i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broken doors
|
// Broken doors
|
||||||
|
byte brokenDoors = 0;
|
||||||
foreach (VehicleDoor door in veh.Doors)
|
foreach (VehicleDoor door in veh.Doors)
|
||||||
{
|
{
|
||||||
if (door.IsBroken)
|
if (door.IsBroken)
|
||||||
{
|
{
|
||||||
result.BrokenDoors |= (byte)(1 << (byte)door.Index);
|
brokenDoors |= (byte)(1 << (byte)door.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bursted and Punctured tires
|
// Bursted and Punctured tires
|
||||||
|
short puncturedTires = 0;
|
||||||
|
short burstedTires = 0;
|
||||||
foreach (VehicleWheel wheel in veh.Wheels.GetAllWheels())
|
foreach (VehicleWheel wheel in veh.Wheels.GetAllWheels())
|
||||||
{
|
{
|
||||||
if (wheel.IsPunctured)
|
|
||||||
{
|
|
||||||
result.PuncturedTires |= (ushort)(1 << (int)wheel.BoneId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wheel.IsBursted)
|
if (wheel.IsBursted)
|
||||||
{
|
{
|
||||||
result.BurstedTires |= (ushort)(1 << (int)wheel.BoneId);
|
burstedTires |= (short)(1 << (int)wheel.BoneId);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wheel.IsPunctured)
|
||||||
|
{
|
||||||
|
puncturedTires |= (short)(1 << (int)wheel.BoneId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return new VehicleDamageModel()
|
||||||
|
{
|
||||||
|
BrokenDoors = brokenDoors,
|
||||||
|
BrokenWindows = brokenWindows,
|
||||||
|
BurstedTires = burstedTires,
|
||||||
|
PuncturedTires = puncturedTires,
|
||||||
|
LeftHeadLightBroken = (byte)(veh.IsLeftHeadLightBroken ? 1 : 0),
|
||||||
|
RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetVehicleDamageModel(this Vehicle veh, VehicleDamageModel model, bool leavedoors = true)
|
public static void SetVehicleDamageModel(this Vehicle veh, VehicleDamageModel model, bool leavedoors = true)
|
||||||
@ -431,7 +434,22 @@ namespace CoopClient
|
|||||||
|
|
||||||
foreach (VehicleWheel wheel in veh.Wheels)
|
foreach (VehicleWheel wheel in veh.Wheels)
|
||||||
{
|
{
|
||||||
if ((model.PuncturedTires & (ushort)(1 << (int)wheel.BoneId)) != 0)
|
if ((model.BurstedTires & (short)(1 << (int)wheel.BoneId)) != 0)
|
||||||
|
{
|
||||||
|
if (!wheel.IsBursted)
|
||||||
|
{
|
||||||
|
wheel.Puncture();
|
||||||
|
wheel.Burst();
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (wheel.IsBursted)
|
||||||
|
{
|
||||||
|
wheel.Fix();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((model.PuncturedTires & (short)(1 << (int)wheel.BoneId)) != 0)
|
||||||
{
|
{
|
||||||
if (!wheel.IsPunctured)
|
if (!wheel.IsPunctured)
|
||||||
{
|
{
|
||||||
@ -442,18 +460,6 @@ namespace CoopClient
|
|||||||
{
|
{
|
||||||
wheel.Fix();
|
wheel.Fix();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((model.BurstedTires & (ushort)(1 << (int)wheel.BoneId)) != 0)
|
|
||||||
{
|
|
||||||
if (!wheel.IsBursted)
|
|
||||||
{
|
|
||||||
wheel.Burst();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (wheel.IsBursted)
|
|
||||||
{
|
|
||||||
wheel.Fix();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
veh.IsLeftHeadLightBroken = model.LeftHeadLightBroken > 0;
|
veh.IsLeftHeadLightBroken = model.LeftHeadLightBroken > 0;
|
||||||
|
@ -315,6 +315,8 @@ namespace CoopServer
|
|||||||
byteArray.Add(VehDamageModel.BrokenWindows);
|
byteArray.Add(VehDamageModel.BrokenWindows);
|
||||||
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
|
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
|
||||||
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
|
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
|
||||||
|
byteArray.Add(VehDamageModel.LeftHeadLightBroken);
|
||||||
|
byteArray.Add(VehDamageModel.RightHeadLightBroken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -438,8 +440,10 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
BrokenDoors = reader.ReadByte(),
|
BrokenDoors = reader.ReadByte(),
|
||||||
BrokenWindows = reader.ReadByte(),
|
BrokenWindows = reader.ReadByte(),
|
||||||
BurstedTires = reader.ReadUShort(),
|
BurstedTires = reader.ReadShort(),
|
||||||
PuncturedTires = reader.ReadUShort()
|
PuncturedTires = reader.ReadShort(),
|
||||||
|
LeftHeadLightBroken = reader.ReadByte(),
|
||||||
|
RightHeadLightBroken = reader.ReadByte()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -156,8 +156,8 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
public byte BrokenWindows { get; set; }
|
public byte BrokenWindows { get; set; }
|
||||||
public byte BrokenDoors { get; set; }
|
public byte BrokenDoors { get; set; }
|
||||||
public ushort BurstedTires { get; set; }
|
public short BurstedTires { get; set; }
|
||||||
public ushort PuncturedTires { get; set; }
|
public short PuncturedTires { get; set; }
|
||||||
public byte LeftHeadLightBroken { get; set; }
|
public byte LeftHeadLightBroken { get; set; }
|
||||||
public byte RightHeadLightBroken { get; set; }
|
public byte RightHeadLightBroken { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -526,6 +526,8 @@ namespace CoopServer
|
|||||||
byteArray.Add(VehDamageModel.BrokenWindows);
|
byteArray.Add(VehDamageModel.BrokenWindows);
|
||||||
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
|
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
|
||||||
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
|
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
|
||||||
|
byteArray.Add(VehDamageModel.LeftHeadLightBroken);
|
||||||
|
byteArray.Add(VehDamageModel.RightHeadLightBroken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -670,8 +672,10 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
BrokenDoors = reader.ReadByte(),
|
BrokenDoors = reader.ReadByte(),
|
||||||
BrokenWindows = reader.ReadByte(),
|
BrokenWindows = reader.ReadByte(),
|
||||||
BurstedTires = reader.ReadUShort(),
|
BurstedTires = reader.ReadShort(),
|
||||||
PuncturedTires = reader.ReadUShort()
|
PuncturedTires = reader.ReadShort(),
|
||||||
|
LeftHeadLightBroken = reader.ReadByte(),
|
||||||
|
RightHeadLightBroken = reader.ReadByte()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user