From b1f72760ed3f1c024cf7227b63e03eefbb106068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20W=C3=A4rmedal?= Date: Tue, 4 Jun 2024 16:13:23 +0200 Subject: [PATCH] Change: Bribing if other co has excl. rights Motivation / Problem A bribe can void an Exclusive Transport Rights constract, but it is not possible to bribe a town that already has an outstanding opinion of you. This causes a lockout where a popular company can not attempt to void a contract, making it much easier to use exclusive transport rights in an offensive manner than as a defensive measure. Description This fixes so that bribing is possible if: - The bribery setting is enabled AND - You have a lower than Outstanding rating in the town OR - Someone else currently has an Exclusive Transport Rights contract with the town. Limitations N/A --- src/town_cmd.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 1f0aecd4ab..4c3c63ea9b 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3575,8 +3575,17 @@ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t) for (uint i = 0; i != lengthof(_town_action_costs); i++) { const TownActions cur = (TownActions)(1 << i); - /* Is the company not able to bribe ? */ - if (cur == TACT_BRIBE && (!_settings_game.economy.bribe || t->ratings[cid] >= RATING_BRIBE_MAXIMUM)) continue; + /* Is the company prohibited from bribing ? */ + if (cur == TACT_BRIBE) { + /* Company can't bribe if setting is disabled */ + if (!_settings_game.economy.bribe) continue; + /* Company can bribe if another company has exclusive transport rights, + * or its standing with the town is less than outstanding. */ + if (t->ratings[cid] >= RATING_BRIBE_MAXIMUM) { + if (t->exclusivity == _current_company) continue; + if (t->exclusive_counter == 0) continue; + } + } /* Is the company not able to buy exclusive rights ? */ if (cur == TACT_BUY_RIGHTS && (!_settings_game.economy.exclusive_rights || t->exclusive_counter != 0)) continue;