1package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
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.FactionAPI;
11import com.fs.starfarer.api.campaign.InteractionDialogAPI;
12import com.fs.starfarer.api.campaign.OptionPanelAPI;
13import com.fs.starfarer.api.campaign.RepLevel;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.TextPanelAPI;
16import com.fs.starfarer.api.campaign.econ.MarketAPI;
17import com.fs.starfarer.api.campaign.rules.MemoryAPI;
18import com.fs.starfarer.api.characters.PersonAPI;
19import com.fs.starfarer.api.fleet.FleetMemberAPI;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
21import com.fs.starfarer.api.impl.campaign.ids.Entities;
22import com.fs.starfarer.api.impl.campaign.ids.Ranks;
23import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
24import com.fs.starfarer.api.impl.campaign.intel.BaseMissionIntel.MissionResult;
25import com.fs.starfarer.api.impl.campaign.intel.BaseMissionIntel.MissionState;
26import com.fs.starfarer.api.impl.campaign.intel.FactionCommissionIntel;
27import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
28import com.fs.starfarer.api.ui.TooltipMakerAPI;
29import com.fs.starfarer.api.util.Misc;
30import com.fs.starfarer.api.util.Misc.Token;
44 protected TextPanelAPI
text;
48 protected InteractionDialogAPI
dialog;
55 public boolean execute(String ruleId, InteractionDialogAPI
dialog, List<Token> params, Map<String, MemoryAPI>
memoryMap) {
60 String command = params.get(0).getString(
memoryMap);
61 if (command ==
null)
return false;
75 person =
dialog.getInteractionTarget().getActivePerson();
84 if (command.equals(
"printRequirements")) {
86 }
else if (command.equals(
"playerMeetsCriteria")) {
88 }
else if (command.equals(
"printInfo")) {
90 }
else if (command.equals(
"hasFactionCommission")) {
92 }
else if (command.equals(
"hasOtherCommission")) {
94 memory.set(
"$theOtherCommissionFaction", Misc.getCommissionFaction().getDisplayNameWithArticle(), 0);
95 memory.set(
"$otherCommissionFaction", Misc.getCommissionFaction().getPersonNamePrefix(), 0);
99 }
else if (command.equals(
"accept")) {
101 }
else if (command.equals(
"resign")) {
103 }
else if (command.equals(
"resignNoPenalty")) {
105 }
else if (command.equals(
"personCanGiveCommission")) {
108 else if (command.equals(
"commissionFactionIsAtWarWith")) {
110 if (params.size() >= 1) {
111 String target_faction_id = params.get(0).getString(
memoryMap);
112 FactionAPI target_faction =
Global.
getSector().getFaction(target_faction_id);
113 if(target_faction !=
null )
115 return Misc.getCommissionFaction().isHostileTo(target_faction);
121 else if (command.equals(
"isCargoPodsScam")) {
122 MarketAPI market =
dialog.getInteractionTarget().getMarket();
126 for (SectorEntityToken
entity : market.getContainingLocation().getAllEntities()) {
127 if (Entities.CARGO_PODS.equals(
entity.getCustomEntityType())) {
133 if (
entity.getCargo().getSupplies() >= 10)
142 else if (command.equals(
"recalcFreeSupplyDaysRemaining")) {
143 Object obj1 =
person.getFaction().getMemoryWithoutUpdate().get(
"$playerReceivedCommissionResupplyOn");
144 Object obj2 =
Global.
getSector().getMemoryWithoutUpdate().get(
"$daysSinceStart");
145 if(obj1 ==
null)
return false;
146 if(obj2 ==
null)
return false;
148 float d1 = (Float) obj1;
149 float d2 = (Float) obj2;
151 faction.getMemoryWithoutUpdate().set(
"$daysLeft", (
int)d1 + 365 - (int)d2 , 0);
153 else if (command.equals(
"doesPlayerFleetNeedRepairs")) {
156 float fleetCRcurrent = 0f;
157 float fleetCRmax = 0f;
158 float fleetHullDamage = 0f;
161 for (FleetMemberAPI member :
playerFleet.getMembersWithFightersCopy()) {
162 if(member.isFighterWing())
continue;
165 fleetHullDamage += 1f - member.getStatus().getHullFraction();
166 fleetCRcurrent += member.getRepairTracker().getCR();
167 fleetCRmax += member.getRepairTracker().getMaxCR();
177 boolean needsSupplies =
false;
179 if(fleetHullDamage > 0.5) {
180 needsSupplies =
true;
182 Global.
getSector().getPlayerMemoryWithoutUpdate().set(
"$fleetDamaged",
true , 0);
186 if(fleetHullDamage > 2.5) {
187 needsSupplies =
true;
188 Global.
getSector().getPlayerMemoryWithoutUpdate().set(
"$fleetDamagedLots",
true , 0);
193 if(fleetCRcurrent == 0 || (fleetCRcurrent / fleetCRmax < 0.6f) ) {
194 needsSupplies =
true;
195 Global.
getSector().getPlayerMemoryWithoutUpdate().set(
"$fleetLowCR",
true , 0);
202 return needsSupplies;
209 return faction.getId().equals(Misc.getCommissionFactionId());
218 if (
person.getFaction().isPlayerFaction())
return false;
222 return Ranks.POST_BASE_COMMANDER.equals(
person.getPostId()) ||
223 Ranks.POST_STATION_COMMANDER.equals(
person.getPostId()) ||
224 Ranks.POST_ADMINISTRATOR.equals(
person.getPostId()) ||
225 Ranks.POST_OUTPOST_COMMANDER.equals(
person.getPostId());
228 protected void resign(
boolean withPenalty) {
229 FactionCommissionIntel intel = Misc.getCommissionIntel();
231 MissionResult result = intel.createResignedCommissionResult(withPenalty,
true,
dialog);
232 intel.setMissionResult(result);
233 intel.setMissionState(MissionState.ABANDONED);
239 if (Misc.getCommissionFactionId() ==
null) {
240 FactionCommissionIntel intel =
new FactionCommissionIntel(
faction);
241 intel.missionAccepted();
242 intel.sendUpdate(FactionCommissionIntel.UPDATE_PARAM_ACCEPTED,
dialog.getTextPanel());
243 intel.makeRepChanges(
dialog);
248 TooltipMakerAPI info =
dialog.getTextPanel().beginTooltip();
250 FactionCommissionIntel temp =
new FactionCommissionIntel(
faction);
252 Color h = Misc.getHighlightColor();
253 Color g = Misc.getGrayColor();
257 info.setParaSmallInsignia();
259 int stipend = (int) temp.computeStipend();
261 info.addPara(
"At your experience level, you would receive a %s monthly stipend, as well as a modest bounty for destroying enemy ships.",
262 0f, h, Misc.getDGSCredits(stipend));
264 List<FactionAPI> hostile = temp.getHostileFactions();
265 if (hostile.isEmpty()) {
266 info.addPara(Misc.ucFirst(
faction.getDisplayNameWithArticle()) +
" is not currently hostile to any major factions.", 0f);
268 info.addPara(Misc.ucFirst(
faction.getDisplayNameWithArticle()) +
" is currently hostile to:", opad);
270 info.setParaFontDefault();
272 info.setBulletedListMode(BaseIntelPlugin.INDENT);
273 float initPad = opad;
274 for (FactionAPI other : hostile) {
275 info.addPara(Misc.ucFirst(other.getDisplayName()), other.getBaseUIColor(), initPad);
278 info.setBulletedListMode(
null);
282 dialog.getTextPanel().addTooltip();
static SectorAPI getSector()
static void addRequiredStanding(FactionAPI faction, RepLevel req, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad, boolean orBetter)
static void addCurrentStanding(FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
boolean playerMeetsCriteria()
InteractionDialogAPI dialog
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void resign(boolean withPenalty)
static RepLevel COMMISSION_REQ
boolean hasFactionCommission()
boolean offersCommissions
boolean personCanGiveCommission()
Map< String, MemoryAPI > memoryMap
boolean hasOtherCommission()
CampaignFleetAPI playerFleet