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

On 1/28/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote:
> AI accepts slightly
> negative balance if it has gold reserves for that. More precisely:
> negative balance is acceptable if AI could with its current gold
> reserves live up to 50 turns with such a balance.

 - This version does not accept negative balance if there is need to
refill coffers.


 - ML

diff -Nurd -X.diff_ignore freeciv/ai/aihand.c freeciv/ai/aihand.c
--- freeciv/ai/aihand.c	2006-07-17 23:56:47.000000000 +0300
+++ freeciv/ai/aihand.c	2007-02-01 21:30:09.000000000 +0200
@@ -66,6 +66,10 @@
 
 #define LOGLEVEL_TAX LOG_DEBUG
 
+/* When setting rates, we accept negative balance if we have a lot of
+ * gold reserves. This is how long time gold reserves should last */
+#define AI_GOLD_RESERVE_MIN_TURNS 50
+
 /**************************************************************************
  handle spaceship related stuff
 **************************************************************************/
@@ -102,6 +106,7 @@
   int can_celebrate = 0, total_cities = 0;
   int trade = 0; /* total amount of trade generated */
   int expenses = 0; /* total amount of gold upkeep */
+  bool refill_coffers = pplayer->economic.gold < ai_gold_reserve(pplayer);
 
   if (!game.info.changable_tax) {
     return; /* This ruleset does not support changing tax rates. */
@@ -127,7 +132,8 @@
   pplayer->economic.luxury = (100 - pplayer->economic.science
                              - pplayer->economic.tax); /* Spillover */
 
-  /* Now find the minimum tax with positive balance */
+  /* Now find the minimum tax with positive balance
+   * Negative balance is acceptable if we have a lot of gold. */
   while(pplayer->economic.tax < maxrate
         && (pplayer->economic.science > 0
             || pplayer->economic.luxury > 0)) {
@@ -142,7 +148,11 @@
     rates[TAX] = 100 - rates[SCIENCE] - rates[LUXURY];
     distribute(trade, 3, rates, result);
 
-    if (expenses - result[TAX] > 0) {
+    if (expenses - result[TAX] > 0
+        || (!refill_coffers
+            && expenses - result[TAX] >
+               pplayer->economic.gold / AI_GOLD_RESERVE_MIN_TURNS)) {
+      /* Clearly negative balance. Unacceptable */
       pplayer->economic.tax += 10;
       if (pplayer->economic.luxury > 0) {
         pplayer->economic.luxury -= 10;
@@ -150,8 +160,9 @@
         pplayer->economic.science -= 10;
       }
     } else {
-      /* Ok, got positive balance */
-      if (pplayer->economic.gold < ai_gold_reserve(pplayer)) {
+      /* Ok, got positive balance
+       * Or just slightly negative, if we can afford that for a while */
+      if (refill_coffers) {
         /* Need to refill coffers, increase tax a bit */
         pplayer->economic.tax += 10;
         if (pplayer->economic.luxury > 0) {
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to