diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-26 15:33:02 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-26 15:33:02 +0100 |
| commit | d7edcc9d9e3d90e1c53885870461e046389dee96 (patch) | |
| tree | d4e80c026f65cbff9804c80184293d0c1b63afa8 /src/modules.cpp | |
| parent | Default map d1_town_01 (intro-less, enemies spawned) (diff) | |
| download | hl2h-d7edcc9d9e3d90e1c53885870461e046389dee96.tar.gz hl2h-d7edcc9d9e3d90e1c53885870461e046389dee96.zip | |
ESP working: NPC detection + authoritative server-side health
- entitylist slot 6 (GetHighestEntityIndex); class name via
GetClientNetworkable -> GetClientClass (replaces the unsafe slot-2 call)
- HL2 SP NPCs: class CAI_BaseNPC + m_lifeState, since NPC m_iHealth is not
networked; model names from VModelInfoClient006 for labels/friend-foe
- real HP/HP-max from the listen-server entity (IVEngineServer021 ->
PEntityOfEntIndex -> edict->m_pUnk -> GetBaseEntity) using offsets scanned
from server.so's datamap; validated against the client model index
- world_to_screen via IVDebugOverlay003::ScreenPosition (fixes box drift)
- maxs sanity clamp, NPC-only debug logging, neutral colour for wildlife
- build.sh: restore -o libhl2hake.so and add server.cpp
Diffstat (limited to 'src/modules.cpp')
| -rw-r--r-- | src/modules.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/modules.cpp b/src/modules.cpp index d20fe04..70e2dff 100644 --- a/src/modules.cpp +++ b/src/modules.cpp | |||
| @@ -11,6 +11,7 @@ static bool basename_is(const char *path, const char *base) { | |||
| 11 | void find_modules() { | 11 | void find_modules() { |
| 12 | g_client = Module(); | 12 | g_client = Module(); |
| 13 | g_engine = Module(); | 13 | g_engine = Module(); |
| 14 | g_server = Module(); | ||
| 14 | FILE *f = fopen("/proc/self/maps", "r"); | 15 | FILE *f = fopen("/proc/self/maps", "r"); |
| 15 | if (!f) | 16 | if (!f) |
| 16 | return; | 17 | return; |
| @@ -41,6 +42,8 @@ void find_modules() { | |||
| 41 | m = &g_client; | 42 | m = &g_client; |
| 42 | else if (basename_is(clean, "engine.so")) | 43 | else if (basename_is(clean, "engine.so")) |
| 43 | m = &g_engine; | 44 | m = &g_engine; |
| 45 | else if (basename_is(clean, "server.so")) | ||
| 46 | m = &g_server; | ||
| 44 | } else { | 47 | } else { |
| 45 | // anon: absorb only as .bss tail after a file-backed range | 48 | // anon: absorb only as .bss tail after a file-backed range |
| 46 | if (g_client.valid() && g_client.ranges.back().file && | 49 | if (g_client.valid() && g_client.ranges.back().file && |
