Starsector API
Loading...
Searching...
No Matches
Commission.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Map;
6
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;
31
36public class Commission extends BaseCommandPlugin {
37
39
44 protected TextPanelAPI text;
47 protected MemoryAPI memory;
49 protected Map<String, MemoryAPI> memoryMap;
50 protected PersonAPI person;
52
53 protected boolean offersCommissions;
54
55 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
56
57 this.dialog = dialog;
58 this.memoryMap = memoryMap;
59
60 String command = params.get(0).getString(memoryMap);
61 if (command == null) return false;
62
64
68
71
74
77
78 offersCommissions = faction.getCustomBoolean("offersCommissions");
79
80
81 //printInfo
82 //accept
83
84 if (command.equals("printRequirements")) {
86 } else if (command.equals("playerMeetsCriteria")) {
87 return playerMeetsCriteria();
88 } else if (command.equals("printInfo")) {
89 printInfo();
90 } else if (command.equals("hasFactionCommission")) {
91 return hasFactionCommission();
92 } else if (command.equals("hasOtherCommission")) {
93 if (hasOtherCommission()) {
94 memory.set("$theOtherCommissionFaction", Misc.getCommissionFaction().getDisplayNameWithArticle(), 0);
95 memory.set("$otherCommissionFaction", Misc.getCommissionFaction().getPersonNamePrefix(), 0);
96 return true;
97 }
98 return false;
99 } else if (command.equals("accept")) {
100 accept();
101 } else if (command.equals("resign")) {
102 resign(true);
103 } else if (command.equals("resignNoPenalty")) {
104 resign(false);
105 } else if (command.equals("personCanGiveCommission")) {
107 }
108 else if (command.equals("commissionFactionIsAtWarWith")) {
109 if (hasOtherCommission()) {
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 )
114 {
115 return Misc.getCommissionFaction().isHostileTo(target_faction);
116 }
117 }
118 }
119 return false;
120 }
121 else if (command.equals("isCargoPodsScam")) {
123 if(market == null)
124 return false;
125 //Misc.getStorage(market)
128
129 // use player fleet 'cause it's in market range, right? And therefore scan range.
130 // market is otherwise attached to a station or planet entity (who knows!)
132 if( dist < 500f)
133 if (entity.getCargo().getSupplies() >= 10)
134 {
135 return true;
136 }
137
138 }
139 }
140 return false;
141 }
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;
147
148 float d1 = (Float) obj1;
149 float d2 = (Float) obj2;
150
151 faction.getMemoryWithoutUpdate().set("$daysLeft", (int)d1 + 365 - (int)d2 , 0);
152 }
153 else if (command.equals("doesPlayerFleetNeedRepairs")) {
154
155
156 float fleetCRcurrent = 0f;
157 float fleetCRmax = 0f;
158 float fleetHullDamage = 0f;
159
160 //playerFleet.getFleetData().getMembersListCopy()
162 if(member.isFighterWing()) continue; // no one cares about fighters.
163
164 //if (member.canBeRepaired()) {
165 fleetHullDamage += 1f - member.getStatus().getHullFraction();
166 fleetCRcurrent += member.getRepairTracker().getCR();
167 fleetCRmax += member.getRepairTracker().getMaxCR();
168
169 }
170
171
172 //System.out.println("doesPlayerFleetNeedRepairs results:");
173 //System.out.println("fleetCRcurrent = " + fleetCRcurrent);
174 //System.out.println("fleetCRmax = " + fleetCRmax);
175 //System.out.println("fleetHullDamage = " + fleetHullDamage); // ever 1f is about 100% of a ship
176
177 boolean needsSupplies = false;
178
179 if(fleetHullDamage > 0.5) {
180 needsSupplies = true;
181
182 Global.getSector().getPlayerMemoryWithoutUpdate().set("$fleetDamaged", true , 0);
183 //memory.set("$fleetDamaged", true , 0); // "Looks like you've taken some damage."
184 }
185
186 if(fleetHullDamage > 2.5) {
187 needsSupplies = true;
188 Global.getSector().getPlayerMemoryWithoutUpdate().set("$fleetDamagedLots", true , 0); // "Your fleet is in rough shape, captain."
189 }
190
191
192 // basically, if the CR percent is less than 60% (of max) for the fleet, acknowledge that supplies are needed.
193 if(fleetCRcurrent == 0 || (fleetCRcurrent / fleetCRmax < 0.6f) ) {
194 needsSupplies = true;
195 Global.getSector().getPlayerMemoryWithoutUpdate().set("$fleetLowCR", true , 0);
196 }
197
198 //memory.set("$fleetLowCR", true , 0);
199 //memory.set("$fleetDamaged", true , 0);
200 //memory.set("$fleetDamagedLots", true , 0);
201
202 return needsSupplies;
203 }
204
205 return true;
206 }
207
208 protected boolean hasFactionCommission() {
209 return faction.getId().equals(Misc.getCommissionFactionId());
210 }
211 protected boolean hasOtherCommission() {
212 return Misc.getCommissionFactionId() != null && !hasFactionCommission();
213 }
214
215
216 protected boolean personCanGiveCommission() {
217 if (person == null || !offersCommissions) return false;
218 if (person.getFaction().isPlayerFaction()) return false;
219
220 //if (Misc.getCommissionFactionId() != null) return false;
221
222 return Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
226 }
227
228 protected void resign(boolean withPenalty) {
230 if (intel != null) {
231 MissionResult result = intel.createResignedCommissionResult(withPenalty, true, dialog);
232 intel.setMissionResult(result);
233 intel.setMissionState(MissionState.ABANDONED);
234 intel.endMission(dialog);
235 }
236 }
237
246
247 protected void printInfo() {
249
251
252 Color h = Misc.getHighlightColor();
253 Color g = Misc.getGrayColor();
254 float pad = 3f;
255 float opad = 10f;
256
258
259 int stipend = (int) temp.computeStipend();
260
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));
263
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);
267 } else {
268 info.addPara(Misc.ucFirst(faction.getDisplayNameWithArticle()) + " is currently hostile to:", opad);
269
270 info.setParaFontDefault();
271
273 float initPad = opad;
274 for (FactionAPI other : hostile) {
275 info.addPara(Misc.ucFirst(other.getDisplayName()), other.getBaseUIColor(), initPad);
276 initPad = 3f;
277 }
278 info.setBulletedListMode(null);
279 }
280
281
283 }
284
285
286 protected boolean playerMeetsCriteria() {
288 }
293
294
295
296}
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
static SectorAPI getSector()
Definition Global.java:65
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)
void sendUpdate(Object listInfoParam, TextPanelAPI textPanel)
MissionResult createResignedCommissionResult(boolean withPenalty, boolean inPerson, InteractionDialogAPI dialog)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static String getDGSCredits(float num)
Definition Misc.java:1390
static String ucFirst(String str)
Definition Misc.java:559
static FactionCommissionIntel getCommissionIntel()
Definition Misc.java:2432
static Color getGrayColor()
Definition Misc.java:826
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static Color getHighlightColor()
Definition Misc.java:792
static FactionAPI getCommissionFaction()
Definition Misc.java:2424
static String getCommissionFactionId()
Definition Misc.java:2419
List< FleetMemberAPI > getMembersWithFightersCopy()
boolean isHostileTo(FactionAPI other)
List< SectorEntityToken > getAllEntities()
FactionAPI getFaction(String factionId)
void set(String key, Object value)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)
void setBulletedListMode(String itemPrefix)