001package com.fs.starfarer.api.impl.campaign.rulecmd; 002 003import java.util.List; 004import java.util.Map; 005 006import com.fs.starfarer.api.campaign.CampaignFleetAPI; 007import com.fs.starfarer.api.campaign.InteractionDialogAPI; 008import com.fs.starfarer.api.campaign.SectorEntityToken; 009import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI; 010import com.fs.starfarer.api.campaign.rules.MemoryAPI; 011import com.fs.starfarer.api.util.Misc; 012import com.fs.starfarer.api.util.Misc.Token; 013 014 015/** 016 * SetNearbyFleetsVariable <range> <faction id> <variable name> <value> <duration> 017 */ 018public class SetNearbyFleetsVariable extends BaseCommandPlugin { 019 020 //BroadcastPlayerAction <type> <range> <responseVariable> 021 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 022 023 024 float range = Float.parseFloat(params.get(0).string); 025 String factionId = params.get(1).getString(memoryMap); 026 String varName = params.get(2).string; 027 String value = params.get(3).getString(memoryMap); 028 float dur = Float.parseFloat(params.get(4).string); 029 030 final SectorEntityToken target = dialog.getInteractionTarget(); 031 if (target.getContainingLocation() == null) return false; 032 033 List<CampaignFleetAPI> fleets = target.getContainingLocation().getFleets(); 034 for (CampaignFleetAPI fleet : fleets) { 035 if (fleet == target) continue; 036 if (!fleet.getFaction().getId().equals(factionId)) continue; 037 if (fleet.getAI() instanceof CampaignFleetAIAPI) { 038 float dist = Misc.getDistance(target.getLocation(), fleet.getLocation()); 039 if (dist <= range) { 040 fleet.getMemoryWithoutUpdate().set(varName, value, dur); 041 } 042 } 043 } 044 045 return true; 046 } 047 048 049} 050 051 052 053 054 055