Complete.Org: Mailing Lists: Archives: freeciv-dev: June 2005:
[Freeciv-Dev] (PR#13362) Better city gold worth calculation
Home

[Freeciv-Dev] (PR#13362) Better city gold worth calculation

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
Subject: [Freeciv-Dev] (PR#13362) Better city gold worth calculation
From: "Per I. Mathisen" <per@xxxxxxxxxxx>
Date: Tue, 28 Jun 2005 03:57:46 -0700
Reply-to: bugs@xxxxxxxxxxx

<URL: http://bugs.freeciv.org/Ticket/Display.html?id=13362 >

This patch makes the AI's calculation of the gold worth of cities more
realistic, adding more variables to the equation and removing a silly
constant. Prices go up by more than 100% in most cases, which should help
against the complaints that the AI sells its cities cheap.

  - Per

Index: common/aicore/aisupport.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/common/aicore/aisupport.c,v
retrieving revision 1.10
diff -u -r1.10 aisupport.c
--- common/aicore/aisupport.c   5 May 2005 18:32:52 -0000       1.10
+++ common/aicore/aisupport.c   28 Jun 2005 10:54:46 -0000
@@ -104,9 +108,18 @@
 int city_gold_worth(struct city *pcity)
 {
   struct player *pplayer = city_owner(pcity);
-  int worth;
+  int worth = 0, i;
+  Unit_type_id u = best_role_unit_for_player(city_owner(pcity), F_CITIES);
 
-  worth = pcity->size * 150; /* reasonable base cost */
+  if (u != U_LAST) {
+    worth += unit_buy_gold_cost(u, 0); /* cost of settler */
+  }
+  for (i = 1; i < pcity->size; i++) {
+    worth += city_granary_size(i); /* cost of growing city */
+  }
+  output_type_iterate(o) {
+    worth += pcity->prod[o] * 10;
+  } output_type_iterate_end;
   unit_list_iterate(pcity->units_supported, punit) {
     if (same_pos(punit->tile, pcity->tile)) {
       Unit_type_id id = unit_type(punit)->obsoleted_by;
@@ -119,10 +132,10 @@
     }
   } unit_list_iterate_end;
   built_impr_iterate(pcity, impr) {
-    if (is_wonder(impr) && !improvement_obsolete(pplayer, impr)) {
-      worth += impr_sell_gold(impr);
-   } else {
+    if (improvement_obsolete(pplayer, impr)) {
       worth += impr_sell_gold(impr) / 4;
+   } else {
+      worth += impr_sell_gold(impr);
     }
   } built_impr_iterate_end;
   if (city_unhappy(pcity)) {

[Prev in Thread] Current Thread [Next in Thread]
  • [Freeciv-Dev] (PR#13362) Better city gold worth calculation, Per I. Mathisen <=