bool UTIL_ContainsDataTable(SendTable *pTable, const char *name) { const char *pname = pTable->GetName(); int props = pTable->GetNumProps(); SendProp *prop; SendTable *table; if (pname && strcmp(name, pname) == 0) return true; for (int i=0; i<props; i++) { prop = pTable->GetProp(i); if ((table = prop->GetDataTable()) != NULL) { pname = table->GetName(); if (pname && strcmp(name, pname) == 0) { return true; } if (UTIL_ContainsDataTable(table, name)) { return true; } } } return false; }
cell_t GetTableName(IPluginContext *pContext, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); HandleError err; HandleSecurity sec; sec.pOwner = NULL; sec.pIdentity = myself->GetIdentity(); SendTable *pTable; if ((err=g_pHandleSys->ReadHandle(hndl, g_SendTableHandle, &sec, (void **)&pTable)) != HandleError_None) { return pContext->ThrowNativeError("Invalid SendTable handle %x (error %d)", hndl, err); } pContext->StringToLocal(params[2], params[3], pTable->GetName()); return strlen(pTable->GetName()); }
//--------------------------------------------------------------------------------- // Purpose: used by the GetPropOffsetFromTable func to get a specific table //--------------------------------------------------------------------------------- SendTable *GetDataTable( const char *pTableName, SendTable *pTable ) { if (!pTable) return NULL; if ( FStrEq( pTableName, pTable->GetName() ) ) return pTable; int num = pTable->GetNumProps(); for (int i = 0; i < num; i++) { SendProp *pProp = pTable->GetProp(i); if (pProp) { SendTable *pSubTable = GetDataTable( pTableName, pProp->GetDataTable() ); if (pSubTable == NULL) continue; if ( FStrEq(pSubTable->GetName(), pTableName) ) return pSubTable; } } return NULL; }