Starsector API
Loading...
Searching...
No Matches
NGCAddStandardStartingScript.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5import java.util.Random;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.Script;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
12import com.fs.starfarer.api.campaign.FleetInflater;
13import com.fs.starfarer.api.campaign.InteractionDialogAPI;
14import com.fs.starfarer.api.campaign.PersistentUIDataAPI.AbilitySlotAPI;
15import com.fs.starfarer.api.campaign.PersistentUIDataAPI.AbilitySlotsAPI;
16import com.fs.starfarer.api.campaign.PlanetAPI;
17import com.fs.starfarer.api.campaign.StarSystemAPI;
18import com.fs.starfarer.api.campaign.rules.MemKeys;
19import com.fs.starfarer.api.campaign.rules.MemoryAPI;
20import com.fs.starfarer.api.characters.CharacterCreationData;
21import com.fs.starfarer.api.characters.PersonAPI;
22import com.fs.starfarer.api.combat.ShipVariantAPI;
23import com.fs.starfarer.api.fleet.FleetMemberAPI;
24import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
25import com.fs.starfarer.api.impl.campaign.ids.Commodities;
26import com.fs.starfarer.api.impl.campaign.ids.Factions;
27import com.fs.starfarer.api.impl.campaign.ids.HullMods;
28import com.fs.starfarer.api.impl.campaign.ids.Personalities;
29import com.fs.starfarer.api.impl.campaign.ids.Ranks;
30import com.fs.starfarer.api.impl.campaign.ids.Skills;
31import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript;
32import com.fs.starfarer.api.impl.campaign.tutorial.SpacerObligation;
33import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
34import com.fs.starfarer.api.loading.VariantSource;
35import com.fs.starfarer.api.util.Misc;
36import com.fs.starfarer.api.util.Misc.Token;
37import com.fs.starfarer.api.util.WeightedRandomPicker;
38
45
46 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
47 if (dialog == null) return false;
48
49 CharacterCreationData data = (CharacterCreationData) memoryMap.get(MemKeys.LOCAL).get("$characterData");
50 final MemoryAPI memory = memoryMap.get(MemKeys.LOCAL);
52 public void run() {
53 boolean explorer = memory.getBoolean("$ngcExplorerSelected");
54 boolean merc = memory.getBoolean("$ngcMercSelected");
55 boolean random = memory.getBoolean("$ngcRandomSelected");
56 boolean spacer = memory.getBoolean("$ngcSpacerSelected");
57 if (explorer || merc || random) {
58 //PirateBaseManager.getInstance().setExtraDays(400f);
59 Global.getSector().getMemoryWithoutUpdate().set("$fastStart", true);
60 if (explorer) {
61 Global.getSector().getMemoryWithoutUpdate().set("$fastStartExplorer", true);
62 }
63 if (merc) {
64 Global.getSector().getMemoryWithoutUpdate().set("$fastStartMerc", true);
65 }
66 if (random) {
67 Global.getSector().getMemoryWithoutUpdate().set("$fastStartRandom", true);
68 }
69 }
70 if (spacer) {
71 Global.getSector().getMemoryWithoutUpdate().set("$spacerStart", true);
72 }
73
74 boolean skipTutorial = memory.getBoolean("$ngcSkipTutorial");
75 if (!skipTutorial) {
77 }
78 }
79 });
80
81 data.addScript(new Script() {
82 public void run() {
84 // add crew, supplies, and fuel
85 int crew = 0;
86 int supplies = 0;
87 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
88 crew += Math.ceil(member.getMinCrew() + (member.getMaxCrew() - member.getMinCrew()) * 0.5f);
89 supplies += member.getDeploymentCostSupplies() * 4f;
90 }
91
92 CargoAPI cargo = fleet.getCargo();
94
95 cargo.addCrew(crew);
96 cargo.addSupplies(10);
98 cargo.addFuel(cargo.getMaxFuel() * 0.5f);
99
100
101 boolean addOfficer = memory.getBoolean("$ngcAddOfficer");
102 boolean skipTutorial = memory.getBoolean("$ngcSkipTutorial");
103 boolean explorer = memory.getBoolean("$ngcExplorerSelected");
104 boolean merc = memory.getBoolean("$ngcMercSelected");
105 boolean random = memory.getBoolean("$ngcRandomSelected");
106 boolean spacer = memory.getBoolean("$ngcSpacerSelected");
107
108 if (explorer) {
110 cargo.addSupplies(150);
111 cargo.removeFuel(cargo.getMaxFuel() * 0.2f);
112 adjustStartingHulls(fleet);
113 } else if (merc) {
114 cargo.addSupplies(100);
115 cargo.removeFuel(cargo.getMaxFuel() * 0.2f);
116 adjustStartingHulls(fleet);
117 } else if (spacer) {
118 adjustStartingHulls(fleet);
119 } else if (random){
120 addOfficer = genRandomStart(fleet);
121 }
122
124
125 if (addOfficer) {
126 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
127 if (!member.isFlagship()) {
128 //PersonAPI officer = OfficerManagerEvent.createOfficer(Global.getSector().getPlayerFaction(), 1, true, SkillPickPreference.NON_CARRIER);
131 //officer.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 1);
132 //officer.getStats().setSkillLevel(Skills.DAMAGE_CONTROL, 1);
137
138 member.setCaptain(officer);
139 fleet.getFleetData().addOfficer(officer);
140 break;
141 }
142 }
143 }
144
145 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
146 float max = member.getRepairTracker().getMaxCR();
147 member.getRepairTracker().setCR(max);
148 }
149 fleet.getFleetData().setSyncNeeded();
150
151 if (skipTutorial) {
152 StarSystemAPI system = Global.getSector().getStarSystem("galatia");
153 PlanetAPI ancyra = (PlanetAPI) system.getEntityById("ancyra");
156
158
159 if (spacer) {
160 new SpacerObligation();
161 }
162
163 mainContact.getRelToPlayer().setRel(0.2f);
164 jangalaContact.getRelToPlayer().setRel(0.1f);
166
167 if (spacer) {
168 cargo.clear();
169 cargo.addCrew(2);
170 cargo.addSupplies(15);
171 cargo.addFuel(cargo.getMaxFuel() * 1f);
172 } else {
173 float freeCargo = cargo.getSpaceLeft();
174 float addMachinery = Math.min(freeCargo, 15);
175 if (random) {
176 float r = (float) Math.random();
177 addMachinery = Math.min(freeCargo, 5 + 20 * r);
178 }
179 if (addMachinery > 0) {
180 cargo.addCommodity(Commodities.HEAVY_MACHINERY, addMachinery);
181 freeCargo -= addMachinery;
182 }
183 float addSupplies = Math.min(freeCargo, 70);
184 if (random) {
185 supplies = 0;
186 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
187 crew += Math.ceil(member.getMinCrew() + (member.getMaxCrew() - member.getMinCrew()) * 0.5f);
188 supplies += member.getDeploymentCostSupplies() * 4f;
189 }
190 float r = (float) Math.random();
191 cargo.removeSupplies(cargo.getSupplies());
192
193 freeCargo = cargo.getSpaceLeft();
194 addSupplies = Math.min(freeCargo, supplies + 20f + 20f * r);
195 }
196 if (addSupplies > 0) {
197 cargo.addSupplies(addSupplies);
198 freeCargo -= addSupplies;
199 }
200
201 float addFuel = Math.min(cargo.getFreeFuelSpace() - 10f, 70);
202 if (random) {
203 float r = (float) Math.random();
204 cargo.removeFuel(cargo.getFuel());
205 addFuel = Math.min(cargo.getFreeFuelSpace(), cargo.getMaxFuel() * (0.25f + 0.25f * r));
206 }
207 if (addFuel > 0) {
208 cargo.addFuel(addFuel);
209 }
210
211
212 float addCrew = Math.min(cargo.getFreeCrewSpace() - 10f, 100f);
213// addCrew = Math.max(addCrew, fleet.getFleetData().getMinCrew() - cargo.getCrew() + 10);
214// float addCrew = Math.min(cargo.getFreeCrewSpace() - 10f,
215// Math.max(0, (int)((fleet.getFleetData().getMinCrew() - cargo.getCrew()) * 1.25f)));
216 if (addCrew > 0) {
217 cargo.addCrew((int)addCrew);
218 }
219
220 if (!random) {
221 cargo.getCredits().add(30000);
222 }
223 }
224
225 } else {
226 if (random) {
227 float addCrew = Math.min(cargo.getFreeCrewSpace() - 10f, 10f);
228 if (addCrew > 0) {
229 cargo.addCrew((int)addCrew);
230 }
231 }
232
233 fleet.clearAbilities();
234 AbilitySlotsAPI slots = Global.getSector().getUIData().getAbilitySlotsAPI();
235 for (int i = 0; i < 5; i++) {
236 slots.setCurrBarIndex(i);
237 for (int j = 0; j < 10; j++) {
238 AbilitySlotAPI slot = slots.getCurrSlotsCopy().get(j);
239 slot.setAbilityId(null);
240 }
241 }
242
243
244 fleet.clearFloatingText();
245 fleet.setTransponderOn(false);
246
247
248 StarSystemAPI system = Global.getSector().getStarSystem("galatia");
249 system.addScript(new CampaignTutorialScript(system));
250 }
251 }
252
253 });
254 return true;
255 }
256
257 public static boolean genRandomStart(CampaignFleetAPI fleet) {
258 Random random = new Random();
259
260 fleet.getFleetData().clear();
261
263 picker.add("shrike_Attack");
264 picker.add("mule_Standard");
265 picker.add("hammerhead_Balanced");
266 picker.add("enforcer_Balanced", 0.5f);
267 picker.add("enforcer_Assault", 0.5f);
268 picker.add("drover_Starting", 1f);
269
270 float qMod = 0f;
271
272 float r = random.nextFloat();
273 int num = 1;
274 boolean addedLarge = false;
275 if (r > 0.5f) {
276 num = 2;
277 qMod -= 0.1f;
278 addedLarge = true;
279 }
280 for (int i = 0; i < num; i++) {
281 fleet.getFleetData().addFleetMember(picker.pickAndRemove());
282 }
283
284 picker.clear();
285 picker.add("lasher_Standard");
286 picker.add("centurion_Assault");
287 picker.add("wolf_Assault", 0.5f);
288 picker.add("wolf_CS", 0.5f);
289 picker.add("wayfarer_Standard");
290 picker.add("hound_hegemony_Standard", 0.5f);
291 picker.add("hound_Standard", 0.5f);
292 picker.add("cerberus_Standard");
293 picker.add("kite_hegemony_Interceptor", 0.5f);
294 picker.add("kite_pirates_Raider", 0.5f);
295 picker.add("gremlin_Strike");
296 picker.add("condor_Attack");
297
298 num = 1;
299 r = random.nextFloat();
300 int extra = (int) (r / 0.34f);
301 if (addedLarge) extra = Math.min(extra, 1);
302 num += extra;
303 qMod -= 0.07f * extra;
304 for (int i = 0; i < num; i++) {
305 fleet.getFleetData().addFleetMember(picker.pickAndRemove());
306 }
307
308 picker.clear();
309 picker.add("tarsus_Standard");
310 picker.add("buffalo_Standard");
311 picker.add("crig_Standard");
312 picker.add("mudskipper_Standard");
313 fleet.getFleetData().addFleetMember(picker.pickAndRemove());
314
315 r = random.nextFloat();
316 if (r > 0.75f) {
317 fleet.getFleetData().addFleetMember("phaeton_Standard");
318 } else if (r > 0.33f) {
319 fleet.getFleetData().addFleetMember("dram_Light");
320 }
321
322
324 p.quality = 0.8f + qMod;
325 p.mode = ShipPickMode.PRIORITY_THEN_ALL;
326 p.persistent = false;
327 p.seed = random.nextLong();
328 p.timestamp = null;
329
330 FleetInflater inflater = Misc.getInflater(fleet, p);
331
333 inflater.inflate(fleet);
334 fleet.setInflater(null);
336
337 fleet.getCargo().addCrew((int)fleet.getFleetData().getMinCrew() - fleet.getCargo().getCrew());
338
339 fleet.getCargo().getCredits().set((int)(5000f + 20000f * random.nextFloat()));
340
341 fleet.getFleetData().syncIfNeeded();
342 fleet.getCargo().sort();
344 fleet.getFlagship().updateStats();
345
346 return random.nextFloat() > 0.5f;
347 }
348
349
350 public static void adjustStartingHulls(CampaignFleetAPI fleet) {
351 boolean addDmods = true;
352
353 //addDmods = false;
354
355 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
356 ShipVariantAPI v = member.getVariant().clone();
359 member.setVariant(v, false, false);
360
361 String h = member.getHullId();
362
363 if (addDmods) {
364 if (h.equals("hammerhead")) {
366 } else if (h.equals("drover")) {
368 } else if (h.equals("centurion")) {
370 } else if (h.equals("lasher")) {
372 }
373
374 else if (h.equals("dram")) {
376 }
377
378 else if (h.equals("apogee")) {
379 //v.addPermaMod(HullMods.FRAGILE_SUBSYSTEMS);
380 } else if (h.equals("condor")) {
382 } else if (h.equals("wayfarer")) {
384 } else if (h.equals("shepherd")) {
386 }
387
388 else if (h.equals("kite_original")) {
391 }
392 }
393 }
394
395 fleet.getFleetData().setSyncNeeded();
396 }
397
398
399
400}
401
402
403
404
405
406
static SectorAPI getSector()
Definition Global.java:65
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static void endGalatiaPortionOfMission(boolean withStipend, boolean didTutorial)
static FleetInflater getInflater(CampaignFleetAPI fleet, Object params)
Definition Misc.java:4246
void setFaction(String factionId, boolean includeCaptains)
void setInflater(FleetInflater inflater)
void addCommodity(String commodityId, float quantity)
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
void inflate(CampaignFleetAPI fleet)
SectorEntityToken getEntityById(String id)
void addScript(EveryFrameScript script)
FactionAPI getFaction(String factionId)
StarSystemAPI getStarSystem(String name)
void setTransponderOn(boolean transponderOn)
void set(String key, Object value)
MutableCharacterStatsAPI getStats()
void setPersonality(String personality)
void setHullVariantId(String hullVariantId)
void setSource(VariantSource source)
void setCaptain(PersonAPI commander)