Feature #620 ยป 0005-Pass-briber-unit-to-Unit_Bribe_Cost_Pct-effects-as-o.patch
| ai/default/aidiplomat.c | ||
|---|---|---|
|     } | ||
|     /* Should we make the expense? */ | ||
|     cost = unit_bribe_cost(pvictim, pplayer); | ||
|     cost = unit_bribe_cost(pvictim, pplayer, punit); | ||
|     if (!threat) { | ||
|       /* Don't empty our treasure without good reason! */ | ||
|       gold_avail = pplayer->economic.gold - dai_gold_reserve(pplayer); | ||
| client/text.c | ||
|---|---|---|
|     if (owner == plr || client_is_global_observer()) { | ||
|       /* Show bribe cost for own units. */ | ||
|       astr_add_line(&str, _("Probable bribe cost: %d"), | ||
|                     unit_bribe_cost(punit, nullptr)); | ||
|                     unit_bribe_cost(punit, nullptr, nullptr)); | ||
|     } else { | ||
|       /* We can only give an (lower) boundary for units of other players. */ | ||
|       astr_add_line(&str, _("Estimated bribe cost: > %d"), | ||
|                     unit_bribe_cost(punit, plr)); | ||
|                     unit_bribe_cost(punit, plr, nullptr)); | ||
|     } | ||
|     if ((plr == nullptr || owner == plr) | ||
| common/unit.c | ||
|---|---|---|
|   unit. For a damaged unit the price is reduced. For a veteran unit, it is | ||
|   increased. | ||
|   @param  punit  Unit to bribe | ||
|   @param  briber Player that wants to bribe | ||
|   @return        Bribe cost | ||
|   @param  punit       Unit to bribe | ||
|   @param  briber      Player that wants to bribe | ||
|   @param  briber_unit Unit that does the bribing | ||
|   @return             Bribe cost | ||
| **************************************************************************/ | ||
| int unit_bribe_cost(struct unit *punit, struct player *briber) | ||
| int unit_bribe_cost(const struct unit *punit, const struct player *briber, | ||
|                     const struct unit *briber_unit) | ||
| { | ||
|   int cost, default_hp; | ||
|   struct tile *ptile = unit_tile(punit); | ||
| ... | ... | |
|   cost *= unit_build_shield_cost_base(punit) / 10.0; | ||
|   /* Rule set specific cost modification */ | ||
|   cost += (cost | ||
|            * get_target_bonus_effects(NULL, | ||
|                                       &(const struct req_context) { | ||
|                                         .player = owner, | ||
|                                         .city = game_city_by_number( | ||
|                                           punit->homecity | ||
|                                         ), | ||
|                                         .tile = ptile, | ||
|                                         .unit = punit, | ||
|                                         .unittype = ptype, | ||
|                                       }, | ||
|                                       &(const struct req_context) { | ||
|                                         .player = briber, | ||
|                                       }, | ||
|                                       EFT_UNIT_BRIBE_COST_PCT)) | ||
|   cost += (cost * get_target_bonus_effects(NULL, | ||
|                     &(const struct req_context) { | ||
|                       .player = owner, | ||
|                       .city = game_city_by_number(punit->homecity), | ||
|                       .tile = ptile, | ||
|                       .unit = punit, | ||
|                       .unittype = ptype, | ||
|                     }, | ||
|                     &(const struct req_context) { | ||
|                       .player = briber, | ||
|                       .unit = briber_unit, | ||
|                       .unittype = briber_unit ? unit_type_get(briber_unit) | ||
|                                               : nullptr, | ||
|                       .tile = briber_unit ? unit_tile(briber_unit) | ||
|                                           : nullptr, | ||
|                       .city = briber_unit | ||
|                         ? game_city_by_number(briber_unit->homecity) | ||
|                         : nullptr, | ||
|                     }, | ||
|                     EFT_UNIT_BRIBE_COST_PCT)) | ||
|        / 100; | ||
|   /* Veterans are not cheap. */ | ||
| common/unit.h | ||
|---|---|---|
| void unit_set_ai_data(struct unit *punit, const struct ai_type *ai, | ||
|                       void *data); | ||
| int unit_bribe_cost(struct unit *punit, struct player *briber); | ||
| int unit_bribe_cost(const struct unit *punit, const struct player *briber, | ||
|                     const struct unit *briber_unit); | ||
| bool unit_transport_load(struct unit *pcargo, struct unit *ptrans, | ||
|                          bool force); | ||
| server/diplomats.c | ||
|---|---|---|
|   log_debug("bribe-unit: unit: %d", pdiplomat->id); | ||
|   /* Get bribe cost, ignoring any previously saved value. */ | ||
|   bribe_cost = unit_bribe_cost(pvictim, pplayer); | ||
|   bribe_cost = unit_bribe_cost(pvictim, pplayer, pdiplomat); | ||
|   /* If player doesn't have enough gold, can't bribe. */ | ||
|   if (pplayer->economic.gold < bribe_cost) { | ||
| server/unithand.c | ||
|---|---|---|
|                                           pactor, punit)) { | ||
|       dsend_packet_unit_action_answer(pc, | ||
|                                       actor_id, target_id, | ||
|                                       unit_bribe_cost(punit, pplayer), | ||
|                                       unit_bribe_cost(punit, pplayer, | ||
|                                                       pactor), | ||
|                                       action_type, request_kind); | ||
|     } else { | ||
|       illegal_action(pplayer, pactor, action_type, | ||