Starsector API
Loading...
Searching...
No Matches
GABuyArtifact.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.academy;
2
3import java.awt.Color;
4import java.util.List;
5import java.util.Map;
6
7import com.fs.starfarer.api.campaign.InteractionDialogAPI;
8import com.fs.starfarer.api.campaign.econ.MarketAPI;
9import com.fs.starfarer.api.campaign.rules.MemoryAPI;
10import com.fs.starfarer.api.characters.PersonAPI;
11import com.fs.starfarer.api.impl.campaign.ids.Factions;
12import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
13import com.fs.starfarer.api.ui.TooltipMakerAPI;
14import com.fs.starfarer.api.util.Misc;
15import com.fs.starfarer.api.util.Misc.Token;
16
17public class GABuyArtifact extends GABaseMission {
18
19 public static float RAID_DIFFICULTY = 100f;
20
21 public static float MISSION_DAYS = 120f;
22
23 public static float PROB_PIRATE_FLEET = 1f/4f;
24 public static float PROB_PATHER_FLEET = 1f/3f;
25 public static float PROB_TRITACH_FLEET = 1f/2f;
26
27 public static float PROB_PIRATE_VARIATION = 0.5f;
28
29
30 public static enum Stage {
31 GO_TO_MARKET,
32 RETURN_TO_ACADEMY,
33 COMPLETED,
34 FAILED,
35 FAILED_DECIV,
36 }
37
38 public static enum Variation {
39 PIRATE,
40 PATHER,
41 }
42
43 protected MarketAPI market;
44 protected Variation variation;
45 protected PersonAPI contact;
46 protected String item;
47
48 protected int costNormal;
49 protected int costHigh;
50 protected int costVeryLow;
51
52 @Override
53 protected boolean create(MarketAPI createdAt, boolean barEvent) {
54 // if this mission type was already accepted by the player, abort
55 if (!setGlobalReference("$gaBA_ref")) {
56 return false;
57 }
58 if (getGlobalMemory().contains("$gaBA_playerOwes")) {
59 return false; // the player needs to pay back the advance before this mission is offered again
60 }
61
63
65 variation = Variation.PIRATE;
66 } else {
67 variation = Variation.PATHER;
68 }
69
71
72 if (variation == Variation.PIRATE) {
74 } else {
76 }
79 requireMarketLocationNot("galatia");
82
83// market = getMarket("kantas_den");
84// variation = Variation.PIRATE;
85
86 if (market == null) {
87 return false;
88 }
89
90 if (variation == Variation.PIRATE) {
92 } else {
94 }
95 if (contact == null) {
96 return false;
97 }
98
99 item = pickOne(
100 "unique regenerative structural elements",
101 "an advanced phase conversion prototype",
102 "an example of a lost technology",
103 "experimental hull material samples",
104 "uncommon power system components",
105 "Domain-era forge components",
106 "a small-scale momentum decoupling device",
107 "a fascinating low-power field projector",
108 "parts of an experimental bulk phase converter",
109 "classified Explorarium probe samples"
110 );
111
112 setStartingStage(Stage.GO_TO_MARKET);
113 addSuccessStages(Stage.COMPLETED);
114 addFailureStages(Stage.FAILED);
115 addNoPenaltyFailureStages(Stage.FAILED_DECIV);
116
117 //setPersonDoGenericPortAuthorityCheck(contact);
118 makeImportant(contact, "$gaBA_contact", Stage.GO_TO_MARKET);
119 makeImportant(getPerson(), "$gaBA_returnHere", Stage.RETURN_TO_ACADEMY);
120
121 connectWithGlobalFlag(Stage.GO_TO_MARKET, Stage.RETURN_TO_ACADEMY, "$gaBA_needToReturn");
122 setStageOnGlobalFlag(Stage.COMPLETED, "$gaBA_completed");
123 setStageOnGlobalFlag(Stage.FAILED, "$gaBA_failed");
124
125 connectWithMarketDecivilized(Stage.GO_TO_MARKET, Stage.FAILED_DECIV, market);
126
127 if (WITH_TIME_LIMIT) {
128 setTimeLimit(Stage.FAILED, MISSION_DAYS, market.getStarSystem(), Stage.RETURN_TO_ACADEMY);
129 }
130 //setCreditReward(30000, 40000);
131 setCreditReward(CreditReward.AVERAGE);
133
134 costNormal = genRoundNumber(40000, 50000);
135 costHigh = genRoundNumber(70000, 80000);
136 costVeryLow = genRoundNumber(5000, 8000);
137
138 beginStageTrigger(Stage.FAILED, Stage.FAILED_DECIV);
139 triggerSetGlobalMemoryValuePermanent("$gaBA_playerOwes", true);
142 endTrigger();
143
145 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
146 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, createdAt.getPrimaryEntity());
147 //triggerFleetSetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
149 //triggerSetFleetDoctrineOther(5, 4);
150
155 triggerSpawnFleetAtPickedLocation("$pwi_wantsItem", null);
157 triggerSetFleetMemoryValue("$pwi_credits", Misc.getWithDGS(genRoundNumber(10000, 15000)));
158 triggerSetFleetMemoryValue("$pwi_missionFailTrigger", "GABAHandedOverItemFailMission");
160 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
161 endTrigger();
163 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
164 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.LUDDIC_PATH, FleetTypes.PATROL_MEDIUM, createdAt.getPrimaryEntity());
170 triggerSpawnFleetAtPickedLocation("$pwi2_wantsItem", null);
172 triggerSetFleetMemoryValue("$pwi2_missionFailTrigger", "GABAHandedOverItemFailMission");
174 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
175 endTrigger();
177 beginWithinHyperspaceRangeTrigger(createdAt, 3f, true, Stage.RETURN_TO_ACADEMY);
178 triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.TRITACHYON, FleetTypes.TASK_FORCE, createdAt.getPrimaryEntity());
182 triggerSpawnFleetAtPickedLocation("$ttwi_wantsItem", null);
184 triggerSetFleetMemoryValue("$ttwi_credits", Misc.getWithDGS(genRoundNumber(120000, 150000)));
185 triggerSetFleetMemoryValue("$ttwi_missionFailTrigger", "GABAHandedOverItemFailMission");
187 triggerFleetMakeImportant(null, Stage.RETURN_TO_ACADEMY);
188 endTrigger();
189 }
190
191
192 return true;
193 }
194
195 @Override
196 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
197 Map<String, MemoryAPI> memoryMap) {
198// if (dialog != null && action.equals("showLeader")) {
199// showPersonInfo(leader, dialog, false, false);
200// return true;
201// }
202 return false;
203 }
204
205 protected void updateInteractionDataImpl() {
206 set("$gaBA_department", department);
207 set("$gaBA_marketName", market.getName());
208 set("$gaBA_onOrAt", market.getOnOrAt());
209
210 set("$gaBA_contactName", contact.getNameString());
211 set("$gaBA_raidDifficulty", RAID_DIFFICULTY);
212
213 set("$gaBA_costVeryLow", Misc.getWithDGS(costVeryLow));
214 set("$gaBA_costNormal", Misc.getWithDGS(costNormal));
215 set("$gaBA_costHigh", Misc.getWithDGS(costHigh));
216
217 set("$gaBA_systemName", market.getStarSystem().getNameWithNoType());
218 set("$gaBA_dist", getDistanceLY(market));
219 set("$gaBA_reward", Misc.getWithDGS(getCreditsReward()));
220 set("$gaBA_variation", variation);
221
222 set("$gaBA_aOrAnItem", item);
223 set("$gaBA_item", getWithoutArticle(item));
224 }
225
226 @Override
227 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
228 if (getPerson() == null || getPerson().getMarket() == null) return;
229 float opad = 10f;
230 Color h = Misc.getHighlightColor();
231 if (currentStage == Stage.GO_TO_MARKET) {
233 ", and buy " + item + " from " + contact.getNameString() + ".", opad);
234 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
235 info.addPara(getReturnText("the Galatia Academy") + ".", opad);
236 }
237 }
238
239 @Override
240 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
241 Color h = Misc.getHighlightColor();
242 if (currentStage == Stage.GO_TO_MARKET) {
243 info.addPara(getGoToMarketText(market), tc, pad);
244 return true;
245 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
246 info.addPara(getReturnTextShort("the Galatia Academy"), tc, pad);
247 return true;
248 }
249 return false;
250 }
251
252 @Override
253 public String getBaseName() {
254 return "Acquire Artifact";
255 }
256
257}
258
259
260
261
262
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean create(MarketAPI createdAt, boolean barEvent)
void connectWithGlobalFlag(Object from, Object to, String flag)
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
PersonAPI findOrCreateTrader(String factionId, MarketAPI market, boolean cleanUpOnMissionOverIfWasNewPerson)
void makeImportant(PersonAPI person, String flag, Enum ... stages)
void connectWithMarketDecivilized(Object from, Object to, MarketAPI market)
PersonAPI findOrCreateCriminalTrader(MarketAPI market, boolean cleanUpOnMissionOverIfWasNewPerson)
void triggerPickLocationTowardsPlayer(final SectorEntityToken entity, final float arc, final float dist)
void beginWithinHyperspaceRangeTrigger(SectorEntityToken entity, float rangeLY, boolean requirePlayerInHyperspace, Object ... stages)
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, StarSystemAPI roughlyWhere)
static String getWithDGS(float num)
Definition Misc.java:1381
static Color getHighlightColor()
Definition Misc.java:792
LabelAPI addPara(String format, float pad, Color hl, String... highlights)