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