1package com.fs.starfarer.api.impl.campaign;
3import java.util.ArrayList;
4import java.util.HashSet;
6import java.util.Random;
11import org.apache.log4j.Logger;
12import org.lwjgl.util.vector.Vector2f;
14import com.fs.starfarer.api.EveryFrameScript;
15import com.fs.starfarer.api.Global;
16import com.fs.starfarer.api.campaign.BaseCampaignEventListener;
17import com.fs.starfarer.api.campaign.BattleAPI;
18import com.fs.starfarer.api.campaign.CampaignFleetAPI;
19import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
20import com.fs.starfarer.api.campaign.CargoAPI;
21import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
22import com.fs.starfarer.api.campaign.CargoStackAPI;
23import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
24import com.fs.starfarer.api.campaign.FactionAPI;
25import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
26import com.fs.starfarer.api.campaign.FactionProductionAPI;
27import com.fs.starfarer.api.campaign.FactionProductionAPI.ItemInProductionAPI;
28import com.fs.starfarer.api.campaign.FactionProductionAPI.ProductionItemType;
29import com.fs.starfarer.api.campaign.FleetInflater;
30import com.fs.starfarer.api.campaign.JumpPointAPI.JumpDestination;
31import com.fs.starfarer.api.campaign.LocationAPI;
32import com.fs.starfarer.api.campaign.PlanetAPI;
33import com.fs.starfarer.api.campaign.PlayerMarketTransaction;
34import com.fs.starfarer.api.campaign.PlayerMarketTransaction.ShipSaleInfo;
35import com.fs.starfarer.api.campaign.SectorAPI;
36import com.fs.starfarer.api.campaign.SectorEntityToken;
37import com.fs.starfarer.api.campaign.SpecialItemData;
38import com.fs.starfarer.api.campaign.SpecialItemPlugin;
39import com.fs.starfarer.api.campaign.StarSystemAPI;
40import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
41import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
42import com.fs.starfarer.api.campaign.econ.Industry;
43import com.fs.starfarer.api.campaign.econ.MarketAPI;
44import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
45import com.fs.starfarer.api.campaign.econ.MonthlyReport;
46import com.fs.starfarer.api.campaign.econ.MonthlyReport.FDNode;
47import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
48import com.fs.starfarer.api.campaign.listeners.ListenerUtil;
49import com.fs.starfarer.api.campaign.rules.MemoryAPI;
50import com.fs.starfarer.api.characters.AdminData;
51import com.fs.starfarer.api.characters.OfficerDataAPI;
52import com.fs.starfarer.api.characters.PersonAPI;
53import com.fs.starfarer.api.characters.SkillsChangeRemoveExcessOPEffect;
54import com.fs.starfarer.api.characters.SkillsChangeRemoveVentsCapsEffect;
55import com.fs.starfarer.api.combat.ShipVariantAPI;
56import com.fs.starfarer.api.fleet.FleetMemberAPI;
57import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData;
58import com.fs.starfarer.api.impl.campaign.econ.impl.InstallableItemEffect;
59import com.fs.starfarer.api.impl.campaign.econ.impl.ItemEffectsRepo;
60import com.fs.starfarer.api.impl.campaign.events.BaseEventPlugin.MarketFilter;
61import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
62import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
63import com.fs.starfarer.api.impl.campaign.ids.Commodities;
64import com.fs.starfarer.api.impl.campaign.ids.Drops;
65import com.fs.starfarer.api.impl.campaign.ids.Entities;
66import com.fs.starfarer.api.impl.campaign.ids.Factions;
67import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
68import com.fs.starfarer.api.impl.campaign.ids.Stats;
69import com.fs.starfarer.api.impl.campaign.ids.Tags;
70import com.fs.starfarer.api.impl.campaign.intel.MessageIntel;
71import com.fs.starfarer.api.impl.campaign.intel.misc.ProductionReportIntel;
72import com.fs.starfarer.api.impl.campaign.intel.misc.ProductionReportIntel.ProductionData;
73import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
74import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
75import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner;
76import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial;
77import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData;
78import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition;
79import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipRecoverySpecialData;
80import com.fs.starfarer.api.impl.campaign.shared.SharedData;
81import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin;
82import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldParams;
83import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldSource;
84import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
85import com.fs.starfarer.api.loading.FighterWingSpecAPI;
86import com.fs.starfarer.api.loading.HullModSpecAPI;
87import com.fs.starfarer.api.loading.WeaponSpecAPI;
88import com.fs.starfarer.api.util.IntervalUtil;
89import com.fs.starfarer.api.util.Misc;
90import com.fs.starfarer.api.util.WeightedRandomPicker;
109 private boolean firstFrame =
true;
112 playRepChangeSoundsIfNeeded();
130 if (timer.intervalElapsed()) {
227 private void playRepChangeSoundsIfNeeded() {
228 if (deltaFaction !=
null) {
229 if (highestDelta > 0) {
231 }
else if (highestDelta < 0) {
241 private float highestDelta = 0f;
242 private String deltaFaction =
null;
245 super.reportPlayerReputationChange(faction, delta);
246 if (Math.abs(delta) > Math.abs(highestDelta)) {
247 highestDelta = delta;
248 deltaFaction = faction;
255 super.reportPlayerReputationChange(person, delta);
256 if (Math.abs(delta) > Math.abs(highestDelta)) {
257 highestDelta = delta;
274 super.reportPlayerMarketTransaction(transaction);
292 boolean didAnything =
false;
295 if (plugin ==
null)
continue;
301 if (ind.wantsToUseSpecialItem(data)) {
302 if (effect !=
null) {
304 if (unmet !=
null && !unmet.isEmpty()) {
309 if (ind.getSpecialItem() !=
null) {
310 cargo.
addItems(CargoItemType.SPECIAL, ind.getSpecialItem(), 1);
313 ind.setSpecialItem(data);
341 super.reportPlayerOpenedMarket(market);
362 fp += member.getFleetPointCost();
363 crew = member.getMinCrew();
372 if (otherFleet.hasScriptOfClass(
TOffAlarm.class))
continue;
373 MemoryAPI memory = otherFleet.getMemoryWithoutUpdate();
382 otherFleet.addScript(
new TOffAlarm(otherFleet));
391 public boolean acceptMarket(
MarketAPI market) {
398 MemoryAPI mem = market.getMemoryWithoutUpdate();
399 float expire = fpLost;
403 if (expire > 180) expire = 180;
416 super.reportFleetJumped(fleet, from, to);
436 if (planet.isStar())
continue;
439 if (market ==
null)
continue;
442 String type = planet.getSpec().getName();
443 if (!planet.isGasGiant()) type +=
" World";
469 boolean weapons,
boolean mods,
boolean fighters) {
478 data.addWeapon(weaponId, 1f * p);
488 data.addHullMod(
id, 1f * p);
498 data.addFighterChip(
id, 1f * p);
506 Set<String> result =
new HashSet<String>();
508 if (stack.isCommodityStack()) {
509 result.add(stack.getCommodityId());
517 if (primaryWinner ==
null)
return;
519 if (location ==
null)
return;
528 DropData misc =
new DropData();
531 List<DropData> cargoList =
new ArrayList<DropData>();
535 Vector2f com =
new Vector2f();
537 float fpDestroyed = 0;
540 com.x += fleet.getLocation().x;
541 com.y += fleet.getLocation().y;
543 float fpForThisFleet = 0;
548 recoverySpecialChoices.
add(loss);
551 fpDestroyed += loss.getFleetPointCost();
552 fpForThisFleet += loss.getFleetPointCost();
553 if (allowDebris && !fleet.isPlayerFleet()) {
558 if (allowDebris && !fleet.isPlayerFleet()) {
559 DropData cargo =
new DropData();
562 if (cargoValue >= 1) {
564 cargo.addCommodity(cid, 1f);
566 cargo.value = (int) cargoValue;
568 cargoList.add(cargo);
574 com.x += fleet.getLocation().x;
575 com.y += fleet.getLocation().y;
577 float fpForThisFleet = 0;
582 recoverySpecialChoices.
add(loss);
588 fpDestroyed += loss.getFleetPointCost();
589 fpForThisFleet += loss.getFleetPointCost();
590 if (allowDebris && !fleet.isPlayerFleet()) {
595 if (allowDebris && !fleet.isPlayerFleet()) {
596 DropData cargo =
new DropData();
599 if (cargoValue >= 1) {
601 cargo.addCommodity(cid, 1f);
603 cargo.value = (int) cargoValue;
605 cargoList.add(cargo);
610 if (count <= 0)
return;
612 com.scale(1f / count);
616 float numShips = recoverySpecialChoices.
getItems().size();
617 float chanceDerelict = 1f - 10f / (numShips + 10f);
626 if (playerInvolved) {
628 chanceDerelict *= 0.25f;
630 for (
int i = 0; i < max && !recoverySpecialChoices.
isEmpty(); i++) {
631 boolean spawnShip = Math.random() < chanceDerelict;
636 if (variantId ==
null)
continue;
637 DerelictShipData params =
new DerelictShipData(
new PerShipData(variantId,
649 float angle = (float) Math.random() * 360f;
650 float speed = 10f + 10f * (float) Math.random();
669 float salvageXP = salvageValue * 0.1f;
673 if (playerInvolved) minForField = 2500f + (float) Math.random() * 1000f;
675 if (salvageValue < minForField || !allowDebris)
return;
682 if (plugin.
params.source == DebrisFieldSource.BATTLE &&
683 plugin.
params.density >= 1f &&
691 if (debris ==
null) {
692 DebrisFieldParams params =
new DebrisFieldParams(
697 params.source = DebrisFieldSource.BATTLE;
698 params.baseSalvageXP = (long) salvageXP;
726 DropData basicDrop =
null;
736 if (basicDrop ==
null) {
737 basicDrop =
new DropData();
741 basicDrop.value += salvageValue;
743 if (misc.getCustom() !=
null) {
744 misc.chances = miscChances;
746 float total = misc.getCustom().getTotal();
748 misc.addNothing(Math.max(1f, total));
754 for (DropData cargo : cargoList) {
761 if (data !=
null && data.ships.size() < 3) {
762 float items = recoverySpecialChoices.
getTotal();
763 float total = items + 25f;
764 for (
int i = 0; i < 3; i++) {
765 if ((
float) Math.random() * total < items) {
770 data.addShip(variantId, ShipCondition.WRECKED, 0f);
784 float radius = 100f + (float) Math.min(900, Math.sqrt(basicDrop.value));
785 float durationExtra = (float) Math.sqrt(salvageValue) * 0.1f;
787 float minDays = DebrisFieldTerrainPlugin.DISSIPATE_DAYS + 1f;
788 if (durationExtra < minDays) durationExtra = minDays;
790 float time = durationExtra + plugin.
params.lastsDays;
791 if (time > 30f) time = 30f;
793 plugin.params.lastsDays = time;
794 plugin.params.glowsDays = time;
796 plugin.params.bandWidthInEngine = radius;
797 plugin.params.middleRadius = plugin.params.bandWidthInEngine / 2f;
808 super.reportPlayerDumpedCargo(cargo);
828 super.reportPlayerDumpedCargo(cargo);
844 if (gatheringPoint ==
null)
return;
848 if (local ==
null)
return;
855 int total = (int) (report.
getRoot().totalIncome - report.
getRoot().totalUpkeep);
858 if (credits < 0) credits = 0;
861 capacity = Math.min(capacity, credits);
876 picker.
add(item, item.getQuantity());
880 boolean wantedToDoProduction = !picker.
isEmpty();
881 boolean unableToDoProduction = capacity <= 0;
883 ProductionData data =
new ProductionData();
886 CargoAPI cargo = data.getCargo(
"Heavy Industry - Custom Production");
890 if (!market.isPlayerOwned())
continue;
894 quality = Math.max(quality, currQuality);
903 p.mode = ShipPickMode.PRIORITY_THEN_ALL;
904 p.persistent =
false;
905 p.seed = random.nextLong();
912 while (remainingValue > 0 && !picker.
isEmpty()) {
916 int count = Math.min(pick.
getQuantity(), remainingValue / Math.max(1, baseCost));
918 count = random.nextInt(count) + 1;
921 accrued = remainingValue;
924 int currCost = count * baseCost;
925 totalCost += currCost;
926 remainingValue -= currCost;
928 if (pick.
getType() == ProductionItemType.SHIP) {
930 if (variants.isEmpty()) {
931 variants.add(pick.
getSpecId() +
"_Hull");
935 int index = random.nextInt(variants.size());
937 for (
int i = 0; i < count; i++) {
940 }
else if (pick.
getType() == ProductionItemType.FIGHTER) {
942 }
else if (pick.
getType() == ProductionItemType.WEAPON) {
957 for (String wingId : member.getVariant().getNonBuiltInWings()) {
961 for (String slotId : member.getVariant().getNonBuiltInWeaponSlots()) {
962 WeaponSpecAPI spec = member.getVariant().getWeaponSpec(slotId);
976 int supplies = (int) (addedValue * (0.5f * (0.5f + random.nextFloat() * 0.5f))) / sCost;
977 int fuel = (int) (addedValue * (0.3f * (0.5f + random.nextFloat() * 0.5f))) / fCost;
978 int crew = (addedValue - sCost * supplies - fCost * fuel) / cCost;
980 supplies = supplies / 10 * 10;
981 fuel = fuel / 10 * 10;
982 crew = crew / 10 * 10;
991 totalCost += accrued;
992 if (totalCost < 0) totalCost = 0;
996 if (!market.isPlayerOwned())
continue;
998 for (
Industry ind : market.getIndustries()) {
1000 CargoAPI added = ind.generateCargoForGatheringPoint(curr);
1001 if (added !=
null && (!added.
isEmpty() ||
1003 String title = ind.getCargoTitleForGatheringPoint();
1004 data.getCargo(title).
addAll(added,
true);
1014 if (!data.isEmpty() || totalCost > 0 || (wantedToDoProduction && unableToDoProduction)) {
1015 if (totalCost > 0) {
1019 if (marketsNode.name ==
null) {
1020 marketsNode.name =
"Colonies";
1026 production.name =
"Custom production orders";
1028 production.custom2 = cargo;
1031 production.upkeep += totalCost;
1033 if (weaponCost > 0) {
1035 productionWeapons.name =
"Weapons & fighter LPCs for produced ships";
1038 productionWeapons.upkeep += weaponCost;
1042 for (
CargoAPI curr : data.data.values()) {
1045 for (
FleetMemberAPI member : curr.getMothballedShips().getMembersListCopy()) {
1048 member.getRepairTracker().setMothballed(
false);
1049 member.getRepairTracker().setCR(0.5f);
1057 wantedToDoProduction && unableToDoProduction);
1066 super.reportEconomyMonthEnd();
1074 if (marketsNode.custom !=
null) {
1076 if (!market.isPlayerOwned())
continue;
1078 float incentive = market.getIncentiveCredits();
1079 if (incentive > 0) {
1080 FDNode mNode = report.
getNode(marketsNode, market.getId());
1081 if (mNode.custom !=
null) {
1082 FDNode incNode = report.
getNode(mNode,
"incentives");
1083 incNode.name =
"Hazard pay";
1085 incNode.mapEntity = market.getPrimaryEntity();
1087 incNode.upkeep += incentive;
1089 market.setIncentiveCredits(0);
1096 float debt = previous.
getDebt();
1113 int total = (int) (report.
getRoot().totalIncome - report.
getRoot().totalUpkeep);
1116 float newCredits = credits + total;
1117 if (newCredits < 0) {
1118 report.
setDebt((
int) Math.abs(newCredits));
1127 String title =
"Monthly income: " + totalStr;
1130 title =
"Monthly expenses: " + totalStr;
1139 intel.
setSound(
"ui_intel_monthly_income_positive");
1141 intel.
setSound(
"ui_intel_monthly_income_negative");
1193 super.reportEconomyTick(iterIndex);
1204 float f = 1f / numIter;
1213 fleetNode.name =
"Fleet";
1219 crewNode.upkeep += crewCost * f;
1220 crewNode.name =
"Crew payroll";
1225 if (marineSalary > 0) {
1227 marineNode.upkeep += marineCost * f;
1228 marineNode.name =
"Marine payroll";
1248 officersNode.name =
"Officer payroll";
1255 FDNode oNode = report.
getNode(officersNode, od.getPerson().getId());
1256 oNode.name = od.getPerson().getName().getFullName();
1257 oNode.upkeep += salary * f;
1262 marketsNode.name =
"Colonies";
1266 FDNode storageNode =
null;
1285 float fc = (int) (vc * storageFraction);
1286 float fs = (int) (vs * storageFraction);
1287 if (fc > 0 || fs > 0) {
1288 if (storageNode ==
null) {
1290 storageNode.name =
"Storage";
1294 FDNode mNode = report.
getNode(storageNode, market.getId());
1296 if (fc > 0 && fs > 0) {
1297 desc =
"ships & cargo";
1298 }
else if (fc > 0) {
1303 mNode.name = market.getName() +
" (" + desc +
")";
1304 mNode.custom = market;
1308 mNode.upkeep += (fc + fs) * f;
1316 if (!market.isPlayerOwned())
continue;
1318 FDNode mNode = report.
getNode(marketsNode, market.getId());
1319 mNode.name = market.getName() +
" (" + market.getSize() +
")";
1320 mNode.custom = market;
1322 FDNode indNode = report.
getNode(mNode,
"industries");
1323 indNode.name =
"Industries & structures";
1325 indNode.mapEntity = market.getPrimaryEntity();
1330 for (
Industry curr : market.getIndustries()) {
1331 FDNode iNode = report.
getNode(indNode, curr.getId());
1332 iNode.name = curr.getCurrentName();
1333 iNode.income += curr.getIncome().getModifiedInt() * f;
1334 iNode.upkeep += curr.getUpkeep().getModifiedInt() * f;
1335 iNode.custom = curr;
1336 iNode.mapEntity = market.getPrimaryEntity();
1339 FDNode exportNode = report.
getNode(mNode,
"exports");
1340 exportNode.name =
"Exports";
1342 exportNode.mapEntity = market.getPrimaryEntity();
1370 adminNode.name =
"Administrators";
1376 if (salary <= 0)
continue;
1378 FDNode aNode = report.
getNode(adminNode, data.getPerson().getId());
1379 aNode.name = data.getPerson().getName().getFullName();
1380 if (data.getMarket() !=
null) {
1381 aNode.name +=
" (" + data.getMarket().getName() +
")";
1383 aNode.name +=
" (unassigned)";
1386 aNode.upkeep += salary * f;
1387 aNode.custom = data;
1432 public static class ExportCommodityGroupData {
1434 public int quantity;
1439 FDNode eNode = report.
getNode(parent, com.getId());
1440 eNode.name = com.getCommodity().getName();
1441 eNode.income += com.getExportIncome() * f;
static SettingsAPI getSettings()
static SoundPlayerAPI getSoundPlayer()
static FactoryAPI getFactory()
static Logger getLogger(Class c)
static SectorAPI getSector()
SubmarketAPI getSubmarket()
List< ShipSaleInfo > getShipsBought()
void setPreviousDebt(int previousDebt)
void setTimestamp(long timestamp)
FDNode getNode(String ... path)
static String PRODUCTION_WEAPONS
MonthlyReportNodeTooltipCreator getMonthlyReportTooltip()
static void reportPlayerLeftCargoPods(SectorEntityToken entity)
static void clampOP(FleetMemberAPI member, MutableCharacterStatsAPI stats)
static void clampNumVentsAndCaps(FleetMemberAPI member, MutableCharacterStatsAPI stats)
void modifyFlat(String source, float value)
void reportBattleOccurred(CampaignFleetAPI primaryWinner, BattleAPI battle)
void advance(float amount)
static void markSystemAsEntered(StarSystemAPI system, boolean withMessages)
void doCustomProduction()
void reportPlayerOpenedMarket(MarketAPI market)
static final String SHARED_DATA_KEY
void reportPlayerReputationChange(String faction, float delta)
void reportPlayerDumpedCargo(CargoAPI cargo)
void addExportsGroupedByCommodity(MonthlyReport report, FDNode parent, MarketAPI market, float f)
void reportPlayerReputationChange(PersonAPI person, float delta)
static void generateOrAddToDebrisFieldFromBattle(CampaignFleetAPI primaryWinner, BattleAPI battle)
void reportEconomyMonthEnd()
void reportEconomyTick(int iterIndex)
static void addMiscToDropData(DropData data, FleetMemberAPI member, boolean weapons, boolean mods, boolean fighters)
void reportPlayerDidNotTakeCargo(CargoAPI cargo)
void reportPlayerMarketTransaction(PlayerMarketTransaction transaction)
void reportFleetJumped(CampaignFleetAPI fleet, SectorEntityToken from, JumpDestination to)
static Set< String > getCargoCommodities(CargoAPI cargo)
static boolean WEAPONS_HAVE_COST
static ShipCondition pickBadCondition(Random random)
static float getBaseDuration(HullSize size)
static Map< String, InstallableItemEffect > ITEM_EFFECTS
void advance(float amount)
static RouteManager getInstance()
static final String SUPPLIES
static final String BASIC
static final String WRECK
static final String NEUTRAL
static final String PLAYER
static final String MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF
static final String MEMORY_KEY_NO_SHIP_RECOVERY
static final String MEMORY_KEY_LOW_REP_IMPACT
static final String SPREAD_TOFF_HOSTILITY_IF_LOW_IMPACT
static final String MEMORY_KEY_PLAYER_HOSTILE_ACTIVITY_NEAR_MARKET
static final String FLEET_QUALITY_MOD
static final String PRODUCTION_QUALITY_MOD
void setIcon(String icon)
void setSound(String sound)
static SectorEntityToken addSalvageEntity(LocationAPI location, String id, String faction)
static void assignSpecialForBattleWreck(SectorEntityToken entity)
static ShipRecoverySpecialData getSpecialData(SectorEntityToken entity, String desc, boolean create, boolean replace)
void updateLastVisit(MarketAPI market)
void setPlayerLosingBattleTimestamp(long playerLosingBattleTimestamp)
MonthlyReport getPreviousReport()
void setPlayerPreLosingBattleFP(float playerPreLosingBattleFP)
void advance(float amount)
PlayerActivityTracker getPlayerActivityTracker()
void setPlayerPreLosingBattleCrew(float playerPreLosingBattleCrew)
static SharedData getData()
MonthlyReport getCurrentReport()
boolean containsPoint(Vector2f point, float radius)
static float computeDetectionRange(float radius)
static boolean isTutorialInProgress()
void advance(float amount)
static String getDGSCredits(float num)
static FleetInflater getInflater(CampaignFleetAPI fleet, Object params)
static float getStorageShipValue(MarketAPI market)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static SectorEntityToken addDebrisField(LocationAPI loc, DebrisFieldParams params, Random random)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
static Color getNegativeHighlightColor()
static CargoAPI getStorageCargo(MarketAPI market)
static float getStorageCargoValue(MarketAPI market)
static Random getRandom(long seed, int level)
static CustomCampaignEntityAPI addCargoPods(LocationAPI where, Vector2f loc)
static boolean playerHasStorageAccess(MarketAPI market)
static Color getBasePlayerColor()
static List< MarketAPI > findNearbyLocalMarkets(SectorEntityToken token, float maxDist, MarketFilter filter)
static void computeCoreWorldsExtent()
static float getAdminSalary(PersonAPI admin)
static Color getHighlightColor()
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static float getSnapshotFPLost(CampaignFleetAPI fleet)
static SimulatorPlugin getSimulatorPlugin()
static float getOfficerSalary(PersonAPI officer)
CampaignFleetAPI createEmptyFleet(String factionId, String name, boolean aiMode)
ListMap< String > getHullIdToVariantListMap()
String getSpriteName(String category, String id)
HullModSpecAPI getHullModSpec(String modId)
CommoditySpecAPI getCommoditySpec(String commodityId)
float getFloat(String key)
FighterWingSpecAPI getFighterWingSpec(String wingId)
WeaponSpecAPI getWeaponSpec(String weaponId)
SoundAPI playUISound(String id, float pitch, float volume)
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
List< CampaignFleetAPI > getSnapshotSideOne()
boolean isPlayerInvolved()
List< CampaignFleetAPI > getSnapshotSideTwo()
float convertToDays(float realSeconds)
LocationAPI getContainingLocation()
void setCommander(PersonAPI commander)
FleetDataAPI getFleetData()
void setInflater(FleetInflater inflater)
boolean isValidPlayerFleet()
CampaignTerrainPlugin getPlugin()
void addMessage(String text)
void addWeapons(String id, int count)
boolean removeItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
void addCrew(int quantity)
void addAll(CargoAPI other)
MutableValue getCredits()
void initMothballedShips(String factionId)
List< CargoStackAPI > getStacksCopy()
void addSupplies(float quantity)
void addFuel(float quantity)
void addItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
FleetDataAPI getMothballedShips()
void addFighters(String id, int count)
List< AdminData > getAdmins()
FactionProductionAPI getProduction()
FactionDoctrineAPI getDoctrine()
float getShipQualityContribution()
ProductionItemType getType()
List< ItemInProductionAPI > getCurrent()
MarketAPI getGatheringPoint()
int getMonthlyProductionCapacity()
int getAccruedProduction()
void setAccruedProduction(int accruedProduction)
void removeItem(ProductionItemType type, String specId, int count)
List< OfficerDataAPI > getOfficersCopy()
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
void addScript(EveryFrameScript script)
List< PlanetAPI > getPlanets()
List< CampaignTerrainAPI > getTerrainCopy()
CampaignFleetAPI getPlayerFleet()
CampaignClockAPI getClock()
FactionAPI getPlayerFaction()
IntelManagerAPI getIntelManager()
CampaignUIAPI getCampaignUI()
MutableCharacterStatsAPI getPlayerStats()
FactionAPI getFaction(String factionId)
PersonAPI getPlayerPerson()
CharacterDataAPI getCharacterData()
LocationAPI getContainingLocation()
StatBonus getDetectedRangeMod()
void addDropRandom(String group, int chances)
List< DropData > getDropRandom()
void addDropValue(String group, int value)
void setDiscoverable(Boolean discoverable)
List< DropData > getDropValue()
void setDiscoveryXP(Float discoveryXP)
void setEnteredByPlayer(boolean enteredByPlayer)
boolean isParticipatesInEconomy()
void addIntel(IntelInfoPlugin plugin)
List< MarketAPI > getMarketsCopy()
void setSurveyLevel(SurveyLevel surveyLevel)
SurveyLevel getSurveyLevel()
List< CommodityOnMarketAPI > getCommoditiesCopy()
List< Industry > getIndustries()
SectorEntityToken getPrimaryEntity()
SubmarketPlugin getPlugin()
float getExpire(String key)
boolean contains(String key)
void set(String key, Object value)
Collection< String > getHullMods()
boolean hasTag(String tag)
String getWeaponId(String slotId)
List< String > getFittedWings()
String getOriginalVariant()
String getHullVariantId()
List< String > getNonBuiltInWeaponSlots()
ShipVariantAPI getVariant()
ShipHullSpecAPI getHullSpec()
List< String > getUnmetRequirements(Industry industry)
boolean hasTag(String tag)
boolean hasTag(String tag)
boolean isHiddenEverywhere()
boolean hasTag(String tag)
void reportPlayerBattleOccurred(CampaignFleetAPI primaryWinner, BattleAPI battle)