Starsector API
Loading...
Searching...
No Matches
AICores.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
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.CargoAPI;
9import com.fs.starfarer.api.campaign.CargoPickerListener;
10import com.fs.starfarer.api.campaign.CargoStackAPI;
11import com.fs.starfarer.api.campaign.FactionAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.OptionPanelAPI;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.TextPanelAPI;
16import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
17import com.fs.starfarer.api.campaign.rules.MemoryAPI;
18import com.fs.starfarer.api.characters.PersonAPI;
19import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
21import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
22import com.fs.starfarer.api.impl.campaign.ids.Commodities;
23import com.fs.starfarer.api.impl.campaign.ids.Ranks;
24import com.fs.starfarer.api.impl.campaign.ids.Strings;
25import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
26import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
27import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
28import com.fs.starfarer.api.ui.TooltipMakerAPI;
29import com.fs.starfarer.api.util.Misc;
30import com.fs.starfarer.api.util.Misc.Token;
31
36public class AICores extends BaseCommandPlugin {
37
42 protected TextPanelAPI text;
45 protected MemoryAPI memory;
47 protected Map<String, MemoryAPI> memoryMap;
48 protected PersonAPI person;
50
51 protected boolean buysAICores;
52 protected float valueMult;
53 protected float repMult;
54
55 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
56
57 this.dialog = dialog;
58 this.memoryMap = memoryMap;
59
60 String command = params.get(0).getString(memoryMap);
61 if (command == null) return false;
62
64
68
71
74
77
78 buysAICores = faction.getCustomBoolean("buysAICores");
79 valueMult = faction.getCustomFloat("AICoreValueMult");
80 repMult = faction.getCustomFloat("AICoreRepMult");
81
82 if (command.equals("selectCores")) {
84 } else if (command.equals("playerHasCores")) {
85 return playerHasCores();
86 } else if (command.equals("personCanAcceptCores")) {
87 return personCanAcceptCores();
88 }
89
90 return true;
91 }
92
93 protected boolean personCanAcceptCores() {
94 if (person == null || !buysAICores) return false;
95
96 return Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
100 }
101
102 protected void selectCores() {
103 CargoAPI copy = Global.getFactory().createCargo(false);
104 //copy.addAll(cargo);
105 //copy.setOrigSource(playerCargo);
106 for (CargoStackAPI stack : playerCargo.getStacksCopy()) {
107 CommoditySpecAPI spec = stack.getResourceIfResource();
108 if (spec != null && spec.getDemandClass().equals(Commodities.AI_CORES)) {
109 copy.addFromStack(stack);
110 }
111 }
112 copy.sort();
113
114 final float width = 310f;
115 dialog.showCargoPickerDialog("Select AI cores to turn in", "Confirm", "Cancel", true, width, copy, new CargoPickerListener() {
116 public void pickedCargo(CargoAPI cargo) {
117 if (cargo.isEmpty()) {
118 cancelledCargoSelection();
119 return;
120 }
121
122 cargo.sort();
123 for (CargoStackAPI stack : cargo.getStacksCopy()) {
124 playerCargo.removeItems(stack.getType(), stack.getData(), stack.getSize());
125 if (stack.isCommodityStack()) { // should be always, but just in case
126 int num = (int) stack.getSize();
127 AddRemoveCommodity.addCommodityLossText(stack.getCommodityId(), num, text);
128
129 String key = "$turnedIn_" + stack.getCommodityId();
130 int turnedIn = faction.getMemoryWithoutUpdate().getInt(key);
131 faction.getMemoryWithoutUpdate().set(key, turnedIn + num);
132
133 // Also, total of all cores! -dgb
134 String key2 = "$turnedIn_allCores";
135 int turnedIn2 = faction.getMemoryWithoutUpdate().getInt(key2);
136 faction.getMemoryWithoutUpdate().set(key2, turnedIn2 + num);
137 }
138 }
139
140 float bounty = computeCoreCreditValue(cargo);
141 float repChange = computeCoreReputationValue(cargo);
142
143 if (bounty > 0) {
144 playerCargo.getCredits().add(bounty);
146 }
147
148 if (repChange >= 1f) {
149 CustomRepImpact impact = new CustomRepImpact();
150 impact.delta = repChange * 0.01f;
152 new RepActionEnvelope(RepActions.CUSTOM, impact,
153 null, text, true),
154 faction.getId());
155
156 impact.delta *= 0.25f;
157 if (impact.delta >= 0.01f) {
159 new RepActionEnvelope(RepActions.CUSTOM, impact,
160 null, text, true),
161 person);
162 }
163 }
164
165 FireBest.fire(null, dialog, memoryMap, "AICoresTurnedIn");
166 }
167 public void cancelledCargoSelection() {
168 }
169 public void recreateTextPanel(TooltipMakerAPI panel, CargoAPI cargo, CargoStackAPI pickedUp, boolean pickedUpFromSource, CargoAPI combined) {
170
171 float bounty = computeCoreCreditValue(combined);
172 float repChange = computeCoreReputationValue(combined);
173
174 float pad = 3f;
175 float small = 5f;
176 float opad = 10f;
177
178 panel.setParaFontOrbitron();
180 //panel.addTitle(Misc.ucFirst(faction.getDisplayName()), faction.getBaseUIColor());
181 //panel.addPara(faction.getDisplayNameLong(), faction.getBaseUIColor(), opad);
182 //panel.addPara(faction.getDisplayName() + " (" + entity.getMarket().getName() + ")", faction.getBaseUIColor(), opad);
183 panel.setParaFontDefault();
184
185 panel.addImage(faction.getLogo(), width * 1f, 3f);
186
187
188 //panel.setParaFontColor(Misc.getGrayColor());
189 //panel.setParaSmallInsignia();
190 //panel.setParaInsigniaLarge();
191 panel.addPara("Compared to dealing with other factions, turning AI cores in to " +
193 "will result in:", opad);
194 panel.beginGridFlipped(width, 1, 40f, 10f);
195 //panel.beginGrid(150f, 1);
196 panel.addToGrid(0, 0, "Bounty value", "" + (int)(valueMult * 100f) + "%");
197 panel.addToGrid(0, 1, "Reputation gain", "" + (int)(repMult * 100f) + "%");
198 panel.addGrid(pad);
199
200 panel.addPara("If you turn in the selected AI cores, you will receive a %s bounty " +
201 "and your standing with " + faction.getDisplayNameWithArticle() + " will improve by %s points.",
202 opad * 1f, Misc.getHighlightColor(),
203 Misc.getWithDGS(bounty) + Strings.C,
204 "" + (int) repChange);
205
206
207 //panel.addPara("Bounty: %s", opad, Misc.getHighlightColor(), Misc.getWithDGS(bounty) + Strings.C);
208 //panel.addPara("Reputation: %s", pad, Misc.getHighlightColor(), "+12");
209 }
210 });
211 }
212
213 protected float computeCoreCreditValue(CargoAPI cargo) {
214 float bounty = 0;
215 for (CargoStackAPI stack : cargo.getStacksCopy()) {
216 CommoditySpecAPI spec = stack.getResourceIfResource();
217 if (spec != null && spec.getDemandClass().equals(Commodities.AI_CORES)) {
218 bounty += spec.getBasePrice() * stack.getSize();
219 }
220 }
221 bounty *= valueMult;
222 return bounty;
223 }
224
225 protected float computeCoreReputationValue(CargoAPI cargo) {
226 float rep = 0;
227 for (CargoStackAPI stack : cargo.getStacksCopy()) {
228 CommoditySpecAPI spec = stack.getResourceIfResource();
229 if (spec != null && spec.getDemandClass().equals(Commodities.AI_CORES)) {
230 rep += getBaseRepValue(spec.getId()) * stack.getSize();
231 }
232 }
233 rep *= repMult;
234 //if (rep < 1f) rep = 1f;
235 return rep;
236 }
237
238 public static float getBaseRepValue(String coreType) {
239 if (Commodities.OMEGA_CORE.equals(coreType)) {
240 return 15f;
241 }
242 if (Commodities.ALPHA_CORE.equals(coreType)) {
243 return 5f;
244 }
245 if (Commodities.BETA_CORE.equals(coreType)) {
246 return 2f;
247 }
248 if (Commodities.GAMMA_CORE.equals(coreType)) {
249 return 1f;
250 }
251 return 1f;
252 }
253
254
255 protected boolean playerHasCores() {
256 for (CargoStackAPI stack : playerCargo.getStacksCopy()) {
257 CommoditySpecAPI spec = stack.getResourceIfResource();
258 if (spec != null && spec.getDemandClass().equals(Commodities.AI_CORES)) {
259 return true;
260 }
261 }
262 return false;
263 }
264
265
266
267}
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
static FactoryAPI getFactory()
Definition Global.java:41
static SectorAPI getSector()
Definition Global.java:65
static void addCommodityLossText(String commodityId, int quantity, TextPanelAPI text)
static void addCreditsGainText(int credits, TextPanelAPI text)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
Definition FireBest.java:56
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition AICores.java:55
static String getWithDGS(float num)
Definition Misc.java:1381
static String ucFirst(String str)
Definition Misc.java:559
static Color getHighlightColor()
Definition Misc.java:792
CargoAPI createCargo(boolean unlimitedStacks)
void addFromStack(CargoStackAPI stack)
boolean removeItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
List< CargoStackAPI > getStacksCopy()
void showCargoPickerDialog(String title, String okText, String cancelText, boolean small, float textPanelWidth, CargoAPI cargo, CargoPickerListener listener)
ReputationAdjustmentResult adjustPlayerReputation(Object action, String factionId)
void set(String key, Object value)
void addImage(String spriteName, float pad)
Object addToGrid(int x, int y, String label, String value)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)
void beginGridFlipped(float itemWidth, int cols, float valueWidth, float valuePad)