Author: jtn Date: Mon Nov 17 11:28:50 2014 New Revision: 27058 URL: http://svn.gna.org/viewcvs/freeciv?rev=27058&view=rev Log: With team_pooled_research, send "tech_researched" signal to player whose action caused it before other players.
See gna patch #5430. Modified: trunk/server/diplhand.c trunk/server/scripting/api_server_edit.c trunk/server/techtools.c trunk/server/techtools.h Modified: trunk/server/diplhand.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/diplhand.c?rev=27058&r1=27057&r2=27058&view=diff ============================================================================== --- trunk/server/diplhand.c (original) +++ trunk/server/diplhand.c Mon Nov 17 11:28:50 2014 @@ -456,13 +456,8 @@ advance_name, nation_plural_for_player(pgiver)); - research_players_iterate(presearch, member) { - script_server_signal_emit("tech_researched", 3, - API_TYPE_TECH_TYPE, - advance_by_number(pclause->value), - API_TYPE_PLAYER, member, - API_TYPE_STRING, "traded"); - } research_players_iterate_end; + script_tech_learned(presearch, pdest, + advance_by_number(pclause->value), "traded"); research_apply_penalty(presearch, pclause->value, game.server.diplbulbcost); found_new_tech(presearch, pclause->value, FALSE, TRUE); Modified: trunk/server/scripting/api_server_edit.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/scripting/api_server_edit.c?rev=27058&r1=27057&r2=27058&view=diff ============================================================================== --- trunk/server/scripting/api_server_edit.c (original) +++ trunk/server/scripting/api_server_edit.c Mon Nov 17 11:28:50 2014 @@ -282,12 +282,7 @@ research_apply_penalty(presearch, id, game.server.freecost); found_new_tech(presearch, id, FALSE, TRUE); result = advance_by_number(id); - research_players_iterate(presearch, member) { - script_server_signal_emit("tech_researched", 3, - API_TYPE_TECH_TYPE, result, - API_TYPE_PLAYER, member, - API_TYPE_STRING, reason); - } research_players_iterate_end; + script_tech_learned(presearch, pplayer, result, reason); return result; } else { return NULL; Modified: trunk/server/techtools.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/techtools.c?rev=27058&r1=27057&r2=27058&view=diff ============================================================================== --- trunk/server/techtools.c (original) +++ trunk/server/techtools.c Mon Nov 17 11:28:50 2014 @@ -72,6 +72,36 @@ } /**************************************************************************** + Emit script signal(s) for player/team learning new tech. + originating_plr is the player whose action caused this; may be NULL, and + is only used to order the emission of the signals. +****************************************************************************/ +void script_tech_learned(struct research *presearch, + struct player *originating_plr, struct advance *tech, + const char *reason) +{ + /* Emit signal for individual player whose action triggered the + * tech first */ + if (originating_plr) { + fc_assert(research_get(originating_plr) == presearch); + script_server_signal_emit("tech_researched", 3, + API_TYPE_TECH_TYPE, tech, + API_TYPE_PLAYER, originating_plr, + API_TYPE_STRING, reason); + } + + /* Emit signal to remaining research teammates, if any */ + research_players_iterate(presearch, member) { + if (member != originating_plr) { + script_server_signal_emit("tech_researched", 3, + API_TYPE_TECH_TYPE, tech, + API_TYPE_PLAYER, member, + API_TYPE_STRING, reason); + } + } research_players_iterate_end; +} + +/**************************************************************************** Players have researched a new technology. ****************************************************************************/ static void tech_researched(struct research *research) @@ -96,13 +126,7 @@ /* Do all the updates needed after finding new tech. */ found_new_tech(research, tech, TRUE, TRUE); - research_players_iterate(research, member) { - script_server_signal_emit("tech_researched", 3, - API_TYPE_TECH_TYPE, - advance_by_number(tech), - API_TYPE_PLAYER, member, - API_TYPE_STRING, "researched"); - } research_players_iterate_end; + script_tech_learned(research, NULL, advance_by_number(tech), "researched"); } /**************************************************************************** @@ -1157,17 +1181,10 @@ if (tech_transfer(pplayer, victim, stolen_tech)) { research_apply_penalty(presearch, stolen_tech, game.server.conquercost); found_new_tech(presearch, stolen_tech, FALSE, TRUE); - - research_players_iterate(presearch, member) { - script_server_signal_emit("tech_researched", 3, - API_TYPE_TECH_TYPE, - advance_by_number(stolen_tech), - API_TYPE_PLAYER, member, - API_TYPE_STRING, "stolen"); - } research_players_iterate_end; - + script_tech_learned(presearch, pplayer, advance_by_number(stolen_tech), + "stolen"); return stolen_tech; - }; + } return A_NONE; } Modified: trunk/server/techtools.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/techtools.h?rev=27058&r1=27057&r2=27058&view=diff ============================================================================== --- trunk/server/techtools.h (original) +++ trunk/server/techtools.h Mon Nov 17 11:28:50 2014 @@ -25,6 +25,9 @@ void send_research_info(const struct research *presearch, const struct conn_list *dest); +void script_tech_learned(struct research *presearch, + struct player *originating_plr, struct advance *tech, + const char *reason); void found_new_tech(struct research *presearch, Tech_type_id tech_found, bool was_discovery, bool saving_bulbs); void update_bulbs(struct player *pplayer, int bulbs, bool check_tech); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits