1package com.fs.starfarer.api.impl.campaign.graid;
4import java.util.Random;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CargoAPI;
8import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
9import com.fs.starfarer.api.campaign.CargoStackAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.TextPanelAPI;
12import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
13import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.combat.WeaponAPI.AIHints;
16import com.fs.starfarer.api.impl.campaign.econ.CommodityIconCounts;
17import com.fs.starfarer.api.impl.campaign.ids.Commodities;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
20import com.fs.starfarer.api.loading.FighterWingSpecAPI;
21import com.fs.starfarer.api.loading.HullModSpecAPI;
22import com.fs.starfarer.api.loading.WeaponSpecAPI;
23import com.fs.starfarer.api.ui.IconGroupAPI;
24import com.fs.starfarer.api.ui.IconRenderMode;
25import com.fs.starfarer.api.ui.TooltipMakerAPI;
26import com.fs.starfarer.api.util.Misc;
27import com.fs.starfarer.api.util.WeightedRandomPicker;
57 int extra = counts.
extra;
87 danger = danger.prev();
92 if (counts.
extra > 0) {
120 int value = (int)
getQuantity(Math.max(1, marines));
131 return base * marines;
148 if (result < 0) result = 0;
169 if (tier <= 0)
return 0f;
170 if (tier <= 1)
return 0.25f;
171 if (tier <= 2)
return 0.5f;
216 float numTotal = numSmall + numMedium + numLarge + 1f;
220 if (spec.
getAIHints().contains(AIHints.SYSTEM))
continue;
221 if (spec.
getTier() > maxTier)
continue;
226 p *= 1f - numLarge / numTotal;
230 p *= 1f - numMedium / numTotal;
234 p *= 1f - numSmall / numTotal;
238 pickerW.
add(spec, p);
244 weaponSubset.
add(spec, w);
251 if (spec.
getTier() > maxTier)
continue;
254 pickerF.
add(spec, p);
260 fighterSubset.
add(spec, w);
270 if (spec.
getTier() > maxTier)
continue;
276 pickerH.
add(spec, p);
281 targetValue *= lootMult;
282 float mult = 0.9f + random.nextFloat() * 0.2f;
289 float hullmodWeight = 1f + quality * 1f;
290 float totalWeight = weaponWeight + fighterWeight + hullmodWeight;
292 float weaponValue = targetValue * weaponWeight / totalWeight;
293 float fighterValue = targetValue * fighterWeight / totalWeight;
294 float hullmodValue = targetValue * hullmodWeight / totalWeight;
296 float totalValue = 0;
301 while (weaponValue > 0 && tries < 100) {
304 if (weapon !=
null) {
305 int min = 1, max = 2;
313 int num = min + random.nextInt(max - min + 1);
314 num = (int) Math.min(num, weaponValue / val);
316 if (random.nextFloat() < weaponValue / val) num = 1;
320 weaponValue -= val * num;
321 totalValue += val * num;
330 fighterValue += Math.max(0, weaponValue);
333 while (fighterValue > 0 && tries < 100) {
336 if (fighter !=
null) {
337 int min = 1, max = 2;
352 int num = min + random.nextInt(max - min + 1);
353 num = (int) Math.min(num, fighterValue / val);
355 if (random.nextFloat() < fighterValue / val) num = 1;
359 fighterValue -= val * num;
360 totalValue += val * num;
369 hullmodValue += Math.max(0, fighterValue);
372 while (hullmodValue > 0 && tries < 100) {
378 if (random.nextFloat() < hullmodValue / val) num = 1;
381 hullmodValue -= val * num;
382 totalValue += val * num;
414 t.
addPara(
"Ship weapons, fighter LPCs, and hullmod specs. Availability is based on the " +
416 t.
addPara(
"The colony faction's doctrine affects the number of weapons vs fighter LPCs acquired. Higher ship quality " +
417 "increases the probability of finding modspecs..", opad);
422 t.
addPara(
"This colony has heavy industry and high-tier equipment may be found.", good, opad);
424 t.
addPara(
"This colony has a military presence and high-tier equipment may be found.", good, opad);
427 t.
addPara(
"This colony does not have heavy industry or a military presence and has no access to high-tier ship equipment.", bad, opad);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
void setSource(Industry source)
static Industry computeCommoditySource(MarketAPI market, CommodityOnMarketAPI com)
String getCommodityIdForDeficitIcons()
ShipWeaponsGroundRaidObjectivePluginImpl(MarketAPI market)
static float CARGO_SPACE_PER_LARGE
int getValue(int marines)
void addIcons(IconGroupAPI iconGroup)
String getValueString(int marines)
static float CARGO_SPACE_PER_MEDIUM
void createTooltip(TooltipMakerAPI t, boolean expanded)
float getQuantitySortValue()
static float CARGO_SPACE_PER_SMALL
CargoStackAPI getStackForIcon()
static float VALUE_OVERALL
static float VALUE_EXCESS
CommoditySpecAPI getWeaponsCommoditySpec()
String getQuantityString(int marines)
static float VALUE_DEFICIT
RaidDangerLevel getDangerLevel()
float getQuantity(int marines)
int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text)
int getProjectedCreditsValue()
static float VALUE_NORMAL
static final String SHIP_WEAPONS
static final String SHIPS
static String getDGSCredits(float num)
static boolean hasHeavyIndustry(MarketAPI market)
static Color getNegativeHighlightColor()
static Color getHighlightColor()
static float getShipQuality(MarketAPI market)
static Color getPositiveHighlightColor()
static boolean isMilitary(MarketAPI market)
CargoAPI createCargo(boolean unlimitedStacks)
CargoStackAPI createCargoStack(CargoItemType type, Object data, CargoAPI cargo)
HullModSpecAPI getHullModSpec(String modId)
CommoditySpecAPI getCommoditySpec(String commodityId)
float getFloat(String key)
FighterWingSpecAPI getFighterWingSpec(String wingId)
WeaponSpecAPI getWeaponSpec(String weaponId)
void addHullmods(String id, int count)
void addWeapons(String id, int count)
void addAll(CargoAPI other)
void addFighters(String id, int count)
Set< String > getKnownFighters()
Set< String > getKnownWeapons()
boolean knowsHullMod(String modId)
Set< String > getKnownHullMods()
FactionDoctrineAPI getDoctrine()
FactionAPI getPlayerFaction()
FactionAPI getFaction(String factionId)
CommoditySpecAPI getCommodity()
RaidDangerLevel getBaseDanger()
RaidDangerLevel adjustCommodityDangerLevel(String commodityId, RaidDangerLevel level)
CommodityOnMarketAPI getCommodityData(String commodityId)
static float XP_GAIN_VALUE_MULT
static float QUANTITY_SORT_TIER_1
boolean isAlwaysUnlocked()
boolean hasTag(String tag)
EnumSet< WeaponAPI.AIHints > getAIHints()
void addIconGroup(String commodityId, IconRenderMode mode, int count, Object custom)