Starsector API
Loading...
Searching...
No Matches
HijackingMission.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
8import com.fs.starfarer.api.campaign.FactionAPI.ShipPickParams;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
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.combat.ShipVariantAPI;
14import com.fs.starfarer.api.fleet.FleetMemberAPI;
15import com.fs.starfarer.api.fleet.FleetMemberType;
16import com.fs.starfarer.api.fleet.ShipRolePick;
17import com.fs.starfarer.api.impl.campaign.DModManager;
18import com.fs.starfarer.api.impl.campaign.econ.impl.ShipQuality;
19import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
20import com.fs.starfarer.api.impl.campaign.ids.Factions;
21import com.fs.starfarer.api.impl.campaign.ids.Ranks;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
23import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
24import com.fs.starfarer.api.util.Misc;
25import com.fs.starfarer.api.util.Misc.Token;
26
27public class HijackingMission extends HubMissionWithBarEvent {
28
29 public static float BASE_PRICE_MULT = 0.33f;
30
31
32 protected FleetMemberAPI member;
33 protected int price;
34 protected int marines;
35
36 @Override
37 protected boolean create(MarketAPI createdAt, boolean barEvent) {
38
39 if (barEvent) {
40 setGiverRank(Ranks.CITIZEN);
41 setGiverPost(pickOne(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 findOrCreateGiver(createdAt, false, false);
47 }
48
49 PersonAPI person = getPerson();
50 if (person == null) return false;
51 MarketAPI market = person.getMarket();
52 if (market == null) return false;
53 if (market.isPlayerOwned()) return false;
54
55 if (!setPersonMissionRef(person, "$hijack_ref")) {
56 return false;
57 }
58
59 if (barEvent) {
60 setGiverIsPotentialContactOnSuccess();
61 }
62
63 //genRandom = Misc.random;
64
65 ShipPickParams params = new ShipPickParams(ShipPickMode.PRIORITY_THEN_ALL);
66 String role = SurplusShipHull.pickRole(getQuality(), market.getFaction(), person.getImportance(), genRandom);
67
68 ShipVariantAPI variant = null;
69 for (int i = 0; i < 10; i++) {
70 List<ShipRolePick> picks = market.getFaction().pickShip(role, params, null, genRandom);
71 if (picks.isEmpty()) return false;
72 String variantId = picks.get(0).variantId;
73 variant = Global.getSettings().getVariant(variantId);
74 variant = Global.getSettings().getVariant(variant.getHullSpec().getHullId() + "_Hull").clone();
75 if (variant.getHullSpec().hasTag(Tags.NO_SELL)) {
76 variant = null;
77 continue;
78 }
79 break;
80 }
81 if (variant == null) return false;
82
83 member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, variant);
84 assignShipName(member, Factions.INDEPENDENT);
85
86 float quality = ShipQuality.getShipQuality(market, market.getFaction().getId());
87 float averageDmods = DefaultFleetInflater.getAverageDmodsForQuality(quality);
88 int addDmods = DefaultFleetInflater.getNumDModsToAdd(variant, averageDmods, genRandom);
89 if (addDmods > 0) {
90 DModManager.setDHull(variant);
91 DModManager.addDMods(member, true, addDmods, genRandom);
92 }
93
94 price = getRoundNumber(variant.getHullSpec().getBaseValue() * BASE_PRICE_MULT);
95
96
97 setRepFactionChangesTiny();
98 setRepPersonChangesVeryLow();
99
100 switch (member.getHullSpec().getHullSize()) {
101 case CAPITAL_SHIP:
102 marines = 100;
103 setRepFactionChangesVeryLow();
104 setRepPersonChangesLow();
105 break;
106 case CRUISER:
107 marines = 50;
108 break;
109 case DESTROYER:
110 marines = 20;
111 break;
112 case FRIGATE:
113 marines = 10;
114 break;
115 }
116
117 return true;
118 }
119
120 protected void updateInteractionDataImpl() {
121 set("$hijack_barEvent", isBarEvent());
122 set("$hijack_hull", member.getHullSpec().getHullNameWithDashClass());
123 set("$hijack_designation", member.getHullSpec().getDesignation());
124 set("$hijack_price", Misc.getWithDGS(price));
125 set("$hijack_marines", Misc.getWithDGS(marines));
126
127 set("$hijack_manOrWoman", getPerson().getManOrWoman());
128 set("$hijack_hisOrHer", getPerson().getHisOrHer());
129 set("$hijack_member", member);
130 }
131
132 @Override
133 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
134 Map<String, MemoryAPI> memoryMap) {
135 if ("showShip".equals(action)) {
136 dialog.getVisualPanel().showFleetMemberInfo(member, true);
137 return true;
138 } else if ("showPerson".equals(action)) {
139 dialog.getVisualPanel().showPersonInfo(getPerson(), true);
140 return true;
141 }
142 return false;
143 }
144
145 @Override
146 public String getBaseName() {
147 return "Hijacking"; // not used since there's no intel item
148 }
149
150 @Override
151 public void accept(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
152 // it's just an transaction immediate transaction handled in rules.csv
153 // no intel item etc
154
155 currentStage = new Object(); // so that the abort() assumes the mission was successful
156 abort();
157 }
158}
159
160
161
162
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static void addDMods(FleetMemberData data, boolean own, CampaignFleetAPI recoverer, Random random)
static boolean setDHull(ShipVariantAPI variant)
void accept(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean create(MarketAPI createdAt, boolean barEvent)
static String pickRole(float quality, FactionAPI faction, PersonImportance imp, Random random)
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
ShipVariantAPI getVariant(String variantId)