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,72 +164,7 @@ namespace RageCoop.Client
MainVehicle.Velocity=Velocity;
MainVehicle.Quaternion=Quaternion;
}
if (DeluxoWingRatio!=-1)
{
MainVehicle.SetDeluxoWingRatio(DeluxoWingRatio);
}
#endregion
if (LastFullSynced>LastUpdated)
{
#region -- SYNC STATE --
#region -- PASSENGER SYNC --
// check passengers (and driver).
if (_checkSeat)
{
var currentPassengers = MainVehicle.GetPassengers();
lock (Passengers)
{
for (int i = -1; i<MainVehicle.PassengerCapacity; i++)
{
VehicleSeat seat = (VehicleSeat)i;
if (Passengers.ContainsKey(seat))
{
SyncedPed c = Passengers[seat];
if (c?.ID==Main.LocalPlayerID && (RadioStation!=Function.Call<int>(Hash.GET_PLAYER_RADIO_STATION_INDEX)))
{
Util.SetPlayerRadioIndex(RadioStation);
}
if (c?.MainPed!=null&&(!currentPassengers.ContainsKey(i))&&(!c.MainPed.IsBeingJacked)&&(!c.MainPed.IsTaskActive(TaskType.CTaskExitVehicleSeat)))
{
Passengers[seat].MainPed.SetIntoVehicle(MainVehicle, seat);
}
}
else if (!MainVehicle.IsSeatFree(seat))
{
var p = MainVehicle.Occupants.Where(x => x.SeatIndex==seat).FirstOrDefault();
if ((p!=null)&& !p.IsTaskActive(TaskType.CTaskLeaveAnyCar))
{
p.Task.WarpOutOfVehicle(MainVehicle);
}
}
}
}
}
#endregion
if (Colors != null && Colors != _lastVehicleColors)
{
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, Colors[0], Colors[1]);
_lastVehicleColors = Colors;
}
MainVehicle.EngineHealth=EngineHealth;
if (Mods != null && !Mods.Compare(_lastVehicleMods))
{
Function.Call(Hash.SET_VEHICLE_MOD_KIT, MainVehicle, 0);
foreach (KeyValuePair<int, int> mod in Mods)
{
MainVehicle.Mods[(VehicleModType)mod.Key].Index = mod.Value;
}
_lastVehicleMods = Mods;
}
#region FLAGS
if (IsDead)
{
if (MainVehicle.IsDead)
@ -315,20 +254,86 @@ namespace RageCoop.Client
}
MainVehicle.LockStatus=LockStatus;
if (Flags.HasVehFlag(VehicleDataFlags.IsDeluxoHovering))
if (IsDeluxoHovering)
{
if (!MainVehicle.IsDeluxoHovering())
{
MainVehicle.SetDeluxoHoverState(true);
}
MainVehicle.SetDeluxoWingRatio(DeluxoWingRatio);
}
else if(Model==1483171323)
else if (Model==1483171323)
{
if (MainVehicle.IsDeluxoHovering())
{
MainVehicle.SetDeluxoHoverState(false);
}
}
#endregion
#endregion
if (LastFullSynced>=LastUpdated)
{
#region -- SYNC STATE --
#region -- PASSENGER SYNC --
// check passengers (and driver).
if (_checkSeat)
{
var currentPassengers = MainVehicle.GetPassengers();
lock (Passengers)
{
for (int i = -1; i<MainVehicle.PassengerCapacity; i++)
{
VehicleSeat seat = (VehicleSeat)i;
if (Passengers.ContainsKey(seat))
{
SyncedPed c = Passengers[seat];
if (c?.ID==Main.LocalPlayerID && (RadioStation!=Function.Call<int>(Hash.GET_PLAYER_RADIO_STATION_INDEX)))
{
Util.SetPlayerRadioIndex(RadioStation);
}
if (c?.MainPed!=null&&(!currentPassengers.ContainsKey(i))&&(!c.MainPed.IsBeingJacked)&&(!c.MainPed.IsTaskActive(TaskType.CTaskExitVehicleSeat)))
{
Passengers[seat].MainPed.SetIntoVehicle(MainVehicle, seat);
}
}
else if (!MainVehicle.IsSeatFree(seat))
{
var p = MainVehicle.Occupants.Where(x => x.SeatIndex==seat).FirstOrDefault();
if ((p!=null)&& !p.IsTaskActive(TaskType.CTaskLeaveAnyCar))
{
p.Task.WarpOutOfVehicle(MainVehicle);
}
}
}
}
}
#endregion
if (Colors != null && Colors != _lastVehicleColors)
{
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, Colors[0], Colors[1]);
_lastVehicleColors = Colors;
}
MainVehicle.EngineHealth=EngineHealth;
if (Mods != null && !Mods.Compare(_lastVehicleMods))
{
Function.Call(Hash.SET_VEHICLE_MOD_KIT, MainVehicle, 0);
foreach (KeyValuePair<int, int> mod in Mods)
{
MainVehicle.Mods[(VehicleModType)mod.Key].Index = mod.Value;
}
_lastVehicleMods = Mods;
}
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)
{