rendered paste bodyint g_nHealthOffset = 0;void UTIL_SetHealth(edict_t *pEntity, int hp){ if (!g_nHealthOffset) return; *(int *)(pEntity->GetUnknown() + g_nHealthOffset) = hp; pEntity->m_fStateFlags |= FL_EDICT_CHANGED;}int UTIL_FindOffset(char *ClassName, char *Property){ ServerClass *sc = serverdll->GetAllServerClasses(); while (sc) { if (strcmp(sc->GetName(), ClassName) == 0) { int NumProps = sc->m_pTable->GetNumProps(); for (int i = 0; i < NumProps; i++) { if (strcmp(sc->m_pTable->GetProp(i)->GetName(), Property) == 0) { return sc->m_pTable->GetProp(i)->GetOffset() / 4; } } return 0; } sc = sc->m_pNext; } return 0;}// Run this in CPluginClass::Loadvoid UTIL_PrecacheOffsets(){ g_nHealthOffset = UTIL_FindOffset("CBasePlayer", "m_iHealth");}void UTIL_DumpOffsets(){ FILE *fp = fopen("offsets.txt","w"); if (!fp) return; ServerClass *sc = serverdll->GetAllServerClasses(); while (sc) { int NumProps = sc->m_pTable->GetNumProps(); fprintf(fp, "%s\n", sc->m_pTable->GetName()); for (int i = 0; i < NumProps; i++) { SendProp *prop = sc->m_pTable->GetProp(i); if (prop) fprintf(fp, " %5d %s\n", prop->GetOffset() / 4, prop->GetName()); } sc = sc->m_pNext; } fclose(fp);}