Starsector API
Loading...
Searching...
No Matches
GABuyArtifact.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.InteractionDialogAPI;
8import com.fs.starfarer.api.campaign.econ.MarketAPI;
9import com.fs.starfarer.api.campaign.rules.MemoryAPI;
10import com.fs.starfarer.api.characters.PersonAPI;
11import com.fs.starfarer.api.impl.campaign.ids.Factions;
12import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
13import com.fs.starfarer.api.ui.TooltipMakerAPI;
14import com.fs.starfarer.api.util.Misc;
15import com.fs.starfarer.api.util.Misc.Token;
16
17public class GABuyArtifact extends GABaseMission {
18
19 public static float RAID_DIFFICULTY = 100f;
20
21 public static float MISSION_DAYS = 120f;
22
23 public static float PROB_PIRATE_FLEET = 1f/4f;
24 public static float PROB_PATHER_FLEET = 1f/3f;
25 public static float PROB_TRITACH_FLEET = 1f/2f;
26
27 public static float PROB_PIRATE_VARIATION = 0.5f;
28
29
30 public static enum Stage {
31 GO_TO_MARKET,
32 RETURN_TO_ACADEMY,
33 COMPLETED,
34 FAILED,
35 FAILED_DECIV,
36 }
37
38 public static enum Variation {
39 PIRATE,
40 PATHER,
41 }
42
43 protected MarketAPI market;
44 protected Variation variation;
45 protected PersonAPI contact;
46 protected String item;
47
48 protected int costNormal;
49 protected int costHigh;
50 protected int costVeryLow;
51
52 @Override
53 protected boolean create(MarketAPI createdAt, boolean barEvent) {
54 // if this mission type was already accepted by the player, abort
55 if (!setGlobalReference("$gaBA_ref")) {
56 return false;
57 }
58 if (getGlobalMemory().contains("$gaBA_playerOwes")) {
59 return false; // the player needs to pay back the advance before this mission is offered again
60 }
61
63
64 if (rollProbability(PROB_PIRATE_VARIATION)) {
65 variation = Variation.PIRATE;
66 } else {
67 variation = Variation.PATHER;
68 }
69
70 resetSearch();
71
72 if (variation == Variation.PIRATE) {
73 requireMarketFaction(Factions.PIRATES);
74 } else {
75 requireMarketFaction(Factions.LUDDIC_PATH, Factions.LUDDIC_CHURCH);
76 }
77 requireMarketNotHidden();
78 requireMarketNotInHyperspace();
79 requireMarketLocationNot("galatia");
80 preferMarketInDirectionOfOtherMissions();
81 market = pickMarket();
82
83// market = getMarket("kantas_den");
84// variation = Variation.PIRATE;
85
86 if (market == null) {
87 return false;
88 }
89
90 if (variation == Variation.PIRATE) {
91 contact = findOrCreateCriminalTrader(market, true);
92 } else {
93 contact = findOrCreateTrader(Factions.LUDDIC_PATH, market, true);
94 }
95 if (contact == null) {
96 return false;
97 }
98
99 item = pickOne(
100 "unique regenerative structural elements",
101 "an advanced phase conversion prototype",
102 "an example of a lost technology",
103 "experimental hull material samples",
104 "uncommon power system components",
105 "Domain-era forge components",
106 "a small-scale momentum decoupling device",
107 "a fascinating low-power field projector",
108 "parts of an experimental bulk phase converter",
109 "classified Explorarium probe samples"
110 );
111
112 setStartingStage(Stage.GO_TO_MARKET);
113 addSuccessStages(Stage.COMPLETED);
114 addFailureStages(Stage.FAILED);
115 addNoPenaltyFailureStages(Stage.FAILED_DECIV);
116
117 //setPersonDoGenericPortAuthorityCheck(contact);
118 makeImportant(contact, "$gaBA_contact", Stage.GO_TO_MARKET);
119 makeImportant(getPerson(), "$gaBA_returnHere", Stage.RETURN_TO_ACADEMY);
120
121 connectWithGlobalFlag(Stage.GO_TO_MARKET, Stage.RETURN_TO_ACADEMY, "$gaBA_needToReturn");
122 setStageOnGlobalFlag(Stage.COMPLETED, "$gaBA_completed");
123 setStageOnGlobalFlag(Stage.FAILED, "$gaBA_failed");
124
125 connectWithMarketDecivilized(Stage.GO_TO_MARKET, Stage.FAILED_DECIV, market);
126
127 if (WITH_TIME_LIMIT) {
128 setTimeLimit(Stage.FAILED, MISSION_DAYS, market.getStarSystem(), Stage.RETURN_TO_ACADEMY);
129 }
130 //setCreditReward(30000, 40000);
131 setCreditReward(CreditReward.AVERAGE);
133
134 costNormal = genRoundNumber(40000, 50000);
135 costHigh = genRoundNumber(70000, 80000);
136 costVeryLow = genRoundNumber(5000, 8000);
137
138 beginStageTrigger(Stage.FAILED, Stage.FAILED_DECIV);
139 triggerSetGlobalMemoryValuePermanent("$gaBA_playerOwes", true);
140 triggerSetGlobalMemoryValuePermanent("$gaBA_failedItem", getWithoutArticle(item));
141 triggerSetGlobalMemoryValuePermanent("$gaBA_failedCredits", Misc.getWithDGS(costNormal));
142 endTrigger();
143
144 if (rollProbability(PROB_PIRATE_FLEET)) {
145 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
146 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, createdAt.getPrimaryEntity());
147 //triggerFleetSetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
148 triggerAutoAdjustFleetStrengthModerate();
149 //triggerSetFleetDoctrineOther(5, 4);
150
151 triggerSetStandardAggroPirateFlags();
152 triggerFleetAllowLongPursuit();
153 triggerSetFleetAlwaysPursue();
154 triggerPickLocationTowardsPlayer(createdAt.getStarSystem().getHyperspaceAnchor(), 90f, getUnits(1.5f));
155 triggerSpawnFleetAtPickedLocation("$pwi_wantsItem", null);
156 triggerSetFleetMemoryValue("$pwi_item", getWithoutArticle(item));
157 triggerSetFleetMemoryValue("$pwi_credits", Misc.getWithDGS(genRoundNumber(10000, 15000)));
158 triggerSetFleetMemoryValue("$pwi_missionFailTrigger", "GABAHandedOverItemFailMission");
159 triggerOrderFleetInterceptPlayer();
160 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
161 endTrigger();
162 } else if (rollProbability(PROB_PATHER_FLEET)) {
163 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
164 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.LUDDIC_PATH, FleetTypes.PATROL_MEDIUM, createdAt.getPrimaryEntity());
165 triggerAutoAdjustFleetStrengthModerate();
166 triggerSetStandardAggroPirateFlags();
167 triggerFleetAllowLongPursuit();
168 triggerSetFleetAlwaysPursue();
169 triggerPickLocationTowardsPlayer(createdAt.getStarSystem().getHyperspaceAnchor(), 90f, getUnits(1.5f));
170 triggerSpawnFleetAtPickedLocation("$pwi2_wantsItem", null);
171 triggerSetFleetMemoryValue("$pwi2_item", getWithoutArticle(item));
172 triggerSetFleetMemoryValue("$pwi2_missionFailTrigger", "GABAHandedOverItemFailMission");
173 triggerOrderFleetInterceptPlayer();
174 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
175 endTrigger();
176 } else if (rollProbability(PROB_TRITACH_FLEET)) {
177 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
178 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.TRITACHYON, FleetTypes.TASK_FORCE, createdAt.getPrimaryEntity());
179 triggerAutoAdjustFleetStrengthModerate();
180 triggerFleetAllowLongPursuit();
181 triggerPickLocationTowardsPlayer(createdAt.getStarSystem().getHyperspaceAnchor(), 90f, getUnits(1.5f));
182 triggerSpawnFleetAtPickedLocation("$ttwi_wantsItem", null);
183 triggerSetFleetMemoryValue("$ttwi_item", getWithoutArticle(item));
184 triggerSetFleetMemoryValue("$ttwi_credits", Misc.getWithDGS(genRoundNumber(120000, 150000)));
185 triggerSetFleetMemoryValue("$ttwi_missionFailTrigger", "GABAHandedOverItemFailMission");
186 triggerOrderFleetInterceptPlayer();
187 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
188 endTrigger();
189 }
190
191
192 return true;
193 }
194
195 @Override
196 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
197 Map<String, MemoryAPI> memoryMap) {
198// if (dialog != null && action.equals("showLeader")) {
199// showPersonInfo(leader, dialog, false, false);
200// return true;
201// }
202 return false;
203 }
204
205 protected void updateInteractionDataImpl() {
206 set("$gaBA_department", department);
207 set("$gaBA_marketName", market.getName());
208 set("$gaBA_onOrAt", market.getOnOrAt());
209
210 set("$gaBA_contactName", contact.getNameString());
211 set("$gaBA_raidDifficulty", RAID_DIFFICULTY);
212
213 set("$gaBA_costVeryLow", Misc.getWithDGS(costVeryLow));
214 set("$gaBA_costNormal", Misc.getWithDGS(costNormal));
215 set("$gaBA_costHigh", Misc.getWithDGS(costHigh));
216
217 set("$gaBA_systemName", market.getStarSystem().getNameWithNoType());
218 set("$gaBA_dist", getDistanceLY(market));
219 set("$gaBA_reward", Misc.getWithDGS(getCreditsReward()));
220 set("$gaBA_variation", variation);
221
222 set("$gaBA_aOrAnItem", item);
223 set("$gaBA_item", getWithoutArticle(item));
224 }
225
226 @Override
227 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
228 float opad = 10f;
229 Color h = Misc.getHighlightColor();
230 if (currentStage == Stage.GO_TO_MARKET) {
231 info.addPara(getGoToMarketText(market) +
232 ", and buy " + item + " from " + contact.getNameString() + ".", opad);
233 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
234 info.addPara(getReturnText("the Galatia Academy") + ".", opad);
235 }
236 }
237
238 @Override
239 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
240 Color h = Misc.getHighlightColor();
241 if (currentStage == Stage.GO_TO_MARKET) {
242 info.addPara(getGoToMarketText(market), tc, pad);
243 return true;
244 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
245 info.addPara(getReturnTextShort("the Galatia Academy"), tc, pad);
246 return true;
247 }
248 return false;
249 }
250
251 @Override
252 public String getBaseName() {
253 return "Acquire Artifact";
254 }
255
256}
257
258
259
260
261
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean create(MarketAPI createdAt, boolean barEvent)