1package com.fs.starfarer.api.impl.campaign.rulecmd;
3import java.util.ArrayList;
4import java.util.LinkedHashSet;
7import java.util.Random;
10import org.lwjgl.util.vector.Vector2f;
12import com.fs.starfarer.api.EveryFrameScript;
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.BattleAPI;
15import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
16import com.fs.starfarer.api.campaign.CampaignFleetAPI;
17import com.fs.starfarer.api.campaign.CargoAPI;
18import com.fs.starfarer.api.campaign.FactionAPI;
19import com.fs.starfarer.api.campaign.FleetAssignment;
20import com.fs.starfarer.api.campaign.InteractionDialogAPI;
21import com.fs.starfarer.api.campaign.JumpPointAPI;
22import com.fs.starfarer.api.campaign.LocationAPI;
23import com.fs.starfarer.api.campaign.OptionPanelAPI;
24import com.fs.starfarer.api.campaign.RepLevel;
25import com.fs.starfarer.api.campaign.SectorEntityToken;
26import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
27import com.fs.starfarer.api.campaign.SpecialItemData;
28import com.fs.starfarer.api.campaign.StarSystemAPI;
29import com.fs.starfarer.api.campaign.TextPanelAPI;
30import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
31import com.fs.starfarer.api.campaign.econ.Industry;
32import com.fs.starfarer.api.campaign.econ.MarketAPI;
33import com.fs.starfarer.api.campaign.econ.MonthlyReport;
34import com.fs.starfarer.api.campaign.econ.MonthlyReport.FDNode;
35import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
36import com.fs.starfarer.api.campaign.listeners.CurrentLocationChangedListener;
37import com.fs.starfarer.api.campaign.listeners.EconomyTickListener;
38import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
39import com.fs.starfarer.api.campaign.rules.MemKeys;
40import com.fs.starfarer.api.campaign.rules.MemoryAPI;
41import com.fs.starfarer.api.impl.campaign.CargoPodsEntityPlugin;
42import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
43import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards;
44import com.fs.starfarer.api.impl.campaign.ids.Conditions;
45import com.fs.starfarer.api.impl.campaign.ids.Entities;
46import com.fs.starfarer.api.impl.campaign.ids.Factions;
47import com.fs.starfarer.api.impl.campaign.ids.Industries;
48import com.fs.starfarer.api.impl.campaign.ids.Items;
49import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
50import com.fs.starfarer.api.impl.campaign.ids.Stats;
51import com.fs.starfarer.api.impl.campaign.intel.GensHannanMachinations;
52import com.fs.starfarer.api.impl.campaign.intel.LuddicChurchImmigrationDeal;
53import com.fs.starfarer.api.impl.campaign.intel.PerseanLeagueMembership;
54import com.fs.starfarer.api.impl.campaign.intel.PerseanLeagueMembership.AgreementEndingType;
55import com.fs.starfarer.api.impl.campaign.intel.SindrianDiktatFuelDeal;
56import com.fs.starfarer.api.impl.campaign.intel.TriTachyonDeal;
57import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseManager;
58import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
59import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel.PirateBaseTier;
60import com.fs.starfarer.api.impl.campaign.intel.events.EventFactor;
61import com.fs.starfarer.api.impl.campaign.intel.events.HALuddicPathDealFactor;
62import com.fs.starfarer.api.impl.campaign.intel.events.HAPirateKingDealFactor;
63import com.fs.starfarer.api.impl.campaign.intel.events.HegemonyHostileActivityFactor;
64import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityCause2;
65import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel;
66import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel.HAERandomEventData;
67import com.fs.starfarer.api.impl.campaign.intel.events.LuddicChurchHostileActivityFactor;
68import com.fs.starfarer.api.impl.campaign.intel.events.LuddicChurchStandardActivityCause;
69import com.fs.starfarer.api.impl.campaign.intel.events.LuddicPathHostileActivityFactor;
70import com.fs.starfarer.api.impl.campaign.intel.events.PerseanLeagueHostileActivityFactor;
71import com.fs.starfarer.api.impl.campaign.intel.events.PirateBasePirateActivityCause2;
72import com.fs.starfarer.api.impl.campaign.intel.events.SindrianDiktatHostileActivityFactor;
73import com.fs.starfarer.api.impl.campaign.intel.events.SindrianDiktatStandardActivityCause;
74import com.fs.starfarer.api.impl.campaign.intel.events.StandardPerseanLeagueActivityCause;
75import com.fs.starfarer.api.impl.campaign.intel.events.TriTachyonHostileActivityFactor;
76import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TriTachyonCommerceRaiding;
77import com.fs.starfarer.api.impl.campaign.intel.group.GenericRaidFGI.GenericRaidParams;
78import com.fs.starfarer.api.impl.campaign.intel.group.KnightsOfLuddTakeoverExpedition;
79import com.fs.starfarer.api.impl.campaign.intel.group.PerseanLeagueBlockade;
80import com.fs.starfarer.api.impl.campaign.intel.group.PerseanLeaguePunitiveExpedition;
81import com.fs.starfarer.api.impl.campaign.intel.group.SindrianDiktatPunitiveExpedition;
82import com.fs.starfarer.api.impl.campaign.intel.group.TTMercenaryAttack;
83import com.fs.starfarer.api.impl.campaign.intel.group.TTMercenaryReversedAttack;
84import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
85import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission.FleetStyle;
86import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
87import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
88import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
89import com.fs.starfarer.api.impl.campaign.shared.SharedData;
90import com.fs.starfarer.api.ui.TooltipMakerAPI;
91import com.fs.starfarer.api.ui.TooltipMakerAPI.TooltipCreator;
92import com.fs.starfarer.api.util.Misc;
93import com.fs.starfarer.api.util.Misc.FleetFilter;
94import com.fs.starfarer.api.util.Misc.Token;
139 return (
int) (perTick * numIter);
144 float f = 1f / numIter;
152 if (!market.isPlayerOwned())
continue;
154 payment += (int) (market.getGrossIncome() * f) * feeFraction;
166 protected boolean done =
false;
168 protected Random random =
new Random();
171 protected float untilMercCheck = 0f;
172 protected float mercProbMult = 1f;
173 protected transient boolean spawnMerc =
false;
179 resetMercCheckDelay();
182 protected Object readResolve() {
183 if (random ==
null) {
184 random =
new Random();
189 protected void resetMercCheckDelay() {
191 (
Global.
getSettings().getFloatFromArray(
"pirateProtectionMercSpawnInterval", 1) -
195 protected void setDone() {
197 Global.getSector().getListenerManager().removeListener(
this);
200 public boolean isDone() {
203 public boolean runWhilePaused() {
207 public void reportEconomyTick(
int iterIndex) {
208 MonthlyReport report = SharedData.getData().getCurrentReport();
209 FDNode marketsNode = report.getNode(MonthlyReport.OUTPOSTS);
212 if (payment <= 0)
return;
214 FDNode paymentNode = report.getNode(marketsNode,
"pirate_payment");
215 paymentNode.name =
"Protection payment";
218 paymentNode.upkeep += payment;
219 paymentNode.tooltipCreator =
this;
220 paymentNode.mapEntity = intel.
getEntity();
222 paymentNode.icon = Global.getSettings().getSpriteName(
"income_report",
"generic_expense");
227 public void reportEconomyMonthEnd() {
231 public void createTooltip(TooltipMakerAPI tooltip,
boolean expanded, Object tooltipParam) {
233 tooltip.addSpacer(-10f);
239 public float getTooltipWidth(Object tooltipParam) {
243 public boolean isTooltipExpandable(Object tooltipParam) {
247 public void advance(
float amount) {
248 if (isDone())
return;
261 CampaignFleetAPI station = Misc.getStationFleet(intel.
getEntity());
262 List<CampaignFleetAPI> fleets =
new ArrayList<CampaignFleetAPI>(intel.
getSystem().
getFleets());
264 for (CampaignFleetAPI fleet : fleets) {
265 MarketAPI source = Misc.getSourceMarket(fleet);
266 if (source == intel.
getMarket() || fleet == station) {
268 Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(),
269 MemFlags.MEMORY_KEY_MAKE_NON_HOSTILE,
"psk_deal",
true, 0.1f);
270 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_ALLOW_PLAYER_BATTLE_JOIN_TOFF,
true, 0.1f);
275 float days = Global.getSector().getClock().convertToDays(amount);
276 untilMercCheck -= days;
277 if (untilMercCheck < 0) untilMercCheck = 0;
285 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
288 public void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
289 if (!battle.isPlayerInvolved())
return;
291 CampaignFleetAPI station = Misc.getStationFleet(intel.
getEntity());
292 if (station ==
null)
return;
294 LocationAPI cLoc =
null;
296 if (cLoc ==
null && primaryWinner !=
null) cLoc = primaryWinner.getContainingLocation();
301 for (CampaignFleetAPI curr : battle.getNonPlayerSideSnapshot()) {
302 if (!curr.knowsWhoPlayerIs() && curr != station)
continue;
304 MarketAPI source = Misc.getSourceMarket(curr);
306 if (source == intel.
getMarket() || curr == station) {
307 endDeal(
false,
null);
313 public void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo) {
314 if (market == intel.
getMarket() && !actionData.secret && !cargo.isEmpty()) {
315 endDeal(
false, dialog);
319 public void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry) {
320 if (market == intel.
getMarket() && !actionData.secret) {
321 endDeal(
false, dialog);
325 public void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
326 if (market == intel.
getMarket() && !actionData.secret) {
327 endDeal(
false, dialog);
331 public void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
332 if (market == intel.
getMarket() && !actionData.secret) {
333 endDeal(
false, dialog);
337 public void endDeal(
boolean amicable, InteractionDialogAPI dialog) {
340 TextPanelAPI textPanel = dialog ==
null ? null : dialog.getTextPanel();
351 Misc.incrUntrustwortyCount();
355 Misc.adjustRep(intel.
getBaseCommander(), -(RepRewards.HIGH + 0.01f), textPanel);
358 Misc.adjustRep(intel.
getBaseCommander(), -(RepRewards.HIGH * 2f), textPanel);
363 CampaignFleetAPI station = Misc.getStationFleet(intel.
getEntity());
364 List<CampaignFleetAPI> fleets =
new ArrayList<CampaignFleetAPI>(intel.
getSystem().
getFleets());
366 for (CampaignFleetAPI fleet : fleets) {
367 MarketAPI source = Misc.getSourceMarket(fleet);
368 if (source == intel.
getMarket() || fleet == station) {
370 Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(),
371 MemFlags.MEMORY_KEY_MAKE_NON_HOSTILE,
"psk_deal",
false, 0);
372 fleet.getMemoryWithoutUpdate().unset(MemFlags.MEMORY_KEY_ALLOW_PLAYER_BATTLE_JOIN_TOFF);
379 public void reportCurrentLocationChanged(LocationAPI prev, LocationAPI curr) {
381 float prob = Global.getSettings().getFloat(
"pirateProtectionMercSpawnChance");
382 prob *= mercProbMult;
388 if (untilMercCheck <= 0 && random.nextFloat() < prob) {
389 mercProbMult *= Global.getSettings().getFloat(
"pirateProtectionMercSpawnChanceMult");
391 resetMercCheckDelay();
396 public void spawnMerc() {
398 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
400 JumpPointAPI jp = Misc.findNearestJumpPointTo(pf);
401 float dist = Misc.getDistance(pf, jp);
407 StarSystemAPI system = intel.
getSystem();
411 PirateBaseTier tier = intel.
getTier();
413 case TIER_1_1MODULE: difficulty = 3;
break;
414 case TIER_2_1MODULE: difficulty = 4;
break;
415 case TIER_3_2MODULE: difficulty = 5;
break;
416 case TIER_4_3MODULE: difficulty = 6;
break;
417 case TIER_5_3MODULE: difficulty = 7;
break;
419 difficulty += random.nextInt(3);
422 FleetCreatorMission m =
new FleetCreatorMission(random);
425 Vector2f hLoc = system.getLocation();
426 m.createQualityFleet(difficulty, Factions.MERCENARY, hLoc);
428 m.triggerSetFleetFaction(Factions.INDEPENDENT);
429 m.triggerMakeLowRepImpact();
430 m.triggerFleetSetAllWeapons();
431 m.triggerFleetMakeImportantPermanent(
null);
432 m.triggerSetFleetMemoryValue(
"$psk_merc",
true);
434 CampaignFleetAPI fleet = m.createFleet();
437 system.addEntity(fleet);
439 Vector2f loc =
new Vector2f(pf.getLocation());
440 loc = Misc.getPointAtRadius(loc, 400f);
441 fleet.setLocation(loc.x, loc.y);
442 SectorEntityToken e = system.createToken(loc);
443 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 2f + 3f * random.nextFloat(),
"preparing to attack " + intel.
getEntity().
getName());
445 fleet.addAssignment(FleetAssignment.GO_TO_LOCATION, intel.
getEntity(), 20f,
"moving to attack " + intel.
getEntity().
getName());
447 fleet.addScript(
new MissionFleetAutoDespawn(
null, fleet));
449 fleet.addAssignmentAtStart(FleetAssignment.INTERCEPT, pf, 1f,
null);
459 if (dialog ==
null)
return false;
468 String action = params.get(0).getString(memoryMap);
471 if (memory ==
null)
return false;
480 if (
"baseInvolved".equals(action)) {
481 if (system ==
null)
return false;
483 if (base ==
null)
return false;
486 }
else if (
"addStationKingScript".equals(action)) {
489 if (base ==
null)
return false;
497 int tier = base.
getTier().ordinal();
498 if (tier < 0) tier = 0;
499 if (tier > 4) tier = 4;
507 }
else if (
"endStationKingDeal".equals(action)) {
509 if (base ==
null)
return false;
511 if (curr instanceof StationKingScript) {
512 StationKingScript script = (StationKingScript) curr;
513 script.endDeal(
true, dialog);
518 }
else if (
"playerColoniesHavePatherActvity".equals(action)) {
532 }
else if (
"payMegaTithe".equals(action)) {
533 int megaTithe = memory.
getInt(
"$LP_megaTithe");
534 int dur = memory.
getInt(
"$LP_megaTitheDuration");
544 float range = 100000f;
552 if (curr.getAI() !=
null) {
553 curr.getAI().setActionTextOverride(
null);
570 }
else if (
"gavePKToPather".equals(action)) {
578 }
else if (
"computeMegaTithe".equals(action)) {
590 interest += market.getSize();
591 tithe += interest * market.getSize() * tithePerPointPerColonySize;
594 tithe += normalTithe;
598 memoryMap.get(
MemKeys.
LOCAL).set(
"$LP_megaTithe", (
int)tithe, 0);
600 memoryMap.get(
MemKeys.
LOCAL).set(
"$LP_megaTitheDuration", titheDuration, 0);
603 }
else if (
"kazeronInstallNanoforge".equals(action)) {
605 if (kazeron !=
null) {
608 if (ind.wantsToUseSpecialItem(data)) {
609 ind.setSpecialItem(data);
614 }
else if (
"kazeronNanoforgeMissing".equals(action)) {
616 if (kazeron ==
null)
return true;
618 if (ind.getSpecialItem() ==
null)
continue;
624 }
else if (
"stopPayingHouseHannan".equals(action)) {
628 }
else if (
"leaveLeague".equals(action)) {
638 }
else if (
"printTriTachDealRepReq".equals(action)) {
642 }
else if (
"isTTCRInProgress".equals(action)) {
644 }
else if (
"isTTRaidingPlayerCommerce".equals(action)) {
653 }
else if (
"makeTriTachDeal".equals(action)) {
657 }
else if (
"breakTriTachDeal".equals(action)) {
661 }
else if (
"printLCDealRepReq".equals(action)) {
665 }
else if (
"breakLCDeal".equals(action)) {
669 }
else if (
"KOLTakeoverInProgress".equals(action)) {
671 }
else if (
"makeLuddicChurchDeal".equals(action)) {
675 }
else if (
"joinLeague".equals(action)) {
680 }
else if (
"canJoinLeague".equals(action)) {
682 }
else if (
"isPLExpeditionInProgress".equals(action)) {
684 }
else if (
"isPLProtectingPlayerSpace".equals(action)) {
693 }
else if (
"canSendPLPunitiveExpedition".equals(action)) {
695 }
else if (
"updateLeagueData".equals(action)) {
699 memoryMap.get(
MemKeys.
LOCAL).set(
"$plDuesPercent", (
int)Math.round(duesF * 100f) +
"%", 0);
700 memoryMap.get(
MemKeys.
LOCAL).set(
"$hannanBribePercent", (
int)Math.round(hannanF * 100f) +
"%", 0);
703 }
else if (
"canRemakeDealWithHouseHannan".equals(action)) {
705 }
else if (
"endGHMachinations".equals(action)) {
710 }
else if (
"doKOLTTakeover".equals(action)) {
712 if (takeover !=
null) {
715 }
else if (
"updateKOLTArmadaData".equals(action)) {
717 if (takeover !=
null) {
722 }
else if (
"updateTTMAData".equals(action)) {
736 mem.
set(
"$attackReversible", reversible);
737 if (target !=
null) {
742 }
else if (
"retargetTTMA".equals(action)) {
744 }
else if (
"computeSacredProtectorsData".equals(action)) {
747 mem.
set(
"$SP_supplies", (
int)supplies, 0);
749 }
else if (
"sacredProtectorsCheckCargoPods".equals(action)) {
751 int supplies = mem.
getInt(
"$SP_supplies");
753 }
else if (
"knightsHasslingPlayerColonies".equals(action)) {
762 }
else if (
"printSDDealRepReq".equals(action)) {
766 }
else if (
"breakSDDeal".equals(action)) {
770 }
else if (
"makeDiktatDeal".equals(action)) {
774 }
else if (
"diktatConcernedByFuelProd".equals(action)) {
793 float maxPodsDist = 1500f;
796 VisibilityLevel vLevel = entity.getVisibilityLevelTo(
other);
799 if (dist > maxPodsDist)
continue;
801 if (vLevel == VisibilityLevel.COMPOSITION_DETAILS ||
802 vLevel == VisibilityLevel.COMPOSITION_AND_FACTION_DETAILS) {
804 if (plugin.
getElapsed() <= 1f && entity.getCargo() !=
null) {
805 float supplies = entity.getCargo().getSupplies();
806 if (supplies >=
remove) {
807 entity.getCargo().removeSupplies(
remove * 2);
835 if (takeover !=
null) {
850 if (attack !=
null) {
866 if (blockade !=
null) {
871 if (expedition !=
null) {
901 int size = market.getSize();
917 if (system ==
null)
return false;
918 if (base ==
null)
return false;
924 public static class PLPunExData {
942 if (intel ==
null)
return null;
945 if (target ==
null)
return null;
948 if (kazeron ==
null)
return null;
950 PLPunExData data =
new PLPunExData();
952 data.target = target;
953 data.kazeron = kazeron;
966 GenericRaidParams params =
new GenericRaidParams(
new Random(),
true);
967 params.factionId = data.kazeron.getFactionId();
968 params.source = data.kazeron;
970 Random random =
new Random();
972 params.prepDays = 14f + random.nextFloat() * 14f;
973 params.payloadDays = 27f + 7f * random.nextFloat();
975 params.raidParams.where = data.target;
977 Set<String> disrupt =
new LinkedHashSet<String>();
979 params.raidParams.allowedTargets.add(market);
980 params.raidParams.allowNonHostileTargets =
true;
981 for (
Industry ind : market.getIndustries()) {
983 disrupt.add(ind.getId());
991 params.raidParams.disrupt.addAll(disrupt);
992 params.raidParams.raidsPerColony = Math.min(disrupt.size(), 4);
993 if (disrupt.isEmpty()) {
994 params.raidParams.raidsPerColony = 2;
997 if (params.raidParams.allowedTargets.isEmpty()) {
1001 params.style = FleetStyle.STANDARD;
1006 float f = data.intel.getMarketPresenceFactor(data.target);
1008 float totalDifficulty = fleetSizeMult * 50f * (0.5f + 0.5f * f);
1009 if (totalDifficulty < 30) {
1012 if (totalDifficulty > 100) {
1013 totalDifficulty = 100;
1016 Random r = data.intel.getRandom();
1019 while (totalDifficulty > 0) {
1023 if (r.nextFloat() > 0.3f) {
1024 min = (int) Math.min(totalDifficulty, 8f);
1025 max = (int) Math.min(totalDifficulty, 10f);
1030 params.fleetSizes.add(diff);
1031 totalDifficulty -= diff;
static SettingsAPI getSettings()
static SoundPlayerAPI getSoundPlayer()
static SectorAPI getSector()
static final String LOCAL
static void addRequiredStanding(FactionAPI faction, RepLevel req, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad, boolean orBetter)
static void addCurrentStanding(FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad)
static final String PATHER_CELLS
static final String CARGO_PODS
static final String LUDDIC_PATH
static final String DERELICT
static final String TRITACHYON
static final String LUDDIC_CHURCH
static final String PLAYER
static final String TAG_UNRAIDABLE
static final String PRISTINE_NANOFORGE
static final String COMBAT_FLEET_SIZE_MULT
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
void endMachinations(TextPanelAPI text)
static boolean canRemakeDealWithHouseHannan()
static GensHannanMachinations get()
void endAgreement(AgreementEndingType type, InteractionDialogAPI dialog)
static LuddicChurchImmigrationDeal get()
static boolean isLeagueMember()
static int getNumTimesLeftLeague()
static int TIMES_LEFT_LEAGUE_FOR_NO_REJOIN
static void stopPayingHouseHannan(boolean trustBroken, InteractionDialogAPI dialog)
void endMembership(AgreementEndingType type, InteractionDialogAPI dialog)
static PerseanLeagueMembership get()
static boolean isDefeatedBlockadeOrPunEx()
static boolean isLeftLeagueWhenGoodDeal()
static SindrianDiktatFuelDeal get()
void endAgreement(AgreementEndingType type, InteractionDialogAPI dialog)
void endAgreement(AgreementEndingType type, InteractionDialogAPI dialog)
static TriTachyonDeal get()
static float getLuddicPathMarketInterest(MarketAPI market)
StarSystemAPI getSystem()
SectorEntityToken getEntity()
PersonAPI getBaseCommander()
static PirateBaseIntel getIntelFor(StarSystemAPI system)
boolean playerHasDealWithBaseCommander()
void setPlayerHasDealWithBaseCommander(boolean hasDeal)
EventFactor getFactorOfClass(Class c)
static void avertInspectionIfNotInProgress()
void addFactor(EventFactor factor)
HAERandomEventData getRollDataForEvent()
HostileActivityCause2 getActivityCause(Class activityClass, Class causeClass)
static HostileActivityEventIntel get()
static void avertOrAbortAttack()
static boolean wasPLEverSatBombardedByPlayer()
int getProgress(BaseEventIntel intel)
static StarSystemAPI findBlockadeTarget(HostileActivityEventIntel intel, EventStageData stage)
static MarketAPI getKazeron(boolean requireMilitaryBase)
static List< MarketAPI > getColoniesAffectedBy(PirateBaseIntel base)
static int COUNT_IF_MEDIUM
int getProgress(BaseEventIntel intel)
static StarSystemAPI getPrimaryTriTachyonSystem()
static TriTachyonCommerceRaiding get()
FGBlockadeParams getBlockadeParams()
void finish(boolean isAbort)
void setPreFleetDeploymentDelay(float delay)
void performTakeover(boolean voluntary)
static KnightsOfLuddTakeoverExpedition get()
static PerseanLeagueBlockade get()
static PerseanLeaguePunitiveExpedition get()
static SindrianDiktatPunitiveExpedition get()
static TTMercenaryAttack get()
static void sendReversedAttack(InteractionDialogAPI dialog)
static float getNormalRandom(float min, float max)
static void addCreditsLossText(int credits, TextPanelAPI text)
static boolean playerPatherAgreementIsPermanent()
static float getPlayerPatherAgreementDays()
static int computePirateProtectionPaymentPerMonth(PirateBaseIntel intel)
static void avertOrEndPLBlockadeAsNecessary()
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static boolean canPlayerJoinTheLeague()
static final String PATHER_AGREEMENT_PERMANENT
static final String PATHER_AGREEMENT
static int computePirateProtectionPaymentPerTick(PirateBaseIntel intel)
static boolean isPLExpeditionInProgress()
static boolean isKOLTakeoverInProgress()
static boolean canSendPerseanLeaguePunitiveExpedition()
boolean sacredProtectorsCheckCargoPods(int remove)
static PLPunExData computePerseanLeaguePunitiveExpeditionData()
static void avertOrEndKOLTakeoverAsNecessary()
static boolean baseInvolved(StarSystemAPI system, PirateBaseIntel base)
static void avertOrEndDiktatAttackAsNecessary()
static void setPatherAgreement(boolean agreement, float duration)
static void sendPerseanLeaguePunitiveExpedition(InteractionDialogAPI dialog)
static boolean playerHasPatherAgreement()
static String getWithDGS(float num)
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static void giveStandardReturnToSourceAssignments(CampaignFleetAPI fleet)
static void adjustRep(float repChangeFaction, RepLevel limit, String factionId, float repChangePerson, RepLevel personLimit, PersonAPI person, TextPanelAPI text)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getRounded(float in)
static List< MarketAPI > getPlayerMarkets(boolean includeNonPlayerFaction)
static List< CampaignFleetAPI > findNearbyFleets(SectorEntityToken from, float maxRange, FleetFilter filter)
int getIntFromArray(String key, int index)
float getFloatFromArray(String key, int index)
float getFloat(String key)
SoundAPI playUISound(String id, float pitch, float volume)
MutableValue getCredits()
TextPanelAPI getTextPanel()
SectorEntityToken getInteractionTarget()
OptionPanelAPI getOptionPanel()
List< SectorEntityToken > getAllEntities()
void addScript(EveryFrameScript script)
boolean isCurrentLocation()
List< EveryFrameScript > getScripts()
String getNameWithLowercaseTypeShort()
List< CampaignFleetAPI > getFleets()
CampaignFleetAPI getPlayerFleet()
MemoryAPI getPlayerMemoryWithoutUpdate()
IntelManagerAPI getIntelManager()
FactionAPI getFaction(String factionId)
MemoryAPI getMemoryWithoutUpdate()
ListenerManagerAPI getListenerManager()
LocationAPI getContainingLocation()
TacticalModulePlugin getTacticalModule()
void addIntel(IntelInfoPlugin plugin)
List< Industry > getIndustries()
void addListener(Object listener)
float getExpire(String key)
void set(String key, Object value)
boolean getBoolean(String key)