001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.awt.Color;
004import java.util.List;
005import java.util.Map;
006
007import com.fs.starfarer.api.Global;
008import com.fs.starfarer.api.campaign.CampaignFleetAPI;
009import com.fs.starfarer.api.campaign.CargoStackAPI;
010import com.fs.starfarer.api.campaign.InteractionDialogAPI;
011import com.fs.starfarer.api.campaign.TextPanelAPI;
012import com.fs.starfarer.api.campaign.rules.MemKeys;
013import com.fs.starfarer.api.campaign.rules.MemoryAPI;
014import com.fs.starfarer.api.fleet.FleetMemberAPI;
015import com.fs.starfarer.api.impl.campaign.ids.Strings;
016import com.fs.starfarer.api.impl.campaign.rulecmd.CargoScan.CargoScanResult;
017import com.fs.starfarer.api.util.Misc;
018import com.fs.starfarer.api.util.Misc.Token;
019
020public class CargoScanApplyResult extends BaseCommandPlugin {
021
022        
023        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
024                if (dialog == null) return false;
025                if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return false;
026                
027                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
028                CampaignFleetAPI other = (CampaignFleetAPI) dialog.getInteractionTarget();
029                
030                MemoryAPI memory = memoryMap.get(MemKeys.LOCAL);
031                
032                CargoScanResult result = (CargoScanResult) memory.get(CargoScan.RESULT_KEY);
033                
034                TextPanelAPI text = dialog.getTextPanel();
035                Color red = Misc.getNegativeHighlightColor();
036                
037                for (CargoStackAPI stack : result.getIllegalFound().getStacksCopy()) {
038                        playerFleet.getCargo().removeItems(stack.getType(), stack.getData(), stack.getSize());
039                        if (stack.isCommodityStack()) {
040                                AddRemoveCommodity.addCommodityLossText(stack.getCommodityId(), (int)stack.getSize(), text);
041                        } else {
042                                text.setFontSmallInsignia();
043                                text.addParagraph("Lost " + (int) stack.getSize() + Strings.X + " " + stack.getDisplayName(), red);
044                                text.highlightLastInLastPara("" + (int) stack.getSize() + Strings.X, Misc.getHighlightColor());
045                        }
046                        text.setFontInsignia();
047                }
048                
049                for (FleetMemberAPI member : result.shipsToDamage) {
050                        float crLost = Math.min(member.getRepairTracker().getBaseCR(), member.getDeployCost() * 0.5f);
051                        crLost += 0.01f * (float)Misc.random.nextInt(10);
052                        if (crLost > 0) {
053                                member.getRepairTracker().applyCREvent(-crLost, "Vindictive cargo inspection");
054                                AddRemoveCommodity.addCRLossText(member, text, crLost);
055                        }
056                        
057                }
058                
059                return true;
060        }
061
062}
063
064
065
066
067
068
069