New vehicle synchronization added. Some changes
This commit is contained in:
@ -77,8 +77,8 @@ namespace CoopClient
|
||||
public bool VehIsSireneActive { get; set; }
|
||||
private VehicleDoors[] LastVehDoors;
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
private byte LastVehTires;
|
||||
public byte VehTires { get; set; }
|
||||
private int LastVehTires;
|
||||
public int VehTires { get; set; }
|
||||
#endregion
|
||||
|
||||
public void DisplayLocally(string username)
|
||||
@ -269,7 +269,7 @@ namespace CoopClient
|
||||
|
||||
if (!vehFound)
|
||||
{
|
||||
Model vehicleModel = Util.ModelRequest(VehicleModelHash);
|
||||
Model vehicleModel = VehicleModelHash.ModelRequest();
|
||||
if (vehicleModel == null)
|
||||
{
|
||||
GTA.UI.Notification.Show($"~r~Model ({VehicleModelHash}) cannot be loaded!");
|
||||
@ -315,7 +315,7 @@ namespace CoopClient
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Util.GetResponsiblePedHandle(MainVehicle) != Character.Handle)
|
||||
if (MainVehicle.GetResponsiblePedHandle() != Character.Handle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -424,11 +424,12 @@ namespace CoopClient
|
||||
|
||||
if (VehTires != default && LastVehTires != VehTires)
|
||||
{
|
||||
for (int i = 0; i < MainVehicle.Wheels.Count - 1; i++)
|
||||
foreach (var wheel in MainVehicle.Wheels.GetAllWheels())
|
||||
{
|
||||
if ((VehTires & 1 << i) != 0)
|
||||
if ((VehTires & 1 << (int)wheel.BoneId) != 0)
|
||||
{
|
||||
Function.Call(Hash.SET_VEHICLE_TYRE_BURST, MainVehicle, i, true, 1000.0);
|
||||
wheel.Puncture();
|
||||
wheel.Burst();
|
||||
}
|
||||
}
|
||||
|
||||
@ -438,7 +439,7 @@ namespace CoopClient
|
||||
|
||||
if (VehicleSteeringAngle != MainVehicle.SteeringAngle)
|
||||
{
|
||||
Util.CustomSteeringAngle(MainVehicle.Handle, (float)(Math.PI / 180) * VehicleSteeringAngle);
|
||||
MainVehicle.Handle.CustomSteeringAngle((float)(Math.PI / 180) * VehicleSteeringAngle);
|
||||
}
|
||||
|
||||
// Good enough for now, but we need to create a better sync
|
||||
@ -622,7 +623,7 @@ namespace CoopClient
|
||||
LastModelHash = ModelHash;
|
||||
LastProps = Props;
|
||||
|
||||
Model characterModel = Util.ModelRequest(ModelHash);
|
||||
Model characterModel = ModelHash.ModelRequest();
|
||||
|
||||
if (characterModel == null)
|
||||
{
|
||||
|
@ -241,7 +241,7 @@ namespace CoopClient
|
||||
if (fullSync)
|
||||
{
|
||||
DebugSyncPed.ModelHash = player.Model.Hash;
|
||||
DebugSyncPed.Props = Util.GetPedProps(player);
|
||||
DebugSyncPed.Props = player.GetPedProps();
|
||||
}
|
||||
DebugSyncPed.Health = player.Health;
|
||||
DebugSyncPed.Position = player.Position;
|
||||
@ -250,12 +250,12 @@ namespace CoopClient
|
||||
|
||||
if (!player.IsInVehicle())
|
||||
{
|
||||
flags = Util.GetPedFlags(player, fullSync, true);
|
||||
flags = player.GetPedFlags(fullSync, true);
|
||||
|
||||
DebugSyncPed.Rotation = player.Rotation;
|
||||
DebugSyncPed.Velocity = player.Velocity;
|
||||
DebugSyncPed.Speed = Util.GetPedSpeed(player);
|
||||
DebugSyncPed.AimCoords = Util.GetPedAimCoords(player, false);
|
||||
DebugSyncPed.Speed = player.GetPedSpeed();
|
||||
DebugSyncPed.AimCoords = player.GetPedAimCoords(false);
|
||||
DebugSyncPed.CurrentWeaponHash = (int)player.Weapons.Current.Hash;
|
||||
DebugSyncPed.LastSyncWasFull = (flags.Value & (byte)PedDataFlags.LastSyncWasFull) > 0;
|
||||
DebugSyncPed.IsAiming = (flags.Value & (byte)PedDataFlags.IsAiming) > 0;
|
||||
@ -277,7 +277,7 @@ namespace CoopClient
|
||||
Vehicle veh = player.CurrentVehicle;
|
||||
veh.Opacity = 75;
|
||||
|
||||
flags = Util.GetVehicleFlags(player, veh, fullSync);
|
||||
flags = veh.GetVehicleFlags(fullSync);
|
||||
|
||||
int secondaryColor;
|
||||
int primaryColor;
|
||||
@ -286,27 +286,19 @@ namespace CoopClient
|
||||
Function.Call<int>(Hash.GET_VEHICLE_COLOURS, veh, &primaryColor, &secondaryColor);
|
||||
}
|
||||
|
||||
byte tyreFlag = 0;
|
||||
for (int i = 0; i < veh.Wheels.Count - 1; i++)
|
||||
{
|
||||
if (Function.Call<bool>(Hash.IS_VEHICLE_TYRE_BURST, veh, i, false))
|
||||
{
|
||||
tyreFlag |= (byte)(1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
DebugSyncPed.VehicleModelHash = veh.Model.Hash;
|
||||
DebugSyncPed.VehicleSeatIndex = (int)player.SeatIndex;
|
||||
DebugSyncPed.VehiclePosition = veh.Position;
|
||||
DebugSyncPed.VehicleRotation = veh.Quaternion;
|
||||
DebugSyncPed.VehicleEngineHealth = veh.EngineHealth;
|
||||
DebugSyncPed.VehRPM = veh.CurrentRPM;
|
||||
DebugSyncPed.VehicleVelocity = veh.Velocity;
|
||||
DebugSyncPed.VehicleSpeed = veh.Speed;
|
||||
DebugSyncPed.VehicleSteeringAngle = veh.SteeringAngle;
|
||||
DebugSyncPed.VehicleColors = new int[] { primaryColor, secondaryColor };
|
||||
DebugSyncPed.VehicleMods = Util.GetVehicleMods(veh);
|
||||
DebugSyncPed.VehDoors = Util.GetVehicleDoors(veh.Doors);
|
||||
DebugSyncPed.VehTires = tyreFlag;
|
||||
DebugSyncPed.VehicleMods = veh.Mods.GetVehicleMods();
|
||||
DebugSyncPed.VehDoors = veh.Doors.GetVehicleDoors();
|
||||
DebugSyncPed.VehTires = veh.Wheels.GetBrokenTires();
|
||||
DebugSyncPed.LastSyncWasFull = (flags.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
||||
DebugSyncPed.IsInVehicle = (flags.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
||||
DebugSyncPed.VehIsEngineRunning = (flags.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
||||
|
@ -599,28 +599,38 @@ namespace CoopClient
|
||||
Position = player.Position.ToLVector()
|
||||
},
|
||||
ModelHash = player.Model.Hash,
|
||||
Props = Util.GetPedProps(player),
|
||||
Props = player.GetPedProps(),
|
||||
Rotation = player.Rotation.ToLVector(),
|
||||
Velocity = player.Velocity.ToLVector(),
|
||||
Speed = Util.GetPedSpeed(player),
|
||||
AimCoords = Util.GetPedAimCoords(player, false).ToLVector(),
|
||||
Speed = player.GetPedSpeed(),
|
||||
AimCoords = player.GetPedAimCoords(false).ToLVector(),
|
||||
CurrentWeaponHash = (int)player.Weapons.Current.Hash,
|
||||
Flag = Util.GetPedFlags(player, true, true)
|
||||
Flag = player.GetPedFlags(true, true)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isDriver = Util.GetResponsiblePedHandle(player.CurrentVehicle) == player.Handle;
|
||||
bool isDriver = player.CurrentVehicle.GetResponsiblePedHandle() == player.Handle;
|
||||
|
||||
int secondaryColor = 0;
|
||||
int primaryColor = 0;
|
||||
|
||||
int tyreFlag = 0;
|
||||
|
||||
if (isDriver)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
Function.Call<int>(Hash.GET_VEHICLE_COLOURS, player.CurrentVehicle, &primaryColor, &secondaryColor);
|
||||
}
|
||||
|
||||
foreach (var wheel in player.CurrentVehicle.Wheels.GetAllWheels())
|
||||
{
|
||||
if (wheel.IsBursted)
|
||||
{
|
||||
tyreFlag |= (1 << (int)wheel.BoneId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new FullSyncPlayerVehPacket()
|
||||
@ -632,19 +642,21 @@ namespace CoopClient
|
||||
Position = player.Position.ToLVector()
|
||||
},
|
||||
ModelHash = player.Model.Hash,
|
||||
Props = Util.GetPedProps(player),
|
||||
Props = player.GetPedProps(),
|
||||
VehModelHash = player.CurrentVehicle.Model.Hash,
|
||||
VehSeatIndex = (int)player.SeatIndex,
|
||||
VehPosition = isDriver ? player.CurrentVehicle.Position.ToLVector() : new LVector3(),
|
||||
VehRotation = isDriver ? player.CurrentVehicle.Quaternion.ToLQuaternion() : new LQuaternion(),
|
||||
VehEngineHealth = isDriver ? player.CurrentVehicle.EngineHealth : 0f,
|
||||
VehRPM = isDriver ? player.CurrentVehicle.CurrentRPM : 0f,
|
||||
VehVelocity = isDriver ? player.CurrentVehicle.Velocity.ToLVector() : new LVector3(),
|
||||
VehSpeed = isDriver ? player.CurrentVehicle.Speed : 0f,
|
||||
VehSteeringAngle = isDriver ? player.CurrentVehicle.SteeringAngle : 0f,
|
||||
VehColors = isDriver ? new int[] { primaryColor, secondaryColor } : new int[0],
|
||||
VehMods = isDriver ? Util.GetVehicleMods(player.CurrentVehicle) : null,
|
||||
VehDoors = isDriver ? Util.GetVehicleDoors(player.CurrentVehicle.Doors) : null,
|
||||
Flag = Util.GetVehicleFlags(player, player.CurrentVehicle, true)
|
||||
VehMods = isDriver ? player.CurrentVehicle.Mods.GetVehicleMods() : null,
|
||||
VehDoors = isDriver ? player.CurrentVehicle.Doors.GetVehicleDoors() : null,
|
||||
VehTires = isDriver ? tyreFlag : 0,
|
||||
Flag = player.CurrentVehicle.GetVehicleFlags(true)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
|
||||
@ -666,15 +678,15 @@ namespace CoopClient
|
||||
},
|
||||
Rotation = player.Rotation.ToLVector(),
|
||||
Velocity = player.Velocity.ToLVector(),
|
||||
Speed = Util.GetPedSpeed(player),
|
||||
AimCoords = Util.GetPedAimCoords(player, false).ToLVector(),
|
||||
Speed = player.GetPedSpeed(),
|
||||
AimCoords = player.GetPedAimCoords(false).ToLVector(),
|
||||
CurrentWeaponHash = (int)player.Weapons.Current.Hash,
|
||||
Flag = Util.GetPedFlags(player, false, true)
|
||||
Flag = player.GetPedFlags(false, true)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isDriver = Util.GetResponsiblePedHandle(player.CurrentVehicle) == player.Handle;
|
||||
bool isDriver = player.CurrentVehicle.GetResponsiblePedHandle() == player.Handle;
|
||||
|
||||
new LightSyncPlayerVehPacket()
|
||||
{
|
||||
@ -691,7 +703,7 @@ namespace CoopClient
|
||||
VehVelocity = isDriver ? player.CurrentVehicle.Velocity.ToLVector() : new LVector3(),
|
||||
VehSpeed = isDriver ? player.CurrentVehicle.Speed : 0f,
|
||||
VehSteeringAngle = isDriver ? player.CurrentVehicle.SteeringAngle : 0f,
|
||||
Flag = Util.GetVehicleFlags(player, player.CurrentVehicle, false)
|
||||
Flag = player.CurrentVehicle.GetVehicleFlags(false)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
}
|
||||
@ -717,20 +729,20 @@ namespace CoopClient
|
||||
{
|
||||
ID = Main.LocalClientID + npc.Handle,
|
||||
ModelHash = npc.Model.Hash,
|
||||
Props = Util.GetPedProps(npc),
|
||||
Props = npc.GetPedProps(),
|
||||
Health = npc.Health,
|
||||
Position = npc.Position.ToLVector(),
|
||||
Rotation = npc.Rotation.ToLVector(),
|
||||
Velocity = npc.Velocity.ToLVector(),
|
||||
Speed = Util.GetPedSpeed(npc),
|
||||
AimCoords = Util.GetPedAimCoords(npc, true).ToLVector(),
|
||||
Speed = npc.GetPedSpeed(),
|
||||
AimCoords = npc.GetPedAimCoords(true).ToLVector(),
|
||||
CurrentWeaponHash = (int)npc.Weapons.Current.Hash,
|
||||
Flag = Util.GetPedFlags(npc, true)
|
||||
Flag = npc.GetPedFlags(true)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isDriver = Util.GetResponsiblePedHandle(npc.CurrentVehicle) == npc.Handle;
|
||||
bool isDriver = npc.CurrentVehicle.GetResponsiblePedHandle() == npc.Handle;
|
||||
|
||||
int secondaryColor = 0;
|
||||
int primaryColor = 0;
|
||||
@ -747,7 +759,7 @@ namespace CoopClient
|
||||
{
|
||||
ID = Main.LocalClientID + npc.Handle,
|
||||
ModelHash = npc.Model.Hash,
|
||||
Props = Util.GetPedProps(npc),
|
||||
Props = npc.GetPedProps(),
|
||||
Health = npc.Health,
|
||||
Position = npc.Position.ToLVector(),
|
||||
VehModelHash = npc.CurrentVehicle.Model.Hash,
|
||||
@ -755,13 +767,15 @@ namespace CoopClient
|
||||
VehPosition = isDriver ? npc.CurrentVehicle.Position.ToLVector() : new LVector3(),
|
||||
VehRotation = isDriver ? npc.CurrentVehicle.Quaternion.ToLQuaternion() : new LQuaternion(),
|
||||
VehEngineHealth = isDriver ? npc.CurrentVehicle.EngineHealth : 0f,
|
||||
VehRPM = isDriver ? npc.CurrentVehicle.CurrentRPM : 0f,
|
||||
VehVelocity = isDriver ? npc.CurrentVehicle.Velocity.ToLVector() : new LVector3(),
|
||||
VehSpeed = isDriver ? npc.CurrentVehicle.Speed : 0f,
|
||||
VehSteeringAngle = isDriver ? npc.CurrentVehicle.SteeringAngle : 0f,
|
||||
VehColors = isDriver ? new int[] { primaryColor, secondaryColor } : new int[0],
|
||||
VehMods = isDriver ? Util.GetVehicleMods(npc.CurrentVehicle) : null,
|
||||
VehDoors = isDriver ? Util.GetVehicleDoors(npc.CurrentVehicle.Doors) : null,
|
||||
Flag = Util.GetVehicleFlags(npc, npc.CurrentVehicle, true)
|
||||
VehMods = isDriver ? npc.CurrentVehicle.Mods.GetVehicleMods() : null,
|
||||
VehDoors = isDriver ? npc.CurrentVehicle.Doors.GetVehicleDoors() : null,
|
||||
VehTires = npc.CurrentVehicle.Wheels.GetBrokenTires(),
|
||||
Flag = npc.CurrentVehicle.GetVehicleFlags(true)
|
||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||
}
|
||||
|
||||
|
@ -444,24 +444,30 @@ namespace CoopClient
|
||||
public float VehEngineHealth { get; set; }
|
||||
|
||||
[ProtoMember(9)]
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
public float VehRPM { get; set; }
|
||||
|
||||
[ProtoMember(10)]
|
||||
public float VehSpeed { get; set; }
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
|
||||
[ProtoMember(11)]
|
||||
public float VehSteeringAngle { get; set; }
|
||||
public float VehSpeed { get; set; }
|
||||
|
||||
[ProtoMember(12)]
|
||||
public int[] VehColors { get; set; }
|
||||
public float VehSteeringAngle { get; set; }
|
||||
|
||||
[ProtoMember(13)]
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
public int[] VehColors { get; set; }
|
||||
|
||||
[ProtoMember(14)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
|
||||
[ProtoMember(15)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
|
||||
[ProtoMember(16)]
|
||||
public int VehTires { get; set; }
|
||||
|
||||
[ProtoMember(17)]
|
||||
public byte? Flag { get; set; } = 0;
|
||||
|
||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||
@ -488,12 +494,14 @@ namespace CoopClient
|
||||
VehPosition = data.VehPosition;
|
||||
VehRotation = data.VehRotation;
|
||||
VehEngineHealth = data.VehEngineHealth;
|
||||
VehRPM = data.VehRPM;
|
||||
VehVelocity = data.VehVelocity;
|
||||
VehSpeed = data.VehSpeed;
|
||||
VehSteeringAngle = data.VehSteeringAngle;
|
||||
VehColors = data.VehColors;
|
||||
VehMods = data.VehMods;
|
||||
VehDoors = data.VehDoors;
|
||||
VehTires = data.VehTires;
|
||||
Flag = data.Flag;
|
||||
}
|
||||
}
|
||||
@ -839,24 +847,30 @@ namespace CoopClient
|
||||
public float VehEngineHealth { get; set; }
|
||||
|
||||
[ProtoMember(11)]
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
public float VehRPM { get; set; }
|
||||
|
||||
[ProtoMember(12)]
|
||||
public float VehSpeed { get; set; }
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
|
||||
[ProtoMember(13)]
|
||||
public float VehSteeringAngle { get; set; }
|
||||
public float VehSpeed { get; set; }
|
||||
|
||||
[ProtoMember(14)]
|
||||
public int[] VehColors { get; set; }
|
||||
public float VehSteeringAngle { get; set; }
|
||||
|
||||
[ProtoMember(15)]
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
public int[] VehColors { get; set; }
|
||||
|
||||
[ProtoMember(16)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
|
||||
[ProtoMember(17)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
|
||||
[ProtoMember(18)]
|
||||
public int VehTires { get; set; }
|
||||
|
||||
[ProtoMember(19)]
|
||||
public byte? Flag { get; set; } = 0;
|
||||
|
||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||
@ -885,12 +899,14 @@ namespace CoopClient
|
||||
VehPosition = data.VehPosition;
|
||||
VehRotation = data.VehRotation;
|
||||
VehEngineHealth = data.VehEngineHealth;
|
||||
VehRPM = data.VehRPM;
|
||||
VehVelocity = data.VehVelocity;
|
||||
VehSpeed = data.VehSpeed;
|
||||
VehSteeringAngle = data.VehSteeringAngle;
|
||||
VehColors = data.VehColors;
|
||||
VehMods = data.VehMods;
|
||||
VehDoors = data.VehDoors;
|
||||
VehTires = data.VehTires;
|
||||
Flag = data.Flag;
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ namespace CoopClient
|
||||
}
|
||||
}
|
||||
|
||||
public static unsafe void CustomSteeringAngle(int handle, float value)
|
||||
public static unsafe void CustomSteeringAngle(this int handle, float value)
|
||||
{
|
||||
IntPtr address = new IntPtr((long)GetEntityAddressFunc(handle));
|
||||
if (address == IntPtr.Zero || SteeringAngleOffset == 0)
|
||||
@ -79,7 +79,7 @@ namespace CoopClient
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static Model ModelRequest(int hash)
|
||||
public static Model ModelRequest(this int hash)
|
||||
{
|
||||
Model model = new Model(hash);
|
||||
short counter = 0;
|
||||
@ -119,7 +119,7 @@ namespace CoopClient
|
||||
return (end - start) * currentTime / duration + start;
|
||||
}
|
||||
|
||||
public static int GetResponsiblePedHandle(Vehicle veh)
|
||||
public static int GetResponsiblePedHandle(this Vehicle veh)
|
||||
{
|
||||
if (veh == null || veh.Handle == 0 || !veh.Exists())
|
||||
{
|
||||
@ -142,7 +142,7 @@ namespace CoopClient
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static byte GetPedSpeed(Ped ped)
|
||||
public static byte GetPedSpeed(this Ped ped)
|
||||
{
|
||||
if (ped.IsSprinting)
|
||||
{
|
||||
@ -160,13 +160,13 @@ namespace CoopClient
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static Vector3 GetPedAimCoords(Ped ped, bool isNpc)
|
||||
public static Vector3 GetPedAimCoords(this Ped ped, bool isNpc)
|
||||
{
|
||||
bool aimOrShoot = ped.IsAiming || ped.IsShooting && ped.Weapons.Current?.AmmoInClip != 0;
|
||||
return aimOrShoot ? (isNpc ? GetLastWeaponImpact(ped) : RaycastEverything(new Vector2(0, 0))) : new Vector3();
|
||||
}
|
||||
|
||||
public static byte? GetVehicleFlags(Ped ped, Vehicle veh, bool fullSync)
|
||||
public static byte? GetVehicleFlags(this Vehicle veh, bool fullSync)
|
||||
{
|
||||
byte? flags = 0;
|
||||
|
||||
@ -175,10 +175,8 @@ namespace CoopClient
|
||||
flags |= (byte)VehicleDataFlags.LastSyncWasFull;
|
||||
}
|
||||
|
||||
if (ped.IsInVehicle())
|
||||
{
|
||||
// Ped is in vehicle
|
||||
flags |= (byte)VehicleDataFlags.IsInVehicle;
|
||||
}
|
||||
|
||||
if (veh.IsEngineRunning)
|
||||
{
|
||||
@ -208,7 +206,7 @@ namespace CoopClient
|
||||
return flags;
|
||||
}
|
||||
|
||||
public static byte? GetPedFlags(Ped ped, bool fullSync, bool isPlayer = false)
|
||||
public static byte? GetPedFlags(this Ped ped, bool fullSync, bool isPlayer = false)
|
||||
{
|
||||
byte? flags = 0;
|
||||
|
||||
@ -255,7 +253,7 @@ namespace CoopClient
|
||||
return flags;
|
||||
}
|
||||
|
||||
public static Dictionary<int, int> GetPedProps(Ped ped)
|
||||
public static Dictionary<int, int> GetPedProps(this Ped ped)
|
||||
{
|
||||
Dictionary<int, int> result = new Dictionary<int, int>();
|
||||
for (int i = 0; i < 11; i++)
|
||||
@ -266,17 +264,17 @@ namespace CoopClient
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Dictionary<int, int> GetVehicleMods(Vehicle veh)
|
||||
public static Dictionary<int, int> GetVehicleMods(this VehicleModCollection mods)
|
||||
{
|
||||
Dictionary<int, int> result = new Dictionary<int, int>();
|
||||
foreach (VehicleMod mod in veh.Mods.ToArray())
|
||||
foreach (VehicleMod mod in mods.ToArray())
|
||||
{
|
||||
result.Add((int)mod.Type, mod.Index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static VehicleDoors[] GetVehicleDoors(VehicleDoorCollection doors)
|
||||
public static VehicleDoors[] GetVehicleDoors(this VehicleDoorCollection doors)
|
||||
{
|
||||
int doorLength = doors.ToArray().Length;
|
||||
if (doorLength == 0)
|
||||
@ -300,6 +298,21 @@ namespace CoopClient
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int GetBrokenTires(this VehicleWheelCollection wheels)
|
||||
{
|
||||
int tyreFlag = 0;
|
||||
|
||||
foreach (var wheel in wheels.GetAllWheels())
|
||||
{
|
||||
if (wheel.IsBursted)
|
||||
{
|
||||
tyreFlag |= (1 << (int)wheel.BoneId);
|
||||
}
|
||||
}
|
||||
|
||||
return tyreFlag;
|
||||
}
|
||||
|
||||
public static Settings ReadSettings()
|
||||
{
|
||||
XmlSerializer ser = new XmlSerializer(typeof(Settings));
|
||||
|
@ -377,24 +377,30 @@ namespace CoopServer
|
||||
public float VehEngineHealth { get; set; }
|
||||
|
||||
[ProtoMember(9)]
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
public float VehRPM { get; set; }
|
||||
|
||||
[ProtoMember(10)]
|
||||
public float VehSpeed { get; set; }
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
|
||||
[ProtoMember(11)]
|
||||
public float VehSteeringAngle { get; set; }
|
||||
public float VehSpeed { get; set; }
|
||||
|
||||
[ProtoMember(12)]
|
||||
public int[] VehColors { get; set; }
|
||||
public float VehSteeringAngle { get; set; }
|
||||
|
||||
[ProtoMember(13)]
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
public int[] VehColors { get; set; }
|
||||
|
||||
[ProtoMember(14)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
|
||||
[ProtoMember(15)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
|
||||
[ProtoMember(16)]
|
||||
public int VehTires { get; set; }
|
||||
|
||||
[ProtoMember(17)]
|
||||
public byte? Flag { get; set; } = 0;
|
||||
|
||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||
@ -421,12 +427,14 @@ namespace CoopServer
|
||||
VehPosition = data.VehPosition;
|
||||
VehRotation = data.VehRotation;
|
||||
VehEngineHealth = data.VehEngineHealth;
|
||||
VehRPM = data.VehRPM;
|
||||
VehVelocity = data.VehVelocity;
|
||||
VehSpeed = data.VehSpeed;
|
||||
VehSteeringAngle = data.VehSteeringAngle;
|
||||
VehColors = data.VehColors;
|
||||
VehMods = data.VehMods;
|
||||
VehDoors = data.VehDoors;
|
||||
VehTires = data.VehTires;
|
||||
Flag = data.Flag;
|
||||
}
|
||||
}
|
||||
@ -772,24 +780,30 @@ namespace CoopServer
|
||||
public float VehEngineHealth { get; set; }
|
||||
|
||||
[ProtoMember(11)]
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
public float VehRPM { get; set; }
|
||||
|
||||
[ProtoMember(12)]
|
||||
public float VehSpeed { get; set; }
|
||||
public LVector3 VehVelocity { get; set; }
|
||||
|
||||
[ProtoMember(13)]
|
||||
public float VehSteeringAngle { get; set; }
|
||||
public float VehSpeed { get; set; }
|
||||
|
||||
[ProtoMember(14)]
|
||||
public int[] VehColors { get; set; }
|
||||
public float VehSteeringAngle { get; set; }
|
||||
|
||||
[ProtoMember(15)]
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
public int[] VehColors { get; set; }
|
||||
|
||||
[ProtoMember(16)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
public Dictionary<int, int> VehMods { get; set; }
|
||||
|
||||
[ProtoMember(17)]
|
||||
public VehicleDoors[] VehDoors { get; set; }
|
||||
|
||||
[ProtoMember(18)]
|
||||
public int VehTires { get; set; }
|
||||
|
||||
[ProtoMember(19)]
|
||||
public byte? Flag { get; set; } = 0;
|
||||
|
||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||
@ -818,12 +832,14 @@ namespace CoopServer
|
||||
VehPosition = data.VehPosition;
|
||||
VehRotation = data.VehRotation;
|
||||
VehEngineHealth = data.VehEngineHealth;
|
||||
VehRPM = data.VehRPM;
|
||||
VehVelocity = data.VehVelocity;
|
||||
VehSpeed = data.VehSpeed;
|
||||
VehSteeringAngle = data.VehSteeringAngle;
|
||||
VehColors = data.VehColors;
|
||||
VehMods = data.VehMods;
|
||||
VehDoors = data.VehDoors;
|
||||
VehTires = data.VehTires;
|
||||
Flag = data.Flag;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user