1package com.fs.starfarer.api.impl.campaign.intel.bases;
3import java.util.ArrayList;
4import java.util.Iterator;
5import java.util.LinkedHashSet;
7import java.util.Random;
10import com.fs.starfarer.api.EveryFrameScript;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.FactionAPI;
13import com.fs.starfarer.api.campaign.StarSystemAPI;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.impl.campaign.DebugFlags;
16import com.fs.starfarer.api.impl.campaign.ids.Conditions;
17import com.fs.starfarer.api.impl.campaign.ids.Factions;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel.PirateBaseTier;
20import com.fs.starfarer.api.impl.campaign.intel.events.PiracyRespiteScript;
21import com.fs.starfarer.api.util.IntervalUtil;
22import com.fs.starfarer.api.util.Misc;
23import com.fs.starfarer.api.util.WeightedRandomPicker;
27 public static final String
KEY =
"$core_PR_pirateBaseManager";
50 protected Random
random =
new Random();
52 protected List<PirateBaseIntel>
bases =
new ArrayList<PirateBaseIntel>();
64 intel.advance(amount);
81 Iterator<MarketAPI> iter = markets.iterator();
82 while (iter.hasNext()) {
83 if (iter.next().isHidden()) iter.remove();
86 if (markets.isEmpty()) {
111 Iterator<PirateBaseIntel> iter =
bases.iterator();
112 while (iter.hasNext()) {
135 Set<StarSystemAPI> systems =
new LinkedHashSet<StarSystemAPI>();
138 if (system !=
null) {
142 if (systems.isEmpty())
return;
144 float marketTotal = markets.size();
145 int numBases = (int) (marketTotal / 2);
146 if (numBases < 1) numBases = 1;
147 if (numBases > 2) numBases = 2;
150 if (
bases.size() >= numBases) {
156 float bestWeight = 0f;
161 if (m.getFaction().isPlayerFaction()) {
162 w += m.getSize() * m.getSize();
165 if (w > bestWeight) {
167 initialTarget = curr;
171 if (initialTarget ==
null)
return;
174 if (target ==
null)
return;
176 PirateBaseTier tier =
pickTier(target);
179 if (factionId ==
null)
return;
204 picker.
add(faction.getId(), 1f);
207 return picker.
pick();
245 if (m.getFaction().isPlayerFaction()) {
246 max = Math.max(m.getSize(), max);
250 return PirateBaseTier.TIER_5_3MODULE;
251 }
else if (max >= 6) {
252 return PirateBaseTier.TIER_4_3MODULE;
253 }
else if (max >= 5) {
254 return PirateBaseTier.TIER_3_2MODULE;
255 }
else if (max >= 4) {
256 return PirateBaseTier.TIER_2_1MODULE;
258 return PirateBaseTier.TIER_1_1MODULE;
269 if (system.hasPulsar())
continue;
272 if (days < 180f)
continue;
291 if (weight <= 0f)
continue;
293 float usefulStuff = system.getCustomEntitiesWithTag(
Tags.
OBJECTIVE).size() +
295 if (usefulStuff <= 0)
continue;
301 float distMult = 100000f / dist;
302 distMult *= distMult;
305 veryFar.
add(system, weight * usefulStuff * distMult);
306 }
else if (dist > 10000f) {
307 far.
add(system, weight * usefulStuff * distMult);
309 picker.
add(system, weight * usefulStuff * distMult);
320 return picker.
pick();
static SettingsAPI getSettings()
static SectorAPI getSector()
static boolean RAID_DEBUG
static final String PIRATE_ACTIVITY
static final String CUSTOM_MAKES_PIRATE_BASES
static final String PLAYER
static String RECENTLY_USED_FOR_BASE
static PiracyRespiteScript get()
void advance(float amount)
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static List< MarketAPI > getFactionMarkets(FactionAPI faction, String econGroup)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getDays(float amount)
void addAll(Collection< T > items)
int getIntFromArray(String key, int index)
float getElapsedDaysSince(long timestamp)
List< StarSystemAPI > getStarSystems()
CampaignClockAPI getClock()
List< FactionAPI > getAllFactions()
FactionAPI getPlayerFaction()
MemoryAPI getMemoryWithoutUpdate()
List< MarketAPI > getMarkets(LocationAPI loc)
void set(String key, Object value)