Starsector API
Loading...
Searching...
No Matches
BaseDisruptIndustry.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.awt.Color;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CargoAPI;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.econ.Industry;
10import com.fs.starfarer.api.campaign.econ.MarketAPI;
11import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.characters.PersonAPI;
14import com.fs.starfarer.api.impl.campaign.ids.Industries;
15import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
16import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
17import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD;
18import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
19import com.fs.starfarer.api.ui.TooltipMakerAPI;
20import com.fs.starfarer.api.util.Misc;
21
22public class BaseDisruptIndustry extends HubMissionWithBarEvent implements ColonyPlayerHostileActListener {
23
24 public static float MISSION_DAYS = 240f;
25
26 public static enum Stage {
27 DISRUPT,
28 COMPLETED,
29 FAILED,
30 FAILED_NO_PENALTY,
31 }
32
33 protected MarketAPI market;
34 protected Industry industry;
35 protected int disruptDays;
36
37 protected void createBarGiver(MarketAPI createdAt) {
38 }
39
40 protected String [] getTargetIndustries() {
41 return new String[] {Industries.HEAVYINDUSTRY, Industries.ORBITALWORKS};
42 }
43
44 protected CreditReward getRewardTier() {
45 return CreditReward.HIGH;
46 }
47
48 protected boolean requireFactionHostile() {
49 return true;
50 }
51
52 protected void setMarketSearchParameters(MarketAPI createdAt, String [] industries) {
53 requireMarketIsNot(createdAt);
54 requireMarketLocationNot(createdAt.getContainingLocation());
55 requireMarketFactionNotPlayer();
57 requireMarketFactionHostileTo(createdAt.getFactionId());
58 }
59 requireMarketNotHidden();
60 requireMarketIndustries(ReqMode.ANY, industries);
61 requireMarketNotInHyperspace();
62
63 float q = getQuality();
64 if (q <= 0) {
65 preferMarketSizeAtMost(4);
66 } else if (q <= 0.25) {
67 preferMarketSizeAtMost(5);
68 } else if (q <= 0.5) {
69 preferMarketSizeAtMost(6);
70 } else if (q <= 0.75) {
71 preferMarketSizeAtMost(7);
72 }
73 }
74
75 protected void addExtraTriggers(MarketAPI createdAt) {
76
77 }
78
79 protected boolean availableAtMarket(MarketAPI createdAt) {
80 return true;
81 }
82
83 @Override
84 protected boolean create(MarketAPI createdAt, boolean barEvent) {
85 //genRandom = Misc.random;
86
87 //if (Factions.PIRATES.equals(createdAt.getFaction().getId())) return false;
88
89 if (!availableAtMarket(createdAt)) {
90 return false;
91 }
92
93 if (barEvent) {
94 createBarGiver(createdAt);
95 }
96
97 PersonAPI person = getPerson();
98 if (person == null) return false;
99
100 String id = getMissionId();
101 if (!setPersonMissionRef(person, "$" + id + "_ref")) {
102 return false;
103 }
104
105 if (barEvent) {
106 setGiverIsPotentialContactOnSuccess();
107 }
108
109 String [] industries = getTargetIndustries();
110
111 setMarketSearchParameters(createdAt, industries);
112
113 market = pickMarket();
114 if (market == null) return false;
115
116 for (String indId : industries) {
117 industry = market.getIndustry(indId);
118 if (industry != null) {
119 break;
120 }
121 }
122 if (industry == null) return false;
123
124 disruptDays = MarketCMD.getDisruptDaysPerToken(market, industry) * 3;
125
126 if (!setMarketMissionRef(market, "$" + id + "_ref")) {
127 return false;
128 }
129
130 int marines = getMarinesRequiredToDisrupt(market, industry, disruptDays);
131 if (!isOkToOfferMissionRequiringMarines(marines)) {
132 return false;
133 }
134
135 makeImportant(market, "$" + id + "_target", Stage.DISRUPT);
136
137 setStartingStage(Stage.DISRUPT);
138 setSuccessStage(Stage.COMPLETED);
139 setFailureStage(Stage.FAILED);
140
141 setStageOnMemoryFlag(Stage.COMPLETED, market, "$" + id + "_completed");
142 setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
143
144 addNoPenaltyFailureStages(Stage.FAILED_NO_PENALTY);
145 connectWithMarketDecivilized(Stage.DISRUPT, Stage.FAILED_NO_PENALTY, market);
146 setStageOnMarketDecivilized(Stage.FAILED_NO_PENALTY, createdAt);
147 if (requireFactionHostile()) {
148 connectWithHostilitiesEnded(Stage.DISRUPT, Stage.FAILED_NO_PENALTY, person, market);
149 setStageOnHostilitiesEnded(Stage.FAILED_NO_PENALTY, person, market);
150 }
151
152 //setCreditReward(80000, 100000);
153 //setCreditReward(getRewardTier(), market.getSize());
154
155 int bonus = getRewardBonusForMarines(getMarinesRequiredToDisrupt(market, industry, disruptDays));
156 setCreditRewardWithBonus(getRewardTier(), bonus);
157
158 addExtraTriggers(createdAt);
159
160 return true;
161 }
162
163 protected void updateInteractionDataImpl() {
164 String id = getMissionId();
165 set("$" + id + "_barEvent", isBarEvent());
166 set("$" + id + "_manOrWoman", getPerson().getManOrWoman());
167 set("$" + id + "_hisOrHer", getPerson().getHisOrHer());
168 set("$" + id + "_heOrShe", getPerson().getHeOrShe());
169 set("$" + id + "_reward", Misc.getWithDGS(getCreditsReward()));
170 set("$" + id + "_industry", industry.getCurrentName());
171 set("$" + id + "_disruptDays", disruptDays);
172 set("$" + id + "_marines", Misc.getWithDGS(getMarinesRequiredToDisrupt(market, industry, disruptDays)));
173
174 set("$" + id + "_personName", getPerson().getNameString());
175 set("$" + id + "_systemName", market.getStarSystem().getNameWithLowercaseTypeShort());
176 set("$" + id + "_marketName", market.getName());
177 set("$" + id + "_marketOnOrAt", market.getOnOrAt());
178 set("$" + id + "_dist", getDistanceLY(market));
179 }
180
181 @Override
182 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
183 float opad = 10f;
184 Color h = Misc.getHighlightColor();
185 if (currentStage == Stage.DISRUPT) {
186// info.addPara("Disrupt " + industry.getCurrentName().toLowerCase() + " " + market.getOnOrAt() + " "+ market.getName() +
187// " in the " + market.getStarSystem().getNameWithLowercaseTypeShort() + ".", opad);
188
189 addStandardMarketDesc("Disrupt " + industry.getCurrentName() + " " + market.getOnOrAt(), market, info, opad);
190 //addStandardMarketDesc(market, info, opad);
191
192 addDisruptRaidInfo(market, industry, disruptDays, info, opad);
193 }
194 }
195
196 @Override
197 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
198 Color h = Misc.getHighlightColor();
199 if (currentStage == Stage.DISRUPT) {
200 info.addPara("Disrupt " + industry.getCurrentName().toLowerCase() + " " + market.getOnOrAt() + " "+ market.getName() +
201 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
202 return true;
203 }
204 return false;
205 }
206
207 @Override
208 public String getBaseName() {
209 return "Disrupt " + industry.getCurrentName();
210 }
211
212
213 @Override
214 public void acceptImpl(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
215 super.acceptImpl(dialog, memoryMap);
216 Global.getSector().getListenerManager().addListener(this);
217 }
218
219 @Override
220 protected void notifyEnding() {
221 super.notifyEnding();
222 Global.getSector().getListenerManager().removeListener(this);
223 }
224
225 public void reportRaidToDisruptFinished(InteractionDialogAPI dialog,
226 MarketAPI market, TempData actionData, Industry industry) {
227 if (this.industry == industry && industry.getDisruptedDays() >= disruptDays) {
228 Global.getSector().getListenerManager().removeListener(this);
229 String id = getMissionId();
230 market.getMemoryWithoutUpdate().set("$" + id + "_raidedTargetIndustry", true, 0);
231 }
232 }
233
234
235
236 public void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog,
237 MarketAPI market, TempData actionData,
238 CargoAPI cargo) {
239 // TODO Auto-generated method stub
240 }
241
242
244 InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
245 // TODO Auto-generated method stub
246
247 }
248
249 public void reportTacticalBombardmentFinished(InteractionDialogAPI dialog,
250 MarketAPI market, TempData actionData) {
251 // TODO Auto-generated method stub
252
253 }
254
255}
256
257
258
static SectorAPI getSector()
Definition Global.java:59
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void acceptImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void setMarketSearchParameters(MarketAPI createdAt, String[] industries)