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; }
private bool LastIsJumping = false;
internal bool IsJumping { get; set; }
internal bool IsOnLadder { get; set; }
internal bool IsVaulting { get; set; }
internal bool IsInParachuteFreeFall { get; set; }
internal bool IsRagdoll { get; set; }
internal bool IsOnFire { get; set; }
@ -60,6 +62,38 @@ namespace CoopClient.Entities.Player
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)
{
Character.IsInvincible = false;
@ -78,12 +112,18 @@ namespace CoopClient.Entities.Player
}
}
if (IsJumping && !LastIsJumping)
if (IsJumping)
{
Character.Task.Jump();
}
if (!LastIsJumping)
{
LastIsJumping = true;
Character.Task.Jump();
}
LastIsJumping = IsJumping;
UpdateOnFootPosition(true, true, false);
return;
}
LastIsJumping = false;
if (IsRagdoll)
{
@ -118,12 +158,6 @@ namespace CoopClient.Entities.Player
return;
}
if (IsJumping || IsOnFire)
{
UpdateOnFootPosition(true, true, false);
return;
}
if (IsReloading)
{
if (!Character.IsReloading)

View File

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

View File

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

View File

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

View File

@ -10,6 +10,11 @@ using GTA.Math;
namespace CoopClient
{
enum ETasks
{
CLIMB_LADDER = 47
}
static class Util
{
#region -- POINTER --
@ -225,43 +230,53 @@ namespace CoopClient
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)
{
flags |= (byte)PedDataFlags.IsAiming;
flags |= (ushort)PedDataFlags.IsAiming;
}
if ((ped.IsShooting || isPlayer && Game.IsControlPressed(Control.Attack)) && ped.Weapons.Current?.AmmoInClip != 0)
{
flags |= (byte)PedDataFlags.IsShooting;
flags |= (ushort)PedDataFlags.IsShooting;
}
if (ped.IsReloading)
{
flags |= (byte)PedDataFlags.IsReloading;
flags |= (ushort)PedDataFlags.IsReloading;
}
if (ped.IsJumping)
{
flags |= (byte)PedDataFlags.IsJumping;
flags |= (ushort)PedDataFlags.IsJumping;
}
if (ped.IsRagdoll)
{
flags |= (byte)PedDataFlags.IsRagdoll;
flags |= (ushort)PedDataFlags.IsRagdoll;
}
if (ped.IsOnFire)
{
flags |= (byte)PedDataFlags.IsOnFire;
flags |= (ushort)PedDataFlags.IsOnFire;
}
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;

View File

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