Starsector API
Loading...
Searching...
No Matches
HandMeDownFreighter.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.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.campaign.rules.MemoryAPI;
11import com.fs.starfarer.api.characters.PersonAPI;
12import com.fs.starfarer.api.combat.ShipVariantAPI;
13import com.fs.starfarer.api.fleet.FleetMemberAPI;
14import com.fs.starfarer.api.fleet.FleetMemberType;
15import com.fs.starfarer.api.impl.campaign.DModManager;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.HullMods;
18import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
19import com.fs.starfarer.api.impl.campaign.ids.Ranks;
20import com.fs.starfarer.api.impl.campaign.ids.Tags;
21import com.fs.starfarer.api.impl.campaign.ids.Voices;
22import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseManager;
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;
26import com.fs.starfarer.api.util.WeightedRandomPicker;
27
28public class HandMeDownFreighter extends HubMissionWithBarEvent {
29 public static float BASE_PRICE_MULT = 0.33f;
30
31 public static WeightedRandomPicker<String> HULLS = new WeightedRandomPicker<String>();
32 static {
33 HULLS.add("buffalo_Hull", 7f);
34 HULLS.add("tarsus_Hull", 7f);
35 HULLS.add("colossus_Hull", 5f);
36 HULLS.add("atlas_Hull", 1f);
37 HULLS.add("wayfarer_Hull", 5f);
38 HULLS.add("gemini_Hull", 1f);
39 HULLS.add("mule_d_pirates_Hull", 1f);
40 HULLS.add("mule_Hull", 1f);
41 }
42
43
44 protected FleetMemberAPI member;
45 protected int price;
46
47 @Override
48 protected boolean create(MarketAPI createdAt, boolean barEvent) {
49
50 float probAbort = 0.75f * PirateBaseManager.getInstance().getStandardTimeFactor();
51 if (rollProbability(probAbort)) return false;
52
53 if (barEvent) {
54 setGiverFaction(Factions.INDEPENDENT);
55 setGiverPost(Ranks.POST_SPACER);
56 setGiverVoice(Voices.SPACER);
57 setGiverImportance(pickLowImportance());
58 setGiverTags(Tags.CONTACT_UNDERWORLD, Tags.CONTACT_TRADE);
59 findOrCreateGiver(createdAt, false, false);
60 }
61
62 PersonAPI person = getPerson();
63 if (person == null) return false;
64 MarketAPI market = person.getMarket();
65 if (market == null) return false;
66
67 if (!setPersonMissionRef(person, "$hmdf_ref")) {
68 return false;
69 }
70
71 if (barEvent) {
72 setGiverIsPotentialContactOnSuccess();
73 }
74
75 //genRandom = Misc.random;
76
77// WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(genRandom);
78// picker.add("buffalo_Hull", 7f);
79// picker.add("tarsus_Hull", 7f);
80// picker.add("colossus_Hull", 5f);
81// picker.add("atlas_Hull", 1f);
82// picker.add("wayfarer_Hull", 5f);
83// picker.add("gemini_Hull", 1f);
84// picker.add("mule_d_pirates_Hull", 1f);
85// picker.add("mule_Hull", 1f);
86//
87// String variantId = picker.pick();
88 String variantId = HULLS.pick(genRandom);
89 ShipVariantAPI variant = Global.getSettings().getVariant(variantId).clone();
90 member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, variant);
91 assignShipName(member, Factions.INDEPENDENT);
92
93 int dMods = 2 + genRandom.nextInt(3);
94 DModManager.addDMods(variant, true, dMods, genRandom);
95 DModManager.removeDMod(variant, HullMods.COMP_STORAGE);
96
97 member.getCrewComposition().setCrew(100000);
98 member.getRepairTracker().setCR(0.7f);
99
100 price = getRoundNumber(variant.getHullSpec().getBaseValue() * BASE_PRICE_MULT);
101
102 setRepFactionChangesTiny();
103 setRepPersonChangesVeryLow();
104
105 return true;
106 }
107
108 protected void updateInteractionDataImpl() {
109 // this is weird - in the accept() method, the mission is aborted, which unsets
110 // $hmdf_ref. So: we use $hmdf_ref2 in the ContactPostAccept rule
111 // and $hmdf_ref2 has an expiration of 0, so it'll get unset on its own later.
112 set("$hmdf_ref2", this);
113
114 set("$hmdf_barEvent", isBarEvent());
115 set("$hmdf_hullClass", member.getHullSpec().getHullNameWithDashClass());
116 set("$hmdf_price", Misc.getWithDGS(price));
117 set("$hmdf_manOrWoman", getPerson().getManOrWoman());
118 set("$hmdf_hisOrHer", getPerson().getHisOrHer());
119 set("$hmdf_member", member);
120 }
121
122 @Override
123 protected boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List<Token> params,
124 Map<String, MemoryAPI> memoryMap) {
125 if ("showShip".equals(action)) {
126 dialog.getVisualPanel().showFleetMemberInfo(member, true);
127 return true;
128 } else if ("showPerson".equals(action)) {
129 dialog.getVisualPanel().showPersonInfo(getPerson(), true);
130 return true;
131 }
132 return false;
133 }
134
135 @Override
136 public String getBaseName() {
137 return "Hand-me-down Freighter"; // not used I don't think
138 }
139
140 @Override
141 public void accept(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
142 // it's just an transaction immediate transaction handled in rules.csv
143 // no intel item etc
144
145 currentStage = new Object(); // so that the abort() assumes the mission was successful
146 abort();
147
148 for (CampaignFleetAPI fleet : getPerson().getMarket().getContainingLocation().getFleets()) {
149 if (fleet.getFaction().isPlayerFaction()) continue;
150 if (!Misc.isPatrol(fleet)) continue;
151 fleet.getMemoryWithoutUpdate().set(MemFlags.PATROL_EXTRA_SUSPICION, 1f);
152 }
153 }
154}
155
156
157
158
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 void removeDMod(ShipVariantAPI v, String id)
void accept(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
ShipVariantAPI getVariant(String variantId)