132 protected boolean create(MarketAPI createdAt,
boolean barEvent) {
134 if (!setGlobalReference(
"$gaATG_ref",
"$gaATG_inProgress")) {
138 baird = getImportantPerson(People.BAIRD);
139 if (
baird ==
null)
return false;
141 coureuse = getImportantPerson(People.COUREUSE);
144 gargoyle = getImportantPerson(People.GARGOYLE);
150 siyavong = getImportantPerson(People.SIYAVONG);
153 daud = getImportantPerson(People.DAUD);
154 if (
daud ==
null)
return false;
156 kanta = getImportantPerson(People.KANTA);
157 if (
kanta ==
null)
return false;
159 loke = getImportantPerson(People.CLONE_LOKE);
160 if (
loke ==
null)
return false;
162 cotton = getImportantPerson(People.COTTON);
163 if (
cotton ==
null)
return false;
165 zal = getImportantPerson(People.ZAL);
166 if (
zal ==
null)
return false;
169 if (
kazeron ==
null)
return false;
184 StarSystemAPI magec =
kantasDen.getStarSystem();
185 for (SectorEntityToken curr : magec.getCustomEntitiesWithTag(Tags.GATE)) {
196 for (SectorEntityToken curr : galatia.getCustomEntitiesWithTag(Tags.GATE)) {
205 setName(
"At The Gates");
206 setRepFactionChangesNone();
207 setRepPersonChangesNone();
215 beginStageTrigger(Stage.TALK_TO_HEGEMON);
216 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.HIGHER, Factions.PERSEAN, FleetTypes.PATROL_MEDIUM,
kazeron.getStarSystem());
217 triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
218 triggerMakeNonHostile();
219 triggerMakeFleetIgnoreOtherFleetsExceptPlayer();
220 triggerFleetAllowLongPursuit();
221 triggerSetFleetAlwaysPursue();
222 triggerFleetMakeFaster(
true, 1,
true);
224 triggerPickLocationAroundEntity(
kazeron.getStarSystem().getHyperspaceAnchor(), 250f);
225 triggerSpawnFleetAtPickedLocation(
"$gaATG_siyavongFleet",
null);
229 triggerSetFleetMissionRef(
"$gaATG_ref");
230 triggerOrderFleetInterceptPlayer();
231 triggerOrderFleetEBurn(1f);
232 triggerFleetMakeImportant(
null, Stage.TALK_TO_HEGEMON);
237 List<SectorEntityToken> jumpPoints =
magecGate.getStarSystem().getJumpPoints();
238 for (SectorEntityToken point : jumpPoints) {
247 scanEncounterVariations =
new ArrayList<ScanEncounterVariation>(Arrays.asList(ScanEncounterVariation.values()));
255 setStartingStage(Stage.TALK_TO_COUREUSE);
256 addSuccessStages(Stage.COMPLETED);
258 makeImportant(
coureuse,
null, Stage.TALK_TO_COUREUSE);
260 makeImportant(
daud,
null, Stage.TALK_TO_HEGEMON);
262 makeImportant(
baird,
null, Stage.RETURN_WITH_DEAL_AND_SCANS);
263 makeImportant(
baird,
null, Stage.FIRST_JANUS_RESULTS);
264 makeImportant(
coureuse,
null, Stage.COUREUSE_MISSION);
265 makeImportant(
kantasDen,
"$gaATG_talkToKanta", Stage.TALK_TO_KANTA);
266 makeImportant(
epiphany,
"$gaATG_findingLoke", Stage.FINDING_LOKE);
267 makeImportant(
kanta.getMarket(),
null, Stage.RETURN_TO_KANTA);
268 makeImportant(
magecGate,
null, Stage.GO_TO_MAGEC_GATE);
269 makeImportant(
baird.getMarket(),
null, Stage.ZAL_TO_GALATIA);
272 connectWithGlobalFlag(Stage.TALK_TO_COUREUSE, Stage.TALK_TO_YARIBAY,
"$gaATG_goTalkToYaribay");
273 connectWithGlobalFlag(Stage.TALK_TO_YARIBAY, Stage.TALK_TO_HEGEMON,
"$gaATG_goTalkToDaud");
274 connectWithGlobalFlag(Stage.TALK_TO_HEGEMON, Stage.MEET_DAUD,
"$gaATG_goToDaudMeeting");
275 connectWithGlobalFlag(Stage.MEET_DAUD, Stage.DO_SCANS,
"$gaATG_gotDaudDeal");
276 connectWithGlobalFlag(Stage.DO_SCANS, Stage.RETURN_WITH_DEAL_AND_SCANS,
"$gaATG_scannedSixGates");
277 setStageOnGlobalFlag(Stage.FIRST_JANUS_EXPERIMENT,
"$gaATG_useJanusPrototype");
278 setStageOnGlobalFlag(Stage.FIRST_JANUS_RESULTS,
"$gaATG_firstJanusResults");
279 setStageOnGlobalFlag(Stage.COUREUSE_MISSION,
"$gaATG_getMissionFromCoureuse");
280 setStageOnGlobalFlag(Stage.TALK_TO_KANTA,
"$gaATG_gotKantaToken");
281 setStageOnGlobalFlag(Stage.FINDING_LOKE,
"$gaATG_findingLoke");
282 setStageOnGlobalFlag(Stage.RETURN_TO_KANTA,
"$gaATG_foundLoke");
283 setStageOnGlobalFlag(Stage.GO_TO_MAGEC_GATE,
"$gaATG_foundZal");
285 connectWithEnteredLocation(Stage.GO_TO_MAGEC_GATE, Stage.ZAL_TO_GALATIA, galatia);
287 setStageOnGlobalFlag(Stage.COMPLETED,
"$gaATG_completed");
290 beginStageTrigger(Stage.COMPLETED);
291 triggerSetGlobalMemoryValue(
"$gaATG_missionCompleted",
true);
298 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
299 Map<String, MemoryAPI> memoryMap) {
302 if (
"scannedGateForCoureuse".equals(action)) {
306 else if (
"setGalatiaGateScanned".equals(action))
312 else if (
"clearedHegemonyGate".equals(action)) {
316 else if (
"clearedHegemonyGateSendScans".equals(action)) {
323 else if (
"sentHegemonyScan".equals(action)) {
327 else if (
"clearedLuddicGate".equals(action)) {
331 else if (
"luddicGateFleetMoveAway".equals(action)) {
334 encounterLuddicFleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_AVOID_PLAYER_SLOWLY,
true);
335 encounterLuddicFleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_IGNORE_PLAYER_COMMS,
true);
338 else if (
"luddicGateFleetMoveBack".equals(action)) {
346 else if (
"boughtTTscan".equals(action)) {
353 else if (
"clearedTTGate".equals(action)) {
357 else if (
"clearedPirateGate".equals(action)) {
362 else if (
"doZalEscape".equals(action)) {
367 else if (
"giveJanusDevice".equals(action)) {
369 cargo.addSpecial(
new SpecialItemData(Items.JANUS,
null), 1);
371 AddRemoveCommodity.addStackGainText(stack, dialog.getTextPanel());
374 else if (
"endMissionCleanup".equals(action)){
376 epiphany.getMemoryWithoutUpdate().unset(
"$askedForKidnapperCotton");
377 epiphany.getMemoryWithoutUpdate().unset(
"$offeredBribeForCotton");
378 epiphany.getMemoryWithoutUpdate().unset(
"$setUpCottonMeeting");
379 epiphany.getMemoryWithoutUpdate().unset(
"$askedBarCotton");
380 epiphany.getMemoryWithoutUpdate().unset(
"$setUpCottonMeeting");
385 else if (
"zalCommHack".equals(action)){
387 TextPanelAPI text = dialog.getTextPanel();
388 text.setFontVictor();
389 Color red = Misc.getNegativeHighlightColor();
390 text.addParagraph(
"COMM FEED 0 INTERRUPTED \nCOMM FEED 1 INTERRUPTED", red);
392 text.setFontInsignia();
395 else if (
"zalMinesHack".equals(action))
400 else if (
"giveJanusDevice".equals(action))
403 cargo.addSpecial(
new SpecialItemData(Items.JANUS,
null), 1);
405 AddRemoveCommodity.addStackGainText(stack, dialog.getTextPanel());
707 if (getCurrentStage() ==
null)
return;
710 if (((Enum)getCurrentStage()).ordinal() >= Stage.RETURN_WITH_DEAL_AND_SCANS.ordinal())
return;
711 if (((Enum)getCurrentStage()).ordinal() < Stage.TALK_TO_YARIBAY.ordinal())
return;
713 if(!(currLoc instanceof StarSystemAPI))
return;
718 StarSystemAPI system = (StarSystemAPI) currLoc;
724 if (system.hasTag(Tags.THEME_UNSAFE))
return;
725 if(Misc.hasPulsar(system))
return;
728 SectorEntityToken gate =
null;
729 for (SectorEntityToken curr : system.getCustomEntitiesWithTag(Tags.GATE)) {
737 if (gate ==
null)
return;
745 ScanEncounterVariation chosenEncounter =
null;
751 for (MarketAPI market :
Global.
getSector().getEconomy().getMarkets(system)) {
753 market.getFactionId().equals(Factions.HEGEMONY) &&
756 chosenEncounter = ScanEncounterVariation.HEGEMONY;
760 market.getFactionId().equals(Factions.TRITACHYON) &&
763 chosenEncounter = ScanEncounterVariation.TRITACHYON;
767 market.getFactionId().equals(Factions.LUDDIC_CHURCH) &&
770 chosenEncounter = ScanEncounterVariation.LUDDIC;
774 market.getFactionId().equals(Factions.LUDDIC_CHURCH) &&
777 chosenEncounter = ScanEncounterVariation.LUDDIC;
781 market.getFactionId().equals(Factions.PIRATES) &&
784 chosenEncounter = ScanEncounterVariation.PIRATE;
790 if( chosenEncounter ==
null)
795 if( chosenEncounter ==
null)
return;
816 if(chosenEncounter == ScanEncounterVariation.DERELICT)
818 DerelictShipData params =
new DerelictShipData(
new PerShipData(
"apogee_Balanced", ShipCondition.BATTERED, 0f),
false);
820 SectorEntityToken ship = BaseThemeGenerator.addSalvageEntity(system, Entities.WRECK, Factions.NEUTRAL, params);
821 ship.setDiscoverable(
true);
823 ship.setCircularOrbit(gate, (
float) Math.random() * 360f, 40f, 20f);
826 ShipRecoverySpecialCreator creator =
new ShipRecoverySpecialCreator(
null, 0, 0,
false,
null,
null);
827 Misc.setSalvageSpecial(ship, creator.createSpecial(ship,
null));
829 ship.getMemoryWithoutUpdate().set(
"$gateScanDerelict",
true);
831 else if(chosenEncounter == ScanEncounterVariation.HEGEMONY)
836 beginStageTrigger(getCurrentStage());
837 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.HIGHER, Factions.HEGEMONY, FleetTypes.PATROL_MEDIUM, gate);
838 triggerMakeNonHostile();
843 triggerPickLocationAroundEntity(gate, 100f);
844 triggerSpawnFleetAtPickedLocation(
"$gaATG_hegScanFleet",
null);
846 triggerFleetSetPatrolActionText(
"scanning");
847 triggerFleetSetTravelActionText(
"repositioning");
848 triggerOrderFleetPatrol(
true, gate);
849 triggerMakeFleetIgnoreOtherFleets();
850 triggerMakeFleetGoAwayAfterDefeat();
851 triggerFleetSetPatrolLeashRange(100f);
862 triggerSetFleetMissionRef(
"$gaATG_ref");
863 triggerFleetAddDefeatTrigger(
"GAATGhegGateScanFleetDefeated");
864 triggerFleetSetName(
"Special Task Force");
868 List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(getCurrentStage());
869 if (fleets.isEmpty())
873 final CampaignFleetAPI fleet = fleets.get(0);
875 fleet.addEventListener(
new BaseFleetEventListener() {
877 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
878 if (reason == FleetDespawnReason.DESTROYED_BY_BATTLE) {
880 fleet.getMemoryWithoutUpdate().unset(
"$gaATG_hegScanFleet");
891 setFlag(gate,
"$GAATGhegemonyScanFleet",
true);
893 else if(chosenEncounter == ScanEncounterVariation.JAMMER)
895 setFlag(gate,
"$GAATGscanJammer",
true);
897 else if(chosenEncounter == ScanEncounterVariation.ALARM)
899 setFlag(gate,
"$GAATGscanAlarm",
true);
901 else if(chosenEncounter == ScanEncounterVariation.LUDDIC)
903 beginStageTrigger(getCurrentStage());
904 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.LOWER, Factions.LUDDIC_CHURCH, FleetTypes.TRADE_LINER, gate);
905 triggerMakeNonHostile();
907 triggerSetFleetSizeFraction(0.5f);
908 triggerSetFleetComposition(2f, 1f, 1f, 10f, 1f);
909 triggerPickLocationAroundEntity(gate, 50f);
910 triggerSpawnFleetAtPickedLocation(
"$gaATG_luddicScanFleet",
null);
911 triggerFleetSetTravelActionText(
"holding vigil");
912 triggerFleetSetPatrolActionText(
"holding vigil");
913 triggerOrderFleetPatrol(
true, gate);
914 triggerMakeFleetIgnoreOtherFleets();
915 triggerMakeFleetGoAwayAfterDefeat();
916 triggerFleetSetPatrolLeashRange(30f);
918 triggerSetFleetMissionRef(
"$gaATG_ref");
919 triggerFleetAddDefeatTrigger(
"GAATGluddicScanFleetDefeated");
920 triggerFleetSetName(
"Sacred Vigil Flotilla");
924 List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(getCurrentStage());
925 if (fleets.isEmpty())
929 final CampaignFleetAPI fleet = fleets.get(0);
932 setFlag(gate,
"$GAATGluddicScanGate",
true);
934 fleet.addEventListener(
new BaseFleetEventListener() {
935 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
936 if (reason == FleetDespawnReason.DESTROYED_BY_BATTLE) {
937 fleet.getMemoryWithoutUpdate().unset(
"$gaATG_luddicScanFleet");
943 else if(chosenEncounter == ScanEncounterVariation.PATHER)
946 beginStageTrigger(getCurrentStage());
947 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.HIGHER, Factions.LUDDIC_PATH, FleetTypes.MERC_PRIVATEER, gate);
948 triggerFleetPatherNoDefaultTithe();
949 triggerPickLocationAroundEntity(gate, 200f);
950 triggerSpawnFleetAtPickedLocation(
"$gaATG_patherScanFleet",
null);
951 triggerOrderFleetPatrol(
true, gate);
954 triggerMakeFleetGoAwayAfterDefeat();
955 triggerFleetSetPatrolLeashRange(60f);
956 triggerSetFleetMissionRef(
"$gaATG_ref");
958 triggerFleetSetName(
"Ambush Fleet");
961 else if(chosenEncounter == ScanEncounterVariation.PIRATE)
963 beginStageTrigger(getCurrentStage());
964 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.VERY_HIGH, Factions.PIRATES, FleetTypes.PATROL_LARGE, gate);
965 triggerMakeNonHostile();
966 triggerMakeLowRepImpact();
967 triggerPickLocationAroundEntity(gate, 250f);
968 triggerSpawnFleetAtPickedLocation(
"$gaATG_pirateScanFleet",
null);
969 triggerFleetSetPatrolActionText(
"loitering");
970 triggerFleetSetTravelActionText(
"maneuvering");
971 triggerOrderFleetPatrol(
true, gate);
973 triggerFleetSetPatrolLeashRange(250f);
975 triggerSetFleetMissionRef(
"$gaATG_ref");
976 triggerFleetAddDefeatTrigger(
"GAATGpirateScanFleetDefeated");
977 triggerMakeFleetGoAwayAfterDefeat();
981 List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(getCurrentStage());
982 if (fleets.isEmpty())
986 final CampaignFleetAPI fleet = fleets.get(0);
988 fleet.addEventListener(
new BaseFleetEventListener() {
990 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
991 if (reason == FleetDespawnReason.DESTROYED_BY_BATTLE) {
992 fleet.getMemoryWithoutUpdate().unset(
"$gaATG_pirateScanFleet");
999 setFlag(gate,
"$GAATGpirateScanGate",
true);
1001 else if(chosenEncounter == ScanEncounterVariation.SCAVENGER)
1004 beginStageTrigger(getCurrentStage());
1005 triggerCreateFleet(FleetSize.SMALL, FleetQuality.DEFAULT, Factions.INDEPENDENT, FleetTypes.SCAVENGER_MEDIUM, gate);
1006 triggerMakeNonHostile();
1007 triggerMakeLowRepImpact();
1008 triggerPickLocationAroundEntity(gate, 100f);
1009 triggerSpawnFleetAtPickedLocation(
"$gaATG_scavScanFleet",
null);
1010 triggerFleetSetPatrolActionText(
"observing");
1011 triggerFleetSetTravelActionText(
"observing");
1012 triggerOrderFleetPatrol(
true, gate);
1013 triggerMakeFleetIgnoreOtherFleets();
1014 triggerFleetSetPatrolLeashRange(250f);
1015 triggerMakeFleetIgnoredByOtherFleets();
1016 triggerSetFleetMissionRef(
"$gaATG_ref");
1018 triggerFleetSetName(
"Suspect Scavenger");
1019 triggerMakeFleetGoAwayAfterDefeat();
1022 List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(getCurrentStage());
1023 if (fleets.isEmpty())
return;
1025 else if(chosenEncounter == ScanEncounterVariation.TRITACHYON)
1027 beginStageTrigger(getCurrentStage());
1028 triggerCreateFleet(FleetSize.LARGE, FleetQuality.HIGHER, Factions.TRITACHYON, FleetTypes.PATROL_LARGE, gate);
1029 triggerMakeNonHostile();
1034 triggerPickLocationAroundEntity(gate, 100f);
1035 triggerSpawnFleetAtPickedLocation(
"$gaATG_ttScanFleet",
null);
1036 triggerFleetSetTravelActionText(
"repositioning");
1037 triggerFleetSetPatrolActionText(
"scanning");
1038 triggerOrderFleetPatrol(
true, gate);
1039 triggerMakeFleetIgnoreOtherFleets();
1040 triggerMakeFleetGoAwayAfterDefeat();
1041 triggerFleetSetPatrolLeashRange(100f);
1045 triggerSetFleetMissionRef(
"$gaATG_ref");
1046 triggerFleetAddDefeatTrigger(
"GAATGttGateScanFleetDefeated");
1047 triggerFleetSetName(
"Special Projects Detachment");
1051 List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(getCurrentStage());
1052 if (fleets.isEmpty())
1056 final CampaignFleetAPI fleet = fleets.get(0);
1058 fleet.addEventListener(
new BaseFleetEventListener() {
1060 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
1061 if (reason == FleetDespawnReason.DESTROYED_BY_BATTLE) {
1063 fleet.getMemoryWithoutUpdate().unset(
"$gaATG_ttScanFleet");
1072 setFlag(gate,
"$GAATGttScanGate",
true);