Vehicle flag fix
This commit is contained in:
@ -283,7 +283,7 @@ namespace RageCoop.Client
|
||||
// Main.Logger.Debug($"Creating character for incoming sync:{packet.ID}");
|
||||
EntityPool.ThreadSafe.Add(c=new SyncedPed(packet.ID));
|
||||
}
|
||||
PedDataFlags flags = packet.Flag;
|
||||
PedDataFlags flags = packet.Flags;
|
||||
c.ID=packet.ID;
|
||||
c.OwnerID=packet.OwnerID;
|
||||
c.Health = packet.Health;
|
||||
@ -309,7 +309,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
c.AimCoords = packet.AimCoords;
|
||||
}
|
||||
if (packet.Flag.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
if (packet.Flags.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
{
|
||||
c.Clothes=packet.Clothes;
|
||||
c.WeaponComponents=packet.WeaponComponents;
|
||||
@ -332,7 +332,7 @@ namespace RageCoop.Client
|
||||
if (v.IsLocal) { return; }
|
||||
v.ID= packet.ID;
|
||||
v.OwnerID= packet.OwnerID;
|
||||
v.Flags=packet.Flag;
|
||||
v.Flags=packet.Flags;
|
||||
v.Position=packet.Position;
|
||||
v.Quaternion=packet.Quaternion;
|
||||
v.SteeringAngle=packet.SteeringAngle;
|
||||
@ -342,7 +342,7 @@ namespace RageCoop.Client
|
||||
v.RotationVelocity=packet.RotationVelocity;
|
||||
v.DeluxoWingRatio=packet.DeluxoWingRatio;
|
||||
v.LastSynced=Main.Ticked;
|
||||
if (packet.Flag.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
if (packet.Flags.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
{
|
||||
v.DamageModel=packet.DamageModel;
|
||||
v.EngineHealth=packet.EngineHealth;
|
||||
@ -351,14 +351,6 @@ namespace RageCoop.Client
|
||||
v.Colors=packet.Colors;
|
||||
v.LandingGear=packet.LandingGear;
|
||||
v.RoofState=(VehicleRoofState)packet.RoofState;
|
||||
v.EngineRunning = packet.Flag.HasVehFlag(VehicleDataFlags.IsEngineRunning);
|
||||
v.LightsOn = packet.Flag.HasVehFlag(VehicleDataFlags.AreLightsOn);
|
||||
v.BrakeLightsOn = packet.Flag.HasVehFlag(VehicleDataFlags.AreBrakeLightsOn);
|
||||
v.HighBeamsOn = packet.Flag.HasVehFlag(VehicleDataFlags.AreHighBeamsOn);
|
||||
v.SireneActive = packet.Flag.HasVehFlag(VehicleDataFlags.IsSirenActive);
|
||||
v.IsDead = packet.Flag.HasVehFlag(VehicleDataFlags.IsDead);
|
||||
v.HornActive = packet.Flag.HasVehFlag(VehicleDataFlags.IsHornActive);
|
||||
v.Transformed = packet.Flag.HasVehFlag(VehicleDataFlags.IsTransformed);
|
||||
v.Passengers=new Dictionary<VehicleSeat, SyncedPed>();
|
||||
v.LockStatus=packet.LockStatus;
|
||||
v.RadioStation=packet.RadioStation;
|
||||
|
@ -37,16 +37,16 @@ namespace RageCoop.Client
|
||||
Velocity = p.Velocity,
|
||||
Speed = p.GetPedSpeed(),
|
||||
CurrentWeaponHash = (uint)p.Weapons.Current.Hash,
|
||||
Flag = p.GetPedFlags(),
|
||||
Flags = p.GetPedFlags(),
|
||||
Heading=p.Heading,
|
||||
};
|
||||
if (packet.Flag.HasPedFlag(PedDataFlags.IsAiming))
|
||||
if (packet.Flags.HasPedFlag(PedDataFlags.IsAiming))
|
||||
{
|
||||
packet.AimCoords = p.GetAimCoord();
|
||||
}
|
||||
if (full)
|
||||
{
|
||||
packet.Flag |= PedDataFlags.IsFullSync;
|
||||
packet.Flags |= PedDataFlags.IsFullSync;
|
||||
packet.Clothes=p.GetPedClothes();
|
||||
packet.ModelHash=p.Model.Hash;
|
||||
packet.WeaponComponents=p.Weapons.Current.GetWeaponComponents();
|
||||
@ -79,7 +79,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
ID =v.ID,
|
||||
OwnerID=v.OwnerID,
|
||||
Flag = veh.GetVehicleFlags(),
|
||||
Flags = veh.GetVehicleFlags(),
|
||||
SteeringAngle = veh.SteeringAngle,
|
||||
Position = veh.PredictPosition(),
|
||||
Quaternion=veh.Quaternion,
|
||||
@ -88,7 +88,7 @@ namespace RageCoop.Client
|
||||
ThrottlePower = veh.ThrottlePower,
|
||||
BrakePower = veh.BrakePower,
|
||||
};
|
||||
if (packet.Flag.HasVehFlag(VehicleDataFlags.IsDeluxoHovering)) { packet.DeluxoWingRatio=v.MainVehicle.GetDeluxoWingRatio(); }
|
||||
if (packet.Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering)) { packet.DeluxoWingRatio=v.MainVehicle.GetDeluxoWingRatio(); }
|
||||
if (full)
|
||||
{
|
||||
byte primaryColor = 0;
|
||||
@ -97,7 +97,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
Function.Call<byte>(Hash.GET_VEHICLE_COLOURS, veh, &primaryColor, &secondaryColor);
|
||||
}
|
||||
packet.Flag |= VehicleDataFlags.IsFullSync;
|
||||
packet.Flags |= VehicleDataFlags.IsFullSync;
|
||||
packet.Colors = new byte[] { primaryColor, secondaryColor };
|
||||
packet.DamageModel=veh.GetVehicleDamageModel();
|
||||
packet.LandingGear = veh.IsAircraft ? (byte)veh.LandingGearState : (byte)0;
|
||||
|
@ -74,24 +74,28 @@ namespace RageCoop.Client
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region FLAGS
|
||||
internal bool EngineRunning { get { return Flags.HasVehFlag(VehicleDataFlags.IsEngineRunning); } }
|
||||
private bool _lastTransformed = false;
|
||||
internal bool Transformed { get { return Flags.HasVehFlag(VehicleDataFlags.IsTransformed); } }
|
||||
private bool _lastHornActive = false;
|
||||
internal bool HornActive { get { return Flags.HasVehFlag(VehicleDataFlags.IsHornActive); } }
|
||||
internal bool LightsOn { get { return Flags.HasVehFlag(VehicleDataFlags.AreLightsOn); } }
|
||||
internal bool BrakeLightsOn { get { return Flags.HasVehFlag(VehicleDataFlags.AreBrakeLightsOn); } }
|
||||
internal bool HighBeamsOn { get { return Flags.HasVehFlag(VehicleDataFlags.AreHighBeamsOn); } }
|
||||
internal bool SireneActive { get { return Flags.HasVehFlag(VehicleDataFlags.IsSirenActive); } }
|
||||
internal bool IsDead { get { return Flags.HasVehFlag(VehicleDataFlags.IsDead); } }
|
||||
internal bool IsDeluxoHovering { get { return Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering); } }
|
||||
#endregion
|
||||
|
||||
#region -- VEHICLE STATE --
|
||||
internal VehicleDataFlags Flags { get; set; }
|
||||
internal bool EngineRunning { get; set; }
|
||||
private bool _lastTransformed = false;
|
||||
internal bool Transformed { get; set; }
|
||||
private bool _lastHornActive = false;
|
||||
internal bool HornActive { get; set; }
|
||||
internal bool LightsOn { get; set; }
|
||||
internal bool BrakeLightsOn { get; set; } = false;
|
||||
internal bool HighBeamsOn { get; set; }
|
||||
|
||||
internal byte LandingGear { get; set; }
|
||||
internal VehicleRoofState RoofState { get; set; }
|
||||
internal bool SireneActive { get; set; }
|
||||
internal VehicleDamageModel DamageModel { get; set; }
|
||||
internal byte[] Colors { get; set; }
|
||||
internal Dictionary<int, int> Mods { get; set; }
|
||||
internal bool IsDead { get; set; }
|
||||
internal float EngineHealth { get; set; }
|
||||
internal VehicleLockStatus LockStatus{get;set;}
|
||||
/// <summary>
|
||||
@ -160,12 +164,116 @@ namespace RageCoop.Client
|
||||
MainVehicle.Velocity=Velocity;
|
||||
MainVehicle.Quaternion=Quaternion;
|
||||
}
|
||||
if (DeluxoWingRatio!=-1)
|
||||
#region FLAGS
|
||||
if (IsDead)
|
||||
{
|
||||
if (MainVehicle.IsDead)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
MainVehicle.Explode();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MainVehicle.IsDead)
|
||||
{
|
||||
MainVehicle.Repair();
|
||||
}
|
||||
}
|
||||
|
||||
if (EngineRunning != MainVehicle.IsEngineRunning)
|
||||
{
|
||||
MainVehicle.IsEngineRunning = EngineRunning;
|
||||
}
|
||||
|
||||
if (LightsOn != MainVehicle.AreLightsOn)
|
||||
{
|
||||
MainVehicle.AreLightsOn = LightsOn;
|
||||
}
|
||||
|
||||
if (HighBeamsOn != MainVehicle.AreHighBeamsOn)
|
||||
{
|
||||
MainVehicle.AreHighBeamsOn = HighBeamsOn;
|
||||
}
|
||||
|
||||
if (MainVehicle.IsSubmarineCar)
|
||||
{
|
||||
if (Transformed)
|
||||
{
|
||||
if (!_lastTransformed)
|
||||
{
|
||||
_lastTransformed = true;
|
||||
Function.Call(Hash._TRANSFORM_VEHICLE_TO_SUBMARINE, MainVehicle.Handle, false);
|
||||
}
|
||||
}
|
||||
else if (_lastTransformed)
|
||||
{
|
||||
_lastTransformed = false;
|
||||
Function.Call(Hash._TRANSFORM_SUBMARINE_TO_VEHICLE, MainVehicle.Handle, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (MainVehicle.IsAircraft)
|
||||
{
|
||||
if (LandingGear != (byte)MainVehicle.LandingGearState)
|
||||
{
|
||||
MainVehicle.LandingGearState = (VehicleLandingGearState)LandingGear;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MainVehicle.HasSiren && SireneActive != MainVehicle.IsSirenActive)
|
||||
{
|
||||
MainVehicle.IsSirenActive = SireneActive;
|
||||
}
|
||||
|
||||
if (HornActive)
|
||||
{
|
||||
if (!_lastHornActive)
|
||||
{
|
||||
_lastHornActive = true;
|
||||
MainVehicle.SoundHorn(99999);
|
||||
}
|
||||
}
|
||||
else if (_lastHornActive)
|
||||
{
|
||||
_lastHornActive = false;
|
||||
MainVehicle.SoundHorn(1);
|
||||
}
|
||||
|
||||
if (MainVehicle.HasRoof && MainVehicle.RoofState!=RoofState)
|
||||
{
|
||||
MainVehicle.RoofState=RoofState;
|
||||
}
|
||||
|
||||
Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle.Handle, BrakeLightsOn);
|
||||
MainVehicle.SetDamageModel(DamageModel);
|
||||
|
||||
}
|
||||
MainVehicle.LockStatus=LockStatus;
|
||||
if (IsDeluxoHovering)
|
||||
{
|
||||
if (!MainVehicle.IsDeluxoHovering())
|
||||
{
|
||||
MainVehicle.SetDeluxoHoverState(true);
|
||||
}
|
||||
MainVehicle.SetDeluxoWingRatio(DeluxoWingRatio);
|
||||
}
|
||||
else if (Model==1483171323)
|
||||
{
|
||||
if (MainVehicle.IsDeluxoHovering())
|
||||
{
|
||||
MainVehicle.SetDeluxoHoverState(false);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
if (LastFullSynced>LastUpdated)
|
||||
|
||||
#endregion
|
||||
|
||||
if (LastFullSynced>=LastUpdated)
|
||||
{
|
||||
#region -- SYNC STATE --
|
||||
#region -- PASSENGER SYNC --
|
||||
@ -226,109 +334,6 @@ namespace RageCoop.Client
|
||||
}
|
||||
|
||||
|
||||
if (IsDead)
|
||||
{
|
||||
if (MainVehicle.IsDead)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
MainVehicle.Explode();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MainVehicle.IsDead)
|
||||
{
|
||||
MainVehicle.Repair();
|
||||
}
|
||||
}
|
||||
|
||||
if (EngineRunning != MainVehicle.IsEngineRunning)
|
||||
{
|
||||
MainVehicle.IsEngineRunning = EngineRunning;
|
||||
}
|
||||
|
||||
if (LightsOn != MainVehicle.AreLightsOn)
|
||||
{
|
||||
MainVehicle.AreLightsOn = LightsOn;
|
||||
}
|
||||
|
||||
if (HighBeamsOn != MainVehicle.AreHighBeamsOn)
|
||||
{
|
||||
MainVehicle.AreHighBeamsOn = HighBeamsOn;
|
||||
}
|
||||
|
||||
if (MainVehicle.IsSubmarineCar)
|
||||
{
|
||||
if (Transformed)
|
||||
{
|
||||
if (!_lastTransformed)
|
||||
{
|
||||
_lastTransformed = true;
|
||||
Function.Call(Hash._TRANSFORM_VEHICLE_TO_SUBMARINE, MainVehicle.Handle, false);
|
||||
}
|
||||
}
|
||||
else if (_lastTransformed)
|
||||
{
|
||||
_lastTransformed = false;
|
||||
Function.Call(Hash._TRANSFORM_SUBMARINE_TO_VEHICLE, MainVehicle.Handle, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (MainVehicle.IsAircraft)
|
||||
{
|
||||
if (LandingGear != (byte)MainVehicle.LandingGearState)
|
||||
{
|
||||
MainVehicle.LandingGearState = (VehicleLandingGearState)LandingGear;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MainVehicle.HasSiren && SireneActive != MainVehicle.IsSirenActive)
|
||||
{
|
||||
MainVehicle.IsSirenActive = SireneActive;
|
||||
}
|
||||
|
||||
if (HornActive)
|
||||
{
|
||||
if (!_lastHornActive)
|
||||
{
|
||||
_lastHornActive = true;
|
||||
MainVehicle.SoundHorn(99999);
|
||||
}
|
||||
}
|
||||
else if (_lastHornActive)
|
||||
{
|
||||
_lastHornActive = false;
|
||||
MainVehicle.SoundHorn(1);
|
||||
}
|
||||
|
||||
if (MainVehicle.HasRoof && MainVehicle.RoofState!=RoofState)
|
||||
{
|
||||
MainVehicle.RoofState=RoofState;
|
||||
}
|
||||
|
||||
Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle.Handle, BrakeLightsOn);
|
||||
MainVehicle.SetDamageModel(DamageModel);
|
||||
|
||||
}
|
||||
MainVehicle.LockStatus=LockStatus;
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
|
||||
{
|
||||
if (!MainVehicle.IsDeluxoHovering())
|
||||
{
|
||||
MainVehicle.SetDeluxoHoverState(true);
|
||||
}
|
||||
}
|
||||
else if(Model==1483171323)
|
||||
{
|
||||
if (MainVehicle.IsDeluxoHovering())
|
||||
{
|
||||
MainVehicle.SetDeluxoHoverState(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (Function.Call<string>(Hash.GET_VEHICLE_NUMBER_PLATE_TEXT, MainVehicle)!=LicensePlate)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ namespace RageCoop.Core
|
||||
public int ID { get; set; }
|
||||
|
||||
public int OwnerID { get; set; }
|
||||
public PedDataFlags Flag { get; set; }
|
||||
public PedDataFlags Flags { get; set; }
|
||||
|
||||
public int Health { get; set; }
|
||||
|
||||
@ -66,7 +66,7 @@ namespace RageCoop.Core
|
||||
|
||||
|
||||
// Write ped flags
|
||||
byteArray.AddRange(BitConverter.GetBytes((ushort)Flag));
|
||||
byteArray.AddRange(BitConverter.GetBytes((ushort)Flags));
|
||||
|
||||
// Write ped health
|
||||
byteArray.AddRange(BitConverter.GetBytes(Health));
|
||||
@ -87,7 +87,7 @@ namespace RageCoop.Core
|
||||
// Write ped weapon hash
|
||||
byteArray.AddRange(BitConverter.GetBytes(CurrentWeaponHash));
|
||||
|
||||
if (Flag.HasPedFlag(PedDataFlags.IsAiming))
|
||||
if (Flags.HasPedFlag(PedDataFlags.IsAiming))
|
||||
{
|
||||
// Write ped aim coords
|
||||
byteArray.AddVector3(AimCoords);
|
||||
@ -95,7 +95,7 @@ namespace RageCoop.Core
|
||||
|
||||
byteArray.AddFloat(Heading);
|
||||
|
||||
if (Flag.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
if (Flags.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
{
|
||||
// Write model hash
|
||||
byteArray.AddInt(ModelHash);
|
||||
@ -147,7 +147,7 @@ namespace RageCoop.Core
|
||||
OwnerID=reader.ReadInt();
|
||||
|
||||
// Read player flags
|
||||
Flag = (PedDataFlags)reader.ReadUShort();
|
||||
Flags = (PedDataFlags)reader.ReadUShort();
|
||||
|
||||
// Read player health
|
||||
Health = reader.ReadInt();
|
||||
@ -168,7 +168,7 @@ namespace RageCoop.Core
|
||||
CurrentWeaponHash = reader.ReadUInt();
|
||||
|
||||
// Try to read aim coords
|
||||
if (Flag.HasPedFlag(PedDataFlags.IsAiming))
|
||||
if (Flags.HasPedFlag(PedDataFlags.IsAiming))
|
||||
{
|
||||
// Read player aim coords
|
||||
AimCoords = reader.ReadVector3();
|
||||
@ -176,7 +176,7 @@ namespace RageCoop.Core
|
||||
|
||||
Heading=reader.ReadFloat();
|
||||
|
||||
if (Flag.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
if (Flags.HasPedFlag(PedDataFlags.IsFullSync))
|
||||
{
|
||||
// Read player model hash
|
||||
ModelHash = reader.ReadInt();
|
@ -17,7 +17,7 @@ namespace RageCoop.Core
|
||||
|
||||
public int OwnerID { get; set; }
|
||||
|
||||
public VehicleDataFlags Flag { get; set; }
|
||||
public VehicleDataFlags Flags { get; set; }
|
||||
|
||||
public Vector3 Position { get; set; }
|
||||
|
||||
@ -71,7 +71,7 @@ namespace RageCoop.Core
|
||||
|
||||
byteArray.AddInt(ID);
|
||||
byteArray.AddInt(OwnerID);
|
||||
byteArray.AddUshort((ushort)Flag);
|
||||
byteArray.AddUshort((ushort)Flags);
|
||||
byteArray.AddVector3(Position);
|
||||
byteArray.AddQuaternion(Quaternion);
|
||||
byteArray.AddVector3(Velocity);
|
||||
@ -80,23 +80,23 @@ namespace RageCoop.Core
|
||||
byteArray.AddFloat(BrakePower);
|
||||
byteArray.AddFloat(SteeringAngle);
|
||||
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
|
||||
{
|
||||
byteArray.AddFloat(DeluxoWingRatio);
|
||||
}
|
||||
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
{
|
||||
byteArray.AddInt(ModelHash);
|
||||
byteArray.AddFloat(EngineHealth);
|
||||
|
||||
// Check
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsAircraft))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsAircraft))
|
||||
{
|
||||
// Write the vehicle landing gear
|
||||
byteArray.Add(LandingGear);
|
||||
}
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.HasRoof))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.HasRoof))
|
||||
{
|
||||
byteArray.Add(RoofState);
|
||||
}
|
||||
@ -181,7 +181,7 @@ namespace RageCoop.Core
|
||||
|
||||
OwnerID = reader.ReadInt();
|
||||
|
||||
Flag=(VehicleDataFlags)reader.ReadUShort();
|
||||
Flags=(VehicleDataFlags)reader.ReadUShort();
|
||||
|
||||
// Read position
|
||||
Position = reader.ReadVector3();
|
||||
@ -205,12 +205,12 @@ namespace RageCoop.Core
|
||||
SteeringAngle = reader.ReadFloat();
|
||||
|
||||
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
|
||||
{
|
||||
DeluxoWingRatio = reader.ReadFloat();
|
||||
}
|
||||
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
{
|
||||
// Read vehicle model hash
|
||||
ModelHash = reader.ReadInt();
|
||||
@ -220,12 +220,12 @@ namespace RageCoop.Core
|
||||
|
||||
|
||||
// Check
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.IsAircraft))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.IsAircraft))
|
||||
{
|
||||
// Read vehicle landing gear
|
||||
LandingGear = reader.ReadByte();
|
||||
}
|
||||
if (Flag.HasVehFlag(VehicleDataFlags.HasRoof))
|
||||
if (Flags.HasVehFlag(VehicleDataFlags.HasRoof))
|
||||
{
|
||||
RoofState=reader.ReadByte();
|
||||
}
|
@ -223,7 +223,7 @@ namespace RageCoop.Server.Scripting
|
||||
veh._pos = p.Position;
|
||||
veh.Owner=sender;
|
||||
veh._quat=p.Quaternion;
|
||||
if (p.Flag.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
if (p.Flags.HasVehFlag(VehicleDataFlags.IsFullSync))
|
||||
{
|
||||
foreach (var pair in p.Passengers)
|
||||
{
|
||||
|
Reference in New Issue
Block a user