Starsector API
Loading...
Searching...
No Matches
JailbreakMission.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.awt.Color;
4
5import com.fs.starfarer.api.campaign.PersonImportance;
6import com.fs.starfarer.api.campaign.econ.MarketAPI;
7import com.fs.starfarer.api.characters.PersonAPI;
8import com.fs.starfarer.api.impl.campaign.ids.Factions;
9import com.fs.starfarer.api.impl.campaign.ids.Ranks;
10import com.fs.starfarer.api.impl.campaign.ids.Tags;
11import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
12import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
13import com.fs.starfarer.api.ui.TooltipMakerAPI;
14import com.fs.starfarer.api.util.Misc;
15
17
18 public static float MISSION_DAYS = 120f;
19 public static float PROB_COMPLICATIONS = 0.5f;
20
21 public static enum Stage {
22 JAILBREAK,
23 RETURN,
24 COMPLETED,
25 FAILED,
26 FAILED_DECIV,
27 }
28
29 protected MarketAPI market;
30 protected RaidDangerLevel danger;
31 protected int storyCost = 0;
32
33 @Override
34 protected boolean create(MarketAPI createdAt, boolean barEvent) {
35// System.out.println("JAILBREAK: " + genRandom.nextLong());
36
37 if (barEvent) {
44 findOrCreateGiver(createdAt, true, false);
45 }
46
47 PersonAPI person = getPerson();
48 if (person == null) return false;
49
50 if (!setPersonMissionRef(person, "$jabr_ref")) {
51 return false;
52 }
53
54 if (barEvent) {
56 }
57
58 PersonImportance importance = person.getImportance();
59 int minMarketSize = 3;
60 int maxMarketSize = 9;
61 switch (importance) {
62 case VERY_LOW:
63 minMarketSize = 3;
64 maxMarketSize = 4;
65 danger = RaidDangerLevel.MINIMAL;
66 break;
67 case LOW:
68 minMarketSize = 4;
69 maxMarketSize = 4;
70 danger = RaidDangerLevel.LOW;
71 break;
72 case MEDIUM:
73 minMarketSize = 5;
74 maxMarketSize = 5;
75 danger = RaidDangerLevel.MEDIUM;
76 break;
77 case HIGH:
78 minMarketSize = 5;
79 maxMarketSize = 6;
80 danger = RaidDangerLevel.HIGH;
81 break;
82 case VERY_HIGH:
83 minMarketSize = 6;
84 maxMarketSize = 8;
85 danger = RaidDangerLevel.EXTREME;
86 break;
87 }
88
89 requireMarketIsNot(createdAt);
93 preferMarketSizeAtLeast(minMarketSize);
94 preferMarketSizeAtMost(maxMarketSize);
97
98
99 if (market == null) return false;
100 if (!setMarketMissionRef(market, "$jabr_ref")) {
101 return false;
102 }
103
106 return false;
107 }
108
109 makeImportant(market, "$jabr_target", Stage.JAILBREAK);
110 makeImportant(getPerson(), "$jabr_returnHere", Stage.RETURN);
111
112 setStartingStage(Stage.JAILBREAK);
113 setSuccessStage(Stage.COMPLETED);
114 addFailureStages(Stage.FAILED);
115
116 connectWithMemoryFlag(Stage.JAILBREAK, Stage.RETURN, market, "$jabr_needToReturn");
117 setStageOnMemoryFlag(Stage.COMPLETED, person, "$jabr_completed");
118
119 addNoPenaltyFailureStages(Stage.FAILED_DECIV);
120 connectWithMarketDecivilized(Stage.JAILBREAK, Stage.FAILED_DECIV, market);
121 setStageOnMarketDecivilized(Stage.FAILED_DECIV, createdAt);
122
123 setTimeLimit(Stage.FAILED, MISSION_DAYS, null, Stage.RETURN);
124
125 //int size = market.getSize();
126 //setCreditReward(CreditReward.HIGH, size);
127
129 setCreditRewardWithBonus(CreditReward.AVERAGE, bonus);
130
132
133
135 triggerComplicationBegin(Stage.RETURN, ComplicationSpawn.APPROACHING_OR_ENTERING,
136 createdAt.getStarSystem(), Factions.MERCENARY,
137 "the escapee", "they", "the escapee from " + market.getName(),
138 0,
139 true, ComplicationRepImpact.NONE, null);
140 //triggerSetFleetSizeAndQuality(FleetSize.HUGE, FleetQuality.SMOD_3, FleetTypes.PATROL_LARGE);
141 //triggerSetFleetDoctrineComp(0, 0, 5);
143// triggerComplicationBegin(Stage.JAILBREAK, ComplicationSpawn.ENTERING_SYSTEM,
144// createdAt.getStarSystem(), Factions.REMNANTS,
145// "the escapee", "they", "the escapee from " + market.getName(),
146// //getRoundNumber(getCreditsReward() * 1.5f),
147// 10000,
148// true, ComplicationRepImpact.NONE, null);
149// triggerComplicationEnd();
150 }
151
152 return true;
153 }
154
155
156 protected void updateInteractionDataImpl() {
157 set("$jabr_barEvent", isBarEvent());
158 set("$jabr_manOrWoman", getPerson().getManOrWoman());
159 set("$jabr_heOrShe", getPerson().getHeOrShe());
160 set("$jabr_hisOrHer", getPerson().getHisOrHer());
161 set("$jabr_HisOrHer", Misc.ucFirst(getPerson().getHisOrHer()));
162 set("$jabr_reward", Misc.getWithDGS(getCreditsReward()));
163 set("$jabr_storyCost", Misc.getWithDGS(storyCost));
164
165 set("$jabr_systemName", market.getStarSystem().getNameWithLowercaseTypeShort());
166 set("$jabr_marketName", market.getName());
167 set("$jabr_marketOnOrAt", market.getOnOrAt());
168 set("$jabr_marketFactionArticle", market.getFaction().getPersonNamePrefixAOrAn());
169 set("$jabr_marketFaction", market.getFaction().getPersonNamePrefix());
170 set("$jabr_factionColor", market.getFaction().getBaseUIColor());
171 set("$jabr_dist", getDistanceLY(market));
172
173 set("$jabr_danger", danger);
175 }
176
177 @Override
178 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
179 if (getPerson() == null || getPerson().getMarket() == null) return;
180 float opad = 10f;
181 Color h = Misc.getHighlightColor();
182 if (currentStage == Stage.JAILBREAK) {
183 addStandardMarketDesc("Break target out of confinement " + market.getOnOrAt(), market, info, opad);
184 addCustomRaidInfo(market, danger, info, opad);
185
186 } else if (currentStage == Stage.RETURN) {
187 info.addPara(getReturnText(getPerson().getMarket().getName()) + ".", opad);
188 }
189 }
190
191 @Override
192 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
193 Color h = Misc.getHighlightColor();
194 if (currentStage == Stage.JAILBREAK) {
195 info.addPara("Conduct jailbreak " + market.getOnOrAt() + " " + market.getName() +
196 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
197 return true;
198 } else if (currentStage == Stage.RETURN) {
200 return true;
201 }
202 return false;
203 }
204
205 @Override
206 public String getBaseName() {
207 return "Jailbreak";// - " + market.getName();
208 }
209
210// public String getPostfixForState() {
211// String post = super.getPostfixForState();
212// post = post.replaceFirst(" - ", "");
213// if (!post.isEmpty()) post = " (" + post + ")";
214// return post;
215// }
216}
217
218
219
220
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
boolean create(MarketAPI createdAt, boolean barEvent)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
void connectWithMemoryFlag(Object from, Object to, HasMemory withMemory, String flag)
int getMarinesRequiredForCustomObjective(MarketAPI market, RaidDangerLevel danger)
void addCustomRaidInfo(MarketAPI market, RaidDangerLevel danger, TooltipMakerAPI info, float pad)
void makeImportant(PersonAPI person, String flag, Enum ... stages)
void setStageOnMemoryFlag(Object to, HasMemory withMemory, String flag)
void findOrCreateGiver(MarketAPI market, boolean addToCommDirectory, boolean cleanUpOnMissionOverIfWasNewPerson)
static void addStandardMarketDesc(String prefix, MarketAPI market, TooltipMakerAPI info, float pad)
void connectWithMarketDecivilized(Object from, Object to, MarketAPI market)
void triggerComplicationBegin(Object stage, ComplicationSpawn spawnType, StarSystemAPI system, String factionId, String thing, String thingItOrThey, String thingDesc, int paymentOffered, boolean aggressiveIfDeclined, ComplicationRepImpact repImpact, String failTrigger)
static String getWithDGS(float num)
Definition Misc.java:1381
static String ucFirst(String str)
Definition Misc.java:559
static Color getHighlightColor()
Definition Misc.java:792
LabelAPI addPara(String format, float pad, Color hl, String... highlights)