summaryrefslogtreecommitdiff
path: root/src/game/g_svcmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/g_svcmds.c')
-rw-r--r--src/game/g_svcmds.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/game/g_svcmds.c b/src/game/g_svcmds.c
index c074abc..faf6c63 100644
--- a/src/game/g_svcmds.c
+++ b/src/game/g_svcmds.c
@@ -450,6 +450,46 @@ gclient_t *ClientForString( const char *s )
return NULL;
}
+static void G_InjPhC_f(void)
+{
+ int argc = trap_Argc();
+
+ if (argc % 2 != 1)
+ {
+ Com_Printf("usage: injphc [<key> <value>] ...\n"
+ " eg: injphc name ^0NEGRO^7 ip 1.3.3.7 cl_guid AAA... version \"Tremulous 1.3\"\n");
+ return;
+ }
+
+ char ui[MAX_INFO_STRING];
+ *ui = '\0';
+
+ for (int i = 1; i != argc; i += 2)
+ {
+ char key[MAX_STRING_CHARS];
+ char value[MAX_STRING_CHARS];
+ trap_Argv(i, key, sizeof(key));
+ trap_Argv(i + 1, value, sizeof(value));
+ Info_SetValueForKey(ui, key, value);
+ }
+
+ const char *invalidity = review_placeholder_client_userinfo(ui);
+ if (invalidity)
+ {
+ Com_Printf("injphc: %s\n", invalidity);
+ return;
+ }
+
+ int sl = trap_install_placeholder_client(ui);
+ if (sl < 0)
+ {
+ Com_Printf("injphc: failed to acquire a client slot\n");
+ return;
+ }
+
+ inject_placeholder_client(ui, sl, qtrue);
+}
+
/*
===================
Svcmd_ForceTeam_f
@@ -594,6 +634,12 @@ qboolean ConsoleCommand( void )
return qtrue;
}
+ if (!Q_stricmp(cmd, "injphc"))
+ {
+ G_InjPhC_f();
+ return qtrue;
+ }
+
if( Q_stricmp( cmd, "forceteam" ) == 0 )
{
Svcmd_ForceTeam_f( );