1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.CargoAPI;
9import com.fs.starfarer.api.campaign.FactionAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.OptionPanelAPI;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
15import com.fs.starfarer.api.characters.FullName.Gender;
16import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
17import com.fs.starfarer.api.characters.PersonAPI;
18import com.fs.starfarer.api.characters.SkillSpecAPI;
19import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent;
20import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.SkillPickPreference;
21import com.fs.starfarer.api.impl.campaign.ids.Factions;
22import com.fs.starfarer.api.impl.campaign.ids.Ranks;
23import com.fs.starfarer.api.impl.campaign.ids.Sounds;
24import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarData;
25import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
26import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathCellsIntel;
27import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
28import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
29import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption;
30import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.BaseOptionStoryPointActionDelegate;
31import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.StoryOptionParams;
32import com.fs.starfarer.api.ui.LabelAPI;
33import com.fs.starfarer.api.ui.TooltipMakerAPI;
34import com.fs.starfarer.api.util.Misc;
38 public static enum OptionId {
48 public static int COST = 10000;
50 protected LuddicPathBaseIntel
intel;
61 for (LuddicPathCellsIntel cell : LuddicPathCellsIntel.getCellsForBase(
intel,
true)) {
62 if (cell.isSleeper())
continue;
63 if (cell.getSleeperTimeout() > 0)
continue;
64 if (cell.getMarket() ==
market)
return true;
76 if (this.market ==
market)
return;
84 FactionAPI faction =
Global.
getSector().getFaction(Factions.LUDDIC_PATH);
86 PersonAPI
person = OfficerManagerEvent.createOfficer(faction, level, SkillPickPreference.NO_ENERGY_YES_BALLISTIC_YES_MISSILE_YES_DEFENSE,
87 true,
null,
true,
false, 0,
random);
98 text.addPara(
"A " +
getManOrWoman() +
" with Pather tattoos is staring at you from across the bar " +
99 "with a desperate gleam in " +
getHisOrHer() +
" eyes.");
101 dialog.getOptionPanel().addOption(
"Make eye contact with the Pather and walk out into the back alley",
this,
null);
116 if (!(optionData instanceof OptionId)) {
119 OptionId option = (OptionId) optionData;
126 int credits = (int) cargo.getCredits().get();
128 Color h = Misc.getHighlightColor();
129 Color n = Misc.getNegativeHighlightColor();
134 text.addPara(
"After a minute or two of waiting in the alley, the door opens and the Pather " +
136 text.addPara(
"\"I know who you are\", " +
getHeOrShe() +
" says. \"I need your help. If they find " +
137 "out what I've done... well, let's just say my future with the Path is likely to be a short one. " +
138 "So, how about this: you arrange a new identity for me, and I tell you where " +
139 "the base supplying the Pather cells at this colony is located.\"");
141 boolean canAccept =
COST <= credits;
142 LabelAPI label =
text.addPara(
"You estimate that doing as " +
getHeOrShe() +
143 " asks will run you about %s. You have %s available.",
145 Misc.getDGSCredits(
COST),
146 Misc.getDGSCredits(credits));
147 label.setHighlightColors(canAccept ? h : n, h);
148 label.setHighlight(Misc.getDGSCredits(
COST), Misc.getDGSCredits(credits));
152 options.setEnabled(OptionId.AGREE,
false);
153 options.setTooltip(OptionId.AGREE,
"Not enough credits.");
159 text.addPara(
"You agree to the " +
getManOrWoman() +
"'s terms and make the necessary arrangements.");
161 cargo.getCredits().subtract(
COST);
162 AddRemoveCommodity.addCreditsLossText(
COST,
dialog.getTextPanel());
166 intel.sendUpdate(PirateBaseIntel.DISCOVERED_PARAM,
text);
169 options.addOption(
"Continue", OptionId.LEAVE);
172 text.addPara(
"You leave the back alley and return to the bar.");
174 options.addOption(
"Continue", OptionId.LEAVE);
184 String
id =
"join_id";
187 final CampaignFleetAPI playerFleet =
Global.
getSector().getPlayerFleet();
189 int num = Misc.getNumNonMercOfficers(playerFleet);
190 int max = Misc.getMaxOfficers(playerFleet);
194 options.setTooltip(
id,
"Maximum number of officers reached.");
197 StoryOptionParams params =
new StoryOptionParams(
id, 1,
"patherJoinFleet", Sounds.STORY_POINT_SPEND_LEADERSHIP,
198 "Allowed " +
person.getNameString() +
", a Luddic Path defector, to join your fleet");
200 SetStoryOption.set(
dialog, params,
201 new BaseOptionStoryPointActionDelegate(
dialog, params) {
204 public void confirm() {
207 text.addPara(Misc.ucFirst(
getHeOrShe()) +
" is mistrustful at first, but that turns to surprise and " +
208 "gratitude when " +
getHeOrShe() +
" realizes you're serious.");
211 playerFleet.getFleetData().addOfficer(
getPerson());
212 getPerson().setPostId(Ranks.POST_OFFICER);
213 AddRemoveCommodity.addOfficerGainText(
getPerson(),
dialog.getTextPanel());
217 intel.sendUpdate(PirateBaseIntel.DISCOVERED_PARAM,
text);
220 options.addOption(
"Continue", OptionId.LEAVE);
224 options.addOption(
"Continue", OptionId.LEAVE);
228 public String getTitle() {
230 return "Taking in Luddic Path defector";
235 public void createDescription(TooltipMakerAPI info) {
238 info.addSpacer(-opad);
240 MutableCharacterStatsAPI stats =
person.getStats();
242 TooltipMakerAPI
text = info;
246 Color hl = Misc.getHighlightColor();
247 Color red = Misc.getNegativeHighlightColor();
253 text.addPara(
"You consider letting the Luddic Path defector, " +
person.getNameString() +
", join your fleet.", opad);
257 text.addPara(
"Level: %s", opad, hl,
"" + (
int) stats.getLevel());
261 int level = (int) stats.getSkillLevel(skillId);
264 String skillName = spec.getName();
265 if (spec.isAptitudeEffect()) {
266 skillName +=
" Aptitude";
270 text.addPara(skillName, opad);
272 text.addPara(skillName +
" (Elite)", opad);
278 String personality = Misc.lcFirst(
person.getPersonalityAPI().getDisplayName());
279 text.addPara(
"Personality: %s", opad, Misc.getHighlightColor(), personality);
280 text.addPara(
person.getPersonalityAPI().getDescription(), opad);
284 info.addSpacer(opad * 2f);
285 addActionCostSection(info);
293 return Factions.LUDDIC_PATH;
298 return Ranks.CITIZEN;
303 return Ranks.CITIZEN;
static SettingsAPI getSettings()
static SectorAPI getSector()
transient boolean noContinue
transient TextPanelAPI text
transient OptionPanelAPI options
transient Map< String, MemoryAPI > memoryMap
transient InteractionDialogAPI dialog
boolean shouldRemoveEvent()
void regen(MarketAPI market)
String getPersonFaction()
void addPromptAndOption(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
String getPersonPortrait()
LuddicPathBaseIntel intel
void init(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
LuddicPathBaseBarEvent(LuddicPathBaseIntel intel)
boolean shouldShowAtMarket(MarketAPI market)
void optionSelected(String optionText, Object optionData)
SkillSpecAPI getSkillSpec(String skillId)
List< String > getSortedSkillIds()