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
28
29 public static float BASE_PRICE_MULT = 0.33f;
30
31
33 protected int price;
34 protected int marines;
35
36 @Override
37 protected boolean create(MarketAPI createdAt, boolean barEvent) {
38
39 if (barEvent) {
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) {
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
85
86 float quality = ShipQuality.getShipQuality(market, market.getFaction().getId());
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
95
96
99
100 switch (member.getHullSpec().getHullSize()) {
101 case CAPITAL_SHIP:
102 marines = 100;
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)) {
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:57
static FactoryAPI getFactory()
Definition Global.java:41
static void addDMods(FleetMemberData data, boolean own, CampaignFleetAPI recoverer, Random random)
static boolean setDHull(ShipVariantAPI variant)
static float getShipQuality(MarketAPI market, String factionId)
static int getNumDModsToAdd(ShipVariantAPI variant, float averageDMods, Random random)
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)
void findOrCreateGiver(MarketAPI market, boolean addToCommDirectory, boolean cleanUpOnMissionOverIfWasNewPerson)
void assignShipName(FleetMemberAPI member, String factionId)
static String getWithDGS(float num)
Definition Misc.java:1381
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
ShipVariantAPI getVariant(String variantId)
List< ShipRolePick > pickShip(String role, ShipPickParams params)
void showFleetMemberInfo(FleetMemberAPI member)