1package com.fs.starfarer.api.impl.campaign.intel.group;
4import java.util.Random;
6import org.lwjgl.util.vector.Vector2f;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.campaign.StarSystemAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.listeners.EconomyTickListener;
15import com.fs.starfarer.api.campaign.rules.MemoryAPI;
16import com.fs.starfarer.api.combat.MutableStatWithTempMods;
17import com.fs.starfarer.api.impl.campaign.HasslePlayerScript;
18import com.fs.starfarer.api.impl.campaign.NPCHassler;
19import com.fs.starfarer.api.impl.campaign.econ.RecentUnrest;
20import com.fs.starfarer.api.impl.campaign.ids.Conditions;
21import com.fs.starfarer.api.impl.campaign.ids.Factions;
22import com.fs.starfarer.api.impl.campaign.ids.Industries;
23import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
24import com.fs.starfarer.api.impl.campaign.ids.Ranks;
25import com.fs.starfarer.api.impl.campaign.ids.Skills;
26import com.fs.starfarer.api.impl.campaign.ids.Sounds;
27import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
28import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel;
29import com.fs.starfarer.api.impl.campaign.intel.events.LuddicChurchHostileActivityFactor;
30import com.fs.starfarer.api.impl.campaign.intel.group.FGBlockadeAction.FGBlockadeParams;
31import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
32import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
33import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
34import com.fs.starfarer.api.ui.Alignment;
35import com.fs.starfarer.api.ui.LabelAPI;
36import com.fs.starfarer.api.ui.TooltipMakerAPI;
37import com.fs.starfarer.api.util.Misc;
51 public static final String
BLOCKADING =
"$KOLT_isBlockading";
54 public static final String
ARMADA =
"$KOLT_armada";
55 public static final String
PICKET =
"$KOLT_picket";
58 public static String
KEY =
"$KOLT_ref";
85 protected CampaignFleetAPI
createFleet(
int size,
float damage) {
89 Vector2f loc =
origin.getLocationInHyperspace();
91 FleetCreatorMission m =
new FleetCreatorMission(r);
95 m.createFleet(
params.style, size,
params.factionId, loc);
98 m.triggerSetFleetDoctrineOther(5, 0);
99 m.triggerSetFleetSize(FleetSize.MAXIMUM);
100 m.triggerSetFleetSizeFraction(1.4f);
102 m.triggerSetFleetQuality(FleetQuality.HIGHER);
108 m.setFleetSource(
params.source);
109 m.setFleetDamageTaken(damage);
111 m.triggerSetWarFleet();
112 m.triggerMakeLowRepImpact();
115 m.triggerMakeAlwaysSpreadTOffHostility();
118 m.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
119 m.triggerFleetAddCommanderSkill(Skills.TACTICAL_DRILLS, 1);
120 m.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1);
126 CampaignFleetAPI fleet = m.createFleet();
133 fleet.getMemoryWithoutUpdate().set(
PICKET,
true);
135 fleet.setName(
"Knights of Ludd Watchers");
136 fleet.setNoFactionInName(
true);
140 fleet.setName(
"Knights of Ludd Holy Armada");
141 fleet.setNoFactionInName(
true);
142 fleet.getMemoryWithoutUpdate().set(
ARMADA,
true);
143 fleet.getCommander().setRankId(Ranks.SPACE_ADMIRAL);
154 super.advance(amount);
158 for (CampaignFleetAPI curr :
getFleets()) {
159 curr.getMemoryWithoutUpdate().set(
BLOCKADING,
false);
165 for (CampaignFleetAPI curr :
getFleets()) {
166 curr.getMemoryWithoutUpdate().set(
BLOCKADING,
true);
174 super.periodicUpdate();
180 if (HostileActivityEventIntel.get() ==
null) {
186 if (target !=
null && !target.hasCondition(Conditions.LUDDIC_MAJORITY)) {
194 MutableStatWithTempMods stat = HostileActivityEventIntel.get().getNumFleetsStat(
getTargetSystem());
201 for (CampaignFleetAPI curr :
getFleets()) {
202 if (curr.getMemoryWithoutUpdate().getBoolean(
ARMADA)) {
214 for (CampaignFleetAPI curr :
getFleets()) {
215 if (blockade.
getPrimary().getContainingLocation() != curr.getContainingLocation()) {
218 if (!curr.getMemoryWithoutUpdate().getBoolean(
PICKET)) {
219 curr.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_FLEET_DO_NOT_GET_SIDETRACKED,
true, 0.4f);
269 LabelAPI label = info.addPara(target.getName() +
" stability reduced by %s", initPad, tc,
270 Misc.getHighlightColor(),
"" + penalty);
271 label.setHighlightColors(target.getFaction().getBaseUIColor(), Misc.getHighlightColor());
272 label.setHighlight(target.getName(),
"" + penalty);
276 super.addUpdateBulletPoints(info, tc, param, mode, initPad);
285 LabelAPI label = info.addPara(
"Targeting " + target.getName(), tc, initPad);
286 label.setHighlightColors(target.getFaction().getBaseUIColor());
287 label.setHighlight(target.getName());
292 info.addImage(
getFaction().getLogo(), width, 128, opad);
300 LabelAPI label = info.addPara(
301 Misc.ucFirst(
faction.getPersonNamePrefixAOrAn()) +
" %s " + noun +
" " +
getOfString() +
" "
302 + target.getName() +
" in the " + system.getNameWithLowercaseType() +
".", opad,
304 label.setHighlightColors(
faction.getBaseUIColor(), target.getFaction().getBaseUIColor());
305 label.setHighlight(
faction.getPersonNamePrefix(), target.getName());
309 Color h = Misc.getHighlightColor();
310 Color bad = Misc.getNegativeHighlightColor();
322 info.addSectionHeading(
"Assessment",
323 faction.getBaseUIColor(),
faction.getDarkUIColor(), Alignment.MID, opad);
327 if (remaining > 0 && remaining < 1) remaining = 1;
328 String days = (int)remaining == 1 ?
"day" :
"days";
330 if (started) days =
"more " + days;
332 LabelAPI label = info.addPara(
"The operation will last for approximately %s " + days
333 +
", causing a progressive loss of stability " + target.getOnOrAt() +
334 " %s. If stability reaches zero, %s will permanently fall under %s control." ,
336 "" + (
int) remaining,
337 target.getName(), target.getName(),
339 label.setHighlight(
"" + (
int) remaining,
340 target.getName(), target.getName(),
341 "will permanently fall",
343 label.setHighlightColors(h, other.getBaseUIColor(), Misc.getTextColor(),
344 Misc.getNegativeHighlightColor(),
faction.getBaseUIColor());
347 info.addPara(
"The " + forcesNoun +
" are not nominally hostile, but will harass shipping and "
348 +
"attempt to maintain control of the volume around the colony and undermine your "
349 +
"authority.", opad,
350 Misc.getHighlightColor(),
"not nominally hostile");
352 info.addPara(
"The " + forcesNoun +
" are actively hostile, and will engage any orbital defenses, and "
353 +
" conduct planetside operations to undermine your authority.",
354 opad, Misc.getNegativeHighlightColor(),
"actively hostile");
363 "the colony is unlikely to be in danger",
364 "the colony may be in danger",
365 "the colony is in danger");
378 info.addPara(
"Conducting operations in the " +
379 to.getNameWithLowercaseTypeShort() +
".", opad);
385 LabelAPI label = info.addPara(target.getName() +
" stability: %s per month", opad,
386 Misc.getHighlightColor(),
"-" + penalty);
387 label.setHighlightColors(target.getFaction().getBaseUIColor(), Misc.getHighlightColor());
388 label.setHighlight(target.getName(),
"-" + penalty);
390 info.addPara(
"%s stability unaffected", opad,
391 target.getFaction().getBaseUIColor(), target.getName());
403 }
else if (str == 0) {
412 if (iterIndex == 0) {
419 RecentUnrest.get(target).add(penalty,
"Luddic Church takeover operation");
420 target.reapplyConditions();
424 if (target.getStabilityValue() <= 0) {
439 target.setFactionId(Factions.LUDDIC_CHURCH);
440 target.setPlayerOwned(
false);
441 target.setAdmin(
null);
442 for (SectorEntityToken curr : target.getConnectedEntities()) {
443 curr.setFaction(Factions.LUDDIC_CHURCH);
446 if (!target.hasSubmarket(Submarkets.SUBMARKET_OPEN)) {
447 target.addSubmarket(Submarkets.SUBMARKET_OPEN);
449 if (!target.hasSubmarket(Submarkets.SUBMARKET_BLACK)) {
450 target.addSubmarket(Submarkets.SUBMARKET_BLACK);
452 if (Misc.isMilitary(target) ||
453 target.hasIndustry(Industries.MILITARYBASE) ||
454 target.hasIndustry(Industries.HIGHCOMMAND)) {
455 if (!target.hasSubmarket(Submarkets.GENERIC_MILITARY)) {
456 target.addSubmarket(Submarkets.GENERIC_MILITARY);
460 RecentUnrest.get(target).setPenalty(0);
470 if (target.getStarSystem() !=
null) {
471 for (CampaignFleetAPI fleet : target.getStarSystem().getFleets()) {
472 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
473 String type = mem.getString(MemFlags.HASSLE_TYPE);
474 if (LuddicChurchHostileActivityFactor.HASSLE_REASON.equals(type)) {
475 mem.unset(MemFlags.WILL_HASSLE_PLAYER);
476 mem.unset(MemFlags.HASSLE_TYPE);
487 return Sounds.REP_LOSS;
489 return super.getCommMessageSound();
static SectorAPI getSector()
static final String HASSLE_COMPLETE_KEY
boolean isSendingUpdate()
void unindent(TooltipMakerAPI info)
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
Object getListInfoParam()
void bullet(TooltipMakerAPI info)
FGBlockadeParams blockadeParams
void setActionFinished(boolean finished)
SectorEntityToken getPrimary()
void setSuccessFractionOverride(float successFractionOverride)
void finish(boolean isAbort)
FGAction getCurrentAction()
int getRelativeFGStrength(StarSystemAPI target)
boolean isSpawnedFleets()
float getETAUntil(String actionId)
boolean addStrengthDesc(TooltipMakerAPI info, float opad, StarSystemAPI system, String forces, String outcomeFailure, String outcomeUncertain, String outcomeSuccess)
void setNeverStraggler(CampaignFleetAPI fleet)
List< CampaignFleetAPI > getFleets()
boolean isCurrent(String id)
static String TRAVEL_ACTION
StarSystemAPI getTargetSystem()
GenericPayloadAction raidAction
static String PAYLOAD_ACTION
static String RETURN_ACTION
void unapplyBlockadeCondition()
void applyBlockadeCondition()
static final String PICKET
void performTakeover(boolean voluntary)
String getCommMessageSound()
static final String KOLT_FLEET
KnightsOfLuddTakeoverExpedition(GenericRaidParams params, FGBlockadeParams blockadeParams)
void addPostAssessmentSection(TooltipMakerAPI info, float width, float height, float opad)
void addPayloadActionStatus(TooltipMakerAPI info, float width, float height, float opad)
CampaignFleetAPI createFleet(int size, float damage)
static float NUM_OTHER_FLEETS_MULT
void addAssessmentSection(TooltipMakerAPI info, float width, float height, float opad)
void reportEconomyMonthEnd()
GenericPayloadAction createPayloadAction()
static final String STABILITY_UPDATE
void addUpdateBulletPoints(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
int getStabilityPenaltyPerMonth()
static final String ARMADA
static final String BLOCKADING
void addTargetingBulletPoint(TooltipMakerAPI info, Color tc, Object param, ListInfoMode mode, float initPad)
void reportEconomyTick(int iterIndex)
void advance(float amount)
static int STABILITY_PER_MONTH_PARTIAL
static final String TAKEOVER_UPDATE
void addBasicDescription(TooltipMakerAPI info, float width, float height, float opad)
static int STABILITY_PER_MONTH_FULL