1package com.fs.starfarer.api.impl.campaign;
3import java.util.HashSet;
8import org.json.JSONObject;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.PluginPick;
12import com.fs.starfarer.api.campaign.AICoreAdminPlugin;
13import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
14import com.fs.starfarer.api.campaign.BaseCampaignPlugin;
15import com.fs.starfarer.api.campaign.BattleAPI;
16import com.fs.starfarer.api.campaign.BattleAutoresolverPlugin;
17import com.fs.starfarer.api.campaign.BattleCreationPlugin;
18import com.fs.starfarer.api.campaign.CampaignFleetAPI;
19import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
20import com.fs.starfarer.api.campaign.CampaignTerrainPlugin;
21import com.fs.starfarer.api.campaign.CargoStackAPI;
22import com.fs.starfarer.api.campaign.CustomEntitySpecAPI;
23import com.fs.starfarer.api.campaign.FactionAPI;
24import com.fs.starfarer.api.campaign.FleetInflater;
25import com.fs.starfarer.api.campaign.FleetStubAPI;
26import com.fs.starfarer.api.campaign.FleetStubConverterPlugin;
27import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
28import com.fs.starfarer.api.campaign.JumpPointAPI;
29import com.fs.starfarer.api.campaign.PersonImportance;
30import com.fs.starfarer.api.campaign.PlanetAPI;
31import com.fs.starfarer.api.campaign.RepLevel;
32import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin;
33import com.fs.starfarer.api.campaign.SectorEntityToken;
34import com.fs.starfarer.api.campaign.SubmarketPlugin;
35import com.fs.starfarer.api.campaign.ai.AbilityAIPlugin;
36import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
37import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
38import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
39import com.fs.starfarer.api.campaign.econ.ImmigrationPlugin;
40import com.fs.starfarer.api.campaign.econ.Industry;
41import com.fs.starfarer.api.campaign.econ.MarketAPI;
42import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
43import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
44import com.fs.starfarer.api.campaign.econ.MonthlyReport;
45import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
46import com.fs.starfarer.api.campaign.rules.MemoryAPI;
47import com.fs.starfarer.api.characters.AbilityPlugin;
48import com.fs.starfarer.api.characters.ImportantPeopleAPI;
49import com.fs.starfarer.api.characters.ImportantPeopleAPI.PersonDataAPI;
50import com.fs.starfarer.api.characters.PersonAPI;
51import com.fs.starfarer.api.combat.ShipAPI.HullSize;
52import com.fs.starfarer.api.fleet.FleetMemberAPI;
53import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
54import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
55import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
56import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
57import com.fs.starfarer.api.impl.campaign.ids.Commodities;
58import com.fs.starfarer.api.impl.campaign.ids.Factions;
59import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
60import com.fs.starfarer.api.impl.campaign.ids.Strings;
61import com.fs.starfarer.api.impl.campaign.ids.Tags;
62import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseManager;
63import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel;
64import com.fs.starfarer.api.impl.campaign.population.CoreImmigrationPluginImpl;
65import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeDataForSubmarket;
66import com.fs.starfarer.api.impl.campaign.shared.SharedData;
67import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript;
68import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
69import com.fs.starfarer.api.impl.campaign.tutorial.TutorialRespawnDialogPluginImpl;
70import com.fs.starfarer.api.impl.combat.BattleCreationPluginImpl;
71import com.fs.starfarer.api.plugins.AutofitPlugin;
72import com.fs.starfarer.api.plugins.impl.CoreAutofitPlugin;
73import com.fs.starfarer.api.util.Misc;
78 return "coreCampaignPluginImpl";
105 if (interactionTarget.
getMarket() !=
null) {
115 if (interactionTarget instanceof
PlanetAPI) {
128 if (ability ==
null)
return null;
129 String
id = ability.
getId();
130 if (
id ==
null)
return null;
164 PickPriority.CORE_GENERAL
171 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
174 PickPriority.CORE_GENERAL
182 if (action instanceof RepActions || action instanceof RepActionEnvelope) {
185 PickPriority.CORE_GENERAL
194 for (String tag : entity.
getTags()) {
195 memory.
set(
"$tag:" + tag,
true, 0);
201 String onOrAt =
"on";
205 memory.
set(
"$onOrAt", onOrAt, 0);
209 memory.
set(
"$systemCutOffFromHyper",
true, 0);
218 memory.
set(
"$id", entity.
getId(), 0);
264 memory.
set(
"$relativeStrength", -1, 0);
267 memory.
set(
"$relativeStrength", 1, 0);
270 memory.
set(
"$relativeStrength", 0, 0);
272 case HOLD_VS_STRONGER:
273 memory.
set(
"$weakerThanPlayerButHolding",
true, 0);
274 memory.
set(
"$relativeStrength", -1, 0);
303 memory.
set(
"$isHostile",
false, 0);
305 memory.
set(
"$isHostile",
true, 0);
311 if (market !=
null) {
316 memory.
set(
"$hasMarket",
true, 0);
320 memory.
set(
"$hasStation",
true, 0);
323 memory.
set(
"$marketSize", market.
getSize(), 0);
334 if (market !=
null) {
335 for (String tag : market.
getTags()) {
336 memory.
set(
"$tag:" + tag,
true, 0);
339 memory.
set(
"$mc:" + mc.getId(),
true, 0);
342 memory.
set(
"$ind:" + ind.getId(),
true, 0);
345 memory.
set(
"$id", market.
getId(), 0);
354 memory.
set(
"$daysExisted", daysExisted, 0);
360 boolean hasRuins =
false;
362 memory.
set(
"$hasRuins",
true, 0);
390 float smugglingTotal = 0f;
391 float tradeTotal = 0f;
397 if (submarket.getFaction().isHostileTo(market.
getFaction()) || submarket.getPlugin().isBlackMarket()) {
404 float suspicionLevel = 0f;
406 if (smugglingTotal + tradeTotal > 0) {
407 suspicionLevel = smugglingTotal / (smugglingTotal + tradeTotal);
411 float threshold = 10000f * market.
getSize();
412 suspicionLevel *= Math.min(1f, (smugglingTotal + tradeTotal) / threshold);
416 suspicionLevel += extra;
417 suspicionLevel = Math.min(1f, suspicionLevel);
419 return suspicionLevel;
423 memory.
set(
"$id", person.
getId(), 0);
425 for (String tag : person.
getTags()) {
426 memory.
set(
"$tag:" + tag,
true, 0);
431 memory.
set(
"$relValue", rel, 0);
432 memory.
set(
"$rel", rel, 0);
440 memory.
set(
"$isPerson",
true, 0);
450 memory.
set(
"$isAICore",
true, 0);
456 if (person.
getRank() !=
null) {
457 memory.
set(
"$rank", person.
getRank().toLowerCase(), 0);
460 if (person.
getPost() !=
null) {
461 memory.
set(
"$post", person.
getPost().toLowerCase(), 0);
484 memory.
set(
"$id", faction.
getId(), 0);
489 memory.
set(
"$friendlyToPlayer",
true, 0);
491 memory.
set(
"$hostileToPlayer",
true, 0);
493 memory.
set(
"$neutralToPlayer",
true, 0);
497 memory.
set(
"$isHostile",
false, 0);
499 memory.
set(
"$isHostile",
true, 0);
502 if (JSONObject.getNames(faction.
getCustom()) !=
null) {
503 for (String key : JSONObject.getNames(faction.
getCustom())) {
504 String val = faction.
getCustom().optString(key);
505 memory.
set(
"$c:" + key, val, 0);
509 memory.
set(
"$color", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
512 memory.
set(
"$baseColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
515 memory.
set(
"$brightColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
518 memory.
set(
"$darkColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
521 memory.
set(
"$gridColor", c.getRed() +
"," + c.getGreen() +
"," + c.getBlue() +
"," + c.getAlpha(), 0);
526 memory.
set(
"$relValue", rel, 0);
527 memory.
set(
"$rel", level.name(), 0);
528 memory.
set(
"$relName", level.name(), 0);
535 memory.
set(
"$isDevMode",
true, 0);
538 memory.
set(
"$isInTutorial",
true, 0);
575 memory.
set(
"$locTag:" + tag,
true, 0);
582 memory.
set(
"$fleetId", fleet.
getId(), 0);
610 Set<String> seen =
new HashSet<String>();
612 String
id = stack.getCommodityId();
613 if (
id ==
null)
continue;
614 if (seen.contains(
id))
continue;
618 String key =
"$" + id;
621 memory.
set(key, quantity, 0);
627 boolean debt = report.
getDebt() > 0;
629 memory.
set(
"$inDebt", debt, 0);
630 memory.
set(
"$inLongDebt", longDebt, 0);
634 int maxCombatSize = 0;
636 HullSize size = member.getHullSpec().getHullSize();
657 if (val > maxCombatSize && !member.isCivilian()) {
662 memory.
set(
"$maxHullSize", maxSize, 0);
663 memory.
set(
"$maxCombatHullSize", maxCombatSize, 0);
665 memory.
set(
"$fleetSizeCount", fleetSizeCount, 0);
676 memory.
set(
"$ability:" +
id,
true, 0);
696 if (member !=
null) {
static SettingsAPI getSettings()
static SectorAPI getSector()
void updateEntityFacts(SectorEntityToken entity, MemoryAPI memory)
PluginPick< AutofitPlugin > pickAutofitPlugin(FleetMemberAPI member)
void updateGlobalFacts(MemoryAPI memory)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(SectorEntityToken interactionTarget)
PluginPick< FleetStubConverterPlugin > pickStubConverter(CampaignFleetAPI fleet)
void updatePlayerFacts(MemoryAPI memory)
PluginPick< ReputationActionResponsePlugin > pickReputationActionResponsePlugin(Object action, PersonAPI person)
void updatePersonFacts(PersonAPI person, MemoryAPI memory)
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)
void updateMarketFacts(MarketAPI market, MemoryAPI memory)
PluginPick< InteractionDialogPlugin > pickInteractionDialogPlugin(Object param, SectorEntityToken interactionTarget)
PluginPick< FleetInflater > pickFleetInflater(CampaignFleetAPI fleet, Object params)
static final float computeSmugglingSuspicionLevel(MarketAPI market)
PluginPick< BattleAutoresolverPlugin > pickBattleAutoresolverPlugin(BattleAPI battle)
PluginPick< InteractionDialogPlugin > pickRespawnPlugin()
PluginPick< AbilityAIPlugin > pickAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai)
PluginPick< AICoreAdminPlugin > pickAICoreAdminPlugin(String commodityId)
static boolean canUseGates()
static String PLAYER_CAN_USE_GATES
static final String HEAVY_MACHINERY
static final String ALPHA_CORE
static final String BETA_CORE
static final String GAMMA_CORE
static final String OMEGA_CORE
static final String PLAYER
static final String MEMORY_MARKET_SMUGGLING_SUSPICION_LEVEL
static final String MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_ON
static final String MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF
static final String MARKET_EXTRA_SUSPICION
float getUnadjustedDaysSinceStart()
static PirateBaseManager getInstance()
PlayerTradeDataForSubmarket getPlayerTradeData(SubmarketAPI submarket)
float getTotalPlayerTradeValue()
MonthlyReport getPreviousReport()
PlayerActivityTracker getPlayerActivityTracker()
static SharedData getData()
static final String USE_TUTORIAL_RESPAWN
static boolean isTutorialInProgress()
static String getWithDGS(float num)
static String ucFirst(String str)
static boolean isMercenary(PersonAPI person)
static boolean hasRuins(MarketAPI market)
static boolean hasUnexploredRuins(MarketAPI market)
static boolean isPermaKnowsWhoPlayerIs(CampaignFleetAPI fleet)
static CampaignFleetAPI getStationFleet(MarketAPI market)
static float getAbyssalDepth(Vector2f loc)
static List< MarketAPI > getPlayerMarkets(boolean includeNonPlayerFaction)
static String getCommissionFactionId()
static RepLevel getLevelFor(float r)
boolean isAtWorst(RepLevel level)
boolean isAtBest(RepLevel level)
float getFloat(String key)
CampaignFleetAPI getCombinedFor(CampaignFleetAPI participantOrCombined)
boolean isPlayerInvolved()
LocationAPI getContainingLocation()
CampaignFleetAIAPI getAI()
FleetMemberAPI getFlagship()
boolean knowsWhoPlayerIs()
FleetDataAPI getFleetData()
CampaignTerrainPlugin getPlugin()
float getCommodityQuantity(String id)
MutableValue getCredits()
List< CargoStackAPI > getStacksCopy()
String getDisplayNameWithArticleOverride()
String getDisplayNameOverride()
float getRelationship(String id)
boolean isHostileTo(FactionAPI other)
boolean isNeutralFaction()
List< FleetMemberAPI > getMembersListCopy()
boolean hasTag(String tag)
Collection< String > getTags()
CampaignFleetAPI getPlayerFleet()
FactionAPI getFaction(String factionId)
PersonAPI getPlayerPerson()
MemoryAPI getMemoryWithoutUpdate()
ImportantPeopleAPI getImportantPeople()
LocationAPI getContainingLocation()
String getCustomEntityType()
Map< String, AbilityPlugin > getAbilities()
StarSystemAPI getStarSystem()
boolean hasTag(String tag)
Collection< String > getTags()
boolean isTransponderOn()
CustomEntitySpecAPI getCustomEntitySpec()
boolean isParticipatesInEconomy()
EncounterOption pickEncounterOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet)
boolean isHostileTo(CampaignFleetAPI other)
SurveyLevel getSurveyLevel()
float getStabilityValue()
boolean isPlanetConditionMarketOnly()
MemoryAPI getMemoryWithoutUpdate()
Collection< String > getTags()
List< SubmarketAPI > getSubmarketsCopy()
List< Industry > getIndustries()
float getDaysInExistence()
List< MarketConditionAPI > getConditions()
float getFloat(String key)
boolean contains(String key)
void set(String key, Object value)
boolean getBoolean(String key)
PersonLocationAPI getLocation()
PersonDataAPI getData(PersonAPI person)
RelationshipAPI getRelToPlayer()
PersonImportance getImportance()
MutableCharacterStatsAPI getStats()
PersonalityAPI getPersonalityAPI()
PersonAPI getFleetCommander()
PersonAPI getFleetCommanderForStats()
AbilityAIPlugin getNewAIPluginInstance(AbilityPlugin ability)
String getAIPluginClass()