Fix jittering Player ESP (#2421)

This commit is contained in:
gir489 2023-11-16 13:46:52 -05:00 committed by GitHub
parent af287d2593
commit e56ee4e2b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 32 additions and 15 deletions

View File

@ -939,7 +939,6 @@ namespace big
struct esp
{
bool enabled = true;
bool hide_self = true;
float global_render_distance[2] = {0.f, 600.f};
float tracer_render_distance[2] = {200.f, 600.f};
float box_render_distance[2] = {0.f, 150.f};
@ -960,7 +959,7 @@ namespace big
ImU32 default_color = 4285713522;
ImU32 friend_color = 4293244509;
NLOHMANN_DEFINE_TYPE_INTRUSIVE(esp, enabled, hide_self, global_render_distance, tracer_render_distance, box_render_distance, tracer, tracer_draw_position, box, health, armor, god, distance, name, change_esp_color_from_dist, scale_health_from_dist, scale_armor_from_dist, distance_threshold, enemy_color, enemy_near_color, default_color, friend_color)
NLOHMANN_DEFINE_TYPE_INTRUSIVE(esp, enabled, global_render_distance, tracer_render_distance, box_render_distance, tracer, tracer_draw_position, box, health, armor, god, distance, name, change_esp_color_from_dist, scale_health_from_dist, scale_armor_from_dist, distance_threshold, enemy_color, enemy_near_color, default_color, friend_color)
} esp{};
struct session_browser

View File

@ -10,6 +10,7 @@ class CGameScriptHandlerNetComponent;
class CDoorBreakEvent;
class GenericPool;
enum eVehicleGadgetType : uint32_t;
enum class PedBones : uint16_t;
namespace rage
{
@ -196,4 +197,6 @@ namespace big::functions
using decal_manager_remove = void(*)(PVOID manager, rage::fwEntity*, DWORD a3, DWORD64 a4, DWORD ignore_bitset);
using remove_player_from_sender_list = bool(*)(void* list, uint64_t* rockstar_id);
using get_ped_pone = bool(*)(CPed* ped_ptr, rage::fvector4& output, PedBones bone);
}

View File

@ -1105,7 +1105,7 @@ enum class eAckCode : uint32_t
ACKCODE_NONE
};
enum class PedBones : uint32_t
enum class PedBones : uint16_t
{
SKEL_ROOT = 0x0,
SKEL_Pelvis = 0x2E28,

View File

@ -358,6 +358,8 @@ namespace big
PVOID m_remove_player_from_sender_list_caller_2;
PVOID m_game_skeleton_update;
functions::get_ped_pone m_get_ped_pone;
};
#pragma pack(pop)
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");

View File

@ -1757,6 +1757,15 @@ namespace big
{
g_pointers->m_gta.m_game_skeleton_update = ptr.as<PVOID>();
}
},
// Get Ped Bone
{
"GPB",
"48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 60 48 8B 01 41 8B E8 48 8B F2",
[](memory::handle ptr)
{
g_pointers->m_gta.m_get_ped_pone = ptr.as<functions::get_ped_pone>();
}
}
>(); // don't leave a trailing comma at the end

View File

@ -38,6 +38,14 @@ namespace big::math
return (float)distance_between_vectors(plyr_coords, cam_coords);
}
inline float calculate_distance_from_game_cam(rage::fvector4 player_position)
{
const Vector3 plyr_coords = {player_position.x, player_position.y, player_position.z};
const Vector3 cam_coords = g_pointers->m_gta.m_get_gameplay_cam_coords();
return (float)distance_between_vectors(plyr_coords, cam_coords);
}
inline Vector3 raycast_coords(Vector3 coord, Vector3 rot, Entity ignore)
{
BOOL hit;

View File

@ -5,6 +5,7 @@
#include "services/players/player_service.hpp"
#include "util/math.hpp"
#include "util/misc.hpp"
#include "gta/enums.hpp"
namespace big
{
@ -20,12 +21,12 @@ namespace big
void esp::draw_player(const player_ptr& plyr, ImDrawList* const draw_list)
{
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation)
return;
if (g.esp.hide_self && plyr->is_valid() && plyr->id() == g_player_service->get_self()->id())
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation || !plyr->get_ped()->m_model_info)
return;
auto& player_pos = *plyr->get_ped()->m_navigation->get_position();
rage::fvector4 player_pos;
if (!g_pointers->m_gta.m_get_ped_pone(plyr->get_ped(), player_pos, PedBones::SKEL_Pelvis))
return;
float screen_x, screen_y;
@ -180,12 +181,9 @@ namespace big
if (const auto draw_list = ImGui::GetBackgroundDrawList(); draw_list)
{
draw_player(g_player_service->get_self(), draw_list);
for (const auto& [_, plyr] : g_player_service->players())
{
draw_player(plyr, draw_list);
}
g_player_service->iterate([draw_list](const player_entry& entry) {
draw_player(entry.second, draw_list);
});
}
}
}

View File

@ -8,8 +8,6 @@ namespace big
if (g.esp.enabled)
{
ImGui::Checkbox("SETTINGS_ESP_HIDE_SELF"_T.data(), &g.esp.hide_self);
ImGui::Text("SETTINGS_ESP_GLOBAL_RENDER_DISTANCE"_T.data());
ImGui::SliderFloat2("###Global Render Distance", g.esp.global_render_distance, 0.f, 1500.f);