<URL: http://bugs.freeciv.org/Ticket/Display.html?id=12472 >
> [pepeto - Jeu. Sep. 13 16:35:37 2007]: > > It just spoilt LT9. Patch attached... > > Forgot this: @@ -697,6 +710,16 @@ plr->research.changed_from = -1; } plr->research.researching=tech; + + /* Update team research */ + players_iterate(pplayer) { + if (players_on_same_team(pplayer, plr) && pplayer->is_alive) { + pplayer->research.researching = plr->research.researching; + pplayer->research.changed_from = plr->research.changed_from; + pplayer->research.bulbs_researched = plr->research.bulbs_researched; + } + } players_iterate_end; + if (plr->research.bulbs_researched > total_bulbs_required(plr)) { tech_researched(plr); } New patch attached... (until the next)
--- server/plrhand.c.old 2007-09-13 17:34:35.000000000 +0200 +++ server/plrhand.c 2007-09-13 19:18:28.000000000 +0200 @@ -543,6 +543,12 @@ plr->research.bulbs_researched = MAX(plr->research.bulbs_researched - total_bulbs_required(plr), 0); + players_iterate(pplayer) { + if (players_on_same_team(pplayer, plr) && pplayer->is_alive) { + pplayer->research.bulbs_researched = plr->research.bulbs_researched; + } + } players_iterate_end; + /* do all the updates needed after finding new tech */ found_new_tech(plr, plr->research.researching, TRUE, TRUE, A_NONE); } @@ -556,17 +562,14 @@ /* count our research contribution this turn */ plr->research.bulbs_last_turn += bulbs; + plr->research.bulbs_researched += bulbs; players_iterate(pplayer) { - if (pplayer == plr) { - pplayer->research.bulbs_researched += bulbs; - } else if (pplayer->diplstates[plr->player_no].type == DS_TEAM - && pplayer->is_alive) { - /* Share with union partner(s). We'll get in return later. */ - pplayer->research.bulbs_researched += bulbs; + if (players_on_same_team(pplayer, plr) && pplayer->is_alive) { + pplayer->research.bulbs_researched = plr->research.bulbs_researched; } } players_iterate_end; - + excessive_bulbs = (plr->research.bulbs_researched - total_bulbs_required(plr)); @@ -576,6 +579,16 @@ update_tech(plr, 0); } } + + /* Sanity check */ + players_iterate(pplayer) { + if (players_on_same_team(pplayer, plr) && pplayer->is_alive) { + pplayer->research.researching = plr->research.researching; + pplayer->ai.tech_goal = plr->ai.tech_goal; + assert(pplayer->research.bulbs_researched + == plr->research.bulbs_researched); + } + } players_iterate_end; } /************************************************************************** @@ -697,6 +710,16 @@ plr->research.changed_from = -1; } plr->research.researching=tech; + + /* Update team research */ + players_iterate(pplayer) { + if (players_on_same_team(pplayer, plr) && pplayer->is_alive) { + pplayer->research.researching = plr->research.researching; + pplayer->research.changed_from = plr->research.changed_from; + pplayer->research.bulbs_researched = plr->research.bulbs_researched; + } + } players_iterate_end; + if (plr->research.bulbs_researched > total_bulbs_required(plr)) { tech_researched(plr); }
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev