001package com.fs.starfarer.api.impl.campaign.rulecmd; 002 003import java.util.List; 004import java.util.Map; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.CampaignFleetAPI; 008import com.fs.starfarer.api.campaign.CargoStackAPI; 009import com.fs.starfarer.api.campaign.FactionAPI; 010import com.fs.starfarer.api.campaign.InteractionDialogAPI; 011import com.fs.starfarer.api.campaign.rules.MemKeys; 012import com.fs.starfarer.api.campaign.rules.MemoryAPI; 013import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope; 014import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions; 015import com.fs.starfarer.api.impl.campaign.rulecmd.CustomsInspectionGenerateResult.CargoInspectionResult; 016import com.fs.starfarer.api.util.Misc.Token; 017 018public class CustomsInspectionApplyRepLoss extends BaseCommandPlugin { 019 020 021 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 022 if (dialog == null) return false; 023 if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return false; 024 025 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 026 CampaignFleetAPI other = (CampaignFleetAPI) dialog.getInteractionTarget(); 027 FactionAPI faction = other.getFaction(); 028 029 MemoryAPI memory = memoryMap.get(MemKeys.ENTITY); 030 CargoInspectionResult result = (CargoInspectionResult) memory.get("$cargoInspectionResult"); 031 032 float totalIllegalFound = 0f; 033 for (CargoStackAPI stack : result.getIllegalFound().getStacksCopy()) { 034 totalIllegalFound += stack.getSize(); 035 } 036 float capacity = playerFleet.getCargo().getMaxCapacity(); 037 038 float repLoss = totalIllegalFound / 10f * totalIllegalFound / capacity; 039 repLoss = Math.round(repLoss); 040 if (repLoss > 5) repLoss = 5f; 041 if (repLoss == 0 && totalIllegalFound > 0) repLoss = 1f; 042 if (repLoss > 0) { 043 RepActionEnvelope envelope = new RepActionEnvelope(RepActions.CUSTOMS_CAUGHT_SMUGGLING, repLoss, dialog.getTextPanel()); 044 Global.getSector().adjustPlayerReputation(envelope, faction.getId()); 045 } 046 return true; 047 } 048 049} 050 051 052 053 054 055 056