diff options
| -rw-r--r-- | src/game/g_admin.c | 23 | ||||
| -rw-r--r-- | src/game/g_admin.h | 2 | ||||
| -rw-r--r-- | src/game/g_client.c | 4 | ||||
| -rw-r--r-- | src/game/g_local.h | 3 | 
4 files changed, 31 insertions, 1 deletions
diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 2de9296..e6b3132 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -458,7 +458,10 @@ g_admin_cmd_t g_admin_cmds[ ] =        "  * will unpause all players, using no argument will unpause game clock",        "(^5name|slot|*^7)"      }, - +    {"versions", G_admin_versions, "namelog", +     "Check what versions of Tremulous players are running.", +     "" +    },      {       "warn", G_admin_warn, "warn",        "Warn a player to cease or face admin intervention", @@ -10381,3 +10384,21 @@ qboolean G_admin_give(gentity_t *ent, int skiparg)  	return qtrue;  } +qboolean G_admin_versions(gentity_t *ent, int skiparg) +{ +	int i; + +	ADMBP_begin(); + +	for (i = 0; i < level.maxclients; i++) { +		gclient_t *client = level.clients + i; + +		if (client->pers.connected == CON_DISCONNECTED) +			continue; + +		ADMBP(va("% 2d '%s'\n", i, client->pers.version)); +	} + +	ADMBP_end(); +	return qtrue; +} diff --git a/src/game/g_admin.h b/src/game/g_admin.h index d980ba8..54ea9f3 100644 --- a/src/game/g_admin.h +++ b/src/game/g_admin.h @@ -367,6 +367,8 @@ qboolean G_admin_scrim( gentity_t *ent, int skiparg );  qboolean G_admin_give( gentity_t *ent, int skiparg ); +qboolean G_admin_versions( gentity_t *ent, int skiparg ); +  void G_admin_print( gentity_t *ent, char *m );  void G_admin_buffer_print( gentity_t *ent, char *m );  void G_admin_buffer_begin( void ); diff --git a/src/game/g_client.c b/src/game/g_client.c index f9a72ea..6044136 100644 --- a/src/game/g_client.c +++ b/src/game/g_client.c @@ -1142,6 +1142,10 @@ void ClientUserinfoChanged( int clientNum, qboolean forceName )    if( !strcmp( s, "localhost" ) )      client->pers.localClient = qtrue; +  // check the version +  s = Info_ValueForKey( userinfo, "version" ); +  Q_strncpyz( client->pers.version, s, MAX_CLIENT_VERSION ); +    // check the item prediction    s = Info_ValueForKey( userinfo, "cg_predictItems" ); diff --git a/src/game/g_local.h b/src/game/g_local.h index a3c02c8..5a8d1f8 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -373,6 +373,8 @@ typedef struct    long timeLastViewed;  } statsCounters_level; +#define MAX_CLIENT_VERSION 80 +  // client data that stays across multiple respawns, but is cleared  // on each level change or team change at ClientBegin()  typedef struct @@ -440,6 +442,7 @@ typedef struct    qboolean            firstConnect;        // This is the first map since connect    qboolean            useUnlagged;    statsCounters_t     statscounters; +  char                version[ MAX_CLIENT_VERSION ];  } clientPersistant_t;  #define MAX_UNLAGGED_MARKERS 256  | 
