Starsector API
Loading...
Searching...
No Matches
PK_CMD.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.InteractionDialogAPI;
12import com.fs.starfarer.api.campaign.OptionPanelAPI;
13import com.fs.starfarer.api.campaign.PlanetAPI;
14import com.fs.starfarer.api.campaign.TextPanelAPI;
15import com.fs.starfarer.api.campaign.econ.MarketAPI;
16import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
17import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
18import com.fs.starfarer.api.campaign.rules.MemKeys;
19import com.fs.starfarer.api.campaign.rules.MemoryAPI;
20import com.fs.starfarer.api.characters.PersonAPI;
21import com.fs.starfarer.api.combat.ShipVariantAPI;
22import com.fs.starfarer.api.fleet.FleetMemberAPI;
23import com.fs.starfarer.api.fleet.FleetMemberType;
24import com.fs.starfarer.api.impl.campaign.ids.Conditions;
25import com.fs.starfarer.api.impl.campaign.ids.Factions;
26import com.fs.starfarer.api.impl.campaign.ids.HullMods;
27import com.fs.starfarer.api.impl.campaign.ids.Industries;
28import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
29import com.fs.starfarer.api.impl.campaign.ids.People;
30import com.fs.starfarer.api.impl.campaign.ids.Ranks;
31import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
32import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
33import com.fs.starfarer.api.impl.campaign.missions.RecoverAPlanetkiller;
34import com.fs.starfarer.api.impl.campaign.shared.SharedData;
35import com.fs.starfarer.api.impl.campaign.submarkets.StoragePlugin;
36import com.fs.starfarer.api.util.Misc;
37import com.fs.starfarer.api.util.Misc.Token;
38
44public class PK_CMD extends BaseCommandPlugin {
45
46 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
47 if (dialog == null) return false;
48
49 OptionPanelAPI options = dialog.getOptionPanel();
50 TextPanelAPI text = dialog.getTextPanel();
51 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
52 CargoAPI cargo = pf.getCargo();
53
54
55 String action = params.get(0).getString(memoryMap);
56
57 MemoryAPI memory = memoryMap.get(MemKeys.LOCAL);
58 if (memory == null) return false; // should not be possible unless there are other big problems already
59
60// MarketAPI market = dialog.getInteractionTarget().getMarket();
61// StarSystemAPI system = null;
62// if (dialog.getInteractionTarget().getContainingLocation() instanceof StarSystemAPI) {
63// system = (StarSystemAPI) dialog.getInteractionTarget().getContainingLocation();
64// }
65
66 if ("removePKDefenses".equals(action)) {
67 return removePKDefenses(dialog, memory);
68 } else if ("convertSentinelToColony".equals(action)) {
69 return convertSentinelToColony(text, cargo);
70 } else if ("rightPostToAcceptPK".equals(action)) {
71 return rightPostToAcceptPK(dialog);
72 } else if ("rightPostToTellAboutSentinel".equals(action)) {
73 return rightPostToTellAboutSentinel(dialog);
74 } else if ("giveExecutor".equals(action)) {
75 giveExecutor(dialog, params, memoryMap);
76 }
77
78 return false;
79 }
80
81
82 protected boolean convertSentinelToColony(TextPanelAPI text, CargoAPI cargo) {
83 //int crew = 100;
84 //cargo.removeCrew(crew);
85 //AddRemoveCommodity.addCommodityLossText(Commodities.CREW, crew, text);
86 // Crew removal handled in rules.
87
88 PlanetAPI planet = RecoverAPlanetkiller.getTundra();
89 MarketAPI market = planet.getMarket();
90
91 //market.addTag(Tags.MARKET_NO_OFFICER_SPAWN);
92
93 market.setSurveyLevel(SurveyLevel.FULL);
94 for (MarketConditionAPI mc : market.getConditions()) {
95 mc.setSurveyed(true);
96 }
97
98 market.setName(planet.getName());
99 planet.setFaction(Factions.HEGEMONY);
100
101 market.setDaysInExistence(0);
102 market.setPlanetConditionMarketOnly(false);
103 market.setFactionId(Factions.HEGEMONY);
104 market.addCondition(Conditions.POPULATION_3);
105 market.addIndustry(Industries.POPULATION);
106 market.addIndustry(Industries.FARMING);
107
108 market.setSize(3);
109
110 market.addSubmarket(Submarkets.SUBMARKET_OPEN);
111 market.addSubmarket(Submarkets.SUBMARKET_BLACK);
112 market.addSubmarket(Submarkets.SUBMARKET_STORAGE);
113 //((StoragePlugin)market.getSubmarket(Submarkets.SUBMARKET_STORAGE).getPlugin()).setPlayerPaidToUnlock(true);
114
115 market.getSubmarket(Submarkets.SUBMARKET_OPEN).getPlugin().updateCargoPrePlayerInteraction();
116 market.getSubmarket(Submarkets.SUBMARKET_OPEN).getPlugin().getCargo().clear();
117 if (market.getSubmarket(Submarkets.SUBMARKET_OPEN).getPlugin().getCargo().getMothballedShips() != null) {
118 market.getSubmarket(Submarkets.SUBMARKET_OPEN).getPlugin().getCargo().getMothballedShips().clear();
119 }
120 market.getSubmarket(Submarkets.SUBMARKET_BLACK).getPlugin().updateCargoPrePlayerInteraction();
121 market.getSubmarket(Submarkets.SUBMARKET_BLACK).getPlugin().getCargo().clear();
122 if (market.getSubmarket(Submarkets.SUBMARKET_BLACK).getPlugin().getCargo().getMothballedShips() != null) {
123 market.getSubmarket(Submarkets.SUBMARKET_BLACK).getPlugin().getCargo().getMothballedShips().clear();
124 }
125
126 market.getTariff().modifyFlat("default_tariff", market.getFaction().getTariffFraction());
127
128 planet.setMarket(market);
129 market.setPrimaryEntity(planet);
130 market.setPlayerOwned(false);
131
132 Global.getSector().getEconomy().addMarket(market, false);
133 Global.getSector().getEconomy().tripleStep();
134 market.advance(0f);
135 market.getConstructionQueue().addToEnd(Industries.SPACEPORT, 0);
136
137 //market.getConditions();
138
139 SharedData.getData().getMarketsWithoutTradeFleetSpawn().add(market.getId());
140
141 PersonAPI skiron = People.getPerson(People.SKIRON);
142 market.setAdmin(skiron);
143 market.getCommDirectory().addPerson(skiron, 0);
144 market.addPerson(skiron);
145
146 market.getPrimaryEntity().setInteractionImage("illustrations", "sentinel2");
147
148 return true;
149 }
150
151
152
153 protected void giveExecutor(InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
154 boolean removeSpecial = params.get(1).getBoolean(memoryMap);
155
156 ShipVariantAPI v = Global.getSettings().getVariant("executor_Hull").clone();
157 if (removeSpecial) {
158 v.addSuppressedMod(HullMods.ANDRADA_MODS);
159 }
160 FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, v);
161 Global.getSector().getPlayerFleet().getFleetData().addFleetMember(member);
162 AddShip.addShipGainText(member, dialog.getTextPanel());
163 }
164
165
166 protected boolean rightPostToAcceptPK(InteractionDialogAPI dialog) {
167 PersonAPI person = dialog.getInteractionTarget().getActivePerson();
168 if (person.getMemoryWithoutUpdate().getBoolean(LuddicPathBaseIntel.PATHER_BASE_COMMANDER)) {
169 return true;
170 }
171 return Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
172 Ranks.POST_STATION_COMMANDER.equals(person.getPostId()) ||
173 //Ranks.POST_ADMINISTRATOR.equals(person.getPostId()) || // just military, no regular admins
174 Ranks.POST_OUTPOST_COMMANDER.equals(person.getPostId());
175 }
176
177 protected boolean rightPostToTellAboutSentinel(InteractionDialogAPI dialog) {
178 PersonAPI person = dialog.getInteractionTarget().getActivePerson();
179 return Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
180 Ranks.POST_STATION_COMMANDER.equals(person.getPostId()) ||
181 Ranks.POST_ADMINISTRATOR.equals(person.getPostId()) ||
182 Ranks.POST_OUTPOST_COMMANDER.equals(person.getPostId());
183 }
184
185 protected boolean removePKDefenses(InteractionDialogAPI dialog, MemoryAPI memory) {
186 CampaignFleetAPI defenders = memory.getFleet("$defenderFleet");
187 if (defenders != null) {
188 memory.unset("$defenderFleet");
189 memory.set("$defenderFleetDefeated", true);
190 memory.set("$hasDefenders", false, 0);
191 dialog.getInteractionTarget().getContainingLocation().addEntity(defenders);
192 defenders.setAI(null);
193 defenders.setNullAIActionText("dormant");
194 Vector2f loc = dialog.getInteractionTarget().getLocation();
195 defenders.setLocation(loc.x, loc.y + 100f);
196 defenders.setCircularOrbit(dialog.getInteractionTarget().getOrbitFocus(), 90f, 100f, 20f);
197 defenders.getMemoryWithoutUpdate().set("$pkDefenderFleet", true);
198 defenders.getMemoryWithoutUpdate().set(MemFlags.FLEET_IGNORED_BY_OTHER_FLEETS, true);
199 //Misc.addDefeatTrigger(defenders, "PK14thDefeated"); // handled elsewhere so the trigger is set in all cases
200 Misc.makeNoRepImpact(defenders, "pk");
201 }
202 return true;
203 }
204
205
206
207}
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
static void addShipGainText(FleetMemberAPI member, TextPanelAPI text)
Definition AddShip.java:33
void giveExecutor(InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition PK_CMD.java:153
boolean rightPostToAcceptPK(InteractionDialogAPI dialog)
Definition PK_CMD.java:166
boolean removePKDefenses(InteractionDialogAPI dialog, MemoryAPI memory)
Definition PK_CMD.java:185
boolean convertSentinelToColony(TextPanelAPI text, CargoAPI cargo)
Definition PK_CMD.java:82
boolean rightPostToTellAboutSentinel(InteractionDialogAPI dialog)
Definition PK_CMD.java:177
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition PK_CMD.java:46
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
ShipVariantAPI getVariant(String variantId)