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.InteractionDialogAPI;
009import com.fs.starfarer.api.campaign.rules.MemoryAPI;
010import com.fs.starfarer.api.fleet.FleetMemberAPI;
011import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
012import com.fs.starfarer.api.util.Misc;
013import com.fs.starfarer.api.util.Misc.Token;
014
015/**
016 * IsSoughtByPatrols <factionId>
017 */
018public class IsSoughtByPatrols extends BaseCommandPlugin {
019
020        
021        public static boolean areFactionPatrolsSeekingPlayer(String factionId) {
022                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
023
024                for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
025                        if (!fleet.getFaction().getId().equals(factionId)) continue;
026                        if (!isPatrol(fleet)) continue;
027                        if (fleet.getFaction().isPlayerFaction()) continue;
028                        if (fleet.getBattle() != null) continue;
029                        
030                        MemoryAPI mem = fleet.getMemoryWithoutUpdate();
031                        
032                        boolean caresAboutTransponder = Misc.caresAboutPlayerTransponder(fleet);
033                        
034                        float dist = Misc.getDistance(fleet.getLocation(), playerFleet.getLocation());
035                        if (dist > 1000f) continue;
036                        
037                        if ((mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && caresAboutTransponder) || 
038                                        mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) {
039                                return true;
040                        }
041                        
042                }
043
044                return false;
045        }
046        
047        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
048                
049                String factionId = params.get(0).getString(memoryMap);
050                
051                return areFactionPatrolsSeekingPlayer(factionId);
052//
053//              CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
054//
055//              for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
056//                      if (!fleet.getFaction().getId().equals(factionId)) continue;
057//                      if (!isPatrol(fleet)) continue;
058//                      if (fleet.getFaction().isPlayerFaction()) continue;
059//                      if (fleet.getBattle() != null) continue;
060//                      
061//                      MemoryAPI mem = fleet.getMemoryWithoutUpdate();
062//                      
063////                    boolean caresAboutTransponder = true;
064////                    if (fleet.getFaction().getCustomBoolean(Factions.CUSTOM_ALLOWS_TRANSPONDER_OFF_TRADE)) {
065////                            caresAboutTransponder = false;
066////                    }
067////                    MarketAPI source = Misc.getSourceMarket(fleet);
068////                    if (source != null && source.hasCondition(Conditions.FREE_PORT)) {
069////                            caresAboutTransponder = false;
070////                    }
071//                      boolean caresAboutTransponder = Misc.caresAboutPlayerTransponder(fleet);
072//                      
073//                      //VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet);
074//                      
075//                      float dist = Misc.getDistance(fleet.getLocation(), playerFleet.getLocation());
076//                      if (dist > 1000f) continue;
077//                      
078//                      if ((mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && caresAboutTransponder) || 
079//                                      mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) {
080//                              return true;
081//                      }
082//                      
083//              }
084//
085//              return false;
086        }
087        
088        public static boolean isPatrol(CampaignFleetAPI fleet) {
089                if (!fleet.getMemoryWithoutUpdate().contains(MemFlags.MEMORY_KEY_PATROL_FLEET)) {
090                        return false;
091                }
092                
093                for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
094                        if (!member.isCivilian()) return true;
095                }
096                
097                return false;
098        }
099}
100
101
102
103