Skip to content

Commit

Permalink
Merge pull request #4954 from Algebro7/fix-atbmonthly-payment-multiplier
Browse files Browse the repository at this point in the history
Fix AtBMonthlyContractMarket payment multiplier
  • Loading branch information
IllianiCBT authored Oct 2, 2024
2 parents 3f8f39c + b3341a5 commit 9da71cd
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 16 deletions.
14 changes: 9 additions & 5 deletions MekHQ/src/mekhq/campaign/Campaign.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand All @@ -6851,11 +6850,16 @@ public int getAtBUnitRatingMod() {
: reputation.getAtbModifier();
}

/**
* 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) (getReputation().getReputationModifier() * 0.2 + 0.5);
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -85,8 +83,8 @@ protected static int getReputationModifier(SkillLevel averageSkillLevel) {
};

logger.debug("Reputation Rating = {}, +{}",
averageSkillLevel.toString(),
modifier);
averageSkillLevel.toString(),
modifier);

return modifier;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
*
Expand Down

0 comments on commit 9da71cd

Please sign in to comment.