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 HostileFleetNearbyAndAware extends BaseCommandPlugin { 020 021 022 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 023 024 //float range = params.get(0).getFloat(memoryMap); 025 026 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 027 for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) { 028 if (fleet.getAI() == null) continue; // dormant Remnant fleets 029 if (fleet.getFaction().isPlayerFaction()) continue; 030 if (fleet.isStationMode()) continue; 031 032 if (!fleet.isHostileTo(playerFleet)) continue; 033 if (fleet.getBattle() != null) continue; 034 035 if (Misc.isInsignificant(fleet)) { 036 continue; 037 } 038 039 040 VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet); 041// MemoryAPI mem = fleet.getMemoryWithoutUpdate(); 042// if (!mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && 043// !mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) { 044// if (level == VisibilityLevel.NONE) continue; 045// } 046 if (level == VisibilityLevel.NONE) continue; 047 048 if (fleet.getFleetData().getMembersListCopy().isEmpty()) continue; 049 050 float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation()); 051 if (dist > 1500f) continue; 052 053 //fleet.getAI().pickEncounterOption(null, playerFleet, true); 054 if (fleet.getAI() instanceof ModularFleetAIAPI) { 055 ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI(); 056 if (ai.getTacticalModule() != null && 057 (ai.getTacticalModule().isFleeing() || ai.getTacticalModule().isMaintainingContact() || 058 ai.getTacticalModule().isStandingDown())) { 059 continue; 060 } 061 } 062 063 return true; 064 } 065 066 return false; 067 } 068 069} 070 071 072 073