Starsector API
Loading...
Searching...
No Matches
RogueMinerMiscFleetManager.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.tutorial;
2
3import com.fs.starfarer.api.Global;
4import com.fs.starfarer.api.campaign.CampaignFleetAPI;
5import com.fs.starfarer.api.campaign.CommDirectoryEntryAPI;
6import com.fs.starfarer.api.campaign.CommDirectoryEntryAPI.EntryType;
7import com.fs.starfarer.api.campaign.FactionAPI;
8import com.fs.starfarer.api.campaign.FleetAssignment;
9import com.fs.starfarer.api.campaign.LocationAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.econ.MarketAPI;
13import com.fs.starfarer.api.characters.PersonAPI;
14import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
15import com.fs.starfarer.api.impl.campaign.fleets.SourceBasedFleetManager;
16import com.fs.starfarer.api.impl.campaign.ids.Abilities;
17import com.fs.starfarer.api.impl.campaign.ids.Factions;
18import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
19import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
20import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
21import com.fs.starfarer.api.util.Misc;
22import com.fs.starfarer.api.util.WeightedRandomPicker;
23
24public class RogueMinerMiscFleetManager extends SourceBasedFleetManager {
25
26 protected float daysRemaining = 40f;
27
28 public RogueMinerMiscFleetManager(SectorEntityToken source) {
29 super(source, 3f, 0, 5, 5f);
30 }
31
32 @Override
33 public void advance(float amount) {
34 super.advance(amount);
35
36 if (isDone()) return;
37
38 float days = Global.getSector().getClock().convertToDays(amount);
39 daysRemaining -= days;
40 if (daysRemaining <= 0 && source != null) {
41 // source is Derinkuyu; going back to independent status
42 if (source.getMarket() != null && source.getMarket().isInEconomy()) {
43 source.setFaction(Factions.INDEPENDENT);
44 source.getMarket().setFactionId(Factions.INDEPENDENT);
45
46 if (source.getMarket().getCommDirectory() != null &&
47 source.getMarket().getCommDirectory().getEntriesCopy() != null) {
48 for (CommDirectoryEntryAPI entry : source.getMarket().getCommDirectory().getEntriesCopy()) {
49 if (entry.getType() == EntryType.PERSON && entry.getEntryData() instanceof PersonAPI) {
50 PersonAPI p = (PersonAPI) entry.getEntryData();
51 p.setFaction(Factions.INDEPENDENT);
52 }
53 }
54 }
55
56 FactionAPI ind = Global.getSector().getFaction(Factions.INDEPENDENT);
57 if (source.getMarket() != null && source.getMarket().getSubmarket(Submarkets.SUBMARKET_OPEN) != null) {
58 source.getMarket().getSubmarket(Submarkets.SUBMARKET_OPEN).setFaction(ind);
59 }
60 }
61
62 setDone(true);
63 }
64 }
65
66
67
68 @Override
69 protected CampaignFleetAPI spawnFleet() {
70 if (source == null) return null;
71 CampaignFleetAPI fleet = createEmptyRogueFleet("Rogue Miner Force", false);
72
73 WeightedRandomPicker<String> picker1 = new WeightedRandomPicker<String>();
74 picker1.add("cerberus_d_Standard");
75 picker1.add("hound_d_Standard");
76 picker1.add("kite_pirates_Raider");
77 //picker1.add("shepherd_Frontier");
78
79 WeightedRandomPicker<String> picker2 = new WeightedRandomPicker<String>();
80 picker2.add("hammerhead_d_CS");
81 picker2.add("enforcer_d_Strike");
82 picker2.add("sunder_d_Assault");
83 picker2.add("buffalo2_FS");
84 picker2.add("condor_Support");
85 picker2.add("condor_Attack");
86
87
88 fleet.getFleetData().addFleetMember(picker1.pick());
89 fleet.getFleetData().addFleetMember(picker1.pick());
90 if ((float) Math.random() > 0.5f) fleet.getFleetData().addFleetMember(picker1.pick());
91 fleet.getFleetData().addFleetMember(picker2.pick());
92 if ((float) Math.random() > 0.5f) fleet.getFleetData().addFleetMember(picker2.pick());
93
94 fleet.getFleetData().sort();
95
96 LocationAPI location = source.getContainingLocation();
97 location.addEntity(fleet);
98 fleet.setLocation(source.getLocation().x, source.getLocation().y);
99
100
101 WeightedRandomPicker<MarketAPI> marketPicker = new WeightedRandomPicker<MarketAPI>();
102 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
103 if (market == source) continue;
104 if (market.isHidden()) continue;
105 if (Factions.PIRATES.equals(market.getFactionId())) {
106 float dist = Misc.getDistance(source.getLocationInHyperspace(), market.getLocationInHyperspace());
107 float w = Math.max(1000f, 50000f - dist);
108 marketPicker.add(market, w);
109 }
110 }
111
112 MarketAPI market = marketPicker.pick();
113 if (market != null) {
114 fleet.addAssignment(FleetAssignment.RAID_SYSTEM, ((StarSystemAPI)source.getContainingLocation()).getCenter(), 40f);
115 Misc.giveStandardReturnAssignments(fleet, market.getPrimaryEntity(), "heading to", false);
116 } else {
117 fleet.addAssignment(FleetAssignment.RAID_SYSTEM, ((StarSystemAPI)source.getContainingLocation()).getCenter(), 100f);
118 Misc.giveStandardReturnToSourceAssignments(fleet, false);
119 }
120
121
122 return fleet;
123 }
124
125 public static CampaignFleetAPI createEmptyRogueFleet(String name, boolean withFaction) {
126 CampaignFleetAPI fleet = FleetFactoryV3.createEmptyFleet(Factions.PIRATES, FleetTypes.MERC_SCOUT, null);
127
128 fleet.setName(name);
129 fleet.setNoFactionInName(!withFaction);
130
131 fleet.removeAbility(Abilities.INTERDICTION_PULSE);
132
133 fleet.getStats().getFleetwideMaxBurnMod().modifyMult("tutorial", 0.6f);
134 //fleet.getStats().getDetectedRangeMod().modifyFlat("tutorial", 500f);
135
136 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_PIRATE, true);
137 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_NO_JUMP, true);
138 fleet.getMemoryWithoutUpdate().set("$rogueMiner", true);
139
140 fleet.getMemoryWithoutUpdate().set(MemFlags.FLEET_NO_MILITARY_RESPONSE, true);
141
142 return fleet;
143 }
144
145
146 public static CampaignFleetAPI createGuardFleet(boolean stronger) {
147 CampaignFleetAPI fleet = createEmptyRogueFleet("Rogue Miner Force", false);
148
149 WeightedRandomPicker<String> picker1 = new WeightedRandomPicker<String>();
150 picker1.add("cerberus_d_Standard");
151 picker1.add("hound_d_Standard");
152 picker1.add("kite_pirates_Raider");
153 picker1.add("shepherd_Frontier");
154
155 WeightedRandomPicker<String> picker2 = new WeightedRandomPicker<String>();
156 picker2.add("hammerhead_d_CS");
157 picker2.add("enforcer_d_Strike");
158 picker2.add("sunder_d_Assault");
159 picker2.add("buffalo2_FS");
160
161
162 fleet.getFleetData().addFleetMember(picker1.pick());
163 if (stronger) fleet.getFleetData().addFleetMember(picker1.pick());
164 if ((float) Math.random() > 0.5f) fleet.getFleetData().addFleetMember(picker1.pick());
165 fleet.getFleetData().addFleetMember(picker2.pick());
166
167 fleet.getFleetData().sort();
168
169 return fleet;
170 }
171}
172
173
174
175
176
177
178
179
180
181
static SectorAPI getSector()
Definition Global.java:59
static CampaignFleetAPI createEmptyRogueFleet(String name, boolean withFaction)