Author: pepeto
Date: Mon Aug 25 17:43:36 2014
New Revision: 26035
URL: http://svn.gna.org/viewcvs/freeciv?rev=26035&view=rev
Log:
Emit the "tech_researched" script signal for all players sharing the same
research.
See gna bug #22474
Modified:
branches/S2_5/server/diplhand.c
branches/S2_5/server/scripting/api_server_edit.c
branches/S2_5/server/techtools.c
Modified: branches/S2_5/server/diplhand.c
URL:
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/server/diplhand.c?rev=26035&r1=26034&r2=26035&view=diff
==============================================================================
--- branches/S2_5/server/diplhand.c (original)
+++ branches/S2_5/server/diplhand.c Mon Aug 25 17:43:36 2014
@@ -31,6 +31,7 @@
#include "map.h"
#include "packets.h"
#include "player.h"
+#include "research.h"
#include "unit.h"
/* common/scriptcore */
@@ -431,11 +432,15 @@
advance_name_for_player(pdest, pclause->value),
nation_plural_for_player(pgiver));
- script_server_signal_emit("tech_researched", 3,
- API_TYPE_TECH_TYPE,
- advance_by_number(pclause->value),
- API_TYPE_PLAYER, pdest,
- API_TYPE_STRING, "traded");
+ players_iterate(aplayer) {
+ if (player_research_get(pdest) == player_research_get(aplayer)) {
+ script_server_signal_emit("tech_researched", 3,
+ API_TYPE_TECH_TYPE,
+ advance_by_number(pclause->value),
+ API_TYPE_PLAYER, aplayer,
+ API_TYPE_STRING, "traded");
+ }
+ } players_iterate_end;
do_dipl_cost(pdest, pclause->value);
found_new_tech(pdest, pclause->value, FALSE, TRUE);
}
Modified: branches/S2_5/server/scripting/api_server_edit.c
URL:
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/server/scripting/api_server_edit.c?rev=26035&r1=26034&r2=26035&view=diff
==============================================================================
--- branches/S2_5/server/scripting/api_server_edit.c (original)
+++ branches/S2_5/server/scripting/api_server_edit.c Mon Aug 25 17:43:36 2014
@@ -254,12 +254,14 @@
Tech_Type *api_edit_give_technology(lua_State *L, Player *pplayer,
Tech_Type *ptech, const char *reason)
{
+ struct player_research *presearch;
Tech_type_id id;
Tech_Type *result;
LUASCRIPT_CHECK_STATE(L, NULL);
LUASCRIPT_CHECK_ARG_NIL(L, pplayer, 2, Player, NULL);
+ presearch = player_research_get(pplayer);
if (ptech) {
id = advance_number(ptech);
} else {
@@ -267,11 +269,11 @@
* to pass correct reason to emitted signal. */
if (game.info.free_tech_method == FTM_CHEAPEST) {
id = pick_cheapest_tech(pplayer);
- } else if (player_research_get(pplayer)->researching == A_UNSET
+ } else if (presearch->researching == A_UNSET
|| game.info.free_tech_method == FTM_RANDOM) {
id = pick_random_tech(pplayer);
} else {
- id = player_research_get(pplayer)->researching;
+ id = presearch->researching;
}
}
@@ -279,10 +281,14 @@
do_free_cost(pplayer, id);
found_new_tech(pplayer, id, FALSE, TRUE);
result = advance_by_number(id);
- script_server_signal_emit("tech_researched", 3,
- API_TYPE_TECH_TYPE, result,
- API_TYPE_PLAYER, pplayer,
- API_TYPE_STRING, reason);
+ players_iterate(aplayer) {
+ if (presearch == player_research_get(aplayer)) {
+ script_server_signal_emit("tech_researched", 3,
+ API_TYPE_TECH_TYPE, result,
+ API_TYPE_PLAYER, aplayer,
+ API_TYPE_STRING, reason);
+ }
+ } players_iterate_end;
return result;
} else {
return NULL;
Modified: branches/S2_5/server/techtools.c
URL:
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/server/techtools.c?rev=26035&r1=26034&r2=26035&view=diff
==============================================================================
--- branches/S2_5/server/techtools.c (original)
+++ branches/S2_5/server/techtools.c Mon Aug 25 17:43:36 2014
@@ -126,11 +126,15 @@
/* do all the updates needed after finding new tech */
found_new_tech(plr, research->researching, TRUE, TRUE);
- script_server_signal_emit("tech_researched", 3,
- API_TYPE_TECH_TYPE,
- advance_by_number(researched_tech),
- API_TYPE_PLAYER, plr,
- API_TYPE_STRING, "researched");
+ players_iterate(aplayer) {
+ if (research == player_research_get(aplayer)) {
+ script_server_signal_emit("tech_researched", 3,
+ API_TYPE_TECH_TYPE,
+ advance_by_number(researched_tech),
+ API_TYPE_PLAYER, aplayer,
+ API_TYPE_STRING, "researched");
+ }
+ } players_iterate_end;
}
/****************************************************************************
@@ -180,11 +184,16 @@
do_free_cost(pplayer, i);
found_new_tech(pplayer, i, FALSE, TRUE);
- script_server_signal_emit("tech_researched", 3,
- API_TYPE_TECH_TYPE,
- advance_by_number(i),
- API_TYPE_PLAYER, pplayer,
- API_TYPE_STRING, "stolen");
+ players_iterate(aplayer) {
+ if (player_research_get(pplayer)
+ == player_research_get(aplayer)) {
+ script_server_signal_emit("tech_researched", 3,
+ API_TYPE_TECH_TYPE,
+ advance_by_number(i),
+ API_TYPE_PLAYER, aplayer,
+ API_TYPE_STRING, "stolen");
+ }
+ } players_iterate_end;
break;
}
}
@@ -1111,11 +1120,15 @@
do_conquer_cost(pplayer, stolen_tech);
found_new_tech(pplayer, stolen_tech, FALSE, TRUE);
- script_server_signal_emit("tech_researched", 3,
- API_TYPE_TECH_TYPE,
- advance_by_number(stolen_tech),
- API_TYPE_PLAYER, pplayer,
- API_TYPE_STRING, "stolen");
+ players_iterate(aplayer) {
+ if (player_research_get(pplayer) == player_research_get(aplayer)) {
+ script_server_signal_emit("tech_researched", 3,
+ API_TYPE_TECH_TYPE,
+ advance_by_number(stolen_tech),
+ API_TYPE_PLAYER, aplayer,
+ API_TYPE_STRING, "stolen");
+ }
+ } players_iterate_end;
return stolen_tech;
};
_______________________________________________
Freeciv-commits mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-commits