Starsector API
Loading...
Searching...
No Matches
PKDefenderPluginImpl.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.procgen.themes;
2
3import java.util.Random;
4
5import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.SectorEntityToken;
8import com.fs.starfarer.api.characters.PersonAPI;
9import com.fs.starfarer.api.combat.ShipVariantAPI;
10import com.fs.starfarer.api.fleet.FleetMemberAPI;
11import com.fs.starfarer.api.impl.campaign.BaseGenericPlugin;
12import com.fs.starfarer.api.impl.campaign.DModManager;
13import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
14import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
15import com.fs.starfarer.api.impl.campaign.ids.Commodities;
16import com.fs.starfarer.api.impl.campaign.ids.HullMods;
17import com.fs.starfarer.api.impl.campaign.ids.Skills;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageGenFromSeed.SDMParams;
20import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageGenFromSeed.SalvageDefenderModificationPlugin;
21import com.fs.starfarer.api.loading.VariantSource;
22import com.fs.starfarer.api.util.Misc;
23
24public class PKDefenderPluginImpl extends BaseGenericPlugin implements SalvageDefenderModificationPlugin {
25
26 public float getStrength(SDMParams p, float strength, Random random, boolean withOverride) {
27 // doesn't matter, just something non-zero so we end up with a fleet
28 // the auto-generated fleet will get replaced by this anyway
29 return strength;
30 }
31 public float getMinSize(SDMParams p, float minSize, Random random, boolean withOverride) {
32 return minSize;
33 }
34
35 public float getMaxSize(SDMParams p, float maxSize, Random random, boolean withOverride) {
36 return maxSize;
37 }
38
39 public float getProbability(SDMParams p, float probability, Random random, boolean withOverride) {
40 return probability;
41 }
42
43 public void reportDefeated(SDMParams p, SectorEntityToken entity, CampaignFleetAPI fleet) {
44
45 }
46
47 public void modifyFleet(SDMParams p, CampaignFleetAPI fleet, Random random, boolean withOverride) {
48
49 Misc.addDefeatTrigger(fleet, "PK14thDefeated");
50
51 fleet.setNoFactionInName(true);
52 fleet.setName("Remnants of Task Force Safeguard");
53
55
56 fleet.getFleetData().clear();
57 fleet.getFleetData().setShipNameRandom(random);
58
59
60 FleetMemberAPI member = fleet.getFleetData().addFleetMember("legion_xiv_Automated");
61 //member.setShipName("HSS Sentinel");
62 member.setId("xivtf_" + random.nextLong());
63 PersonAPI person = plugin.createPerson(Commodities.ALPHA_CORE, fleet.getFaction().getId(), random);
64 person.getStats().setSkipRefresh(true);
67 person.getStats().setSkipRefresh(false);
68
69 member.setCaptain(person);
70 ShipVariantAPI v = member.getVariant().clone();
74 member.setVariant(v, false, true);
75 fleet.setCommander(person);
76
77 addAutomated(fleet, "onslaught_xiv_Elite", null, Commodities.ALPHA_CORE, random);
78
79 addAutomated(fleet, "dominator_XIV_Elite", null, Commodities.BETA_CORE, random);
80 addAutomated(fleet, "eagle_xiv_Elite", null, Commodities.BETA_CORE, random);
81 addAutomated(fleet, "falcon_xiv_Elite", null, Commodities.BETA_CORE, random);
82 addAutomated(fleet, "falcon_xiv_Escort", null, Commodities.BETA_CORE, random);
83
84 addAutomated(fleet, "enforcer_XIV_Elite", null, Commodities.GAMMA_CORE, random);
85 addAutomated(fleet, "enforcer_XIV_Elite", null, Commodities.GAMMA_CORE, random);
86 addAutomated(fleet, "enforcer_XIV_Elite", null, Commodities.GAMMA_CORE, random);
87
88
89 for (FleetMemberAPI curr : fleet.getFleetData().getMembersListCopy()) {
91 curr.getRepairTracker().setCR(curr.getRepairTracker().getMaxCR());
92 }
93
94 for (FleetMemberAPI curr : fleet.getFleetData().getMembersListCopy()) {
95 v = curr.getVariant().clone();
97 curr.setVariant(v, false, false);
98 }
99
100 if (fleet.getInflater() instanceof DefaultFleetInflater) {
103 dfip.allWeapons = true;
104 dfip.averageSMods = 3;
105 dfip.quality = 0.4f;
106
107 // what a HACK
108 DModManager.assumeAllShipsAreAutomated = true;
109 fleet.inflateIfNeeded();
110 fleet.setInflater(null);
111 DModManager.assumeAllShipsAreAutomated = false;
112 }
113
114 for (FleetMemberAPI curr : fleet.getFleetData().getMembersListCopy()) {
115 curr.getVariant().addPermaMod(HullMods.AUTOMATED);
116 curr.getVariant().setVariantDisplayName("Automated");
117 curr.getVariant().addTag(Tags.TAG_NO_AUTOFIT);
118 curr.getVariant().addTag(Tags.TAG_AUTOMATED_NO_PENALTY);
119 curr.getVariant().addTag(Tags.VARIANT_UNRESTORABLE);
120 curr.getVariant().addTag(Tags.TAG_RETAIN_SMODS_ON_RECOVERY);
121 if (curr.isCapital()) {
122 curr.getVariant().addTag(Tags.VARIANT_ALWAYS_RECOVERABLE);
123 }
124 }
125 }
126
127 public static void addAutomated(CampaignFleetAPI fleet, String variantId, String shipName, String aiCore, Random random) {
129
130 FleetMemberAPI member = fleet.getFleetData().addFleetMember(variantId);
131 member.setId("xivtf_" + random.nextLong());
132
133 //System.out.println("ID for " + variantId + ": " + member.getId());
134
135 //member.setId("xivtf_" + random.nextLong());
136 if (shipName != null) {
137 member.setShipName(shipName);
138 }
139 if (aiCore != null) {
140 PersonAPI person = plugin.createPerson(aiCore, fleet.getFaction().getId(), random);
141 member.setCaptain(person);
142 }
143 }
144
145 public static void makeAICoreSkillsGoodForLowTech(FleetMemberAPI member, boolean integrate) {
146 if (member.getCaptain() == null || !member.getCaptain().isAICore()) return;
147
148 PersonAPI person = member.getCaptain();
149 person.getStats().setSkipRefresh(true);
150 String aiCoreId = person.getAICoreId();
151
152 if (integrate) {
153 person.getStats().setLevel(person.getStats().getLevel() + 1);
155 }
156
157 boolean alpha = Commodities.ALPHA_CORE.equals(aiCoreId);
158 boolean beta = Commodities.BETA_CORE.equals(aiCoreId);
159 boolean gamma = Commodities.GAMMA_CORE.equals(aiCoreId);
160
161 if (member.isCapital() || member.isCruiser()) {
164 }
165
166 // actually, the base skills are pretty much fine, so just add ballistic mastery if integrating, and
167 // that's all
168
169 // Base skills, for reference (pulled from AICoreOfficerPluginImpl)
170 // ALPHA CORE
171// person.getStats().setLevel(7);
172// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
173// person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
174// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
175// person.getStats().setSkillLevel(Skills.FIELD_MODULATION, 2);
176// person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
177// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
178// person.getStats().setSkillLevel(Skills.DAMAGE_CONTROL, 2);
179
180 // BETA CORE
181// person.getStats().setLevel(5);
182// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
183// person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
184// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
185// person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
186// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
187
188 // GAMMA CORE
189// person.getStats().setLevel(3);
190// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
191// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
192// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
193
194 person.getStats().setSkipRefresh(false);
195 }
196
197 @Override
198 public int getHandlingPriority(Object params) {
199 if (!(params instanceof SDMParams)) return 0;
200 SDMParams p = (SDMParams) params;
201
202 if (p.entity != null && p.entity.getMemoryWithoutUpdate().contains(
204 return 2;
205 }
206 return -1;
207 }
208 public float getQuality(SDMParams p, float quality, Random random, boolean withOverride) {
209 return quality;
210 }
211}
212
213
214
static final String VARIANT_ALWAYS_RECOVERABLE
Definition Tags.java:78
static final String TAG_RETAIN_SMODS_ON_RECOVERY
Definition Tags.java:14
static final String VARIANT_UNRESTORABLE
Definition Tags.java:89
static final String TAG_AUTOMATED_NO_PENALTY
Definition Tags.java:13
void reportDefeated(SDMParams p, SectorEntityToken entity, CampaignFleetAPI fleet)
float getProbability(SDMParams p, float probability, Random random, boolean withOverride)
float getStrength(SDMParams p, float strength, Random random, boolean withOverride)
float getMinSize(SDMParams p, float minSize, Random random, boolean withOverride)
float getMaxSize(SDMParams p, float maxSize, Random random, boolean withOverride)
static void addAutomated(CampaignFleetAPI fleet, String variantId, String shipName, String aiCore, Random random)
float getQuality(SDMParams p, float quality, Random random, boolean withOverride)
static void makeAICoreSkillsGoodForLowTech(FleetMemberAPI member, boolean integrate)
void modifyFleet(SDMParams p, CampaignFleetAPI fleet, Random random, boolean withOverride)
static AICoreOfficerPlugin getAICoreOfficerPlugin(String commodityId)
Definition Misc.java:4230
static void addDefeatTrigger(CampaignFleetAPI fleet, String trigger)
Definition Misc.java:5920
PersonAPI createPerson(String aiCoreId, String factionId, Random random)
void setInflater(FleetInflater inflater)
void setNoFactionInName(boolean noFactionInName)
void setShipNameRandom(Random shipNameRandom)
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
MutableCharacterStatsAPI getStats()
void setSource(VariantSource source)
void setCaptain(PersonAPI commander)
void setVariant(ShipVariantAPI variant, boolean withRefit, boolean withStatsUpdate)