diff options
Diffstat (limited to 'src/game/server')
| -rw-r--r-- | src/game/server/gamecontroller.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/game/server/gamecontroller.cpp b/src/game/server/gamecontroller.cpp index 272697cc..4ca84baf 100644 --- a/src/game/server/gamecontroller.cpp +++ b/src/game/server/gamecontroller.cpp @@ -361,6 +361,7 @@ void GAMECONTROLLER::tick() } } + // do team-balancing if (is_teamplay() && unbalanced_tick != -1 && server_tick() > unbalanced_tick+config.sv_teambalance_time*server_tickspeed()*60) { dbg_msg("game", "Balancing teams"); @@ -381,7 +382,6 @@ void GAMECONTROLLER::tick() do { - // move player who is closest to team-scorediff PLAYER *p = 0; int pd = tscore[m]; for(int i = 0; i < MAX_CLIENTS; i++) @@ -389,6 +389,7 @@ void GAMECONTROLLER::tick() if(!game.players[i]) continue; + // remember the player who would cause lowest score-difference if(game.players[i]->team == m && (!p || abs((tscore[m^1]+game.players[i]->score) - (tscore[m]-game.players[i]->score)) < pd)) { p = game.players[i]; @@ -396,7 +397,8 @@ void GAMECONTROLLER::tick() } } - // change in player::set_team needed: player won't lose score on team-change + // move the player to other team without losing his score + // TODO: change in player::set_team needed: player won't lose score on team-change int score_before = p->score; p->set_team(m^1); p->score = score_before; |