Starsector API
Loading...
Searching...
No Matches
TTMercenaryReversedAttack.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.group;
2
3import java.util.LinkedHashSet;
4import java.util.Random;
5import java.util.Set;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.econ.Industry;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.ids.Industries;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.intel.events.TriTachyonHostileActivityFactor;
20import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TTCRMercenariesBribedFactor;
21import com.fs.starfarer.api.impl.campaign.intel.events.ttcr.TriTachyonCommerceRaiding;
22import com.fs.starfarer.api.impl.campaign.intel.group.FGRaidAction.FGRaidType;
23import com.fs.starfarer.api.ui.SectorMapAPI;
24import com.fs.starfarer.api.util.IntervalUtil;
25import com.fs.starfarer.api.util.Misc;
26
27
28
30
31 public static final String TTMAR_FLEET = "$TTMAR_fleet";
32 public static final String TTMAR_COMMAND = "$TTMAR_command";
33
34 public static String KEY = "$TTMAR_ref";
38
39
40
41
42 public static void sendReversedAttack(InteractionDialogAPI dialog) {
44 if (attack == null || attack.isEnding()) return;
45
46 Random random = new Random();
47
49 if (target == null) return;
50
51 GenericRaidParams params = new GenericRaidParams(new Random(), false);
52 //params.makeFleetsHostile = true; // irrelevant since fleets already spawned
53
54 //params.source = attack.params.source;
55
58
59 MarketAPI fake = Global.getFactory().createMarket("fake", "an independent world", 5);
62 origin.setMarket(fake);
63 params.source = fake;
64
65 params.prepDays = 0f;
66 params.payloadDays = 27f + 7f * random.nextFloat();
67
68 params.raidParams.where = target;
69 params.raidParams.type = FGRaidType.SEQUENTIAL;
70
71 Set<String> disrupt = new LinkedHashSet<String>();
72 for (MarketAPI market : Misc.getMarketsInLocation(target, Factions.TRITACHYON)) {
73 params.raidParams.allowedTargets.add(market);
74 params.raidParams.allowNonHostileTargets = true;
75 for (Industry ind : market.getIndustries()) {
76 if (ind.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) continue;
77 disrupt.add(ind.getId());
78 }
79 }
80
81 params.raidParams.disrupt.addAll(disrupt);
82 params.raidParams.raidsPerColony = Math.min(disrupt.size(), 4);
83 if (disrupt.isEmpty()) {
84 params.raidParams.raidsPerColony = 2;
85 }
86
87 if (params.raidParams.allowedTargets.isEmpty()) {
88 return;
89 }
90
91 params.factionId = Factions.INDEPENDENT;
92
93
95
96// CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
97// SectorEntityToken origin = pf.getContainingLocation().createToken(pf.getLocation());
98// reverse.setOrigin(origin);
99
100
101 reverse.setSpawnedFleets(true);
102 reverse.setDoIncrementalSpawn(false);
103 reverse.getFleets().addAll(attack.getFleets());
104 reverse.setTotalFPSpawned(attack.getTotalFPSpawned());
105
107
108 reverse.getRoute().setExtra(attack.getRoute().getExtra());
109
110 // the raid "source" may be a tritach market
111 // so, make the fleets scatter/return to their individual sourceMarket instead
113
114 attack.finish(false);
115 attack.getFleets().clear();
116 attack.endImmediately();
117
118 String reasonTTMA = "TTMA";
119 String reasonTTMAR = "TTMAR";
120 for (CampaignFleetAPI fleet : reverse.getFleets()) {
121 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
122 fleet.clearAssignments();
124
125 mem.set(TTMAR_FLEET, true);
127 mem.set(TTMAR_COMMAND, true);
128 }
129
132
133 Misc.makeNonHostileToFaction(fleet, Factions.DIKTAT, false, -1);
135
136
138 reasonTTMA, false, -1f);
140 reasonTTMAR, true, -1f);
141 }
142
143
144 // not player targeted, so needs to be "important" so the player gets updates
145 reverse.setImportant(true);
146
147 Global.getSector().getIntelManager().addIntel(reverse, false, dialog.getTextPanel());
148
150 }
151
152
153
154 protected IntervalUtil interval = new IntervalUtil(0.1f, 0.3f);
155
156
157 public TTMercenaryReversedAttack(GenericRaidParams params) {
158 super(params);
159
161 }
162
163 @Override
164 protected void notifyEnding() {
165 super.notifyEnding();
166
168 }
169
170 @Override
171 protected void notifyEnded() {
172 super.notifyEnded();
173 }
174
175
176 @Override
177 public String getNoun() {
178 return "mercenary attack";
179 }
180
181 @Override
182 public String getForcesNoun() {
183 return super.getForcesNoun();
184 }
185
186
187 @Override
188 public String getBaseName() {
189 return "Mercenary Counter-raid";
190 }
191
192 @Override
193 public void abort() {
194 if (!isAborted()) {
195 for (CampaignFleetAPI curr : getFleets()) {
196 curr.getMemoryWithoutUpdate().unset(TTMAR_FLEET);
197 }
198 }
199 super.abort();
200 }
201
202
203 @Override
204 public void advance(float amount) {
205 super.advance(amount);
206
207 float days = Misc.getDays(amount);
208 interval.advance(days);
209
210 if (interval.intervalElapsed()) {
212 for (CampaignFleetAPI curr : getFleets()) {
214 }
215 }
216 }
217 }
218
219 @Override
220 public Set<String> getIntelTags(SectorMapAPI map) {
221 Set<String> tags = super.getIntelTags(map);
222 tags.remove(Tags.INTEL_COLONIES);
223 return tags;
224 }
225
226
227}
228
229
230
231
static FactoryAPI getFactory()
Definition Global.java:41
static SectorAPI getSector()
Definition Global.java:65
static void addFactorCreateIfNecessary(EventFactor factor, InteractionDialogAPI dialog)
static void makeNonHostileToFaction(CampaignFleetAPI fleet, String factionId, float dur)
Definition Misc.java:1485
static List< MarketAPI > getMarketsInLocation(LocationAPI location, String factionId)
Definition Misc.java:936
static void makeHostileToFaction(CampaignFleetAPI fleet, String factionId, float dur)
Definition Misc.java:1496
static float getDays(float amount)
Definition Misc.java:4663
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
Definition Misc.java:1439
static String FLEET_RETURNING_TO_DESPAWN
Definition Misc.java:3840
MarketAPI createMarket(String id, String name, int size)
SectorEntityToken createToken(float x, float y)
void setPrimaryEntity(SectorEntityToken primaryEntity)
void set(String key, Object value)