Changed vehicle synchronization back to the old one. Fixed custom pause menu and changed it to GTA controls. Small changes

This commit is contained in:
EntenKoeniq
2022-04-18 21:54:34 +02:00
parent a6e416ec06
commit 7d411474cd
5 changed files with 34 additions and 73 deletions

View File

@ -7,7 +7,6 @@ using GTA.Native;
using GTA.Math;
using LemonUI.Elements;
using System.Linq;
namespace CoopClient.Entities.Player
{
@ -26,26 +25,7 @@ namespace CoopClient.Entities.Player
/// <summary>
/// Get the last update = TickCount64()
/// </summary>
public ulong LastUpdateReceived
{
get => _lastUpdateReceived;
set
{
if (_lastUpdateReceived != 0)
{
_latencyAverager.Enqueue(value - _lastUpdateReceived);
if (_latencyAverager.Count >= 10)
{
_latencyAverager.Dequeue();
}
}
_lastUpdateReceived = value;
}
}
private ulong _lastUpdateReceived = 0;
internal double AverageLatency => _latencyAverager.Count == 0 ? 0 : _latencyAverager.Average();
private readonly Queue<ulong> _latencyAverager = new Queue<ulong>();
public ulong LastUpdateReceived { get; set; } = 0;
/// <summary>
/// Get the player latency
/// </summary>

View File

@ -11,6 +11,8 @@ namespace CoopClient.Entities.Player
public partial class EntitiesPlayer
{
#region -- VARIABLES --
private ulong _vehicleStopTime { get; set; }
internal bool IsInVehicle { get; set; }
/// <summary>
/// The latest vehicle model hash (may not have been applied yet)
@ -30,21 +32,9 @@ namespace CoopClient.Entities.Player
/// <summary>
/// The latest vehicle rotation (may not have been applied yet)
/// </summary>
public Quaternion VehicleRotation
{
get => _vehicleRotation;
set
{
_lastVehicleRotation = _vehicleRotation;
_vehicleRotation = value;
}
}
private Quaternion _vehicleRotation;
private Quaternion _lastVehicleRotation;
public Quaternion VehicleRotation { get; set; }
internal float VehicleSpeed { get; set; }
private float _lastVehicleSpeed;
internal float VehicleSteeringAngle { get; set; }
private float _lastVehicleSteeringAngle;
private int _lastVehicleAim = 0;
internal bool VehIsEngineRunning { get; set; }
internal float VehRPM { get; set; }
@ -87,7 +77,7 @@ namespace CoopClient.Entities.Player
return;
}
MainVehicle.IsInvincible = true;
MainVehicle.Quaternion = _vehicleRotation;
MainVehicle.Quaternion = VehicleRotation;
if (MainVehicle.HasRoof)
{
@ -104,7 +94,7 @@ namespace CoopClient.Entities.Player
if (_lastVehicleEnter != 0)
{
if (Util.GetTickCount64() - _lastVehicleEnter < 1500)
if (VehicleSpeed == 0f && Util.GetTickCount64() - _lastVehicleEnter < 1500)
{
return;
}
@ -300,40 +290,26 @@ namespace CoopClient.Entities.Player
private void UpdateVehiclePosition()
{
// We cannot calculate without content
if (_latencyAverager.Count == 0)
MainVehicle.CustomSteeringAngle(VehicleSteeringAngle.ToRadians());
if (VehicleSpeed != 0f && MainVehicle.IsInRange(Position, 7.0f))
{
MainVehicle.PositionNoOffset = Position;
MainVehicle.Quaternion = _vehicleRotation;
return;
int forceMultiplier = (Game.Player.Character.IsInVehicle() && MainVehicle.IsTouching(Game.Player.Character.CurrentVehicle)) ? 1 : 3;
MainVehicle.Velocity = Velocity + forceMultiplier * (Position - MainVehicle.Position);
MainVehicle.Quaternion = Quaternion.Slerp(MainVehicle.Quaternion, VehicleRotation, 0.5f);
}
float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / (float)AverageLatency);
float steerLerp = Util.Lerp(_lastVehicleSteeringAngle.ToRadians(), VehicleSteeringAngle.ToRadians(), avrLat);
_lastVehicleSteeringAngle = VehicleSteeringAngle;
MainVehicle.CustomSteeringAngle(steerLerp);
if (!MainVehicle.IsInRange(Position, 7.0f))
else if ((Util.GetTickCount64() - _vehicleStopTime) <= 1000)
{
MainVehicle.PositionNoOffset = Position;
}
Vector3 posTarget = Util.LinearVectorLerp(MainVehicle.Position, Position + (Position - MainVehicle.Position), Util.GetTickCount64() - _vehicleStopTime, 1000);
if (VehicleSpeed != 0f)
{
float speedLerp = Util.Lerp(_lastVehicleSpeed, VehicleSpeed, avrLat);
_lastVehicleSpeed = Speed;
float force = 1.10f + (float)Math.Sqrt(_latencyAverager.Average() / 2500) + (speedLerp / 250);
float forceVelo = 0.77f + (float)Math.Sqrt(_latencyAverager.Average() / 5000) + (speedLerp / 750);
MainVehicle.Velocity = Velocity * forceVelo + ((Position - MainVehicle.Position) * force);
MainVehicle.Quaternion = _lastVehicleRotation != null ? Quaternion.Slerp(_lastVehicleRotation, _vehicleRotation, avrLat) : _vehicleRotation;
MainVehicle.PositionNoOffset = posTarget;
MainVehicle.Quaternion = Quaternion.Slerp(MainVehicle.Quaternion, VehicleRotation, 0.5f);
}
else
{
MainVehicle.PositionNoOffset = Position;
MainVehicle.Quaternion = _vehicleRotation;
MainVehicle.Quaternion = VehicleRotation;
}
}

View File

@ -178,11 +178,14 @@ namespace CoopClient
return;
}
if (Game.IsControlPressed(GTA.Control.FrontendPauseAlternate))
{
Function.Call(Hash.ACTIVATE_FRONTEND_MENU, Function.Call<int>(Hash.GET_HASH_KEY, "FE_MENU_VERSION_SP_PAUSE"), false, 0);
return;
}
switch (e.KeyCode)
{
case Keys.Escape:
Function.Call(Hash.ACTIVATE_FRONTEND_MENU, Function.Call<int>(Hash.GET_HASH_KEY, "FE_MENU_VERSION_SP_PAUSE"), false, 0);
break;
case Keys.F9:
if (MainMenu.MenuPool.AreAnyVisible)
{
@ -374,7 +377,7 @@ namespace CoopClient
DebugSyncPed = Players[0];
}
if ((Util.GetTickCount64() - _artificialLagCounter) < 243)
if ((Util.GetTickCount64() - _artificialLagCounter) < 147)
{
return;
}

View File

@ -319,7 +319,7 @@ namespace CoopClient
EntitiesPlayer player = Main.Players[packet.NetHandle];
player.Position = packet.Position.ToVector();
player.Latency = packet.Latency.HasValue ? packet.Latency.Value : 0;
player.Latency = packet.Latency ?? 0;
}
}
catch (Exception ex)

