Author: cazfi
Date: Sat Oct 17 22:48:10 2015
New Revision: 30121

URL: http://svn.gna.org/viewcvs/freeciv?rev=30121&view=rev
Log:
AI establishes trade routes with peaceful (and not only allied) players.

See patch #6418

Modified:
    trunk/ai/default/aiunit.c
    trunk/common/aicore/caravan.c
    trunk/common/aicore/caravan.h

Modified: trunk/ai/default/aiunit.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/ai/default/aiunit.c?rev=30121&r1=30120&r2=30121&view=diff
==============================================================================
--- trunk/ai/default/aiunit.c   (original)
+++ trunk/ai/default/aiunit.c   Sat Oct 17 22:48:10 2015
@@ -2233,7 +2233,16 @@
     }
 
     caravan_parameter_init_from_unit(&parameter, punit);
-    parameter.allow_foreign_trade = TRUE;
+    /* Make more trade with allies than other peaceful nations
+     * by considering only allies 50% of the time.
+     * (the other 50% allies are still considered, but so are other nations) */
+    if (fc_rand(2)) {
+      /* Be optimistic about development of relations with no-contact and
+       * cease-fire nations. */
+      parameter.allow_foreign_trade = FTL_NONWAR;
+    } else {
+      parameter.allow_foreign_trade = FTL_ALLIED;
+    }
 
     if (log_do_output_for_level(LOG_CARAVAN2)) {
       parameter.callback = caravan_optimize_callback;

Modified: trunk/common/aicore/caravan.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/aicore/caravan.c?rev=30121&r1=30120&r2=30121&view=diff
==============================================================================
--- trunk/common/aicore/caravan.c       (original)
+++ trunk/common/aicore/caravan.c       Sat Oct 17 22:48:10 2015
@@ -41,7 +41,7 @@
   parameter->consider_trade = TRUE;
   parameter->consider_wonders = TRUE; /* see also init_from_unit */
   parameter->account_for_broken_routes = TRUE;
-  parameter->allow_foreign_trade = FALSE;
+  parameter->allow_foreign_trade = FTL_NATIONAL_ONLY;
   parameter->ignore_transit_time = FALSE;
   parameter->convert_trade = FALSE;
   parameter->callback = NULL;
@@ -111,7 +111,7 @@
          parameter->consider_trade ? "trade" : "-",
          parameter->consider_wonders ? "wonders" : "-",
          parameter->account_for_broken_routes ? "yes" : "no",
-         parameter->allow_foreign_trade ? "yes" : "no",
+         parameter->allow_foreign_trade != FTL_NATIONAL_ONLY ? "yes" : "no",
          parameter->ignore_transit_time ? "yes" : "no",
          parameter->convert_trade ? "yes" : "no");
 }
@@ -430,12 +430,17 @@
   struct player *pplayer_dest = city_owner(dest);
   
   /* if no foreign trade is allowed, just quit. */
-  if (!parameter->allow_foreign_trade && pplayer_src != pplayer_dest) {
+  if (parameter->allow_foreign_trade == FTL_NATIONAL_ONLY
+      && pplayer_src != pplayer_dest) {
     caravan_result_init_zero(result);
     return;
   } else {
     /* foreign trade allowed, we only do business with allies */
-    if (pplayers_allied(pplayer_src, pplayer_dest)) {
+    if (pplayers_allied(pplayer_src, pplayer_dest)
+        || (parameter->allow_foreign_trade == FTL_PEACEFUL
+            && pplayers_in_peace(pplayer_src, pplayer_dest))
+        || (parameter->allow_foreign_trade == FTL_NONWAR
+            && !pplayers_at_war(pplayer_src, pplayer_dest))) {
       /* do some business */
     } else {
       caravan_result_init_zero(result);

Modified: trunk/common/aicore/caravan.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/aicore/caravan.h?rev=30121&r1=30120&r2=30121&view=diff
==============================================================================
--- trunk/common/aicore/caravan.h       (original)
+++ trunk/common/aicore/caravan.h       Sat Oct 17 22:48:10 2015
@@ -19,6 +19,14 @@
 
 /* common */
 #include "fc_types.h"
+
+enum foreign_trade_limit
+{
+  FTL_NATIONAL_ONLY,
+  FTL_ALLIED,
+  FTL_PEACEFUL,
+  FTL_NONWAR
+};
 
 
 /**
@@ -83,7 +91,7 @@
      * Allow trading with allies and peaceful neighbours.
      * BUG: currently we only consider allies.
      */
-    bool allow_foreign_trade;
+    enum foreign_trade_limit allow_foreign_trade;
 
     /*
      * Normally, we'd want to compute the time it takes to establish the


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to