/// Display info on users currently in the realm void CliInfo(char*,pPrintf zprintf) { uint32 activeClientsNum = sWorld.GetActiveSessionCount(); uint32 queuedClientsNum = sWorld.GetQueuedSessionCount(); uint32 maxActiveClientsNum = sWorld.GetMaxActiveSessionCount(); uint32 maxQueuedClientsNum = sWorld.GetMaxQueuedSessionCount(); std::string timeStr = secsToTimeString(sWorld.GetUptime(),true); zprintf("Online players: %u (max: %u) queued: %u (max: %u) Uptime: %s\r\n",activeClientsNum,maxActiveClientsNum,queuedClientsNum,maxQueuedClientsNum,timeStr.c_str()); ///- Get the list of accounts ID logged to the realm QueryResult *resultDB = CharacterDatabase.Query("SELECT name,account FROM characters WHERE online > 0"); if (!resultDB) return; int linesize = 1+15+2+20+3+15+2+4+1+5+3; // see format string char* buf = new char[resultDB->GetRowCount()*linesize+1]; char* bufPos = buf; std::string sInfo; sInfo.reserve(resultDB->GetRowCount()*linesize+1); sInfo = ""; char szLine[512]; ///- Circle through accounts do { szLine[0] = '\0'; Field *fieldsDB = resultDB->Fetch(); std::string name = fieldsDB[0].GetCppString(); uint32 account = fieldsDB[1].GetUInt32(); ///- Get the username, last IP and GM level of each account // No SQL injection. account is uint32. // 0 1 2 3 QueryResult *resultLogin = loginDatabase.PQuery("SELECT username, last_ip, gmlevel, tbc FROM account WHERE id = '%u'",account); if(resultLogin) { Field *fieldsLogin = resultLogin->Fetch(); sprintf(szLine,"|%15s| %20s | %15s |%4d|%5d|\r\n", fieldsLogin[0].GetString(),name.c_str(),fieldsLogin[1].GetString(),fieldsLogin[2].GetUInt32(),fieldsLogin[3].GetUInt32()); delete resultLogin; } else sprintf(szLine, "| | %20s | |||\r\n",name.c_str()); sInfo+=szLine; }while(resultDB->NextRow()); sInfo += "\0"; ///- Display the list of account/characters online zprintf("=====================================================================\r\n"); zprintf("| Account | Character | IP | GM | TBC |\r\n"); zprintf("=====================================================================\r\n"); zprintf("%s",sInfo.c_str()); zprintf("=====================================================================\r\n"); delete resultDB; }