View File

@ -35,9 +35,11 @@ namespace CoopClient
return;
}
Game.DisableControlThisFrame(Control.FrontendPause);
Game.DisableControlThisFrame(Control.FrontendPauseAlternate);
Function.Call((Hash)0xB96B00E976BE977F, 0.0f); // _SET_WAVES_INTENSITY
// Sets a value that determines how aggressive the ocean waves will be.
// Values of 2.0 or more make for very aggressive waves like you see during a thunderstorm.
Function.Call(Hash.SET_DEEP_OCEAN_SCALER, 0.0f); // Works only ~200 meters around the player
Function.Call(Hash.SET_CAN_ATTACK_FRIENDLY, Game.Player.Character.Handle, true, false);
@ -53,8 +55,8 @@ namespace CoopClient
Function.Call(Hash.SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME, 0f);
Function.Call(Hash.SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME, 0f);
Function.Call(Hash.SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME, 0f);
Function.Call((Hash)0x2F9A292AD0A3BD89);
Function.Call((Hash)0x5F3B7749C112D552);
Function.Call(Hash.SUPPRESS_SHOCKING_EVENTS_NEXT_FRAME);
Function.Call(Hash.SUPPRESS_AGITATION_EVENTS_NEXT_FRAME);
}
else if (_lastDisableTraffic)
{
@ -78,7 +80,7 @@ namespace CoopClient
Function.Call(Hash.SET_ALL_VEHICLE_GENERATORS_ACTIVE);
Function.Call(Hash.SET_ALL_LOW_PRIORITY_VEHICLE_GENERATORS_ACTIVE, true);
Function.Call(Hash.SET_NUMBER_OF_PARKED_VEHICLES, -1);
Function.Call((Hash)0xF796359A959DF65D, true); // Display distant vehicles
Function.Call(Hash.SET_DISTANT_CARS_ENABLED, true);
Function.Call(Hash.DISABLE_VEHICLE_DISTANTLIGHTS, false);
}
else
@ -94,7 +96,7 @@ namespace CoopClient
Function.Call(Hash.SET_ALL_LOW_PRIORITY_VEHICLE_GENERATORS_ACTIVE, false);
Function.Call(Hash.SET_FAR_DRAW_VEHICLES, false);
Function.Call(Hash.SET_NUMBER_OF_PARKED_VEHICLES, 0);
Function.Call((Hash)0xF796359A959DF65D, false); //Display distant vehicles
Function.Call(Hash.SET_DISTANT_CARS_ENABLED, false);
Function.Call(Hash.DISABLE_VEHICLE_DISTANTLIGHTS, true);
foreach (Ped ped in World.GetAllPeds().Where(p => p.RelationshipGroup != "SYNCPED" && p.Handle != Game.Player.Character?.Handle))