Vehicle dead and door synchronization added
This commit is contained in:
@ -49,6 +49,9 @@ namespace CoopClient
|
|||||||
public bool IsInVehicle { get; set; }
|
public bool IsInVehicle { get; set; }
|
||||||
public int VehicleModelHash { get; set; }
|
public int VehicleModelHash { get; set; }
|
||||||
public int[] VehicleColors { get; set; }
|
public int[] VehicleColors { get; set; }
|
||||||
|
private Dictionary<int, int> LastVehicleMods = new Dictionary<int, int>();
|
||||||
|
public Dictionary<int, int> VehicleMods { get; set; }
|
||||||
|
public bool VehicleDead { get; set; }
|
||||||
public int VehicleSeatIndex { get; set; }
|
public int VehicleSeatIndex { get; set; }
|
||||||
public Vehicle MainVehicle { get; set; }
|
public Vehicle MainVehicle { get; set; }
|
||||||
public Vector3 VehiclePosition { get; set; }
|
public Vector3 VehiclePosition { get; set; }
|
||||||
@ -100,6 +103,8 @@ namespace CoopClient
|
|||||||
public bool VehIsInBurnout { get; set; }
|
public bool VehIsInBurnout { get; set; }
|
||||||
private bool LastVehIsSireneActive = false;
|
private bool LastVehIsSireneActive = false;
|
||||||
public bool VehIsSireneActive { get; set; }
|
public bool VehIsSireneActive { get; set; }
|
||||||
|
private VehicleDoors[] LastVehDoors;
|
||||||
|
public VehicleDoors[] VehDoors { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void DisplayLocally(string username)
|
public void DisplayLocally(string username)
|
||||||
@ -294,8 +299,29 @@ namespace CoopClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
#region -- VEHICLE SYNC --
|
#region -- VEHICLE SYNC --
|
||||||
|
if (VehicleDead && !MainVehicle.IsDead)
|
||||||
|
{
|
||||||
|
MainVehicle.Explode();
|
||||||
|
}
|
||||||
|
else if (!VehicleDead && MainVehicle.IsDead)
|
||||||
|
{
|
||||||
|
MainVehicle.Repair();
|
||||||
|
}
|
||||||
|
|
||||||
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]);
|
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]);
|
||||||
|
|
||||||
|
// Only works for "Pfister Comet Safari"??
|
||||||
|
if (VehicleMods != LastVehicleMods)
|
||||||
|
{
|
||||||
|
foreach (KeyValuePair<int, int> mod in VehicleMods)
|
||||||
|
{
|
||||||
|
MainVehicle.Mods[(VehicleModType)mod.Key].Index = mod.Value;
|
||||||
|
// Same effect
|
||||||
|
//Function.Call(Hash.SET_VEHICLE_MOD, MainVehicle, mod.Key, mod.Value, false);
|
||||||
|
}
|
||||||
|
LastVehicleMods = VehicleMods;
|
||||||
|
}
|
||||||
|
|
||||||
if (Character.IsOnBike && MainVehicle.ClassType == VehicleClass.Cycles)
|
if (Character.IsOnBike && MainVehicle.ClassType == VehicleClass.Cycles)
|
||||||
{
|
{
|
||||||
bool isFastPedaling = Function.Call<bool>(Hash.IS_ENTITY_PLAYING_ANIM, Character.Handle, PedalingAnimDict(), "fast_pedal_char", 3);
|
bool isFastPedaling = Function.Call<bool>(Hash.IS_ENTITY_PLAYING_ANIM, Character.Handle, PedalingAnimDict(), "fast_pedal_char", 3);
|
||||||
@ -333,6 +359,56 @@ namespace CoopClient
|
|||||||
MainVehicle.IsSirenActive = LastVehIsSireneActive = VehIsSireneActive;
|
MainVehicle.IsSirenActive = LastVehIsSireneActive = VehIsSireneActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VehDoors != null && VehDoors != LastVehDoors)
|
||||||
|
{
|
||||||
|
int doorLength = VehDoors.Length;
|
||||||
|
if (VehDoors.Length != 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < (doorLength - 1); i++)
|
||||||
|
{
|
||||||
|
VehicleDoor door = MainVehicle.Doors[(VehicleDoorIndex)i];
|
||||||
|
VehicleDoors aDoor = VehDoors[i];
|
||||||
|
|
||||||
|
if (aDoor.Broken)
|
||||||
|
{
|
||||||
|
if (!door.IsBroken)
|
||||||
|
{
|
||||||
|
door.Break();
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (!aDoor.Broken && door.IsBroken)
|
||||||
|
{
|
||||||
|
// Repair?
|
||||||
|
//MainVehicle.Repair();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aDoor.FullyOpen)
|
||||||
|
{
|
||||||
|
if (!door.IsFullyOpen)
|
||||||
|
{
|
||||||
|
door.Open(false, true);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (aDoor.Open)
|
||||||
|
{
|
||||||
|
if (!door.IsOpen)
|
||||||
|
{
|
||||||
|
door.Open();
|
||||||
|
}
|
||||||
|
|
||||||
|
door.AngleRatio = aDoor.AngleRatio;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
door.Close(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LastVehDoors = VehDoors;
|
||||||
|
}
|
||||||
|
|
||||||
if (VehIsInBurnout && !LastVehIsInBurnout && (LastVehIsInBurnout = true))
|
if (VehIsInBurnout && !LastVehIsInBurnout && (LastVehIsInBurnout = true))
|
||||||
{
|
{
|
||||||
Function.Call(Hash.SET_VEHICLE_BURNOUT, MainVehicle, true);
|
Function.Call(Hash.SET_VEHICLE_BURNOUT, MainVehicle, true);
|
||||||
|
@ -237,7 +237,7 @@ namespace CoopClient
|
|||||||
DebugSyncPed = Players["DebugKey"];
|
DebugSyncPed = Players["DebugKey"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Environment.TickCount - ArtificialLagCounter) < 27)
|
if ((Environment.TickCount - ArtificialLagCounter) < 37)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -299,6 +299,8 @@ namespace CoopClient
|
|||||||
DebugSyncPed.VehicleSpeed = veh.Speed;
|
DebugSyncPed.VehicleSpeed = veh.Speed;
|
||||||
DebugSyncPed.VehicleSteeringAngle = veh.SteeringAngle;
|
DebugSyncPed.VehicleSteeringAngle = veh.SteeringAngle;
|
||||||
DebugSyncPed.VehicleColors = new int[] { primaryColor, secondaryColor };
|
DebugSyncPed.VehicleColors = new int[] { primaryColor, secondaryColor };
|
||||||
|
DebugSyncPed.VehicleMods = Util.GetVehicleMods(veh);
|
||||||
|
DebugSyncPed.VehDoors = Util.GetVehicleDoors(veh.Doors);
|
||||||
DebugSyncPed.LastSyncWasFull = (flags.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
DebugSyncPed.LastSyncWasFull = (flags.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
||||||
DebugSyncPed.IsInVehicle = (flags.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
DebugSyncPed.IsInVehicle = (flags.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
||||||
DebugSyncPed.VehIsEngineRunning = (flags.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
DebugSyncPed.VehIsEngineRunning = (flags.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
||||||
@ -306,6 +308,7 @@ namespace CoopClient
|
|||||||
DebugSyncPed.VehAreHighBeamsOn = (flags.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
DebugSyncPed.VehAreHighBeamsOn = (flags.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
||||||
DebugSyncPed.VehIsInBurnout = (flags.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
DebugSyncPed.VehIsInBurnout = (flags.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
||||||
DebugSyncPed.VehIsSireneActive = (flags.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
DebugSyncPed.VehIsSireneActive = (flags.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
||||||
|
DebugSyncPed.VehicleDead = (flags.Value & (byte)VehicleDataFlags.IsDead) > 0;
|
||||||
|
|
||||||
if (DebugSyncPed.MainVehicle != null && DebugSyncPed.MainVehicle.Exists() && player.IsInVehicle())
|
if (DebugSyncPed.MainVehicle != null && DebugSyncPed.MainVehicle.Exists() && player.IsInVehicle())
|
||||||
{
|
{
|
||||||
|
@ -307,6 +307,7 @@ namespace CoopClient
|
|||||||
player.VehicleSpeed = packet.VehSpeed;
|
player.VehicleSpeed = packet.VehSpeed;
|
||||||
player.VehicleSteeringAngle = packet.VehSteeringAngle;
|
player.VehicleSteeringAngle = packet.VehSteeringAngle;
|
||||||
player.VehicleColors = packet.VehColors;
|
player.VehicleColors = packet.VehColors;
|
||||||
|
player.VehDoors = packet.VehDoors;
|
||||||
player.LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
player.LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
||||||
player.IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
player.IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
||||||
player.VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
player.VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
||||||
@ -314,6 +315,7 @@ namespace CoopClient
|
|||||||
player.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
player.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
||||||
player.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
player.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
||||||
player.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
player.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
||||||
|
player.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,6 +373,7 @@ namespace CoopClient
|
|||||||
player.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
player.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
||||||
player.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
player.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
||||||
player.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
player.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
||||||
|
player.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion // -- PLAYER --
|
#endregion // -- PLAYER --
|
||||||
@ -454,6 +457,7 @@ namespace CoopClient
|
|||||||
npc.VehicleSpeed = packet.VehSpeed;
|
npc.VehicleSpeed = packet.VehSpeed;
|
||||||
npc.VehicleSteeringAngle = packet.VehSteeringAngle;
|
npc.VehicleSteeringAngle = packet.VehSteeringAngle;
|
||||||
npc.VehicleColors = packet.VehColors;
|
npc.VehicleColors = packet.VehColors;
|
||||||
|
npc.VehDoors = packet.VehDoors;
|
||||||
npc.LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
npc.LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0;
|
||||||
npc.IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
npc.IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0;
|
||||||
npc.VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
npc.VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0;
|
||||||
@ -461,6 +465,7 @@ namespace CoopClient
|
|||||||
npc.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
npc.VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0;
|
||||||
npc.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
npc.VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0;
|
||||||
npc.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
npc.VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0;
|
||||||
|
npc.VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -480,13 +485,15 @@ namespace CoopClient
|
|||||||
VehicleSpeed = packet.VehSpeed,
|
VehicleSpeed = packet.VehSpeed,
|
||||||
VehicleSteeringAngle = packet.VehSteeringAngle,
|
VehicleSteeringAngle = packet.VehSteeringAngle,
|
||||||
VehicleColors = packet.VehColors,
|
VehicleColors = packet.VehColors,
|
||||||
|
VehDoors = packet.VehDoors,
|
||||||
LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0,
|
LastSyncWasFull = (packet.Flag.Value & (byte)VehicleDataFlags.LastSyncWasFull) > 0,
|
||||||
IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0,
|
IsInVehicle = (packet.Flag.Value & (byte)VehicleDataFlags.IsInVehicle) > 0,
|
||||||
VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0,
|
VehIsEngineRunning = (packet.Flag.Value & (byte)VehicleDataFlags.IsEngineRunning) > 0,
|
||||||
VehAreLightsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreLightsOn) > 0,
|
VehAreLightsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreLightsOn) > 0,
|
||||||
VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0,
|
VehAreHighBeamsOn = (packet.Flag.Value & (byte)VehicleDataFlags.AreHighBeamsOn) > 0,
|
||||||
VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0,
|
VehIsInBurnout = (packet.Flag.Value & (byte)VehicleDataFlags.IsInBurnout) > 0,
|
||||||
VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0
|
VehIsSireneActive = (packet.Flag.Value & (byte)VehicleDataFlags.IsSirenActive) > 0,
|
||||||
|
VehicleDead = (packet.Flag.Value & (byte)VehicleDataFlags.IsDead) > 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -546,6 +553,7 @@ namespace CoopClient
|
|||||||
VehSpeed = player.CurrentVehicle.Speed,
|
VehSpeed = player.CurrentVehicle.Speed,
|
||||||
VehSteeringAngle = player.CurrentVehicle.SteeringAngle,
|
VehSteeringAngle = player.CurrentVehicle.SteeringAngle,
|
||||||
VehColors = new int[] { primaryColor, secondaryColor },
|
VehColors = new int[] { primaryColor, secondaryColor },
|
||||||
|
VehDoors = Util.GetVehicleDoors(player.CurrentVehicle.Doors),
|
||||||
Flag = Util.GetVehicleFlags(player, player.CurrentVehicle, true)
|
Flag = Util.GetVehicleFlags(player, player.CurrentVehicle, true)
|
||||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||||
}
|
}
|
||||||
@ -638,6 +646,7 @@ namespace CoopClient
|
|||||||
VehSpeed = npc.CurrentVehicle.Speed,
|
VehSpeed = npc.CurrentVehicle.Speed,
|
||||||
VehSteeringAngle = npc.CurrentVehicle.SteeringAngle,
|
VehSteeringAngle = npc.CurrentVehicle.SteeringAngle,
|
||||||
VehColors = new int[] { primaryColor, secondaryColor },
|
VehColors = new int[] { primaryColor, secondaryColor },
|
||||||
|
VehDoors = Util.GetVehicleDoors(npc.CurrentVehicle.Doors),
|
||||||
Flag = Util.GetVehicleFlags(npc, npc.CurrentVehicle, true)
|
Flag = Util.GetVehicleFlags(npc, npc.CurrentVehicle, true)
|
||||||
}.PacketToNetOutGoingMessage(outgoingMessage);
|
}.PacketToNetOutGoingMessage(outgoingMessage);
|
||||||
}
|
}
|
||||||
|
@ -141,6 +141,7 @@ namespace CoopClient
|
|||||||
IsInVehicle = 1 << 7
|
IsInVehicle = 1 << 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region ===== VEHICLE DATA =====
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum VehicleDataFlags
|
public enum VehicleDataFlags
|
||||||
{
|
{
|
||||||
@ -150,9 +151,37 @@ namespace CoopClient
|
|||||||
AreLightsOn = 1 << 3,
|
AreLightsOn = 1 << 3,
|
||||||
AreHighBeamsOn = 1 << 4,
|
AreHighBeamsOn = 1 << 4,
|
||||||
IsInBurnout = 1 << 5,
|
IsInBurnout = 1 << 5,
|
||||||
IsSirenActive = 1 << 6
|
IsSirenActive = 1 << 6,
|
||||||
|
IsDead = 1 << 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ProtoContract]
|
||||||
|
public struct VehicleDoors
|
||||||
|
{
|
||||||
|
#region CLIENT-ONLY
|
||||||
|
public VehicleDoors(float angleRatio = 0f, bool broken = false, bool open = false, bool fullyOpen = false)
|
||||||
|
{
|
||||||
|
AngleRatio = angleRatio;
|
||||||
|
Broken = broken;
|
||||||
|
Open = open;
|
||||||
|
FullyOpen = fullyOpen;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public float AngleRatio { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(2)]
|
||||||
|
public bool Broken { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(3)]
|
||||||
|
public bool Open { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(4)]
|
||||||
|
public bool FullyOpen { get; set; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public interface IPacket
|
public interface IPacket
|
||||||
{
|
{
|
||||||
void PacketToNetOutGoingMessage(NetOutgoingMessage message);
|
void PacketToNetOutGoingMessage(NetOutgoingMessage message);
|
||||||
@ -377,6 +406,9 @@ namespace CoopClient
|
|||||||
public int[] VehColors { get; set; }
|
public int[] VehColors { get; set; }
|
||||||
|
|
||||||
[ProtoMember(14)]
|
[ProtoMember(14)]
|
||||||
|
public VehicleDoors[] VehDoors { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(15)]
|
||||||
public byte? Flag { get; set; } = 0;
|
public byte? Flag { get; set; } = 0;
|
||||||
|
|
||||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||||
@ -407,6 +439,8 @@ namespace CoopClient
|
|||||||
VehVelocity = data.VehVelocity;
|
VehVelocity = data.VehVelocity;
|
||||||
VehSpeed = data.VehSpeed;
|
VehSpeed = data.VehSpeed;
|
||||||
VehSteeringAngle = data.VehSteeringAngle;
|
VehSteeringAngle = data.VehSteeringAngle;
|
||||||
|
VehColors = data.VehColors;
|
||||||
|
VehDoors = data.VehDoors;
|
||||||
Flag = data.Flag;
|
Flag = data.Flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -676,6 +710,9 @@ namespace CoopClient
|
|||||||
public int[] VehColors { get; set; }
|
public int[] VehColors { get; set; }
|
||||||
|
|
||||||
[ProtoMember(14)]
|
[ProtoMember(14)]
|
||||||
|
public VehicleDoors[] VehDoors { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(15)]
|
||||||
public byte? Flag { get; set; } = 0;
|
public byte? Flag { get; set; } = 0;
|
||||||
|
|
||||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||||
@ -706,6 +743,8 @@ namespace CoopClient
|
|||||||
VehVelocity = data.VehVelocity;
|
VehVelocity = data.VehVelocity;
|
||||||
VehSpeed = data.VehSpeed;
|
VehSpeed = data.VehSpeed;
|
||||||
VehSteeringAngle = data.VehSteeringAngle;
|
VehSteeringAngle = data.VehSteeringAngle;
|
||||||
|
VehColors = data.VehColors;
|
||||||
|
VehDoors = data.VehDoors;
|
||||||
Flag = data.Flag;
|
Flag = data.Flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,6 +162,11 @@ namespace CoopClient
|
|||||||
flags |= (byte)VehicleDataFlags.IsSirenActive;
|
flags |= (byte)VehicleDataFlags.IsSirenActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (veh.IsDead)
|
||||||
|
{
|
||||||
|
flags |= (byte)VehicleDataFlags.IsDead;
|
||||||
|
}
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,6 +228,40 @@ namespace CoopClient
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Dictionary<int, int> GetVehicleMods(Vehicle veh)
|
||||||
|
{
|
||||||
|
Dictionary<int, int> result = new Dictionary<int, int>();
|
||||||
|
foreach (VehicleMod mod in veh.Mods.ToArray())
|
||||||
|
{
|
||||||
|
result.Add((int)mod.Type, mod.Index);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static VehicleDoors[] GetVehicleDoors(VehicleDoorCollection doors)
|
||||||
|
{
|
||||||
|
int doorLength = doors.ToArray().Length;
|
||||||
|
if (doorLength == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
VehicleDoors[] result = new VehicleDoors[doorLength];
|
||||||
|
for (int i = 0; i < (doorLength - 1); i++)
|
||||||
|
{
|
||||||
|
VehicleDoors currentDoor = new VehicleDoors()
|
||||||
|
{
|
||||||
|
AngleRatio = doors[(VehicleDoorIndex)i].AngleRatio,
|
||||||
|
Broken = doors[(VehicleDoorIndex)i].IsBroken,
|
||||||
|
Open = doors[(VehicleDoorIndex)i].IsOpen,
|
||||||
|
FullyOpen = doors[(VehicleDoorIndex)i].IsFullyOpen
|
||||||
|
};
|
||||||
|
result[i] = currentDoor;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static Settings ReadSettings()
|
public static Settings ReadSettings()
|
||||||
{
|
{
|
||||||
XmlSerializer ser = new XmlSerializer(typeof(Settings));
|
XmlSerializer ser = new XmlSerializer(typeof(Settings));
|
||||||
|
@ -83,6 +83,7 @@ namespace CoopServer
|
|||||||
IsInVehicle = 1 << 7
|
IsInVehicle = 1 << 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region ===== VEHICLE DATA =====
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum VehicleDataFlags
|
public enum VehicleDataFlags
|
||||||
{
|
{
|
||||||
@ -92,9 +93,27 @@ namespace CoopServer
|
|||||||
AreLightsOn = 1 << 3,
|
AreLightsOn = 1 << 3,
|
||||||
AreHighBeamsOn = 1 << 4,
|
AreHighBeamsOn = 1 << 4,
|
||||||
IsInBurnout = 1 << 5,
|
IsInBurnout = 1 << 5,
|
||||||
IsSirenActive = 1 << 6
|
IsSirenActive = 1 << 6,
|
||||||
|
IsDead = 1 << 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ProtoContract]
|
||||||
|
public struct VehicleDoors
|
||||||
|
{
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public float AngleRatio { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(2)]
|
||||||
|
public bool Broken { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(3)]
|
||||||
|
public bool Open { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(4)]
|
||||||
|
public bool FullyOpen { get; set; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public interface IPacket
|
public interface IPacket
|
||||||
{
|
{
|
||||||
void PacketToNetOutGoingMessage(NetOutgoingMessage message);
|
void PacketToNetOutGoingMessage(NetOutgoingMessage message);
|
||||||
@ -319,6 +338,9 @@ namespace CoopServer
|
|||||||
public int[] VehColors { get; set; }
|
public int[] VehColors { get; set; }
|
||||||
|
|
||||||
[ProtoMember(14)]
|
[ProtoMember(14)]
|
||||||
|
public VehicleDoors[] VehDoors { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(15)]
|
||||||
public byte? Flag { get; set; } = 0;
|
public byte? Flag { get; set; } = 0;
|
||||||
|
|
||||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||||
@ -349,6 +371,8 @@ namespace CoopServer
|
|||||||
VehVelocity = data.VehVelocity;
|
VehVelocity = data.VehVelocity;
|
||||||
VehSpeed = data.VehSpeed;
|
VehSpeed = data.VehSpeed;
|
||||||
VehSteeringAngle = data.VehSteeringAngle;
|
VehSteeringAngle = data.VehSteeringAngle;
|
||||||
|
VehColors = data.VehColors;
|
||||||
|
VehDoors = data.VehDoors;
|
||||||
Flag = data.Flag;
|
Flag = data.Flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -618,6 +642,9 @@ namespace CoopServer
|
|||||||
public int[] VehColors { get; set; }
|
public int[] VehColors { get; set; }
|
||||||
|
|
||||||
[ProtoMember(14)]
|
[ProtoMember(14)]
|
||||||
|
public VehicleDoors[] VehDoors { get; set; }
|
||||||
|
|
||||||
|
[ProtoMember(15)]
|
||||||
public byte? Flag { get; set; } = 0;
|
public byte? Flag { get; set; } = 0;
|
||||||
|
|
||||||
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
|
||||||
@ -648,6 +675,8 @@ namespace CoopServer
|
|||||||
VehVelocity = data.VehVelocity;
|
VehVelocity = data.VehVelocity;
|
||||||
VehSpeed = data.VehSpeed;
|
VehSpeed = data.VehSpeed;
|
||||||
VehSteeringAngle = data.VehSteeringAngle;
|
VehSteeringAngle = data.VehSteeringAngle;
|
||||||
|
VehColors = data.VehColors;
|
||||||
|
VehDoors = data.VehDoors;
|
||||||
Flag = data.Flag;
|
Flag = data.Flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user