DELTA
SVN   Έ]Έ]Έ]/**********************************************************************
 Freeciv - Copyright (C) 1996-2015 - Freeciv Development Team
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
***********************************************************************/

/* common */
#include "actions.h"

/* server */
#include "aiiface.h"
#include "actiontools.h"
#include "notify.h"
#include "plrhand.h"

/**************************************************************************
  After an action of a diplomat, maybe it will cause a diplomatic incident
  with the victim.
**************************************************************************/
static void maybe_cause_incident(const enum gen_action action,
                                 struct player *offender,
                                 struct player *victim_player,
                                 const struct tile *victim_tile,
                                 const char *victim_link)
{
  if (!pplayers_at_war(offender, victim_player)) {
    switch (action) {
    case ACTION_SPY_BRIBE_UNIT:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while bribing "
                      "the %s %s."),
                    nation_adjective_for_player(victim_player),
                    victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("%s has caused an incident while bribing your %s."),
                    player_name(offender), victim_link);
      break;
    case ACTION_SPY_SABOTAGE_UNIT:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while"
                      " sabotaging the %s %s."),
                    nation_adjective_for_player(victim_player),
                    victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("The %s have caused an incident while"
                      " sabotaging your %s."),
                    nation_plural_for_player(offender),
                    victim_link);
      break;
    case ACTION_SPY_STEAL_TECH:
    case ACTION_SPY_TARGETED_STEAL_TECH:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while attempting "
                      "to steal tech from %s."),
                    player_name(victim_player));
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("%s has caused an incident while attempting "
                      "to steal tech from you."), player_name(offender));
      break;
    case ACTION_SPY_INCITE_CITY:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while inciting a "
                      "revolt in %s."), victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("The %s have caused an incident while inciting a "
                      "revolt in %s."),
                    nation_plural_for_player(offender), victim_link);
      break;
    case ACTION_SPY_POISON:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while poisoning %s."),
                    victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("The %s have caused an incident while poisoning %s."),
                    nation_plural_for_player(offender), victim_link);
      break;
    case ACTION_SPY_SABOTAGE_CITY:
    case ACTION_SPY_TARGETED_SABOTAGE_CITY:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while sabotaging %s."),
                    victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("The %s have caused an incident while sabotaging %s."),
                    nation_plural_for_player(offender), victim_link);
      break;
    case ACTION_SPY_STEAL_GOLD:
      notify_player(offender, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("You have caused an incident while"
                      " stealing gold from %s."),
                    victim_link);
      notify_player(victim_player, victim_tile,
                    E_DIPLOMATIC_INCIDENT, ftc_server,
                    _("The %s have caused an incident while"
                      " stealing gold from %s."),
                    nation_plural_for_player(offender), victim_link);
      break;
    case ACTION_MOVE:
    case ACTION_ESTABLISH_EMBASSY:
    case ACTION_SPY_INVESTIGATE_CITY:
    case ACTION_TRADE_ROUTE:
    case ACTION_MARKETPLACE:
    case ACTION_HELP_WONDER:
      return; /* These are not considered offences */
    }
    player_diplstate_get(victim_player, offender)->has_reason_to_cancel = 2;
    call_incident(INCIDENT_DIPLOMAT, offender, victim_player);
    send_player_all_c(offender, NULL);
    send_player_all_c(victim_player, NULL);
  }

  return;
}

/**************************************************************************
  Take care of any consequences (like casus belli) of getting caught while
  trying to perform the given action.
**************************************************************************/
void action_consequence_caught(const int action_id,
                               struct player *offender,
                               struct player *victim_player,
                               const struct tile *victim_tile,
                               const char *victim_link)
{
  maybe_cause_incident(action_id, offender,
                       victim_player, victim_tile, victim_link);
}

