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.SectorEntityToken.VisibilityLevel; 010import com.fs.starfarer.api.campaign.rules.MemoryAPI; 011import com.fs.starfarer.api.fleet.FleetMemberAPI; 012import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 013import com.fs.starfarer.api.util.Misc; 014import com.fs.starfarer.api.util.Misc.Token; 015 016/** 017 * IsSeenByAnyFleet <factionId> 018 */ 019public class IsSeenByAnyFleet extends BaseCommandPlugin { 020 021 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 022 023 //if (true) return false; 024 025 String factionId = null; 026 if (params.size() >= 1) { 027 factionId = params.get(0).getString(memoryMap); 028 } 029 030 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 031 032 for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) { 033 if (factionId != null && !fleet.getFaction().getId().equals(factionId)) continue; 034 if (fleet.getFaction().isPlayerFaction()) continue; 035 if (fleet.getBattle() != null) continue; 036 if (fleet.isStationMode()) continue; 037 038 VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet); 039 MemoryAPI mem = fleet.getMemoryWithoutUpdate(); 040 if (!mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && 041 !mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) { 042 if (level == VisibilityLevel.NONE) continue; 043 } 044 045 float dist = Misc.getDistance(fleet.getLocation(), playerFleet.getLocation()); 046 if (dist > 1000f) continue; 047 048 return true; 049 } 050 051 return false; 052 } 053 054 private boolean isPatrol(CampaignFleetAPI fleet) { 055 if (!fleet.getMemoryWithoutUpdate().contains(MemFlags.MEMORY_KEY_PATROL_FLEET)) { 056 return false; 057 } 058 059 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) { 060 if (!member.isCivilian()) return true; 061 } 062 063 return false; 064 } 065} 066 067 068 069