144 if (data.stabilityHistory.size() < max)
return false;
145 if (data.stabilityHistory.get(0) > 0 || market.getStabilityValue() > 0)
return false;
149 boolean streakEnded =
false;
150 for (
int i = data.stabilityHistory.size() - 1; i >= 0; i--) {
151 Float curr = data.stabilityHistory.get(i);
154 if (!streakEnded) streak++;
160 if (streak < min)
return false;
161 if (zeroCount / max < fraction)
return false;
163 if (Misc.isStoryCritical(market))
return false;
165 float prob = (streak - min) * per;
168 String
id = market.getId();
179 if (
random.nextFloat() >= prob)
return false;
189 public static void decivilize(MarketAPI market,
boolean fullDestroy,
boolean withIntel) {
190 if (market.getMemoryWithoutUpdate().getBoolean(
NO_DECIV_KEY) && !fullDestroy)
return;
197 if (market.getPrimaryEntity().isDiscoverable())
return;
199 ListenerUtil.reportColonyAboutToBeDecivilized(market, fullDestroy);
206 market.setAdmin(
null);
208 for (SectorEntityToken entity : market.getConnectedEntities()) {
209 entity.setFaction(Factions.NEUTRAL);
212 market.setPlanetConditionMarketOnly(
true);
213 market.setFactionId(Factions.NEUTRAL);
215 market.getCommDirectory().clear();
216 for (PersonAPI person : market.getPeopleCopy()) {
217 market.removePerson(person);
219 market.clearCommodities();
221 for (MarketConditionAPI mc :
new ArrayList<MarketConditionAPI>(market.getConditions())) {
222 if (mc.getSpec().isDecivRemove()) {
223 market.removeSpecificCondition(mc.getIdForPluginModifications());
227 for (Industry ind :
new ArrayList<Industry>(market.getIndustries())) {
228 market.removeIndustry(ind.getId(),
null,
false);
231 if (!fullDestroy && !market.hasCondition(Conditions.DECIVILIZED)) {
232 market.addCondition(Conditions.DECIVILIZED);
235 int size = market.getSize();
236 market.removeCondition(Conditions.RUINS_SCATTERED);
237 market.removeCondition(Conditions.RUINS_WIDESPREAD);
238 market.removeCondition(Conditions.RUINS_EXTENSIVE);
239 market.removeCondition(Conditions.RUINS_VAST);
242 id = market.addCondition(Conditions.RUINS_SCATTERED);
243 }
else if (size <= 4) {
244 id = market.addCondition(Conditions.RUINS_WIDESPREAD);
245 }
else if (size <= 6) {
246 id = market.addCondition(Conditions.RUINS_EXTENSIVE);
248 id = market.addCondition(Conditions.RUINS_VAST);
251 MarketConditionAPI ruins = market.getSpecificCondition(
id);
253 ruins.setSurveyed(
true);
257 market.getMemoryWithoutUpdate().set(
"$wasCivilized",
true);
260 market.getPopulation().setWeight(CoreImmigrationPluginImpl.getWeightForMarketSizeStatic(market.getSize()));
261 market.getPopulation().normalize();
263 for (SubmarketAPI sub : market.getSubmarketsCopy()) {
264 market.removeSubmarket(sub.getSpecId());
267 for (SectorEntityToken entity : market.getConnectedEntities()) {
268 if (!(entity instanceof PlanetAPI)) {
269 Misc.setAbandonedStationMarket(market.getId() +
"_deciv", entity);
273 SectorEntityToken primary = market.getPrimaryEntity();
274 market.getConnectedEntities().clear();
275 market.setPrimaryEntity(primary);
276 market.setPlayerOwned(
false);
279 Misc.removeRadioChatter(market);
282 ListenerUtil.reportColonyDecivilized(market, fullDestroy);
292 market.setAdmin(
null);
294 for (SectorEntityToken entity : market.getConnectedEntities()) {
295 entity.setFaction(Factions.NEUTRAL);
298 market.setPlanetConditionMarketOnly(
true);
299 market.setFactionId(Factions.NEUTRAL);
301 market.getCommDirectory().clear();
302 for (PersonAPI person : market.getPeopleCopy()) {
303 market.removePerson(person);
305 market.clearCommodities();
307 for (MarketConditionAPI mc :
new ArrayList<MarketConditionAPI>(market.getConditions())) {
308 if (mc.getSpec().isDecivRemove()) {
309 market.removeSpecificCondition(mc.getIdForPluginModifications());
313 for (Industry ind :
new ArrayList<Industry>(market.getIndustries())) {
314 market.removeIndustry(ind.getId(),
null,
false);
318 int size = market.getSize();
319 market.removeCondition(Conditions.RUINS_SCATTERED);
320 market.removeCondition(Conditions.RUINS_WIDESPREAD);
321 market.removeCondition(Conditions.RUINS_EXTENSIVE);
322 market.removeCondition(Conditions.RUINS_VAST);
324 market.addCondition(Conditions.RUINS_SCATTERED);
325 }
else if (size <= 4) {
326 market.addCondition(Conditions.RUINS_WIDESPREAD);
327 }
else if (size <= 6) {
328 market.addCondition(Conditions.RUINS_EXTENSIVE);
330 market.addCondition(Conditions.RUINS_VAST);
334 market.getMemoryWithoutUpdate().set(
"$wasCivilized",
true);
337 market.getPopulation().setWeight(CoreImmigrationPluginImpl.getWeightForMarketSizeStatic(market.getSize()));
338 market.getPopulation().normalize();
340 for (SubmarketAPI sub : market.getSubmarketsCopy()) {
341 market.removeSubmarket(sub.getSpecId());
344 for (SectorEntityToken entity : market.getConnectedEntities()) {
345 if (!(entity instanceof PlanetAPI)) {
346 Misc.setAbandonedStationMarket(market.getId() +
"_deciv", entity);
350 market.setIncentiveCredits(0);
352 SectorEntityToken primary = market.getPrimaryEntity();
353 market.getConnectedEntities().clear();
354 market.setPrimaryEntity(primary);
355 market.setPlayerOwned(
false);
358 Misc.removeRadioChatter(market);