DELTA 17671 8486 7208
SVN  �×%�ÙrW‡ ‡ ˆ ƒ;‡€A ³aŠs“ •¾g€‚ ŠRÕˆ ª4ßy„ ˜G�Š3€‚c }�¥`“ Œ�¦p° ƒB�³ £ –,�¶@ˆ ‚>�Ì[¹ ˆ�Ïresearchplayer.h"
#include "aitools.h"
#include "aiunit.h"

#include "advplayer_research_get;
  bool danger_of_nukes;

  fc_assert_ret(ai != NULL);

  if (ai->phase_is_initialized) {
    return;
  }
  ai->phase_is_initialized = TRUE;

  TIMING_LOG(AIT_AIDATA, TIMER_START);

  nuke_units = num_role_units(F_NUCLEAR);
  danger_of_nukes = FALSE;

  /*** Threats ***/UMT_LANDdv->struct unit_ai *unit_data = def_ai_unit_data(punit);

      if (!unit_data->cur_pos) {
        /* Start tracking */
        unit_data->cur_pos = &unit_data->cur_struct;
        unit_data->prev_pos = NULL;
      } else {
        unit_data->prev_struct = unit_data->cur_struct;
        unit_data->prev_pos = &unit_data->prev_struct;
      }
      *unit_dataplayer_research_getif (!ai->phase_is_initialized) {
    return;
  }
  ai->phase_is_initialized = FALSEcelebratfc_assert_ret(NULL != ai);

  ai_data_phase_done(pplayer)ENDREP
DELTA 18850 144 1619
SVN  ³E³t
1 ® ± ….®
  /* If the AI celebrates. */
  bool celebrate;
ENDREP
DELTA 18938 249 705
SVN  �“!�ü���| ‡k ˆ ˆT‡]€‚| G  Ž2‘\¹ K’ €ƒo G  ƒ €†O K’  �2£V€†3 ‚§!€› E·@€�? ‚cº€‡= ƒÁ ˆ �gÄ€°< LÇ ´ gÀ~€‚X UË/€‚? IÎ8€ƒB G  ¸IØ ‚;��fresearch/bulb reserves. This is how long time gold/bulb reserves should last.
 * For city grow due to rapture turns_for_rapture is added. */
#define AI_GOLD_RESERVE_MIN_TURNS 10
#define AI_BULBS_RESERVE_MIN_TURNS 10

/* This factor is used for the delta between the estimated and real income to
 * get 'real' rates for the AI player. */
#define PCT_DELTA_TAX 50
#define PCT_DELTA_SCI 10

***
  Additional data needed for the AI rates calculation***/
enum {
  AI_RATE_SCI = 0,
  AI_RATE_TAX,
  AI_RATE_LUX,
  AI_RATE_COUNT
};

enum celebration {
  AI_CELEBRATION_UNCHECKED,
  AI_CELEBRATION_NO,
  AI_CELEBRATION_YES,
};

#define RATE_NOT_SET -1
#define RATE_VALID(_rate)                                                    \
  (_rate != RATE_NOT_SET)
#define RATE_REMAINS(_rates)                                                 \
  MAX(0, 100 - _rates[AI_RATE_SCI] - _rates[AI_RATE_TAX]                     \
         - _rates[AI_RATE_LUX])


  This function first determins the minimum tax rate (rate_tax_min) and a tax
  rate for a balanced treasury (rate_tax_balance). Similarily, the science
  rates are determiend (rate_sci_min and rate_sci_balance). Considering the
  minimum rates for tax and science the chance for celebrations is checked. If
  celebration is possible for more than half of the cities, the needed luxury
  rate is saved as rate_lux_min_celebrate. For celebration some reserves are
  defined (see turns_for_rapture).

  At the end the results are compared and the rates are selected as:

  1. Go for celebration.
  2. Use a balanced science and treasury.
  3. go for a balaned treasury / science.
  4. Try to select the best (risk of tech loss or have to sell something).

  At the end the remaining is divided on science/gold/luxury depending on the
  AI settings.struct player_research *research = player_research_get(pplayer);
  enum celebration celebrate = AI_CELEBRATION_UNCHECKED;
  struct ai_data *ai = ai_data_get(pplayer);
  int can_celebrate = 0, total_cities = 0;
  int trade = 0;         /* total amount of trade generated */
  int expenses = 0;      /* total amount of gold upkeep */
  int income = 0;        /* total amount of gold income */
  int turns_for_rapture; /* additional reserve needed for rapture */
  int rates_save[AI_RATE_COUNT], rates[AI_RATE_COUNT], result[AI_RATE_COUNT];
  int rate_tax_min = RATE_NOT_SET;
  int rate_tax_balance = RATE_NOT_SET;
  int rate_sci_min = RATE_NOT_SET;
  int rate_sci_balance = RATE_NOT_SET;
  int rate_lux_min_celebrate = maxrate;
  int delta_tax = 0, delta_sci = 0;
  struct timer *taxtimer= NULL;
  struct cm_parameter cmp#ifdef DEBUG
  taxtimer= new_timer_start(TIMER_CPU, TIMER_DEBUG);
#endif

  /* City parameters needed for celebrations. */
  cm_init_parameter(&cmp);
  cmp.require_happy = TRUE;    /* note this one */
  cmp.allow_disorder = FALSE;
  cmp.allow_specialists = TRUE;
  cmp.factor[O_FOOD] = 20;
  cmp.minimal_surplus[O_GOLD] = -FC_INFINITY;

  /* Define reserve (gold/bulbs) needed for rapture (celebration). */
  turns_for_rapture = ai->celebrate ? 0 : (game.info.rapturedelay + 1) * 3;

  log_base(LOGLEVEL_TAX, "%s [max] rate=%d", player_name(pplayer), maxrate);

  /* Save AI rates. */
  rates_save[AI_RATE_SCI] = pplayer->economic.science;
  rates_save[AI_RATE_TAX] = pplayer->economic.tax;
  rates_save[AI_RATE_LUX] = pplayer->economic.luxury;

  log_base(LOGLEVEL_TAX, "%s [old] (Sci/Lux/Tax)=%d/%d/%d",
           player_name(pplayer), rates_save[AI_RATE_SCI],
           rates_save[AI_RATE_LUX], rates_save[AI_RATE_TAX]);

  /* Get some data for the AI player. */
  ai_calc_data(pplayer, &trade, &expenses, &income);

  /* Get the estimates for tax with the current rates. */
  distribute(trade, AI_RATE_COUNT, rates_save, result);

  /* The delta between the estimate and the real value. */
  delta_tax = (result[AI_RATE_TAX] - expenses) - income;

  log_base(LOGLEVEL_TAX, "%s [tax] estimated=%d real=%d (delta=%d)",
           player_name(pplayer), result[AI_RATE_TAX] - expenses, income,
           delta_tax);

  /* Find minimum tax rate which gives us a positive balance for gold and
   * science. We assume that we want science most and luxuries least here,
   * and reverse or modify this assumption later.
   * Furthermore, We assume our entire civilization is one big city, and
   * distribute total income accordingly. This is a simplification that speeds
   * up the code significantly. */

  /* === Gold === */

  /* First set tax (gold) to the minimal available number */
  rates[AI_RATE_SCI] = maxrate; /* Assume we want science here */
  rates[AI_RATE_TAX] = MAX(0, 100 - maxrate * 2); /* If maxrate < 50% */
  rates[AI_RATE_LUX] = (100 - rates[AI_RATE_SCI] - rates[AI_RATE_TAX]);

  /* Now find the minimum tax with positive gold balance
   * Negative balance is acceptable if we have a lot of gold. */

  log_base(LOGLEVEL_TAX, "%s [tax] trade=%d gold=%d expenses=%d",
           player_name(pplayer), trade, pplayer->economic.gold, expenses);

  while(rates[AI_RATE_TAX] <= maxrate
        && rates[AI_RATE_SCI] >= 0
        && rates[AI_RATE_LUX] >= 0) {
    bool refill_coffers = pplayer->economic.gold < ai_gold_reserve(pplayer);
    int balance_tax, balance_tax_min;

    distribute(trade, AI_RATE_COUNT, rates, result);

    /* Consider the delta between the result and the real value from the
     * last turn to get better estimates. */
    balance_tax = (result[AI_RATE_TAX] - expenses)
                  - delta_tax * PCT_DELTA_TAX / 100;
    balance_tax_min = -(pplayer->economic.gold
                        / (AI_GOLD_RESERVE_MIN_TURNS + turns_for_rapture));

    log_base(LOGLEVEL_TAX, "%s [tax] Tax=%d income=%d",
             player_name(pplayer), rates[AI_RATE_TAX], balance_tax);

    if (!RATE_VALID(rate_tax_min) && balance_tax > balance_tax_min) {
      /* Just slightly negative; we can afford that for a while */
      rate_tax_min = rates[AI_RATE_TAX];
    }

    if (expenses == 0 || balance_tax > 0) {
      /* Ok, got no expenses or positive balance */
      if (refill_coffers && rates[AI_RATE_TAX] < maxraterates[AI_RATE_TAX] += 10;
        if (rates[AI_RATE_LUX] > 0) {
          rates[AI_RATE_LUX] -= 10;
        } else {
          rates[AI_RATE_SCI] -= 10;
        }

        log_base(LOGLEVEL_TAX, "%s [tax] Tax=%d to refill coffers",
                 player_name(pplayer), rates[AI_RATE_TAX]);
      }

      /* This is the minimum rate for a balanced treasury (gold). */
      rate_tax_balance = rates[AI_RATE_TAX];

      /* Done! Break the while loop */
      break;
    }

    /* Negative balance. Unacceptable - increase tax. */
    rates[AI_RATE_TAX] += 10;
    if (rates[AI_RATE_LUX] > 0) {
      rates[AI_RATE_LUX] -= 10;
    } else {
      rates[AI_RATE_SCI] -= 10;
    }
  }

  /* If no minimum value was found for the tax use the maximum tax rate. */
  rate_tax_min = RATE_VALID(rate_tax_min) ? rate_tax_min : maxrate;

  log_base(LOGLEVEL_TAX, "%s [tax] min=%d balanced=%d", player_name(pplayer),
           rate_tax_min, rate_tax_balance);

  /* === Science === */

  if (game.info.tech_upkeep_style == 1) {
    /* Tech upkeep activated. */
    int tech_upkeep = research->tech_upkeep;
    int bulbs_researched = research->bulbs_researched;

    /* The delta between the estimate and the real value. */
    delta_sci = (result[AI_RATE_SCI] - research->tech_upkeep)
                - pplayer->bulbs_last_turn;
    log_base(LOGLEVEL_TAX, "%s [sci] estimated=%d real=%d (delta=%d)",
             player_name(pplayer),
             result[AI_RATE_SCI] - research->tech_upkeep,
             pplayer->bulbs_last_turn, delta_sci);

    log_base(LOGLEVEL_TAX, "%s [sci] trade=%d bulbs=%d upkeep=%d",
             player_name(pplayer), trade, research->bulbs_researched,
             tech_upkeep);

    rates[AI_RATE_TAX] = maxrate; /* Assume we want gold here */
    rates[AI_RATE_SCI] = MAX(0, 100 - maxrate * 2);
    rates[AI_RATE_LUX] = (100 - rates[AI_RATE_SCI] - rates[AI_RATE_TAX]);

    /* Now find the minimum science tax with positive bulbs balance
     * Negative balance is acceptable if we have a lots of bulbs. */
    while(rates[AI_RATE_SCI] <= maxrate
          && rates[AI_RATE_TAX] >= 0
          && rates[AI_RATE_LUX] >= 0) {
      int balance_sci, balance_sci_min;

      distribute(trade, AI_RATE_COUNT, rates, result);

      /* Consider the delta between the result and the real value from the
       * last turn. */
      balance_sci = (result[AI_RATE_SCI] - tech_upkeep)
                    - delta_sci * PCT_DELTA_SCI / 100;
      balance_sci_min = -(bulbs_researched
                          / (AI_BULBS_RESERVE_MIN_TURNS + turns_for_rapture));
      log_base(LOGLEVEL_TAX, "%s [sci] Sci=%d research=%d",
               player_name(pplayer), rates[AI_RATE_SCI], balance_sci);

      if (!RATE_VALID(rate_sci_min) && balance_sci > balance_sci_min) {
        /* Just slightly negative, if we can afford that for a while */
        rate_sci_min = rates[AI_RATE_SCI];
      }

      if (tech_upkeep == 0 || balance_sci > 0) {
        /* Ok, got no expenses or positive balance */
        rate_sci_balance = rates[AI_RATE_SCI];

        /* Done! Break the while loop */
        break;
      }

      /* Negative balance. Unacceptable - increase science.*/
      rates[AI_RATE_SCI] += 10;
      if (rates[AI_RATE_LUX] > 0) {
        rates[AI_RATE_LUX] -= 10;
      } else {
        rates[AI_RATE_TAX] -= 10;
      }
    }

    /* If no minimum value was found for the science use the maximum science
     * rate. */
    rate_sci_min = RATE_VALID(rate_sci_min) ? rate_sci_min : maxrate;

    log_base(LOGLEVEL_TAX, "%s [sci] min=%d balanced=%d",
             player_name(pplayer), rate_sci_min, rate_sci_balance);
  } else {
    /* No tech upkeep - minimum science value is 0. */
    rate_sci_min = 0;
  }

  /* === Luxury === */

  /* Should (and can)
      && 100 > rate_tax_min + rate_sci_min) {
    celebrate = AI_CELEBRATION_NO;

    /* Set the minimum tax for a positive science and gold balance and use the
     * remaining trade goods for luxuries (max. luxuries). */
    rates[AI_RATE_SCI] = rate_sci_min;
    rates[AI_RATE_TAX] = rate_tax_min;
    rates[AI_RATE_LUX] = 0;

    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));

    /* Temporary set the new rates. */
    pplayer->economic.luxury = rates[AI_RATE_LUX];
    pplayer->economic.tax = rates[AI_RATE_TAX];
    pplayer->economic.science = rates[AI_RATE_SCI];

    /* Check if we celebrate - the city state must be restored at the end! */        
    /* If more than half our cities can celebrate, go for it! */
    if (can_celebrate * 2 > total_cities) {
      celebrate = AI_CELEBRATION_YES;
      rate_lux_min_celebrate = pplayer->economic.luxury;
      log_base(LOGLEVEL_TAX, "%s [lux] celebration possible (Sci/Lux/Tax)>="
                             "%d/%d/%d (%d of %d cities)",
               player_name(pplayer), rate_sci_min, rate_lux_min_celebrate,
               rate_tax_min, can_celebrate, total_cities);
    } else {
      log_base(LOGLEVEL_TAX, "%s [lux] no celebration: only %d of %d cities",
               player_name(pplayer), can_celebrate, total_cities);
    }
  }

  if (celebrate != AI_CELEBRATION_YES) {
    /* TODO: Calculate a minimum luxury tax rate.
     *       Add general luxury code here. */
  }

  /* === Set the rates. === */

  /* Reset rates values. */
  rates[AI_RATE_SCI] = 0;
  rates[AI_RATE_TAX] = 0;
  rates[AI_RATE_LUX] = 0;

  /* Now decide that to do ... */
  if (celebrate == AI_CELEBRATION_YES
      && rate_tax_min + rate_sci_min + rate_lux_min_celebrate <= 100) {
    /* Celebration! */
    rates[AI_RATE_SCI] = rate_sci_min;
    rates[AI_RATE_TAX] = rate_tax_min;
    rates[AI_RATE_LUX] = rate_lux_min_celebrate;

    log_base(LOGLEVEL_TAX, "%s [res] celebration! (Sci/Lux/Tax)>=%d/%d/%d",
             player_name(pplayer), rates[AI_RATE_SCI], rates[AI_RATE_LUX],
             rates[AI_RATE_TAX]);
  } else {
    /* No celebration */
    celebrate = (celebrate == AI_CELEBRATION_YES) ? AI_CELEBRATION_NO
                                                  : celebrate;

    if (RATE_VALID(rate_tax_balance)) {
      if (RATE_VALID(rate_sci_balance)) {
        if (100 >= rate_tax_balance + rate_sci_balance) {
          /* A balanced treasury and research. */
          rates[AI_RATE_SCI] = rate_sci_balance;
          rates[AI_RATE_TAX] = rate_tax_balance;

          log_base(LOGLEVEL_TAX, "%s [res] balanced! (Sci/Lux/Tax)>=%d/%d/%d",
                   player_name(pplayer), rates[AI_RATE_SCI],
                   rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
        } else {
          /* Try to keep all tech and get as much gold as possible. */
          rates[AI_RATE_SCI] = rate_sci_balance;
          rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

          log_base(LOGLEVEL_TAX, "%s [res] balanced sci! tax? "
                                 "(Sci/Lux/Tax)>=%d/%d/%d",
                   player_name(pplayer), rates[AI_RATE_SCI],
                   rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
        }
      } else {
        /* A balanced tax and as much science as possible. */
        rates[AI_RATE_TAX] = rate_tax_balance;
        rates[AI_RATE_SCI] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] balanced tax! sci? "
                               "(Sci/Lux/Tax)>=%d/%d/%d",
                 player_name(pplayer), rates[AI_RATE_SCI],
                 rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
      }
    } else if (RATE_VALID(rate_sci_balance)) {
      /* Try to keep all techs and get as much gold as possible. */
      rates[AI_RATE_SCI] = rate_sci_balance;
      rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

      log_base(LOGLEVEL_TAX, "%s [res] balanced sci! tax? "
                             "(Sci/Lux/Tax)>=%d/%d/%d",
               player_name(pplayer), rates[AI_RATE_SCI],
               rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
    } else {
      /* We need more trade to get a positive gold and science balance. */
      if (ai_wants_no_science(pplayer) || ai_on_war_footing(pplayer)) {
        /* Go for gold (improvements and units) and risk the loss of a
         * tech. */
        rates[AI_RATE_TAX] = maxrate;
        rates[AI_RATE_SCI] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] risk of tech loss! (Sci/Lux/Tax)>="
                               "%d/%d/%d", player_name(pplayer),
                 rates[AI_RATE_SCI], rates[AI_RATE_LUX],
                 rates[AI_RATE_TAX]);
      } else {
        /* Go for science and risk the loss of improvements or units. */
        rates[AI_RATE_SCI] = MAX(maxrate, rate_sci_min);
        rates[AI_RATE_TAX] = MIN(maxrate, RATE_REMAINS(rates));

        log_base(LOGLEVEL_TAX, "%s [res] risk of empty treasury! "
                               "(Sci/Lux/Tax)>=%d/%d/%d",
                 player_name(pplayer), rates[AI_RATE_SCI],
                 rates[AI_RATE_LUX], rates[AI_RATE_TAX]);
      };
    }
  }

  /* Put the remaining to tax or science. */
  if (ai_wants_no_science(pplayer) || ai_on_war_footing(pplayer)) {
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));
  } else {
    rates[AI_RATE_SCI] = MIN(maxrate, rates[AI_RATE_SCI]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_TAX] = MIN(maxrate, rates[AI_RATE_TAX]
                                      + RATE_REMAINS(rates));
    rates[AI_RATE_LUX] = MIN(maxrate, rates[AI_RATE_LUX]
                                      + RATE_REMAINS(rates));
  }

  /* Check and set the calculated rates. */
  fc_assert_ret(0 <= rates[AI_RATE_SCI] && rates[AI_RATE_SCI] <= maxrate);
  fc_assert_ret(0 <= rates[AI_RATE_TAX] && rates[AI_RATE_TAX] <= maxrate);
  fc_assert_ret(0 <= rates[AI_RATE_LUX] && rates[AI_RATE_LUX] <= maxrate);
  fc_assert_ret(rates[AI_RATE_SCI] + rates[AI_RATE_TAX] + rates[AI_RATE_LUX]
                == 100);

  log_base(LOGLEVEL_TAX, "%s [new] (Sci/Lux/Tax)=%d/%d/%d",
           player_name(pplayer), rates[AI_RATE_SCI], rates[AI_RATE_LUX],
           rates[AI_RATE_TAX]);

  pplayer->economic.science = rates[AI_RATE_SCI];
  pplayer->economic.tax = rates[AI_RATE_TAX];
  pplayer->economic.luxury = rates[AI_RATE_LUX];

  /* === Cleanup === */

  /* Cancel all celebrations from the last turn. */
  ai->celebrate = FALSE;

  /* Now do celebrate or reset the city states if needed. */
  if (celebrate == AI_CELEBRATION_YES) {

    /* We do celebrate! */
    ai->celebrate = TRUE
      if (def_ai_city_data(pcity)->celebrate == TRUE) {
        log_base(LOGLEVEL_TAX, "setting %s to celebrate", city_name(pcity));
        cm_query_result(pcity, &cmp, cmr);
        if (cmr->found_a_valid) {
          apply_cmresult_to_city(pcity, cmr);
          city_refresh_from_main_map(pcity, NULL);
          if (!city_happy(pcity)) {
}
        } else {
          CITY_LOG(LOG_ERROR, pcity, "has NO valid state!");
        }
      }
      cm_result_destroy(cmr);
    } city_list_iterate_end;
  } else if (celebrate == AI_CELEBRATION_NO) {
    city_list_iterate(pplayer->cities, pcity) {
      /* KLUDGE: Must refresh to restore the original values which
* were changed. */
      city_refresh_from_main_map(pcity, NULL);
    } city_list_iterate_end;
  }

  send_player_info_c(pplayer, pplayer->connections);

#ifdef DEBUG
  stop_timer(taxtimer);
  log_error("Tax calculation for %s (player %d) in %.3f seconds.",
            player_name(pplayer), player_index(pplayer),
            read_timer_seconds(taxtimer));
  free_timer(taxtimer);
#endif
}
#undef RATE_NOT_SET
#undef RATE_VALID
#undef RATE_REMAINS

ENDREP
id: 15o.5eq.r18939/19470
type: file
pred: 15o.5eq.r18872/66470
count: 120
text: 18939 0 999 27890 86a763d18faec563b80e99d301581736
props: 11074 729 111 0 995497afc7013c9f20b8d3ebef449f37
cpath: /trunk/server/advisors/advdata.c
copyroot: 17700 /trunk/server/advisors/advdata.c

id: 15p.5er.r18939/19747
type: file
pred: 15p.5er.r18850/5054
count: 49
text: 18939 1028 70 6644 d95c6dae2683816bd3b4269ac685eaae
props: 11074 1074 111 0 85fb436b243ad384649068d2f55bfd08
cpath: /trunk/server/advisors/advdata.h
copyroot: 17700 /trunk/server/advisors/advdata.h

PLAIN
K 11
Makefile.am
V 25
file 4n3.5ck.r18136/21469
K 13
advbuilding.c
V 25
file 50r.5ck.r18872/66751
K 13
advbuilding.h
V 25
file 50s.5ck.r18136/21838
K 9
advdata.c
V 25
file 15o.5eq.r18939/19470
K 9
advdata.h
V 25
file 15p.5er.r18939/19747
K 9
advgoto.c
V 26
file 4p5.5ck.r18308/132106
K 9
advgoto.h
V 25
file 4p6.5ck.r17677/20336
K 10
advtools.c
V 24
file 4of.5ck.r17647/8273
K 10
advtools.h
V 24
file 4og.5ck.r17647/7632
K 14
autoexplorer.c
V 25
file 2lj.5eo.r18383/99692
K 14
autoexplorer.h
V 24
file 2lk.5ep.r17685/7079
K 14
autosettlers.c
V 24
file 7s.5ei.r18872/66181
K 14
autosettlers.h
V 23
file 7t.5ej.r17819/4685
K 12
infracache.c
V 23
file 4pw.5ck.r18851/739
K 12
infracache.h
V 25
file 4px.5ck.r18496/12382
END
ENDREP
id: 4n2.5ck.r18939/20758
type: dir
pred: 4n2.5ck.r18872/67685
count: 32
text: 18939 20024 721 721 7400b990421f18bb0ae352a45f711a34
props: 17871 2121 53 0 a527b216afb99426b763a1e313c531be
cpath: /trunk/server/advisors
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 5q.5ck.r18919/1289
K 8
advisors
V 24
dir 4n2.5ck.r18939/20758
K 9
aiiface.c
V 23
file 4gm.5ck.r18921/516
K 9
aiiface.h
V 25
file 4gn.5ck.r18899/20936
K 6
auth.c
V 25
file 39c.5ck.r18473/12225
K 6
auth.h
V 23
file 39d.0.r13513/10535
K 11
barbarian.c
V 23
file lw.5ck.r18843/7802
K 11
barbarian.h
V 24
file lx.5ck.r18054/18407
K 10
cityhand.c
V 23
file 10.5ck.r18581/9188
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 22
file 4g.5ck.r18823/450
K 11
citytools.h
V 24
file 4h.5ck.r18270/28958
K 10
cityturn.c
V 23
file 4i.5ck.r18928/6302
K 10
cityturn.h
V 24
file 4j.5ck.r18660/18227
K 11
civserver.c
V 24
file 4k.5ck.r18899/20261
K 11
civserver.h
V 21
file 4l.0.r2805/33121
K 10
commands.c
V 24
file 2ly.5ck.r18920/5205
K 10
commands.h
V 25
file 2lz.5ck.r18553/26361
K 13
connecthand.c
V 24
file 2dw.5ck.r18843/7555
K 13
connecthand.h
V 25
file 2dx.5ck.r18054/16767
K 9
console.c
V 23
file dd.5ck.r18091/5268
K 9
console.h
V 24
file de.5ck.r18054/16526
K 10
diplhand.c
V 21
file 4m.5ck.r18847/47
K 10
diplhand.h
V 21
file 4n.0.r13421/6826
K 11
diplomats.c
V 21
file vz.5ck.r18848/53
K 11
diplomats.h
V 24
file w0.5ck.r18384/65844
K 10
edithand.c
V 24
file 3bk.5ck.r18843/8236
K 10
edithand.h
V 26
file 4ez.5ck.r18452/115476
K 10
gamehand.c
V 24
file 4o.5ck.r18854/28291
K 10
gamehand.h
V 24
file 4p.5ck.r15698/24111
K 9
generator
V 23
dir 2me.5ck.r18574/1856
K 11
ggzserver.c
V 25
file 39a.5ck.r18471/14634
K 11
ggzserver.h
V 25
file 39b.5bk.r15001/48999
K 10
handchat.c
V 25
file 4q.5ck.r18362/122188
K 10
handchat.h
V 24
file dj.5ck.r18270/28229
K 9
maphand.c
V 23
file 13.5ck.r18876/1722
K 9
maphand.h
V 23
file 14.5ck.r18740/8378
K 6
meta.c
V 24
file 4s.5ck.r18604/17366
K 6
meta.h
V 24
file 4t.5ck.r18054/19078
K 8
notify.c
V 23
file 4i2.5ck.r18493/146
K 8
notify.h
V 24
file 4i3.5ck.r18282/3660
K 9
plrhand.c
V 23
file 4u.5ck.r18843/9151
K 9
plrhand.h
V 23
file 4v.5ck.r18843/9390
K 8
report.c
V 25
file vi.5ck.r18308/133485
K 8
report.h
V 24
file vj.5ck.r18270/29203
K 9
ruleset.c
V 24
file 8w.5ck.r18926/12299
K 9
ruleset.h
V 22
file 8x.5ck.r17946/997
K 13
sanitycheck.c
V 23
file wi.5ck.r18740/9112
K 13
sanitycheck.h
V 23
file wj.5ck.r18740/9358
K 10
savegame.c
V 24
file vl.5ck.r18902/26534
K 10
savegame.h
V 24
file vm.5ck.r17289/22938
K 11
savegame2.c
V 22
file 4m0.5ck.r18853/78
K 11
savegame2.h
V 25
file 4m1.5ck.r18078/67503
K 7
score.c
V 26
file 2eg.5ck.r18308/128519
K 7
score.h
V 24
file 2eh.5ck.r17332/6378
K 9
scripting
V 24
dir 31x.5ck.r18926/12055
K 8
sernet.c
V 24
file 15.5ck.r18604/17609
K 8
sernet.h
V 24
file 4y.5ck.r18473/12711
K 10
settings.c
V 25
file 2m0.5ck.r18902/26284
K 10
settings.h
V 24
file 2m1.5ck.r18294/3094
K 11
spacerace.c
V 25
file 9a.5ck.r18362/123929
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 9
srv_log.c
V 25
file 15t.5el.r18872/67926
K 9
srv_log.h
V 25
file 15u.5em.r17928/40497
K 10
srv_main.c
V 24
file vg.5ck.r18902/26038
K 10
srv_main.h
V 24
file vh.5ck.r18279/84001
K 11
stdinhand.c
V 23
file 4z.5ck.r18920/7066
K 11
stdinhand.h
V 23
file 50.5ck.r18920/7312
K 11
techtools.c
V 24
file 33n.5ck.r18804/3065
K 11
techtools.h
V 24
file 33o.5ck.r18665/2277
K 10
unithand.c
V 23
file 18.5ck.r18581/9432
K 10
unithand.h
V 24
file 19.5ck.r18578/17031
K 11
unittools.c
V 24
file 1a.5ck.r18802/16945
K 11
unittools.h
V 24
file 1b.5ck.r18384/66086
K 8
voting.c
V 26
file 4ex.5ck.r18308/137159
K 8
voting.h
V 25
file 4ey.5ck.r18054/19315
END
ENDREP
id: z.5ck.r18939/24442
type: dir
pred: z.5ck.r18928/9991
count: 4375
text: 18939 20999 3430 3430 a9b95413b5da5eb65d68b00803e5b95c
props: 17175 659 139 0 d1c9699dde7f9d81e54426750008041d
cpath: /trunk/server
copyroot: 15280 /trunk

id: 22.5ck.r18939/24673
type: file
pred: 22.5ck.r18938/1561
count: 157
text: 18939 1126 18317 32264 c51febf00b3332ea7a9ec5e182704ea1
props: 10865 30805 112 0 8869376353a720fe76c0d512d1b8c326
cpath: /trunk/ai/aihand.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 23
file 5d.5ck.r18919/6092
K 14
advdiplomacy.c
V 24
file 2ek.5ck.r18574/9771
K 14
advdiplomacy.h
V 24
file 2el.5ck.r18850/9973
K 13
advdomestic.c
V 24
file 1m.5ck.r18872/72727
K 13
advdomestic.h
V 23
file 1n.0.r13297/443238
K 13
advmilitary.c
V 24
file 1u.5ck.r18872/74491
K 13
advmilitary.h
V 23
file 1v.0.r13297/446464
K 10
advspace.c
V 25
file f2.5ck.r16929/287580
K 10
advspace.h
V 21
file f3.0.r8119/28225
K 7
aiair.c
V 25
file 15y.5ck.r18872/74250
K 7
aiair.h
V 25
file 15z.5ck.r18054/30939
K 8
aicity.c
V 23
file 20.5ck.r18938/1085
K 8
aicity.h
V 24
file 21.5ck.r18844/14950
K 12
aidiplomat.c
V 24
file 16r.5ck.r18938/1321
K 12
aidiplomat.h
V 25
file 16s.5ck.r18054/30699
K 9
aiferry.c
V 25
file 2iw.5ck.r18903/27767
K 9
aiferry.h
V 25
file 2ix.5ck.r18054/30227
K 9
aiguard.c
V 25
file 335.5ck.r18872/75354
K 9
aiguard.h
V 25
file 336.5ck.r18054/31175
K 8
aihand.c
V 24
file 22.5ck.r18939/24673
K 8
aihand.h
V 23
file 23.5ck.r18938/1797
K 8
aihunt.c
V 25
file 2gc.5ck.r18872/75597
K 8
aihunt.h
V 25
file 2gd.5ck.r18054/31410
K 15
aiparatrooper.c
V 25
file 36o.5ck.r18872/75106
K 15
aiparatrooper.h
V 23
file 36p.0.r12670/95202
K 10
aiplayer.c
V 25
file 6i3.5ck.r18872/72974
K 10
aiplayer.h
V 25
file 6i4.5ck.r18872/73367
K 11
aisettler.c
V 25
file 2lh.5ck.r18872/76320
K 11
aisettler.h
V 25
file 2li.5ck.r18054/29985
K 8
aitech.c
V 25
file 24.5ck.r17839/186545
K 8
aitech.h
V 22
file 25.0.r10755/53545
K 9
aitools.c
V 23
file 9.5ck.r18872/73129
K 9
aitools.h
V 22
file a.5ck.r18846/5369
K 8
aiunit.c
V 23
file b.5ck.r18872/76079
K 8
aiunit.h
V 23
file c.5ck.r18852/10916
K 7
default
V 23
dir 6k3.5ck.r18919/5942
K 4
stub
V 23
dir 6k5.5ck.r18919/6784
END
ENDREP
id: 8.5ck.r18939/26607
type: dir
pred: 8.5ck.r18938/3721
count: 1341
text: 18939 24914 1680 1680 36dd448c0a1cbfb8703a55ee5262415c
props: 11108 11315 64 0 abac628483ea4fdfa3bea3a3a56e0532
cpath: /trunk/ai
copyroot: 15280 /trunk

PLAIN
K 9
ABOUT-NLS
V 22
file fu.0.r13215/85704
K 7
AUTHORS
V 19
file 5u.0.r12982/94
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 26
file 6l.5ck.r18394/4622094
K 7
INSTALL
V 22
file 6.5ck.r17486/2711
K 11
Makefile.am
V 23
file 59.5ck.r18925/3202
K 4
NEWS
V 22
file 6m.5ck.r18758/131
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5ck.r18939/26607
K 10
autogen.sh
V 24
file 12o.5ck.r16223/7590
K 9
bootstrap
V 24
dir 2p5.5ck.r17613/37512
K 6
client
V 21
dir d.5ck.r18912/7085
K 6
common
V 21
dir p.5ck.r18931/4941
K 12
config.mac.h
V 20
file hb.0.r6045/5982
K 12
configure.ac
V 23
file 149.5ck.r18927/475
K 4
data
V 22
dir w.5ck.r18936/15029
K 6
debian
V 22
dir 5w.5ck.r17748/2019
K 12
dependencies
V 23
dir 2yu.5ck.r18715/5254
K 11
diff_ignore
V 21
file qq.5ck.r17605/92
K 3
doc
V 23
dir k7.5ck.r18902/25809
K 10
fc_version
V 26
file 2lo.5en.r18452/124959
K 2
m4
V 23
dir 12p.5ck.r18925/2740
K 6
manual
V 23
dir 2m2.5ck.r18773/2094
K 7
modinst
V 23
dir 4pj.5ck.r18918/3658
K 2
po
V 24
dir fs.5ck.r18909/477958
K 7
scripts
V 23
dir 2yo.5bk.r14810/1300
K 6
server
V 22
dir z.5ck.r18939/24442
K 10
stamp-h.in
V 19
file 80.0.r1125/241
K 5
tests
V 22
dir 2g9.5ck.r15661/767
K 7
utility
V 22
dir 1c.5ck.r18922/3141
K 3
vms
V 21
dir u9.0.r11105/70719
K 5
win32
V 24
dir 2eu.5bk.r13732/30345
END
ENDREP
id: 3.5ck.r18939/28146
type: dir
pred: 3.5ck.r18938/5256
count: 14058
text: 18939 26835 1298 1298 2ce302dd391d24e65e9335e36cbbeb8d
props: 17175 3052 264 0 91336f1f63d2f606e65376614b5c72e4
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 20
dir 1.0.r18935/17220
K 4
tags
V 19
dir 2.0.r18763/5338
K 5
trunk
V 22
dir 3.5ck.r18939/28146
K 7
website
V 18
dir 3ge.0.r12388/0
END
ENDREP
id: 0.0.r18939/28536
type: dir
pred: 0.0.r18938/5643
count: 18939
text: 18939 28372 151 151 7479774c829bc3af563c2130307ff440
cpath: /
copyroot: 0 /

22.5ck.t18938-1 modify true false /trunk/ai/aihand.c

15o.5eq.t18938-1 modify true false /trunk/server/advisors/advdata.c

15p.5er.t18938-1 modify true false /trunk/server/advisors/advdata.h


28536 28685
