Follow-up Comment #5, patch #3346 (project freeciv): I redesigned the rank_users() function. Any ranking is now correct, after _endturn_, too. The attached patch to consider is now score_system.diff.
In the function, now I distinguish two conditions: 1) rank_users() is called the traditional way, when a game is over for space race or conquest. I call this a "victory condition"; 2) the functions is called with a flag set, to identify that the game has been interrupted some way, and no victory condition should be analyzed to rank players (alive / space). This happens when endturn is reached, when /endgame is issued, and, potentially, when just the parameter flag is set. In case 2), victory and winners/losers sorting are determined as: " For each team is calculated the sum of the scores of any belonging member which is alive and has not surrendered; all the players in the team with the highest sum of scores win. " To specify the first or the second method of calculation the prototype of the function now is: void rank_users(bool interrupt); * interrupt == FALSE: game ended because of explicit victory, use the traditional calculation algorithm; * interrupt == TRUE: game interrupted, calculate teams scores. The only call to rank_users() in the whole server is done by /server/srv_main.c::srv_running(). Here I adjusted the _interrupt_ flag. Touched files are: * server/score.h * server/score.c * server/srv_main.c (file #15908) _______________________________________________________ Additional Item Attachment: File name: score_system.diff Size:6 KB _______________________________________________________ Reply to this item at: <http://gna.org/patch/?3346> _______________________________________________ Message sent via/by Gna! http://gna.org/ _______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev