Starsector API
Loading...
Searching...
No Matches
SpySatDeployment.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.SectorEntityToken;
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 SpySatDeployment extends HubMissionWithBarEvent {
17
18 public static float PROB_BAR_UNDERWORLD = 0.25f;
19 public static float PROB_PATROL_AROUND_TARGET = 0.5f;
20
21 public static float MISSION_DAYS = 120f;
22
23 public static enum Stage {
24 DEPLOY,
25 COMPLETED,
26 FAILED,
27 }
28
29 protected MarketAPI market;
30 protected SectorEntityToken target;
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 if (rollProbability(PROB_BAR_UNDERWORLD)) {
40 setGiverRank(Ranks.CITIZEN);
41 setGiverPost(pickOne(Ranks.POST_AGENT, Ranks.POST_SMUGGLER, Ranks.POST_GANGSTER,
42 Ranks.POST_FENCE, Ranks.POST_CRIMINAL));
43 setGiverImportance(pickImportance());
44 setGiverFaction(Factions.PIRATES);
45 setGiverTags(Tags.CONTACT_UNDERWORLD);
46 } else {
47 setGiverRank(Ranks.CITIZEN);
48 setGiverPost(Ranks.POST_AGENT);
49 setGiverImportance(pickImportance());
50 if (Factions.PIRATES.equals(createdAt.getFaction().getId())) {
51 setGiverTags(Tags.CONTACT_UNDERWORLD);
52 setGiverFaction(Factions.PIRATES);
53 } else {
54 setGiverTags(Tags.CONTACT_MILITARY);
55 }
56 }
57 findOrCreateGiver(createdAt, false, false);
58 }
59
60 PersonAPI person = getPerson();
61 if (person == null) return false;
62
63
64 if (!setPersonMissionRef(person, "$ssat_ref")) {
65 return false;
66 }
67
68 if (barEvent) {
69 setGiverIsPotentialContactOnSuccess();
70 }
71
72 requireMarketIsNot(createdAt);
73 requireMarketLocationNot(createdAt.getContainingLocation());
74 requireMarketFactionNotPlayer();
75 requireMarketFactionNot(person.getFaction().getId());
76 requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_ALLOWS_TRANSPONDER_OFF_TRADE);
77 requireMarketMilitary();
78 requireMarketNotHidden();
79 requireMarketNotInHyperspace();
80 preferMarketInDirectionOfOtherMissions();
81 market = pickMarket();
82
83 if (market == null) return false;
84
85 target = spawnMissionNode(
86 new LocData(EntityLocationType.ORBITING_PARAM, market.getPrimaryEntity(), market.getStarSystem()));
87 if (!setEntityMissionRef(target, "$ssat_ref")) return false;
88
89 makeImportant(target, "$ssat_target", Stage.DEPLOY);
90 setMapMarkerNameColor(market.getTextColorForFactionOrPlanet());
91
92 setStartingStage(Stage.DEPLOY);
93 setSuccessStage(Stage.COMPLETED);
94 setFailureStage(Stage.FAILED);
95
96 setStageOnMemoryFlag(Stage.COMPLETED, target, "$ssat_completed");
97 setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
98
99// int sizeModifier = market.getSize() * 10000;
100// setCreditReward(10000 + sizeModifier, 30000 + sizeModifier);
101 setCreditReward(CreditReward.AVERAGE, market.getSize());
102
103 if (rollProbability(PROB_PATROL_AROUND_TARGET)) {
104 triggerCreateMediumPatrolAroundMarket(market, Stage.DEPLOY, 1f);
105 }
106
107 return true;
108 }
109
110 protected void updateInteractionDataImpl() {
111 set("$ssat_barEvent", isBarEvent());
112 set("$ssat_underworld", getPerson().hasTag(Tags.CONTACT_UNDERWORLD));
113 set("$ssat_manOrWoman", getPerson().getManOrWoman());
114 set("$ssat_reward", Misc.getWithDGS(getCreditsReward()));
115
116 set("$ssat_personName", getPerson().getNameString());
117 set("$ssat_systemName", market.getStarSystem().getNameWithLowercaseTypeShort());
118 set("$ssat_marketName", market.getName());
119 set("$ssat_marketOnOrAt", market.getOnOrAt());
120 set("$ssat_dist", getDistanceLY(market));
121 }
122
123 @Override
124 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
125 float opad = 10f;
126 Color h = Misc.getHighlightColor();
127 if (currentStage == Stage.DEPLOY) {
128 info.addPara("Deploy a spysat in orbit of " + market.getName() +
129 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort() + ".", opad);
130 }
131 }
132
133 @Override
134 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
135 Color h = Misc.getHighlightColor();
136 if (currentStage == Stage.DEPLOY) {
137 info.addPara("Deploy spysat near " +
138 market.getName() + " in the " +
139 market.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
140 return true;
141 }
142 return false;
143 }
144
145 @Override
146 public String getBaseName() {
147 return "SpySat Deployment";
148 }
149
150}
151
boolean create(MarketAPI createdAt, boolean barEvent)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)