001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage; 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.ai.ModularFleetAIAPI; 011import com.fs.starfarer.api.campaign.rules.MemoryAPI; 012import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 013import com.fs.starfarer.api.util.Misc; 014import com.fs.starfarer.api.util.Misc.Token; 015 016/** 017 * HostileFleetNearbyAndAware 018 */ 019public class FactionFleetNearbyAndAware extends BaseCommandPlugin { 020 021 022 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 023 024 String factionId = params.get(0).getString(memoryMap); 025 026 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 027 for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) { 028 if (fleet.getFaction().isPlayerFaction()) continue; 029 030 if (!fleet.getFaction().getId().equals(factionId)) continue; 031 if (fleet.getBattle() != null) continue; 032 if (fleet.isStationMode()) continue; 033 034 035 VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet); 036 if (level == VisibilityLevel.NONE) continue; 037 038 if (fleet.getFleetData().getMembersListCopy().isEmpty()) continue; 039 040 float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation()); 041 if (dist > 750f) continue; 042 043 //fleet.getAI().pickEncounterOption(null, playerFleet, true); 044 if (fleet.getAI() instanceof ModularFleetAIAPI) { 045 ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI(); 046 if (ai.getTacticalModule() != null && 047 (ai.getTacticalModule().isFleeing() || ai.getTacticalModule().isMaintainingContact() || 048 ai.getTacticalModule().isStandingDown())) { 049 continue; 050 } 051 } 052 053 return true; 054 } 055 056 return false; 057 } 058 059} 060 061 062 063