1package com.fs.starfarer.api.impl.campaign.intel.events;
4import java.util.LinkedHashSet;
6import java.util.Random;
9import org.lwjgl.util.vector.Vector2f;
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;
126 return super.getProgress(
intel);
130 return "Tri-Tachyon Corporation";
134 return "Tri-Tachyon";
147 public void createTooltip(
TooltipMakerAPI tooltip,
boolean expanded, Object tooltipParam) {
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);
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);
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,
197 int difficulty = 4 + (int) Math.round(f * 4f);
204 if (random.nextFloat() < 0.5f) {
210 if (difficulty <= 5) {
212 }
else if (difficulty <= 7) {
241 tugs = random.nextInt(3);
257 ListInfoMode mode,
boolean isUpdate, Color tc,
float initPad) {
259 info.
addPara(
"Impending Tri-Tachyon mercenary attack", initPad, tc, c,
"Tri-Tachyon");
263 ListInfoMode mode,
boolean isUpdate, Color tc,
float initPad) {
264 info.
addPara(
"Tri-Tachyon mercenary attack averted", tc, initPad);
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.",
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.",
283 opad, h,
"abandon its anti-competitive efforts");
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);
298 if (stage.id == Stage.HA_EVENT) {
306 if (stage.id == Stage.HA_EVENT) {
318 if (target !=
null && source !=
null) {
327 HAERandomEventData data =
new HAERandomEventData(
this, stage);
328 stage.rollData = data;
336 if (source ==
null || target ==
null) {
340 stage.rollData =
null;
349 for (CompetitorData curr : data) {
350 for (
MarketAPI market : curr.competitorProducers) {
352 if (system ==
null)
continue;
354 counts.
add(system, weight);
367 int size = market.getSize();
373 scores.
add(market, weight);
410 super.advance(amount);
429 if (stage !=
null && stage.rollData instanceof HAERandomEventData &&
430 ((HAERandomEventData)stage.rollData).factor ==
this) {
446 if (system ==
null)
continue;
447 int size = market.getSize();
453 counts.
add(system, weight);
462 if (source ==
null || target ==
null)
return false;
464 GenericRaidParams params =
new GenericRaidParams(
new Random(random.nextLong()),
true);
465 params.makeFleetsHostile =
false;
466 params.source = source;
468 params.prepDays = 21f + random.nextFloat() * 7f;
469 params.payloadDays = 27f + 7f * random.nextFloat();
471 params.raidParams.where = target;
472 params.raidParams.type = FGRaidType.SEQUENTIAL;
474 Set<String> disrupt =
new LinkedHashSet<String>();
476 params.raidParams.allowedTargets.add(market);
477 params.raidParams.allowNonHostileTargets =
true;
478 for (
Industry ind : market.getIndustries()) {
480 disrupt.add(ind.getId());
485 params.raidParams.disrupt.addAll(disrupt);
486 params.raidParams.raidsPerColony = Math.min(disrupt.size(), 4);
487 if (disrupt.isEmpty()) {
488 params.raidParams.raidsPerColony = 2;
491 if (params.raidParams.allowedTargets.isEmpty()) {
496 params.style = FleetStyle.QUALITY;
497 params.repImpact = ComplicationRepImpact.NONE;
500 float fleetSizeMult = 1f;
504 float totalDifficulty = fleetSizeMult * 50f * (0.5f + 0.5f * f);
506 totalDifficulty -= 10;
507 params.fleetSizes.add(10);
509 while (totalDifficulty > 0) {
514 int diff = min + random.nextInt(max - min + 1);
516 params.fleetSizes.add(diff);
517 totalDifficulty -= diff;
548 if (!trader && !raider)
continue;
554 int fp = loss.getFleetPointCost() * mult;
586 if (!trader && !smuggler)
return false;
589 if (route ==
null)
return false;
591 EconomyRouteData data = (EconomyRouteData) route.getCustom();
592 if (data ==
null)
return false;
605 if (fleetPointsDestroyed <= 0)
return 0;
608 if (points < 1) points = 1;
618 int points = (int) Math.round(days / base * per);
626 TempData actionData,
CargoAPI cargo) {
647 TempData actionData) {
674 "Disrupted industries " + market.
getOnOrAt() +
" " + market.
getName(), points);
685 if (market ==
null)
return;
691 " disrupted", points);
699 return super.getNameColorForThreatList();
static SettingsAPI getSettings()
static SectorAPI getSector()
static final String SOURCE_ID
static RouteManager getInstance()
RouteData getRoute(String source, CampaignFleetAPI fleet)
static final String DECIVILIZED
static final String TRITACHYON
static final String MERCENARY
static final String PIRATES
static final String PLAYER
static final String INDEPENDENT
static final String COMMERCE_RAIDERS
static final String TAG_UNRAIDABLE
static final String ORBITALWORKS
static final String HEAVYINDUSTRY
static final String COORDINATED_MANEUVERS
static final String ELECTRONIC_WARFARE
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
void addBorder(TooltipMakerAPI info, Color c)
EventStageData getDataFor(Object stageId)
static boolean checkFactionExists(String factionId, boolean requireMilitary)
Random getRandomizedStageRandom()
TooltipCreator getDefaultEventTooltip(final String title, final HostileActivityEventIntel intel, final EventStageData stage)
HostileActivityEventIntel intel
float getMarketPresenceFactor(StarSystemAPI system)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
static String DEFEATED_MERC_ATTACK
boolean fireEvent(HostileActivityEventIntel intel, EventStageData stage)
static boolean isCommerceRaider(CampaignFleetAPI fleet)
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
Color getNameColor(float mag)
int getProgress(BaseEventIntel intel)
static boolean isTraderServingATTColony(CampaignFleetAPI fleet)
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
static int computeTTCRProgressPoints(float fleetPointsDestroyed)
static void setPlayerDefeatedMercAttack()
static boolean isDealtWithMercAttack()
void applyMassIndustryDisruptionToTTCR(MarketAPI market, InteractionDialogAPI dialog)
TooltipCreator getMainRowTooltip(BaseEventIntel intel)
static MarketAPI getNortia()
static StarSystemAPI getPrimaryTriTachyonSystem()
static boolean isPlayerBribedMercAttack()
TriTachyonHostileActivityFactor(HostileActivityEventIntel intel)
static String BRIBED_MERC_ATTACK
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
Color getNameColorForThreatList()
void advance(float amount)
void addStageDescriptionForEvent(HostileActivityEventIntel intel, EventStageData stage, TooltipMakerAPI info)
static float DEALT_WITH_MERC_PROGRESS_MULT
static void addDealtSectionToTooltip(TooltipMakerAPI tooltip, float opad)
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
Color getDescColor(BaseEventIntel intel)
int getMaxNumFleets(StarSystemAPI system)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
boolean shouldShow(BaseEventIntel intel)
static boolean isPlayerDefeatedMercAttack()
TimeoutTracker< Industry > recentlyDisrupted
String getProgressStr(BaseEventIntel intel)
String getNameForThreatList(boolean first)
static boolean isPlayerCounterRaidedTriTach()
static void setPlayerBribedMercAttack()
void rollEvent(HostileActivityEventIntel intel, EventStageData stage)
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 String COMMERCE_RAIDER_FLEET
static int computeIndustryDisruptPoints(Industry ind)
static MarketAPI findExpeditionSource(HostileActivityEventIntel intel, EventStageData stage, StarSystemAPI target)
static void setPlayerCounterRaidedTriTach()
static String COUNTER_RAIDED_TRITACH
void reportFGIAborted(FleetGroupIntel intel)
void notifyFactorRemoved()
String getDesc(BaseEventIntel intel)
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)
void applyIndustryDisruptionToTTCR(Industry industry, InteractionDialogAPI dialog)
float getEventFrequency(HostileActivityEventIntel intel, EventStageData stage)
String getEventStageIcon(HostileActivityEventIntel intel, EventStageData stage)
CampaignFleetAPI createFleet(StarSystemAPI system, Random random)
static List< CompetitorData > computePlayerCompetitionData()
static int MAX_POINTS_FOR_INDUSTRY_DISRUPT
static int BASE_POINTS_FOR_INDUSTRY_DISRUPT
static int TRADE_FLEET_FP_MULT
static TriTachyonCommerceRaiding get()
static void addFactorCreateIfNecessary(EventFactor factor, InteractionDialogAPI dialog)
void finish(boolean isAbort)
void setListener(FGIEventListener listener)
static TTMercenaryAttack get()
CampaignFleetAPI createFleet()
void createQualityFleet(int difficulty, String factionId, Vector2f locInHyper)
void triggerFleetMakeFaster(boolean navigationSkill, int numTugs, boolean allowLongPursuit)
void triggerFleetAllowLongPursuit()
void triggerMakeEveryoneJoinBattleAgainst()
void triggerFleetAddCommanderSkill(String skill, int level)
void triggerSetFleetType(String fleetType)
void triggerMakeNoRepImpact()
void triggerMakeHostileToAllTradeFleets()
void triggerSetFleetQuality(FleetQuality quality)
void triggerMakeNonHostileToFaction(String factionId)
void triggerSetFleetMaxShipSize(int max)
void triggerSetFleetFlag(String flag)
void triggerSetPirateFleet()
void triggerSetFleetFaction(final String factionId)
void add(K key, int quantity)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static Color getNegativeHighlightColor()
static List< MarketAPI > getFactionMarkets(FactionAPI faction, String econGroup)
static Color getGrayColor()
static boolean isSmuggler(CampaignFleetAPI fleet)
static float getDays(float amount)
static boolean isTrader(CampaignFleetAPI fleet)
static Color getHighlightColor()
static boolean isMilitary(MarketAPI market)
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
boolean isPlayerInvolved()
MemoryAPI getPlayerMemoryWithoutUpdate()
IntelManagerAPI getIntelManager()
FactionAPI getFaction(String factionId)
ListenerManagerAPI getListenerManager()
MemoryAPI getMemoryWithoutUpdate()
void addIntel(IntelInfoPlugin plugin)
List< MarketAPI > getMarketsCopy()
MarketAPI getMarket(String id)
IndustrySpecAPI getSpec()
CommodityOnMarketAPI getCommodityData(String commodityId)
List< Industry > getIndustries()
StarSystemAPI getStarSystem()
boolean hasCondition(String id)
void addListener(Object listener)
void removeListener(Object listener)
void set(String key, Object value)
boolean getBoolean(String key)
boolean hasTag(String tag)
RaidDangerLevel getDisruptDanger()