1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
3import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.CargoStackAPI;
11import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin.DataForEncounterSide;
12import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin.FleetMemberData;
13import com.fs.starfarer.api.campaign.InteractionDialogAPI;
14import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.rules.MemoryAPI;
17import com.fs.starfarer.api.combat.BattleCreationContext;
18import com.fs.starfarer.api.fleet.FleetMemberAPI;
19import com.fs.starfarer.api.impl.campaign.FleetEncounterContext;
20import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl;
21import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.BaseFIDDelegate;
22import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfig;
23import com.fs.starfarer.api.impl.campaign.ids.Drops;
24import com.fs.starfarer.api.impl.campaign.ids.Factions;
25import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
26import com.fs.starfarer.api.impl.campaign.ids.Stats;
27import com.fs.starfarer.api.impl.campaign.ids.Tags;
28import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
29import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
30import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
31import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageGenFromSeed.SDMParams;
32import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageGenFromSeed.SalvageDefenderModificationPlugin;
33import com.fs.starfarer.api.loading.WeaponSpecAPI;
34import com.fs.starfarer.api.util.Misc;
35import com.fs.starfarer.api.util.Misc.Token;
43 if (dialog ==
null)
return false;
49 if (defenders ==
null)
return false;
53 final FIDConfig config =
new FIDConfig();
54 config.leaveAlwaysAvailable =
true;
55 config.showCommLinkOption =
false;
56 config.showEngageText =
false;
57 config.showFleetAttitude =
false;
58 config.showTransponderStatus =
false;
59 config.showWarningDialogWhenNotHostile =
false;
60 config.alwaysAttackVsAttack =
true;
61 config.impactsAllyReputation =
true;
62 config.impactsEnemyReputation =
false;
63 config.pullInAllies =
false;
64 config.pullInEnemies =
false;
65 config.pullInStations =
false;
66 config.lootCredits =
false;
68 config.firstTimeEngageOptionText =
"Engage the automated defenses";
69 config.afterFirstTimeEngageOptionText =
"Re-engage the automated defenses";
70 config.noSalvageLeaveOptionText =
"Continue";
72 config.dismissOnLeave =
false;
73 config.printXPToDialog =
true;
82 config.delegate =
new BaseFIDDelegate() {
100 SDMParams p =
new SDMParams();
105 SalvageDefenderModificationPlugin.class, p);
106 if (plugin !=
null) {
107 plugin.reportDefeated(p, entity, defenders);
110 memory.
unset(
"$hasDefenders");
111 memory.
unset(
"$defenderFleet");
112 memory.
set(
"$defenderFleetDefeated",
true);
114 FireBest.
fire(
null, dialog, memoryMap,
"BeatDefendersContinue");
116 boolean persistDefenders =
false;
120 if (member.getStatus().needsRepairs()) {
121 persistDefenders =
true;
127 if (persistDefenders) {
135 memory.
expire(
"$defenderFleet", 10);
145 bcc.aiRetreatAllowed =
false;
146 bcc.objectivesAllowed =
false;
147 bcc.enemyDeployAll =
true;
154 if (winner ==
null || loser ==
null)
return;
158 List<DropData> dropRandom =
new ArrayList<DropData>();
159 List<DropData> dropValue =
new ArrayList<DropData>();
164 for (FleetMemberData data : winner.getEnemyCasualties()) {
167 if (data.getMember() !=
null && context.
getBattle() !=
null) {
171 for (String slotId : data.getMember().getVariant().getNonBuiltInWeaponSlots()) {
172 String weaponId = data.getMember().getVariant().getWeaponId(slotId);
173 if (weaponId ==
null)
continue;
188 if (config.salvageRandom.nextFloat() < playerContribMult) {
189 DropData drop =
new DropData();
192 switch (data.getMember().getHullSpec().getHullSize()) {
208 if (drop.group !=
null) {
209 dropRandom.add(drop);
220 if (stack.isFuelStack()) {
221 stack.setSize((
int)(stack.getSize() * fuelMult));
static SettingsAPI getSettings()
static SectorAPI getSector()
DataForEncounterSide getLoserData()
float computePlayerContribFraction()
boolean didPlayerWinEncounterOutright()
float getSalvageValueModPlayerShips()
boolean isEngagedInHostilities()
DataForEncounterSide getWinnerData()
void init(InteractionDialogAPI dialog)
static final String AI_CORES2
static final String AI_CORES3
static final String AI_CORES1
static final String CUSTOM_NO_AI_CORES_FROM_AUTOMATED_DEFENSES
static final String OMEGA
static final String SALVAGE_SEED
static final String FUEL_SALVAGE_VALUE_MULT_FLEET
static final String BATTLE_SALVAGE_MULT_FLEET
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, final Map< String, MemoryAPI > memoryMap)
static CargoAPI generateSalvage(Random random, float valueMult, float overallMult, float fuelMult, List< DropData > dropValue, List< DropData > dropRandom)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
static Random getRandom(long seed, int level)
WeaponSpecAPI getWeaponSpec(String weaponId)
CampaignFleetAPI getSourceFleet(FleetMemberAPI member)
FleetDataAPI getFleetData()
MutableFleetStatsAPI getStats()
void setLocation(float x, float y)
void setDoNotAdvanceAI(Boolean doNotAdvanceAI)
void addFromStack(CargoStackAPI stack)
void addWeapons(String id, int count)
int getNumWeapons(String id)
List< CargoStackAPI > getStacksCopy()
boolean getCustomBoolean(String key)
List< FleetMemberAPI > getMembersListCopy()
< T > T pickPlugin(Class< T > c, Object params)
void setInteractionTarget(SectorEntityToken interactionTarget)
void setPlugin(InteractionDialogPlugin plugin)
InteractionDialogPlugin getPlugin()
SectorEntityToken getInteractionTarget()
CampaignFleetAPI getPlayerFleet()
GenericPluginManagerAPI getGenericPlugins()
boolean hasScriptOfClass(Class c)
LocationAPI getContainingLocation()
void removeScriptsOfClass(Class c)
void addScript(EveryFrameScript script)
void setContainingLocation(LocationAPI location)
MemoryAPI getMemoryWithoutUpdate()
void expire(String key, float days)
void set(String key, Object value)
CampaignFleetAPI getFleet(String key)
DynamicStatsAPI getDynamic()
boolean hasTag(String tag)
float getValue(String id)