1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
6import org.lwjgl.util.vector.Vector2f;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.FactionAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.OptionPanelAPI;
14import com.fs.starfarer.api.campaign.RepLevel;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.TextPanelAPI;
17import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
18import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
19import com.fs.starfarer.api.campaign.rules.MemoryAPI;
20import com.fs.starfarer.api.characters.AbilityPlugin;
21import com.fs.starfarer.api.characters.PersonAPI;
22import com.fs.starfarer.api.fleet.FleetMemberAPI;
23import com.fs.starfarer.api.impl.campaign.abilities.DistressCallAbility;
24import com.fs.starfarer.api.impl.campaign.ids.Abilities;
25import com.fs.starfarer.api.impl.campaign.ids.Commodities;
26import com.fs.starfarer.api.impl.campaign.ids.Entities;
27import com.fs.starfarer.api.impl.campaign.ids.Strings;
28import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
29import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
30import com.fs.starfarer.api.util.Misc;
31import com.fs.starfarer.api.util.Misc.Token;
44 protected CampaignFleetAPI
fleet;
48 protected TextPanelAPI
text;
52 protected InteractionDialogAPI
dialog;
57 public boolean execute(String ruleId, InteractionDialogAPI
dialog, List<Token> params, Map<String, MemoryAPI>
memoryMap) {
62 String command = params.get(0).getString(
memoryMap);
63 if (command ==
null)
return false;
77 person =
dialog.getInteractionTarget().getActivePerson();
80 fleet = (CampaignFleetAPI)
dialog.getInteractionTarget();
82 if (command.equals(
"playerNeedsHelp")) {
84 }
else if (command.equals(
"didNotNeedHelp")) {
87 else if (command.equals(
"acceptHelp")) {
90 else if (command.equals(
"neverMind")) {
93 else if (command.equals(
"isCargoPodsScam")) {
96 else if (command.equals(
"cargoPodsScam")) {
99 else if (command.equals(
"unrespond")) {
102 else if (command.equals(
"init")) {
105 else if (command.equals(
"pay")) {
108 else if (command.equals(
"thank")) {
116 person.getMemoryWithoutUpdate().set(
"$distressUsesLastCycle",
getNumUses(), 0);
123 boolean adequate = fuel <= maxFuel * 1.5f && supplies <= maxSupplies * 1.5f;
124 person.getMemoryWithoutUpdate().set(
"$distressHelpAdequate", adequate, 0);
128 person.getMemoryWithoutUpdate().set(
"$distressPayment", Misc.getWithDGS(distressPayment), 0);
129 person.getMemoryWithoutUpdate().set(
"$distressPaymentC", Misc.getWithDGS(distressPayment) + Strings.C, 0);
130 person.getMemoryWithoutUpdate().set(
"$distressCanAfford", distressPayment <=
playerCargo.getCredits().get(), 0);
138 if (fuel > maxFuel) fuel = maxFuel;
139 if (supplies > maxSupplies) supplies = maxSupplies;
144 float distressPayment = fuel * fuelComm.getBasePrice() + supplies * suppliesComm.getBasePrice();
145 distressPayment = (float) Math.ceil(distressPayment / 10000f) * 10000f;
146 distressPayment *= 2f;
148 return (
int) distressPayment;
152 AbilityPlugin plugin =
playerFleet.getAbility(Abilities.DISTRESS_CALL);
153 if (plugin !=
null) {
154 int uses = ((DistressCallAbility) plugin).getNumUsesInLastPeriod();
165 Misc.adjustRep(
REP_SCAM, RepLevel.INHOSPITABLE,
fleet.getFaction().getId(),
173 for (SectorEntityToken
entity :
fleet.getContainingLocation().getAllEntities()) {
174 if (Entities.CARGO_PODS.equals(
entity.getCustomEntityType())) {
175 VisibilityLevel level =
entity.getVisibilityLevelTo(
fleet);
176 if (level == VisibilityLevel.COMPOSITION_DETAILS ||
177 level == VisibilityLevel.COMPOSITION_AND_FACTION_DETAILS) {
178 if (
entity.getCargo().getFuel() >= 10 ||
entity.getCargo().getSupplies() >= 10) {
188 float returnDistLY = Misc.getDistanceLY(
new Vector2f(),
playerFleet.getLocationInHyperspace());
189 int fuel = (int) (returnDistLY * Math.max(1,
playerFleet.getLogistics().getFuelCostPerLightYear()));
191 if (fuel < 10) fuel = 10;
193 if (fuel < 0) fuel = 0;
201 for (FleetMemberAPI member :
playerFleet.getFleetData().getMembersListCopy()) {
202 supplies += member.getStats().getSuppliesPerMonth().getModifiedValue();
206 if (supplies < 5) supplies = 5;
208 if (supplies < 0) supplies = 0;
210 return (
int) supplies;
220 Misc.adjustRep(penalty, RepLevel.INHOSPITABLE,
fleet.getFaction().getId(),
221 penalty * 2f, RepLevel.INHOSPITABLE,
person,
text);
228 Misc.adjustRep(penalty * 0.5f, RepLevel.INHOSPITABLE,
fleet.getFaction().getId(),
229 penalty, RepLevel.INHOSPITABLE,
person,
text);
233 return (
int) Math.max(10, (
fleet.getCargo().getMaxFuel() * 0.25f));
236 return (
int) Math.max(10, (
fleet.getCargo().getMaxCapacity() * 0.1f));
241 int credits = (int)
person.getMemoryWithoutUpdate().getFloat(
"$distressPayment");
247 Misc.adjustRep(0.01f, RepLevel.WELCOMING,
fleet.getFaction().getId(),
254 Misc.adjustRep(penalty, RepLevel.INHOSPITABLE,
fleet.getFaction().getId(),
255 penalty * 2f, RepLevel.INHOSPITABLE,
person,
text);
265 if (fuel > maxFuel) fuel = maxFuel;
266 if (supplies > maxSupplies) supplies = maxSupplies;
285 Misc.clearTarget(
fleet,
true);
286 Misc.makeUnimportant(
fleet,
"distressResponse");
287 fleet.getMemoryWithoutUpdate().unset(
"$distressResponse");
288 Misc.giveStandardReturnToSourceAssignments(
fleet);
static SettingsAPI getSettings()
static SectorAPI getSector()
static void addCommodityGainText(String commodityId, int quantity, TextPanelAPI text)
static void addCreditsLossText(int credits, TextPanelAPI text)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
CampaignFleetAPI playerFleet
InteractionDialogAPI dialog
Map< String, MemoryAPI > memoryMap
boolean playerNeedsHelp()
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean isCargoPodsScam()
CommoditySpecAPI getCommoditySpec(String commodityId)