/* ================== SV_StartServerDemo_f Record a server-side demo for given player/slot. The demo will be called "YYYY-MM-DD_hh-mm-ss_playername_id.urtdemo", in the "demos" directory under your game directory. Note that "startserverdemo all" will start demos for all players currently in the server. Players who join later require a new "startserverdemo" command. If you are already recording demos for some players, another "startserverdemo all" will start new demos only for players not already recording. Note that bots will never be recorded, not even if "all" is given. The server-side demos will stop when "stopserverdemo" is issued or when the server restarts for any reason (such as a new map loading). ================== */ static void SV_StartServerDemo_f(void) { client_t *client; Com_DPrintf("SV_StartServerDemo_f\n"); if (!com_sv_running->integer) { Com_Printf("startserverdemo: Server not running\n"); return; } if (Cmd_Argc() < 2) { Com_Printf("Usage: startserverdemo <player-or-all> <optional demo name>\n"); return; } client = SV_BetterGetPlayerByHandle(Cmd_Argv(1)); if (!Q_stricmp(Cmd_Argv(1), "all")) { if (client) { Com_Printf("startserverdemo: Player 'all' ignored, starting all demos instead\n"); } SV_StartRecordAll(); } else if (client) { if (Cmd_Argc() > 2) { SV_StartRecordOne(client, Cmd_ArgsFrom(2)); } else { SV_StartRecordOne(client, NULL); } } else { Com_Printf("startserverdemo: No player with that handle/in that slot\n"); } }
/* ================== SV_StartServerDemo_f Record a server-side demo for given player/slot. The demo will be called "YYYY-MM-DD_hh-mm-ss_playername_id.urtdemo", in the "demos" directory under your game directory. Note that "startserverdemo all" will start demos for all players currently in the server. Players who join later require a new "startserverdemo" command. If you are already recording demos for some players, another "startserverdemo all" will start new demos only for players not already recording. Note that bots will never be recorded, not even if "all" is given. The server-side demos will stop when "stopserverdemo" is issued or when the server restarts for any reason (such as a new map loading). ================== */ static void SV_StartServerDemo_f(void) { client_t *client; Com_DPrintf("SV_StartServerDemo_f\n"); if (!com_sv_running->integer) { Com_Printf("startserverdemo: Server not running\n"); return; } if (Cmd_Argc() < 2) { Com_Printf("Usage: startserverdemo <client-or-all> [<optional-demo-name>]\n"); return; } if (!Q_stricmp(Cmd_Argv(1), "all")) { SV_StartRecordAll(); } else { client = SV_GetPlayerByHandle(); if (!client) { return; } if (Cmd_Argc() > 2) { SV_StartRecordOne(client, Cmd_ArgsFrom(2)); } else { SV_StartRecordOne(client, NULL); } } }
static void SV_StartRecordAll(void) { int slot; client_t *client; Com_DPrintf("SV_StartRecordAll\n"); for (slot=0, client=svs.clients; slot < sv_maxclients->integer; slot++, client++) { // filter here to avoid lots of bogus messages from SV_StartRecordOne() if (client->netchan.remoteAddress.type == NA_BOT || client->state != CS_ACTIVE || client->demo_recording) { continue; } SV_StartRecordOne(client); } }