1package com.fs.starfarer.api.impl.campaign.fleets.misc;
3import java.util.Random;
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.BattleAPI;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken;
9import com.fs.starfarer.api.campaign.StarSystemAPI;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
12import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
13import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
14import com.fs.starfarer.api.impl.campaign.fleets.misc.MiscFleetRouteManager.MiscRouteData;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
22import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
23import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
24import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
25import com.fs.starfarer.api.impl.campaign.shared.SharedData;
26import com.fs.starfarer.api.util.Misc;
27import com.fs.starfarer.api.util.WeightedRandomPicker;
45 return system.getEntityById(
"station_galatia_academy");
54 if (to ==
null || to.getContainingLocation().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER))
return null;
69 MiscRouteData data = (MiscRouteData) route.getCustom();
71 FleetCreatorMission m =
new FleetCreatorMission(random);
75 m.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.LOWER, data.factionId,
76 FleetTypes.ACADEMY_FLEET, data.from.getLocationInHyperspace());
77 m.triggerSetFleetOfficers(OfficerNum.FC_ONLY, OfficerQuality.LOWER);
78 m.triggerSetFleetSizeFraction(data.size * 0.5f * (0.5f + random.nextFloat() * 0.5f));
79 m.triggerFleetSetNoFactionInName();
80 m.triggerSetTraderFleet();
81 m.triggerSetFleetComposition(0f, 0f, 0f, 1f, 0f);
82 m.triggerSetFleetMemoryValue(MemFlags.MEMORY_KEY_SOURCE_MARKET, data.from);
84 m.triggerSetFleetMemoryValue(MemFlags.ACADEMY_FLEET,
true);
86 WeightedRandomPicker<String> types =
new WeightedRandomPicker<String>(random);
87 types.add(
"supplies");
88 types.add(
"students");
89 types.add(
"visitors");
93 CampaignFleetAPI fleet = m.createFleet();
94 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
100 public MiscRouteData
createData(MarketAPI from, SectorEntityToken to) {
101 MiscRouteData data =
new MiscRouteData(
getId());
105 if (from.getFaction().isHostileTo(Factions.INDEPENDENT)) {
106 data.factionId = from.getFactionId();
108 data.factionId = Factions.INDEPENDENT;
112 data.smuggling =
true;
114 float sizeBasis = from.getSize() / 8f;
116 if (sizeBasis < 0.05f) sizeBasis = 0.05f;
117 if (sizeBasis > 0.25f) sizeBasis = 0.25f;
118 data.size = sizeBasis;
124 WeightedRandomPicker<MarketAPI> markets =
new WeightedRandomPicker<MarketAPI>(manager.
getRandom());
125 for (MarketAPI market :
Global.
getSector().getEconomy().getMarketsCopy()) {
126 if (market.isHidden())
continue;
127 if (!market.hasSpaceport())
continue;
128 if (market.getContainingLocation().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER))
continue;
133 if (SharedData.getData().getMarketsWithoutTradeFleetSpawn().contains(market.getId()))
continue;
135 float distLY = Misc.getDistanceToPlayerLY(market.getPrimaryEntity());
136 float mult = 1f - Math.min(0.99f, distLY / 10f);
138 if (market.getFaction().isHostileTo(Factions.INDEPENDENT)) {
142 markets.add(market, market.getSize() * mult);
144 return markets.pick();
150 if (route ==
null || !(route.getCustom() instanceof MiscRouteData))
return;
152 if (route.isExpired())
return;
153 if (!battle.isPlayerInvolved())
return;
156 if (battle.getNonPlayerSideSnapshot().contains(fleet)) {
157 MiscRouteData data = (MiscRouteData) route.getCustom();
166 return "preparing for voyage to Galatia Academy";
171 return "returned from voyage to Galatia Academy";
175 return "traveling to Galatia Academy";
179 return "traveling to " + data.from.getName();
183 return "orbiting Galatia Academy";
187 return "orbiting Galatia Academy";
static SettingsAPI getSettings()
static SectorAPI getSector()
static RouteManager getInstance()
RouteData getRoute(String source, CampaignFleetAPI fleet)
CampaignFleetAPI createFleet(MiscFleetRouteManager manager, RouteData route, Random random)
String getAtDestLoadActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
String getEndingActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
MiscRouteData createData(MarketAPI from, SectorEntityToken to)
static String ACADEMY_FLEET_TYPE
MarketAPI pickSourceMarket(MiscFleetRouteManager manager)
String getTravelReturnActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
MiscRouteData createRouteParams(MiscFleetRouteManager manager, Random random)
String getTravelToDestActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
String getStartingActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
String getAtDestUnloadActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data)
static SectorEntityToken getAcademy()
int getMaxFleetsForThisCreator()
void reportBattleOccurred(MiscFleetRouteManager manager, CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
TimeoutTracker< String > getTimeout(String creatorId)
String getRouteSourceId()
float getFloat(String key)