Starsector API
Loading...
Searching...
No Matches
GAFindingCoureuse.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.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.FactionAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.PersonImportance;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.StarSystemAPI;
14import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
15import com.fs.starfarer.api.campaign.econ.MarketAPI;
16import com.fs.starfarer.api.campaign.listeners.BaseFleetEventListener;
17import com.fs.starfarer.api.campaign.rules.MemoryAPI;
18import com.fs.starfarer.api.characters.PersonAPI;
19import com.fs.starfarer.api.impl.campaign.ids.Entities;
20import com.fs.starfarer.api.impl.campaign.ids.Factions;
21import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
22import com.fs.starfarer.api.impl.campaign.ids.People;
23import com.fs.starfarer.api.impl.campaign.ids.Ranks;
24import com.fs.starfarer.api.impl.campaign.ids.Tags;
25import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
26import com.fs.starfarer.api.ui.TooltipMakerAPI;
27import com.fs.starfarer.api.util.Misc;
28import com.fs.starfarer.api.util.Misc.Token;
29import com.fs.starfarer.api.util.WeightedRandomPicker;
30
31public class GAFindingCoureuse extends GABaseMission {
32
33 public static enum Stage {
34 CHOOSE_PATH,
35 INVESTIGATE_FIKENHILD,
36 FOLLOW_THE_EXPERIMENTS,
37 SEARCH_ISIRAH,
38 CONFRONT_ARCHON,
39 VISIT_COUREUSE,
40 RETURN_TO_ACADEMY,
41 COMPLETED,
42 }
43
44 protected PersonAPI baird;
45 protected PersonAPI arroyo;
46 protected PersonAPI coureuse;
47 protected PersonAPI siyavong;
48 protected PersonAPI zal;
49 protected PersonAPI laicailleArchon;
50 protected PersonAPI kapteynAgent;
51 protected SectorEntityToken groombridge;
52 protected StarSystemAPI probeSystem;
53 protected int bribeCost;
54 protected int sellOutPrice;
55 protected int kapteynBribeCost;
56 protected int kapteynBarBribeCost;
57 protected SectorEntityToken scavengerFleet;
58
59
60 @Override
61 protected boolean create(MarketAPI createdAt, boolean barEvent) {
62 // if already accepted by the player, abort
63 if (!setGlobalReference("$gaFC_ref", "$gaFC_inProgress")) {
64 return false;
65 }
66
67 setName("Finding Coureuse");
68
69 MarketAPI laicaille = Global.getSector().getEconomy().getMarket("laicaille_habitat");
70 MarketAPI kapteyn = Global.getSector().getEconomy().getMarket("station_kapteyn");
71 MarketAPI fikenhild = Global.getSector().getEconomy().getMarket("fikenhild");
72 if (laicaille == null || kapteyn == null || fikenhild == null) return false;
73
74 baird = getImportantPerson(People.BAIRD);
75 arroyo = getImportantPerson(People.ARROYO);
76 coureuse = getImportantPerson(People.COUREUSE);
77 siyavong = getImportantPerson(People.SIYAVONG);
78 zal = getImportantPerson(People.ZAL);
79 laicailleArchon = Global.getSector().getImportantPeople().getPerson(People.LAICAILLE_ARCHON);
80
81 // Kind of a lot of effort for a minor character, but ... -dgb
82 kapteynAgent = Global.getSector().getFaction(Factions.PIRATES).createRandomPerson(genRandom);
83 kapteynAgent.setRankId(Ranks.CITIZEN);
84 kapteynAgent.setPostId(Ranks.POST_SHADY);
85 kapteynAgent.setImportance(PersonImportance.MEDIUM);
86 kapteynAgent.addTag(Tags.CONTACT_UNDERWORLD);
87 kapteyn.getCommDirectory().addPerson(kapteynAgent);
88 kapteyn.addPerson(kapteynAgent);
89
90 if (baird == null || arroyo == null || coureuse == null ||
91 siyavong == null || laicailleArchon == null || kapteynAgent == null) return false;
92
93 groombridge = Global.getSector().getEntityById("groombridge_habitat");
94 if (groombridge == null) return false;
95
96
97
98 // Find a system to hide some probes in.
99 resetSearch();
100 requireSystemTags(ReqMode.ANY, Tags.THEME_MISC, Tags.THEME_MISC_SKIP, Tags.THEME_RUINS);
101 requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_UNSAFE, Tags.THEME_CORE, Tags.SYSTEM_ALREADY_USED_FOR_STORY);
102 requireSystemNotAlreadyUsedForStory();
103 requireSystemNotHasPulsar(); // gets really awkward for the scavenger fleet if it does have one
104 preferSystemOnFringeOfSector();
105 preferSystemUnexplored();
106 preferSystemInDirectionOfOtherMissions();
107 probeSystem = pickSystem();
108 if (probeSystem == null) return false;
109
110
111 // this *should* work -Alex
112 // Set up 3? probes in the system to discover.
113 // I sure hope they don't end up in the same place. -dgb
114 SectorEntityToken probe1 = spawnEntity(Entities.GENERIC_PROBE, new LocData(EntityLocationType.HIDDEN, null, probeSystem));
115 SectorEntityToken probe2 = spawnEntity(Entities.GENERIC_PROBE, new LocData(EntityLocationType.HIDDEN_NOT_NEAR_STAR, null, probeSystem));
116 SectorEntityToken probe3 = spawnEntity(Entities.GENERIC_PROBE, new LocData(EntityLocationType.UNCOMMON, null, probeSystem));
117 //SectorEntityToken probe4 = spawnEntity(Entities.GENERIC_PROBE, new LocData(EntityLocationType.HIDDEN, null, probeSystem));
118 if (probe1 == null || probe2 == null || probe3 == null) return false;
119
120 probe1.setCustomDescriptionId("ga_hyperprobe");
121 probe2.setCustomDescriptionId("ga_hyperprobe");
122 probe3.setCustomDescriptionId("ga_hyperprobe");
123
124 // set a random probe as looted.
125 WeightedRandomPicker<SectorEntityToken> picker = new WeightedRandomPicker<SectorEntityToken>(genRandom);
126 picker.add(probe1, 1f);
127 picker.add(probe2, 1f);
128 picker.add(probe3, 1f);
129 picker.pick().addTag("empty");
130
131 // "probe4" is the interior components of the looted probe, held by the scavenger.
132
133 // Add the scavenger
135 // And the ambush fleet.
137 // And the triTach merc! Because I forgot to do this for forever.
139
140 bribeCost = genRoundNumber(15000, 25000); // bribe scavenger
141 sellOutPrice = genRoundNumber(40000, 50000); // payment for selling out Coureuse's loc to TriTach
142 kapteynBribeCost = genRoundNumber(30000, 40000); // bribe Kapteyn admin
143 kapteynBarBribeCost = genRoundNumber(5000, 8000); // bribe someone at Kapteyn bar
144
145 setStoryMission();
146
147 setStartingStage(Stage.CHOOSE_PATH);
148 addSuccessStages(Stage.COMPLETED);
149
150 // doesn't seem necessary since you'll move out of that stage while still talking to Baird
151 // but also wouldn't really hurt anything since it'd get unset when you move to the next stage -Alex
152 //makeImportant(baird, "gaFC_contact", Stage.CHOOSE_PATH);
153
154 makeImportant(fikenhild, "$gaFC_coureuseInvestigation", Stage.INVESTIGATE_FIKENHILD);
155 makeImportant(probe1, "$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
156 makeImportant(probe2, "$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
157 makeImportant(probe3, "$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
158 //makeImportant(probe4, "$gaFC_probe", Stage.FOLLOW_THE_EXPERIMENTS);
159
160
161 // I'm not sure I want to indicate where the 'clues' in Isirah are. -dgb
162 // Update; but I DO want to flag the Isirah system. Maybe I'll just give Laicaille. -dgb
163 makeImportant(laicailleArchon, "$gaFC_clue", Stage.SEARCH_ISIRAH);
164 //makeImportant(kapteyn.getAdmin(), "$gaFC_clue", Stage.SEARCH_ISIRAH);
165 //makeImportant(groombridge, "$gaFC_clue", Stage.SEARCH_ISIRAH);
166
167 makeImportant(laicailleArchon, "$gaFC_confront", Stage.CONFRONT_ARCHON);
168 makeImportant(laicaille, "$gaFC_safehouse", Stage.VISIT_COUREUSE);
169 makeImportant(baird.getMarket(), "$gaFC_returnHere", Stage.RETURN_TO_ACADEMY);
170
171 //setStageOnGlobalFlag(Stage.CHOOSE_PATH, "$gaFC_choosePath");
172 setStageOnGlobalFlag(Stage.INVESTIGATE_FIKENHILD, "$gaFC_pickedBranchFikenhild");
173 setStageOnGlobalFlag(Stage.FOLLOW_THE_EXPERIMENTS, "$gaFC_pickedBranchProbes");
174 setStageOnGlobalFlag(Stage.SEARCH_ISIRAH, "$gaFC_searchIsirah");
175 setStageOnGlobalFlag(Stage.CONFRONT_ARCHON, "$gaFC_confrontArchon");
176 setStageOnGlobalFlag(Stage.VISIT_COUREUSE, "$gaFC_visitCoureuse");
177 setStageOnGlobalFlag(Stage.RETURN_TO_ACADEMY, "$gaFC_returnToAcademy");
178 setStageOnGlobalFlag(Stage.COMPLETED, "$gaFC_completed");
179
180 // after she's moved to GA
181 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
182 triggerUnhideCommListing(coureuse);
183 endTrigger();
184
185 beginStageTrigger(Stage.RETURN_TO_ACADEMY);
186 triggerHideCommListing(coureuse);
187 endTrigger();
188
189 float baseDelay = genDelay(14f); // 3f; // 90f; // randomize this a bit via genDelay()
190 beginStageTrigger(Stage.COMPLETED);
191 triggerRunScriptAfterDelay(genDelay(baseDelay), new GAFCReplaceArchon());
192 //triggerSetGlobalMemoryValueAfterDelay(genDelay(2f), "$gaFC_missionCompleted", true);
193 triggerSetGlobalMemoryValue("$gaFC_missionCompleted", true);
194 triggerMakeNonStoryCritical(coureuse.getMarket(), arroyo.getMarket(),
195 siyavong.getMarket(), zal.getMarket(),
196 laicailleArchon.getMarket(), kapteynAgent.getMarket());
197 endTrigger();
198
199 setSystemWasUsedForStory(Stage.CHOOSE_PATH, probeSystem);
200
201 return true;
202 }
203
204 @Override
205 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
206 Map<String, MemoryAPI> memoryMap) {
207
208 if ("postFikenhildCleanup".equals(action)) {
209 // $global. is not needed here (and in fact will not work) since
210 // Global.getSector().getMemoryWithoutUpdate() returns the global memory already -Alex
211 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_triedToSeeCavin");
212 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_beingConspicuous");
213 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_triedToSeeCavin");
214 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_knowSiyavongContact");
215 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_knockedAnyway");
216 Global.getSector().getMemoryWithoutUpdate().unset("$gaFC_madeSiyavongAngry");
217
218 //$global.gaFC_knowElissasName // maybe keep this one around for meeting Zal in the Gates arc
219 //$global.gaFC_gotZalContactFromCavin // maybe use when meeting Coureuse
220
221 MarketAPI fikenhild = Global.getSector().getEconomy().getMarket("fikenhild");
222 if (fikenhild != null) {
223 fikenhild.getMemoryWithoutUpdate().unset("$visitedA");
224 fikenhild.getMemoryWithoutUpdate().unset("$visitedB");
225 fikenhild.getMemoryWithoutUpdate().unset("$visitedC");
226 }
227
228 return true;
229 }
230 if ("dropStolenProbe".equals(action)) {
231 //SectorEntityToken probe = system.addCustomEntity(null,
232 //"Probe name or null if it's in custom_entities",
233 //"<entity type id from custom entities>, Factions.NEUTRAL);
234 //probe.setLocation(scavenger.getLocation().x, scavenger.getLocation().y); // with some extra offset if needed etc
235
236 SectorEntityToken scavenger = getEntityFromGlobal("$gaFC_probeScavenger");
237 //LocationAPI dropLocation = scavenger.getContainingLocation();
238 SectorEntityToken probe4 = probeSystem.addCustomEntity(null, "Ejected Cargo Pod", Entities.CARGO_POD_SPECIAL, Factions.NEUTRAL);
239 //does this need Misc.genUID() as first parameter?
240 probe4.setLocation(scavenger.getLocation().x, scavenger.getLocation().y); // redundant?
241 // spawnEntity(Entities.GENERIC_PROBE, scavenger.getLocation());
242 probe4.addTag("gaFC_lootedProbe"); //unused?
243 Misc.makeImportant(probe4, getMissionId());
244 //Misc.makeUnimportant(scavenger, getMissionId());
245 // it was getting re-flagged "important" when updateData etc was called since
246 // it was still noted down that it should be important during the current stage
247 // this method call cleans that out
248 makeUnimportant(scavenger);
249
250 return true;
251 }
252 if ("foundEmptyProbe".equals(action)) {
253 // found empty probe, so now player suspects the scavenger of taking it -dgb
254 SectorEntityToken scavenger = getEntityFromGlobal("$gaFC_probeScavenger");
255 Misc.makeImportant(scavenger, getMissionId());
256
257 return true;
258 }
259 if (dialog != null && action.equals("showKapteynBarAgent")) {
260 showPersonInfo(kapteynAgent, dialog, false, false);
261 return true;
262 }
263 if ("soldOutIsirahLead".equals(action)) {
264 // 3 should be good -dgb
268 return true;
269 }
270
271 return false;
272 }
273
274 protected void updateInteractionDataImpl() {
275 set("$gaFC_stage", getCurrentStage());
276 set("$gaFC_starName", probeSystem.getNameWithNoType());
277 set("$gaFC_siyavong", siyavong);
278 set("$gaFC_bribeCost", Misc.getWithDGS(bribeCost));
279 set("$gaFC_kapteynBribeCost", Misc.getWithDGS(kapteynBribeCost));
280 set("$gaFC_kapteynBarBribeCost", Misc.getWithDGS(kapteynBarBribeCost));
281 set("$gaFC_sellOutPrice", Misc.getWithDGS(sellOutPrice));
282 //set("$gaFC_laicailleArchon", laicailleArchon);
283
284 set("$gaFC_KBAheOrShe", kapteynAgent.getHeOrShe());
285 set("$gaFC_KBAHeOrShe", kapteynAgent.getHeOrShe().substring(0, 1).toUpperCase() + kapteynAgent.getHeOrShe().substring(1));
286 set("$gaFC_KBAhisOrHer", kapteynAgent.getHisOrHer());
287 set("$gaFC_KBAHisOrHet", kapteynAgent.getHisOrHer().substring(0, 1).toUpperCase() + kapteynAgent.getHisOrHer().substring(1));
288 set("$gaFC_KBAhimOrHer", kapteynAgent.getHimOrHer());
289 set("$gaFC_KBAHimOrHet", kapteynAgent.getHimOrHer().substring(0, 1).toUpperCase() + kapteynAgent.getHimOrHer().substring(1));
290
291 }
292
293 @Override
294 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
295 float opad = 10f;
296 //Color h = Misc.getHighlightColor();
297 FactionAPI heg = Global.getSector().getFaction(Factions.HEGEMONY);
298
299 if (currentStage == Stage.RETURN_TO_ACADEMY) {
300 info.addPara("You've found Academician Scylla Coureuse and brought her out of hiding to return her to"
301 + " work on Baird's secret project at the Galatia Academy.",opad);
302 } else {
303 info.addPara("Find Scylla Coureuse, a former academician of the Galatia Academy who went into hiding "
304 + "after the Hegemony crackdown on hyperspace experimentation.", opad, heg.getBaseUIColor(), "Hegemony");
305 }
306
307 if (currentStage == Stage.INVESTIGATE_FIKENHILD) {
308 info.addPara("Talk to contacts on Fikenhild associated with Scylla Coureuse to find a lead to her current location -"
309 + " or attract the attention of someone who knows where she is.", opad);
310 //info.addPara(getGoTalkToPersonText(arroyo) + ". He has a relationship with Provost Baird that "
311 // + "can be leveraged to compel his cooperation.", opad);
312 } else if (currentStage == Stage.FOLLOW_THE_EXPERIMENTS) {
313 info.addPara(getGoToSystemTextShort(probeSystem) + " and search for the experimental packages possibly being used by Coureuse.",opad);
314 //info.addPara("Visit " + probe_system.getNameString() + " in person, at his planetside chalet.", opad);
315 } else if (currentStage == Stage.SEARCH_ISIRAH) {
316 info.addPara("Search the Isirah system for Scylla Coureuse. Talk to people who might be involved in hiding "
317 + "her and search for signs of her research.", opad);
318 } else if (currentStage == Stage.CONFRONT_ARCHON) {
319 info.addPara("Confront the archon of Laicaille Habitat about hiding Scylla Coureuse on the station.", opad);
320 } else if (currentStage == Stage.VISIT_COUREUSE) {
321 info.addPara("Visit the safehouse of Scylla Coureuse and convince her to come back to the Galatia Academy.", opad);
322 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
323 info.addPara("Return to the Galatia Academy and talk to Provost Baird.", opad);
324 }
325 }
326
327 @Override
328 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
329 Color h = Misc.getHighlightColor();
330 if (currentStage == Stage.CHOOSE_PATH) {
331 // this text doesn't seem necessary here - maybe something simpler?
332 //info.addPara(getGoTalkToPersonText(baird), tc, pad);
333 info.addPara("Find former academician Scylla Coureuse", tc, pad);
334 return true;
335 } else if (currentStage == Stage.INVESTIGATE_FIKENHILD) {
336
337 info.addPara("Talk to associates of Scylla Coureuse on Fikenhild to find a lead to her location"
338 + " or attract attention from someone who knows where she is", tc, pad);
339 return true;
340 } else if (currentStage == Stage.FOLLOW_THE_EXPERIMENTS) {
341 info.addPara(getGoToSystemTextShort(probeSystem) +
342 " and search for the experimental packages possibly being used by Coureuse", tc, pad);
343 return true;
344 } else if (currentStage == Stage.SEARCH_ISIRAH) {
345 info.addPara("Search the Isirah system for Scylla Coureuse, talk to people who might be hiding "
346 + "her, and search for signs of her research.", tc, pad);
347 //info.addPara(getGoToMarketText(loke.getMarket()) + " and pick up the hack device", tc, pad);
348 return true;
349 } else if (currentStage == Stage.CONFRONT_ARCHON) {
350 info.addPara("Confront the archon of Laicaille Habitat about hiding Scylla Coureuse on the station", tc, pad);
351 //info.addPara(getGoToSystemTextShort(relay.getStarSystem()) + " and install hack transmitter " +
352 // "on " + relay.getName() + "", tc, pad);
353 return true;
354 } else if (currentStage == Stage.VISIT_COUREUSE) {
355 info.addPara("Go to the safehouse of Scylla Coureuse and convince her to return to the Galatia Academy", tc, pad);
356 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
357 info.addPara("Return to the Galatia Academy and talk to Provost Baird", tc, pad);
358 }
359 return false;
360 }
361
362 @Override
363 public String getPostfixForState() {
364 if (startingStage != null) {
365 return "";
366 }
367 return super.getPostfixForState();
368 }
369
370 protected void addProbeScavengerFleet()
371 {
372 // Near the star? Okay, hope this works.
373 //SectorEntityToken fleetLocation = probeSystem.getStar();
374
375 // no reason for the scavenger fleet to exist unless the player is nearby
376 beginWithinHyperspaceRangeTrigger(probeSystem, 3f, false, Stage.FOLLOW_THE_EXPERIMENTS);
377 triggerCreateFleet(FleetSize.SMALL, FleetQuality.LOWER, Factions.SCAVENGERS, FleetTypes.SCAVENGER_MEDIUM, probeSystem);
378 triggerSetFleetOfficers(OfficerNum.FEWER, OfficerQuality.LOWER);
379 triggerSetFleetFaction(Factions.INDEPENDENT);
380 triggerMakeLowRepImpact();
381 triggerFleetSetAvoidPlayerSlowly();
382 triggerMakeFleetIgnoredByOtherFleets();
383 triggerMakeFleetIgnoreOtherFleetsExceptPlayer();
384 //triggerPickLocationAtClosestToEntityJumpPoint(probeSystem, fleetLocation);
385 triggerPickLocationAtInSystemJumpPoint(probeSystem); // so it's not always the one closest to the star...
386 triggerSetEntityToPickedJumpPoint();
387 triggerPickLocationAroundEntity(1500);
388 triggerSpawnFleetAtPickedLocation("$gaFCProbe_scavengerPermanentFlag", null);
389 triggerFleetSetTravelActionText("exploring system");
390 triggerFleetSetPatrolActionText("searching for salvage");
391 triggerOrderFleetPatrolEntity(false);
392 triggerFleetAddDefeatTrigger("gaFCScavengerDefeated");
393 triggerSaveGlobalFleetRef("$gaFC_probeScavenger");
394 // only becomes "important" when player finds empty probe
395 //triggerFleetMakeImportant(null, Stage.SEARCH_ISIRAH);
396 endTrigger();
397 }
398
399
400 protected void addPatherAmbushFleet()
401 {
402 //SectorEntityToken location = probeSystem.getStar();
403 beginGlobalFlagTrigger("$gaFC_triggerPatherAmbush", Stage.FOLLOW_THE_EXPERIMENTS);
404 triggerCreateFleet(FleetSize.SMALL, FleetQuality.VERY_LOW, Factions.LUDDIC_PATH, FleetTypes.PATROL_SMALL, probeSystem);
405 //triggerMakeNonHostile(); // should it be hostile?
406 triggerMakeHostileAndAggressive();
407 triggerMakeLowRepImpact();
408 triggerFleetPatherNoDefaultTithe();
409 triggerPickLocationAtClosestToPlayerJumpPoint(probeSystem);
410 triggerSetEntityToPickedJumpPoint();
411 triggerFleetSetPatrolActionText("waiting");
412 triggerPickLocationTowardsEntity(null, 15f, getUnits(1.0f)); // towards the jump-point we just picked
413 triggerSpawnFleetAtPickedLocation("$gaFC_patherProbeAmbush", null);
414 triggerSetFleetMissionRef("$gaFC_ref"); // so they can be made unimportant
415 triggerFleetMakeImportant(null, Stage.FOLLOW_THE_EXPERIMENTS);
416 triggerOrderFleetInterceptPlayer();
417 //triggerFleetAddDefeatTrigger("gaFCPatherAmbushDefeated");
418 endTrigger();
419 }
420
421 protected void spawnTriTachMercFleet()
422 {
423 // Doesn't matter which path player took previously - just spawn near Isirah to enhance "Fun".
424 StarSystemAPI isirah = Global.getSector().getStarSystem("isirah");
425 beginWithinHyperspaceRangeTrigger(isirah, 3f, true, Stage.SEARCH_ISIRAH);
426 triggerCreateFleet(FleetSize.LARGE, FleetQuality.HIGHER, Factions.MERCENARY, FleetTypes.MERC_PRIVATEER, isirah);
427 triggerSetFleetFaction(Factions.INDEPENDENT);
428 triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
429 //triggerAutoAdjustFleetStrengthMajor();
430 //triggerMakeHostileAndAggressive(); //
431 triggerMakeNonHostile();
432 //triggerMakeNoRepImpact();
433 triggerFleetAllowLongPursuit();
434 triggerSetFleetAlwaysPursue();
435 //triggerMakeLowRepImpact();
436 triggerPickLocationTowardsPlayer(isirah.getHyperspaceAnchor(), 90f, getUnits(1.5f));
437 triggerSpawnFleetAtPickedLocation("$gaFC_isirahMerc", null);
438 triggerOrderFleetInterceptPlayer();
439 triggerSetFleetMissionRef("$gaFC_ref"); // so they can be made unimportant
440 triggerFleetMakeImportant(null, Stage.SEARCH_ISIRAH);
441 // ^ was CONFRONT_ARCHON - but should come a stage sooner to intercept player before reaching Isirah system
442 endTrigger();
443 }
444
446 {
447 // if you sold out Coureuse, put a few random Tri-Tachyon fleets in Isirah system
448 // they'll hang around 'til the end of the mission arc
449 // patrol around Isirah system looking generally suspicious. -dgb
450
451 StarSystemAPI isirah = Global.getSector().getStarSystem("isirah");
452 // false just so when ctrl-click into isirah they spawn anyway
453 beginWithinHyperspaceRangeTrigger(isirah, 3f, false, Stage.SEARCH_ISIRAH);
454 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.HIGHER, Factions.TRITACHYON, FleetTypes.MERC_BOUNTY_HUNTER, isirah);
455 triggerSetFleetFaction(Factions.TRITACHYON);
456 triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
457
458
459 triggerFleetSetTravelActionText("traveling"); // this gets shown when they're nearing the system in hyper
460 triggerFleetSetPatrolActionText("searching system");
461 triggerPickLocationTowardsPlayer(isirah.getHyperspaceAnchor(), 90f, getUnits(1.5f));
462 triggerSpawnFleetAtPickedLocation("$gaFC_isirahTriTach", null);
463 //triggerOrderFleetInterceptPlayer();
464 //triggerFleetMakeImportant(null, Stage.CONFRONT_ARCHON);
465
466 triggerOrderFleetPatrol(isirah, true, Tags.OBJECTIVE, Tags.PLANET); // not STATION, otherwise they murder the pirate station -dgb
467 triggerOrderFleetPatrol();
468 endTrigger();
469 }
470}
471
472
473
474
475
static SectorAPI getSector()
Definition Global.java:59
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)