Starsector API
Loading...
Searching...
No Matches
TriTachyonHostileActivityFactor.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.events;
2
3import java.awt.Color;
4import java.util.LinkedHashSet;
5import java.util.List;
6import java.util.Random;
7import java.util.Set;
8
9import org.lwjgl.util.vector.Vector2f;
10
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.BattleAPI;
13import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
14import com.fs.starfarer.api.campaign.CampaignFleetAPI;
15import com.fs.starfarer.api.campaign.CargoAPI;
16import com.fs.starfarer.api.campaign.InteractionDialogAPI;
17import com.fs.starfarer.api.campaign.StarSystemAPI;
18import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin.ListInfoMode;
19import com.fs.starfarer.api.campaign.econ.Industry;
20import com.fs.starfarer.api.campaign.econ.MarketAPI;
21import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
22import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
23import com.fs.starfarer.api.fleet.FleetMemberAPI;
24import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetAssignmentAI.EconomyRouteData;
25import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetRouteManager;
26import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
27import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
28import com.fs.starfarer.api.impl.campaign.ids.Conditions;
29import com.fs.starfarer.api.impl.campaign.ids.Factions;
30import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
31import com.fs.starfarer.api.impl.campaign.ids.Industries;
32import com.fs.starfarer.api.impl.campaign.ids.Skills;
33import com.fs.starfarer.api.impl.campaign.ids.Strings;
34import com.fs.starfarer.api.impl.campaign.intel.events.BaseEventIntel.EventStageData;
35import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel.HAERandomEventData;
36import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel.Stage;
37import com.fs.starfarer.api.impl.campaign.intel.events.TriTachyonStandardActivityCause.CompetitorData;
38import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRCommerceRaidersDestroyedFactor;
39import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRIndustryDisruptedFactor;
40import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRMercenariesDefeatedFactor;
41import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRPoints;
42import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRTradeFleetsDestroyedFactor;
43import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TriTachyonCommerceRaiding;
44import com.fs.starfarer.api.impl.campaign.intel.group.FGRaidAction.FGRaidType;
45import com.fs.starfarer.api.impl.campaign.intel.group.FleetGroupIntel;
46import com.fs.starfarer.api.impl.campaign.intel.group.FleetGroupIntel.FGIEventListener;
47import com.fs.starfarer.api.impl.campaign.intel.group.GenericRaidFGI.GenericRaidParams;
48import com.fs.starfarer.api.impl.campaign.intel.group.TTMercenaryAttack;
49import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
50import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission.FleetStyle;
51import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.ComplicationRepImpact;
52import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
53import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
54import com.fs.starfarer.api.ui.TooltipMakerAPI;
55import com.fs.starfarer.api.ui.TooltipMakerAPI.TooltipCreator;
56import com.fs.starfarer.api.util.CountingMap;
57import com.fs.starfarer.api.util.Misc;
58import com.fs.starfarer.api.util.TimeoutTracker;
59
61 implements FGIEventListener, FleetEventListener, ColonyPlayerHostileActListener {
62
63 public static String COUNTER_RAIDED_TRITACH = "$counterRaidedTriTach";
64 public static String DEFEATED_MERC_ATTACK = "$defeatedTTMercAttack";
65 public static String BRIBED_MERC_ATTACK = "$bribedTTMercAttack";
66
67 public static String COMMERCE_RAIDER_FLEET = "$triTachCommerceRaider";
68
69 public static float DEALT_WITH_MERC_PROGRESS_MULT = 0.25f;
70
77
84
85 public static boolean isDealtWithMercAttack() {
87 }
88
98
99
100
102
103
109
110 protected Object readResolve() {
111 if (recentlyDisrupted == null) {
113 }
114 return this;
115 }
116
118 return "";
119 }
120
121 @Override
124 return 0;
125 }
126 return super.getProgress(intel);
127 }
128
129 public String getDesc(BaseEventIntel intel) {
130 return "Tri-Tachyon Corporation";
131 }
132
133 public String getNameForThreatList(boolean first) {
134 return "Tri-Tachyon";
135 }
136
137
139 if (getProgress(intel) <= 0) {
140 return Misc.getGrayColor();
141 }
143 }
144
146 return new BaseFactorTooltip() {
147 public void createTooltip(TooltipMakerAPI tooltip, boolean expanded, Object tooltipParam) {
148 float opad = 10f;
149 tooltip.addPara("Your independent polity has become enough of a presence in the Sector to "
150 + "start cutting into the profit margins of the Tri-Tachyon Corporation.", 0f);
151
152 tooltip.addPara("Independent-flagged commerce raiders - little more than sanctioned pirates - "
153 + "have been sighted in your space, "
154 + "attacking trade fleets regardless of their factional allegiance.", opad);
155
156 addDealtSectionToTooltip(tooltip, opad);
157 }
158 };
159 }
160
161 public static void addDealtSectionToTooltip(TooltipMakerAPI tooltip, float opad) {
162 if (isDealtWithMercAttack()) {
163 tooltip.addPara("You've dealt with the mercenary attack sent against you, and " +
164 "this has considerably cooled the enthusiasm for continued aggression. " +
165 "Commerce-raiding continues, but the event progress value is reduced by %s, "
166 + "and no further large-scale attacks are likely to be mounted.", opad,
168 }
169 }
170
172 return getProgress(intel) > 0;
173 }
174
175
176 public Color getNameColor(float mag) {
177 if (mag <= 0f) {
178 return Misc.getGrayColor();
179 }
181 }
182
183
184 @Override
185 public int getMaxNumFleets(StarSystemAPI system) {
186 return Global.getSettings().getInt("triTachyonMaxFleets");
187 }
188
189 public CampaignFleetAPI createFleet(StarSystemAPI system, Random random) {
190
191 float f = intel.getMarketPresenceFactor(system);
192
193 // even if magnitude is not factored in, if it's 0 fleets won't spawn
194 // and its value affects the likelihood of tritach fleets spawning
195 //getEffectMagnitude(system);
196
197 int difficulty = 4 + (int) Math.round(f * 4f);
198
200 m.beginFleet();
201
202 Vector2f loc = system.getLocation();
203 String factionId = Factions.TRITACHYON;
204 if (random.nextFloat() < 0.5f) {
205 factionId = Factions.MERCENARY;
206 }
207
208 m.createQualityFleet(difficulty, factionId, loc);
209
210 if (difficulty <= 5) {
211 m.triggerSetFleetQuality(FleetQuality.SMOD_1);
212 } else if (difficulty <= 7) {
213 m.triggerSetFleetQuality(FleetQuality.SMOD_2);
214 } else {
215 m.triggerSetFleetQuality(FleetQuality.SMOD_3);
216 }
217
220
222 //m.triggerMakeHostile();
226
230
233// m.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
234// m.triggerFleetAddCommanderSkill(Skills.PHASE_CORPS, 1);
235// m.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1);
236
238
239 int tugs = 0;
240 if (Factions.MERCENARY.equals(factionId)) {
241 tugs = random.nextInt(3);
242 }
243
244 m.triggerFleetMakeFaster(true, tugs, true);
246
247
248 CampaignFleetAPI fleet = m.createFleet();
249
250 return fleet;
251 }
252
253
254
255
257 ListInfoMode mode, boolean isUpdate, Color tc, float initPad) {
259 info.addPara("Impending Tri-Tachyon mercenary attack", initPad, tc, c, "Tri-Tachyon");
260 }
261
263 ListInfoMode mode, boolean isUpdate, Color tc, float initPad) {
264 info.addPara("Tri-Tachyon mercenary attack averted", tc, initPad);
265 }
266
268 float small = 0f;
269 float opad = 10f;
270
271 small = 8f;
272
274
275 Color h = Misc.getHighlightColor();
276 info.addPara("You've received intel that the Tri-Tachyon Corporation is allocating funds to hire and "
277 + "equip a mercenary company to raid and disrupt your industrial base.",
278 small, Misc.getNegativeHighlightColor(), "raid and disrupt your industrial base");
279
280 info.addPara("If the mercenary attack is defeated, it will go a long way towards convincing "
281 + "the Tri-Tachyon Corporation to abandon its anti-competitive efforts.",
282 //opad, tri, "Tri-Tachyon Corporation");
283 opad, h, "abandon its anti-competitive efforts");
284
285 stage.beginResetReqList(info, true, "crisis", opad);
286 info.addPara("The %s is convinced that its efforts are unprofitable", 0f, c, "Tri-Tachyon Corporation");
287 stage.endResetReqList(info, false, "crisis", -1, -1);
288
290 }
291
292
293 public String getEventStageIcon(HostileActivityEventIntel intel, EventStageData stage) {
295 }
296
297 public TooltipCreator getStageTooltipImpl(final HostileActivityEventIntel intel, final EventStageData stage) {
298 if (stage.id == Stage.HA_EVENT) {
299 return getDefaultEventTooltip("Tri-Tachyon mercenary attack", intel, stage);
300 }
301 return null;
302 }
303
304
305 public float getEventFrequency(HostileActivityEventIntel intel, EventStageData stage) {
306 if (stage.id == Stage.HA_EVENT) {
307
309 return 0f;
310 }
311
313 return 0f;
314 }
315
317 MarketAPI source = findExpeditionSource(intel, stage, target);
318 if (target != null && source != null) {
319 return 10f;
320 }
321 }
322 return 0;
323 }
324
325
326 public void rollEvent(HostileActivityEventIntel intel, EventStageData stage) {
327 HAERandomEventData data = new HAERandomEventData(this, stage);
328 stage.rollData = data;
330 }
331
332 public boolean fireEvent(HostileActivityEventIntel intel, EventStageData stage) {
334 MarketAPI source = findExpeditionSource(intel, stage, target);
335
336 if (source == null || target == null) {
337 return false;
338 }
339
340 stage.rollData = null;
341 return startMercenaryAttack(source, target, stage, intel, getRandomizedStageRandom(3));
342 }
343
344
348
349 for (CompetitorData curr : data) {
350 for (MarketAPI market : curr.competitorProducers) {
351 StarSystemAPI system = market.getStarSystem();
352 if (system == null) continue;
353 int weight = market.getCommodityData(curr.commodityId).getMaxSupply();
354 counts.add(system, weight);
355 }
356 }
357
358 return counts.getLargest();
359 }
360
361 public static MarketAPI findExpeditionSource(HostileActivityEventIntel intel, EventStageData stage, StarSystemAPI target) {
362 if (getNortia() != null) return getNortia();
363
364
367 int size = market.getSize();
368 int weight = size;
369 if (!Misc.isMilitary(market)) weight += size * 10;
370 if (market.hasIndustry(Industries.ORBITALWORKS)) weight += size;
371 if (market.hasIndustry(Industries.HEAVYINDUSTRY)) weight += size;
372
373 scores.add(market, weight);
374 }
375
376 return scores.getLargest();
377 }
378
379 public static MarketAPI getNortia() {
380 MarketAPI nortia = Global.getSector().getEconomy().getMarket("nortia");
381 if (nortia == null || nortia.hasCondition(Conditions.DECIVILIZED) ||
382 !nortia.getFactionId().equals(Factions.INDEPENDENT)) {
383 return null;
384 }
385 return nortia;
386 }
387
388
389
390
395
396
397
398 @Override
402
403 public void notifyEventEnding() {
405 }
406
407
408 @Override
409 public void advance(float amount) {
410 super.advance(amount);
411
412 float days = Misc.getDays(amount);
413 recentlyDisrupted.advance(days);
414
415// if (!Global.getSector().getListenerManager().hasListener(this)) {
416// Global.getSector().getListenerManager().addListener(this);
417// }
418
419// System.out.println("LISTENERS:");
420// for (Object o : Global.getSector().getListenerManager().getListeners(Object.class)) {
421// System.out.println("Listener: " + o.getClass().getSimpleName() + " [" + o.hashCode() + "]");
422// }
423// System.out.println("-----");
424// System.out.println("-----");
425// System.out.println("-----");
426// System.out.println("-----");
427
428 EventStageData stage = intel.getDataFor(Stage.HA_EVENT);
429 if (stage != null && stage.rollData instanceof HAERandomEventData &&
430 ((HAERandomEventData)stage.rollData).factor == this) {
433 }
434 }
437 }
438 }
439
440
443 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
444 if (!Factions.TRITACHYON.equals(market.getFactionId())) continue;
445 StarSystemAPI system = market.getStarSystem();
446 if (system == null) continue;
447 int size = market.getSize();
448 int weight = size;
449 if (Misc.isMilitary(market)) weight += size;
450 if (market.hasIndustry(Industries.ORBITALWORKS)) weight += size;
451 if (market.hasIndustry(Industries.HEAVYINDUSTRY)) weight += size;
452
453 counts.add(system, weight);
454 }
455 return counts.getLargest();
456 }
457
458
459 public boolean startMercenaryAttack(MarketAPI source, StarSystemAPI target,
460 EventStageData stage, HostileActivityEventIntel intel, Random random) {
461 if (isPlayerCounterRaidedTriTach()) return false;
462 if (source == null || target == null) return false;
463
464 GenericRaidParams params = new GenericRaidParams(new Random(random.nextLong()), true);
465 params.makeFleetsHostile = false; // will be made hostile when they arrive, not before
466 params.source = source;
467
468 params.prepDays = 21f + random.nextFloat() * 7f;
469 params.payloadDays = 27f + 7f * random.nextFloat();
470
471 params.raidParams.where = target;
472 params.raidParams.type = FGRaidType.SEQUENTIAL;
473
474 Set<String> disrupt = new LinkedHashSet<String>();
475 for (MarketAPI market : Misc.getMarketsInLocation(target, Factions.PLAYER)) {
476 params.raidParams.allowedTargets.add(market);
477 params.raidParams.allowNonHostileTargets = true;
478 for (Industry ind : market.getIndustries()) {
479 if (ind.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) continue;
480 disrupt.add(ind.getId());
481
482 }
483 }
484
485 params.raidParams.disrupt.addAll(disrupt);
486 params.raidParams.raidsPerColony = Math.min(disrupt.size(), 4);
487 if (disrupt.isEmpty()) {
488 params.raidParams.raidsPerColony = 2;
489 }
490
491 if (params.raidParams.allowedTargets.isEmpty()) {
492 return false;
493 }
494
495 params.factionId = Factions.INDEPENDENT;
496 params.style = FleetStyle.QUALITY;
497 params.repImpact = ComplicationRepImpact.NONE;
498
499
500 float fleetSizeMult = 1f;
501
502 float f = intel.getMarketPresenceFactor(target);
503
504 float totalDifficulty = fleetSizeMult * 50f * (0.5f + 0.5f * f);
505
506 totalDifficulty -= 10;
507 params.fleetSizes.add(10); // first size 10 pick becomes the Operational Command
508
509 while (totalDifficulty > 0) {
510 int min = 3;
511 int max = 8;
512
513 //int diff = Math.round(StarSystemGenerator.getNormalRandom(random, min, max));
514 int diff = min + random.nextInt(max - min + 1);
515
516 params.fleetSizes.add(diff);
517 totalDifficulty -= diff;
518 }
519
520 TTMercenaryAttack attack = new TTMercenaryAttack(params);
521 attack.setListener(this);
522 //attack.setPreFleetDeploymentDelay(30f + random.nextFloat() * 60f);
523 //attack.setPreFleetDeploymentDelay(1f);
524 Global.getSector().getIntelManager().addIntel(attack, false);
525
526 return true;
527 }
528
529
530
531 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
532
533 }
534 public void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
535 if (isPlayerCounterRaidedTriTach()) return;
536
537 if (!battle.isPlayerInvolved()) return;
538
539 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
540
541 int traderFP = 0;
542 int raiderFP = 0;
543 for (CampaignFleetAPI otherFleet : battle.getNonPlayerSideSnapshot()) {
544 //if (!Global.getSector().getPlayerFaction().isHostileTo(otherFleet.getFaction())) continue;
545 boolean trader = isTraderServingATTColony(otherFleet);
546 boolean raider = isCommerceRaider(otherFleet);
547
548 if (!trader && !raider) continue;
549
550 int mult = 1;
551 if (trader) mult = TTCRPoints.TRADE_FLEET_FP_MULT;
552
553 for (FleetMemberAPI loss : Misc.getSnapshotMembersLost(otherFleet)) {
554 int fp = loss.getFleetPointCost() * mult;
555 if (trader) {
556 traderFP += fp;
557 } else if (raider) {
558 raiderFP += fp;
559 }
560 }
561 }
562
563 if (traderFP > 0) {
564 int points = computeTTCRProgressPoints(traderFP);
565 if (points > 0) {
568 }
569 }
570 if (raiderFP > 0) {
571 int points = computeTTCRProgressPoints(raiderFP);
572 if (points > 0) {
575 }
576 }
577 }
578
582 public static boolean isTraderServingATTColony(CampaignFleetAPI fleet) {
583 boolean trader = Misc.isTrader(fleet);
584 boolean smuggler = Misc.isSmuggler(fleet);
585
586 if (!trader && !smuggler) return false;
587
589 if (route == null) return false;
590
591 EconomyRouteData data = (EconomyRouteData) route.getCustom();
592 if (data == null) return false;
593
594 if (data.from != null && Factions.TRITACHYON.equals(data.from.getFactionId())) {
595 return true;
596 }
597 if (data.to != null && Factions.TRITACHYON.equals(data.to.getFactionId())) {
598 return true;
599 }
600
601 return false;
602 }
603
604 public static int computeTTCRProgressPoints(float fleetPointsDestroyed) {
605 if (fleetPointsDestroyed <= 0) return 0;
606
607 int points = Math.round(fleetPointsDestroyed / (float) TTCRPoints.FP_PER_POINT);
608 if (points < 1) points = 1;
609 return points;
610 }
611
612 public static int computeIndustryDisruptPoints(Industry ind) {
613 float base = ind.getSpec().getDisruptDanger().disruptionDays;
615
616 float days = ind.getDisruptedDays();
617
618 int points = (int) Math.round(days / base * per);
621 }
622 return points;
623 }
624
626 TempData actionData, CargoAPI cargo) {
627
628 }
629 public void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData,
630 Industry industry) {
631 if (isPlayerCounterRaidedTriTach()) return;
632 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
633
634 if (market != null && Factions.TRITACHYON.equals(market.getFactionId())) {
635 applyIndustryDisruptionToTTCR(industry, dialog);
636 }
637 }
638 public void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
639 if (isPlayerCounterRaidedTriTach()) return;
640 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
641
642 if (market != null && Factions.TRITACHYON.equals(market.getFactionId())) {
643 applyMassIndustryDisruptionToTTCR(market, dialog);
644 }
645 }
647 TempData actionData) {
648 if (isPlayerCounterRaidedTriTach()) return;
649 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
650
651 if (market != null && Factions.TRITACHYON.equals(market.getFactionId())) {
652 applyMassIndustryDisruptionToTTCR(market, dialog);
653 }
654 }
655
657 if (isPlayerCounterRaidedTriTach()) return;
658 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
659
660 int points = 0;
661 for (Industry industry : market.getIndustries()) {
662 if (recentlyDisrupted.contains(industry)) continue;
663 if (industry.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) continue;
664
665 int curr = computeIndustryDisruptPoints(industry);
666 if (curr > 0) {
667 points += curr;
668 recentlyDisrupted.add(industry, industry.getDisruptedDays());
669 }
670 }
671
672 if (points > 0) {
674 "Disrupted industries " + market.getOnOrAt() + " " + market.getName(), points);
676 }
677 }
679 if (isPlayerCounterRaidedTriTach()) return;
680 if (getProgress(null) <= 0 && TriTachyonCommerceRaiding.get() == null) return;
681
682 if (!recentlyDisrupted.contains(industry)) {
683 if (industry.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) return;
684 MarketAPI market = industry.getMarket();
685 if (market == null) return;
686
687 int points = computeIndustryDisruptPoints(industry);
688 if (points > 0) {
690 industry.getCurrentName() + " " + market.getOnOrAt() + " " + market.getName() +
691 " disrupted", points);
693 recentlyDisrupted.add(industry, industry.getDisruptedDays());
694 }
695 }
696 }
697 @Override
699 return super.getNameColorForThreatList();
700 }
701
702
703}
704
705
706
707
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
RouteData getRoute(String source, CampaignFleetAPI fleet)
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
static boolean checkFactionExists(String factionId, boolean requireMilitary)
TooltipCreator getDefaultEventTooltip(final String title, final HostileActivityEventIntel intel, final EventStageData stage)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
void addStageDescriptionForEvent(HostileActivityEventIntel intel, EventStageData stage, TooltipMakerAPI info)
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void addBulletPointForEventReset(HostileActivityEventIntel intel, EventStageData stage, TooltipMakerAPI info, ListInfoMode mode, boolean isUpdate, Color tc, float initPad)
TooltipCreator getStageTooltipImpl(final HostileActivityEventIntel intel, final EventStageData stage)
static StarSystemAPI findExpeditionTarget(HostileActivityEventIntel intel, EventStageData stage)
static MarketAPI findExpeditionSource(HostileActivityEventIntel intel, EventStageData stage, StarSystemAPI target)
void addBulletPointForEvent(HostileActivityEventIntel intel, EventStageData stage, TooltipMakerAPI info, ListInfoMode mode, boolean isUpdate, Color tc, float initPad)
boolean startMercenaryAttack(MarketAPI source, StarSystemAPI target, EventStageData stage, HostileActivityEventIntel intel, Random random)
static void addFactorCreateIfNecessary(EventFactor factor, InteractionDialogAPI dialog)
void createQualityFleet(int difficulty, String factionId, Vector2f locInHyper)
void triggerFleetMakeFaster(boolean navigationSkill, int numTugs, boolean allowLongPursuit)
void add(K key, int quantity)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
Definition Misc.java:748
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
Definition Misc.java:936
static Color getNegativeHighlightColor()
Definition Misc.java:802
static List< MarketAPI > getFactionMarkets(FactionAPI faction, String econGroup)
Definition Misc.java:971
static Color getGrayColor()
Definition Misc.java:826
static boolean isSmuggler(CampaignFleetAPI fleet)
Definition Misc.java:4764
static float getDays(float amount)
Definition Misc.java:4663
static boolean isTrader(CampaignFleetAPI fleet)
Definition Misc.java:4767
static Color getHighlightColor()
Definition Misc.java:792
static boolean isMilitary(MarketAPI market)
Definition Misc.java:5045
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
FactionAPI getFaction(String factionId)
ListenerManagerAPI getListenerManager()
CommodityOnMarketAPI getCommodityData(String commodityId)
void set(String key, Object value)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)