Starsector API
Loading...
Searching...
No Matches
SecurityCodes.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Map;
6
7import org.lwjgl.util.vector.Vector2f;
8
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;
31
34
35 public static enum Stage {
36 ACTIVE,
37 COMPLETED,
38 }
39
40 public static float MARINE_LOSSES_MULT = 0.05f;
41
42 public static float PROB_COMPLICATIONS = 0.5f;
43 public static float PROB_PATROL_ENCOUNTER_AFTER = 0.5f;
44
45 public static float MIN_DAYS = 30f;
46 public static float MAX_DAYS = 90f;
47
48 public static float BASE_PRICE = 30000;
49
50 protected int price;
52 protected int days;
53
54
55 @Override
56 protected boolean create(MarketAPI createdAt, boolean barEvent) {
57 if (barEvent) {
64 findOrCreateGiver(createdAt, false, false);
65 }
66
67 PersonAPI person = getPerson();
68 if (person == null) return false;
69
70 if (!setPersonMissionRef(person, "$seco_ref")) {
71 return false;
72 }
73
78
79 MarketAPI market = pickMarket();
80 if (market == null) return false;
81
82 faction = market.getFaction();
83 if (faction == null) return false;
84 if (!setFactionMissionRef(faction, "$seco_ref")) {
85 return false;
86 }
87
88 price = getRoundNumber((BASE_PRICE * (getQuality() + 0.9f + 0.2f * genRandom.nextFloat())) / getRewardMult());
89
90 setStartingStage(Stage.ACTIVE);
91 setSuccessStage(Stage.COMPLETED);
92
96
97 days = (int)Math.round(MIN_DAYS + (MAX_DAYS - MIN_DAYS) * getQuality());
98 setStageOnMemoryFlag(Stage.COMPLETED, faction, "$seco_completed");
99 setTimeLimit(Stage.COMPLETED, days, null);
100
102 triggerComplicationBegin(Stage.ACTIVE, ComplicationSpawn.EXITING_SYSTEM,
103 createdAt.getStarSystem(), Factions.PIRATES,
104 "the security codes", "they", "the " + faction.getPersonNamePrefix() + " security codes",
105 0,
106 true, ComplicationRepImpact.NONE, null);
108 }
109
110 //addTempIntel();
111 return true;
112 }
113
114 protected void updateInteractionDataImpl() {
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());
123 }
124
125 @Override
126 public void addDescriptionForCurrentStage(TooltipMakerAPI info, float width, float height) {
127 float opad = 10f;
128 Color h = Misc.getHighlightColor();
129 if (currentStage == Stage.ACTIVE) {
131 String percent = "" + (int) Math.round((1f - MARINE_LOSSES_MULT) * 100f) + "%";
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);
139
140 info.addPara("The codes are only good for one operation, and, if not used, " +
141 "will also expire after a time.", opad);
142 }
143 }
144
145 @Override
146 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
147 Color h = Misc.getHighlightColor();
148 if (currentStage == Stage.ACTIVE) {
149// info.addPara("Have security codes for " + faction.getDisplayName(), tc, pad);
150// return true;
151 }
152 return false;
153 }
154
155 @Override
156 public void acceptImpl(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
157 super.acceptImpl(dialog, memoryMap);
159 }
160
161 @Override
162 protected void notifyEnding() {
163 super.notifyEnding();
165 }
166
167 @Override
168 public String getBaseName() {
169 return "Security Codes - " + faction.getDisplayName();
170 }
171
172 public String getPostfixForState() {
173 if (isEnding()) {
174 return " (Expired)";
175 }
176 return "";
177 }
178
179 @Override
180 protected String getMissionTypeNoun() {
181 return "Information";
182 }
183
184 @Override
185 protected String getToCompleteText() {
186 return "remaining";
187 }
188
189
190 protected void checkCodesUsed(MarketAPI market) {
191 if (market.getFaction() == faction) {
192 if (!isEnded() || isEnding()) {
195 e.setDelayShort();
197 e.beginCreate();
198 e.triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, faction.getId(), FleetTypes.PATROL_LARGE, new Vector2f());
202 e.triggerSetFleetMemoryValue("$seco_marketName", market.getName());
203 e.triggerSetFleetGenericHailPermanent("SECOPatrolHail");
204 e.endCreate();
205 }
206 }
209 }
210 }
212 MarketAPI market, TempData actionData, Industry industry) {
213 checkCodesUsed(market);
214 }
215
217 MarketAPI market, TempData actionData,
218 CargoAPI cargo) {
219 checkCodesUsed(market);
220 }
221
223 InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
224 }
225
227 MarketAPI market, TempData actionData) {
228 }
229
230 public void modifyMarineLossesStatPreRaid(MarketAPI market, List<GroundRaidObjectivePlugin> objectives, MutableStat stat) {
231 if (market.getFaction() == faction) {
232 stat.modifyMult("seco_mult", MARINE_LOSSES_MULT, "Security codes");
233 }
234 }
235}
236
237
238
239
240
static SectorAPI getSector()
Definition Global.java:65
void modifyMult(String source, float value)
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, SectorEntityToken roughlyWhere)
void setLocationCoreOnly(boolean allowInsidePopulatedSystems, String requireLargestMarketNotHostileToFaction)
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)
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
void setStageOnMemoryFlag(Object to, HasMemory withMemory, String flag)
void findOrCreateGiver(MarketAPI market, boolean addToCommDirectory, boolean cleanUpOnMissionOverIfWasNewPerson)
void triggerComplicationBegin(Object stage, ComplicationSpawn spawnType, StarSystemAPI system, String factionId, String thing, String thingItOrThey, String thingDesc, int paymentOffered, boolean aggressiveIfDeclined, ComplicationRepImpact repImpact, String failTrigger)
static String getWithDGS(float num)
Definition Misc.java:1381
static Color getHighlightColor()
Definition Misc.java:792
ListenerManagerAPI getListenerManager()
void setHighlight(int start, int end)
void setHighlightColors(Color ... colors)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)