Vehicle flag fix

This commit is contained in:
Sardelka
2022-07-17 12:22:11 +08:00
parent 582bb2a7d7
commit 2605aafc4f
6 changed files with 149 additions and 152 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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