/* * Sv_StatusString * * Returns a string fit for heartbeats and status replies. */ static const char *Sv_StatusString(void) { char player[1024]; static char status[MAX_MSG_SIZE - 16]; sv_client_t *cl; size_t status_len, player_len; int i; strcpy(status, Cvar_ServerInfo()); strcat(status, "\n"); status_len = strlen(status); for (i = 0; i < sv_max_clients->integer; i++) { cl = &svs.clients[i]; if (cl->state == SV_CLIENT_CONNECTED || cl->state == SV_CLIENT_ACTIVE) { snprintf(player, sizeof(player), "%d %u \"%s\"\n", cl->edict->client->ps.stats[STAT_FRAGS], cl->ping, cl->name); player_len = strlen(player); if (status_len + player_len >= sizeof(status)) break; // can't hold any more strcpy(status + status_len, player); status_len += player_len; } } return status; }
/* * @brief Returns a string fit for heartbeats and status replies. */ static const char *Sv_StatusString(void) { static char status[MAX_MSG_SIZE - 16]; int32_t i; g_snprintf(status, sizeof(status), "%s\n", Cvar_ServerInfo()); size_t status_len = strlen(status); for (i = 0; i < sv_max_clients->integer; i++) { const sv_client_t *cl = &svs.clients[i]; if (cl->state == SV_CLIENT_CONNECTED || cl->state == SV_CLIENT_ACTIVE) { char player[MAX_TOKEN_CHARS]; const uint32_t ping = cl->edict->client->ping; g_snprintf(player, sizeof(player), "%d %u \"%s\"\n", i, ping, cl->name); const size_t player_len = strlen(player); if (status_len + player_len + 1 >= sizeof(status)) break; // can't hold any more strcat(status, player); status_len += player_len; } } return status; }
/* * Sv_Serverinfo_f * * Dumps the serverinfo info string */ static void Sv_Info_f(void) { const cvar_t *cvar; char line[MAX_STRING_CHARS]; if (!sv_client) { // print to server console Com_PrintInfo(Cvar_ServerInfo()); return; } for (cvar = cvar_vars; cvar; cvar = cvar->next) { if (!(cvar->flags & CVAR_SERVER_INFO)) continue; //only print serverinfo cvars snprintf(line, sizeof(line), "%s %s\n", cvar->name, cvar->string); Sv_ClientPrint(sv_client->edict, PRINT_MEDIUM, "%s", line); } }