Index: src/game/g_cmds.c =================================================================== --- src/game/g_cmds.c (revision 848) +++ src/game/g_cmds.c (working copy) @@ -1034,7 +1034,8 @@ trap_SendConsoleCommand( EXEC_APPEND, va( "%s\n", level.voteString ) ); } - if( !Q_stricmp( arg1, "kick" ) ) + // since mute votes are so similar to kick votes, share the code + if( !Q_stricmp( arg1, "kick" ) || !Q_stricmp( arg1, "mute" ) ) { int clientNum; int clientNums[ MAX_CLIENTS ] = { -1 }; @@ -1055,15 +1056,23 @@ return; } } - Q_strncpyz( arg1, "clientkick", sizeof( arg1 ) ); + Q_strncpyz( arg1, va( "client%s", arg1 ), sizeof( arg1 ) ); Q_strncpyz( arg2, va( "%d", clientNum ), sizeof( arg2 ) ); } - if( !Q_stricmp( arg1, "clientkick" ) ) + if( !Q_stricmp( arg1, "clientkick" ) || !Q_stricmp( arg1, "clientmute" ) ) { - char kickee[ MAX_NETNAME ]; + char victim[ MAX_NETNAME ]; int clientNum = 0; + qboolean kick = !Q_stricmp( arg1, "clientkick" ); + if( !kick && !g_admin.string[ 0 ] ) + { + trap_SendServerCommand( ent - g_entities, + "print \"Admin system is not enabled\n\"" ); + return; + } + //check arg2 is a number for( i = 0; arg2[ i ]; i++ ) { @@ -1081,28 +1090,38 @@ if( G_admin_permission( &g_entities[ clientNum ], ADMF_IMMUNITY ) ) { trap_SendServerCommand( ent-g_entities, - "print \"callvote: admin is immune from vote kick\n\"" ); + va( "print \"callvote: admin is immune from vote %s\n\"", arg1 ) ); return; } if( level.clients[ clientNum ].pers.connected != CON_DISCONNECTED ) { - Q_strncpyz( kickee, level.clients[ clientNum ].pers.netname, - sizeof( kickee ) ); - Q_CleanStr( kickee ); + Q_strncpyz( victim, level.clients[ clientNum ].pers.netname, + sizeof( victim ) ); + Q_CleanStr( victim ); if( g_admin.string[ 0 ] ) { + if( kick ) // !kick will add a temp ban and a descriptive drop message - Com_sprintf( level.voteString, sizeof( level.voteString ), - "!kick %d vote kick", clientNum ); + Com_sprintf( level.voteString, sizeof( level.voteString ), + "!kick %d vote kick", clientNum ); + else + Com_sprintf( level.voteString, sizeof( level.voteString ), + "!mute %d", clientNum ); } - else + else if( kick ) { Com_sprintf( level.voteString, sizeof( level.voteString ), "clientkick %d", clientNum ); } - Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), - "Kick player \'%s\'", kickee ); + + if( kick ) + Com_sprintf( level.voteDisplayString, + sizeof( level.voteDisplayString ), "Kick player \'%s\'", + victim ); + else + Com_sprintf( level.voteDisplayString, + sizeof( level.voteDisplayString ), "Mute player \'%s\'", victim ); } else return; @@ -1132,7 +1151,8 @@ { trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string\n\"" ); trap_SendServerCommand( ent-g_entities, "print \"Valid vote commands are: map_restart, nextmap, " - "map , kick , clientkick \n\"" ); + "map , kick , clientkick , mute ," + "clientmute \n\"" ); return; } @@ -1263,7 +1283,7 @@ return; } - if( !Q_stricmp( arg1, "teamkick" ) ) + if( !Q_stricmp( arg1, "teamkick" ) || !Q_stricmp( arg1, "teammute" ) ) { int clientNum; int clientNums[ MAX_CLIENTS ] = { -1 }; @@ -1284,15 +1304,26 @@ return; } } - Q_strncpyz( arg1, "teamclientkick", sizeof( arg1 ) ); + Q_strncpyz( arg1, + !Q_stricmp( arg1, "teamkick" ) ? "teamclientkick" : "teamclientmute", + sizeof( arg1 ) ); Q_strncpyz( arg2, va( "%d", clientNum ), sizeof( arg2 ) ); } - if( !Q_stricmp( arg1, "teamclientkick" ) ) + if( !Q_stricmp( arg1, "teamclientkick" ) || + !Q_stricmp( arg1, "teamclientmute" ) ) { int clientNum = 0; - char kickee[ MAX_NETNAME ]; + char victim[ MAX_NETNAME ]; + qboolean kick = !Q_stricmp( arg1, "teamclientkick" ); + if( !kick && !g_admin.string[ 0 ] ) + { + trap_SendServerCommand( ent - g_entities, + "print \"Admin system is not enabled\n\"" ); + return; + } + //check arg2 is a number for( i = 0; arg2[ i ]; i++ ) { @@ -1323,20 +1354,26 @@ if( G_admin_permission( &g_entities[ clientNum ], ADMF_IMMUNITY ) ) { trap_SendServerCommand( ent-g_entities, - "print \"callteamvote: admin is immune from vote kick\n\"" ); + va( "print \"callteamvote: admin is immune from vote %s\n\"", + kick ? "kick" : "mute" ) ); return; } - Q_strncpyz( kickee, level.clients[ clientNum ].pers.netname, - sizeof( kickee ) ); - Q_CleanStr( kickee ); + Q_strncpyz( victim, level.clients[ clientNum ].pers.netname, + sizeof( victim ) ); + Q_CleanStr( victim ); if( g_admin.string[ 0 ] ) { + if( kick ) // !kick will add a temp ban and a descriptive drop message - Com_sprintf( level.teamVoteString[ cs_offset ], + Com_sprintf( level.teamVoteString[ cs_offset ], sizeof( level.teamVoteString[ cs_offset ] ), "!kick %d team vote kick", clientNum ); + else + Com_sprintf( level.teamVoteString[ cs_offset ], + sizeof( level.teamVoteString[ cs_offset ] ), + "!mute %d", clientNum ); } else { @@ -1344,15 +1381,21 @@ sizeof( level.teamVoteString[ cs_offset ] ), "clientkick %d", clientNum ); } - Com_sprintf( level.teamVoteDisplayString[ cs_offset ], + + if( kick ) + Com_sprintf( level.teamVoteDisplayString[ cs_offset ], sizeof( level.teamVoteDisplayString[ cs_offset ] ), - "Kick player \'%s\'", kickee ); + "Kick player \'%s\'", victim ); + else + Com_sprintf( level.teamVoteDisplayString[ cs_offset ], + sizeof( level.teamVoteDisplayString[ cs_offset ] ), + "Mute player \'%s\'", victim ); } else { trap_SendServerCommand( ent-g_entities, "print \"Invalid vote string\n\"" ); trap_SendServerCommand( ent-g_entities, "print \"Valid team vote commands are: teamkick , " - "teamclientkick \n\"" ); + "teamclientkick , teammute , teamclientmute \n\"" ); return; } ent->client->pers.voteCount++;