Starsector API
Loading...
Searching...
No Matches
ZGRTurnIn.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.rules.MemoryAPI;
17import com.fs.starfarer.api.characters.PersonAPI;
18import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
19import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
21import com.fs.starfarer.api.impl.campaign.ids.Strings;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
23import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
24import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
25import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
26import com.fs.starfarer.api.ui.TooltipMakerAPI;
27import com.fs.starfarer.api.util.Misc;
28import com.fs.starfarer.api.util.Misc.Token;
29
34public class ZGRTurnIn extends BaseCommandPlugin {
35
36 public static float VALUE_MULT = 3f;
37 public static float REP_MULT = 0.2f;
38
43 protected TextPanelAPI text;
46 protected MemoryAPI memory;
48 protected Map<String, MemoryAPI> memoryMap;
49 protected PersonAPI person;
51
52 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
53
54 this.dialog = dialog;
55 this.memoryMap = memoryMap;
56
57 String command = params.get(0).getString(memoryMap);
58 if (command == null) return false;
59
61
65
68
71
74
75 if (command.equals("selectSellableItems")) {
77 } else if (command.equals("playerHasSellableItems")) {
79 }
80
81 return true;
82 }
83
84
85 protected void selectSellableItems() {
87
88 final float width = 310f;
89 dialog.showCargoPickerDialog("Select items to turn in", "Confirm", "Cancel", true, width, copy, new CargoPickerListener() {
90 public void pickedCargo(CargoAPI cargo) {
91 if (cargo.isEmpty()) {
92 cancelledCargoSelection();
93 return;
94 }
95
96 cargo.sort();
97
98 float bountyThreat = 0;
99 float bountyMonster = 0;
101
102 for (CargoStackAPI stack : cargo.getStacksCopy()) {
103 playerCargo.removeItems(stack.getType(), stack.getData(), stack.getSize());
104 int num = (int) stack.getSize();
106 if (isThreatStack(stack)) {
107 bountyThreat += num * stack.getBaseValuePerUnit() * VALUE_MULT;
108 } else if (isMonsterStack(stack)) {
109 bountyMonster += num * stack.getBaseValuePerUnit() * VALUE_MULT;
110 }
111 }
112
113 float repChange = computeReputationValue(cargo);
114
115 int bounty = (int) (bountyThreat + bountyMonster);
116 if (bounty > 0) {
117 playerCargo.getCredits().add(bounty);
119
120 String soldTotalKey = "$itemValueSoldToZGRThreat";
121 int curr = mem.getInt(soldTotalKey);
122 curr += bountyThreat;
123 mem.set(soldTotalKey, curr);
124
125 soldTotalKey = "$itemValueSoldToZGRMonster";
126 curr = mem.getInt(soldTotalKey);
127 curr += bountyMonster;
128 mem.set(soldTotalKey, curr);
129
130 soldTotalKey = "$itemValueSoldToZGRTotal";
131 curr = mem.getInt(soldTotalKey);
132 curr += bounty;
133 mem.set(soldTotalKey, curr);
134
135 }
136
137 if (repChange >= 1f) {
138 CustomRepImpact impact = new CustomRepImpact();
139 impact.delta = repChange * 0.01f;
141 new RepActionEnvelope(RepActions.CUSTOM, impact,
142 null, text, true),
143 faction.getId());
144
145 impact.delta *= 0.25f;
146 if (impact.delta >= 0.01f) {
148 new RepActionEnvelope(RepActions.CUSTOM, impact,
149 null, text, true),
150 person);
151 }
152 }
153
154 mem.set("$itemValueSoldToZGRJustNowThreat", (int)bountyThreat, 0);
155 mem.set("$itemValueSoldToZGRJustNowMonster", (int)bountyMonster, 0);
156 mem.set("$itemValueSoldToZGRJustNowTotal", (int)bounty, 0);
157 FireBest.fire(null, dialog, memoryMap, "ZGRItemsTurnedIn");
158 }
159 public void cancelledCargoSelection() {
160 }
161 public void recreateTextPanel(TooltipMakerAPI panel, CargoAPI cargo, CargoStackAPI pickedUp, boolean pickedUpFromSource, CargoAPI combined) {
162
163 float bounty = 0f;
164 for (CargoStackAPI stack : combined.getStacksCopy()) {
165 int num = (int) stack.getSize();
166 bounty += num * stack.getBaseValuePerUnit() * VALUE_MULT;
167 }
168
169 float repChange = computeReputationValue(combined);
170
171 float pad = 3f;
172 float small = 5f;
173 float opad = 10f;
174
175 panel.setParaFontOrbitron();
177 //panel.addTitle(Misc.ucFirst(faction.getDisplayName()), faction.getBaseUIColor());
178 //panel.addPara(faction.getDisplayNameLong(), faction.getBaseUIColor(), opad);
179 //panel.addPara(faction.getDisplayName() + " (" + entity.getMarket().getName() + ")", faction.getBaseUIColor(), opad);
180 panel.setParaFontDefault();
181
182 panel.addImage(faction.getLogo(), width * 1f, 3f);
183
184 panel.addPara("If you turn in the selected items, you will receive a %s bounty " +
185 "and your standing with " + faction.getDisplayNameWithArticle() + " will improve by %s points.",
186 opad * 1f, Misc.getHighlightColor(),
187 Misc.getWithDGS(bounty) + Strings.C,
188 "" + (int) repChange);
189 }
190 });
191 }
192
193 protected float computeReputationValue(CargoAPI cargo) {
194 float rep = 0;
195 for (CargoStackAPI stack : cargo.getStacksCopy()) {
196 rep += getBaseRepValue(stack) * stack.getSize();
197 }
198 rep *= REP_MULT;
199 return rep;
200 }
201
202 public static float getBaseRepValue(CargoStackAPI stack) {
203 if (stack.isWeaponStack()) {
204 switch (stack.getWeaponSpecIfWeapon().getSize()) {
205 case LARGE: return 3f;
206 case MEDIUM: return 2f;
207 case SMALL: return 1f;
208 }
209 }
210 if (stack.isSpecialStack()) {
211 return 5f;
212 }
213 return 1f;
214 }
215
216
217 protected boolean playerHasSellableItems() {
218 return !getSellableItems().isEmpty();
219 }
220
221 public static boolean isThreatStack(CargoStackAPI stack) {
222 boolean match = false;
223 match |= stack.isWeaponStack() && stack.getWeaponSpecIfWeapon().hasTag(Tags.THREAT);
224 match |= stack.isSpecialStack() && stack.getSpecialItemSpecIfSpecial().hasTag(Tags.THREAT);
225 return match;
226 }
227 public static boolean isMonsterStack(CargoStackAPI stack) {
228 boolean match = false;
229 match |= stack.isWeaponStack() && stack.getWeaponSpecIfWeapon().hasTag(Tags.MONSTER);
230 match |= stack.isSpecialStack() && stack.getSpecialItemSpecIfSpecial().hasTag(Tags.MONSTER);
231 return match;
232 }
233
235 CargoAPI copy = Global.getFactory().createCargo(false);
236 for (CargoStackAPI stack : playerCargo.getStacksCopy()) {
237 boolean match = isThreatStack(stack) || isMonsterStack(stack);
238 if (match) {
239 copy.addFromStack(stack);
240 }
241 }
242 copy.sort();
243 return copy;
244 }
245
246
247}
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
static FactoryAPI getFactory()
Definition Global.java:41
static SectorAPI getSector()
Definition Global.java:65
static void addStackLossText(CargoStackAPI stack, 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)
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()
SpecialItemSpecAPI getSpecialItemSpecIfSpecial()
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)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)