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
16public class JailbreakMission extends HubMissionWithBarEvent {
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) {
38 setGiverRank(Ranks.CITIZEN);
39 setGiverPost(pickOne(Ranks.POST_AGENT, Ranks.POST_SMUGGLER, Ranks.POST_GANGSTER,
40 Ranks.POST_FENCE, Ranks.POST_CRIMINAL));
41 setGiverImportance(pickImportance());
42 setGiverFaction(Factions.PIRATES);
43 setGiverTags(Tags.CONTACT_UNDERWORLD);
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) {
55 setGiverIsPotentialContactOnSuccess();
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);
90 requireMarketNotHidden();
91 requireMarketNotInHyperspace();
92 requireMarketFactionNotPlayer();
93 preferMarketSizeAtLeast(minMarketSize);
94 preferMarketSizeAtMost(maxMarketSize);
95 preferMarketInDirectionOfOtherMissions();
96 market = pickMarket();
97
98
99 if (market == null) return false;
100 if (!setMarketMissionRef(market, "$jabr_ref")) {
101 return false;
102 }
103
104 int marines = getMarinesRequiredForCustomObjective(market, danger);
105 if (!isOkToOfferMissionRequiringMarines(marines)) {
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
128 int bonus = getRewardBonusForMarines(getMarinesRequiredForCustomObjective(market, danger));
129 setCreditRewardWithBonus(CreditReward.AVERAGE, bonus);
130
131 storyCost = getRoundNumber(getCreditsReward() / 2);
132
133
134 if (rollProbability(PROB_COMPLICATIONS)) {
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);
142 triggerComplicationEnd(true);
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);
174 set("$jabr_marines", Misc.getWithDGS(getMarinesRequiredForCustomObjective(market, danger)));
175 }
176
177 @Override
178 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
179 float opad = 10f;
180 Color h = Misc.getHighlightColor();
181 if (currentStage == Stage.JAILBREAK) {
182 addStandardMarketDesc("Break target out of confinement " + market.getOnOrAt(), market, info, opad);
183 addCustomRaidInfo(market, danger, info, opad);
184
185 } else if (currentStage == Stage.RETURN) {
186 info.addPara(getReturnText(getPerson().getMarket().getName()) + ".", opad);
187 }
188 }
189
190 @Override
191 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
192 Color h = Misc.getHighlightColor();
193 if (currentStage == Stage.JAILBREAK) {
194 info.addPara("Conduct jailbreak " + market.getOnOrAt() + " " + market.getName() +
195 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
196 return true;
197 } else if (currentStage == Stage.RETURN) {
198 info.addPara(getReturnTextShort(getPerson().getMarket().getName()), tc, pad);
199 return true;
200 }
201 return false;
202 }
203
204 @Override
205 public String getBaseName() {
206 return "Jailbreak";// - " + market.getName();
207 }
208
209// public String getPostfixForState() {
210// String post = super.getPostfixForState();
211// post = post.replaceFirst(" - ", "");
212// if (!post.isEmpty()) post = " (" + post + ")";
213// return post;
214// }
215}
216
217
218
219
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
boolean create(MarketAPI createdAt, boolean barEvent)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)