1package com.fs.starfarer.api.impl.campaign.tutorial;
4import java.util.ArrayList;
7import java.util.Random;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.BaseOnMessageDeliveryScript;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.CargoAPI;
13import com.fs.starfarer.api.campaign.CommDirectoryEntryAPI;
14import com.fs.starfarer.api.campaign.FactionAPI;
15import com.fs.starfarer.api.campaign.InteractionDialogAPI;
16import com.fs.starfarer.api.campaign.OnMessageDeliveryScript;
17import com.fs.starfarer.api.campaign.PlanetAPI;
18import com.fs.starfarer.api.campaign.SectorEntityToken;
19import com.fs.starfarer.api.campaign.StarSystemAPI;
20import com.fs.starfarer.api.campaign.CommDirectoryEntryAPI.EntryType;
21import com.fs.starfarer.api.campaign.comm.CommMessageAPI;
22import com.fs.starfarer.api.campaign.comm.MessagePriority;
23import com.fs.starfarer.api.campaign.econ.MarketAPI;
24import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
25import com.fs.starfarer.api.campaign.rules.MemoryAPI;
26import com.fs.starfarer.api.characters.PersonAPI;
27import com.fs.starfarer.api.fleet.FleetMemberAPI;
28import com.fs.starfarer.api.fleet.FleetMemberType;
29import com.fs.starfarer.api.impl.campaign.JumpPointInteractionDialogPluginImpl;
30import com.fs.starfarer.api.impl.campaign.events.BaseEventPlugin;
31import com.fs.starfarer.api.impl.campaign.ids.Abilities;
32import com.fs.starfarer.api.impl.campaign.ids.Commodities;
33import com.fs.starfarer.api.impl.campaign.ids.Entities;
34import com.fs.starfarer.api.impl.campaign.ids.Factions;
35import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
36import com.fs.starfarer.api.impl.campaign.ids.Ranks;
37import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
38import com.fs.starfarer.api.impl.campaign.ids.Tags;
39import com.fs.starfarer.api.impl.campaign.intel.SystemBountyIntel;
40import com.fs.starfarer.api.impl.campaign.intel.SystemBountyManager;
41import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
42import com.fs.starfarer.api.impl.campaign.submarkets.StoragePlugin;
43import com.fs.starfarer.api.loading.WeaponSlotAPI;
44import com.fs.starfarer.api.ui.HintPanelAPI;
45import com.fs.starfarer.api.util.Misc;
46import com.fs.starfarer.api.util.Misc.Token;
52 public static final String
REASON =
"tut";
54 public static enum TutorialMissionStage {
70 protected boolean ended =
false;
89 protected TutorialMissionStage
stage = TutorialMissionStage.INIT;
125 String stageId =
"start";
151 if (entry.getType() == EntryType.PERSON && entry.getEntryData() instanceof
PersonAPI) {
182 if (player ==
null)
return;
194 if (
stage == TutorialMissionStage.GO_GET_AI_CORE) {
197 if (cores > 0 && (!
probe.
isAlive() || distToProbe < 300)) {
205 if (
stage == TutorialMissionStage.GO_RECOVER_SHIPS) {
215 if (
id ==
null)
continue;
221 if (count >= 5 || wrecks < 3) {
230 if (
stage == TutorialMissionStage.GO_STABILIZE) {
234 if (innerStable || fringeStable) {
249 String action = params.get(0).getString(memoryMap);
254 if (action.equals(
"startGetData")) {
268 }
else if (action.equals(
"endGetData")) {
279 }
else if (action.equals(
"goSalvage")) {
288 }
else if (action.equals(
"goRecover")) {
298 updateStage(TutorialMissionStage.GO_RECOVER_SHIPS);
299 }
else if (action.equals(
"goStabilize")) {
313 }
else if (action.equals(
"pickJangalaContact")) {
328 fuel = (float) (Math.ceil(fuel / 10) * 10);
329 mem.
set(
"$jangalaFuel", (
int) fuel);
331 }
else if (action.equals(
"deliverReport")) {
349 }
else if (action.equals(
"reportDelivered")) {
365 }
else if (action.equals(
"printRefitHint")) {
368 String transponder =
"";
370 transponder =
"\n\nAlso: you'll need to re-dock with your transponder turned on to take advantage of Ancyra's facilities.";
372 dialog.
getTextPanel().
addPara(
"(Once this conversation is over, press %s to open the refit screen. " +
373 "After selecting a specific ship, you can press %s to %s - pick a desired loadout, " +
374 "and the ship will be automatically refitted to match it, using what weapons are available." +
378 dialog.
getTextPanel().
addPara(
"In addition, you now have access to local storage at Ancyra, " +
379 "and some weapons and supplies have been placed there. To access it, click on the " +
380 "\"Storage\" button in the trade screen.)",
430 for (
int i = 0; i < 20; i++) {
467 for (
WeaponSlotAPI slot : member.getVariant().getHullSpec().getAllWeaponSlotsCopy()) {
470 if (weaponId !=
null) {
492 case LARGE:
return pick(
"mark9",
"hephag",
"hellbore");
493 case MEDIUM:
return pick(
"arbalest",
"heavymortar",
"shredder");
494 case SMALL:
return pick(
"lightmg",
"lightac",
"lightmortar");
500 case LARGE:
return pick(
"hammerrack");
501 case MEDIUM:
return pick(
"pilum",
"annihilatorpod");
502 case SMALL:
return pick(
"harpoon",
"sabot",
"annihilator");
507 case LARGE:
return pick(
"autopulse",
"hil");
508 case MEDIUM:
return pick(
"miningblaster",
"gravitonbeam",
"pulselaser");
509 case SMALL:
return pick(
"mininglaser",
"taclaser",
"pdlaser",
"ioncannon");
518 public String
pick(String ...strings) {
519 return strings[
new Random().nextInt(strings.length)];
539 Map<String, String> map = super.getTokenReplacements();
561 List<String> result =
new ArrayList<String>();
563 if (
"posting".equals(stageId)) {
564 }
else if (
"success".equals(stageId)) {
569 return result.toArray(
new String[0]);
574 return super.getHighlightColors(stageId);
582 if (
stage == TutorialMissionStage.INIT) {
585 if (
stage == TutorialMissionStage.DELIVER_REPORT) {
586 return "Deliver Report to Jangala";
588 if (
stage == TutorialMissionStage.DONE) {
589 return "Deliver Report to Jangala - completed";
591 return "Stabilize the Jump-points";
598 return CampaignEventCategory.MISSION;
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
static final String CAN_STABILIZE
static final String UNSTABLE_KEY
static void addPersonTokens(Map< String, String > tokens, String prefix, PersonAPI person)
CampaignEventTarget eventTarget
static final String SENSOR_BURST
static final String SUSTAINED_BURN
static final String SCAVENGE
static final String TRANSPONDER
static final String GO_DARK
static final String INTERDICTION_PULSE
static final String EMERGENCY_BURN
static final String DISTRESS_CALL
static final String GAMMA_CORE
static final String WRECK
static final String HEGEMONY
static final String PIRATES
static final String INDEPENDENT
static final String OBJECTIVE_NON_FUNCTIONAL
static final String MEMORY_KEY_PATROL_ALLOW_TOFF
static String POST_STATION_COMMANDER
static final String SUBMARKET_STORAGE
void addActive(EveryFrameScript event)
boolean isActive(MarketAPI market)
static SystemBountyManager getInstance()
void addOrResetBounty(MarketAPI market)
static void addFleetMemberGainText(FleetMemberAPI member, TextPanelAPI text)
void setPlayerPaidToUnlock(boolean playerPaidToUnlock)
static final String USE_TUTORIAL_RESPAWN
void advance(float amount)
SectorEntityToken detachment
static void endGalatiaPortionOfMission()
Color[] getHighlightColors(String stageId)
void init(String type, CampaignEventTarget eventTarget)
PersonAPI getMainContact()
TutorialMissionStage stage
static PersonAPI createMainContact(PlanetAPI ancyra)
SectorEntityToken derinkuyu
String getWeaponForSlot(WeaponSlotAPI slot)
String pick(String ...strings)
Map< String, String > getTokenReplacements()
String[] getHighlights(String stageId)
CampaignEventCategory getEventCategory()
void setParam(Object param)
void updateStage(TutorialMissionStage stage)
boolean callEvent(String ruleId, final InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static PersonAPI getJangalaContact()
static final String REASON
void addWeaponsToStorage()
OnMessageDeliveryScript createSetMessageLocationScript(final SectorEntityToken entity)
void advance(float amount)
static final String TUT_STAGE
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static void makeImportant(SectorEntityToken entity, String reason)
static void cleanUpMissionMemory(MemoryAPI memory, String prefix)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static void makeUnimportant(SectorEntityToken entity, String reason)
static Color getHighlightColor()
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
String getSpriteName(String category, String id)
String getControlStringForEnumName(String name)
float convertToDays(float realSeconds)
FleetDataAPI getFleetData()
FleetLogisticsAPI getLogistics()
HintPanelAPI getHintPanel()
void addWeapons(String id, int count)
float getCommodityQuantity(String id)
void addSupplies(float quantity)
void addFighters(String id, int count)
void addAbility(String id)
List< CommDirectoryEntryAPI > getEntriesCopy()
String addPerson(PersonAPI person)
RelationshipAPI getRelToPlayer()
PersonAPI createRandomPerson()
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
TextPanelAPI getTextPanel()
SectorEntityToken getEntityById(String id)
List< SectorEntityToken > getEntitiesWithTag(String tag)
void addScript(EveryFrameScript script)
String getNameWithLowercaseType()
List< CampaignFleetAPI > getFleets()
CampaignFleetAPI getPlayerFleet()
void addScript(EveryFrameScript script)
boolean hasScript(Class<?> clazz)
CampaignClockAPI getClock()
void reportEventStage(CampaignEventPlugin event, String stage, MessagePriority priority)
CampaignUIAPI getCampaignUI()
FactionAPI getFaction(String factionId)
StarSystemAPI getStarSystem(String name)
MemoryAPI getMemoryWithoutUpdate()
CharacterDataAPI getCharacterData()
LocationAPI getContainingLocation()
String getCustomEntityType()
Vector2f getLocationInHyperspace()
MemoryAPI getMemoryWithoutUpdate()
boolean isTransponderOn()
LabelAPI addPara(String text)
void setStarSystemId(String starSystemId)
void setCenterMapOnEntity(SectorEntityToken centerMapOnEntity)
MarketAPI getMarket(String id)
void addMarket(MarketAPI market, boolean withJunkAndChatter)
CommDirectoryAPI getCommDirectory()
float getExpire(String key)
void set(String key, Object value)
void setRankId(String rank)
MemoryAPI getMemoryWithoutUpdate()
void setPostId(String postId)
float getFuelCostPerLightYear()
WeaponAPI.WeaponSize getSlotSize()
WeaponAPI.WeaponType getWeaponType()
void clearHints(boolean withFade)