Starsector API
Loading...
Searching...
No Matches
CoreCampaignPluginImpl.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign;
2
3import java.awt.Color;
4import java.util.HashSet;
5import java.util.Set;
6
7import org.json.JSONObject;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.PluginPick;
11import com.fs.starfarer.api.campaign.AICoreAdminPlugin;
12import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
13import com.fs.starfarer.api.campaign.BaseCampaignPlugin;
14import com.fs.starfarer.api.campaign.BattleAPI;
15import com.fs.starfarer.api.campaign.BattleAutoresolverPlugin;
16import com.fs.starfarer.api.campaign.BattleCreationPlugin;
17import com.fs.starfarer.api.campaign.CampaignFleetAPI;
18import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
19import com.fs.starfarer.api.campaign.CampaignTerrainPlugin;
20import com.fs.starfarer.api.campaign.CargoStackAPI;
21import com.fs.starfarer.api.campaign.CustomEntitySpecAPI;
22import com.fs.starfarer.api.campaign.FactionAPI;
23import com.fs.starfarer.api.campaign.FleetInflater;
24import com.fs.starfarer.api.campaign.FleetStubAPI;
25import com.fs.starfarer.api.campaign.FleetStubConverterPlugin;
26import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
27import com.fs.starfarer.api.campaign.JumpPointAPI;
28import com.fs.starfarer.api.campaign.PersonImportance;
29import com.fs.starfarer.api.campaign.PlanetAPI;
30import com.fs.starfarer.api.campaign.RepLevel;
31import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin;
32import com.fs.starfarer.api.campaign.SectorEntityToken;
33import com.fs.starfarer.api.campaign.SubmarketPlugin;
34import com.fs.starfarer.api.campaign.ai.AbilityAIPlugin;
35import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
36import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
37import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
38import com.fs.starfarer.api.campaign.econ.ImmigrationPlugin;
39import com.fs.starfarer.api.campaign.econ.Industry;
40import com.fs.starfarer.api.campaign.econ.MarketAPI;
41import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
42import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
43import com.fs.starfarer.api.campaign.econ.MonthlyReport;
44import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
45import com.fs.starfarer.api.campaign.rules.MemoryAPI;
46import com.fs.starfarer.api.characters.AbilityPlugin;
47import com.fs.starfarer.api.characters.ImportantPeopleAPI;
48import com.fs.starfarer.api.characters.ImportantPeopleAPI.PersonDataAPI;
49import com.fs.starfarer.api.characters.PersonAPI;
50import com.fs.starfarer.api.combat.ShipAPI.HullSize;
51import com.fs.starfarer.api.fleet.FleetMemberAPI;
52import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
53import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
54import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
55import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
56import com.fs.starfarer.api.impl.campaign.ids.Commodities;
57import com.fs.starfarer.api.impl.campaign.ids.Factions;
58import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
59import com.fs.starfarer.api.impl.campaign.ids.Strings;
60import com.fs.starfarer.api.impl.campaign.ids.Tags;
61import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseManager;
62import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel;
63import com.fs.starfarer.api.impl.campaign.population.CoreImmigrationPluginImpl;
64import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeDataForSubmarket;
65import com.fs.starfarer.api.impl.campaign.shared.SharedData;
66import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript;
67import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
68import com.fs.starfarer.api.impl.campaign.tutorial.TutorialRespawnDialogPluginImpl;
69import com.fs.starfarer.api.impl.combat.BattleCreationPluginImpl;
70import com.fs.starfarer.api.plugins.AutofitPlugin;
71import com.fs.starfarer.api.plugins.impl.CoreAutofitPlugin;
72import com.fs.starfarer.api.util.Misc;
73
74public class CoreCampaignPluginImpl extends BaseCampaignPlugin {
75
76 public String getId() {
77 return "coreCampaignPluginImpl";
78 }
79
80 public boolean isTransient() {
81 return false;
82 }
83
84 public PluginPick<InteractionDialogPlugin> pickInteractionDialogPlugin(SectorEntityToken interactionTarget) {
85 if (interactionTarget.hasTag(Tags.OBJECTIVE) || interactionTarget.getMarket() != null) {
86 return new PluginPick<InteractionDialogPlugin>(new RuleBasedInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
87 }
88
89 if (interactionTarget.hasTag(Tags.GATE)) {
90 return new PluginPick<InteractionDialogPlugin>(new RuleBasedInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
91 }
92
93 if (interactionTarget.hasTag(Tags.STATION)) {
94 return new PluginPick<InteractionDialogPlugin>(new RuleBasedInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
95 }
96
97 if (interactionTarget.hasTag(Tags.HAS_INTERACTION_DIALOG)) {
98 return new PluginPick<InteractionDialogPlugin>(new RuleBasedInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
99 }
100
101// if ((interactionTarget instanceof OrbitalStationAPI ||
102// interactionTarget.hasTag("station")) ||
103// interactionTarget.getMarket() != null) {
104 if (interactionTarget.getMarket() != null) {
105 return new PluginPick<InteractionDialogPlugin>(new OrbitalStationInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
106 }
107
108 if (interactionTarget instanceof CampaignFleetAPI) {
109 return new PluginPick<InteractionDialogPlugin>(new FleetInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
110 }
111 if (interactionTarget instanceof JumpPointAPI) {
112 return new PluginPick<InteractionDialogPlugin>(new JumpPointInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
113 }
114 if (interactionTarget instanceof PlanetAPI) {
115 return new PluginPick<InteractionDialogPlugin>(new PlanetInteractionDialogPluginImpl(), PickPriority.CORE_GENERAL);
116 }
117 return null;
118 }
119
120 public PluginPick<InteractionDialogPlugin> pickInteractionDialogPlugin(Object param, SectorEntityToken interactionTarget) {
121 return null;
122 }
123
124
125 @Override
126 public PluginPick<AbilityAIPlugin> pickAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai) {
127 if (ability == null) return null;
128 String id = ability.getId();
129 if (id == null) return null;
130
131 if (ability.getSpec().getAIPluginClass() != null) {
132 return new PluginPick<AbilityAIPlugin>(ability.getSpec().getNewAIPluginInstance(ability), PickPriority.CORE_GENERAL);
133 } else {
134 return null;
135 }
136
137// if (id.equals(Abilities.GO_DARK)) {
138// return new PluginPick<AbilityAIPlugin>(new GoDarkAbilityAI(ability, ai), PickPriority.CORE_GENERAL);
139// } else if (id.equals(Abilities.EMERGENCY_BURN)) {
140// return new PluginPick<AbilityAIPlugin>(new EmergencyBurnAbilityAI(ability, ai), PickPriority.CORE_GENERAL);
141// } else if (id.equals(Abilities.SENSOR_BURST)) {
142// return new PluginPick<AbilityAIPlugin>(new SensorBurstAbilityAI(ability, ai), PickPriority.CORE_GENERAL);
143// } else if (id.equals(Abilities.TRANSPONDER)) {
144// return new PluginPick<AbilityAIPlugin>(new TransponderAbilityAI(ability, ai), PickPriority.CORE_GENERAL);
145// }
146// return null;
147 }
148
149
150
151
153 if (opponent instanceof CampaignFleetAPI) {
154 return new PluginPick<BattleCreationPlugin>(new BattleCreationPluginImpl(), PickPriority.CORE_GENERAL);
155 }
156 return null;
157 }
158
159
163 PickPriority.CORE_GENERAL
164 );
165 }
166
167
168 @Override
170 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
173 PickPriority.CORE_GENERAL
174 );
175 }
176 return null;
177 }
178
179 @Override
181 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
184 PickPriority.CORE_GENERAL
185 );
186 }
187 return null;
188 }
189
190
191 @Override
192 public void updateEntityFacts(SectorEntityToken entity, MemoryAPI memory) {
193 for (String tag : entity.getTags()) {
194 memory.set("$tag:" + tag, true, 0);
195 }
196
197 memory.set("$abyssalDepth", Misc.getAbyssalDepth(entity), 0);
198
199 String onOrAt = "on";
200 if (entity.hasTag(Tags.STATION)) {
201 onOrAt = "at";
202 }
203 memory.set("$onOrAt", onOrAt, 0);
204
205 if (entity.getStarSystem() != null &&
206 entity.getStarSystem().hasTag(Tags.SYSTEM_CUT_OFF_FROM_HYPER)) {
207 memory.set("$systemCutOffFromHyper", true, 0);
208 }
209
210 if (entity.getContainingLocation() != null) {
211 memory.set("$locationId", entity.getContainingLocation().getId(), 0f);
212 }
213
214 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
215
216 memory.set("$id", entity.getId(), 0);
217
218 memory.set("$transponderOn", entity.isTransponderOn(), 0);
219
220// if (entity.getMarket() != null) {
221// memory.set("$market", entity.getMarket().getName(), 0);
222// }
223
224 memory.set("$name", entity.getName(), 0);
225 memory.set("$fullName", entity.getFullName(), 0);
226
227 memory.set("$inHyperspace", entity.isInHyperspace(), 0);
228
229
230 if (entity.getCustomEntityType() != null) {
231 memory.set("$customType", entity.getCustomEntityType(), 0);
232
233 if (entity.getCustomEntitySpec() != null) {
234 CustomEntitySpecAPI spec = entity.getCustomEntitySpec();
235 memory.set("$nameInText", spec.getNameInText(), 0);
236 memory.set("$shortName", spec.getShortName(), 0);
237 memory.set("$isOrAre", spec.getIsOrAre(), 0);
238 memory.set("$aOrAn", spec.getAOrAn(), 0);
239 }
240 }
241
242 if (entity instanceof CampaignTerrainAPI) {
243 CampaignTerrainAPI terrain = (CampaignTerrainAPI) entity;
244 CampaignTerrainPlugin plugin = terrain.getPlugin();
245 memory.set("$terrainId", plugin.getSpec().getId(), 0);
246 }
247
248
249 if (entity instanceof CampaignFleetAPI) {
250 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
251 if (fleet.getAI() instanceof CampaignFleetAIAPI) {
252 CampaignFleetAIAPI ai = (CampaignFleetAIAPI) fleet.getAI();
253 EncounterOption option = ai.pickEncounterOption(null, playerFleet, true);
254 BattleAPI b = fleet.getBattle();
255 if (b != null && b.isPlayerInvolved()) {
256 b.genCombined();
257 option = b.getCombinedFor(fleet).getAI().pickEncounterOption(null, b.getCombinedFor(Global.getSector().getPlayerFleet()), true);
258 }
259
260 switch (option) {
261 case DISENGAGE:
262 memory.set("$relativeStrength", -1, 0);
263 break;
264 case ENGAGE:
265 memory.set("$relativeStrength", 1, 0);
266 break;
267 case HOLD:
268 memory.set("$relativeStrength", 0, 0);
269 break;
270 case HOLD_VS_STRONGER:
271 memory.set("$weakerThanPlayerButHolding", true, 0);
272 memory.set("$relativeStrength", -1, 0);
273 break;
274 }
275
276 memory.set("$isHostile", ai.isHostileTo(playerFleet), 0);
277
278 memory.set("$fleetPoints", fleet.getFleetPoints(), 0);
279 }
280
281 memory.set("$isStation", fleet.isStationMode(), 0);
282
283 memory.set("$supplies", fleet.getCargo().getSupplies(), 0);
284 memory.set("$fuel", fleet.getCargo().getFuel(), 0);
285
286 memory.set("$knowsWhoPlayerIs", fleet.knowsWhoPlayerIs(), 0);
287
288 if (!playerFleet.isTransponderOn() && !memory.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF)) {
289 memory.set(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF, true, 0);
290 }
291
292 if (!Misc.isPermaKnowsWhoPlayerIs(fleet) && playerFleet.isTransponderOn()) {
293 memory.set(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_ON, true, 7f + (float) Math.random() * 7f);
294 }
295 }
296
297 if (entity.getFaction() != null && !memory.contains("$isHostile")) {
298 float rel = entity.getFaction().getRelationship(Factions.PLAYER);
299 RepLevel level = RepLevel.getLevelFor(rel);
300 if (level.isAtWorst(RepLevel.INHOSPITABLE)) {
301 memory.set("$isHostile", false, 0);
302 } else {
303 memory.set("$isHostile", true, 0);
304 }
305 }
306
307
308 MarketAPI market = entity.getMarket();
309 if (market != null) {
310// for (MarketConditionAPI mc : market.getConditions()) {
311// memory.set("$mc:" + mc.getId(), true, 0);
312// }
313 if (!market.isPlanetConditionMarketOnly()) {
314 memory.set("$hasMarket", true, 0);
315 }
316
317 if (Misc.getStationFleet(market) != null) {
318 memory.set("$hasStation", true, 0);
319 }
320
321 memory.set("$marketSize", market.getSize(), 0);
322 memory.set("$stability", (int) market.getStabilityValue(), 0);
323 }
324
325 if (entity instanceof PlanetAPI) {
326 PlanetAPI planet = (PlanetAPI) entity;
327 memory.set("$planetType", planet.getTypeId(), 0);
328 }
329 }
330
331 public void updateMarketFacts(MarketAPI market, MemoryAPI memory) {
332 if (market != null) {
333 for (String tag : market.getTags()) {
334 memory.set("$tag:" + tag, true, 0);
335 }
336 for (MarketConditionAPI mc : market.getConditions()) {
337 memory.set("$mc:" + mc.getId(), true, 0);
338 }
339 for (Industry ind : market.getIndustries()) {
340 memory.set("$ind:" + ind.getId(), true, 0);
341 }
342
343 memory.set("$id", market.getId(), 0);
344 memory.set("$size", market.getSize(), 0);
345 memory.set("$stability", (int) market.getStabilityValue(), 0);
346
347 memory.set("$isSurveyed", market.getSurveyLevel() == SurveyLevel.FULL, 0);
348 memory.set("$surveyLevel", market.getSurveyLevel().name(), 0);
349 memory.set("$isPlanetConditionMarketOnly", market.isPlanetConditionMarketOnly(), 0);
350
351 memory.set("$isHidden", market.isHidden(), 0);
352
353 memory.set("$isPlayerOwned", market.isPlayerOwned(), 0);
354
355 boolean hasRuins = false;
356 if (Misc.hasRuins(market)) {
357 memory.set("$hasRuins", true, 0);
358 hasRuins = true;
359 }
360
361 //boolean ruinsExlored = memory.getBoolean("$ruinsExplored");
362
363 memory.set("$hasUnexploredRuins", Misc.hasUnexploredRuins(market), 0);
364
365
366 float suspicionLevel = computeSmugglingSuspicionLevel(market);
367 memory.set(MemFlags.MEMORY_MARKET_SMUGGLING_SUSPICION_LEVEL, suspicionLevel, 0);
368 }
369 }
370
371// public static boolean hasUnexploredRuins(MarketAPI market) {
372// return market != null && market.isPlanetConditionMarketOnly() &&
373// hasRuins(market) && !market.getMemoryWithoutUpdate().getBoolean("$ruinsExplored");
374// }
375// public static boolean hasRuins(MarketAPI market) {
376// return market != null &&
377// (market.hasCondition(Conditions.RUINS_SCATTERED) ||
378// market.hasCondition(Conditions.RUINS_WIDESPREAD) ||
379// market.hasCondition(Conditions.RUINS_EXTENSIVE) ||
380// market.hasCondition(Conditions.RUINS_VAST));
381// }
382
383
384 public static final float computeSmugglingSuspicionLevel(MarketAPI market) {
385 float smugglingTotal = 0f;
386 float tradeTotal = 0f;
387 for (SubmarketAPI submarket : market.getSubmarketsCopy()) {
388 SubmarketPlugin plugin = submarket.getPlugin();
389 if (!plugin.isParticipatesInEconomy()) continue;
390
391 PlayerTradeDataForSubmarket tradeData = SharedData.getData().getPlayerActivityTracker().getPlayerTradeData(submarket);
392 if (submarket.getFaction().isHostileTo(market.getFaction()) || submarket.getPlugin().isBlackMarket()) {
393 smugglingTotal += tradeData.getTotalPlayerTradeValue();
394 } else {
395 tradeTotal += tradeData.getTotalPlayerTradeValue();
396 }
397 }
398
399 float suspicionLevel = 0f;
400
401 if (smugglingTotal + tradeTotal > 0) {
402 suspicionLevel = smugglingTotal / (smugglingTotal + tradeTotal);
403
404 //float playerImpactMult = Global.getSettings().getFloat("economyPlayerTradeImpactMult");
405 //float threshold = 30000f * playerImpactMult * market.getSize();
406 float threshold = 10000f * market.getSize();
407 suspicionLevel *= Math.min(1f, (smugglingTotal + tradeTotal) / threshold);
408 }
409
410 float extra = market.getMemoryWithoutUpdate().getFloat(MemFlags.MARKET_EXTRA_SUSPICION);
411 suspicionLevel += extra;
412 suspicionLevel = Math.min(1f, suspicionLevel);
413
414 return suspicionLevel;
415 }
416
417 public void updatePersonFacts(PersonAPI person, MemoryAPI memory) {
418 memory.set("$id", person.getId(), 0);
419
420 for (String tag : person.getTags()) {
421 memory.set("$tag:" + tag, true, 0);
422 }
423
424 //int rel = (int)Math.round(person.getRelToPlayer().getRel() * 100f);
425 float rel = person.getRelToPlayer().getRel();
426 memory.set("$relValue", rel, 0);
427 memory.set("$rel", rel, 0); // inconsistent with $faction, oops.
428 memory.set("$relName", person.getRelToPlayer().getLevel().name(), 0);
429
430 if (Misc.isMercenary(person)) {
431 memory.set("$mercContractDur", (int)Global.getSettings().getFloat("officerMercContractDur"), 0);
432 memory.set("$mercContractDurStr", "" + (int)Global.getSettings().getFloat("officerMercContractDur"), 0);
433 }
434
435 memory.set("$isPerson", true, 0);
436 memory.set("$name", person.getName().getFullName(), 0);
437 memory.set("$personName", person.getName().getFullName(), 0);
438 memory.set("$isContact", ContactIntel.playerHasContact(person, false), 0);
439
440 memory.set("$rankId", person.getRankId(), 0);
441 memory.set("$postId", person.getPostId(), 0);
442
443 if (person.isAICore()) {
444 memory.set("$aiCoreId", person.getAICoreId(), 0);
445 memory.set("$isAICore", true, 0);
446 }
447
448 memory.set("$rankAOrAn", person.getRankArticle(), 0);
449 memory.set("$postAOrAn", person.getPostArticle(), 0);
450
451 if (person.getRank() != null) {
452 memory.set("$rank", person.getRank().toLowerCase(), 0);
453 memory.set("$Rank", Misc.ucFirst(person.getRank()), 0);
454 }
455 if (person.getPost() != null) {
456 memory.set("$post", person.getPost().toLowerCase(), 0);
457 memory.set("$Post", Misc.ucFirst(person.getPost()), 0);
458 }
459 memory.set("$importance", person.getImportance().name(), 0);
460 memory.set("$importanceAtLeastHigh", person.getImportance().ordinal() >= PersonImportance.HIGH.ordinal(), 0);
461 memory.set("$importanceAtMostLow", person.getImportance().ordinal() <= PersonImportance.LOW.ordinal(), 0);
462
463 memory.set("$level", person.getStats().getLevel(), 0);
464
465 memory.set("$personality", person.getPersonalityAPI().getId(), 0);
466
467 ImportantPeopleAPI ip = Global.getSector().getImportantPeople();
468 PersonDataAPI data = ip.getData(person);
469 if (data != null) {
470 if (data.getLocation().getMarket() != null) {
471 MarketAPI market = data.getLocation().getMarket();
472 memory.set("$hostileToMarket", person.getFaction().isHostileTo(market.getFaction()), 0);
473 }
474 }
475 }
476
477 @Override
478 public void updateFactionFacts(FactionAPI faction, MemoryAPI memory) {
479 memory.set("$id", faction.getId(), 0);
480
481 float rel = faction.getRelationship(Factions.PLAYER);
482 RepLevel level = RepLevel.getLevelFor(rel);
483 if (level.isAtWorst(RepLevel.FAVORABLE)) {
484 memory.set("$friendlyToPlayer", true, 0);
485 } else if (level.isAtBest(RepLevel.HOSTILE)) {
486 memory.set("$hostileToPlayer", true, 0);
487 } else {
488 memory.set("$neutralToPlayer", true, 0);
489 }
490
491 if (level.isAtWorst(RepLevel.INHOSPITABLE)) {
492 memory.set("$isHostile", false, 0);
493 } else {
494 memory.set("$isHostile", true, 0);
495 }
496
497 if (JSONObject.getNames(faction.getCustom()) != null) {
498 for (String key : JSONObject.getNames(faction.getCustom())) {
499 String val = faction.getCustom().optString(key);
500 memory.set("$c:" + key, val, 0);
501 }
502 }
503 Color c = faction.getColor();
504 memory.set("$color", c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," + c.getAlpha(), 0);
505
506 c = faction.getBaseUIColor();
507 memory.set("$baseColor", c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," + c.getAlpha(), 0);
508
509 c = faction.getBrightUIColor();
510 memory.set("$brightColor", c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," + c.getAlpha(), 0);
511
512 c = faction.getDarkUIColor();
513 memory.set("$darkColor", c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," + c.getAlpha(), 0);
514
515 c = faction.getGridUIColor();
516 memory.set("$gridColor", c.getRed() + "," + c.getGreen() + "," + c.getBlue() + "," + c.getAlpha(), 0);
517
518
519 memory.set("$isNeutralFaction", faction.isNeutralFaction(), 0);
520
521 memory.set("$relValue", rel, 0);
522 memory.set("$rel", level.name(), 0);
523 memory.set("$relName", level.name(), 0);
524 //memory.set("$relAdjective", level.getDisplayName().toLowerCase(), 0);
525 }
526
527 @Override
528 public void updateGlobalFacts(MemoryAPI memory) {
529 if (Global.getSettings().isDevMode()) {
530 memory.set("$isDevMode", true, 0);
531 }
532 if (TutorialMissionIntel.isTutorialInProgress()) {
533 memory.set("$isInTutorial", true, 0);
534 }
535
536 if (!memory.getBoolean(GateEntityPlugin.PLAYER_CAN_USE_GATES)) {
538 }
539
540 memory.set("$daysSinceStart", PirateBaseManager.getInstance().getUnadjustedDaysSinceStart(), 0);
541 }
542
543 @Override
544 public void updatePlayerFacts(MemoryAPI memory) {
545 CampaignFleetAPI fleet = Global.getSector().getPlayerFleet();
546
547 if (fleet != null) {
548 memory.set("$abyssalDepth", Misc.getAbyssalDepth(fleet), 0);
549 }
550
551 PersonAPI person = Global.getSector().getPlayerPerson();
552 memory.set("$firstName", person.getName().getFirst(), 0);
553 memory.set("$lastName", person.getName().getLast(), 0);
554 memory.set("$name", person.getName().getFullName(), 0);
555
556 memory.set("$factionName", Global.getSector().getFaction(Factions.PLAYER).getDisplayNameOverride(), 0);
557 memory.set("$theFactionName", Global.getSector().getFaction(Factions.PLAYER).getDisplayNameWithArticleOverride(), 0);
558
559
560 if (Misc.getCommissionFactionId() != null) {
561 memory.set("$commissionFactionId", Misc.getCommissionFactionId(), 0);
562 }
563
564
565 if (fleet.getContainingLocation() != null) {
566 memory.set("$locationId", fleet.getContainingLocation().getId(), 0);
567
568 for (String tag : fleet.getContainingLocation().getTags()) {
569 memory.set("$locTag:" + tag, true, 0);
570 }
571 }
572
573
574
575
576 memory.set("$fleetId", fleet.getId(), 0);
577
578 memory.set("$transponderOn", fleet.isTransponderOn(), 0);
579
580 memory.set("$supplies", (int)fleet.getCargo().getSupplies(), 0);
581 memory.set("$fuel", (int)fleet.getCargo().getFuel(), 0);
582 memory.set("$machinery", (int)fleet.getCargo().getCommodityQuantity(Commodities.HEAVY_MACHINERY), 0);
583
584
585 memory.set("$marines", (int)fleet.getCargo().getMarines(), 0);
586
587 memory.set("$crew", (int)fleet.getCargo().getCrew(), 0);
588
589 memory.set("$crewRoom", (int)(fleet.getCargo().getMaxPersonnel() - fleet.getCargo().getTotalPersonnel()), 0);
590 memory.set("$fuelRoom", (int)fleet.getCargo().getMaxFuel() - (int)fleet.getCargo().getFuel(), 0);
591 memory.set("$cargoRoom", (int)fleet.getCargo().getMaxCapacity() - (int)fleet.getCargo().getSpaceUsed(), 0);
592
593 memory.set("$crewRoomStr", Misc.getWithDGS((int)(fleet.getCargo().getMaxPersonnel() - fleet.getCargo().getTotalPersonnel())), 0);
594 memory.set("$fuelRoomStr", Misc.getWithDGS((int)fleet.getCargo().getMaxFuel() - (int)fleet.getCargo().getFuel()), 0);
595 memory.set("$cargoRoomStr", Misc.getWithDGS((int)fleet.getCargo().getMaxCapacity() - (int)fleet.getCargo().getSpaceUsed()), 0);
596
597 memory.set("$credits", (int)fleet.getCargo().getCredits().get(), 0);
598 memory.set("$creditsStr", Misc.getWithDGS((int)fleet.getCargo().getCredits().get()), 0);
599 memory.set("$creditsStrC", Misc.getWithDGS((int)fleet.getCargo().getCredits().get()) + Strings.C, 0);
600
601// for (CommoditySpecAPI spec : Global.getSettings().getAllCommoditySpecs()) {
602// if (spec.isMeta()) continue;
603// }
604 Set<String> seen = new HashSet<String>();
605 for (CargoStackAPI stack : fleet.getCargo().getStacksCopy()) {
606 String id = stack.getCommodityId();
607 if (id == null) continue;
608 if (seen.contains(id)) continue;
609 seen.add(id);
610
611 int quantity = (int) fleet.getCargo().getCommodityQuantity(id);
612 String key = "$" + id;
613
614 if (!memory.contains(key)) {
615 memory.set(key, quantity, 0);
616 }
617 }
618
619
620 MonthlyReport report = SharedData.getData().getPreviousReport();
621 boolean debt = report.getDebt() > 0;
622 boolean longDebt = report.getDebt() > 0 && report.getPreviousDebt() > 0;
623 memory.set("$inDebt", debt, 0);
624 memory.set("$inLongDebt", longDebt, 0);
625
626 int fleetSizeCount = fleet.getFleetSizeCount();
627 int maxSize = 0;
628 int maxCombatSize = 0;
629 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
630 HullSize size = member.getHullSpec().getHullSize();
631 int val = 1;
632 switch (size) {
633 case CAPITAL_SHIP:
634 val = 4;
635 break;
636 case CRUISER:
637 val = 3;
638 break;
639 case DESTROYER:
640 val = 2;
641 break;
642 case FIGHTER:
643 case FRIGATE:
644 case DEFAULT:
645 val = 1;
646 break;
647 }
648 if (val > maxSize) {
649 maxSize = val;;
650 }
651 if (val > maxCombatSize && !member.isCivilian()) {
652 maxCombatSize = val;
653 }
654 }
655
656 memory.set("$maxHullSize", maxSize, 0);
657 memory.set("$maxCombatHullSize", maxCombatSize, 0);
658
659 memory.set("$fleetSizeCount", fleetSizeCount, 0);
660 memory.set("$numShips", fleet.getFleetData().getMembersListCopy().size(), 0);
661 memory.set("$fleetPoints", fleet.getFleetPoints(), 0);
662
663 memory.set("$numColonies", Misc.getPlayerMarkets(true).size(), 0);
664
665 if (fleet.getFlagship() != null) {
666 memory.set("$flagshipName", fleet.getFlagship().getShipName(), 0);
667 }
668
669 for (String id : fleet.getAbilities().keySet()) {
670 memory.set("$ability:" + id, true, 0);
671 }
672 }
673
674 @Override
676 return new PluginPick<FleetStubConverterPlugin>(new FleetStubConverterPluginImpl(), PickPriority.CORE_GENERAL);
677 }
678
679 @Override
681// if (stub != null && stub.getParams() instanceof FleetParams) {
682// return new PluginPick<FleetStubConverterPlugin>(new FleetStubConverterPluginImpl(), PickPriority.CORE_GENERAL);
683// }
684 return null;
685 }
686
687
688 public PluginPick<AutofitPlugin> pickAutofitPlugin(FleetMemberAPI member) {
689 PersonAPI commander = null;
690 if (member != null) {
691 commander = member.getFleetCommanderForStats();
692 if (commander == null) commander = member.getFleetCommander();
693 }
694 return new PluginPick<AutofitPlugin>(new CoreAutofitPlugin(commander), PickPriority.CORE_GENERAL);
695 }
696
697
699
700 if (Global.getSector().getMemoryWithoutUpdate().getBoolean(CampaignTutorialScript.USE_TUTORIAL_RESPAWN)) {
701 return new PluginPick<InteractionDialogPlugin>(new TutorialRespawnDialogPluginImpl(), PickPriority.MOD_SPECIFIC);
702 }
703 //return new PluginPick<InteractionDialogPlugin>(new StandardRespawnDialogPluginImpl(), PickPriority.CORE_GENERAL);
704 return null;
705 }
706
707
708 @Override
710 return new PluginPick<ImmigrationPlugin>(new CoreImmigrationPluginImpl(market), PickPriority.CORE_GENERAL);
711 }
712
714 if (Commodities.ALPHA_CORE.equals(commodityId)) {
715 return new PluginPick<AICoreAdminPlugin>(new AICoreAdminPluginImpl(), PickPriority.CORE_GENERAL);
716 }
717 return null;
718 }
719
721 if (Commodities.OMEGA_CORE.equals(commodityId) ||
722 Commodities.ALPHA_CORE.equals(commodityId) ||
723 Commodities.BETA_CORE.equals(commodityId) ||
724 Commodities.GAMMA_CORE.equals(commodityId)) {
725 return new PluginPick<AICoreOfficerPlugin>(new AICoreOfficerPluginImpl(), PickPriority.CORE_GENERAL);
726 }
727 return null;
728 }
729
730 public PluginPick<FleetInflater> pickFleetInflater(CampaignFleetAPI fleet, Object params) {
731 if (params instanceof DefaultFleetInflaterParams) {
732 DefaultFleetInflaterParams p = (DefaultFleetInflaterParams) params;
733 return new PluginPick<FleetInflater>(new DefaultFleetInflater(p), PickPriority.CORE_GENERAL);
734 }
735 return null;
736 }
737
738}
739
740
741
742
743
744
745
746
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
void updateEntityFacts(SectorEntityToken entity, MemoryAPI memory)
PluginPick< AutofitPlugin > pickAutofitPlugin(FleetMemberAPI member)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(SectorEntityToken interactionTarget)
PluginPick< FleetStubConverterPlugin > pickStubConverter(CampaignFleetAPI fleet)
PluginPick< ReputationActionResponsePlugin > pickReputationActionResponsePlugin(Object action, PersonAPI person)
PluginPick< FleetStubConverterPlugin > pickStubConverter(FleetStubAPI stub)
PluginPick< BattleCreationPlugin > pickBattleCreationPlugin(SectorEntityToken opponent)
PluginPick< ReputationActionResponsePlugin > pickReputationActionResponsePlugin(Object action, String factionId)
PluginPick< ImmigrationPlugin > pickImmigrationPlugin(MarketAPI market)
void updateFactionFacts(FactionAPI faction, MemoryAPI memory)
PluginPick< AICoreOfficerPlugin > pickAICoreOfficerPlugin(String commodityId)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(Object param, SectorEntityToken interactionTarget)
PluginPick< FleetInflater > pickFleetInflater(CampaignFleetAPI fleet, Object params)
PluginPick< BattleAutoresolverPlugin > pickBattleAutoresolverPlugin(BattleAPI battle)
PluginPick< AbilityAIPlugin > pickAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai)
PluginPick< AICoreAdminPlugin > pickAICoreAdminPlugin(String commodityId)