This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to tag 1.51b
in repository iortcw.

commit 2f826e2a4ee3144278a00931bbfaffdc5334fd77
Author: MAN-AT-ARMS <[email protected]>
Date:   Tue Jun 13 14:12:24 2017 -0400

    All: Refactor ClientNumberFromString
    
    MP: kick-clientkick refactor / prevent local client kicks
    SP: Not used
---
 MP/code/game/g_cmds.c     | 62 ++++++++++++++++++++++++++++++++---------------
 MP/code/server/sv_ccmds.c |  2 +-
 SP/code/game/g_cmds.c     | 47 +++++++++++++++++++----------------
 SP/code/server/sv_ccmds.c |  2 +-
 4 files changed, 70 insertions(+), 43 deletions(-)

diff --git a/MP/code/game/g_cmds.c b/MP/code/game/g_cmds.c
index e85f380..10a03f4 100644
--- a/MP/code/game/g_cmds.c
+++ b/MP/code/game/g_cmds.c
@@ -196,31 +196,35 @@ Returns a player number for either a number or name string
 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;
        int idnum;
        char cleanName[MAX_STRING_CHARS];
 
-       // numeric values could be slot numbers
-       if ( StringIsInteger( s ) ) {
-               idnum = atoi( s );
-               if ( idnum >= 0 && idnum < level.maxclients ) {
-                       cl = &level.clients[idnum];
-                       if ( cl->pers.connected == CON_CONNECTED ) {
-                               return idnum;
+       if ( checkNums ) {
+               // numeric values could be slot numbers
+               if ( StringIsInteger( s ) ) {
+                       idnum = atoi( s );
+                       if ( idnum >= 0 && idnum < level.maxclients ) {
+                               cl = &level.clients[idnum];
+                               if ( cl->pers.connected == CON_CONNECTED ) {
+                                       return idnum;
+                               }
                        }
                }
        }
 
-       // check for a name match
-       for ( idnum = 0,cl = level.clients ; idnum < level.maxclients ; 
idnum++,cl++ ) {
-               if ( cl->pers.connected != CON_CONNECTED ) {
-                       continue;
-               }
-               Q_strncpyz(cleanName, cl->pers.netname, sizeof(cleanName));
-               Q_CleanStr(cleanName);
-               if ( !Q_stricmp( cleanName, s ) ) {
-                       return idnum;
+       if ( checkNames ) {
+               // check for a name match
+               for ( idnum = 0, cl = level.clients; idnum < level.maxclients; 
idnum++, cl++ ) {
+                       if ( cl->pers.connected != CON_CONNECTED ) {
+                               continue;
+                       }
+                       Q_strncpyz( cleanName, cl->pers.netname, sizeof( 
cleanName ) );
+                       Q_CleanStr( cleanName );
+                       if ( !Q_stricmp( cleanName, s ) ) {
+                               return idnum;
+                       }
                }
        }
 
@@ -819,7 +823,7 @@ void Cmd_Follow_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       i = ClientNumberFromString( ent, arg );
+       i = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( i == -1 ) {
                return;
        }
@@ -1097,7 +1101,7 @@ static void Cmd_Tell_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       targetNum = ClientNumberFromString( ent, arg );
+       targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( targetNum == -1 ) {
                return;
        }
@@ -1370,7 +1374,7 @@ void Cmd_GameCommand_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       targetNum = ClientNumberFromString( ent, arg );
+       targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( targetNum == -1 ) {
                return;
        }
@@ -1548,6 +1552,23 @@ void Cmd_CallVote_f( gentity_t *ent ) {
                }
                Com_sprintf( level.voteString, sizeof( level.voteString ), 
"vstr nextmap" );
                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 ) {
+                       // if it can't do a client number match, don't allow 
kick (to prevent votekick text spam wars)
+                       trap_SendServerCommand( ent - g_entities, "print 
\"Client not on server.\n\"" );
+                       return;
+               }
+
+               if ( level.clients[i].pers.localClient ) {
+                       trap_SendServerCommand( ent - g_entities, "print 
\"Cannot kick host player.\n\"" );
+                       return;
+               }
+
+               // found a client number to kick, so override votestring with 
better one
+               Com_sprintf( level.voteString, sizeof( level.voteString ), 
"clientkick \"%d\"", i );
+               Com_sprintf( level.voteDisplayString, sizeof( 
level.voteDisplayString ), "kick %s", level.clients[i].pers.netname );
+#if 0
 // JPW NERVE
        } else if ( !Q_stricmp( arg1,"kick" ) ) {
                int i,kicknum = MAX_CLIENTS;
@@ -1570,6 +1591,7 @@ void Cmd_CallVote_f( gentity_t *ent ) {
                        return;
                }
 // jpw
+#endif
        } else {
                Com_sprintf( level.voteString, sizeof( level.voteString ), "%s 
\"%s\"", arg1, arg2 );
                Com_sprintf( level.voteDisplayString, sizeof( 
level.voteDisplayString ), "%s", level.voteString );
diff --git a/MP/code/server/sv_ccmds.c b/MP/code/server/sv_ccmds.c
index be18877..3099385 100644
--- a/MP/code/server/sv_ccmds.c
+++ b/MP/code/server/sv_ccmds.c
@@ -729,7 +729,7 @@ static void SV_Ban_f( void ) {
        }
 
        if ( cl->netchan.remoteAddress.type == NA_LOOPBACK ) {
-               Com_Printf("Cannot kick host player\n");
+               Com_Printf("Cannot ban host player\n");
                return;
        }
 
diff --git a/SP/code/game/g_cmds.c b/SP/code/game/g_cmds.c
index cd0b951..57dddcc 100644
--- a/SP/code/game/g_cmds.c
+++ b/SP/code/game/g_cmds.c
@@ -181,32 +181,35 @@ Returns a player number for either a number or name string
 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;
        int idnum;
        char            cleanName[MAX_STRING_CHARS];
 
-       // numeric values could be slot numbers
-       if ( StringIsInteger( s ) ) {
-               idnum = atoi( s );
-
-               if ( idnum >= 0 && idnum < level.maxclients ) {
-                       cl = &level.clients[idnum];
-                       if ( cl->pers.connected == CON_CONNECTED ) {
-                               return idnum;
+       if ( checkNums ) {
+               // numeric values could be slot numbers
+               if ( StringIsInteger( s ) ) {
+                       idnum = atoi( s );
+                       if ( idnum >= 0 && idnum < level.maxclients ) {
+                               cl = &level.clients[idnum];
+                               if ( cl->pers.connected == CON_CONNECTED ) {
+                                       return idnum;
+                               }
                        }
                }
        }
 
-       // check for a name match
-       for ( idnum = 0,cl = level.clients ; idnum < level.maxclients ; 
idnum++,cl++ ) {
-               if ( cl->pers.connected != CON_CONNECTED ) {
-                       continue;
-               }
-               Q_strncpyz(cleanName, cl->pers.netname, sizeof(cleanName));
-               Q_CleanStr(cleanName);
-               if ( !Q_stricmp( cleanName, s ) ) {
-                       return idnum;
+       if ( checkNames ) {
+               // check for a name match
+               for ( idnum = 0, cl = level.clients; idnum < level.maxclients; 
idnum++, cl++ ) {
+                       if ( cl->pers.connected != CON_CONNECTED ) {
+                               continue;
+                       }
+                       Q_strncpyz( cleanName, cl->pers.netname, sizeof( 
cleanName ) );
+                       Q_CleanStr( cleanName );
+                       if ( !Q_stricmp( cleanName, s ) ) {
+                               return idnum;
+                       }
                }
        }
 
@@ -769,7 +772,7 @@ void Cmd_Follow_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       i = ClientNumberFromString( ent, arg );
+       i = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( i == -1 ) {
                return;
        }
@@ -1032,7 +1035,7 @@ static void Cmd_Tell_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       targetNum = ClientNumberFromString( ent, arg );
+       targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( targetNum == -1 ) {
                return;
        }
@@ -1082,7 +1085,7 @@ void Cmd_GameCommand_f( gentity_t *ent ) {
        }
 
        trap_Argv( 1, arg, sizeof( arg ) );
-       targetNum = ClientNumberFromString( ent, arg );
+       targetNum = ClientNumberFromString( ent, arg, qtrue, qtrue );
        if ( targetNum == -1 ) {
                return;
        }
@@ -1156,10 +1159,12 @@ void Cmd_CallVote_f( gentity_t *ent ) {
        } else if ( !Q_stricmp( arg1, "map" ) ) {
        } else if ( !Q_stricmp( arg1, "g_gametype" ) ) {
        } else if ( !Q_stricmp( arg1, "kick" ) ) {
+       } else if ( !Q_stricmp( arg1, "clientkick" ) ) {
        } else {
                trap_SendServerCommand( ent - g_entities, "print \"Invalid vote 
string.\n\"" );
                return;
        }
+       
        Com_sprintf( level.voteString, sizeof( level.voteString ), "%s %s", 
arg1, arg2 );
 
        trap_SendServerCommand( -1, va( "print \"%s called a vote.\n\"", 
ent->client->pers.netname ) );
diff --git a/SP/code/server/sv_ccmds.c b/SP/code/server/sv_ccmds.c
index edde770..60c2174 100644
--- a/SP/code/server/sv_ccmds.c
+++ b/SP/code/server/sv_ccmds.c
@@ -746,7 +746,7 @@ static void SV_Ban_f( void ) {
        }
 
        if ( cl->netchan.remoteAddress.type == NA_LOOPBACK ) {
-               Com_Printf("Cannot kick host player\n");
+               Com_Printf("Cannot ban host player\n");
                return;
        }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/iortcw.git

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to