Skip to content

Commit a4fa7a3

Browse files
authored
Merge pull request #7238 from IllianiBird/factionStandingNegotiation
Improvement: Implemented Faction Standing-based Negotiation Modifiers
2 parents a7b089e + 29d3fe0 commit a4fa7a3

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

MekHQ/src/mekhq/campaign/market/contractMarket/AtbMonthlyContractMarket.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@
7676
import mekhq.campaign.universe.PlanetarySystem;
7777
import mekhq.campaign.universe.RandomFactionGenerator;
7878
import mekhq.campaign.universe.Systems;
79+
import mekhq.campaign.universe.factionStanding.FactionStandingUtilities;
80+
import mekhq.campaign.universe.factionStanding.FactionStandings;
7981

8082
/**
8183
* Contract offers that are generated monthly under AtB rules.
@@ -785,7 +787,7 @@ private void setContractClauses(AtBContract contract, int unitRatingMod, Campaig
785787

786788
if (Factions.getInstance().getFaction(contract.getEnemyCode()).isClan() &&
787789
!Factions.getInstance().getFaction(contract.getEmployerCode()).isClan()) {
788-
for (int i = 0; i < 4; i++) {
790+
for (int i = 0; i < mods.mods.length; i++) {
789791
if (i == CLAUSE_SALVAGE) {
790792
mods.mods[i] -= 2;
791793
} else {
@@ -802,10 +804,19 @@ private void setContractClauses(AtBContract contract, int unitRatingMod, Campaig
802804
}
803805
}
804806

807+
if (campaign.getCampaignOptions().isUseFactionStandingNegotiationSafe()) {
808+
FactionStandings standings = campaign.getFactionStandings();
809+
double regard = standings.getRegardForFaction(contract.getEmployerCode(), true);
810+
int negotiationModifier = FactionStandingUtilities.getNegotiationModifier(regard);
811+
for (int i = 0; i < mods.mods.length; i++) {
812+
mods.mods[i] += negotiationModifier;
813+
}
814+
}
815+
805816
int[][] missionMods = { { 1, 0, 1, 0 }, { 0, 1, -1, -3 }, { -3, 0, 2, 1 }, { -2, 1, -1, -1 }, { -2, 0, 2, 3 },
806817
{ -1, 1, 1, 1 }, { -2, 3, -2, -1 }, { 2, 2, -1, -1 }, { 0, 2, 2, 1 }, { -1, 0, 1, 2 },
807818
{ -1, -2, 1, -1 }, { -1, -1, 2, 1 } };
808-
for (int i = 0; i < 4; i++) {
819+
for (int i = 0; i < mods.mods.length; i++) {
809820
mods.mods[i] += missionMods[contract.getContractType().ordinal()][i];
810821
}
811822

MekHQ/src/mekhq/campaign/market/contractMarket/CamOpsContractMarket.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
import mekhq.campaign.universe.Faction;
6767
import mekhq.campaign.universe.Factions;
6868
import mekhq.campaign.universe.enums.HiringHallLevel;
69+
import mekhq.campaign.universe.factionStanding.FactionStandingUtilities;
70+
import mekhq.campaign.universe.factionStanding.FactionStandings;
6971

7072
/**
7173
* Contract Market as described in Campaign Operations, 4th printing.
@@ -169,6 +171,14 @@ public void rerollClause(AtBContract contract, int clause, Campaign campaign) {
169171
}
170172
int negotiationSkill = findNegotiationSkill(campaign);
171173
int ratingMod = campaign.getReputation().getReputationModifier();
174+
175+
if (campaign.getCampaignOptions().isUseFactionStandingNegotiationSafe()) {
176+
FactionStandings standings = campaign.getFactionStandings();
177+
double regard = standings.getRegardForFaction(contract.getEmployerCode(), true);
178+
int negotiationModifier = FactionStandingUtilities.getNegotiationModifier(regard);
179+
ratingMod += negotiationModifier;
180+
}
181+
172182
int margin = rollOpposedNegotiation(negotiationSkill, ratingMod);
173183
int change = margin / 2;
174184
ContractTerms terms = getContractTerms(campaign, contract);

0 commit comments

Comments
 (0)