summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/commands.c42
-rw-r--r--src/server/server.h1
-rw-r--r--src/server/user.c10
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--;
+ }
}
}