1package com.fs.starfarer.api.impl.campaign.skills;
3import java.util.LinkedHashSet;
4import java.util.Random;
6import com.fs.starfarer.api.EveryFrameScript;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
10import com.fs.starfarer.api.combat.ShipHullSpecAPI;
11import com.fs.starfarer.api.combat.ShipVariantAPI;
12import com.fs.starfarer.api.fleet.FleetMemberAPI;
13import com.fs.starfarer.api.impl.campaign.DModManager;
14import com.fs.starfarer.api.impl.campaign.ids.Skills;
15import com.fs.starfarer.api.impl.campaign.ids.Tags;
16import com.fs.starfarer.api.impl.campaign.intel.MessageIntel;
17import com.fs.starfarer.api.loading.HullModSpecAPI;
18import com.fs.starfarer.api.util.IntervalUtil;
19import com.fs.starfarer.api.util.Misc;
20import com.fs.starfarer.api.util.WeightedRandomPicker;
41 protected IntervalUtil
tracker =
new IntervalUtil(10f, 20f);
42 protected IntervalUtil
tracker2 =
new IntervalUtil(3f, 5f);
46 protected Random
newRandom =
new Random(Misc.genRandomSeed());
47 protected LinkedHashSet<String>
seen =
new LinkedHashSet<String>();
49 protected FleetMemberAPI
picked =
null;
50 protected String
dmod =
null;
52 Object readResolve() {
54 seen =
new LinkedHashSet<String>();
60 newRandom =
new Random(Misc.genRandomSeed());
71 if (fleet ==
null)
return;
73 if (
Global.
getSector().getPlayerStats().getSkillLevel(Skills.HULL_RESTORATION) <= 0) {
83 float dp =
picked.getDeploymentPointsCost();
91 tracker.advance(days * rateMult * 0.5f);
92 if (
tracker.intervalElapsed()) {
98 if (fleet.getFleetData().getMembersListCopy().contains(
picked) &&
104 MessageIntel intel =
new MessageIntel(
picked.getShipName() +
" - repaired " + spec.getDisplayName(), Misc.getBasePlayerColor());
126 if (fleet.getFleetData().getMembersListCopy().contains(
pickedNew) && numDmods > 0) {
128 if (
newRandom.nextFloat() < probRemove) {
132 MessageIntel intel =
new MessageIntel(
pickedNew.getShipName() +
" - repaired " + spec.getDisplayName(), Misc.getBasePlayerColor());
153 WeightedRandomPicker<FleetMemberAPI> picker =
new WeightedRandomPicker<FleetMemberAPI>();
154 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
155 if (member.getVariant().isStockVariant())
continue;
156 if (member.isMothballed())
continue;
157 if (member.getHullSpec().hasTag(Tags.HULL_UNRESTORABLE) ||
158 member.getVariant().hasTag(Tags.VARIANT_UNRESTORABLE))
continue;
161 picker.add(member, 1);
167 ShipVariantAPI variant =
picked.getVariant();
168 WeightedRandomPicker<String> modPicker =
new WeightedRandomPicker<String>();
169 for (String
id : variant.getHullMods()) {
171 if (variant.getHullSpec().getBuiltInMods().contains(
id))
continue;
175 dmod = modPicker.pick();
187 WeightedRandomPicker<FleetMemberAPI> picker =
new WeightedRandomPicker<FleetMemberAPI>();
188 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
189 if (member.getVariant().isStockVariant() || member.isMothballed() ||
190 member.getHullSpec().hasTag(Tags.HULL_UNRESTORABLE) ||
191 member.getVariant().hasTag(Tags.VARIANT_UNRESTORABLE)) {
192 seen.add(member.getId());
195 if (
seen.contains(member.getId()))
continue;
198 picker.add(member, 1);
200 seen.add(member.getId());
206 ShipVariantAPI variant =
pickedNew.getVariant();
207 WeightedRandomPicker<String> modPicker =
new WeightedRandomPicker<String>();
208 for (String
id : variant.getHullMods()) {
210 if (variant.getHullSpec().getBuiltInMods().contains(
id))
continue;
231 ShipHullSpecAPI base = v.getHullSpec().getDParentHull();
236 if (!v.getHullSpec().isDefaultDHull() && !v.getHullSpec().isRestoreToBase()) base = v.getHullSpec();
238 if (base ==
null && v.getHullSpec().isRestoreToBase()) {
239 base = v.getHullSpec().getBaseHull();
244 v.setHullSpecAPI(base);
static SettingsAPI getSettings()
static SectorAPI getSector()
static int getNumNonBuiltInDMods(ShipVariantAPI variant)
static HullModSpecAPI getMod(String id)
static int getNumDMods(ShipVariantAPI variant)
static void removeDMod(ShipVariantAPI v, String id)
String getSpriteName(String category, String id)