From 8af245ae414cb548a2188030ed8a52b31986252f Mon Sep 17 00:00:00 2001 From: salmonik Date: Mon, 14 Sep 2026 16:47:32 +0200 Subject: Default map d1_town_01 (intro-less, enemies spawned) --- src/netvars.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 13 deletions(-) (limited to 'src/netvars.cpp') diff --git a/src/netvars.cpp b/src/netvars.cpp index 41070c7..5c8c296 100644 --- a/src/netvars.cpp +++ b/src/netvars.cpp @@ -82,10 +82,44 @@ static void collect_netvars(uintptr_t table, uintptr_t base_off, int depth) { } else { g_net.velocity = (int)(base_off + (uint32_t)poff); } + } else if (strcmp(pname2, "m_iHealth") == 0 && g_net.health < 0) { + g_net.health = (int)(base_off + (uint32_t)poff); + } else if (strcmp(pname2, "m_iMaxHealth") == 0 && g_net.maxhealth < 0) { + g_net.maxhealth = (int)(base_off + (uint32_t)poff); + } else if (strcmp(pname2, "m_iTeamNum") == 0 && g_net.teamnum < 0) { + g_net.teamnum = (int)(base_off + (uint32_t)poff); + } else if (strcmp(pname2, "m_vecOrigin") == 0 && g_net.origin < 0) { + if (parray && g_client.contains(parray)) { + int32_t eoff = *(int32_t *)(parray + 0x2C); + g_net.origin = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); + } else { + g_net.origin = (int)(base_off + (uint32_t)poff); + } + } else if (strcmp(pname2, "m_vecViewOffset") == 0 && g_net.viewoffset < 0) { + if (parray && g_client.contains(parray)) { + int32_t eoff = *(int32_t *)(parray + 0x2C); + g_net.viewoffset = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); + } else { + g_net.viewoffset = (int)(base_off + (uint32_t)poff); + } + } else if (strcmp(pname2, "m_vecMins") == 0 && g_net.mins < 0) { + if (parray && g_client.contains(parray)) { + int32_t eoff = *(int32_t *)(parray + 0x2C); + g_net.mins = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); + } else { + g_net.mins = (int)(base_off + (uint32_t)poff); + } + } else if (strcmp(pname2, "m_vecMaxs") == 0 && g_net.maxs < 0) { + if (parray && g_client.contains(parray)) { + int32_t eoff = *(int32_t *)(parray + 0x2C); + g_net.maxs = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); + } else { + g_net.maxs = (int)(base_off + (uint32_t)poff); + } } - if (g_net.ok()) + if (g_net.esp_ok()) return; - } +} } // prediction datamap scan for m_MoveType (FIELD_CHARACTER, fieldOffset in range) @@ -161,11 +195,9 @@ void resolve_netvars() { for (uintptr_t cc = head; cc && g_client.contains(cc) && classes < 1024; cc = *(uintptr_t *)(cc + 0x10)) { classes++; - char name[64]; - if (!module_string(*(uintptr_t *)(cc + 0x08), name, sizeof(name))) - break; collect_netvars(*(uintptr_t *)(cc + 0x0C), 0, 0); - if (g_net.flags >= 0 && g_net.velocity >= 0) + if (g_net.esp_ok() || (g_net.flags >= 0 && g_net.velocity >= 0 && + g_net.health < 0)) break; } logf("client classes walked: %d", classes); @@ -175,11 +207,9 @@ void resolve_netvars() { logf("movetype guard disabled"); } - if (g_net.ok()) { - logf("netvars: m_fFlags=+0x%X m_vecVelocity[0]=+0x%X m_MoveType=+0x%X", - g_net.flags, g_net.velocity, g_net.movetype); - } else { - logf("netvar resolution incomplete: flags=%d velocity=%d movetype=%d", - g_net.flags, g_net.velocity, g_net.movetype); - } + logf("netvars: flags=%d velocity=%d movetype=%d health=%d maxhealth=%d " + "teamnum=%d origin=%d viewoffset=%d mins=%d maxs=%d", + g_net.flags, g_net.velocity, g_net.movetype, g_net.health, + g_net.maxhealth, g_net.teamnum, g_net.origin, g_net.viewoffset, + g_net.mins, g_net.maxs); } -- cgit v1.2.3