diff options
Diffstat (limited to '')
| -rw-r--r-- | src/netvars.cpp | 56 |
1 files changed, 43 insertions, 13 deletions
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) { | |||
| 82 | } else { | 82 | } else { |
| 83 | g_net.velocity = (int)(base_off + (uint32_t)poff); | 83 | g_net.velocity = (int)(base_off + (uint32_t)poff); |
| 84 | } | 84 | } |
| 85 | } else if (strcmp(pname2, "m_iHealth") == 0 && g_net.health < 0) { | ||
| 86 | g_net.health = (int)(base_off + (uint32_t)poff); | ||
| 87 | } else if (strcmp(pname2, "m_iMaxHealth") == 0 && g_net.maxhealth < 0) { | ||
| 88 | g_net.maxhealth = (int)(base_off + (uint32_t)poff); | ||
| 89 | } else if (strcmp(pname2, "m_iTeamNum") == 0 && g_net.teamnum < 0) { | ||
| 90 | g_net.teamnum = (int)(base_off + (uint32_t)poff); | ||
| 91 | } else if (strcmp(pname2, "m_vecOrigin") == 0 && g_net.origin < 0) { | ||
| 92 | if (parray && g_client.contains(parray)) { | ||
| 93 | int32_t eoff = *(int32_t *)(parray + 0x2C); | ||
| 94 | g_net.origin = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); | ||
| 95 | } else { | ||
| 96 | g_net.origin = (int)(base_off + (uint32_t)poff); | ||
| 97 | } | ||
| 98 | } else if (strcmp(pname2, "m_vecViewOffset") == 0 && g_net.viewoffset < 0) { | ||
| 99 | if (parray && g_client.contains(parray)) { | ||
| 100 | int32_t eoff = *(int32_t *)(parray + 0x2C); | ||
| 101 | g_net.viewoffset = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); | ||
| 102 | } else { | ||
| 103 | g_net.viewoffset = (int)(base_off + (uint32_t)poff); | ||
| 104 | } | ||
| 105 | } else if (strcmp(pname2, "m_vecMins") == 0 && g_net.mins < 0) { | ||
| 106 | if (parray && g_client.contains(parray)) { | ||
| 107 | int32_t eoff = *(int32_t *)(parray + 0x2C); | ||
| 108 | g_net.mins = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); | ||
| 109 | } else { | ||
| 110 | g_net.mins = (int)(base_off + (uint32_t)poff); | ||
| 111 | } | ||
| 112 | } else if (strcmp(pname2, "m_vecMaxs") == 0 && g_net.maxs < 0) { | ||
| 113 | if (parray && g_client.contains(parray)) { | ||
| 114 | int32_t eoff = *(int32_t *)(parray + 0x2C); | ||
| 115 | g_net.maxs = (int)(base_off + (uint32_t)(eoff ? eoff : poff)); | ||
| 116 | } else { | ||
| 117 | g_net.maxs = (int)(base_off + (uint32_t)poff); | ||
| 118 | } | ||
| 85 | } | 119 | } |
| 86 | if (g_net.ok()) | 120 | if (g_net.esp_ok()) |
| 87 | return; | 121 | return; |
| 88 | } | 122 | } |
| 89 | } | 123 | } |
| 90 | 124 | ||
| 91 | // prediction datamap scan for m_MoveType (FIELD_CHARACTER, fieldOffset in range) | 125 | // prediction datamap scan for m_MoveType (FIELD_CHARACTER, fieldOffset in range) |
| @@ -161,11 +195,9 @@ void resolve_netvars() { | |||
| 161 | for (uintptr_t cc = head; cc && g_client.contains(cc) && classes < 1024; | 195 | for (uintptr_t cc = head; cc && g_client.contains(cc) && classes < 1024; |
| 162 | cc = *(uintptr_t *)(cc + 0x10)) { | 196 | cc = *(uintptr_t *)(cc + 0x10)) { |
| 163 | classes++; | 197 | classes++; |
| 164 | char name[64]; | ||
| 165 | if (!module_string(*(uintptr_t *)(cc + 0x08), name, sizeof(name))) | ||
| 166 | break; | ||
| 167 | collect_netvars(*(uintptr_t *)(cc + 0x0C), 0, 0); | 198 | collect_netvars(*(uintptr_t *)(cc + 0x0C), 0, 0); |
| 168 | if (g_net.flags >= 0 && g_net.velocity >= 0) | 199 | if (g_net.esp_ok() || (g_net.flags >= 0 && g_net.velocity >= 0 && |
| 200 | g_net.health < 0)) | ||
| 169 | break; | 201 | break; |
| 170 | } | 202 | } |
| 171 | logf("client classes walked: %d", classes); | 203 | logf("client classes walked: %d", classes); |
| @@ -175,11 +207,9 @@ void resolve_netvars() { | |||
| 175 | logf("movetype guard disabled"); | 207 | logf("movetype guard disabled"); |
| 176 | } | 208 | } |
| 177 | 209 | ||
| 178 | if (g_net.ok()) { | 210 | logf("netvars: flags=%d velocity=%d movetype=%d health=%d maxhealth=%d " |
| 179 | logf("netvars: m_fFlags=+0x%X m_vecVelocity[0]=+0x%X m_MoveType=+0x%X", | 211 | "teamnum=%d origin=%d viewoffset=%d mins=%d maxs=%d", |
| 180 | g_net.flags, g_net.velocity, g_net.movetype); | 212 | g_net.flags, g_net.velocity, g_net.movetype, g_net.health, |
| 181 | } else { | 213 | g_net.maxhealth, g_net.teamnum, g_net.origin, g_net.viewoffset, |
| 182 | logf("netvar resolution incomplete: flags=%d velocity=%d movetype=%d", | 214 | g_net.mins, g_net.maxs); |
| 183 | g_net.flags, g_net.velocity, g_net.movetype); | ||
| 184 | } | ||
| 185 | } | 215 | } |
