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

Reply via email to