From 9c6ef691697bf6a2ff80f17ee81a87d8fca7ec68 Mon Sep 17 00:00:00 2001 From: hydrophobis <142858559+hydrophobis@users.noreply.github.com> Date: Sat, 12 Jul 2025 23:11:17 -0500 Subject: [PATCH 1/6] Fixed the name reading --- memory-external/classes/auto_updater.cpp | 9 +++-- memory-external/classes/auto_updater.hpp | 3 +- memory-external/hacks/reader.cpp | 25 ++++++++++--- offsets/offsets.json | 47 ++++++++++++------------ 4 files changed, 51 insertions(+), 33 deletions(-) diff --git a/memory-external/classes/auto_updater.cpp b/memory-external/classes/auto_updater.cpp index 74efc90..a8acb17 100644 --- a/memory-external/classes/auto_updater.cpp +++ b/memory-external/classes/auto_updater.cpp @@ -231,10 +231,12 @@ namespace updater { offsets::m_iHealth = data["m_iHealth"]; if (data["m_hPlayerPawn"].is_number()) offsets::m_hPlayerPawn = data["m_hPlayerPawn"]; - if (data["dwSanitizedName"].is_number()) - offsets::m_sSanitizedPlayerName = data["m_sSanitizedPlayerName"]; if (data["m_iTeamNum"].is_number()) offsets::m_iTeamNum = data["m_iTeamNum"]; + if (data["m_hController"].is_number()) + offsets::m_hController = data["m_hController"]; + if (data["m_iszPlayerName"].is_number()) + offsets::m_iszPlayerName = data["m_iszPlayerName"]; return true; } @@ -266,8 +268,9 @@ namespace updater { data["m_ArmorValue"] = offsets::m_ArmorValue; data["m_iHealth"] = offsets::m_iHealth; data["m_hPlayerPawn"] = offsets::m_hPlayerPawn; - data["m_sSanitizedPlayerName"] = offsets::m_sSanitizedPlayerName; data["m_iTeamNum"] = offsets::m_iTeamNum; + data["m_hController"] = offsets::m_hController; + data["m_iszPlayerName"] = offsets::m_iszPlayerName; std::ofstream output(file_path); output << std::setw(4) << data << std::endl; diff --git a/memory-external/classes/auto_updater.hpp b/memory-external/classes/auto_updater.hpp index 1cc2e44..0a88e75 100644 --- a/memory-external/classes/auto_updater.hpp +++ b/memory-external/classes/auto_updater.hpp @@ -55,7 +55,8 @@ namespace updater { inline std::ptrdiff_t m_ArmorValue = 0x0; inline std::ptrdiff_t m_iHealth = 0x0; inline std::ptrdiff_t m_hPlayerPawn = 0x0; - inline std::ptrdiff_t m_sSanitizedPlayerName = 0x0; inline std::ptrdiff_t m_iTeamNum = 0x0; + inline std::ptrdiff_t m_hController = 0x0; + inline std::ptrdiff_t m_iszPlayerName = 0x0; } } diff --git a/memory-external/hacks/reader.cpp b/memory-external/hacks/reader.cpp index 9a6451c..354cb7e 100644 --- a/memory-external/hacks/reader.cpp +++ b/memory-external/hacks/reader.cpp @@ -139,11 +139,26 @@ void CGame::loop() { * player.is_spotted = process->read(player.spottedState + 0x8); // bSpotted */ - playerNameData = process->read(player.entity + updater::offsets::m_sSanitizedPlayerName); - char buffer[256]; - process->read_raw(playerNameData, buffer, sizeof(buffer)); - std::string name = std::string(buffer); - player.name = name; + + + uint32_t handle = process->read(player.pCSPlayerPawn + updater::offsets::m_hController); + int index = handle & 0x7FFF; + int segment = index >> 9; + int entry = index & 0x1FF; + + uintptr_t controllerListSegment = process->read(entity_list + 0x8 * segment + 0x10); + uintptr_t controller = process->read(controllerListSegment + 120 * entry); + + if (!controller || controller > 0x7FFFFFFFFFFF) + continue; + + char buffer[256] = {}; + uintptr_t name_ptr = process->read(controller + updater::offsets::m_iszPlayerName); + process->read_raw(name_ptr, buffer, sizeof(buffer) - 1); + buffer[sizeof(buffer) - 1] = '\0'; + player.name = buffer; + + player.gameSceneNode = process->read(player.pCSPlayerPawn + updater::offsets::m_pGameSceneNode); player.origin = process->read(player.pCSPlayerPawn + updater::offsets::m_vOldOrigin); diff --git a/offsets/offsets.json b/offsets/offsets.json index 2f2fd53..eeae8c6 100644 --- a/offsets/offsets.json +++ b/offsets/offsets.json @@ -1,26 +1,25 @@ { - "build_number": 14086, - "dwBuildNumber": 5508068, - "dwEntityList": 27280608, - "dwLocalPlayer": 25526480, - "dwPlantedC4": 27728960, - "dwViewMatrix": 27710080, - "m_ArmorValue": 9244, - "m_bIsDefusing": 9194, - "m_flC4Blow": 4032, - "m_flFlashOverlayAlpha": 5120, - "m_flNextBeep": 4028, - "m_flTimerLength": 4040, - "m_hPlayerPawn": 2084, - "m_iAccount": 64, - "m_iHealth": 836, - "m_iTeamNum": 995, - "m_pClippingWeapon": 5024, - "m_pGameSceneNode": 808, - "m_pInGameMoneyServices": 1824, - "m_sSanitizedPlayerName": 1912, - "m_szName": 3360, - "m_vOldOrigin": 4900, - "m_vecAbsOrigin": 208, - "dwLocalPlayerController": 27602208 + "dwLocalPlayerController": 27602208, + "dwEntityList": 27280608, + "dwViewMatrix": 27710080, + "dwBuildNumber": 5508068, + "dwPlantedC4": 27728960, + "m_flC4Blow": 4032, + "m_flNextBeep": 4028, + "m_flTimerLength": 4040, + "m_pInGameMoneyServices": 1824, + "m_iAccount": 64, + "m_vecAbsOrigin": 208, + "m_vOldOrigin": 4900, + "m_pGameSceneNode": 808, + "m_flFlashOverlayAlpha": 5120, + "m_bIsDefusing": 9194, + "m_szName": 0, + "m_pClippingWeapon": 5024, + "m_ArmorValue": 9244, + "m_iHealth": 836, + "m_hPlayerPawn": 2084, + "m_iTeamNum": 995, + "m_hController": 3112, + "m_iszPlayerName": 1360 } \ No newline at end of file From 13cbfd183660210010ec4efb19f7518b7eba0318 Mon Sep 17 00:00:00 2001 From: hydrophobis <142858559+hydrophobis@users.noreply.github.com> Date: Sat, 12 Jul 2025 23:30:01 -0500 Subject: [PATCH 2/6] Update update_offsets.py --- offsets/update_offsets.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/offsets/update_offsets.py b/offsets/update_offsets.py index f87e70f..3e26eb5 100644 --- a/offsets/update_offsets.py +++ b/offsets/update_offsets.py @@ -103,7 +103,9 @@ offsets_json["m_flTimerLength"] = client_json_base["C_PlantedC4"]["fields"]["m_f offsets_json["m_hPlayerPawn"] = client_json_base["CCSPlayerController"]["fields"]["m_hPlayerPawn"] offsets_json["m_iAccount"] = client_json_base["CCSPlayerController_InGameMoneyServices"]["fields"]["m_iAccount"] offsets_json["m_pInGameMoneyServices"] = client_json_base["CCSPlayerController"]["fields"]["m_pInGameMoneyServices"] -offsets_json["m_sSanitizedPlayerName"] = client_json_base["CCSPlayerController"]["fields"]["m_sSanitizedPlayerName"] +offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] +offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] +offsets_json["m_iszPlayerName"] = client_json_base["C_BasePlayerController"]["fields"]["m_iszPlayerName"] offsets_json["m_iHealth"] = client_json_base["C_BaseEntity"]["fields"]["m_iHealth"] offsets_json["m_iTeamNum"] = client_json_base["C_BaseEntity"]["fields"]["m_iTeamNum"] From 692df9ac1b8fcf809562b0cbb939cf58c3e28f9f Mon Sep 17 00:00:00 2001 From: IMXNOOBX <69653071+IMXNOOBX@users.noreply.github.com> Date: Sun, 13 Jul 2025 13:55:46 +0200 Subject: [PATCH 3/6] Removed duplicate line in update_offsets script & added backwards compatibility and fixed how the name was been read from the player controller --- memory-external/hacks/reader.cpp | 9 +++------ offsets/update_offsets.py | 3 ++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/memory-external/hacks/reader.cpp b/memory-external/hacks/reader.cpp index 354cb7e..1a68324 100644 --- a/memory-external/hacks/reader.cpp +++ b/memory-external/hacks/reader.cpp @@ -139,8 +139,7 @@ void CGame::loop() { * player.is_spotted = process->read(player.spottedState + 0x8); // bSpotted */ - - + // Read entity controller from the player pawn uint32_t handle = process->read(player.pCSPlayerPawn + updater::offsets::m_hController); int index = handle & 0x7FFF; int segment = index >> 9; @@ -152,14 +151,12 @@ void CGame::loop() { if (!controller || controller > 0x7FFFFFFFFFFF) continue; + // Read player name from the controller char buffer[256] = {}; - uintptr_t name_ptr = process->read(controller + updater::offsets::m_iszPlayerName); - process->read_raw(name_ptr, buffer, sizeof(buffer) - 1); + process->read_raw(controller + updater::offsets::m_iszPlayerName, buffer, sizeof(buffer) - 1); buffer[sizeof(buffer) - 1] = '\0'; player.name = buffer; - - player.gameSceneNode = process->read(player.pCSPlayerPawn + updater::offsets::m_pGameSceneNode); player.origin = process->read(player.pCSPlayerPawn + updater::offsets::m_vOldOrigin); player.head = { player.origin.x, player.origin.y, player.origin.z + 75.f }; diff --git a/offsets/update_offsets.py b/offsets/update_offsets.py index 3e26eb5..afa8be1 100644 --- a/offsets/update_offsets.py +++ b/offsets/update_offsets.py @@ -103,7 +103,8 @@ offsets_json["m_flTimerLength"] = client_json_base["C_PlantedC4"]["fields"]["m_f offsets_json["m_hPlayerPawn"] = client_json_base["CCSPlayerController"]["fields"]["m_hPlayerPawn"] offsets_json["m_iAccount"] = client_json_base["CCSPlayerController_InGameMoneyServices"]["fields"]["m_iAccount"] offsets_json["m_pInGameMoneyServices"] = client_json_base["CCSPlayerController"]["fields"]["m_pInGameMoneyServices"] -offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] + +offsets_json["m_sSanitizedPlayerName"] = client_json_base["CCSPlayerController"]["fields"]["m_sSanitizedPlayerName"] # Added for backwards compatibility, this is the same as m_iszPlayerName offsets_json["m_hController"] = client_json_base["C_BasePlayerPawn"]["fields"]["m_hController"] offsets_json["m_iszPlayerName"] = client_json_base["C_BasePlayerController"]["fields"]["m_iszPlayerName"] From e0b1ab90ed8ccce5cd0420155578a92360ab9fb7 Mon Sep 17 00:00:00 2001 From: IMXNOOBX <69653071+IMXNOOBX@users.noreply.github.com> Date: Sun, 13 Jul 2025 21:16:25 +0200 Subject: [PATCH 4/6] Added backwards compatibility to offsets.json and fixed malformed json --- offsets/offsets.json | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/offsets/offsets.json b/offsets/offsets.json index eeae8c6..b84ea84 100644 --- a/offsets/offsets.json +++ b/offsets/offsets.json @@ -1,25 +1,28 @@ { - "dwLocalPlayerController": 27602208, - "dwEntityList": 27280608, - "dwViewMatrix": 27710080, + "build_number": 14086, "dwBuildNumber": 5508068, + "dwEntityList": 27280608, + "dwLocalPlayer": 25526480, "dwPlantedC4": 27728960, + "dwViewMatrix": 27710080, + "m_ArmorValue": 9244, + "m_bIsDefusing": 9194, "m_flC4Blow": 4032, + "m_flFlashOverlayAlpha": 5120, "m_flNextBeep": 4028, "m_flTimerLength": 4040, - "m_pInGameMoneyServices": 1824, - "m_iAccount": 64, - "m_vecAbsOrigin": 208, - "m_vOldOrigin": 4900, - "m_pGameSceneNode": 808, - "m_flFlashOverlayAlpha": 5120, - "m_bIsDefusing": 9194, - "m_szName": 0, - "m_pClippingWeapon": 5024, - "m_ArmorValue": 9244, - "m_iHealth": 836, "m_hPlayerPawn": 2084, + "m_iAccount": 64, + "m_iHealth": 836, "m_iTeamNum": 995, + "m_pClippingWeapon": 5024, + "m_pGameSceneNode": 808, + "m_pInGameMoneyServices": 1824, + "m_sSanitizedPlayerName": 1912, + "m_szName": 3360, + "m_vOldOrigin": 4900, + "m_vecAbsOrigin": 208, + "dwLocalPlayerController": 27602208, "m_hController": 3112, "m_iszPlayerName": 1360 } \ No newline at end of file From 40e9b014b4b25776a8417bfaee0d3192167e2bb7 Mon Sep 17 00:00:00 2001 From: IMXNOOBX <69653071+IMXNOOBX@users.noreply.github.com> Date: Sun, 13 Jul 2025 21:22:03 +0200 Subject: [PATCH 5/6] Update memory-external/hacks/reader.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- memory-external/hacks/reader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/memory-external/hacks/reader.cpp b/memory-external/hacks/reader.cpp index 1a68324..a661af6 100644 --- a/memory-external/hacks/reader.cpp +++ b/memory-external/hacks/reader.cpp @@ -140,7 +140,7 @@ void CGame::loop() { */ // Read entity controller from the player pawn - uint32_t handle = process->read(player.pCSPlayerPawn + updater::offsets::m_hController); + uintptr_t handle = process->read(player.pCSPlayerPawn + updater::offsets::m_hController); int index = handle & 0x7FFF; int segment = index >> 9; int entry = index & 0x1FF; From c9aa3ec7b6f2b540b14eda8281df0975ad6ec754 Mon Sep 17 00:00:00 2001 From: IMXNOOBX <69653071+IMXNOOBX@users.noreply.github.com> Date: Sun, 13 Jul 2025 21:25:36 +0200 Subject: [PATCH 6/6] Update reader.cpp --- memory-external/hacks/reader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/memory-external/hacks/reader.cpp b/memory-external/hacks/reader.cpp index a661af6..d92fd25 100644 --- a/memory-external/hacks/reader.cpp +++ b/memory-external/hacks/reader.cpp @@ -148,7 +148,7 @@ void CGame::loop() { uintptr_t controllerListSegment = process->read(entity_list + 0x8 * segment + 0x10); uintptr_t controller = process->read(controllerListSegment + 120 * entry); - if (!controller || controller > 0x7FFFFFFFFFFF) + if (!controller) continue; // Read player name from the controller