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
54 AICoreOfficerPlugin plugin = Misc.getAICoreOfficerPlugin(Commodities.ALPHA_CORE);
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);
65 person.getStats().setSkillLevel(Skills.CARRIER_GROUP, 1);
66 person.getStats().setSkillLevel(Skills.FIGHTER_UPLINK, 1);
67 person.getStats().setSkipRefresh(false);
68
69 member.setCaptain(person);
70 ShipVariantAPI v = member.getVariant().clone();
71 v.setSource(VariantSource.REFIT);
72 v.addTag(Tags.TAG_NO_AUTOFIT);
73 v.addTag(Tags.TAG_AUTOMATED_NO_PENALTY);
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();
96 v.setSource(VariantSource.REFIT);
97 curr.setVariant(v, false, false);
98 }
99
100 if (fleet.getInflater() instanceof DefaultFleetInflater) {
101 DefaultFleetInflater dfi = (DefaultFleetInflater) fleet.getInflater();
102 DefaultFleetInflaterParams dfip = (DefaultFleetInflaterParams)dfi.getParams();
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_AUTOMATED_NO_PENALTY);
118 curr.getVariant().addTag(Tags.VARIANT_UNRESTORABLE);
119 curr.getVariant().addTag(Tags.TAG_RETAIN_SMODS_ON_RECOVERY);
120 if (curr.isCapital()) {
121 curr.getVariant().addTag(Tags.VARIANT_ALWAYS_RECOVERABLE);
122 }
123 }
124 }
125
126 public static void addAutomated(CampaignFleetAPI fleet, String variantId, String shipName, String aiCore, Random random) {
127 AICoreOfficerPlugin plugin = Misc.getAICoreOfficerPlugin(Commodities.ALPHA_CORE);
128
129 FleetMemberAPI member = fleet.getFleetData().addFleetMember(variantId);
130 member.setId("xivtf_" + random.nextLong());
131
132 //System.out.println("ID for " + variantId + ": " + member.getId());
133
134 //member.setId("xivtf_" + random.nextLong());
135 if (shipName != null) {
136 member.setShipName(shipName);
137 }
138 if (aiCore != null) {
139 PersonAPI person = plugin.createPerson(aiCore, fleet.getFaction().getId(), random);
140 member.setCaptain(person);
141 }
142 }
143
144 public static void makeAICoreSkillsGoodForLowTech(FleetMemberAPI member, boolean integrate) {
145 if (member.getCaptain() == null || !member.getCaptain().isAICore()) return;
146
147 PersonAPI person = member.getCaptain();
148 person.getStats().setSkipRefresh(true);
149 String aiCoreId = person.getAICoreId();
150
151 if (integrate) {
152 person.getStats().setLevel(person.getStats().getLevel() + 1);
153 person.getStats().setSkillLevel(Skills.BALLISTIC_MASTERY, 2);
154 }
155
156 boolean alpha = Commodities.ALPHA_CORE.equals(aiCoreId);
157 boolean beta = Commodities.BETA_CORE.equals(aiCoreId);
158 boolean gamma = Commodities.GAMMA_CORE.equals(aiCoreId);
159
160 if (member.isCapital() || member.isCruiser()) {
161 person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 0);
162 person.getStats().setSkillLevel(Skills.MISSILE_SPECIALIZATION, 2);
163 }
164
165 // actually, the base skills are pretty much fine, so just add ballistic mastery if integrating, and
166 // that's all
167
168 // Base skills, for reference (pulled from AICoreOfficerPluginImpl)
169 // ALPHA CORE
170// person.getStats().setLevel(7);
171// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
172// person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
173// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
174// person.getStats().setSkillLevel(Skills.FIELD_MODULATION, 2);
175// person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
176// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
177// person.getStats().setSkillLevel(Skills.DAMAGE_CONTROL, 2);
178
179 // BETA CORE
180// person.getStats().setLevel(5);
181// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
182// person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
183// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
184// person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
185// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
186
187 // GAMMA CORE
188// person.getStats().setLevel(3);
189// person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
190// person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
191// person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
192
193 person.getStats().setSkipRefresh(false);
194 }
195
196 @Override
197 public int getHandlingPriority(Object params) {
198 if (!(params instanceof SDMParams)) return 0;
199 SDMParams p = (SDMParams) params;
200
201 if (p.entity != null && p.entity.getMemoryWithoutUpdate().contains(
203 return 2;
204 }
205 return -1;
206 }
207 public float getQuality(SDMParams p, float quality, Random random, boolean withOverride) {
208 return quality;
209 }
210}
211
212
213
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)