Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package data.scripts.hullmods;
- import com.fs.starfarer.api.campaign.CampaignFleetAPI;
- import com.fs.starfarer.api.combat.HullModEffect;
- import com.fs.starfarer.api.combat.HullModFleetEffect;
- import com.fs.starfarer.api.combat.MutableShipStatsAPI;
- import com.fs.starfarer.api.combat.ShipAPI;
- import com.fs.starfarer.api.combat.ShipAPI.HullSize;
- import com.fs.starfarer.api.fleet.FleetMemberAPI;
- import com.fs.starfarer.api.fleet.RepairTrackerAPI;
- import java.util.*;
- // NOTE: IT IS EXTREMELY IMPORTANT THAT ONLY ONE OF THESE HULLMODS ACTUALLY DOES ANYTHING!
- // KEEP ALL OF THESE SIMILAR HULLMODS IN THE SAME FILE!
- // THEY WILL STILL WORK PROPERLY AND AVOID DUPLICATION ERRORS!
- public class MobileHeadquarters implements HullModEffect, HullModFleetEffect {
- private static final List<String> hullmodIds = new ArrayList<>();
- static {
- hullmodIds.add("mobile_headquarters");
- hullmodIds.add("mobile_starbase");
- hullmodIds.add("mobile_resupplier");
- hullmodIds.add("mobile_autofactory");
- }
- public MobileHeadquarters() {
- }
- @Override
- public void advanceInCampaign(FleetMemberAPI member2, float amount) {
- }
- @Override
- public void advanceInCombat(ShipAPI ship, float amount) {
- }
- @Override
- public void applyEffectsAfterShipCreation(ShipAPI ship, String id) {
- }
- @Override
- public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
- }
- @Override
- public boolean isApplicableToShip(ShipAPI ship) {
- return true;
- }
- public static final float MOBILE_RS_TOTAL_SUPPLIES = 250f;
- public static final float MOBILE_HQ_TOTAL_SUPPLIES = 500f;
- public static final float MOBILE_AF_TOTAL_SUPPLIES = 1000f;
- public static final float MOBILE_SB_TOTAL_SUPPLIES = 2500f;
- @Override
- public String getDescriptionParam(int index, HullSize hullSize) {
- if (index == 0) {
- return "" + (int) MOBILE_HQ_TOTAL_SUPPLIES;
- }
- return null;
- }
- @Override
- public void advanceInCampaign(CampaignFleetAPI fleet) {
- float HQCount = 0;
- float fullRecoverySuppliesRemaining;
- float recoverySuppliesRemaining = 0;
- float totalRecoverySupplies = 0;
- if (fleet != null) {
- for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
- if (member.isMothballed() || !member.canBeDeployedForCombat()) {
- continue;
- }
- for (String modId : member.getVariant().getHullMods()) {
- switch (modId) {
- case "mobile_starbase":
- HQCount++;
- recoverySuppliesRemaining += MOBILE_SB_TOTAL_SUPPLIES * member.getRepairTracker().getCR();
- break;
- case "mobile_autofactory":
- HQCount++;
- recoverySuppliesRemaining += MOBILE_AF_TOTAL_SUPPLIES * member.getRepairTracker().getCR();
- break;
- case "mobile_headquarters":
- HQCount++;
- recoverySuppliesRemaining += MOBILE_HQ_TOTAL_SUPPLIES * member.getRepairTracker().getCR();
- break;
- case "mobile_resupplier":
- HQCount++;
- recoverySuppliesRemaining += MOBILE_RS_TOTAL_SUPPLIES * member.getRepairTracker().getCR();
- break;
- default:
- }
- }
- }
- fullRecoverySuppliesRemaining = recoverySuppliesRemaining;
- if (HQCount > 0 && (int) fullRecoverySuppliesRemaining > 0) {
- for (FleetMemberAPI member : fleet.getFleetData().getMembersInPriorityOrder()) {
- if (member.isMothballed()) {
- continue;
- }
- boolean stop = false;
- for (String modId : member.getVariant().getHullMods()) {
- if (hullmodIds.contains(modId)) {
- stop = true;
- }
- }
- if (stop) {
- continue;
- }
- RepairTrackerAPI repair = member.getRepairTracker();
- if (repair.getBaseCR() < repair.getMaxCR()) {
- float costToMaxCR = member.getStats().getBaseSupplyUsePerDay().getModifiedValue() * (repair.getMaxCR() - repair.getBaseCR()) / repair.getRecoveryRate();
- // UNCOMMENT THIS, UOMOZ: costToMaxCR *= member.getDeployCost() * 10f;
- float recoveredSupplyCost;
- if (costToMaxCR > recoverySuppliesRemaining) {
- recoveredSupplyCost = recoverySuppliesRemaining;
- repair.setCR(repair.getBaseCR() + (recoveredSupplyCost / costToMaxCR) * (repair.getMaxCR() - repair.getBaseCR()));
- } else {
- recoveredSupplyCost = costToMaxCR;
- repair.setCR(repair.getMaxCR());
- }
- totalRecoverySupplies += recoveredSupplyCost;
- recoverySuppliesRemaining -= recoveredSupplyCost;
- }
- }
- // The way this math works, each HQ ship will reach 0 CR at the same time
- float loadRatio = totalRecoverySupplies / fullRecoverySuppliesRemaining;
- if (loadRatio > 0) {
- for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
- if (member.isMothballed() || !member.canBeDeployedForCombat()) {
- continue;
- }
- for (String modId : member.getVariant().getHullMods()) {
- if (hullmodIds.contains(modId)) {
- member.getRepairTracker().applyCREvent(-1f * member.getRepairTracker().getBaseCR() * loadRatio, "Fleet maintenance");
- }
- }
- }
- }
- }
- }
- }
- @Override
- public void onFleetSync(CampaignFleetAPI fleet) {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement