1package com.fs.starfarer.api.impl.campaign.missions;
7import org.lwjgl.util.vector.Vector2f;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.FactionAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.econ.Industry;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
16import com.fs.starfarer.api.campaign.listeners.MarineLossesStatModifier;
17import com.fs.starfarer.api.campaign.rules.MemoryAPI;
18import com.fs.starfarer.api.characters.PersonAPI;
19import com.fs.starfarer.api.combat.MutableStat;
20import com.fs.starfarer.api.impl.campaign.graid.GroundRaidObjectivePlugin;
21import com.fs.starfarer.api.impl.campaign.ids.Factions;
22import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
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.missions.hub.HubMissionWithBarEvent;
26import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
27import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
28import com.fs.starfarer.api.ui.LabelAPI;
29import com.fs.starfarer.api.ui.TooltipMakerAPI;
30import com.fs.starfarer.api.util.Misc;
32public class SecurityCodes extends HubMissionWithBarEvent implements ColonyPlayerHostileActListener,
33 MarineLossesStatModifier {
35 public static enum Stage {
56 protected boolean create(MarketAPI createdAt,
boolean barEvent) {
58 setGiverRank(Ranks.CITIZEN);
59 setGiverPost(pickOne(Ranks.POST_AGENT, Ranks.POST_SMUGGLER, Ranks.POST_GANGSTER,
60 Ranks.POST_FENCE, Ranks.POST_CRIMINAL));
61 setGiverImportance(pickImportance());
62 setGiverFaction(Factions.PIRATES);
63 setGiverTags(Tags.CONTACT_UNDERWORLD);
64 findOrCreateGiver(createdAt,
false,
false);
67 PersonAPI person = getPerson();
68 if (person ==
null)
return false;
70 if (!setPersonMissionRef(person,
"$seco_ref")) {
74 requireMarketFactionNotPlayer();
75 requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_DECENTRALIZED);
76 requireMarketNotHidden();
77 requireMarketNotInHyperspace();
79 MarketAPI market = pickMarket();
80 if (market ==
null)
return false;
83 if (
faction ==
null)
return false;
84 if (!setFactionMissionRef(
faction,
"$seco_ref")) {
88 price = getRoundNumber((
BASE_PRICE * (getQuality() + 0.9f + 0.2f * genRandom.nextFloat())) / getRewardMult());
90 setStartingStage(Stage.ACTIVE);
91 setSuccessStage(Stage.COMPLETED);
94 setRepPersonChangesVeryLow();
95 setRepFactionChangesTiny();
98 setStageOnMemoryFlag(Stage.COMPLETED,
faction,
"$seco_completed");
99 setTimeLimit(Stage.COMPLETED,
days,
null);
102 triggerComplicationBegin(Stage.ACTIVE, ComplicationSpawn.EXITING_SYSTEM,
103 createdAt.getStarSystem(), Factions.PIRATES,
104 "the security codes",
"they",
"the " +
faction.getPersonNamePrefix() +
" security codes",
106 true, ComplicationRepImpact.NONE,
null);
107 triggerComplicationEnd(
true);
115 set(
"$seco_barEvent", isBarEvent());
116 set(
"$seco_price", Misc.getWithDGS(
price));
117 set(
"$seco_manOrWoman", getPerson().getManOrWoman());
118 set(
"$seco_hisOrHer", getPerson().getHisOrHer());
119 set(
"$seco_heOrShe", getPerson().getHeOrShe());
120 set(
"$seco_days",
days);
121 set(
"$seco_faction",
faction.getPersonNamePrefix());
122 set(
"$seco_factionColor",
faction.getBaseUIColor());
128 Color h = Misc.getHighlightColor();
129 if (currentStage == Stage.ACTIVE) {
132 LabelAPI label = info.addPara(
"You've acquired ground-forces security codes for %s." +
133 " Having these allows for much better raid planning " +
134 "and will reduce marine casualties by %s.",
135 opad, f.getBaseUIColor(),
136 f.getDisplayNameWithArticle(), percent);
137 label.setHighlight(f.getDisplayNameWithArticleWithoutArticle(), percent);
138 label.setHighlightColors(f.getBaseUIColor(), h);
140 info.addPara(
"The codes are only good for one operation, and, if not used, " +
141 "will also expire after a time.", opad);
147 Color h = Misc.getHighlightColor();
148 if (currentStage == Stage.ACTIVE) {
156 public void acceptImpl(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
157 super.acceptImpl(dialog, memoryMap);
163 super.notifyEnding();
169 return "Security Codes - " +
faction.getDisplayName();
181 return "Information";
191 if (market.getFaction() ==
faction) {
192 if (!isEnded() || isEnding()) {
200 e.triggerSetPatrol();
202 e.triggerSetFleetMemoryValue(
"$seco_marketName", market.getName());
203 e.triggerSetFleetGenericHailPermanent(
"SECOPatrolHail");
212 MarketAPI market, TempData actionData, Industry industry) {
217 MarketAPI market, TempData actionData,
223 InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
227 MarketAPI market, TempData actionData) {
231 if (market.getFaction() ==
faction) {
static SectorAPI getSector()
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, SectorEntityToken roughlyWhere)
void triggerSetStandardAggroInterceptFlags()
void setLocationCoreOnly(boolean allowInsidePopulatedSystems, String requireLargestMarketNotHostileToFaction)
void triggerSetAdjustStrengthBasedOnQuality(boolean randomize, float quality)
void checkCodesUsed(MarketAPI market)
void acceptImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
void modifyMarineLossesStatPreRaid(MarketAPI market, List< GroundRaidObjectivePlugin > objectives, MutableStat stat)
boolean create(MarketAPI createdAt, boolean barEvent)
void addDescriptionForCurrentStage(TooltipMakerAPI info, float width, float height)
String getToCompleteText()
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
static float PROB_COMPLICATIONS
String getPostfixForState()
static float PROB_PATROL_ENCOUNTER_AFTER
void updateInteractionDataImpl()
static float MARINE_LOSSES_MULT
String getMissionTypeNoun()
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)