diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/commands.c | 42 | ||||
-rw-r--r-- | src/server/server.h | 1 | ||||
-rw-r--r-- | src/server/user.c | 10 |
3 files changed, 48 insertions, 5 deletions
diff --git a/src/server/commands.c b/src/server/commands.c index 1f374b0..8cacd79 100644 --- a/src/server/commands.c +++ b/src/server/commands.c @@ -849,12 +849,12 @@ static void SV_Stuff_f(void) /* ================== -SV_Stuff_f +SV_StuffAll_f Stuff raw command string to all clients. ================== */ -static void SV_Stuffall_f(void) +static void SV_StuffAll_f(void) { client_t *client; @@ -879,6 +879,41 @@ static void SV_Stuffall_f(void) } +/* +================== +SV_StuffCvar_f + +Stuff one or more cvar queries to the client. +================== +*/ +static void SV_StuffCvar_f(void) +{ + int i, argc = Cmd_Argc(); + char *c; + + if (!svs.initialized) { + Com_Printf("No server running.\n"); + return; + } + + if (argc < 3) { + Com_Printf("Usage: %s <userid> <variable> [...]\n", Cmd_Argv(0)); + return; + } + + if (!SV_SetPlayer()) + return; + + for (i = 2; i < argc; i++) { + c = Cmd_Argv(i); + SV_ClientCommand(sv_client, "cmd \177c console %s $%s\n", c, c); + sv_client->console_queries++; + } + + sv_client = NULL; + sv_player = NULL; +} + static void SV_PickClient_f(void) { char *s; @@ -1469,7 +1504,8 @@ static const cmdreg_t c_server[] = { { "serverinfo", SV_Serverinfo_f }, { "dumpuser", SV_DumpUser_f, SV_SetPlayer_c }, { "stuff", SV_Stuff_f, SV_SetPlayer_c }, - { "stuffall", SV_Stuffall_f }, + { "stuffall", SV_StuffAll_f }, + { "stuffcvar", SV_StuffCvar_f, SV_SetPlayer_c }, { "map", SV_Map_f, SV_Map_c }, { "demomap", SV_DemoMap_f }, { "gamemap", SV_GameMap_f, SV_Map_c }, diff --git a/src/server/server.h b/src/server/server.h index 8203f78..d0a91a4 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -279,6 +279,7 @@ typedef struct client_s { char *version_string; char reconnect_var[16]; char reconnect_val[16]; + int console_queries; // usercmd stuff unsigned lastmessage; // svs.realtime when packet was last received diff --git a/src/server/user.c b/src/server/user.c index 6058df5..2970b5c 100644 --- a/src/server/user.c +++ b/src/server/user.c @@ -866,13 +866,19 @@ static void SV_CvarResult_f(void) } } else if (!strcmp(c, "connect")) { if (sv_client->reconnect_var[0]) { - v = Cmd_Argv(2); - if (!strcmp(v, sv_client->reconnect_val)) { + if (!strcmp(Cmd_Argv(2), sv_client->reconnect_val)) { sv_client->reconnected = qtrue; } } } else if (!strcmp(c, "actoken")) { AC_ClientToken(sv_client, Cmd_Argv(2)); + } else if (!strcmp(c, "console")) { + if (sv_client->console_queries > 0) { + Com_Printf("%s[%s]: \"%s\" is \"%s\"\n", sv_client->name, + NET_AdrToString(&sv_client->netchan->remote_address), + Cmd_Argv(2), Cmd_RawArgsFrom(3)); + sv_client->console_queries--; + } } } |