Starsector API
Loading...
Searching...
No Matches
MiscAcademyFleetCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.fleets.misc;
2
3import java.util.Random;
4
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;
28
30
31 public static String ACADEMY_FLEET_TYPE = "$academyFleetType";
32
33 @Override
34 public float getFrequency() {
35 return Global.getSettings().getFloat("miscFleetAcademyFrequency");
36 }
37
38 @Override
40 return Global.getSettings().getInt("miscFleetAcademyMaxFleets");
41 }
42
43 public static SectorEntityToken getAcademy() {
44 StarSystemAPI system = Global.getSector().getStarSystem("Galatia");
45 return system.getEntityById("station_galatia_academy");
46 }
47
48
49 @Override
50 public MiscRouteData createRouteParams(MiscFleetRouteManager manager, Random random) {
51 MarketAPI from = pickSourceMarket(manager);
52 SectorEntityToken to = getAcademy();
53
54 if (to == null || to.getContainingLocation().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER)) return null;
55
56
57// from = Global.getSector().getEconomy().getMarket("chalcedon");
58// to = Global.getSector().getEconomy().getMarket("eochu_bres").getPrimaryEntity();
59// to = Global.getSector().getEntityById("beholder_station");
60
61 MiscRouteData result = createData(from, to);
62
63 return result;
64 }
65
66
67 @Override
68 public CampaignFleetAPI createFleet(MiscFleetRouteManager manager, RouteData route, Random random) {
69 MiscRouteData data = (MiscRouteData) route.getCustom();
70
71 FleetCreatorMission m = new FleetCreatorMission(random);
72 m.beginFleet();
73
74
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);
83 //m.triggerSetFleetMemoryValue("$destShrine", data.to.getId());
84 m.triggerSetFleetMemoryValue(MemFlags.ACADEMY_FLEET, true);
85
86 WeightedRandomPicker<String> types = new WeightedRandomPicker<String>(random);
87 types.add("supplies");
88 types.add("students");
89 types.add("visitors");
90 m.triggerSetFleetMemoryValue(ACADEMY_FLEET_TYPE, types.pick());
91
92
93 CampaignFleetAPI fleet = m.createFleet();
94 fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
95
96 return fleet;
97 }
98
99
100 public MiscRouteData createData(MarketAPI from, SectorEntityToken to) {
101 MiscRouteData data = new MiscRouteData(getId());
102 data.from = from;
103 data.to = to;
104
105 if (from.getFaction().isHostileTo(Factions.INDEPENDENT)) {
106 data.factionId = from.getFactionId();
107 } else {
108 data.factionId = Factions.INDEPENDENT;
109 }
110
111 // in case the source colony is hostile to the Hegemony (which has Ancyra in the system)
112 data.smuggling = true;
113
114 float sizeBasis = from.getSize() / 8f;
115 sizeBasis *= 0.25f;
116 if (sizeBasis < 0.05f) sizeBasis = 0.05f;
117 if (sizeBasis > 0.25f) sizeBasis = 0.25f;
118 data.size = sizeBasis;
119
120 return data;
121 }
122
123 public MarketAPI pickSourceMarket(MiscFleetRouteManager manager) {
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; // markets w/o spaceports don't launch fleets
128 if (market.getContainingLocation().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER)) continue;
129
130 if (manager.getTimeout(getId()).contains(market.getId())) continue;
131
132 // use this for academy fleets also
133 if (SharedData.getData().getMarketsWithoutTradeFleetSpawn().contains(market.getId())) continue;
134
135 float distLY = Misc.getDistanceToPlayerLY(market.getPrimaryEntity());
136 float mult = 1f - Math.min(0.99f, distLY / 10f);
137
138 if (market.getFaction().isHostileTo(Factions.INDEPENDENT)) {
139 mult *= 0.2f;
140 }
141
142 markets.add(market, market.getSize() * mult);
143 }
144 return markets.pick();
145 }
146
147 @Override
148 public void reportBattleOccurred(MiscFleetRouteManager manager, CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
149 RouteData route = RouteManager.getInstance().getRoute(manager.getRouteSourceId(), fleet);
150 if (route == null || !(route.getCustom() instanceof MiscRouteData)) return;
151
152 if (route.isExpired()) return;
153 if (!battle.isPlayerInvolved()) return;
154
155 // player was involved, no the opposite side of the pilgrim fleet
156 if (battle.getNonPlayerSideSnapshot().contains(fleet)) {
157 MiscRouteData data = (MiscRouteData) route.getCustom();
158
159 // possible TODO: some kind of response, depending?
160 }
161 }
162
163
164 public String getStartingActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
165 String type = fleet.getMemoryWithoutUpdate().getString(ACADEMY_FLEET_TYPE);
166 return "preparing for voyage to Galatia Academy";
167 }
168
169 public String getEndingActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
170 //return "orbiting " + data.from.getName();
171 return "returned from voyage to Galatia Academy";
172 }
173
174 public String getTravelToDestActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
175 return "traveling to Galatia Academy";
176 }
177
178 public String getTravelReturnActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
179 return "traveling to " + data.from.getName();
180 }
181
182 public String getAtDestUnloadActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
183 return "orbiting Galatia Academy";
184 }
185
186 public String getAtDestLoadActionText(CampaignFleetAPI fleet, RouteSegment segment, MiscRouteData data) {
187 return "orbiting Galatia Academy";
188 }
189
190}
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
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)
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)
void reportBattleOccurred(MiscFleetRouteManager manager, CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)