This is an automated email from the git hooks/post-receive script. smcv pushed a commit to tag 1.51b in repository iortcw.
commit 82cf63874f26c4a0caab8fedf056fdbee97e9d7a Author: MAN-AT-ARMS <m4n4t4...@gmail.com> Date: Fri Jul 28 20:34:27 2017 -0400 All: Don't require to be a local client to use g_localTeamPref Fix g_teamAutoJoin Sync g_teamForceBalance code from MP into SP --- MP/code/game/g_cmds.c | 5 +++++ MP/code/game/g_main.c | 1 + MP/code/game/g_session.c | 2 +- SP/code/game/g_client.c | 27 +++++++++++++++++++++++++++ SP/code/game/g_cmds.c | 28 ++++++++++++++++++++++++++++ SP/code/game/g_local.h | 1 + SP/code/game/g_main.c | 3 +++ SP/code/game/g_session.c | 2 +- 8 files changed, 67 insertions(+), 2 deletions(-) diff --git a/MP/code/game/g_cmds.c b/MP/code/game/g_cmds.c index 80d02de..c856676 100644 --- a/MP/code/game/g_cmds.c +++ b/MP/code/game/g_cmds.c @@ -694,6 +694,11 @@ void SetTeam( gentity_t *ent, const char *s ) { // get and distribute relevent paramters ClientUserinfoChanged( clientNum ); + // client hasn't spawned yet, they sent an early team command, teampref userinfo, or g_teamAutoJoin is enabled + if ( client->pers.connected != CON_CONNECTED ) { + return; + } + ClientBegin( clientNum ); } diff --git a/MP/code/game/g_main.c b/MP/code/game/g_main.c index 01662ef..f3a8166 100644 --- a/MP/code/game/g_main.c +++ b/MP/code/game/g_main.c @@ -205,6 +205,7 @@ cvarTable_t gameCvarTable[] = { { &g_friendlyFire, "g_friendlyFire", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue }, + { &g_teamAutoJoin, "g_teamAutoJoin", "0", CVAR_ARCHIVE }, { &g_teamForceBalance, "g_teamForceBalance", "0", CVAR_ARCHIVE }, // NERVE - SMF - merge from team arena { &g_warmup, "g_warmup", "20", CVAR_ARCHIVE, 0, qtrue }, diff --git a/MP/code/game/g_session.c b/MP/code/game/g_session.c index af9e3c2..cfda965 100644 --- a/MP/code/game/g_session.c +++ b/MP/code/game/g_session.c @@ -150,7 +150,7 @@ void G_InitSessionData( gclient_t *client, char *userinfo ) { value = Info_ValueForKey( userinfo, "teampref" ); // check for human's team preference set by start server menu - if ( !value[0] && g_localTeamPref.string[0] && client->pers.localClient ) { + if ( !value[0] && g_localTeamPref.string[0] /*&& client->pers.localClient*/ ) { value = g_localTeamPref.string; // clear team so it's only used once diff --git a/SP/code/game/g_client.c b/SP/code/game/g_client.c index 7c1e4ac..692da79 100644 --- a/SP/code/game/g_client.c +++ b/SP/code/game/g_client.c @@ -684,6 +684,33 @@ void ClientRespawn( gentity_t *ent ) { ClientSpawn( ent ); } +// NERVE - SMF - merge from team arena +/* +================ +TeamCount + +Returns number of players on a team +================ +*/ +int TeamCount( int ignoreClientNum, team_t team ) { + int i; + int count = 0; + + for ( i = 0 ; i < level.maxclients ; i++ ) { + if ( i == ignoreClientNum ) { + continue; + } + if ( level.clients[i].pers.connected == CON_DISCONNECTED ) { + continue; + } + if ( level.clients[i].sess.sessionTeam == team ) { + count++; + } + } + + return count; +} +// -NERVE - SMF /* ================ diff --git a/SP/code/game/g_cmds.c b/SP/code/game/g_cmds.c index d59afbf..fa82b43 100644 --- a/SP/code/game/g_cmds.c +++ b/SP/code/game/g_cmds.c @@ -603,6 +603,29 @@ void SetTeam( gentity_t *ent, const char *s ) { // pick the team with the least number of players team = PickTeam( clientNum ); } + + // NERVE - SMF - merge from team arena + if ( g_teamForceBalance.integer && !client->pers.localClient && !( ent->r.svFlags & SVF_BOT ) ) { + int counts[TEAM_NUM_TEAMS]; + + counts[TEAM_BLUE] = TeamCount( clientNum, TEAM_BLUE ); + counts[TEAM_RED] = TeamCount( clientNum, TEAM_RED ); + + // We allow a spread of one + if ( team == TEAM_RED && counts[TEAM_RED] - counts[TEAM_BLUE] >= 1 ) { + trap_SendServerCommand( clientNum, + "cp \"The Axis has too many players.\n\"" ); + return; // ignore the request + } + if ( team == TEAM_BLUE && counts[TEAM_BLUE] - counts[TEAM_RED] >= 1 ) { + trap_SendServerCommand( clientNum, + "cp \"The Allies have too many players.\n\"" ); + return; // ignore the request + } + + // It's ok, the team we are switching to has less or same number of players + } + // -NERVE - SMF } else { // force them to spectators if there aren't any spots free team = TEAM_FREE; @@ -663,6 +686,11 @@ void SetTeam( gentity_t *ent, const char *s ) { // get and distribute relevent paramters ClientUserinfoChanged( clientNum ); + // client hasn't spawned yet, they sent an early team command, teampref userinfo, or g_teamAutoJoin is enabled + if ( client->pers.connected != CON_CONNECTED ) { + return; + } + ClientBegin( clientNum ); } diff --git a/SP/code/game/g_local.h b/SP/code/game/g_local.h index cefca7e..8818c31 100644 --- a/SP/code/game/g_local.h +++ b/SP/code/game/g_local.h @@ -915,6 +915,7 @@ void CalcMuzzlePointForActivate( gentity_t *ent, vec3_t forward, vec3_t right, v // // g_client.c // +int TeamCount( int ignoreClientNum, team_t team ); team_t PickTeam( int ignoreClientNum ); void SetClientViewAngle( gentity_t *ent, vec3_t angle ); gentity_t *SelectSpawnPoint( vec3_t avoidPoint, vec3_t origin, vec3_t angles ); diff --git a/SP/code/game/g_main.c b/SP/code/game/g_main.c index abe3073..675357f 100644 --- a/SP/code/game/g_main.c +++ b/SP/code/game/g_main.c @@ -188,6 +188,9 @@ cvarTable_t gameCvarTable[] = { { &g_friendlyFire, "g_friendlyFire", "1", CVAR_ARCHIVE, 0, qtrue }, + { &g_teamAutoJoin, "g_teamAutoJoin", "0", CVAR_ARCHIVE }, + { &g_teamForceBalance, "g_teamForceBalance", "0", CVAR_ARCHIVE }, // NERVE - SMF - merge from team arena + { &g_warmup, "g_warmup", "20", CVAR_ARCHIVE, 0, qtrue }, { &g_doWarmup, "g_doWarmup", "0", CVAR_ARCHIVE, 0, qtrue }, { &g_logfile, "g_log", "games.log", CVAR_ARCHIVE, 0, qfalse }, diff --git a/SP/code/game/g_session.c b/SP/code/game/g_session.c index 1864ffe..ead3bbf 100644 --- a/SP/code/game/g_session.c +++ b/SP/code/game/g_session.c @@ -116,7 +116,7 @@ void G_InitSessionData( gclient_t *client, char *userinfo ) { value = Info_ValueForKey( userinfo, "teampref" ); // check for human's team preference set by start server menu - if ( !value[0] && g_localTeamPref.string[0] && client->pers.localClient ) { + if ( !value[0] && g_localTeamPref.string[0] /*&& client->pers.localClient*/ ) { value = g_localTeamPref.string; // clear team so it's only used once -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits