1package com.fs.starfarer.api.impl.campaign.intel.inspection;
4import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
12import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
13import com.fs.starfarer.api.campaign.econ.Industry;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.characters.PersonAPI;
16import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript;
17import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript.MilitaryResponseParams;
18import com.fs.starfarer.api.impl.campaign.command.WarSimScript;
19import com.fs.starfarer.api.impl.campaign.econ.impl.OrbitalStation;
20import com.fs.starfarer.api.impl.campaign.fleets.RouteManager;
21import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
22import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
23import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
24import com.fs.starfarer.api.impl.campaign.intel.inspection.HegemonyInspectionIntel.AntiInspectionOrders;
25import com.fs.starfarer.api.impl.campaign.intel.inspection.HegemonyInspectionIntel.HegemonyInspectionOutcome;
26import com.fs.starfarer.api.impl.campaign.intel.raid.ActionStage;
27import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel.RaidStageStatus;
28import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI.FleetActionDelegate;
29import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD;
30import com.fs.starfarer.api.ui.TooltipMakerAPI;
31import com.fs.starfarer.api.util.Misc;
40 protected List<MilitaryResponseScript>
scripts =
new ArrayList<MilitaryResponseScript>();
50 if (intel.
getOrders() == AntiInspectionOrders.RESIST) {
60 super.advance(amount);
73 float duration = 100f;
75 MilitaryResponseParams params =
new MilitaryResponseParams(ActionType.HOSTILE,
85 MilitaryResponseParams defParams =
new MilitaryResponseParams(ActionType.HOSTILE,
113 if (
status != RaidStageStatus.ONGOING)
return;
122 status = RaidStageStatus.FAILURE;
131 return "performing inspection of " + market.
getName();
135 return "moving to inspect " + market.
getName();
141 if (market ==
null) {
147 status = RaidStageStatus.SUCCESS;
149 AntiInspectionOrders orders =
intel.getOrders();
151 if (hostile || orders == AntiInspectionOrders.RESIST) {
164 }
else if (orders == AntiInspectionOrders.BRIBE) {
165 intel.setOutcome(HegemonyInspectionOutcome.BRIBED);
166 }
else if (orders == AntiInspectionOrders.COMPLY) {
178 if (
intel.getOutcome() !=
null) {
179 if (
status == RaidStageStatus.SUCCESS) {
180 intel.sendOutcomeUpdate();
191 AntiInspectionOrders orders =
intel.getOrders();
193 boolean resist = orders == AntiInspectionOrders.RESIST;
199 List<String> expected =
intel.getExpectedCores();
204 for (String
id : found) {
212 for (String
id : expected) {
217 if (valExpected < 30000) {
222 if (!resist && valExpected > valFound * 1.25f) {
223 intel.setOutcome(HegemonyInspectionOutcome.FOUND_EVIDENCE_NO_CORES);
225 curr.setDisrupted((
intel.getRandom().nextFloat() * 45f) + 15f);
229 intel.setOutcome(HegemonyInspectionOutcome.CONFISCATE_CORES);
250 List<String> result =
new ArrayList<String>();
252 String
id = curr.getAICoreId();
254 if (resist &&
intel.getRandom().nextFloat() > re)
continue;
256 curr.setAICoreId(
null);
261 if (!resist ||
intel.getRandom().nextFloat() < re) {
268 List<String> missing =
new ArrayList<String>(
intel.getExpectedCores());
269 for (String
id : result) {
275 for (String
id :
new ArrayList<String>(missing)) {
278 if (resist &&
intel.getRandom().nextFloat() > re)
continue;
288 for (String
id :
new ArrayList<String>(missing)) {
291 if (resist &&
intel.getRandom().nextFloat() > re)
continue;
316 if (hostile && defensiveStr >= str) {
317 status = RaidStageStatus.FAILURE;
326 if (station !=
null) {
343 if (!hostile && orders == AntiInspectionOrders.RESIST) {
356 for (RouteData route : routes) {
376 AntiInspectionOrders orders =
intel.getOrders();
377 boolean resist = orders == AntiInspectionOrders.RESIST;
379 if (
status == RaidStageStatus.FAILURE) {
380 if (
intel.getOutcome() == HegemonyInspectionOutcome.COLONY_NO_LONGER_EXISTS) {
381 info.
addPara(
"The inspection has been aborted.", opad);
383 info.
addPara(
"The inspection task force has been defeated by the defenders of " +
386 }
else if (
status == RaidStageStatus.SUCCESS) {
393 switch (
intel.getOutcome()) {
395 info.
addPara(
"The funds you've allocated have been used to resolve the inspection to the " +
396 "satisfaction of all parties.", opad);
398 case CONFISCATE_CORES:
400 info.
addPara(
"The inspectors have confiscated the following AI cores:", opad);
404 info.
addPara(
"The inspectors have not been able to confiscate any AI cores.", opad);
406 info.
addPara(
"The inspectors have not found any AI cores.", opad);
410 case FOUND_EVIDENCE_NO_CORES:
412 info.
addPara(
"The inspectors have confiscated the following AI cores:", opad);
415 info.
addPara(
"The inspectors have not found any AI cores.", opad);
417 info.
addPara(
"There was ample evidence of AI core use, spurring the inspectors to great zeal " +
418 "in trying to find them. Local operations have been significantly disrupted.", opad);
421 }
else if (curr == index) {
434 return "orbiting " + from.
getName();
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static float getFactionStrength(String factionId, StarSystemAPI system)
static float getStationStrength(FactionAPI faction, StarSystemAPI system, SectorEntityToken from)
static float getEnemyStrength(String factionId, StarSystemAPI system)
static void disrupt(Industry station)
static boolean isPlayerInSpawnRange(SectorEntityToken from)
List< RouteData > getRoutesForSource(String source)
static RouteManager getInstance()
static final String RECENTLY_RAIDED
String getRaidApproachText(CampaignFleetAPI fleet, MarketAPI market)
void removeCoresAndApplyResult(CampaignFleetAPI fleet)
String getRaidDefaultText(CampaignFleetAPI fleet)
void showStageInfo(TooltipMakerAPI info)
static float REP_PENALTY_HID_STUFF
boolean isPlayerTargeted()
boolean canRaid(CampaignFleetAPI fleet, MarketAPI market)
List< String > removeCores(CampaignFleetAPI inspector, boolean resist)
HIActionStage(HegemonyInspectionIntel raid, MarketAPI target)
List< MilitaryResponseScript > scripts
void advance(float amount)
List< String > getCoresRemoved()
void performRaid(CampaignFleetAPI fleet, MarketAPI market)
String getRaidInSystemText(CampaignFleetAPI fleet)
String getRaidPrepText(CampaignFleetAPI fleet, SectorEntityToken from)
static float REP_PENALTY_NORMAL
String getRaidActionText(CampaignFleetAPI fleet, MarketAPI market)
List< String > coresRemoved
AntiInspectionOrders getOrders()
HegemonyInspectionOutcome getOutcome()
void giveReturnOrdersToStragglers(List< RouteData > stragglers)
List< RouteData > getRoutes()
void abortIfNeededBasedOnFP(boolean giveReturnOrders)
AssembleStage getAssembleStage()
String getRouteSourceId()
int getStageIndex(RaidStage stage)
float getRaidFPAdjusted()
static float getRaidEffectiveness(MarketAPI market, CampaignFleetAPI fleet)
static int applyRaidStabiltyPenalty(MarketAPI target, String desc, float re)
static float getRaidStr(CampaignFleetAPI fleet)
static Color getTextColor()
static float FP_TO_GROUND_RAID_STR_APPROX_MULT
static String ucFirst(String str)
static CargoAPI getStorageCargo(MarketAPI market)
static CargoAPI getLocalResourcesCargo(MarketAPI market)
static Color getGrayColor()
static float getDays(float amount)
static Color getHighlightColor()
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
static Industry getStationIndustry(MarketAPI market)
static void setRaidedTimestamp(MarketAPI market)
CargoAPI createCargo(boolean unlimitedStacks)
CommoditySpecAPI getCommoditySpec(String commodityId)
float getCommodityQuantity(String id)
void removeCommodity(String id, float quantity)
void addCommodity(String commodityId, float quantity)
String getPersonNamePrefix()
boolean isHostileTo(FactionAPI other)
void addScript(EveryFrameScript script)
SectorEntityToken getCenter()
LocationAPI getContainingLocation()
MemoryAPI getMemoryWithoutUpdate()
void setAdmin(PersonAPI admin)
List< Industry > getIndustries()
StarSystemAPI getStarSystem()
SectorEntityToken getPrimaryEntity()