void RecurseClientTable( RecvTable *pTable, int &spacing ) { RecvTable *pRecvTable = pTable; if (pRecvTable == NULL){ spacing--; return; } char TableName[128]; int size = sizeof(TableName); memset( TableName, 0, size ); for (int i = 0; i < spacing; i++) V_strcat( TableName, " |", size ); V_strcat( TableName, pRecvTable->GetName(), size ); Msg( "%s\n", TableName ); spacing++; int num = pRecvTable->GetNumProps(); for (int i = 0; i < num; i++) { RecvProp *pProp = pRecvTable->GetProp(i); memset( TableName, 0, sizeof(TableName) ); for (int j = 0; j < spacing; j++) V_strcat( TableName, " |", size ); V_strcat( TableName, pProp->GetName(), size ); Msg( "%s\n", TableName ); RecurseClientTable( pProp->GetDataTable(), ++spacing ); } spacing-=2; }
bool Entities::CheckTableBaseclass(RecvTable *sTable, std::string baseclass) { if (std::string(sTable->GetName()).compare("DT_" + baseclass) == 0) { return true; } for (int i = 0; i < sTable->GetNumProps(); i++) { RecvProp *sProp = sTable->GetProp(i); if (strcmp(sProp->GetName(), "baseclass") != 0) { continue; } RecvTable *sChildTable = sProp->GetDataTable(); if (sChildTable) { return CheckTableBaseclass(sChildTable, baseclass); } } return false; }
bool Entities::GetSubProp(RecvTable *table, const char *propName, RecvProp *&prop, int &offset) { for (int i = 0; i < table->GetNumProps(); i++) { offset = 0; RecvProp *currentProp = table->GetProp(i); if (strcmp(currentProp->GetName(), propName) == 0) { prop = currentProp; offset = currentProp->GetOffset(); return true; } if (currentProp->GetType() == DPT_DataTable) { if (GetSubProp(currentProp->GetDataTable(), propName, prop, offset)) { offset += currentProp->GetOffset(); return true; } } } return false; }