Starsector API
Loading...
Searching...
No Matches
SmugglingMission.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.awt.Color;
4
5import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
6import com.fs.starfarer.api.campaign.econ.MarketAPI;
7import com.fs.starfarer.api.characters.PersonAPI;
8import com.fs.starfarer.api.impl.campaign.ids.Factions;
9import com.fs.starfarer.api.impl.campaign.ids.Ranks;
10import com.fs.starfarer.api.impl.campaign.ids.Tags;
11import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
12import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
13import com.fs.starfarer.api.ui.TooltipMakerAPI;
14import com.fs.starfarer.api.util.Misc;
15
16public class SmugglingMission extends HubMissionWithBarEvent {
17
18 public static float MISSION_DAYS = 60f;
19 public static float MIN_VALUE = 10000f;
20 public static float MAX_VALUE = 100000f;
21
22 public static enum Stage {
23 SMUGGLE,
24 COMPLETED,
25 FAILED,
26 }
27
28 protected MarketAPI market;
29 protected CommodityOnMarketAPI com;
30 protected int quantity;
31
32 @Override
33 protected boolean create(MarketAPI createdAt, boolean barEvent) {
34 //genRandom = Misc.random;
35
36 //if (Factions.PIRATES.equals(createdAt.getFaction().getId())) return false;
37
38 if (barEvent) {
39 setGiverRank(Ranks.CITIZEN);
40 setGiverPost(pickOne(Ranks.POST_SMUGGLER, Ranks.POST_GANGSTER,
41 Ranks.POST_FENCE, Ranks.POST_CRIMINAL));
42 setGiverImportance(pickImportance());
43 setGiverFaction(Factions.PIRATES);
44 setGiverTags(Tags.CONTACT_UNDERWORLD);
45 findOrCreateGiver(createdAt, false, false);
46 }
47
48 PersonAPI person = getPerson();
49 if (person == null) return false;
50
51
52 if (!setPersonMissionRef(person, "$smug_ref")) {
53 return false;
54 }
55
56 if (barEvent) {
57 setGiverIsPotentialContactOnSuccess();
58 }
59
60 requireMarketIsNot(createdAt);
61 requireMarketFactionNotPlayer();
62 requireMarketLocationNot(createdAt.getContainingLocation());
63 requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_ALLOWS_TRANSPONDER_OFF_TRADE);
64 requireMarketNotHidden();
65 requireMarketNotInHyperspace();
66 preferMarketInDirectionOfOtherMissions();
67
68 requireCommodityIllegal();
69 requireCommodityDemandAtLeast(1);
70
71 com = pickCommodity();
72 if (com == null) return false;
73
74 market = com.getMarket();
75 if (market == null) return false;
76
77
78 float value = MIN_VALUE + getQuality() * (MAX_VALUE - MIN_VALUE);
79 value *= 0.9f + genRandom.nextFloat() * 0.2f;
80
81 quantity = getRoundNumber(value / com.getCommodity().getBasePrice());
82 if (quantity < 10) quantity = 10;
83
84 if (!setMarketMissionRef(market, "$smug_ref")) {
85 return false;
86 }
87 makeImportant(market, "$smug_target", Stage.SMUGGLE);
88
89 setStartingStage(Stage.SMUGGLE);
90 setSuccessStage(Stage.COMPLETED);
91 setFailureStage(Stage.FAILED);
92
93 setStageOnMemoryFlag(Stage.COMPLETED, market, "$smug_completed");
94 setNoAbandon();
95 setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
96
97
98 //setCreditReward((int)(value * 0.5f), (int)(value * 0.7f));
99 setCreditRewardWithBonus(CreditReward.LOW, (int) (value * 0.5f));
100
101 triggerCreateMediumPatrolAroundMarket(market, Stage.SMUGGLE, 1f);
102
103 return true;
104 }
105
106 protected void updateInteractionDataImpl() {
107 set("$smug_barEvent", isBarEvent());
108 set("$smug_manOrWoman", getPerson().getManOrWoman());
109 set("$smug_reward", Misc.getWithDGS(getCreditsReward()));
110 set("$smug_commodityId", com.getId());
111 set("$smug_commodityName", com.getCommodity().getLowerCaseName());
112 set("$smug_quantity", Misc.getWithDGS(quantity));
113 set("$smug_playerHasEnough", playerHasEnough(com.getId(), quantity));
114
115 set("$smug_personName", getPerson().getNameString());
116 set("$smug_systemName", market.getStarSystem().getNameWithLowercaseTypeShort());
117 set("$smug_marketName", market.getName());
118 set("$smug_marketOnOrAt", market.getOnOrAt());
119 set("$smug_dist", getDistanceLY(market));
120 }
121
122 @Override
123 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
124 float opad = 10f;
125 Color h = Misc.getHighlightColor();
126 if (currentStage == Stage.SMUGGLE) {
127 info.addPara("Smuggle %s units of " + com.getCommodity().getLowerCaseName() + " to " + market.getName() +
128 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort() + ".", opad,
129 h, Misc.getWithDGS(quantity));
130
131 info.addPara("The authorities are aware the shipment is incoming and patrols are on high alert.", opad);
132 }
133 }
134
135 @Override
136 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
137 Color h = Misc.getHighlightColor();
138 if (currentStage == Stage.SMUGGLE) {
139 info.addPara("Smuggle %s units of " + com.getCommodity().getLowerCaseName() + " to " +
140 market.getName() + " in the " +
141 market.getStarSystem().getNameWithLowercaseTypeShort(), pad, tc,
142 h, Misc.getWithDGS(quantity));
143 return true;
144 }
145 return false;
146 }
147
148 @Override
149 public String getBaseName() {
150 return "Smuggling " + com.getCommodity().getName();
151 }
152
153}
154
boolean create(MarketAPI createdAt, boolean barEvent)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)