Starsector API
Loading...
Searching...
No Matches
LostOutpostCrewReturnLuddicFind.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.luddic;
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.SectorEntityToken;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.campaign.rules.MemoryAPI;
12import com.fs.starfarer.api.characters.PersonAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Ranks;
14import com.fs.starfarer.api.impl.campaign.ids.Tags;
15import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
16import com.fs.starfarer.api.ui.TooltipMakerAPI;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.Misc.Token;
19
20public class LostOutpostCrewReturnLuddicFind extends HubMissionWithBarEvent {
21
22 //public static float MISSION_DAYS = 180f;
23
24 public static String LOCR_LUDDIC_PLANET_KEY = "$locr_luddicPlanet";
25 public static String LOCR_LUDDIC = "$locr_luddic";
26 public static String LOCRL_LUDDIC_DISCOVERED = "$locr_luddicDiscovered";
27 public static String LOCR_LUDDIC_TRANSPORT_KEY = "$locr_luddicTransport";
28
29 public static enum Stage {
30 SEARCH,
31 COMPLETED,
32 RETURN,
33 FAILED,
34 }
35
36 protected int rewardAmount;
37 protected int rewardAmountHigher;
38
39 protected MarketAPI market;
40 protected SectorEntityToken target;
41 protected SectorEntityToken target_system;
42 protected SectorEntityToken luddic_transport;
43 protected PersonAPI person;
44
45 @Override
46 protected boolean create(MarketAPI createdAt, boolean barEvent) {
47 if (!setGlobalReference("$locrlf_ref", "$locrlf_inProgress")) {
48 return false;
49 }
50
51 person = getPerson();
52 if (person == null) {
53 return false;
54 }
55
56 // If they're not Luddic, they're not giving this mission!!!
57 if (person.getFaction().getId() != "luddic_church" ) return false;
58
59 //genRandom = Misc.random;
60
61 //System.out.print("Attempting LostOutpostCrewReturnLuddicFind");
62
63 // If player has already found the Luddics, no mission.
64 //if (Global.getSector().getMemoryWithoutUpdate().contains(LOCRL_LUDDIC_DISCOVERED)) {
65 if (Global.getSector().getMemoryWithoutUpdate().is(LOCRL_LUDDIC_DISCOVERED,true)) {
66 return false;
67 }
68
69 // No planet means no mission.
70 target = Global.getSector().getMemoryWithoutUpdate().getEntity(LOCR_LUDDIC_PLANET_KEY);
71 if (target == null) {
72 //System.out.print("... but no Luddic Outpost exists.");
73 return false;
74 }
75
76 // No Luddic transport also means no mission.
77 if (!Global.getSector().getMemoryWithoutUpdate().contains(LOCR_LUDDIC_PLANET_KEY)) {
78 return false;
79 }
80
81 luddic_transport = Global.getSector().getMemoryWithoutUpdate().getEntity(LOCR_LUDDIC_TRANSPORT_KEY);
82 if (luddic_transport == null) {
83 return false;
84 }
85
86
87 target_system = target.getStarSystem().getCenter();
88
89 // must be given from a Luddic market
90 //if (!Factions.LUDDIC_CHURCH.equals(createdAt.getFaction().getId())) return false;
91
92 if (barEvent) {
93
94 String post = null;
95 setGiverRank(Ranks.CITIZEN);
96 //setGiverPost(Ranks.POST_AGENT);
97 setGiverImportance(pickImportance());
98 setGiverTags(Tags.CONTACT_TRADE);
99 post = pickOne( Ranks.POST_TRADER,
100 Ranks.POST_COMMODITIES_AGENT,
101 Ranks.POST_PORTMASTER,
102 Ranks.POST_MERCHANT,
103 Ranks.POST_GUILDMASTER,
104 Ranks.POST_COMMUNE_LEADER,
105 Ranks.POST_ADMINISTRATOR);
106
107 findOrCreateGiver(createdAt, false, false);
108
109 setGiverPost(post);
110 if ( post.equals(Ranks.POST_BASE_COMMANDER) ||
111 post.equals(Ranks.POST_ADMINISTRATOR)) {
112 setGiverImportance(pickHighImportance());
113 } else {
114 setGiverImportance(pickImportance());
115 }
116 }
117
118
119
120 if (!setPersonMissionRef(person, "$locrlf_ref")) {
121 return false;
122 }
123
124 if (barEvent) {
125 setGiverIsPotentialContactOnSuccess();
126 }
127
128 // Do we need to store the market? Maybe.
129 market = createdAt;
130 if (market == null) return false;
131 market.getMemoryWithoutUpdate().set("$locrlf_market", true);
132
133 makeImportant(luddic_transport, "$locrlf_target", Stage.SEARCH);
134 makeImportant(target.getStarSystem().getHyperspaceAnchor(), null, Stage.SEARCH);
135 makeImportant(person, "$locrlf_return", Stage.RETURN);
136
137 setStartingStage(Stage.SEARCH);
138 setSuccessStage(Stage.COMPLETED);
139 setFailureStage(Stage.FAILED);
140
141 connectWithGlobalFlag(Stage.SEARCH, Stage.RETURN, "$locrlf_foundHeretics");
142 connectWithGlobalFlag(Stage.RETURN, Stage.COMPLETED, "$locrlf_completed");
143
144 //setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
145
146 rewardAmount = 24000;
147 rewardAmountHigher = 36000;
148
149 return true;
150 }
151
152 protected void updateInteractionDataImpl() {
153 set("$locrlf_barEvent", isBarEvent());
154 set("$locrlf_manOrWoman", getPerson().getManOrWoman());
155 set("$locrlf_heOrShe", getPerson().getHeOrShe());
156 set("$locrlf_himOrHer", getPerson().getHimOrHer());
157 set("$locrlf_hisOrHer", getPerson().getHisOrHer());
158 set("$locrlf_HeOrShe", getPerson().getHeOrShe().substring(0, 1).toUpperCase() + getPerson().getHeOrShe().substring(1));
159 set("$locrlf_HisOrHer", getPerson().getHisOrHer().substring(0, 1).toUpperCase() + getPerson().getHisOrHer().substring(1));
160 set("$locrlf_HimOrHer", getPerson().getHimOrHer().substring(0, 1).toUpperCase() + getPerson().getHimOrHer().substring(1));
161
162 set("$locrlf_rewardAmount", Misc.getWithDGS(rewardAmount));
163 set("$locrlf_rewardAmountHigher", Misc.getWithDGS(rewardAmountHigher));
164
165 set("$locrlf_person", getPerson());
166 set("$locrlf_personName", getPerson().getNameString());
167 set("$locrlf_systemName", target.getStarSystem().getNameWithLowercaseTypeShort());
168 set("$locrlf_transportName", luddic_transport.getName());
169 //set("$locrlf_marketName", target.getName());
170 //set("$locrlft_marketOnOrAt", market.getOnOrAt());
171 set("$locrlf_dist", getDistanceLY(target));
172
173 }
174
175 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
176 if ("addPersonToMarket".equals(action)) {
177 //System.out.print("Adding person to market.");
178
179 Misc.moveToMarket(person, market, true);
180 if (person.getMarket() == null) return false;
181 if (person.getMarket().getCommDirectory() == null) return false;
182 if (person.getMarket().getCommDirectory().getEntryForPerson(person.getId()) == null) return false;
183 person.getMarket().getCommDirectory().getEntryForPerson(person.getId()).setHidden(false);
184
185 return true;
186 }
187 return false;
188 }
189
190 @Override
191 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
192 float opad = 10f;
193 Color h = Misc.getHighlightColor();
194 if (currentStage == Stage.SEARCH) {
195 info.addPara("Search the " + target_system.getStarSystem().getNameWithLowercaseTypeShort()
196 + " for the lost group of Luddic heretics.", opad);
197 }
198 else if (currentStage == Stage.RETURN) {
199 info.addPara("Return to " + person.getNameString() + " to report that you found "
200 + "the lost Luddic heretics.", opad);
201 }
202 }
203
204 @Override
205 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
206 Color h = Misc.getHighlightColor();
207 if (currentStage == Stage.SEARCH) {
208 info.addPara("Search for the Luddic heretics in the " +
209 target_system.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
210 return true;
211 }
212 else if (currentStage == Stage.RETURN) {
213 info.addPara("Return with news of the Luddic heretics to " + person.getNameString() + ".", tc, pad);
214 return true;
215 }
216 return false;
217 }
218
219 @Override
220 public String getBaseName() {
221 return "The Stray Flock";
222 }
223
224}
225
static SectorAPI getSector()
Definition Global.java:59
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)