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