diff --git a/src/core/settings.hpp b/src/core/settings.hpp index a9522062..701246f3 100644 --- a/src/core/settings.hpp +++ b/src/core/settings.hpp @@ -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 diff --git a/src/function_types.hpp b/src/function_types.hpp index 7338d12c..73c468c9 100644 --- a/src/function_types.hpp +++ b/src/function_types.hpp @@ -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); } diff --git a/src/gta/enums.hpp b/src/gta/enums.hpp index e567041b..6edf40d0 100644 --- a/src/gta/enums.hpp +++ b/src/gta/enums.hpp @@ -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, diff --git a/src/gta_pointers.hpp b/src/gta_pointers.hpp index 9b83e868..0d5817f3 100644 --- a/src/gta_pointers.hpp +++ b/src/gta_pointers.hpp @@ -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"); diff --git a/src/pointers.cpp b/src/pointers.cpp index 119edbac..c8ad5c94 100644 --- a/src/pointers.cpp +++ b/src/pointers.cpp @@ -1757,6 +1757,15 @@ namespace big { g_pointers->m_gta.m_game_skeleton_update = ptr.as(); } + }, + // 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(); + } } >(); // don't leave a trailing comma at the end diff --git a/src/util/math.hpp b/src/util/math.hpp index 749eabc2..2fdad6a0 100644 --- a/src/util/math.hpp +++ b/src/util/math.hpp @@ -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; diff --git a/src/views/esp/view_esp.cpp b/src/views/esp/view_esp.cpp index c3018428..a0c9b9a3 100644 --- a/src/views/esp/view_esp.cpp +++ b/src/views/esp/view_esp.cpp @@ -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); + }); } } } \ No newline at end of file diff --git a/src/views/settings/view_esp_settings.cpp b/src/views/settings/view_esp_settings.cpp index 7f9cdd27..fbe23940 100644 --- a/src/views/settings/view_esp_settings.cpp +++ b/src/views/settings/view_esp_settings.cpp @@ -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);