diff options
| author | Dominik Geyer <dominik.geyer@gmx.de> | 2008-10-19 18:38:23 +0000 |
|---|---|---|
| committer | Dominik Geyer <dominik.geyer@gmx.de> | 2008-10-19 18:38:23 +0000 |
| commit | 0b4c01ff0a8463575a65de9f72fe5dc2faf478ac (patch) | |
| tree | d44e3e9abb1ed3373e37ad8d2d54df98e3a48a23 /src/game/server/gamecontroller.cpp | |
| parent | 164d9c637dbd1d7f49667c784cf88e337c5a5ea2 (diff) | |
| download | zcatch-0b4c01ff0a8463575a65de9f72fe5dc2faf478ac.tar.gz zcatch-0b4c01ff0a8463575a65de9f72fe5dc2faf478ac.zip | |
fix: only do balancing is teams are uneven; fix: check balance on disconnect; added check for balance after rcon-teamset; used patch from Oy with some modification
Diffstat (limited to 'src/game/server/gamecontroller.cpp')
| -rw-r--r-- | src/game/server/gamecontroller.cpp | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/src/game/server/gamecontroller.cpp b/src/game/server/gamecontroller.cpp index 4ca84baf..ea76e897 100644 --- a/src/game/server/gamecontroller.cpp +++ b/src/game/server/gamecontroller.cpp @@ -377,37 +377,41 @@ void GAMECONTROLLER::tick() } } - int m = (t[0] > t[1]) ? 0 : 1; - int num_balance = abs(t[0]-t[1]) / 2; - - do + // are teams unbalanced? + if(abs(t[0]-t[1]) >= 2) { - PLAYER *p = 0; - int pd = tscore[m]; - for(int i = 0; i < MAX_CLIENTS; i++) + int m = (t[0] > t[1]) ? 0 : 1; + int num_balance = abs(t[0]-t[1]) / 2; + + do { - 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)) + PLAYER *p = 0; + int pd = tscore[m]; + for(int i = 0; i < MAX_CLIENTS; i++) { - p = game.players[i]; - pd = abs((tscore[m^1]+p->score) - (tscore[m]-p->score)); + 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]; + pd = abs((tscore[m^1]+p->score) - (tscore[m]-p->score)); + } } - } - - // 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; + + // 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; + + p->respawn(); + p->force_balanced = true; + } while (--num_balance); - p->respawn(); - p->force_balanced = true; - } while (--num_balance); - - force_balanced = true; + force_balanced = true; + } unbalanced_tick = -1; } |