46 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
47 if (dialog ==
null)
return false;
49 CharacterCreationData data = (CharacterCreationData) memoryMap.get(MemKeys.LOCAL).get(
"$characterData");
50 final MemoryAPI memory = memoryMap.get(MemKeys.LOCAL);
51 data.addScriptBeforeTimePass(
new Script() {
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) {
61 Global.
getSector().getMemoryWithoutUpdate().set(
"$fastStartExplorer",
true);
64 Global.
getSector().getMemoryWithoutUpdate().set(
"$fastStartMerc",
true);
67 Global.
getSector().getMemoryWithoutUpdate().set(
"$fastStartRandom",
true);
74 boolean skipTutorial = memory.getBoolean(
"$ngcSkipTutorial");
76 Global.
getSector().getMemoryWithoutUpdate().set(CampaignTutorialScript.USE_TUTORIAL_RESPAWN,
true);
81 data.addScript(
new Script() {
87 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
88 crew += Math.ceil(member.getMinCrew() + (member.getMaxCrew() - member.getMinCrew()) * 0.5f);
89 supplies += member.getDeploymentCostSupplies() * 4f;
92 CargoAPI cargo = fleet.getCargo();
93 cargo.initPartialsIfNeeded();
96 cargo.addSupplies(10);
97 cargo.addCommodity(Commodities.HEAVY_MACHINERY, 10);
98 cargo.addFuel(cargo.getMaxFuel() * 0.5f);
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");
109 cargo.addCommodity(Commodities.HEAVY_MACHINERY, 50);
110 cargo.addSupplies(150);
111 cargo.removeFuel(cargo.getMaxFuel() * 0.2f);
114 cargo.addSupplies(100);
115 cargo.removeFuel(cargo.getMaxFuel() * 0.2f);
123 fleet.getFleetData().ensureHasFlagship();
126 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
127 if (!member.isFlagship()) {
129 PersonAPI officer =
Global.
getSector().getPlayerFaction().createRandomPerson(
new Random());
130 officer.getStats().setSkillLevel(Skills.HELMSMANSHIP, 1);
133 officer.setRankId(Ranks.SPACE_LIEUTENANT);
134 officer.setPostId(Ranks.POST_OFFICER);
135 officer.setPersonality(Personalities.STEADY);
136 officer.getStats().refreshCharacterStatsEffects();
138 member.setCaptain(officer);
139 fleet.getFleetData().addOfficer(officer);
145 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
146 float max = member.getRepairTracker().getMaxCR();
147 member.getRepairTracker().setCR(max);
149 fleet.getFleetData().setSyncNeeded();
153 PlanetAPI ancyra = (PlanetAPI) system.getEntityById(
"ancyra");
154 PersonAPI mainContact = TutorialMissionIntel.createMainContact(ancyra);
155 PersonAPI jangalaContact = TutorialMissionIntel.getJangalaContact();
157 TutorialMissionIntel.endGalatiaPortionOfMission(!spacer,
false);
160 new SpacerObligation();
163 mainContact.getRelToPlayer().setRel(0.2f);
164 jangalaContact.getRelToPlayer().setRel(0.1f);
165 Global.
getSector().getFaction(Factions.HEGEMONY).getRelToPlayer().setRel(0.15f);
170 cargo.addSupplies(15);
171 cargo.addFuel(cargo.getMaxFuel() * 1f);
173 float freeCargo = cargo.getSpaceLeft();
174 float addMachinery = Math.min(freeCargo, 15);
176 float r = (float) Math.random();
177 addMachinery = Math.min(freeCargo, 5 + 20 * r);
179 if (addMachinery > 0) {
180 cargo.addCommodity(Commodities.HEAVY_MACHINERY, addMachinery);
181 freeCargo -= addMachinery;
183 float addSupplies = Math.min(freeCargo, 70);
186 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
187 crew += Math.ceil(member.getMinCrew() + (member.getMaxCrew() - member.getMinCrew()) * 0.5f);
188 supplies += member.getDeploymentCostSupplies() * 4f;
190 float r = (float) Math.random();
191 cargo.removeSupplies(cargo.getSupplies());
193 freeCargo = cargo.getSpaceLeft();
194 addSupplies = Math.min(freeCargo, supplies + 20f + 20f * r);
196 if (addSupplies > 0) {
197 cargo.addSupplies(addSupplies);
198 freeCargo -= addSupplies;
201 float addFuel = Math.min(cargo.getFreeFuelSpace() - 10f, 70);
203 float r = (float) Math.random();
204 cargo.removeFuel(cargo.getFuel());
205 addFuel = Math.min(cargo.getFreeFuelSpace(), cargo.getMaxFuel() * (0.25f + 0.25f * r));
208 cargo.addFuel(addFuel);
212 float addCrew = Math.min(cargo.getFreeCrewSpace() - 10f, 100f);
217 cargo.addCrew((
int)addCrew);
221 cargo.getCredits().add(30000);
227 float addCrew = Math.min(cargo.getFreeCrewSpace() - 10f, 10f);
229 cargo.addCrew((
int)addCrew);
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);
244 fleet.clearFloatingText();
245 fleet.setTransponderOn(
false);
249 system.addScript(
new CampaignTutorialScript(system));
258 Random random =
new Random();
260 fleet.getFleetData().clear();
262 WeightedRandomPicker<String> picker =
new WeightedRandomPicker<String>(random);
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);
272 float r = random.nextFloat();
274 boolean addedLarge =
false;
280 for (
int i = 0; i < num; i++) {
281 fleet.getFleetData().addFleetMember(picker.pickAndRemove());
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");
299 r = random.nextFloat();
300 int extra = (int) (r / 0.34f);
301 if (addedLarge) extra = Math.min(extra, 1);
303 qMod -= 0.07f * extra;
304 for (
int i = 0; i < num; i++) {
305 fleet.getFleetData().addFleetMember(picker.pickAndRemove());
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());
315 r = random.nextFloat();
317 fleet.getFleetData().addFleetMember(
"phaeton_Standard");
318 }
else if (r > 0.33f) {
319 fleet.getFleetData().addFleetMember(
"dram_Light");
323 DefaultFleetInflaterParams p =
new DefaultFleetInflaterParams();
324 p.quality = 0.8f + qMod;
325 p.mode = ShipPickMode.PRIORITY_THEN_ALL;
326 p.persistent =
false;
327 p.seed = random.nextLong();
330 FleetInflater inflater = Misc.getInflater(fleet, p);
332 fleet.setFaction(Factions.INDEPENDENT);
333 inflater.inflate(fleet);
334 fleet.setInflater(
null);
335 fleet.setFaction(Factions.PLAYER);
337 fleet.getCargo().addCrew((
int)fleet.getFleetData().getMinCrew() - fleet.getCargo().getCrew());
339 fleet.getCargo().getCredits().set((
int)(5000f + 20000f * random.nextFloat()));
341 fleet.getFleetData().syncIfNeeded();
342 fleet.getCargo().sort();
343 fleet.getFlagship().setCaptain(
Global.
getSector().getCharacterData().getPerson());
344 fleet.getFlagship().updateStats();
346 return random.nextFloat() > 0.5f;
351 boolean addDmods =
true;
355 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
356 ShipVariantAPI v = member.getVariant().clone();
357 v.setSource(VariantSource.REFIT);
358 v.setHullVariantId(Misc.genUID());
359 member.setVariant(v,
false,
false);
361 String h = member.getHullId();
364 if (h.equals(
"hammerhead")) {
365 v.addPermaMod(HullMods.COMP_HULL);
366 }
else if (h.equals(
"drover")) {
367 v.addPermaMod(HullMods.FAULTY_GRID);
368 }
else if (h.equals(
"centurion")) {
369 v.addPermaMod(HullMods.COMP_ARMOR);
370 }
else if (h.equals(
"lasher")) {
371 v.addPermaMod(HullMods.FRAGILE_SUBSYSTEMS);
374 else if (h.equals(
"dram")) {
375 v.addPermaMod(HullMods.FRAGILE_SUBSYSTEMS);
378 else if (h.equals(
"apogee")) {
380 }
else if (h.equals(
"condor")) {
381 v.addPermaMod(HullMods.COMP_ARMOR);
382 }
else if (h.equals(
"wayfarer")) {
383 v.addPermaMod(HullMods.FRAGILE_SUBSYSTEMS);
384 }
else if (h.equals(
"shepherd")) {
385 v.addPermaMod(HullMods.FAULTY_GRID);
388 else if (h.equals(
"kite_original")) {
389 v.addPermaMod(HullMods.COMP_ARMOR);
390 v.addPermaMod(HullMods.FAULTY_GRID);
395 fleet.getFleetData().setSyncNeeded();