Starsector API
Loading...
Searching...
No Matches
GARansomResearcher.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.Global;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.campaign.rules.MemoryAPI;
11import com.fs.starfarer.api.characters.PersonAPI;
12import com.fs.starfarer.api.impl.campaign.ids.Factions;
13import com.fs.starfarer.api.impl.campaign.ids.Ranks;
14import com.fs.starfarer.api.ui.TooltipMakerAPI;
15import com.fs.starfarer.api.util.Misc;
16import com.fs.starfarer.api.util.Misc.Token;
17
18public class GARansomResearcher extends GABaseMission {
19
20 public static float RAID_DIFFICULTY = 300f;
21
22 public static float MISSION_DAYS = 120f;
23
24 public static float PROB_PIRATE_VARIATION = 0.5f;
25
26
27 public static enum Stage {
28 GO_TO_MARKET,
29 RETURN_TO_ACADEMY,
30 COMPLETED,
31 FAILED,
32 FAILED_DECIV,
33 }
34
35 public static enum Variation {
36 PIRATE,
37 CHURCH,
38 }
39
40 protected MarketAPI market;
41 protected Variation variation;
42 protected PersonAPI contact;
43 protected PersonAPI researcher;
44
45 protected int costNormal;
46 protected int costHigh;
47 protected int costVeryLow;
48
49
50 @Override
51 protected boolean create(MarketAPI createdAt, boolean barEvent) {
52 // if this mission type was already accepted by the player, abort
53 if (!setGlobalReference("$gaRR_ref")) {
54 return false;
55 }
56 if (getGlobalMemory().contains("$gaRR_playerOwes")) {
57 return false; // the player needs to pay back the advance before this mission is offered again
58 }
59
61
62 if (rollProbability(PROB_PIRATE_VARIATION)) {
63 variation = Variation.PIRATE;
64 setIconName("campaignMissions", "prisoner_pirate");
65 } else {
66 variation = Variation.CHURCH;
67 setIconName("campaignMissions", "prisoner_luddic");
68 }
69
70 resetSearch();
71
72 if (variation == Variation.PIRATE) {
73 requireMarketFaction(Factions.PIRATES);
74 } else {
75 requireMarketFaction(Factions.LUDDIC_CHURCH);
76 }
77 requireMarketNotHidden();
78 requireMarketNotInHyperspace();
79 requireMarketLocationNot("galatia");
80 preferMarketInDirectionOfOtherMissions();
81 market = pickMarket();
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) {
91 contact = findOrCreateCriminal(market, true);
92 } else {
93 contact = findOrCreatePerson(Factions.LUDDIC_CHURCH, market, true,
94 Ranks.KNIGHT_CAPTAIN, Ranks.POST_GENERIC_MILITARY);
95 }
96 if (contact == null) {
97 return false;
98 }
99
100 setStartingStage(Stage.GO_TO_MARKET);
101 addSuccessStages(Stage.COMPLETED);
102 addFailureStages(Stage.FAILED);
103 addNoPenaltyFailureStages(Stage.FAILED_DECIV);
104
105 //setPersonDoGenericPortAuthorityCheck(contact);
106 makeImportant(contact, "$gaRR_contact", Stage.GO_TO_MARKET);
107 makeImportant(getPerson(), "$gaRR_returnHere", Stage.RETURN_TO_ACADEMY);
108
109 connectWithGlobalFlag(Stage.GO_TO_MARKET, Stage.RETURN_TO_ACADEMY, "$gaRR_needToReturn");
110 setStageOnGlobalFlag(Stage.COMPLETED, "$gaRR_completed");
111 setStageOnGlobalFlag(Stage.FAILED, "$gaRR_failed");
112 connectWithMarketDecivilized(Stage.GO_TO_MARKET, Stage.FAILED_DECIV, market);
113
114 if (WITH_TIME_LIMIT) {
115 setTimeLimit(Stage.FAILED, MISSION_DAYS, market.getStarSystem(), Stage.RETURN_TO_ACADEMY);
116 }
117 //setCreditReward(30000, 40000);
118 setCreditReward(CreditReward.AVERAGE);
120
121 costNormal = genRoundNumber(60000, 70000);
122 costHigh = genRoundNumber(90000, 100000);
123 costVeryLow = genRoundNumber(8000, 10000);
124
125 researcher = Global.getSector().getFaction(Factions.INDEPENDENT).createRandomPerson(genRandom);
126 researcher.setRankId(Ranks.CITIZEN);
127 researcher.setPostId(Ranks.POST_ACADEMICIAN);
128
129 beginStageTrigger(Stage.FAILED, Stage.FAILED_DECIV);
130 triggerSetGlobalMemoryValuePermanent("$gaRR_playerOwes", true);
131 triggerSetGlobalMemoryValuePermanent("$gaRR_failedCredits", Misc.getWithDGS(costNormal));
132 endTrigger();
133
134 return true;
135 }
136
137 @Override
138 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
139 Map<String, MemoryAPI> memoryMap) {
140 if (dialog != null && action.equals("showResearcher")) {
141 showPersonInfo(researcher, dialog, false, false);
142 return true;
143 }
144 return false;
145 }
146
147 protected void updateInteractionDataImpl() {
148 set("$gaRR_department", department);
149 set("$gaRR_marketName", market.getName());
150 set("$gaRR_onOrAt", market.getOnOrAt());
151
152 set("$gaRR_contactName", contact.getNameString());
153 set("$gaRR_raidDifficulty", RAID_DIFFICULTY);
154 set("$gaRR_researcherName", researcher.getNameString());
155
156 set("$gaRR_costVeryLow", Misc.getWithDGS(costVeryLow));
157 set("$gaRR_costNormal", Misc.getWithDGS(costNormal));
158 set("$gaRR_costHigh", Misc.getWithDGS(costHigh));
159
160 set("$gaRR_systemName", market.getStarSystem().getNameWithNoType());
161 set("$gaRR_dist", getDistanceLY(market));
162 set("$gaRR_reward", Misc.getWithDGS(getCreditsReward()));
163 set("$gaRR_variation", variation);
164 }
165
166 @Override
167 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
168 float opad = 10f;
169 Color h = Misc.getHighlightColor();
170 if (currentStage == Stage.GO_TO_MARKET) {
171 String adjective = "kidnapped";
172 if (variation == Variation.CHURCH) adjective = "imprisoned";
173 info.addPara(getGoToMarketText(market) +
174 ", and ransom the " + adjective + " researcher from " + contact.getNameString() + ".", opad);
175 //addCustomRaidInfo((int)RAID_DIFFICULTY, RaidDangerLevel.MINIMAL, info, opad);
176 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
177 info.addPara(getReturnText("the Galatia Academy") + ".", opad);
178 }
179 }
180
181 @Override
182 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
183 Color h = Misc.getHighlightColor();
184 if (currentStage == Stage.GO_TO_MARKET) {
185 info.addPara(getGoToMarketText(market), tc, pad);
186 return true;
187 } else if (currentStage == Stage.RETURN_TO_ACADEMY) {
188 info.addPara(getReturnTextShort("the Galatia Academy"), tc, pad);
189 return true;
190 }
191 return false;
192 }
193
194 @Override
195 public String getBaseName() {
196 return "Ransom Researcher";
197 }
198
199}
200
201
202
203
204
static SectorAPI getSector()
Definition Global.java:59
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)