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

I see this line in server/diplomat.c in diplomat_bribe():

  if (pvictim->bribe_cost == -1) {
    freelog (LOG_ERROR, "Bribe cost -1 in diplomat_bribe by %s",
             pplayer->name);
    pvictim->bribe_cost = unit_bribe_cost (pvictim);
  }

I was wondering where was calculated this value, I found it in
server/unithand.c in handle_unit_bribe_inq():

void handle_unit_bribe_inq(struct connection *pc, int unit_id)
{
  struct player *pplayer = pc->player;
  struct unit *punit = find_unit_by_id(unit_id);

  if (pplayer && punit) {
    punit->bribe_cost = unit_bribe_cost(punit);
    dsend_packet_unit_bribe_info(pc, unit_id, punit->bribe_cost);
  }
}

So this value is calculated only when you ask the bribe cost to the
server. With a hacked client, it's very easy to don't ask a such info.
Then the value is not calculated (produce a LOG_ERROR) or is an old
value (dangerous). This should be recalculated in diplomat_bribe() to
work properly.


_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to