Show client's name in callvote clientkick vote display message
Make callvote always kick by client num so player can't rename to avoid being kicked. Don't allow calling a vote to kick host or non-existent players.
This commit is contained in:
parent
eeb28dc1d0
commit
71512bb1fd
1 changed files with 38 additions and 21 deletions
|
@ -192,11 +192,12 @@ Returns a player number for either a number or name string
|
||||||
Returns -1 if invalid
|
Returns -1 if invalid
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
int ClientNumberFromString( gentity_t *to, char *s ) {
|
int ClientNumberFromString( gentity_t *to, char *s, qboolean checkNums, qboolean checkNames ) {
|
||||||
gclient_t *cl;
|
gclient_t *cl;
|
||||||
int idnum;
|
int idnum;
|
||||||
char cleanName[MAX_STRING_CHARS];
|
char cleanName[MAX_STRING_CHARS];
|
||||||
|
|
||||||
|
if ( checkNums ) {
|
||||||
// numeric values could be slot numbers
|
// numeric values could be slot numbers
|
||||||
if ( StringIsInteger( s ) ) {
|
if ( StringIsInteger( s ) ) {
|
||||||
idnum = atoi( s );
|
idnum = atoi( s );
|
||||||
|
@ -207,7 +208,9 @@ int ClientNumberFromString( gentity_t *to, char *s ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( checkNames ) {
|
||||||
// check for a name match
|
// check for a name match
|
||||||
for ( idnum=0,cl=level.clients ; idnum < level.maxclients ; idnum++,cl++ ) {
|
for ( idnum=0,cl=level.clients ; idnum < level.maxclients ; idnum++,cl++ ) {
|
||||||
if ( cl->pers.connected != CON_CONNECTED ) {
|
if ( cl->pers.connected != CON_CONNECTED ) {
|
||||||
|
@ -219,6 +222,7 @@ int ClientNumberFromString( gentity_t *to, char *s ) {
|
||||||
return idnum;
|
return idnum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
trap_SendServerCommand( to-g_entities, va("print \"User %s is not on the server\n\"", s));
|
trap_SendServerCommand( to-g_entities, va("print \"User %s is not on the server\n\"", s));
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -734,7 +738,7 @@ void Cmd_Follow_f( gentity_t *ent ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Argv( 1, arg, sizeof( arg ) );
|
trap_Argv( 1, arg, sizeof( arg ) );
|
||||||
i = ClientNumberFromString( ent, arg );
|
i = ClientNumberFromString( ent, arg, qtrue, qtrue );
|
||||||
if ( i == -1 ) {
|
if ( i == -1 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -966,7 +970,7 @@ static void Cmd_Tell_f( gentity_t *ent ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Argv( 1, arg, sizeof( arg ) );
|
trap_Argv( 1, arg, sizeof( arg ) );
|
||||||
targetNum = ClientNumberFromString( ent, arg );
|
targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
|
||||||
if ( targetNum == -1 ) {
|
if ( targetNum == -1 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1092,7 +1096,7 @@ static void Cmd_VoiceTell_f( gentity_t *ent, qboolean voiceonly ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Argv( 1, arg, sizeof( arg ) );
|
trap_Argv( 1, arg, sizeof( arg ) );
|
||||||
targetNum = ClientNumberFromString( ent, arg );
|
targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
|
||||||
if ( targetNum == -1 ) {
|
if ( targetNum == -1 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1221,7 +1225,7 @@ void Cmd_GameCommand_f( gentity_t *ent ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Argv( 1, arg, sizeof( arg ) );
|
trap_Argv( 1, arg, sizeof( arg ) );
|
||||||
targetNum = ClientNumberFromString( ent, arg );
|
targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
|
||||||
if ( targetNum == -1 ) {
|
if ( targetNum == -1 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1365,6 +1369,19 @@ void Cmd_CallVote_f( gentity_t *ent ) {
|
||||||
}
|
}
|
||||||
Com_sprintf( level.voteString, sizeof( level.voteString ), "vstr nextmap");
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "vstr nextmap");
|
||||||
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
||||||
|
} else if ( !Q_stricmp( arg1, "clientkick" ) || !Q_stricmp( arg1, "kick" ) ) {
|
||||||
|
i = ClientNumberFromString( ent, arg2, !Q_stricmp( arg1, "clientkick" ), !Q_stricmp( arg1, "kick" ) );
|
||||||
|
if ( i == -1 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( level.clients[i].pers.localClient ) {
|
||||||
|
trap_SendServerCommand( ent - g_entities, "print \"Cannot kick host player.\n\"" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "clientkick %d", i );
|
||||||
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "kick %s", level.clients[i].pers.netname );
|
||||||
} else {
|
} else {
|
||||||
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s \"%s\"", arg1, arg2 );
|
Com_sprintf( level.voteString, sizeof( level.voteString ), "%s \"%s\"", arg1, arg2 );
|
||||||
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
Com_sprintf( level.voteDisplayString, sizeof( level.voteDisplayString ), "%s", level.voteString );
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue