Starsector API
Loading...
Searching...
No Matches
GAProbePackage.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.academy;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Map;
6
7import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.StarSystemAPI;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Entities;
14import com.fs.starfarer.api.impl.campaign.ids.Factions;
15import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
16import com.fs.starfarer.api.impl.campaign.ids.Tags;
17import com.fs.starfarer.api.impl.campaign.ids.Terrain;
18import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BreadcrumbSpecial;
20import com.fs.starfarer.api.ui.TooltipMakerAPI;
21import com.fs.starfarer.api.util.Misc;
22import com.fs.starfarer.api.util.Misc.Token;
23
24public class GAProbePackage extends GABaseMission {
25
26 public static float MISSION_DAYS = 120f;
27 public static float PROB_PATHERS = 0.5f;
28 public static float PROB_NOT_ASTEROIDS = 0.5f;
29
30 public static float PROB_IT_BLEW_UP = 0.33f;
31 public static float PROB_MISSING = 0.5f;
32 public static float PROB_SCAVENGER = 0.5f;
33
34
35 public static enum Stage {
36 GO_TO_PROBE,
37 FIND_SCAVENGER,
38 RETURN_TO_ACADEMY,
39 COMPLETED,
40 FAILED,
41 }
42
43 public static enum Variation {
44 BASIC,
45 SCAVENGER,
46 IT_BLEW_UP,
47 PACKAGE_MISSING,
48 }
49
51 protected Variation variation;
54 protected int hazardPay;
55
56 @Override
57 protected boolean create(MarketAPI createdAt, boolean barEvent) {
58 // if this mission type was already accepted by the player, abort
59 if (!setGlobalReference("$gaProbe_ref")) {
60 return false;
61 }
62
63 //genRandom = Misc.random;
64
66
72 }
73
74 // important to put these last - requirements that come earlier have higher priority
79
80 //setGenRandom(new Random(99923667662341234L));
81 object = pickTerrain();
82
83 if (object == null) {
84 return false;
85 }
86
87 system = object.getStarSystem();
88
89 // PROB_IT_BLEW_UP = 1f;
90 // PROB_PATHERS = 1f;
91
93 variation = Variation.IT_BLEW_UP;
94 } else if (rollProbability(PROB_MISSING)) {
95 variation = Variation.PACKAGE_MISSING;
96 } else if (rollProbability(PROB_SCAVENGER)) {
97 variation = Variation.SCAVENGER;
98 } else {
99 variation = Variation.BASIC;
100 }
101 //variation = Variation.SCAVENGER;
102 //variation = Variation.BASIC;
103 //variation = Variation.IT_BLEW_UP;
104 //variation = Variation.PACKAGE_MISSING;
105
106 setStartingStage(Stage.GO_TO_PROBE);
107 addSuccessStages(Stage.COMPLETED);
108 addFailureStages(Stage.FAILED);
109
110 probe = spawnEntity(Entities.GENERIC_PROBE, new LocData(object));
111 if (probe == null) return false;
112
113 probe.setId("gaProbe_probe");
114 makeImportant(probe, "$gaProbe_probe", Stage.GO_TO_PROBE);
115 makeImportant(getPerson(), "$gaProbe_returnHere", Stage.RETURN_TO_ACADEMY);
116
117 connectWithGlobalFlag(Stage.GO_TO_PROBE, Stage.FIND_SCAVENGER, "$gaProbe_scavengerTookIt");
118 setStageOnGlobalFlag(Stage.RETURN_TO_ACADEMY, "$gaProbe_canReturn");
119 connectWithGlobalFlag(Stage.RETURN_TO_ACADEMY, Stage.COMPLETED, "$gaProbe_finished");
120
121 if (WITH_TIME_LIMIT) {
122 setTimeLimit(Stage.FAILED, MISSION_DAYS, system, Stage.RETURN_TO_ACADEMY);
123 }
124 //setCreditReward(30000, 40000);
125 setCreditReward(CreditReward.AVERAGE);
127 if (variation == Variation.IT_BLEW_UP) {
129 spawnDebrisField(DEBRIS_SMALL, DEBRIS_DENSE, new LocData(probe, false));
130 spawnShipGraveyard(Factions.LUDDIC_PATH, 3, 5, new LocData(probe, false));
131
133 beginWithinHyperspaceRangeTrigger(object, 1f, false, Stage.GO_TO_PROBE);
134 triggerCreateFleet(FleetSize.TINY, FleetQuality.VERY_LOW, Factions.LUDDIC_PATH, FleetTypes.PATROL_SMALL, object);
140 triggerSetFleetMissionRef("$gaProbe_ref");
141 triggerFleetSetPatrolActionText("waiting"); // a bit dark, maybe?
145 triggerSpawnFleetAtPickedLocation("$gaProbe_patherPermanentFlag", null);
146 triggerFleetMakeImportant("$gaProbe_patherMissionInProgress", Stage.GO_TO_PROBE);
147 endTrigger();
148 }
149 }
150
151 if (variation == Variation.SCAVENGER) {
152 beginWithinHyperspaceRangeTrigger(object, 1f, false, Stage.GO_TO_PROBE);
153 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.LOWER, Factions.SCAVENGERS, FleetTypes.SCAVENGER_MEDIUM, system);
156
160
164
165 // so the flag is there prior to the FIND_SCAVENGER stage
166 triggerSpawnFleetAtPickedLocation("$gaProbe_scavenger", null);
167
168 triggerFleetSetTravelActionText("exploring system");
169 triggerFleetSetPatrolActionText("preparing to leave system");
171
172 triggerFleetMakeImportant("$gaProbe_scavenger", Stage.FIND_SCAVENGER);
173 triggerFleetAddDefeatTrigger("gaProbeScavengerDefeated");
174 endTrigger();
175 }
176
178
179 return true;
180 }
181
182 @Override
183 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
184 if (action.equals("updateReward")) {
186 return true;
187 }
188 return false;
189 }
190
191
192 protected void updateInteractionDataImpl() {
193 set("$gaProbe_department", department);
194 if (getCurrentStage() != null) {
195 set("$gaProbe_stage", ((Enum)getCurrentStage()).name());
196 }
197 set("$gaProbe_celestialObjectNameWithType", getObjectNameWithType());
198 set("$gaProbe_starName", system.getNameWithNoType());
199 set("$gaProbe_systemName", system.getNameWithLowercaseTypeShort());
200 set("$gaProbe_dist", getDistanceLY(object));
201 set("$gaProbe_reward", Misc.getWithDGS(getCreditsReward()));
202 set("$gaProbe_hazardPay", Misc.getWithDGS(hazardPay));
203 set("$gaProbe_variation", variation);
204 }
205
206 @Override
207 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
208 float opad = 10f;
209 Color h = Misc.getHighlightColor();
210 if (currentStage == Stage.GO_TO_PROBE) {
211 if (probe != null) {
212 String loc = BreadcrumbSpecial.getLocatedString(probe, true);
213 info.addPara("Recover an instrument package from a probe " + loc + ".", opad);
214 } else {
215 info.addPara("Recover an instrument package from a probe in the " +
217 }
218 } else if (currentStage == Stage.FIND_SCAVENGER) {
219 info.addPara("Go to the nearest jump-point and retrieve the instrument package " +
220 " from scavengers before they leave the system.", opad);
221 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
222 info.addPara("Return the instrument package to the Galatia Academy and talk to " +
223 getPerson().getNameString() + " to receive your reward.", opad);
224 }
225 }
226
227 @Override
228 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
229 Color h = Misc.getHighlightColor();
230 if (currentStage == Stage.GO_TO_PROBE) {
232 info.addPara("Recover the instrument package from the probe", tc, pad);
233 } else {
234 info.addPara(getGoToSystemTextShort(system), tc, pad);
235 }
236 return true;
237 } else if (currentStage == Stage.FIND_SCAVENGER) {
238 info.addPara("Recover the instrument package from scavengers at one of the jump-points",
239 tc, pad);
240 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
241 info.addPara("Return to the Galatia Academy and talk to " + getPerson().getNameString(), tc, pad);
242 return true;
243 }
244 return false;
245 }
246
247
248 protected String getObjectNameWithType() {
249 if (hasSpecialName(object)) {
250 return getTerrainTypeAOrAn(object) + " " + getTerrainType(object) + " called " + getTerrainName(object);
251 } else {
252 return getTerrainTypeAOrAn(object) + " " + getTerrainType(object);
253 }
254 }
255
256 @Override
257 public String getBaseName() {
258 return "Recover Instrument Package";
259 }
260
261}
262
263
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean create(MarketAPI createdAt, boolean barEvent)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
void connectWithGlobalFlag(Object from, Object to, String flag)
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
SectorEntityToken spawnDebrisField(float radius, float density, LocData data)
SectorEntityToken spawnEntity(String entityId, LocData data)
void makeImportant(PersonAPI person, String flag, Enum ... stages)
static boolean hasSpecialName(CampaignTerrainAPI terrain)
static String getTerrainTypeAOrAn(CampaignTerrainAPI terrain)
void spawnShipGraveyard(String factionId, int minShips, int maxShips, LocData data)
void beginWithinHyperspaceRangeTrigger(SectorEntityToken entity, float rangeLY, boolean requirePlayerInHyperspace, Object ... stages)
void triggerPickLocationAtClosestToEntityJumpPoint(StarSystemAPI system, SectorEntityToken entity)
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, StarSystemAPI roughlyWhere)
static String getWithDGS(float num)
Definition Misc.java:1381
static Color getHighlightColor()
Definition Misc.java:792
LabelAPI addPara(String format, float pad, Color hl, String... highlights)