1package com.fs.starfarer.api.impl.campaign.plog;
3import java.io.UnsupportedEncodingException;
4import java.util.ArrayList;
5import java.util.Arrays;
6import java.util.Iterator;
7import java.util.LinkedHashMap;
8import java.util.LinkedHashSet;
11import java.util.zip.DataFormatException;
12import java.util.zip.Deflater;
13import java.util.zip.Inflater;
15import com.fs.starfarer.api.Global;
16import com.fs.starfarer.api.campaign.CampaignClockAPI;
17import com.fs.starfarer.api.campaign.CargoAPI;
18import com.fs.starfarer.api.campaign.InteractionDialogAPI;
19import com.fs.starfarer.api.campaign.PlanetAPI;
20import com.fs.starfarer.api.campaign.PlayerMarketTransaction;
21import com.fs.starfarer.api.campaign.PlayerMarketTransaction.ShipSaleInfo;
22import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
23import com.fs.starfarer.api.campaign.econ.Industry;
24import com.fs.starfarer.api.campaign.econ.MarketAPI;
25import com.fs.starfarer.api.campaign.listeners.ColonyInteractionListener;
26import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
27import com.fs.starfarer.api.campaign.listeners.EconomyTickListener;
28import com.fs.starfarer.api.campaign.listeners.PlayerColonizationListener;
29import com.fs.starfarer.api.combat.ShipAPI.HullSize;
30import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
31import com.fs.starfarer.api.impl.campaign.terrain.BaseTiledTerrain;
32import com.fs.starfarer.api.plugins.SurveyPlugin;
35 ColonyInteractionListener,
37 PlayerColonizationListener,
38 ColonyPlayerHostileActListener {
40 public static final String
KEY =
"$core_playthroughLog";
51 public static class PLIntelUIData {
52 public LinkedHashSet<String> selectedGraphs =
new LinkedHashSet<String>();
55 protected List<PLEntry>
entries =
new ArrayList<PLEntry>();
56 protected Map<String, PLStat>
stats =
new LinkedHashMap<String, PLStat>();
57 protected PLIntelUIData
uiData =
new PLIntelUIData();
59 transient protected List<PLSnapshot>
data =
new ArrayList<PLSnapshot>();
90 for (String key :
stats.keySet()) {
105 for (ShipSaleInfo info : transaction.getShipsBought()) {
106 HullSize size = info.getMember().getHullSpec().getHullSize();
109 addEntry(
"Bought " + info.getMember().getVariant().getHullSpec().getNameWithDesignationWithDashClass());
115 addEntry(
"Saturation-bombarded " + market.getName() +
" (" +
116 "size " + (market.getSize() + 1) +
" " + market.getFaction().getEntityNamePrefix() +
" colony)");
121 if (colony.getPlanetEntity() !=
null) {
123 String cid = plugin.getSurveyDataType(colony.getPlanetEntity());
125 extra =
" (" + pClass.getName() +
" " + colony.getPlanetEntity().getTypeNameWithLowerCaseWorld() +
")";
127 addEntry(
"Abdandoned size " + colony.getSize() +
" colony " + colony.getOnOrAt() +
" " + colony.getName() + extra);
132 String cid = plugin.getSurveyDataType(planet);
134 addEntry(
"Established colony on " + planet.getName() +
" (" +
135 pClass.getName().replaceAll(
" Survey Data",
"") +
" " + planet.getTypeNameWithLowerCaseWorld() +
")");
142 for (String key :
stats.keySet()) {
147 value += (int)((
float) Math.random() * 500);
148 value -= (int)((
float) Math.random() * 500);
149 if (value < 0) value = 0;
152 snapshot.
getData().put(key, value);
177 while (iter.hasNext()) {
179 if (record.
personId.equals(personId) && record.
skillId.equals(skillId) && record.
elite == elite) {
187 protected Object
readResolve() throws DataFormatException, UnsupportedEncodingException {
189 stats =
new LinkedHashMap<String, PLStat>();
193 data =
new ArrayList<PLSnapshot>();
204 byte [] input = BaseTiledTerrain.toByteArray(
saved);
206 Inflater decompressor =
new Inflater();
207 decompressor.setInput(input);
209 StringBuilder result =
new StringBuilder();
210 byte [] temp =
new byte[100];
211 while (!decompressor.finished()) {
212 int read = decompressor.inflate(temp);
214 result.append(
new String(temp, 0, read,
"UTF-8"));
219 saved = result.toString();
223 String [] parts =
saved.split(
"\n");
224 for (String p : parts) {
225 if (p.isEmpty())
continue;
235 saved += s.getString() +
"\n";
237 if (!
saved.isEmpty()) {
241 Deflater compressor =
new Deflater();
242 compressor.setInput(
saved.getBytes(
"UTF-8"));
245 StringBuilder result =
new StringBuilder();
246 byte [] temp =
new byte[100];
247 while (!compressor.finished()) {
248 int read = compressor.deflate(temp);
249 result.append(BaseTiledTerrain.toHexString(Arrays.copyOf(temp, read)));
253 saved = result.toString();
272 if (index < 0 || index >=
data.size()) {
289 if (
data.isEmpty())
return 0;
290 Long val =
data.get(
data.size() - 1).getData().get(key);
291 if (val ==
null)
return 0;
315 uiData =
new PLIntelUIData();
static SettingsAPI getSettings()
static SectorAPI getSector()
Map< String, Long > getData()
long getPrevValue(String key)
void removeOfficerSkillRecord(String personId, String skillId, boolean elite)
CampaignClockAPI getDateForIndex(int index)
List< SModRecord > smodsInstalled
void reportPlayerOpenedMarketAndCargoUpdated(MarketAPI market)
void reportPlayerClosedMarket(MarketAPI market)
List< OfficerSkillGainRecord > officerSkillsLearned
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void reportEconomyTick(int iterIndex)
void reportPlayerColonizedPlanet(PlanetAPI planet)
List< PLSnapshot > getData()
PLIntelUIData getUIData()
void reportPlayerOpenedMarket(MarketAPI market)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
static PlaythroughLog getInstance()
List< PLEntry > getEntries()
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
Map< String, PLStat > getStats()
void addSModsInstalled(SModRecord record)
void addStat(PLStat stat)
List< OfficerSkillGainRecord > getOfficerSkillsLearned()
void takeSnapshot(boolean debug)
Map< String, PLStat > stats
List< SModRecord > getSModsInstalled()
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
void reportPlayerMarketTransaction(PlayerMarketTransaction transaction)
transient List< PLSnapshot > data
void reportPlayerAbandonedColony(MarketAPI colony)
void addOfficerSkillRecord(OfficerSkillGainRecord record)
void reportEconomyMonthEnd()
void addEntry(PLEntry entry)
void addEntry(String text)
void addEntry(String text, boolean story)
Object getNewPluginInstance(String id)
CommoditySpecAPI getCommoditySpec(String commodityId)
long getValueForAllAccrued()