Addded Climb and ClimbLadder sync. Small changes

This commit is contained in:
EntenKoeniq
2021-12-28 19:14:51 +01:00
parent 64dd2f5768
commit 24eb221f57
6 changed files with 131 additions and 72 deletions

View File

@ -21,6 +21,8 @@ namespace CoopClient.Entities.Player
internal byte Speed { get; set; } internal byte Speed { get; set; }
private bool LastIsJumping = false; private bool LastIsJumping = false;
internal bool IsJumping { get; set; } internal bool IsJumping { get; set; }
internal bool IsOnLadder { get; set; }
internal bool IsVaulting { get; set; }
internal bool IsInParachuteFreeFall { get; set; } internal bool IsInParachuteFreeFall { get; set; }
internal bool IsRagdoll { get; set; } internal bool IsRagdoll { get; set; }
internal bool IsOnFire { get; set; } internal bool IsOnFire { get; set; }
@ -60,6 +62,38 @@ namespace CoopClient.Entities.Player
return; return;
} }
if (IsOnLadder)
{
if (!Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, Character.Handle, ETasks.CLIMB_LADDER))
{
Character.Task.ClimbLadder();
}
UpdateOnFootPosition(true, true, false);
return;
}
else if (!IsOnLadder && Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, Character.Handle, ETasks.CLIMB_LADDER))
{
Character.Task.ClearAllImmediately();
}
if (IsVaulting)
{
if (!Character.IsVaulting)
{
Character.Task.Climb();
}
UpdateOnFootPosition(true, true, false);
return;
}
else if (!IsVaulting && Character.IsVaulting)
{
Character.Task.ClearAllImmediately();
}
if (IsOnFire && !Character.IsOnFire) if (IsOnFire && !Character.IsOnFire)
{ {
Character.IsInvincible = false; Character.IsInvincible = false;
@ -78,12 +112,18 @@ namespace CoopClient.Entities.Player
} }
} }
if (IsJumping && !LastIsJumping) if (IsJumping)
{ {
if (!LastIsJumping)
{
LastIsJumping = true;
Character.Task.Jump(); Character.Task.Jump();
} }
LastIsJumping = IsJumping; UpdateOnFootPosition(true, true, false);
return;
}
LastIsJumping = false;
if (IsRagdoll) if (IsRagdoll)
{ {
@ -118,12 +158,6 @@ namespace CoopClient.Entities.Player
return; return;
} }
if (IsJumping || IsOnFire)
{
UpdateOnFootPosition(true, true, false);
return;
}
if (IsReloading) if (IsReloading)
{ {
if (!Character.IsReloading) if (!Character.IsReloading)

View File

@ -409,13 +409,15 @@ namespace CoopClient
DebugSyncPed.CurrentWeaponHash = (uint)player.Weapons.Current.Hash; DebugSyncPed.CurrentWeaponHash = (uint)player.Weapons.Current.Hash;
DebugSyncPed.WeaponComponents = player.Weapons.Current.GetWeaponComponents(); DebugSyncPed.WeaponComponents = player.Weapons.Current.GetWeaponComponents();
DebugSyncPed.LastSyncWasFull = true; DebugSyncPed.LastSyncWasFull = true;
DebugSyncPed.IsAiming = (flags.Value & (byte)PedDataFlags.IsAiming) > 0; DebugSyncPed.IsAiming = (flags.Value & (ushort)PedDataFlags.IsAiming) > 0;
DebugSyncPed.IsShooting = (flags.Value & (byte)PedDataFlags.IsShooting) > 0; DebugSyncPed.IsShooting = (flags.Value & (ushort)PedDataFlags.IsShooting) > 0;
DebugSyncPed.IsReloading = (flags.Value & (byte)PedDataFlags.IsReloading) > 0; DebugSyncPed.IsReloading = (flags.Value & (ushort)PedDataFlags.IsReloading) > 0;
DebugSyncPed.IsJumping = (flags.Value & (byte)PedDataFlags.IsJumping) > 0; DebugSyncPed.IsJumping = (flags.Value & (ushort)PedDataFlags.IsJumping) > 0;
DebugSyncPed.IsRagdoll = (flags.Value & (byte)PedDataFlags.IsRagdoll) > 0; DebugSyncPed.IsRagdoll = (flags.Value & (ushort)PedDataFlags.IsRagdoll) > 0;
DebugSyncPed.IsOnFire = (flags.Value & (byte)PedDataFlags.IsOnFire) > 0; DebugSyncPed.IsOnFire = (flags.Value & (ushort)PedDataFlags.IsOnFire) > 0;
DebugSyncPed.IsInParachuteFreeFall = player.IsInParachuteFreeFall; DebugSyncPed.IsInParachuteFreeFall = (flags.Value & (ushort)PedDataFlags.IsInParachuteFreeFall) > 0;
DebugSyncPed.IsOnLadder = (flags.Value & (ushort)PedDataFlags.IsOnLadder) > 0;
DebugSyncPed.IsVaulting = (flags.Value & (ushort)PedDataFlags.IsVaulting) > 0;
DebugSyncPed.IsInVehicle = false; DebugSyncPed.IsInVehicle = false;
if (DebugSyncPed.Character != null && DebugSyncPed.Character.Exists()) if (DebugSyncPed.Character != null && DebugSyncPed.Character.Exists())

View File

@ -390,13 +390,15 @@ namespace CoopClient
player.CurrentWeaponHash = packet.CurrentWeaponHash; player.CurrentWeaponHash = packet.CurrentWeaponHash;
player.WeaponComponents = packet.WeaponComponents; player.WeaponComponents = packet.WeaponComponents;
player.AimCoords = packet.AimCoords.ToVector(); player.AimCoords = packet.AimCoords.ToVector();
player.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0; player.IsAiming = (packet.Flag.Value & (ushort)PedDataFlags.IsAiming) > 0;
player.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0; player.IsShooting = (packet.Flag.Value & (ushort)PedDataFlags.IsShooting) > 0;
player.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0; player.IsReloading = (packet.Flag.Value & (ushort)PedDataFlags.IsReloading) > 0;
player.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0; player.IsJumping = (packet.Flag.Value & (ushort)PedDataFlags.IsJumping) > 0;
player.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0; player.IsRagdoll = (packet.Flag.Value & (ushort)PedDataFlags.IsRagdoll) > 0;
player.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0; player.IsOnFire = (packet.Flag.Value & (ushort)PedDataFlags.IsOnFire) > 0;
player.IsInParachuteFreeFall = (packet.Flag.Value & (byte)PedDataFlags.IsInParachuteFreeFall) > 0; player.IsInParachuteFreeFall = (packet.Flag.Value & (ushort)PedDataFlags.IsInParachuteFreeFall) > 0;
player.IsOnLadder = (packet.Flag.Value & (ushort)PedDataFlags.IsOnLadder) > 0;
player.IsVaulting = (packet.Flag.Value & (ushort)PedDataFlags.IsVaulting) > 0;
player.IsInVehicle = false; player.IsInVehicle = false;
player.LastSyncWasFull = true; player.LastSyncWasFull = true;
@ -457,13 +459,15 @@ namespace CoopClient
player.Speed = packet.Speed; player.Speed = packet.Speed;
player.CurrentWeaponHash = packet.CurrentWeaponHash; player.CurrentWeaponHash = packet.CurrentWeaponHash;
player.AimCoords = packet.AimCoords.ToVector(); player.AimCoords = packet.AimCoords.ToVector();
player.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0; player.IsAiming = (packet.Flag.Value & (ushort)PedDataFlags.IsAiming) > 0;
player.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0; player.IsShooting = (packet.Flag.Value & (ushort)PedDataFlags.IsShooting) > 0;
player.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0; player.IsReloading = (packet.Flag.Value & (ushort)PedDataFlags.IsReloading) > 0;
player.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0; player.IsJumping = (packet.Flag.Value & (ushort)PedDataFlags.IsJumping) > 0;
player.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0; player.IsRagdoll = (packet.Flag.Value & (ushort)PedDataFlags.IsRagdoll) > 0;
player.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0; player.IsOnFire = (packet.Flag.Value & (ushort)PedDataFlags.IsOnFire) > 0;
player.IsInParachuteFreeFall = (packet.Flag.Value & (byte)PedDataFlags.IsInParachuteFreeFall) > 0; player.IsInParachuteFreeFall = (packet.Flag.Value & (ushort)PedDataFlags.IsInParachuteFreeFall) > 0;
player.IsOnLadder = (packet.Flag.Value & (ushort)PedDataFlags.IsOnLadder) > 0;
player.IsVaulting = (packet.Flag.Value & (ushort)PedDataFlags.IsVaulting) > 0;
player.IsInVehicle = false; player.IsInVehicle = false;
player.LastSyncWasFull = false; player.LastSyncWasFull = false;
@ -660,12 +664,12 @@ namespace CoopClient
npc.Speed = packet.Speed; npc.Speed = packet.Speed;
npc.CurrentWeaponHash = packet.CurrentWeaponHash; npc.CurrentWeaponHash = packet.CurrentWeaponHash;
npc.AimCoords = packet.AimCoords.ToVector(); npc.AimCoords = packet.AimCoords.ToVector();
npc.IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0; npc.IsAiming = (packet.Flag.Value & (ushort)PedDataFlags.IsAiming) > 0;
npc.IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0; npc.IsShooting = (packet.Flag.Value & (ushort)PedDataFlags.IsShooting) > 0;
npc.IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0; npc.IsReloading = (packet.Flag.Value & (ushort)PedDataFlags.IsReloading) > 0;
npc.IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0; npc.IsJumping = (packet.Flag.Value & (ushort)PedDataFlags.IsJumping) > 0;
npc.IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0; npc.IsRagdoll = (packet.Flag.Value & (ushort)PedDataFlags.IsRagdoll) > 0;
npc.IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0; npc.IsOnFire = (packet.Flag.Value & (ushort)PedDataFlags.IsOnFire) > 0;
npc.IsInVehicle = false; npc.IsInVehicle = false;
npc.LastSyncWasFull = true; npc.LastSyncWasFull = true;
@ -684,12 +688,12 @@ namespace CoopClient
Speed = packet.Speed, Speed = packet.Speed,
CurrentWeaponHash = packet.CurrentWeaponHash, CurrentWeaponHash = packet.CurrentWeaponHash,
AimCoords = packet.AimCoords.ToVector(), AimCoords = packet.AimCoords.ToVector(),
IsAiming = (packet.Flag.Value & (byte)PedDataFlags.IsAiming) > 0, IsAiming = (packet.Flag.Value & (ushort)PedDataFlags.IsAiming) > 0,
IsShooting = (packet.Flag.Value & (byte)PedDataFlags.IsShooting) > 0, IsShooting = (packet.Flag.Value & (ushort)PedDataFlags.IsShooting) > 0,
IsReloading = (packet.Flag.Value & (byte)PedDataFlags.IsReloading) > 0, IsReloading = (packet.Flag.Value & (ushort)PedDataFlags.IsReloading) > 0,
IsJumping = (packet.Flag.Value & (byte)PedDataFlags.IsJumping) > 0, IsJumping = (packet.Flag.Value & (ushort)PedDataFlags.IsJumping) > 0,
IsRagdoll = (packet.Flag.Value & (byte)PedDataFlags.IsRagdoll) > 0, IsRagdoll = (packet.Flag.Value & (ushort)PedDataFlags.IsRagdoll) > 0,
IsOnFire = (packet.Flag.Value & (byte)PedDataFlags.IsOnFire) > 0, IsOnFire = (packet.Flag.Value & (ushort)PedDataFlags.IsOnFire) > 0,
IsInVehicle = false, IsInVehicle = false,
LastSyncWasFull = true, LastSyncWasFull = true,

View File

@ -137,7 +137,9 @@ namespace CoopClient
IsJumping = 1 << 3, IsJumping = 1 << 3,
IsRagdoll = 1 << 4, IsRagdoll = 1 << 4,
IsOnFire = 1 << 5, IsOnFire = 1 << 5,
IsInParachuteFreeFall = 1 << 6 IsInParachuteFreeFall = 1 << 6,
IsOnLadder = 1 << 7,
IsVaulting = 1 << 8
} }
#region ===== VEHICLE DATA ===== #region ===== VEHICLE DATA =====
@ -440,7 +442,7 @@ namespace CoopClient
public Dictionary<uint, bool> WeaponComponents { get; set; } public Dictionary<uint, bool> WeaponComponents { get; set; }
public byte? Flag { get; set; } public ushort? Flag { get; set; }
public float? Latency { get; set; } public float? Latency { get; set; }
@ -461,7 +463,7 @@ namespace CoopClient
byteArray.AddRange(BitConverter.GetBytes(Health)); byteArray.AddRange(BitConverter.GetBytes(Health));
// Write player flags // Write player flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write player model hash // Write player model hash
byteArray.AddRange(BitConverter.GetBytes(ModelHash)); byteArray.AddRange(BitConverter.GetBytes(ModelHash));
@ -559,7 +561,7 @@ namespace CoopClient
Health = reader.ReadInt(); Health = reader.ReadInt();
// Read player flag // Read player flag
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read player model hash // Read player model hash
ModelHash = reader.ReadInt(); ModelHash = reader.ReadInt();
@ -980,7 +982,7 @@ namespace CoopClient
public uint CurrentWeaponHash { get; set; } public uint CurrentWeaponHash { get; set; }
public byte? Flag { get; set; } public ushort? Flag { get; set; }
public float? Latency { get; set; } public float? Latency { get; set; }
@ -995,7 +997,7 @@ namespace CoopClient
byteArray.AddRange(BitConverter.GetBytes(NetHandle)); byteArray.AddRange(BitConverter.GetBytes(NetHandle));
// Write player flags // Write player flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write player health // Write player health
byteArray.AddRange(BitConverter.GetBytes(Health)); byteArray.AddRange(BitConverter.GetBytes(Health));
@ -1057,7 +1059,7 @@ namespace CoopClient
NetHandle = reader.ReadLong(); NetHandle = reader.ReadLong();
// Read player flags // Read player flags
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read player health // Read player health
Health = reader.ReadInt(); Health = reader.ReadInt();
@ -1678,7 +1680,7 @@ namespace CoopClient
public uint CurrentWeaponHash { get; set; } public uint CurrentWeaponHash { get; set; }
public byte? Flag { get; set; } = 0; public ushort? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message) public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
{ {
@ -1691,7 +1693,7 @@ namespace CoopClient
byteArray.AddRange(BitConverter.GetBytes(NetHandle)); byteArray.AddRange(BitConverter.GetBytes(NetHandle));
// Write npc flags // Write npc flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write npc model hash // Write npc model hash
byteArray.AddRange(BitConverter.GetBytes(ModelHash)); byteArray.AddRange(BitConverter.GetBytes(ModelHash));
@ -1762,7 +1764,7 @@ namespace CoopClient
NetHandle = reader.ReadLong(); NetHandle = reader.ReadLong();
// Read npc flag // Read npc flag
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read npc model hash // Read npc model hash
ModelHash = reader.ReadInt(); ModelHash = reader.ReadInt();

View File

@ -10,6 +10,11 @@ using GTA.Math;
namespace CoopClient namespace CoopClient
{ {
enum ETasks
{
CLIMB_LADDER = 47
}
static class Util static class Util
{ {
#region -- POINTER -- #region -- POINTER --
@ -225,43 +230,53 @@ namespace CoopClient
return flags; return flags;
} }
public static byte? GetPedFlags(this Ped ped, bool isPlayer = false) public static ushort? GetPedFlags(this Ped ped, bool isPlayer = false)
{ {
byte? flags = 0; ushort? flags = 0;
if (ped.IsAiming) if (ped.IsAiming)
{ {
flags |= (byte)PedDataFlags.IsAiming; flags |= (ushort)PedDataFlags.IsAiming;
} }
if ((ped.IsShooting || isPlayer && Game.IsControlPressed(Control.Attack)) && ped.Weapons.Current?.AmmoInClip != 0) if ((ped.IsShooting || isPlayer && Game.IsControlPressed(Control.Attack)) && ped.Weapons.Current?.AmmoInClip != 0)
{ {
flags |= (byte)PedDataFlags.IsShooting; flags |= (ushort)PedDataFlags.IsShooting;
} }
if (ped.IsReloading) if (ped.IsReloading)
{ {
flags |= (byte)PedDataFlags.IsReloading; flags |= (ushort)PedDataFlags.IsReloading;
} }
if (ped.IsJumping) if (ped.IsJumping)
{ {
flags |= (byte)PedDataFlags.IsJumping; flags |= (ushort)PedDataFlags.IsJumping;
} }
if (ped.IsRagdoll) if (ped.IsRagdoll)
{ {
flags |= (byte)PedDataFlags.IsRagdoll; flags |= (ushort)PedDataFlags.IsRagdoll;
} }
if (ped.IsOnFire) if (ped.IsOnFire)
{ {
flags |= (byte)PedDataFlags.IsOnFire; flags |= (ushort)PedDataFlags.IsOnFire;
} }
if (ped.IsInParachuteFreeFall) if (ped.IsInParachuteFreeFall)
{ {
flags |= (byte)PedDataFlags.IsInParachuteFreeFall; flags |= (ushort)PedDataFlags.IsInParachuteFreeFall;
}
if (Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, ped.Handle, ETasks.CLIMB_LADDER)) // USING_LADDER
{
flags |= (ushort)PedDataFlags.IsOnLadder;
}
if (ped.IsVaulting && !Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, ped.Handle, ETasks.CLIMB_LADDER))
{
flags |= (ushort)PedDataFlags.IsVaulting;
} }
return flags; return flags;

View File

@ -123,7 +123,9 @@ namespace CoopServer
IsJumping = 1 << 3, IsJumping = 1 << 3,
IsRagdoll = 1 << 4, IsRagdoll = 1 << 4,
IsOnFire = 1 << 5, IsOnFire = 1 << 5,
IsInParachuteFreeFall = 1 << 6 IsInParachuteFreeFall = 1 << 6,
IsOnLadder = 1 << 7,
IsVaulting = 1 << 8
} }
#region ===== VEHICLE DATA ===== #region ===== VEHICLE DATA =====
@ -423,7 +425,7 @@ namespace CoopServer
public Dictionary<uint, bool> WeaponComponents { get; set; } public Dictionary<uint, bool> WeaponComponents { get; set; }
public byte? Flag { get; set; } public ushort? Flag { get; set; }
public float? Latency { get; set; } public float? Latency { get; set; }
@ -444,7 +446,7 @@ namespace CoopServer
byteArray.AddRange(BitConverter.GetBytes(Health)); byteArray.AddRange(BitConverter.GetBytes(Health));
// Write player flags // Write player flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write player model hash // Write player model hash
byteArray.AddRange(BitConverter.GetBytes(ModelHash)); byteArray.AddRange(BitConverter.GetBytes(ModelHash));
@ -542,7 +544,7 @@ namespace CoopServer
Health = reader.ReadInt(); Health = reader.ReadInt();
// Read player flag // Read player flag
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read player model hash // Read player model hash
ModelHash = reader.ReadInt(); ModelHash = reader.ReadInt();
@ -963,7 +965,7 @@ namespace CoopServer
public uint CurrentWeaponHash { get; set; } public uint CurrentWeaponHash { get; set; }
public byte? Flag { get; set; } public ushort? Flag { get; set; }
public float? Latency { get; set; } public float? Latency { get; set; }
@ -978,7 +980,7 @@ namespace CoopServer
byteArray.AddRange(BitConverter.GetBytes(NetHandle)); byteArray.AddRange(BitConverter.GetBytes(NetHandle));
// Write player flags // Write player flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write player health // Write player health
byteArray.AddRange(BitConverter.GetBytes(Health)); byteArray.AddRange(BitConverter.GetBytes(Health));
@ -1040,7 +1042,7 @@ namespace CoopServer
NetHandle = reader.ReadLong(); NetHandle = reader.ReadLong();
// Read player flags // Read player flags
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read player health // Read player health
Health = reader.ReadInt(); Health = reader.ReadInt();
@ -1661,7 +1663,7 @@ namespace CoopServer
public uint CurrentWeaponHash { get; set; } public uint CurrentWeaponHash { get; set; }
public byte? Flag { get; set; } = 0; public ushort? Flag { get; set; } = 0;
public override void PacketToNetOutGoingMessage(NetOutgoingMessage message) public override void PacketToNetOutGoingMessage(NetOutgoingMessage message)
{ {
@ -1674,7 +1676,7 @@ namespace CoopServer
byteArray.AddRange(BitConverter.GetBytes(NetHandle)); byteArray.AddRange(BitConverter.GetBytes(NetHandle));
// Write npc flags // Write npc flags
byteArray.Add(Flag.Value); byteArray.AddRange(BitConverter.GetBytes(Flag.Value));
// Write npc model hash // Write npc model hash
byteArray.AddRange(BitConverter.GetBytes(ModelHash)); byteArray.AddRange(BitConverter.GetBytes(ModelHash));
@ -1745,7 +1747,7 @@ namespace CoopServer
NetHandle = reader.ReadLong(); NetHandle = reader.ReadLong();
// Read npc flag // Read npc flag
Flag = reader.ReadByte(); Flag = reader.ReadUShort();
// Read npc model hash // Read npc model hash
ModelHash = reader.ReadInt(); ModelHash = reader.ReadInt();