Starsector API
Loading...
Searching...
No Matches
RedPlanet.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;
5import java.util.Random;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.CoreInteractionListener;
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.PlanetAPI;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.SpecialItemData;
17import com.fs.starfarer.api.campaign.TextPanelAPI;
18import com.fs.starfarer.api.campaign.econ.MarketAPI;
19import com.fs.starfarer.api.campaign.listeners.ListenerUtil;
20import com.fs.starfarer.api.campaign.rules.MemoryAPI;
21import com.fs.starfarer.api.impl.campaign.econ.impl.PlanetaryShield;
22import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
23import com.fs.starfarer.api.impl.campaign.intel.bar.events.PlanetaryShieldIntel;
24import com.fs.starfarer.api.impl.campaign.intel.bar.events.PlanetaryShieldIntel.PSIStage;
25import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
26import com.fs.starfarer.api.impl.campaign.procgen.themes.MiscellaneousThemeGenerator;
27import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
28import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial;
29import com.fs.starfarer.api.util.Misc;
30import com.fs.starfarer.api.util.Misc.Token;
31
35public class RedPlanet extends BaseCommandPlugin {
36
37 protected CampaignFleetAPI playerFleet;
38 protected SectorEntityToken entity;
39 protected PlanetAPI planet;
40 protected FactionAPI playerFaction;
41 protected FactionAPI entityFaction;
42 protected TextPanelAPI text;
43 protected OptionPanelAPI options;
44 protected CargoAPI playerCargo;
45 protected MemoryAPI memory;
46 protected MarketAPI market;
47 protected InteractionDialogAPI dialog;
48 protected Map<String, MemoryAPI> memoryMap;
49 protected FactionAPI faction;
50
51
52 public RedPlanet() {
53 }
54
55 public RedPlanet(SectorEntityToken entity) {
56 init(entity);
57 }
58
59 protected void init(SectorEntityToken entity) {
60 memory = entity.getMemoryWithoutUpdate();
61 this.entity = entity;
62 planet = (PlanetAPI) entity;
63 playerFleet = Global.getSector().getPlayerFleet();
64 playerCargo = playerFleet.getCargo();
65
66 playerFaction = Global.getSector().getPlayerFaction();
67 entityFaction = entity.getFaction();
68
69 faction = entity.getFaction();
70
71 market = entity.getMarket();
72
73
74 }
75
76 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
77 this.dialog = dialog;
78 this.memoryMap = memoryMap;
79
80 String command = params.get(0).getString(memoryMap);
81 if (command == null) return false;
82
83 entity = dialog.getInteractionTarget();
84 init(entity);
85
87
88 text = dialog.getTextPanel();
89 options = dialog.getOptionPanel();
90
91 if (command.equals("genLoot")) {
92 genLoot();
93 }
94
95 return true;
96 }
97
98 protected void genLoot() {
99
100 OptionPanelAPI options = dialog.getOptionPanel();
101 TextPanelAPI text = dialog.getTextPanel();
102
103 MemoryAPI memory = planet.getMemoryWithoutUpdate();
104 long seed = memory.getLong(MemFlags.SALVAGE_SEED);
105 Random random = Misc.getRandom(seed, 100);
106
107 DropData d = new DropData();
108 d.chances = 5;
109 d.group = "blueprints";
110 planet.addDropRandom(d);
111
112 d = new DropData();
113 d.chances = 1;
114 d.group = "rare_tech";
115 planet.addDropRandom(d);
116
117 CargoAPI salvage = SalvageEntity.generateSalvage(random, 1f, 1f, 1f, 1f, planet.getDropValue(), planet.getDropRandom());
118 CargoAPI extra = BaseSalvageSpecial.getCombinedExtraSalvage(memoryMap);
119 salvage.addAll(extra);
120 BaseSalvageSpecial.clearExtraSalvage(memoryMap);
121 if (!extra.isEmpty()) {
122 ListenerUtil.reportExtraSalvageShown(planet);
123 }
124 salvage.addSpecial(new SpecialItemData("industry_bp", "planetaryshield"), 1);
125 salvage.sort();
126
127 dialog.getVisualPanel().showLoot("Salvaged", salvage, false, true, true, new CoreInteractionListener() {
128 public void coreUIDismissed() {
129 dialog.dismiss();
130 dialog.hideTextPanel();
131 dialog.hideVisualPanel();
132
133 PlanetaryShieldIntel intel = (PlanetaryShieldIntel) Global.getSector().getIntelManager().getFirstIntel(PlanetaryShieldIntel.class);
134 if (intel != null) {
135 Global.getSector().addScript(intel);
136 intel.endAfterDelay();
137 //intel.sendUpdate(PSIStage.DONE, textPanel);
138 intel.sendUpdateIfPlayerHasIntel(PSIStage.DONE, false);
139 }
140 long xp = PlanetaryShieldIntel.FINISHED_XP;
141 Global.getSector().getPlayerPerson().getStats().addXP(xp);
142 }
143 });
144 options.clearOptions();
145 dialog.setPromptText("");
146
147
148 planet.getMemoryWithoutUpdate().unset(MiscellaneousThemeGenerator.PLANETARY_SHIELD_PLANET);
149 Global.getSector().getMemoryWithoutUpdate().unset(MiscellaneousThemeGenerator.PLANETARY_SHIELD_PLANET_KEY);
150 PlanetaryShield.unapplyVisuals(planet);
151
152// if (keptPromise) {
153// if (random.nextFloat() > 0.5f) {
154// SectorEntityToken loc = planet.getContainingLocation().createToken(planet.getLocation());
155// spawnPiratesToInvestigate(loc, 50f + random.nextFloat() * 50f);
156// if (random.nextFloat() > 0.5f) {
157// spawnPiratesToInvestigate(loc, 50f + random.nextFloat() * 50f);
158// }
159// }
160// }
161 }
162
163}
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
static SectorAPI getSector()
Definition Global.java:59
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static CargoAPI generateSalvage(Random random, float valueMult, float overallMult, float fuelMult, List< DropData > dropValue, List< DropData > dropRandom)