/**************************************************************************
  Take care of any consequences (like casus belli) of successfully
  performing the given action.
**************************************************************************/
void action_consequence_success(const int action_id,
                                struct player *offender,
                                struct player *victim_player,
                                const struct tile *victim_tile,
                                const char *victim_link)
{
  maybe_cause_incident(action_id, offender,
                       victim_player, victim_tile, victim_link);
}
ENDREP
DELTA
SVN   /**********************************************************************
 Freeciv - Copyright (C) 1996-2015 - Freeciv Development Team
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
***********************************************************************/

#ifndef FC__ACTIONTOOLS_H
#define FC__ACTIONTOOLS_H

/* common */
#include "player.h"
#include "tile.h"

void action_consequence_caught(const int action_id,
                               struct player *offender,
                               struct player *victim_player,
                               const struct tile *victim_tile,
                               const char *victim_link);

void action_consequence_success(const int action_id,
                                struct player *offender,
                                struct player *victim_player,
                                const struct tile *victim_tile,
                                const char *victim_link);

#endif /* FC__ACTIONTOOLS_H */
ENDREP
DELTA 27204 199 469
SVN     )3 6Wctiontools.c	\
		actiontools.h	ENDREP
DELTA 27489 532 345
SVN  δ>»_lS )   G  eF h©<P ΎhM TΎh UΧM !ν.J ¨4Ό U±sΎ |·zΉ Ν?Υ#Ύ }·z U₯Z ωUΐ4 oαOctiontools.h"
action_consequence_success(ACTION_SPY_POISON, pplayer, cplayer,
      action_consequence_success(ACTION_SPY_INVESTIGATE_CITY, pplayer, cplayer,
      action_consequence_success(ACTION_ESTABLISH_EMBASSY, pplayer, cplayer,
      action_consequence_success(ACTION_SPY_SABOTAGE_UNIT, pplayer, uplayer,
      action_consequence_success(ACTION_SPY_BRIBE_UNIT, pplayer, uplayer,
      action_consequence_caught(action_id, pplayer, cplayer,
     action_consequence_success(action_id, pplayer, cplayer,
      action_consequence_success(ACTION_SPY_INCITE_CITY,
      action_consequence_success(action_id, pplayer, cplayer,
      action_consequence_success(ACTION_SPY_STEAL_GOLD, act_player,
                            ENDREP
DELTA 28172 0 17167
SVN      Wc 4  R)° U= D= Vεz ρa w’ )A ¦Rf R«Y J@ Sf Ά" £1»Og 2ήnT λd π; V. ? S: V. ? ^/ φuF Ω	k Vεz WζT θ1T \ςB° U= Bύ` Λ-T Η:ΝFactiontools.h"do_unit_establish_trade(struct player *pplayer,
struct city *pcity_dest,
do!FALSE)) {
    /* Explaination: notcannot act when it isn't being "
                    "transported/UNIT_ILLEGAL_ACTION  if (!unit_can_do_action_now(actor_unit)) {
    /* Action not possible due to unitwaittime setting. */
        /* This isn't untargeted sabotage city. */
        && value != (B_LAST + 1)doTRUEMARKETPLACEdoFALSEdoGOTO) {
    /* Don't permit a client to set a unit's activity to ACTIVITY_GOTO.
     * Setting ACTIVITY_GOTO from the client results in a unit indicating
     * it is going somewhere while it is standing still. The appearance of
     * the unit doing something can trick the user to not make use of it.
     *
     * Handled here because adv_follow_path() uses unit_activity_handling()
     * to set a unit's activity to ACTIVITY_GOTO. */
    return;
  }dodo/* May cause an incident */
  action_consequence_success(ACTION_HELP_WONDER, pplayer,
                             city_owner(pcity_dest),
                             city_tile(pcity_dest), city_link(pcity_dest)do_unit_establish_trade(struct player *pplayer,
struct city *pcity_dest,
do/* May cause an incident */
  action_consequence_success(est_if_able ?
                               ACTION_TRADE_ROUTE :
                               ACTION_MARKETPLACE,
                             pplayer, city_owner(pcity_dest),
                             city_tile(pcity_dest),
                             city_link(pcity_dest));  ’Q±-?  ~ z xa Nst 5@ >pV () length = packet->length, i;
  struct unit *punit = player_unit_by_number(pplayer, packet->unit_id);
  struct tile *src_tile = index_to_tile(packet->src_tile);

  if (NULL == punit) {
    /* Probably died or bribed. */
    log_verbose("handle_unit_orders() invalid unit %d", packet->unit_id);
    return;
  }

  if (0 > length || MAX_LEN_ROUTE < length) {
    /* Shouldn't happen */
    log_error("handle_unit_orders() invalid %s (%d) "
              "packet length %d (max %d)", unit_rule_name(punit),
              packet->unit_id, length, MAX_LEN_ROUTE);
    return;
  }

  if (src_tile != unit_tile(punit)) {
    /* Failed sanity check.  Usually this happens if the orders were sent
     * in the previous turn, and the client thought the unit was in a
     * different position than it's actually in.  The easy solution is to
     * discard the packet.  We don't send an error message to the client
     * here (though maybe we should?). */
    log_verbose("handle_unit_orders() invalid %s (%d) tile (%d, %d) "
                "!= (%d, %d)", unit_rule_name(punit), punit->id,
                TILE_XY(src_tile), TILE_XY(unit_tile(punit)));
    return;
  }

  if (ACTIVITY_IDLE != punit->activity) {
    /* New orders implicitly abandon current activity */
    unit_activity_handling(punit, ACTIVITY_IDLE);
  }

  for (i = 0; i < length; i++) {
    if (packet->orders[i] < 0 || packet->orders[i] > ORDER_LFALLOUT:
      case ACTIVITY_POLLUTION:
      case ACTIVITY_PILLAGE:
      case ACTIVITY_MINE:
      case ACTIVITY_IRRIGATE:
      case ACTIVITY_TRANSFORM:
      case ACTIVITY_CONVERT:
	/* Simple activities. */
	break;
      case ACTIVITY_FORTIFYING:EXPLORE:
      case ACTIVITY_IDLE:
      /* Not set from the client. */
      case ACTIVITY_GOTO:
      if (packet->target[i] == EXTRA_NONE
          && unit_activity_needs_target_from_client(packet->activity[i])) {
        /* The orders system can't do server side target assignment for
         * this activity. */
        return;
      }
/* Make sure that the unit won't keep its old ai_controlled state after
   * it has recieved new orders from the client. */
  punit->ai_controlled = FALSE else {
    /* Make sure that no old goto_tile remains. */
    punit->goto_tile = NULLENDREP
id: vz.5qi.r28430/13742
type: file
pred: vz.5qi.r27489/3902
count: 211
text: 28430 8812 845 56799 db5b0d63085e1d8d366952bd2f9ac56e
props: 10915 10832 111 0 8ab1a522471ad7dd5014b23b42c49491
cpath: /branches/S2_6/server/diplomats.c
copyroot: 27474 /branches/S2_6

id: 1p8q.5qi.r28430/14004
type: file
count: 0
text: 28430 0 7275 7261 bada0d26f113f7b6c15f6420d4acce7d
cpath: /branches/S2_6/server/actiontools.c
copyroot: 27474 /branches/S2_6

id: 1p8t.5qi.r28430/14182
type: file
count: 0
text: 28430 7288 1427 1413 ed2168ba35f5e5ca4158625ea3793de2
cpath: /branches/S2_6/server/actiontools.h
copyroot: 27474 /branches/S2_6

id: 5q.5qi.r28430/14363
type: file
pred: 5q.5ck.r27256/390
count: 106
text: 28430 8728 57 3472 27a9dd9b26acfb3329e172fd76d30f9c
props: 10619 59300 111 0 8ba011ca1ef4e408ab91a853a48e15eb
cpath: /branches/S2_6/server/Makefile.am
copyroot: 27474 /branches/S2_6

id: 18.5qi.r28430/14622
type: file
pred: 18.5qi.r28413/94
count: 624
text: 28430 9684 4031 108702 d7ecd301ef3d7f7c716e45a83cfa4d7f
props: 11060 7742 112 0 090627d3849ce880ce4f29c1c260669f
cpath: /branches/S2_6/server/unithand.c
copyroot: 27474 /branches/S2_6

PLAIN
K 11
Makefile.am
V 24
file 5q.5qi.r28430/14363
K 13
actiontools.c
V 26
file 1p8q.5qi.r28430/14004
K 13
actiontools.h
V 26
file 1p8t.5qi.r28430/14182
K 8
advisors
V 24
dir 4n2.5qi.r28160/18627
K 9
aiiface.c
V 25
file 4gm.5ck.r26905/55786
K 9
aiiface.h
V 25
file 4gn.5ck.r26905/56374
K 9
animals.c
V 25
file vnk.5ck.r26905/62972
K 9
animals.h
V 25
file vnm.5ck.r26905/63257
K 6
auth.c
V 25
file 39c.5ck.r20274/32101
K 6
auth.h
V 25
file 39d.5ck.r18977/19170
K 11
barbarian.c
V 22
file lw.5ck.r26434/594
K 11
barbarian.h
V 24
file lx.5ck.r22667/36940
K 14
citizenshand.c
V 25
file 6mz.5ck.r26905/56079
K 14
citizenshand.h
V 25
file 6n0.5ck.r26905/56662
K 10
cityhand.c
V 24
file 10.5ck.r19573/66885
K 10
cityhand.h
V 23
file 4f.0.r13297/423686
K 11
citytools.c
V 24
file 4g.5qi.r28175/37563
K 11
citytools.h
V 24
file 4h.5qi.r28175/37820
K 10
cityturn.c
V 22
file 4i.5qi.r27974/146
K 10
cityturn.h
V 24
file 4j.5ck.r24742/16670
K 11
civserver.c
V 24
file 4k.5qi.r28076/13954
K 10
commands.c
V 24
file 2ly.5qi.r27913/1890
K 10
commands.h
V 25
file 2lz.5qi.r28013/36715
K 13
connecthand.c
V 25
file 2dw.5ck.r27336/16958
K 13
connecthand.h
V 24
file 2dx.5ck.r23606/2057
K 9
console.c
V 24
file dd.5ck.r24895/15492
K 9
console.h
V 23
file de.5ck.r19183/7918
K 10
diplhand.c
V 23
file 4m.5qi.r28336/3648
K 10
diplhand.h
V 23
file 4n.5qi.r27518/5128
K 11
diplomats.c
V 24
file vz.5qi.r28430/13742
K 11
diplomats.h
V 23
file w0.5ck.r27461/1674
K 10
edithand.c
V 25
file 3bk.5qi.r27612/42316
K 10
edithand.h
V 25
file 4ez.5ck.r26905/64705
K 6
fcdb.c
V 25
file 6l3.5ck.r26905/56956
K 6
fcdb.h
V 25
file 6l4.5ck.r26905/57239
K 10
gamehand.c
V 23
file 4o.5ck.r27042/1951
K 10
gamehand.h
V 24
file 4p.5ck.r26564/23149
K 9
generator
V 23
dir 2me.5ck.r27071/7433
K 10
handchat.c
V 23
file 4q.5ck.r25915/6654
K 10
handchat.h
V 24
file dj.5ck.r18270/28229
K 9
maphand.c
V 22
file 13.5qi.r28416/610
K 9
maphand.h
V 23
file 14.5ck.r24759/3742
K 6
meta.c
V 23
file 4s.5ck.r27134/1241
K 6
meta.h
V 23
file 4t.5ck.r27204/3095
K 6
mood.c
V 26
file 112c.5ck.r26905/63547
K 6
mood.h
V 26
file 112e.5ck.r26905/64129
K 8
notify.c
V 25
file 4i2.5ck.r26905/57814
K 8
notify.h
V 25
file 4i3.5ck.r26905/58681
K 9
plrhand.c
V 24
file 4u.5ck.r27223/43157
K 9
plrhand.h
V 23
file 4v.5ck.r26956/6294
K 8
report.c
V 22
file vi.5qi.r28082/133
K 8
report.h
V 24
file vj.5ck.r24891/20006
K 10
rssanity.c
V 25
file hew.5ck.r26905/55205
K 10
rssanity.h
V 25
file hey.5ck.r26905/55500
K 9
ruleset.c
V 21
file 8w.5qi.r28087/86
K 9
ruleset.h
V 22
file 8x.5qi.r27725/899
K 13
sanitycheck.c
V 22
file wi.5ck.r27281/872
K 13
sanitycheck.h
V 24
file wj.5qi.r28076/13693
K 12
savecompat.c
V 24
file qva.5ck.r27311/1041
K 12
savecompat.h
V 25
file qvc.5ck.r27279/35421
K 10
savegame.c
V 23
file vl.5qi.r27749/2766
K 10
savegame.h
V 24
file vm.5ck.r20758/19233
K 11
savegame2.c
V 24
file 4m0.5qi.r28336/3388
K 11
savegame2.h
V 25
file 4m1.5ck.r26905/58971
K 7
score.c
V 25
file 2eg.5ck.r25535/51502
K 7
score.h
V 24
file 2eh.5ck.r21929/6179
K 9
scripting
V 24
dir 31x.5qi.r27544/11893
K 8
sernet.c
V 21
file 15.5qi.r28320/51
K 8
sernet.h
V 23
file 4y.5ck.r23685/5129
K 10
settings.c
V 23
file 2m0.5qi.r28420/318
K 10
settings.h
V 24
file 2m1.5qi.r27996/4061
K 11
spacerace.c
V 24
file 9a.5ck.r25063/30975
K 11
spacerace.h
V 21
file 9b.0.r11338/1129
K 9
srv_log.c
V 24
file 15t.5rh.r27915/1004
K 9
srv_log.h
V 25
file 15u.5ri.r28013/36974
K 10
srv_main.c
V 23
file vg.5qi.r28336/3126
K 10
srv_main.h
V 22
file vh.5ck.r27134/762
K 11
stdinhand.c
V 23
file 4z.5qi.r27996/3538
K 11
stdinhand.h
V 24
file 50.5ck.r26100/15471
K 11
techtools.c
V 25
file 33n.5qi.r28175/37034
K 11
techtools.h
V 24
file 33o.5ck.r27058/2134
K 10
unithand.c
V 24
file 18.5qi.r28430/14622
K 10
unithand.h
V 24
file 19.5ck.r23027/66151
K 11
unittools.c
V 24
file 1a.5qi.r28379/11395
K 11
unittools.h
V 24
file 1b.5qi.r28379/11657
K 8
voting.c
V 25
file 4ex.5ck.r26905/57525
K 8
voting.h
V 25
file 4ey.5ck.r26905/58399
END
ENDREP
id: z.5qi.r28430/18835
type: dir
pred: z.5qi.r28420/4421
count: 5888
text: 28430 14882 3940 3940 7d200f8e05e0cc3e336ca4ee68f1fdb5
props: 23990 448 166 0 e5026e1cb18fe57b41417951bfac7b19
cpath: /branches/S2_6/server
copyroot: 27474 /branches/S2_6

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r27270/69307
K 7
AUTHORS
V 24
file 5u.5ck.r22143/14016
K 7
COPYING
V 19
file 1h.0.r9643/400
K 9
ChangeLog
V 26
file 6l.5ck.r27473/7455495
K 7
INSTALL
V 21
file 6.5qi.r27778/886
K 11
Makefile.am
V 22
file 59.5ck.r27213/499
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.5qi.r28285/55509
K 10
autogen.sh
V 24
file 12o.5ck.r25794/4003
K 9
bootstrap
V 23
dir 2p5.5ck.r27114/4172
K 6
client
V 22
dir d.5qi.r28426/16330
K 6
common
V 21
dir p.5qi.r28399/8688
K 12
configure.ac
V 24
file 149.5qi.r28269/4502
K 4
data
V 22
dir w.5qi.r28399/18991
K 12
dependencies
V 24
dir 2yu.5qi.r28381/20478
K 3
doc
V 22
dir k7.5qi.r28343/2615
K 10
fc_version
V 24
file 2lo.5qj.r28399/8932
K 11
gen_headers
V 24
dir 1hsw.5qi.r28269/5092
K 2
m4
V 23
dir 12p.5qi.r28227/3547
K 7
scripts
V 23
dir 2yo.5ck.r27213/1366
K 6
server
V 22
dir z.5qi.r28430/18835
K 5
tests
V 22
dir 2g9.5ck.r27023/734
K 5
tools
V 24
dir 4pj.5qp.r28204/19388
K 12
translations
V 25
dir t0a.5qi.r28349/138165
K 7
utility
V 22
dir 1c.5qi.r28299/3132
K 3
vms
V 25
dir u9.5ck.r21528/1396085
K 5
win32
V 23
dir 2eu.5qi.r28346/1712
END
ENDREP
id: 3.5qi.r28430/20252
type: dir
pred: 3.5qi.r28426/17749
count: 19232
text: 28430 19082 1157 1157 e36d3fb272882c54420f2eb2a8430d79
props: 28037 14463 292 0 9e1d5de0253c723466868990c52c129f
cpath: /branches/S2_6
copyroot: 27474 /branches/S2_6

PLAIN
K 5
S1_14
V 21
dir 3.21.r18109/18803
K 4
S2_0
V 21
dir 3.10x.r21862/4178
K 4
S2_1
V 22
dir 3.59e.r20026/11014
K 4
S2_2
V 21
dir 3.5cy.r21861/5036
K 4
S2_3
V 21
dir 3.5f2.r24391/5183
K 4
S2_4
V 21
dir 3.5ii.r28422/5808
K 4
S2_5
V 21
dir 3.5kv.r28421/6471
K 4
S2_6
V 22
dir 3.5qi.r28430/20252
K 11
freeciv-web
V 22
dir 3.5bl.r13594/14918
END
ENDREP
id: 1.0.r28430/20849
type: dir
pred: 1.0.r28426/18346
count: 9011
text: 28430 20496 340 340 db7c6c3ad18959dd8d647e023e3a8ed7
cpath: /branches
copyroot: 0 /

PLAIN
K 8
branches
V 20
dir 1.0.r28430/20849
K 4
tags
V 19
dir 2.0.r28267/6358
K 5
trunk
V 22
dir 3.5ck.r28429/21159
K 7
website
V 21
dir 3ge.0.r22980/2263
END
ENDREP
id: 0.0.r28430/21173
type: dir
pred: 0.0.r28429/21553
count: 28430
text: 28430 21006 154 154 062e3ce4cd63d2f056806dd7238b1416
cpath: /
copyroot: 0 /

vz.5qi.t28429-1 modify true false /branches/S2_6/server/diplomats.c

_3.5qi.t28429-1 add true false /branches/S2_6/server/actiontools.c

_6.5qi.t28429-1 add true false /branches/S2_6/server/actiontools.h

5q.5qi.t28429-1 modify true false /branches/S2_6/server/Makefile.am

18.5qi.t28429-1 modify true false /branches/S2_6/server/unithand.c


21173 21323
