1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
3import java.util.Random;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.EveryFrameScript;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.BattleAPI;
10import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.FleetAssignment;
13import com.fs.starfarer.api.campaign.StarSystemAPI;
14import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
15import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
16import com.fs.starfarer.api.campaign.rules.MemoryAPI;
17import com.fs.starfarer.api.characters.AbilityPlugin;
18import com.fs.starfarer.api.characters.FullName.Gender;
19import com.fs.starfarer.api.impl.campaign.DebugFlags;
20import com.fs.starfarer.api.impl.campaign.fleets.AutoDespawnScript;
21import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
22import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
23import com.fs.starfarer.api.impl.campaign.ids.Abilities;
24import com.fs.starfarer.api.impl.campaign.ids.Factions;
25import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
26import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
27import com.fs.starfarer.api.util.Misc;
48 seed = Misc.genRandomSeed();
50 delayDays = 100f + (float) Math.random() * 200f;
62 float days = Misc.getDays(amount);
69 float distFromCore = playerFleet.getLocationInHyperspace().length();
76 if (!(playerFleet.getContainingLocation() instanceof StarSystemAPI)) {
78 float dist = Misc.getDistance(
systemPlayerIsIn.getLocation(), playerFleet.getLocationInHyperspace());
99 Vector2f hunterLoc = Misc.getPointAtRadius(playerFleet.getLocationInHyperspace(), 500f);
100 hunter.setLocation(hunterLoc.x, hunterLoc.y);
101 hunter.getAI().addAssignmentAtStart(FleetAssignment.INTERCEPT, playerFleet, 1000f,
null);
102 Misc.giveStandardReturnToSourceAssignments(hunter,
false);
108 Random random =
new Random(
seed);
109 String faction = Factions.INDEPENDENT;
112 pts *= 0.8f + 0.4f * random.nextFloat();
113 if (pts < 30) pts = 30;
114 if (pts > 150) pts = 150;
116 float qMod =
reward / 100000f;
118 String hunter =
"bounty hunter";
120 if (random.nextFloat() < 0.5f) {
121 faction = Factions.PIRATES;
126 FleetParamsV3 params =
new FleetParamsV3(
131 FleetTypes.MERC_BOUNTY_HUNTER,
140 params.random = random;
142 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(params);
143 if (fleet.isEmpty()) fleet =
null;
146 EncounterOption option = fleet.getAI().pickEncounterOption(
null,
Global.
getSector().getPlayerFleet());
147 if (option == EncounterOption.DISENGAGE) {
154 Misc.makeLowRepImpact(fleet,
"dmi");
156 fleet.addScript(
new AutoDespawnScript(fleet));
157 fleet.addEventListener(
this);
159 MemoryAPI memory = fleet.getMemoryWithoutUpdate();
160 memory.set(MemFlags.MEMORY_KEY_MAKE_HOSTILE,
true);
161 memory.set(MemFlags.MEMORY_KEY_MAKE_AGGRESSIVE,
true);
162 memory.set(MemFlags.MEMORY_KEY_ALLOW_LONG_PURSUIT,
true);
164 String hisOrHer =
"his";
165 String himOrHer =
"him";
166 if (
gender == Gender.FEMALE) {
170 memory.set(
"$dmi_bountyHunter",
true);
171 memory.set(
"$dmi_hisOrHer", hisOrHer);
172 memory.set(
"$dmi_himOrHer", himOrHer);
173 memory.set(
"$dmi_name",
name);
175 memory.set(
"$dmi_hunter", hunter);
178 AbilityPlugin eb = fleet.getAbility(Abilities.EMERGENCY_BURN);
179 if (eb !=
null) eb.activate();
196 MemoryAPI memory = fleet.getMemoryWithoutUpdate();
197 memory.unset(MemFlags.MEMORY_KEY_MAKE_AGGRESSIVE);
static SettingsAPI getSettings()
static SectorAPI getSector()
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
CampaignFleetAPI createBountyHunter()
static float DAYS_IN_SYSTEM
void advance(float amount)
DeliveryFailureConsequences(DeliveryMissionIntel intel)
static float RADIUS_FROM_CORE
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
StarSystemAPI systemPlayerIsIn
DeliveryBarEvent getEvent()
CommoditySpecAPI getCommoditySpec(String commodityId)