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