diff options
Diffstat (limited to 'src/game/g_svcmds.c')
-rw-r--r-- | src/game/g_svcmds.c | 46 |
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( ); |