1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
4import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CargoAPI;
9import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
10import com.fs.starfarer.api.campaign.PersonImportance;
11import com.fs.starfarer.api.campaign.TextPanelAPI;
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.CoreReputationPlugin.CustomRepImpact;
17import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
18import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
19import com.fs.starfarer.api.impl.campaign.econ.impl.BaseIndustry;
20import com.fs.starfarer.api.impl.campaign.ids.Commodities;
21import com.fs.starfarer.api.impl.campaign.ids.Factions;
22import com.fs.starfarer.api.impl.campaign.ids.Industries;
23import com.fs.starfarer.api.impl.campaign.ids.Ranks;
24import com.fs.starfarer.api.impl.campaign.ids.Tags;
25import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel;
26import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
27import com.fs.starfarer.api.util.Misc;
28import com.fs.starfarer.api.util.WeightedRandomPicker;
37 if (!super.shouldShowAtMarket(
market))
return false;
41 if (!
market.getFactionId().equals(Factions.HEGEMONY)) {
44 boolean hasMilitaryBase =
false;
45 for (Industry ind :
market.getIndustries()) {
46 if (ind.getSpec().hasTag(Industries.TAG_MILITARY) || ind.getSpec().hasTag(Industries.TAG_COMMAND)) {
47 hasMilitaryBase =
true;
51 if (!hasMilitaryBase)
return false;
61 String[] possible =
new String[] {
62 Commodities.HAND_WEAPONS,
63 Commodities.HEAVY_MACHINERY,
66 Commodities.RARE_METALS,
70 List <String> playerHas =
new ArrayList<String>();
71 List <String> playerNotHas =
new ArrayList<String>();
77 for (String c : possible) {
78 int q = (int) cargo.getQuantity(CargoItemType.RESOURCES, c);
80 int num = (int) (value / spec.getBasePrice());
88 if (playerHas.isEmpty() || playerNotHas.isEmpty())
return null;
90 WeightedRandomPicker<String> take =
new WeightedRandomPicker<String>(
random);
91 take.addAll(playerNotHas);
93 WeightedRandomPicker<String> give =
new WeightedRandomPicker<String>(
random);
94 give.addAll(playerHas);
96 String pick = take.pick();
100 int num = (int) (value / spec.getBasePrice());
111 if (Ranks.POST_SUPPLY_OFFICER.equals(
person.getPostId())) {
126 super.adjustPerson(
person);
127 person.setImportanceAndVoice(PersonImportance.MEDIUM,
random);
128 person.addTag(Tags.CONTACT_MILITARY);
133 return Factions.HEGEMONY;
138 return Ranks.SPACE_COMMANDER;
143 return Ranks.POST_SUPPLY_OFFICER;
147 float value = (1000 + 100 *
random.nextInt(6)) * BaseIndustry.getSizeMult(
market.getSize());
155 int num = (int) (
getValue() / spec.getBasePrice());
166 return "None other than the station's quartermaster, who looks rather sullen, is sitting at the bar.";
171 return "Approach the quartermaster and offer to buy " +
getHimOrHer() +
" a drink";
180 int qty = (int) cargo.getQuantity(CargoItemType.RESOURCES, give.getId());
181 String units =
"units";
182 if (qty == 1) units =
"unit";
184 return "In venerated tradition going back thousands of cycles, the quartermaster " +
185 "vents to you about how " +
getHisOrHer() +
" provision request got mixed up and " +
186 getHeOrShe() +
" was shipped %s units of " + take.getLowerCaseName() +
" instead of %s units of " +
187 give.getLowerCaseName() +
". \"A mining drone with half its Ludd-damned " +
188 "computer fried on rads would do a better job than the idiots in Fleet Supply\" " +
190 "slamming the glass down.\n\n" +
191 "You have %s " + units +
" of " + give.getLowerCaseName() +
" on board.";
198 int qty = (int) cargo.getQuantity(CargoItemType.RESOURCES, give.getId());
200 Misc.getWithDGS(qty)};
204 return new Color [] { Misc.getHighlightColor(), Misc.getHighlightColor(), Misc.getHighlightColor()};
212 "for " +
quantity +
" " + take.getLowerCaseName() +
", as a favor from you to " +
getHimOrHer();
217 return "Do nothing but commiserate with the quartermaster as you finish your drink.";
224 return "You exchange comms with the quartermaster and the very next day " +
getHeOrShe() +
225 " smoothes things along with the port authorities and arranges for the quickest cargo " +
226 "transfer you've ever seen, trading your %s " + give.getLowerCaseName() +
" for " +
227 "%s " + take.getLowerCaseName() +
". Afterward, the quartermaster " +
228 "sends you a personal thank-you note.";
237 return new Color [] { Misc.getHighlightColor(), Misc.getHighlightColor() };
248 CustomRepImpact impact =
new CustomRepImpact();
252 new RepActionEnvelope(RepActions.CUSTOM,
253 impact,
null,
text,
true,
true),
256 impact =
new CustomRepImpact();
257 impact.delta = 0.03f;
259 new RepActionEnvelope(RepActions.CUSTOM,
260 impact,
null,
text,
true,
true),
261 person.getFaction().getId());
269 return "You drink to the bureaucrats in Fleet Supply \"mistaking the airlock for " +
270 "the head-hatch\", empty your glass, and make your exit.";
static SettingsAPI getSettings()
static SectorAPI getSector()
transient TextPanelAPI text
transient InteractionDialogAPI dialog
void regen(MarketAPI market)
String[] getMainTextTokens()
boolean shouldShowAtMarket(MarketAPI market)
String getPersonFaction()
String playerGiveCommodity
Color[] getMainTextColors()
String[] getAcceptTextTokens()
void doExtraConfirmActions()
void adjustPerson(PersonAPI person)
Color[] getAcceptTextColors()
QuartermasterCargoSwapBarEvent()
CommoditySpecAPI getCommoditySpec(String commodityId)