int GetOffsetFromTable(char* ClassName, char* VariableName, RecvTable* Table) { int Offset = 0; for (int i = 0; i < Table->GetNumProps(); i++) { RecvProp* Prop = Table->GetProp(i); if (!Prop) continue; RecvTable* Child = Prop->GetDataTable(); if (Child && Child->GetNumProps()) Offset += GetOffsetFromTable(ClassName, VariableName, Child); if (!strcmp(Table->GetName(), ClassName) && !strcmp(Prop->GetName(), VariableName)) { Offset += Prop->GetOffset(); break; } } return Offset; } int GetNetVarOffset(char* ClassName, char* VariableName) { ClientClass* Classes = g_pClient->GetAllClasses(); int Offset = 0; for (; Classes; Classes = Classes->NextClass()) { RecvTable* table = Classes->GetTable(); if (!table) continue; if (table->GetNumProps() <= 0) continue; if (!strstr(table->GetName(), "DT_")) continue; Offset = GetOffsetFromTable(ClassName, VariableName, table); if (Offset != 0) break; } Warning("[OFFSETS] Found %s->%s offset at [0x%X]\n", ClassName, VariableName, Offset); if (Offset == 0) Warning("[OFFSETS FAIL]Failed to get netvar offset '%s' for '%s'[OFFSETS FAIL]\n", VariableName, ClassName); return Offset; }