////////////////////////////// // Console admin commands // void G_PlayerBan() { char cmd[MAX_TOKEN_CHARS]; int bannum; trap_Argv(1, cmd, sizeof(cmd)); if (!*cmd) { G_Printf("usage: ban <clientname>."); return; } bannum = G_refClientnumForName(NULL, cmd); if (bannum != MAX_CLIENTS) { // if( level.clients[bannum].sess.referee != RL_RCON ) { const char *value; char userinfo[MAX_INFO_STRING]; trap_GetUserinfo(bannum, userinfo, sizeof(userinfo)); value = Info_ValueForKey(userinfo, "ip"); AddIPBan(value); // } else { // G_Printf( "^3*** Can't ban a superuser!\n" ); // } } }
////////////////////////////// // Console admin commands // void G_PlayerBan() { char cmd[MAX_TOKEN_CHARS]; int bannum; trap_Argv( 1, cmd, sizeof( cmd ) ); if(!*cmd) { G_Printf( "usage: ban <clientname>." ); return; } bannum = G_refClientnumForName(NULL, cmd); if(bannum != MAX_CLIENTS ) { // if( level.clients[bannum].sess.referee != RL_RCON ) { const char* value; char userinfo[MAX_INFO_STRING]; // Dens: use the stored IP to prevent spoofing trap_GetUserinfo( bannum, userinfo, sizeof( userinfo ) ); if( !(g_spoofOptions.integer & SPOOFOPT_USERINFO_IP)){ value = level.clients[bannum].sess.ip; }else{ value = Info_ValueForKey (userinfo, "ip"); } AddIPBan( value ); // } else { // G_Printf( "^3*** Can't ban a superuser!\n" ); // } } }
/* ================== Svcmd_KickNum_f Kick a user off of the server ================== */ static void Svcmd_KickNum_f( void ) { gclient_t *cl; int timeout = -1; const char *ip; char userinfo[MAX_INFO_STRING]; char sTimeout[MAX_TOKEN_CHARS]; char name[MAX_TOKEN_CHARS]; int clientNum; // make sure server is running if ( !G_Is_SV_Running() ) { G_Printf( "Server is not running.\n" ); return; } if ( trap_Argc() < 2 || trap_Argc() > 3 ) { G_Printf( "Usage: kick <client number> [timeout]\n" ); return; } if ( trap_Argc() == 3 ) { trap_Argv( 2, sTimeout, sizeof( sTimeout ) ); timeout = atoi( sTimeout ); } else { timeout = 300; } trap_Argv( 1, name, sizeof( name ) ); clientNum = atoi( name ); cl = G_GetPlayerByNum( clientNum ); if ( !cl ) { return; } if ( cl->pers.localClient ) { G_Printf( "Cannot kick host player\n" ); return; } trap_GetUserinfo( cl->ps.clientNum, userinfo, sizeof( userinfo ) ); ip = Info_ValueForKey( userinfo, "ip" ); // use engine banning system, mods may choose to use their own banlist if ( USE_ENGINE_BANLIST ) { // kick but dont ban bots, they arent that lame if ( ( g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT ) ) { timeout = 0; } trap_DropClient( cl->ps.clientNum, "player kicked", timeout ); } else { trap_DropClient( cl->ps.clientNum, "player kicked", 0 ); // kick but dont ban bots, they arent that lame if ( !( g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT ) ) { AddIPBan( ip ); } } }
static void Svcmd_Kick_f( void ) { gclient_t *cl; int i; int timeout = -1; char sTimeout[MAX_TOKEN_CHARS]; char name[MAX_TOKEN_CHARS]; // make sure server is running if ( !G_Is_SV_Running() ) { G_Printf( "Server is not running.\n" ); return; } if ( trap_Argc() < 2 || trap_Argc() > 3 ) { G_Printf ("Usage: kick <player name> [timeout]\n"); return; } if( trap_Argc() == 3 ) { trap_Argv( 2, sTimeout, sizeof( sTimeout ) ); timeout = atoi( sTimeout ); } else { timeout = 300; } trap_Argv(1, name, sizeof(name)); cl = G_GetPlayerByName( name );//ClientForString( name ); if ( !cl ) { if ( !Q_stricmp(name, "all") ) { for (i = 0, cl = level.clients; i < level.numConnectedClients; i++, cl++) { // dont kick localclients ... if ( cl->pers.localClient ) { continue; } if ( timeout != -1 ) { char *ip; char userinfo[MAX_INFO_STRING]; trap_GetUserinfo( cl->ps.clientNum, userinfo, sizeof( userinfo ) ); ip = Info_ValueForKey (userinfo, "ip"); // use engine banning system, mods may choose to use their own banlist if (USE_ENGINE_BANLIST) { // kick but dont ban bots, they arent that lame if ( (g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { timeout = 0; } trap_DropClient(cl->ps.clientNum, "player kicked", timeout); } else { trap_DropClient(cl->ps.clientNum, "player kicked", 0); // kick but dont ban bots, they arent that lame if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) AddIPBan( ip ); } } else { trap_DropClient(cl->ps.clientNum, "player kicked", 0); } } } #ifndef NO_BOT_SUPPORT else if ( !Q_stricmp(name, "allbots") ) { for (i = 0, cl = level.clients; i < level.numConnectedClients; i++, cl++) { if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { continue; } // kick but dont ban bots, they arent that lame trap_DropClient(cl->ps.clientNum, "player kicked", 0); } } #endif return; } else { // dont kick localclients ... if ( cl->pers.localClient ) { G_Printf("Cannot kick host player\n"); return; } if ( timeout != -1 ) { char *ip; char userinfo[MAX_INFO_STRING]; trap_GetUserinfo( cl->ps.clientNum, userinfo, sizeof( userinfo ) ); ip = Info_ValueForKey (userinfo, "ip"); // use engine banning system, mods may choose to use their own banlist if (USE_ENGINE_BANLIST) { // kick but dont ban bots, they arent that lame if ( (g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) { timeout = 0; } trap_DropClient(cl->ps.clientNum, "player kicked", timeout); } else { trap_DropClient(cl->ps.clientNum, "player kicked", 0); // kick but dont ban bots, they arent that lame if ( !(g_entities[cl->ps.clientNum].r.svFlags & SVF_BOT) ) AddIPBan( ip ); } } else { trap_DropClient(cl->ps.clientNum, "player kicked", 0); } } }