http://bugs.freeciv.org/Ticket/Display.html?id=40550 >
> [EMAIL PROTECTED] - Tue Nov 04 17:16:25 2008]:
>
> I noticed this with 2.1.6 GTK and have not tested it on
> previous versions.
I have confirmed this bug in S2_1 and trunk.
> The thing is: on multiplayer (turn block) game, if a
> player klicks the turn done button, leaves the game and
> returns before the turn is over, the turn done button is
> active again. On the nations report the status indicator
> is done, though, and when other players klick the button,
> the turn is over.
The client sets its own player's "phase done" state to
FALSE when it receives a start phase packet. The code that
does this was introduced in the patch in ticket #12377
(r10021) to fix a different bug related to the turn done
button at that time.
> A small thing but may cause confusion. Maybe it's also a
> small one to fix?
The amount of code that needs to be changed is small, but the
amount I needed to sift through was not. ;(,,,
Anyway, the attached patches remove the offending code from
S2_1 and trunk, since (with the patches applied) I could not
reproduce the problem described in #12377 (i.e. the turn done
button staying insensitive upon a new turn [except of course
if turnblock=1 and a non-done player disconnects]).
---
どいつもこいつも汚いゴミを片付けることが好きらしい。
diff --git a/client/packhand.c b/client/packhand.c
index 81397fb..b53d6e0 100644
--- a/client/packhand.c
+++ b/client/packhand.c
@@ -1036,10 +1036,6 @@ void handle_start_phase(int phase)
if (NULL != client.conn.playing
&& is_player_phase(client.conn.playing, phase)) {
-/* HACK: this is updated by the player packet too; we update it here
- * so the turn done button state will be set properly. */
-client.conn.playing->phase_done = FALSE;
-
agents_start_turn();
non_ai_unit_focus = FALSE;
diff --git a/client/packhand.c b/client/packhand.c
index 8991f8f..c5422a0 100644
--- a/client/packhand.c
+++ b/client/packhand.c
@@ -889,10 +889,6 @@ void handle_start_phase(int phase)
game.info.phase = phase;
if (game.player_ptr && is_player_phase(game.player_ptr, phase)) {
-/* HACK: this is updated by the player packet too; we update it here
- * so the turn done button state will be set properly. */
-game.player_ptr->phase_done = FALSE;
-
agents_start_turn();
non_ai_unit_focus = FALSE;
@@ -1514,7 +1510,7 @@ void start_revolution(void)
void handle_player_info(struct packet_player_info *pinfo)
{
int i;
- bool poptechup, new_tech = FALSE;
+ bool poptechup, new_tech = FALSE, phase_done_changed;
char msg[MAX_LEN_MSG];
struct player *pplayer = &game.players[pinfo->playerno];
struct player_research* research;
@@ -1652,10 +1648,7 @@ void handle_player_info(struct packet_player_info *pinfo)
pplayer->is_ready = pinfo->is_ready;
- if (pplayer == game.player_ptr
- && pplayer->phase_done != pinfo->phase_done) {
-update_turn_done_button_state();
- }
+ phase_done_changed = (pplayer->phase_done != pinfo->phase_done);
pplayer->phase_done = pinfo->phase_done;
pplayer->nturns_idle=pinfo->nturns_idle;
@@ -1665,6 +1658,9 @@ void handle_player_info(struct packet_player_info *pinfo)
pplayer->revolution_finishes = pinfo->revolution_finishes;
pplayer->ai.skill_level = pinfo->ai_skill_level;
+ if (pplayer == game.player_ptr && phase_done_changed) {
+update_turn_done_button_state();
+ }
update_players_dialog();
update_worklist_report_dialog();
upgrade_canvas_clipboard();
___
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev