1package com.fs.starfarer.api.impl.campaign.intel;
8import org.apache.log4j.Logger;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.CargoAPI;
13import com.fs.starfarer.api.campaign.CargoStackAPI;
14import com.fs.starfarer.api.campaign.FactionAPI;
15import com.fs.starfarer.api.campaign.InteractionDialogAPI;
16import com.fs.starfarer.api.campaign.RepLevel;
17import com.fs.starfarer.api.campaign.SectorEntityToken;
18import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
19import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
20import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
21import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
22import com.fs.starfarer.api.campaign.econ.EconomyAPI;
23import com.fs.starfarer.api.campaign.econ.MarketAPI;
24import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
25import com.fs.starfarer.api.campaign.rules.MemoryAPI;
26import com.fs.starfarer.api.characters.ImportantPeopleAPI;
27import com.fs.starfarer.api.characters.PersonAPI;
28import com.fs.starfarer.api.characters.ImportantPeopleAPI.PersonDataAPI;
29import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
30import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.MissionCompletionRep;
31import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
32import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
33import com.fs.starfarer.api.impl.campaign.econ.impl.BaseIndustry;
34import com.fs.starfarer.api.impl.campaign.ids.Commodities;
35import com.fs.starfarer.api.impl.campaign.ids.Factions;
36import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
37import com.fs.starfarer.api.impl.campaign.ids.Ranks;
38import com.fs.starfarer.api.impl.campaign.ids.Tags;
39import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
40import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeDataForSubmarket;
41import com.fs.starfarer.api.impl.campaign.shared.SharedData;
42import com.fs.starfarer.api.ui.ButtonAPI;
43import com.fs.starfarer.api.ui.IntelUIAPI;
44import com.fs.starfarer.api.ui.LabelAPI;
45import com.fs.starfarer.api.ui.SectorMapAPI;
46import com.fs.starfarer.api.ui.TooltipMakerAPI;
47import com.fs.starfarer.api.util.Misc;
48import com.fs.starfarer.api.util.WeightedRandomPicker;
49import com.fs.starfarer.api.util.Misc.Token;
72 if (commodityId ==
null) {
79 float illegalMult = 0.2f;
101 durationPicker.
add(20f);
102 durationPicker.
add(30f);
103 durationPicker.
add(40f);
104 durationPicker.
add(60f);
110 float minReward = 7500 + (float) Math.random() * 5000f;
126 float maxQuantity = 10000f;
127 float maxDuration = 60f;
131 if (durationBonus < 10) durationBonus = 10;
132 if (quantityBonus < 10) quantityBonus = 10;
157 log.info(
"Created ProcurementMissionIntel: " + commodityId +
" to " +
market.
getName());
199 String comId = com.
getId();
206 if ((
float) Math.random() > 0.1f) {
219 if ((
float) Math.random() > 0.25f) {
290 if (spec.
isMeta())
continue;
299 picker.
add(curr, weight);
302 return picker.
pick();
307 float cargoCapacity = 30;
309 if (player !=
null) {
311 cargoCapacity = Math.max(cargoCapacity, cargoCapacity = player.
getCargo().
getMaxFuel());
319 float targetValue = cargoCapacity * Math.max(5f, fuel.
getBasePrice());
321 float units = targetValue / Math.max(5f, spec.
getBasePrice());
323 units *= 0.5f + (float) Math.random();
326 return (
int) units / 10 * 10;
372 if (test < min) test = min;
389 return picker.
pick();
401 if (dist > 10000)
continue;
408 if (a <= 0)
continue;
413 if (limit * 0.5f >= minQty)
return true;
421 for (
SubmarketAPI submarket : curr.getSubmarketsCopy()) {
422 if (!submarket.getPlugin().isParticipatesInEconomy())
continue;
423 CargoAPI cargo = submarket.getCargoNullOk();
424 if (cargo ==
null)
continue;
425 if (cargo.
getQuantity(CargoItemType.RESOURCES, commodityId) >= minQty * 0.5f)
return true;
448 String action = params.get(0).getString(memoryMap);
454 if (action.equals(
"performDelivery")) {
464 float repAmount = 0.01f *
baseReward / 100000f;
465 if (repAmount < 0.01f) repAmount = 0.01f;
466 if (repAmount > 0.05f) repAmount = 0.05f;
471 new RepActionEnvelope(RepActions.MISSION_SUCCESS, completionRep,
475 new RepActionEnvelope(RepActions.MISSION_SUCCESS, completionRep,
482 }
else if (action.equals(
"hasEnough")) {
484 }
else if (action.equals(
"endEvent")) {
497 }
else if (action.equals(
"hasBonus")) {
514 if (!curr.getPlugin().isParticipatesInEconomy())
continue;
521 if (submarket ==
null) {
523 if (!curr.getPlugin().isParticipatesInEconomy())
continue;
525 if (illegal && curr.getPlugin().isBlackMarket()) {
529 if (!illegal && curr.getPlugin().isOpenMarket()) {
536 if (submarket ==
null)
return;
586 if (mode == ListInfoMode.IN_DESC) initPad = opad;
602 null,
null, info, tc, isUpdate, 0f);
604 null,
null, info, tc, isUpdate, 0f);
616 null,
null, info, tc, isUpdate, initPad);
621 null,
null, info, tc, isUpdate, initPad);
625 if (mode != ListInfoMode.IN_DESC) {
634 initPad, tc, h,
"" + (
int)
quantity);
659 return "Procurement";
693 info.
addImages(width, 80, opad, opad * 2f,
700 prefix +=
"-affiliated";
705 if (desc ==
null) desc =
"supplier";
706 desc = desc.toLowerCase();
711 "has posted a procurement contract for a quantity of " +
722 " at " +
market.
getName() +
" to complete the delivery.", opad);
726 " is affiliated with the local underworld and will require clandestine delivery, " +
727 "which may attract the interest of local authorities.", opad);
731 "operating with the knowledge of the local authorities. " +
733 "to sneak into port without attracting notice in order to complete the delivery.", opad);
736 "operating with the knowledge of the local authorities and the delivery may be made openly.", opad);
746 (
int)(width), 20f, opad * 3f);
749 info.
addPara(
"Seeing remote price data requires being within range of a functional comm relay.", g, opad);
756 " no longer exists as a functional polity.", opad);
771 Set<String> tags = super.getIntelTags(map);
794 float repAmount = 0.01f *
baseReward / 100000f;
795 if (repAmount < 0.01f) repAmount = 0.01f;
796 if (repAmount > 0.05f) repAmount = 0.05f;
801 new RepActionEnvelope(RepActions.MISSION_FAILURE, completionRep,
802 null,
null,
true,
false),
805 new RepActionEnvelope(RepActions.MISSION_FAILURE, completionRep,
806 null,
null,
true,
false),
809 return new MissionResult(0, repF, repC);
812 return new MissionResult();
826 super.buttonPressConfirmed(buttonId, ui);
833 super.createConfirmationPrompt(buttonId, prompt);
850 return super.doesButtonHaveConfirmDialog(buttonId);
855 return 664f + 43f + 10f;
857 return super.getConfirmationPromptWidth(buttonId);
864 return super.getConfirmText(buttonId);
871 return super.getCancelText(buttonId);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static Logger getLogger(Class c)
static SectorAPI getSector()
static void addAdjustmentMessage(float delta, FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, boolean withCurrent, float pad)
static final String TAG_MARINES
static final String TAG_CREW
static final String TAG_MEDICAL
static final String TAG_NON_ECONOMIC
static final String TAG_LUXURY
static final String TAG_MILITARY
static final String PIRATES
static final String PLAYER
static final String INDEPENDENT
static final String MEMORY_KEY_REQUIRES_DISCRETION
static final String MEMORY_KEY_MISSION_IMPORTANT
static String POST_CITIZEN
static String POST_GANGSTER
static String POST_SUPPLY_OFFICER
static String POST_PORTMASTER
static String POST_TRADER
static String POST_INVESTOR
static String POST_MEDICAL_SUPPLIER
static String POST_COMMODITIES_AGENT
static String GROUND_LIEUTENANT
static String POST_BASE_COMMANDER
static String POST_OUTPOST_COMMANDER
static String POST_SMUGGLER
static String POST_MERCHANT
void setPostingLocation(SectorEntityToken postingLocation)
void unindent(TooltipMakerAPI info)
void addDays(TooltipMakerAPI info, String after, float days)
Object getListInfoParam()
Color getBulletColorForMode(ListInfoMode mode)
void bullet(TooltipMakerAPI info)
Color getTitleColor(ListInfoMode mode)
void addAcceptOrAbandonButton(TooltipMakerAPI info, float width)
String getPostfixForState()
void setMissionState(MissionState missionState)
MissionResult missionResult
void setDuration(Float duration)
void addGenericMissionState(TooltipMakerAPI info)
void setMissionResult(MissionResult missionResult)
CommodityOnMarketAPI commodity
boolean doNearbyMarketsHave(MarketAPI from, String commodityId, float minQty)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
boolean contactWillInitiateComms
SectorEntityToken getMapLocation(SectorMapAPI map)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
void advanceMission(float amount)
String getMissionTypeNoun()
void createSmallDescription(TooltipMakerAPI info, float width, float height)
void applyTradeValueImpact(float totalReward)
String getConfirmText(Object buttonId)
void buttonPressConfirmed(Object buttonId, IntelUIAPI ui)
static String BUTTON_COMMODITY_INFO
float getQuantityAdjustedForMarket(String commodityId, float quantity, float illegalMult, float min, MarketAPI market)
void createConfirmationPrompt(Object buttonId, TooltipMakerAPI prompt)
static PersonDataAPI getLegitTrader(MarketAPI market, String checkoutReason, String factionId)
FactionAPI getFactionForUIColors()
ProcurementMissionIntel()
static final String PERSON_CHECKOUT_REASON
boolean callEvent(String ruleId, final InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
MarketAPI pickMarket(String commodityId, float quantity, float illegalMult, float min)
boolean doesButtonHaveConfirmDialog(Object buttonId)
float getConfirmationPromptWidth(Object buttonId)
PersonAPI pickContact(MarketAPI market, CommodityOnMarketAPI com)
static PersonDataAPI getCriminal(MarketAPI market, String checkoutReason, String factionId)
String getSmallDescriptionTitle()
int getQuantity(String commodityId)
Set< String > getIntelTags(SectorMapAPI map)
MissionResult createAbandonedResult(boolean withPenalty)
MissionResult createTimeRanOutFailedResult()
String getCancelText(Object buttonId)
static void addCommodityLossText(String commodityId, int quantity, TextPanelAPI text)
static void addCreditsGainText(int credits, TextPanelAPI text)
PlayerTradeDataForSubmarket getPlayerTradeData(SubmarketAPI submarket)
void addToTrackedPlayerSold(ShipSaleInfo info)
PlayerActivityTracker getPlayerActivityTracker()
static SharedData getData()
static Color getTextColor()
static String getDGSCredits(float num)
static String getWithDGS(float num)
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
static String ucFirst(String str)
static Color getGrayColor()
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static void affectAvailabilityWithinReason(CommodityOnMarketAPI com, int quantity)
static Color getHighlightColor()
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
CargoStackAPI createCargoStack(CargoItemType type, Object data, CargoAPI cargo)
void addCommodityInfoToTooltip(TooltipMakerAPI tooltip, float initPad, CommoditySpecAPI spec, int max, boolean withText, boolean withSell, boolean withBuy)
CommoditySpecAPI getCommoditySpec(String commodityId)
void profilerBegin(String id)
float getQuantity(CargoAPI.CargoItemType type, Object data)
boolean removeItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
float getCommodityQuantity(String id)
MutableValue getCredits()
void removePerson(PersonAPI person)
String addPerson(PersonAPI person)
String getPersonNamePrefixAOrAn()
String getDisplayNameWithArticle()
String getPersonNamePrefix()
PersonAPI createRandomPerson()
boolean isHostileTo(FactionAPI other)
boolean isPlayerFaction()
TextPanelAPI getTextPanel()
CampaignFleetAPI getPlayerFleet()
ReputationAdjustmentResult adjustPlayerReputation(Object action, String factionId)
IntelManagerAPI getIntelManager()
ImportantPeopleAPI getImportantPeople()
boolean isPlayerInRangeOfCommRelay()
void queueIntel(IntelInfoPlugin plugin, float maxCommQueueDays)
float getUtilityOnMarket()
CommoditySpecAPI getCommodity()
boolean hasTag(String tag)
String getLowerCaseName()
CommoditySpecAPI getCommoditySpec(String commodityId)
List< MarketAPI > getMarketsCopy()
List< String > getAllCommodityIds()
LocationAPI getContainingLocation()
CommodityOnMarketAPI getCommodityData(String commodityId)
boolean isIllegal(String commodityId)
void addPerson(PersonAPI person)
CommDirectoryAPI getCommDirectory()
float getDemandPrice(String commodityId, double quantity, boolean isPlayerPrice)
List< SubmarketAPI > getSubmarketsCopy()
SectorEntityToken getPrimaryEntity()
void set(String key, Object value)
PersonLocationAPI getLocation()
void setMarket(MarketAPI market)
boolean isCheckedOutForAnything(PersonAPI person)
PersonDataAPI getData(PersonAPI person)
void checkOutPerson(PersonAPI person, String reasonId)
void returnPerson(PersonAPI person, String reasonId)
PersonAPI getPerson(String id)
void addPerson(PersonAPI person)
String getPortraitSprite()
void decrWantsToContactReasons()
void incrWantsToContactReasons()
void setRankId(String rank)
MemoryAPI getMemoryWithoutUpdate()
void setPostId(String postId)
void setHighlight(int start, int end)
void setHighlightColors(Color ... colors)