DELTA 10537 184 7771
SVN  É	éb‚C¿+ …W €P „>†` „‹"€‚$ †lK C—@€Š  ƒž4— „o¡I€‚% ^…  Š§? ±7ƒ .²> f³l´ ‚ ´e€‚C ‚N¹b® z¼#€‚
 „YÀf£ lÅL€s qÈ€ ~Ê€W Ëc€ƒL ƒQÍ$• ƒ#Ðy€' ‚=Ô	€2 …×€ƒ6 "Ýu€f màd€: Šló5“ ‹þ0€‚_ ƒ?‹? /Ž}‹ ƒ~+€‚
 ŠP•oŽ ‚4 8’ r¢y‰ „£h §x€B ©7“ Xªx ‚x«*– K®" †*° ‚¶;§ ‚G¸w€C „_¼M€‚K „*Ã4 #Ç]‹
Èfc_config.h>
#endif

#include <math.h>

/* utility */
#include "log.h"

/* common */
#include "game.h"
#include "traderoutes.h"

/* aicore */
#include "path_finding.h"
#include "pf_tools.h"

#include "caravanTL_NATIONAL_ONLYcan_do_action(caravan, ACTION_TRADE_ROUTE)) {
    parameter->consider_trade = FALSE;
  }
  if (!unit_can_do_action(caravan, ACTION_MARKETPLACE)
      && !unit_can_do_action(caravan, ACTION_TRADE_ROUTE)) {
    parameter->consider_windfall = FALSE;
  }
  if (!unit_can_do_action(caravan, ACTION********/
void caravan_parameter_log_real(const struct caravan_parameter *parameter,
                                enum log_level level, const char *file,
                                const char *function, int line)
{
  const char *foreign = "<illegal>";

  switch (parameter->allow_foreign_trade) {
  case FTL_NATIONAL_ONLY:
    foreign = "no";
    break;
  case FTL_ALLIED:
    foreign = "allied";
    break;
  case FTL_PEACEFUL:
    foreign = "peaceful";
    break;
  case FTL_NONWAR:
    foreign = "anything but enemies";
    break;
  }

  do_log(file, function, line, FALSE, level,
         "parameter {\n"
         "  horizon   = %d\n"
         "  discount  = %g\n"
         "  objective = <%s,%s,%s>\n"
         "  account-broken = %s\n"
         "  allow-foreign  = %s\n"
         "  ignore-transit = %s\n"
         "  convert-trade  = %s\n"
         "}\n",
         parameter->horizon,
         parameter->discount,
         parameter->consider_windfall ? "windfall" : "-",
         parameter->consider_trade ? "trade" : "-",
         parameter->consider_wonders ? "wonders" : "-",
         parameter->account_for_broken_routes ? "yes" : "no",
         foreign,
         parameter->ignore_transit_time ? "yes" : "no",
         parameter->convert_trade ? "yes" : "no"  result->required_boat  
  result->value = 0;
  result->help_wonder = FALSE;
  if ((src != NULL) && (dest != NULL)) {
    if (tile_continent(src->tile) != tile_continent(dest->tile)) {
      result->required_boat = TRUE;
    } else {
      result->required_boat = FALSE;
    }
  } else {
    result->required_boat =bool omniscientpfm pfparam.omniscience = omniscient;
  pfm = pf_map_newpf_map_positions_iterate(pfm, pos, TRUE) {
    struct city *pcity;

    if (pos.turn > end_time) {
      break;
    }

    pcity = tile_city(pos.tile);
    if (pcity && callback(callback_data, pcity, turns_before + pos.turn,
			  pos.moves_left)) {
      break;
    }
  } pf_map_positions_iterate_end;

  pf_map_destroy(pfmunit *caravan,
                               bool can_establish = (unit_can_do_action(caravan, ACTION_TRADE_ROUTE)
                          && can_establish_trade_route(src, dest));
    int bonus = get_caravan_enter_city_trade_bonus(src, dest,
                                                   can_establish);
				  const struct player *pplayercity_owner(pcity) != pplayer) {
    newtrade = 0;
  }

  if (city_num_trade_routes(pcity) < max_trade_routes(pcity)struct trade_route_list *would_remove = (countloser ? trade_route_list_new() : NULL);
    int oldtrade = city_trade_removable(pcity, would_removecity_owner(pcity) == pplayer) {
      newtrade -= oldtrade;
    }

    /* if the cities) {
      trade_route_list_iterate(would_remove, plost) {
        struct city *losercity = game_city_by_number(plost->partner);

        if (city_owner(losercity) == pplayer) {
          trade_routes_iterate(losercity, pback) {
            if (pback->partner == pcity->id) {
              losttrade += pback->value;
            }
          } trade_routes_iterate_end;
        }
      } trade_route_list_iterate_end;
      trade_route_list_destroy(would_remove)const struct player *  if (max_trade_routes(src) <= 0 || max_trade_routes(dest) <= 0) {
    /* Can't create new traderoutes even by replacing old ones if
     * there's no slots at all. */ else {
    /* Always fails. */
    fc_assert_msg(FALSE == param->convert_trade,
                  "Unimplemented functionality: "
                  "using CM to calculate trade./* TODO: Should helping an ally to build be considered when legal? */
      || unit_owner(caravan) != city_owner(dest)
      || !city_production_gets_caravan_shields(dest->production)
      /* TODO: Should helping to build a unit be considered when legal? */
      || VUT_UTYPE == dest->production.kind
      /* TODO: Should helping to build an improvement be considered when
       * legal? */
      || !is_wonder(dest->production.value.production.value.building,
      shields_at_arrival);
  costwith = impr_buy_gold_cost(dest->production.value.building,
      shields_at_arrival + unit_build_shield_cost(caravan));

  fc_assert_ret_val(costwithout >= costwith, -1.0  struct player *pplayer_src = city_owner(src);
  struct player *pplayer_dest = city_owner(dest);
  
  /* if no foreign trade is allowed, just quit. */
  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)
        || (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);
      return;
    }
  }

  /* Make sure that the caravan gets a new target in cases were the old
   * target turned out to be of no use because of action enablers. */
  if (real_map_distance(dest->tile, unit_tile(caravan)) <= 1) {
    /* The caravan is close enought to its target to do a full check.
     * A caravan can be close enough to max 9 cities in the worst
     * theoretically possible case. (More than one city is rare.) The
     * computations are therefore worth it. */

    if (!(is_action_enabled_unit_on_city(ACTION_HELP_WONDER,
                                         caravan, dest)
          || is_action_enabled_unit_on_city(ACTION_TRADE_ROUTE,
                                            caravan, dest)
          || is_action_enabled_unit_on_city(ACTION_MARKETPLACE,
                                            caravan, dest))) {
      /* No caravan action is possible against this target. */
      caravan_result_init_zero(result);
      return;
    }
  }

  trade = trade_benefit(pplayer_src, src, dest, parameter);
  windfall = windfall_benefit(caravan, src, dest, parameter);
  wonder = wonder_benefit(caravan, arrival_time, dest, parameter);
  /* we want to aid for wonder building */
  wonder *= 2;
  game_city_by_number,
                                         bool omniscient)
{
  struct cewt_data data;

  data.caravan = caravan;
  data.param = param;
  caravan_result_init(result, game_city_by_number(caravan->homecity),
                      dest, 0);
  caravan_search_from(caravan, param, unit_tile(caravan), 0,
                      caravan->moves_left, omniscien, bool omniscien, omniscien  struct city *pcity = game_city_by_number(caravan->homecity);
  
  caravan_result_init(best, pcity, NULL, 0);
  current = *best;
  
  cities_iterate(dest) {
    caravan_result_init(&current, pcity, dest, 0);
    get_discounted_reward(caravan, param, &current);
    bool omniscienunit_tile(caravan)omniscien, bool omnisciengame_city_by_number(caravan->homecity);

    fc_assert(src != NULLomniscient, result) = unit_owner(caravan)  bool omnisciengame_city_by_number(caravan->homecity),city_owner(pcity) == unit_owner(caravan)) {
    caravan_find_best_destination_withtransit(
                caravan, data->param, pcity, arrival_time, moves_left, data->omniscient,
                struct caravan_result *result, bool omniscient)
{
  struct cowt_data data;

  data.param = param;
  data.caravan = caravan;
  data.best = result;
  data.omniscient = omniscient;
  caravan_result_init_zero(data.best);
  caravan_search_from(caravan, param, unit_tile(caravan), 0,
                      caravan->moves_left, omniscien, bool omniscien, omniscienENDREP
id: 33l.5ck.r31748/8473
type: file
pred: 33l.5ck.r30121/4518
count: 32
text: 31748 0 8445 29922 51090f842fed29c71a10b56629d6013b
props: 10779 44053 110 0 fd27c383f48a4fbbd90a59fbcfc8b3be
cpath: /trunk/common/aicore/caravan.c
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 25
file 18u.5ck.r27705/38964
K 11
aisupport.c
V 26
file 2em.5ck.r30060/148255
K 11
aisupport.h
V 22
file 2en.0.r8119/19806
K 9
caravan.c
V 24
file 33l.5ck.r31748/8473
K 9
caravan.h
V 24
file 33m.5ck.r30121/4767
K 9
citymap.c
V 24
file 2gj.5ck.r29570/6908
K 9
citymap.h
V 25
file 2gk.5ck.r20375/18425
K 4
cm.c
V 23
file 18x.5ck.r29773/235
K 4
cm.h
V 23
file 18y.5ck.r27545/896
K 14
path_finding.c
V 24
file 2ds.5ck.r31012/2193
K 14
path_finding.h
V 25
file 2dt.5ck.r30031/26266
K 10
pf_tools.c
V 25
file 2du.5ck.r30104/15591
K 10
pf_tools.h
V 25
file 2dv.5ck.r26443/10709
END
ENDREP
id: 18t.5ck.r31748/9329
type: dir
pred: 18t.5ck.r31012/3054
count: 370
text: 31748 8722 594 0 853ee07b98bab601c1562ac27aab70d9
props: 11108 8037 65 0 8b44e87f657ecca3b8458ca1746fb7c6
cpath: /trunk/common/aicore
copyroot: 15280 /trunk

PLAIN
K 11
Makefile.am
V 22
file 5h.5ck.r30300/929
K 14
achievements.c
V 25
file qhc.5ck.r30221/58179
K 14
achievements.h
V 26
file qhe.5ck.r26905/215849
K 9
actions.c
V 24
file r7a.5ck.r31632/1051
K 9
actions.h
V 25
file r7c.5ck.r31525/19990
K 4
ai.c
V 24
file 4go.5ck.r31726/5773
K 4
ai.h
V 25
file 4gp.5ck.r30874/16359
K 6
aicore
V 23
dir 18t.5ck.r31748/9329
K 6
base.c
V 25
file 3jw.5ck.r30974/73432
K 6
base.h
V 25
file 3jx.5ck.r29645/47370
K 9
borders.c
V 25
file 4f0.5ck.r28853/15054
K 9
borders.h
V 26
file 4f1.5ck.r26905/213493
K 10
calendar.c
V 27
file 147p.5ck.r26905/214086
K 10
calendar.h
V 27
file 147r.5ck.r26905/215265
K 8
capstr.c
V 22
file dv.5ck.r24976/289
K 8
capstr.h
V 24
file dw.5ck.r18858/97074
K 10
citizens.c
V 26
file 6mx.5ck.r26905/203234
K 10
citizens.h
V 26
file 6my.5ck.r26905/204108
K 6
city.c
V 22
file q.5ck.r31728/3499
K 6
city.h
V 23
file 3q.5ck.r31726/6010
K 13
clientutils.c
V 26
file zj9.5ck.r26905/212022
K 13
clientutils.h
V 26
file zjb.5ck.r26905/213199
K 8
combat.c
V 23
file wp.5ck.r31091/6503
K 8
combat.h
V 24
file wq.5ck.r24573/25814
K 12
connection.c
V 23
file un.5ck.r31685/6447
K 12
connection.h
V 24
file uo.5ck.r30393/30602
K 9
culture.c
V 27
file 104t.5ck.r26905/202652
K 9
culture.h
V 27
file 104v.5ck.r26905/203523
K 8
dataio.c
V 23
file 15r.5ck.r31638/641
K 8
dataio.h
V 23
file 15s.5ck.r31638/883
K 13
dataio_json.c
V 25
file 1m61.5ck.r31638/1122
K 13
dataio_json.h
V 25
file 1m63.5ck.r31638/1312
K 11
diptreaty.c
V 24
file 3r.5ck.r30328/78509
K 11
diptreaty.h
V 24
file 3s.5ck.r27517/13575
K 10
disaster.c
V 25
file b2m.5ck.r29999/68570
K 10
disaster.h
V 25
file b2o.5ck.r28753/25083
K 9
effects.c
V 26
file 2eo.5ck.r30060/150599
K 9
effects.h
V 25
file 2ep.5ck.r29829/13137
K 8
events.c
V 25
file 33h.5ck.r31465/19505
K 8
events.h
V 24
file 3t.5ck.r31465/19746
K 8
extras.c
V 25
file o9u.5ck.r30974/73676
K 8
extras.h
V 25
file o9w.5ck.r31630/99268
K 12
fc_cmdhelp.c
V 26
file 76j.5ck.r26905/216438
K 12
fc_cmdhelp.h
V 26
file 76k.5ck.r26905/216731
K 14
fc_interface.c
V 25
file 4up.5ck.r30095/11458
K 14
fc_interface.h
V 25
file 4uq.5ck.r28203/18355
K 10
fc_types.h
V 25
file 2ll.5ck.r31611/17692
K 15
featured_text.c
V 26
file 4h3.5ck.r26905/212899
K 15
featured_text.h
V 25
file 4h4.5ck.r29999/69059
K 6
game.c
V 23
file 3u.5ck.r31682/7051
K 6
game.h
V 23
file 3v.5ck.r31682/7286
K 19
generate_packets.py
V 23
file 2f4.5ck.r31707/324
K 12
government.c
V 24
file he.5ck.r29999/69311
K 12
government.h
V 24
file hf.5ck.r25151/83855
K 6
idex.c
V 24
file qo.5ck.r25151/84101
K 6
idex.h
V 24
file qp.5ck.r18858/92434
K 13
improvement.c
V 23
file vb.5ck.r31728/3737
K 13
improvement.h
V 24
file vc.5ck.r29857/14472
K 5
map.c
V 22
file r.5ck.r31728/3980
K 5
map.h
V 23
file 41.5ck.r31728/4215
K 11
map_types.h
V 26
file 216z.5ck.r31533/22716
K 8
mapimg.c
V 24
file 6n9.5ck.r31728/4453
K 8
mapimg.h
V 26
file 6na.5ck.r26905/215559
K 15
metaknowledge.c
V 25
file siq.5ck.r31611/17938
K 15
metaknowledge.h
V 24
file sis.5ck.r31009/1837
K 10
movement.c
V 25
file 2xv.5ck.r31198/37479
K 10
movement.h
V 25
file 2xw.5ck.r30513/23106
K 13
multipliers.c
V 26
file 197b.5ck.r29999/69806
K 13
multipliers.h
V 26
file 197d.5ck.r29117/26290
K 18
name_translation.h
V 22
file 4k1.5ck.r31721/48
K 8
nation.c
V 21
file il.5ck.r30332/79
K 8
nation.h
V 22
file im.5ck.r27000/284
K 9
packets.c
V 24
file 43.5ck.r31366/25508
K 11
packets.def
V 24
file 2f5.5ck.r31675/4717
K 9
packets.h
V 23
file 44.5ck.r31072/5461
K 14
packets_json.c
V 26
file 1m64.5ck.r31366/25752
K 14
packets_json.h
V 26
file 1m65.5ck.r28846/11954
K 8
player.c
V 23
file 45.5ck.r31580/5581
K 8
player.h
V 23
file 46.5ck.r31726/6249
K 14
requirements.c
V 25
file 2wq.5ck.r31611/18188
K 14
requirements.h
V 25
file 2wr.5ck.r29444/27920
K 10
research.c
V 23
file 4ro.5ck.r31397/138
K 10
research.h
V 24
file 4rp.5ck.r27750/1056
K 10
rgbcolor.c
V 25
file 6i6.5ck.r31090/42043
K 10
rgbcolor.h
V 25
file 6i7.5ck.r31090/42290
K 6
road.c
V 25
file 6pq.5ck.r30974/75158
K 6
road.h
V 25
file 6pr.5ck.r31198/37727
K 10
scriptcore
V 23
dir 75a.5ck.r31594/3296
K 11
spaceship.c
V 23
file 98.5ck.r26349/9773
K 11
spaceship.h
V 24
file 99.5ck.r26349/10015
K 12
specialist.c
V 25
file 33f.5ck.r29999/70798
K 12
specialist.h
V 25
file 33g.5ck.r29570/10667
K 7
style.c
V 25
file zzb.5ck.r29999/71046
K 7
style.h
V 26
file zzd.5ck.r26905/204988
K 6
team.c
V 23
file 33i.5ck.r25891/212
K 6
team.h
V 23
file 33j.5ck.r26183/314
K 6
tech.c
V 23
file t.5ck.r29999/71290
K 6
tech.h
V 21
file u.5ck.r29316/360
K 9
terrain.c
V 25
file 2fp.5ck.r30974/75400
K 9
terrain.h
V 24
file qs.5ck.r31276/31132
K 6
tile.c
V 25
file 2ys.5ck.r31249/69604
K 6
tile.h
V 25
file 2yt.5ck.r31249/69846
K 13
traderoutes.c
V 25
file bf8.5ck.r31399/13373
K 13
traderoutes.h
V 25
file bfa.5ck.r31399/13623
K 8
traits.h
V 25
file 7k3.5ck.r30330/11323
K 6
unit.c
V 23
file v.5ck.r31414/33328
K 6
unit.h
V 23
file 48.5ck.r31726/6489
K 10
unitlist.c
V 25
file 39m.5ck.r28596/94022
K 10
unitlist.h
V 26
file 39n.5ck.r27611/110113
K 10
unittype.c
V 23
file v9.5ck.r31728/4695
K 10
unittype.h
V 23
file va.5ck.r31728/4939
K 9
version.c
V 23
file oe.5ck.r31514/2655
K 9
version.h
V 23
file e7.5ck.r26171/7331
K 9
victory.c
V 26
file qex.5ck.r26905/217020
K 9
victory.h
V 26
file qez.5ck.r26905/217896
K 8
vision.c
V 22
file 4dm.5ck.r27638/98
K 8
vision.h
V 24
file 4dn.5ck.r24742/9986
K 12
workertask.c
V 26
file llw.5ck.r26905/206753
K 12
workertask.h
V 25
file lly.5ck.r28926/17170
K 10
worklist.c
V 22
file o8.5ck.r28026/169
K 10
worklist.h
V 24
file o9.5ck.r18858/98299
END
ENDREP
id: p.5ck.r31748/15099
type: dir
pred: p.5ck.r31728/10717
count: 4560
text: 31748 9564 5522 0 a654725747110da41b3d2a2c9ff3dc9f
props: 23743 0 112 0 b2bc91bf125d83375389d51f25ff2c2f
cpath: /trunk/common
copyroot: 15280 /trunk

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r31532/74309
K 7
AUTHORS
V 24
file 5u.5ck.r22143/14016
K 7
COPYING
V 22
file 1h.5ck.r29454/952
K 9
ChangeLog
V 26
file 6l.5ck.r31297/7697235
K 7
INSTALL
V 21
file 6.5ck.r31275/938
K 11
Makefile.am
V 22
file 59.5ck.r31681/786
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 22
dir 8.5ck.r31611/12682
K 10
autogen.sh
V 23
file 12o.5ck.r31650/192
K 9
bootstrap
V 24
dir 2p5.5ck.r31532/76576
K 6
client
V 21
dir d.5ck.r31739/7947
K 6
common
V 22
dir p.5ck.r31748/15099
K 12
configure.ac
V 25
file 149.5ck.r31726/12726
K 4
data
V 22
dir w.5ck.r31741/11588
K 12
dependencies
V 23
dir 2yu.5ck.r31429/1250
K 3
doc
V 22
dir k7.5ck.r31712/2776
K 10
fc_version
V 25
file 2lo.5en.r31682/13288
K 11
gen_headers
V 25
dir 1hsw.5ck.r31726/13285
K 2
m4
V 23
dir 12p.5ck.r31715/2437
K 7
scripts
V 23
dir 2yo.5ck.r31448/1168
K 6
server
V 21
dir z.5ck.r31708/4664
K 5
tests
V 22
dir 2g9.5ck.r31520/584
K 5
tools
V 23
dir 4pj.5js.r31744/2742
K 12
translations
V 23
dir t0a.5ck.r31743/7474
K 7
utility
V 23
dir 1c.5ck.r31728/14590
K 5
win32
V 23
dir 2eu.5ck.r31746/4101
END
ENDREP
id: 3.5ck.r31748/16458
type: dir
pred: 3.5ck.r31746/5457
count: 20840
text: 31748 15325 1120 0 a27b92d73e9cb2bfa474e20f8f8f6565
props: 28036 14655 292 0 9e1d5de0253c723466868990c52c129f
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 19
dir 1.0.r31747/6273
K 4
tags
V 19
dir 2.0.r31496/6515
K 5
trunk
V 22
dir 3.5ck.r31748/16458
K 7
website
V 20
dir 3ge.0.r31573/804
END
ENDREP
id: 0.0.r31748/16847
type: dir
pred: 0.0.r31747/6590
count: 31748
text: 31748 16682 152 0 76915d7132d6d1b22b7166ef83211d18
cpath: /
copyroot: 0 /

33l.5ck.t31747-1 modify true false /trunk/common/aicore/caravan.c


16847 16994
