1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
5import java.util.Random;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.FactionAPI.ShipPickParams;
12import com.fs.starfarer.api.campaign.GenericPluginManagerAPI.GenericPlugin;
13import com.fs.starfarer.api.campaign.InteractionDialogAPI;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.rules.MemKeys;
16import com.fs.starfarer.api.campaign.rules.MemoryAPI;
17import com.fs.starfarer.api.characters.PersonAPI;
18import com.fs.starfarer.api.combat.ShipVariantAPI;
19import com.fs.starfarer.api.fleet.FleetMemberAPI;
20import com.fs.starfarer.api.fleet.ShipRolePick;
21import com.fs.starfarer.api.impl.campaign.BaseGenericPlugin;
22import com.fs.starfarer.api.impl.campaign.DebugFlags;
23import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
24import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
25import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
26import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
27import com.fs.starfarer.api.impl.campaign.ids.Commodities;
28import com.fs.starfarer.api.impl.campaign.ids.Entities;
29import com.fs.starfarer.api.impl.campaign.ids.Factions;
30import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
31import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
32import com.fs.starfarer.api.impl.campaign.ids.ShipRoles;
33import com.fs.starfarer.api.impl.campaign.ids.Tags;
34import com.fs.starfarer.api.impl.campaign.procgen.DefenderDataOverride;
35import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec;
36import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
37import com.fs.starfarer.api.impl.campaign.procgen.themes.MiscellaneousThemeGenerator;
38import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantOfficerGeneratorPlugin;
39import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageEntityGeneratorOld;
40import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
41import com.fs.starfarer.api.util.Misc;
42import com.fs.starfarer.api.util.Misc.Token;
51 public static class SDMParams {
53 public String factionId;
59 public static interface SalvageDefenderModificationPlugin
extends GenericPlugin {
60 float getStrength(SDMParams p,
float strength, Random random,
boolean withOverride);
61 float getProbability(SDMParams p,
float probability, Random random,
boolean withOverride);
62 float getQuality(SDMParams p,
float quality, Random random,
boolean withOverride);
63 float getMaxSize(SDMParams p,
float maxSize, Random random,
boolean withOverride);
64 float getMinSize(SDMParams p,
float minSize, Random random,
boolean withOverride);
66 void modifyFleet(SDMParams p,
CampaignFleetAPI fleet, Random random,
boolean withOverride);
74 public static class SalvageDefenderModificationPluginImpl
extends BaseGenericPlugin implements SalvageDefenderModificationPlugin {
75 public float getStrength(SDMParams p,
float strength, Random random,
boolean withOverride) {
76 if (withOverride)
return strength;
101 if (bonus > limit) bonus = limit;
102 return strength + (int) bonus;
106 public float getMinSize(SDMParams p,
float minSize, Random random,
boolean withOverride) {
107 if (withOverride)
return minSize;
110 public float getMaxSize(SDMParams p,
float maxSize, Random random,
boolean withOverride) {
111 if (withOverride)
return maxSize;
117 if (bonus >= 5) bonusSize = 2;
120 return Math.max(maxSize, bonusSize);
124 public float getProbability(SDMParams p,
float probability, Random random,
boolean withOverride) {
125 if (withOverride)
return probability;
134 if (limit <= 0 || probability >= 1f)
return probability;
137 if (bonus > limit) bonus = limit;
139 return probability * (1f - 0.5f * bonus / limit);
148 total += member.getFleetPointCost();
153 public void modifyFleet(SDMParams p,
CampaignFleetAPI fleet, Random random,
boolean withOverride) {
157 member.setVariant(copy,
false,
false);
165 d.group =
"omega_weapons_small";
171 d.group =
"omega_weapons_medium";
181 member.setCaptain(person);
183 member.getRepairTracker().setCR(member.getRepairTracker().getMaxCR());
202 member.getRepairTracker().setCR(member.getRepairTracker().getMaxCR());
203 member.setFlagship(member == flagship);
207 member.setCaptain(person);
238 member.getRepairTracker().setCR(member.getRepairTracker().getMaxCR());
252 if (member.isCapital()) {
262 member.getRepairTracker().setCR(member.getRepairTracker().getMaxCR());
271 float coreMult = Math.max(0f, (bonus / 100f) - 0.1f);
272 if (coreMult > 1f) coreMult = 1f;
276 if (coreMult >= 1f) {
282 if (member.isStation()) {
287 member.setCaptain(person);
290 member.getRepairTracker().setCR(member.getRepairTracker().getMaxCR());
296 public int getHandlingPriority(Object params) {
297 if (!(params instanceof SDMParams))
return 0;
298 SDMParams p = (SDMParams) params;
315 public float getQuality(SDMParams p,
float quality, Random random,
boolean withOverride) {
316 if (withOverride)
return quality;
319 return quality + bonus;
326 if (dialog ==
null)
return false;
363 if (override !=
null) {
364 strength = override.minStr + Math.round((override.
maxStr - override.
minStr) * fleetRandom.nextFloat());
372 if (override !=
null && override.
defFaction !=
null) {
376 SDMParams p =
new SDMParams();
378 p.factionId = factionId;
381 SalvageDefenderModificationPlugin.class, p);
383 if (plugin !=
null) {
384 strength = plugin.getStrength(p, strength, random, override !=
null);
385 prob = plugin.getProbability(p, prob, random, override !=
null);
389 if (override !=
null) {
392 String stationRole =
null;
393 if (fleetRandom.nextFloat() < probStation) {
395 if (override !=
null && override.
stationRole !=
null) {
403 if (((
int) strength > 0 || stationRole !=
null) &&
404 random.nextFloat() < prob &&
405 !memory.
getBoolean(
"$defenderFleetDefeated")) {
406 memory.
set(
"$hasDefenders",
true, 0);
410 if (plugin !=
null) {
411 quality = plugin.getQuality(p, quality, fleetRandom, override !=
null);
420 fParams.random = fleetRandom;
426 if (override !=
null) {
430 if (plugin !=
null) {
431 fParams.maxShipSize = (int) (plugin.getMaxSize(p, fParams.
maxShipSize, random, override !=
null));
435 if (override !=
null) {
438 if (plugin !=
null) {
439 fParams.minShipSize = (int) (plugin.getMinSize(p, fParams.
minShipSize, random, override !=
null));
450 defenders.
setName(
"Automated Defenses");
452 if (stationRole !=
null) {
459 if (plugin !=
null) {
461 plugin.modifyFleet(p, defenders, fleetRandom, override !=
null);
466 memory.
set(
"$defenderFleet", defenders, 0);
469 memory.
set(
"$hasDefenders",
false, 0);
475 if (defenders !=
null) {
476 boolean hasStation =
false;
477 boolean hasNonStation =
false;
479 if (member.isStation()) {
482 hasNonStation =
true;
485 memory.
set(
"$hasStation", hasStation, 0);
486 memory.
set(
"$hasNonStation", hasNonStation, 0);
493 memory.
set(
"$hasDefenders",
false, 0);
494 memory.
set(
"$hasStation",
false, 0);
static SectorAPI getSector()
static final String LOCAL
static final String ENTITY
static boolean FORCE_REGEN_AUTOMATED_DEFENSES
static CampaignFleetAPI createFleet(FleetParamsV3 params)
static final String ALPHA_CORE
static final String GAMMA_CORE
static final String DERELICT_MOTHERSHIP
static final String DERELICT_CRYOSLEEPER
static final String DERELICT_SURVEY_PROBE
static final String DERELICT_SURVEY_SHIP
static final String SPEC_LIMBO_WORMHOLE_CACHE
static final String ALPHA_SITE_WEAPONS_CACHE
static final String DERELICT
static final String OMEGA
static final String REMNANTS
static final String CUSTOM_OFFICERS_ON_AUTOMATED_DEFENSES
static final String PATROL_SMALL
static final String SALVAGE_DEFENDER_OVERRIDE
static final String SALVAGE_SEED
static final String SALVAGE_SPEC_ID_OVERRIDE
static final String COMBAT_CAPITAL
float getMaxDefenderSize()
float getMinDefenderSize()
static String PLANETARY_SHIELD_PLANET
void addCommanderAndOfficers(CampaignFleetAPI fleet, FleetParamsV3 params, Random random)
void setForceIntegrateCores(boolean forceIntegrateCores)
static void integrateAndAdaptCoreForAIFleet(FleetMemberAPI member)
static SalvageEntityGenDataSpec getSalvageSpec(String id)
static final float DEFEATED_TO_QUALITY_FACTOR
static final float DEFEATED_TO_ADDED_FACTOR
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, final Map< String, MemoryAPI > memoryMap)
static final String DEFEATED_DERELICT_STR
static AICoreOfficerPlugin getAICoreOfficerPlugin(String commodityId)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
static Random getRandom(long seed, int level)
static long getSalvageSeed(SectorEntityToken entity)
PersonAPI createPerson(String aiCoreId, String factionId, Random random)
void setName(String name)
void setCommander(PersonAPI commander)
FleetMemberAPI getFlagship()
FleetDataAPI getFleetData()
FleetInflater getInflater()
void setLocation(float x, float y)
List< ShipRolePick > pickShip(String role, ShipPickParams params)
boolean getCustomBoolean(String key)
String pickRandomShipName()
PersonAPI createRandomPerson()
float pickShipAndAddToFleet(String role, ShipPickParams params, CampaignFleetAPI fleet)
void setFlagship(FleetMemberAPI flagship)
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
void setRemoveAfterInflating(boolean removeAfterInflating)
< T > T pickPlugin(Class< T > c, Object params)
SectorEntityToken getInteractionTarget()
GenericPluginManagerAPI getGenericPlugins()
FactionAPI getFaction(String factionId)
MemoryAPI getMemoryWithoutUpdate()
void addDropRandom(String group, int chances)
String getCustomEntityType()
String getCustomDescriptionId()
MemoryAPI getMemoryWithoutUpdate()
float getFloat(String key)
String getString(String key)
boolean contains(String key)
void set(String key, Object value)
boolean getBoolean(String key)
CampaignFleetAPI getFleet(String key)
String getPortraitSprite()
void setPortraitSprite(String portraitSprite)
void setCaptain(PersonAPI commander)
void setShipName(String name)