From 7ed0bc39e97755ea571f641b3ef76a8fc49c3b10 Mon Sep 17 00:00:00 2001 From: algebro Date: Mon, 30 Sep 2024 17:26:10 -0400 Subject: [PATCH 1/3] fix AtBMonthlyContractMarket payment multiplier --- MekHQ/src/mekhq/campaign/Campaign.java | 24 +++++++++++++++---- .../AtbMonthlyContractMarket.java | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/MekHQ/src/mekhq/campaign/Campaign.java b/MekHQ/src/mekhq/campaign/Campaign.java index f79729e96c..ba8a8c4af4 100644 --- a/MekHQ/src/mekhq/campaign/Campaign.java +++ b/MekHQ/src/mekhq/campaign/Campaign.java @@ -6835,10 +6835,9 @@ public String getUnitRatingText() { /** * Retrieves the unit rating modifier based on campaign options. * If the unit rating method is not enabled, it returns the default value of - * IUnitRating.DRAGOON_C. - * If the unit rating method uses FMMR, it returns the unit rating as an - * integer. - * Otherwise, it calculates the modifier using the getAtBModifier method. + * IUnitRating.DRAGOON_C. If the unit rating method uses FMMR, it returns the + * unit rating as an integer. Otherwise, it calculates the modifier using the + * getAtBModifier method. * * @return The unit rating modifier based on the campaign options. */ @@ -6851,11 +6850,26 @@ public int getAtBUnitRatingMod() { : reputation.getAtbModifier(); } + /** + * Retrieves the unit rating modifier as described in Campaign Operations. This value is equal + * to the total reputation score divided by ten, rounded down to the nearest whole number. + * + * @return The unit rating modifier as described in Campaign Operations. + */ + public int getCamOpsUnitRatingMod() { + return getReputation().getReputationRating() / 10; + } + + /** + * Retrieves the unit reputation factor based on the rating method defined in the Campaign Options. + * + * @return the reputation factor for the selected unit rating method. + */ public int getReputationFactor() { return switch (campaignOptions.getUnitRatingMethod()) { case NONE -> 5; case FLD_MAN_MERCS_REV -> getAtBUnitRatingMod() * 2; - case CAMPAIGN_OPS -> (int) ((getReputation().getReputationRating() * 0.2) + 0.5); + case CAMPAIGN_OPS -> (int) ((getCamOpsUnitRatingMod() * 0.2) + 0.5); }; } diff --git a/MekHQ/src/mekhq/campaign/market/contractMarket/AtbMonthlyContractMarket.java b/MekHQ/src/mekhq/campaign/market/contractMarket/AtbMonthlyContractMarket.java index 220071415e..7081e06851 100644 --- a/MekHQ/src/mekhq/campaign/market/contractMarket/AtbMonthlyContractMarket.java +++ b/MekHQ/src/mekhq/campaign/market/contractMarket/AtbMonthlyContractMarket.java @@ -460,7 +460,7 @@ public double calculatePaymentMultiplier(Campaign campaign, AtBContract contract double multiplier = 1.0; // IntOps reputation factor then Dragoons rating if (campaign.getCampaignOptions().getUnitRatingMethod().isCampaignOperations()) { - multiplier *= campaign.getReputationFactor(); + multiplier *= (unitRatingMod * 0.2) + 0.5; } else { if (unitRatingMod >= IUnitRating.DRAGOON_A) { multiplier *= 2.0; From c4579926a48fb2d0f42a2a4e95f67bca82d080d9 Mon Sep 17 00:00:00 2001 From: algebro Date: Mon, 30 Sep 2024 21:00:46 -0400 Subject: [PATCH 2/3] move getReputationModifier() to reputationcontroller --- MekHQ/src/mekhq/campaign/Campaign.java | 12 +----------- .../CamOpsReputation/AverageExperienceRating.java | 14 ++++++-------- .../CamOpsReputation/ReputationController.java | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/MekHQ/src/mekhq/campaign/Campaign.java b/MekHQ/src/mekhq/campaign/Campaign.java index ba8a8c4af4..ceac1b7f88 100644 --- a/MekHQ/src/mekhq/campaign/Campaign.java +++ b/MekHQ/src/mekhq/campaign/Campaign.java @@ -6850,16 +6850,6 @@ public int getAtBUnitRatingMod() { : reputation.getAtbModifier(); } - /** - * Retrieves the unit rating modifier as described in Campaign Operations. This value is equal - * to the total reputation score divided by ten, rounded down to the nearest whole number. - * - * @return The unit rating modifier as described in Campaign Operations. - */ - public int getCamOpsUnitRatingMod() { - return getReputation().getReputationRating() / 10; - } - /** * Retrieves the unit reputation factor based on the rating method defined in the Campaign Options. * @@ -6869,7 +6859,7 @@ public int getReputationFactor() { return switch (campaignOptions.getUnitRatingMethod()) { case NONE -> 5; case FLD_MAN_MERCS_REV -> getAtBUnitRatingMod() * 2; - case CAMPAIGN_OPS -> (int) ((getCamOpsUnitRatingMod() * 0.2) + 0.5); + case CAMPAIGN_OPS -> (int) ((getReputation().getReputationModifier() * 0.2) + 0.5); }; } diff --git a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/AverageExperienceRating.java b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/AverageExperienceRating.java index fcc7844487..a74ed5a1e6 100644 --- a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/AverageExperienceRating.java +++ b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/AverageExperienceRating.java @@ -18,8 +18,6 @@ */ package mekhq.campaign.rating.CamOpsReputation; -import java.util.function.Consumer; - import megamek.codeUtilities.MathUtility; import megamek.common.Crew; import megamek.common.Entity; @@ -70,13 +68,13 @@ protected static SkillLevel getSkillLevel(Campaign campaign, boolean log) { } /** - * Retrieves the reputation modifier. + * Retrieves the average experience level of the campaign. Useful for AtB Systems. * - * @param averageSkillLevel the average skill level to calculate the reputation - * modifier for + * @param averageSkillLevel the average skill level for which to calculate the reputation + * modifier * @return the reputation modifier for the camera operator */ - protected static int getReputationModifier(SkillLevel averageSkillLevel) { + protected static int getAverageExperienceModifier(SkillLevel averageSkillLevel) { int modifier = switch (averageSkillLevel) { case NONE, ULTRA_GREEN, GREEN -> 5; case REGULAR -> 10; @@ -85,8 +83,8 @@ protected static int getReputationModifier(SkillLevel averageSkillLevel) { }; logger.debug("Reputation Rating = {}, +{}", - averageSkillLevel.toString(), - modifier); + averageSkillLevel.toString(), + modifier); return modifier; } diff --git a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java index 965cd66407..4342a99aa5 100644 --- a/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java +++ b/MekHQ/src/mekhq/campaign/rating/CamOpsReputation/ReputationController.java @@ -33,7 +33,7 @@ import java.util.stream.Collectors; import static mekhq.campaign.rating.CamOpsReputation.AverageExperienceRating.getAtBModifier; -import static mekhq.campaign.rating.CamOpsReputation.AverageExperienceRating.getReputationModifier; +import static mekhq.campaign.rating.CamOpsReputation.AverageExperienceRating.getAverageExperienceModifier; import static mekhq.campaign.rating.CamOpsReputation.AverageExperienceRating.getSkillLevel; import static mekhq.campaign.rating.CamOpsReputation.CombatRecordRating.calculateCombatRecordRating; import static mekhq.campaign.rating.CamOpsReputation.CommandRating.calculateCommanderRating; @@ -120,7 +120,7 @@ public ReputationController() { public void initializeReputation(Campaign campaign) { // step one: calculate average experience rating averageSkillLevel = getSkillLevel(campaign, true); - averageExperienceRating = getReputationModifier(averageSkillLevel); + averageExperienceRating = getAverageExperienceModifier(averageSkillLevel); atbModifier = getAtBModifier(campaign); // step two: calculate command rating @@ -183,6 +183,16 @@ private void calculateTotalReputation() { reputationRating += otherModifiers; } + /** + * Retrieves the unit rating modifier as described in Campaign Operations. This value is equal + * to the total reputation score divided by ten, rounded down to the nearest whole number. + * + * @return The unit rating modifier as described in Campaign Operations. + */ + public int getReputationModifier() { + return reputationRating / 10; + } + /** * Retrieves the report text for the given campaign. * From b3341a5a6cca30754089fe155109047554f4ec6b Mon Sep 17 00:00:00 2001 From: algebro Date: Mon, 30 Sep 2024 21:24:20 -0400 Subject: [PATCH 3/3] use new getReputationModifier() --- MekHQ/src/mekhq/campaign/Campaign.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MekHQ/src/mekhq/campaign/Campaign.java b/MekHQ/src/mekhq/campaign/Campaign.java index ceac1b7f88..3a8831b2d6 100644 --- a/MekHQ/src/mekhq/campaign/Campaign.java +++ b/MekHQ/src/mekhq/campaign/Campaign.java @@ -6859,7 +6859,7 @@ public int getReputationFactor() { return switch (campaignOptions.getUnitRatingMethod()) { case NONE -> 5; case FLD_MAN_MERCS_REV -> getAtBUnitRatingMod() * 2; - case CAMPAIGN_OPS -> (int) ((getReputation().getReputationModifier() * 0.2) + 0.5); + case CAMPAIGN_OPS -> (int) (getReputation().getReputationModifier() * 0.2 + 0.5); }; }