Starsector API
Loading...
Searching...
No Matches
DeliveryFailureConsequences.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
2
3import java.util.Random;
4
5import org.lwjgl.util.vector.Vector2f;
6
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;
28
30
31 public static float RADIUS_FROM_CORE = 30000f; // may send fleet when within this radius from core
32 public static float DAYS_IN_SYSTEM = 7f;
33
34 protected float delayDays;
35 protected boolean sentFleet;
36 protected String name;
37 protected String commodity;
38 protected Gender gender;
39 protected float reward;
40 protected long seed;
43 gender = intel.getEvent().getPerson().getGender();
45
46 reward = intel.getEvent().getReward();
47
49
50 delayDays = 100f + (float) Math.random() * 200f;
51
53 delayDays = 0f;
54 }
55 }
56
58 protected float daysInSystem = 0f;
59 public void advance(float amount) {
60 if (sentFleet) return;
61
62 float days = Misc.getDays(amount);
63 //days *= 1000f;
64 delayDays -= days;
65 if (delayDays > 0) return;
66
67
69 float distFromCore = playerFleet.getLocationInHyperspace().length();
70 if (distFromCore > RADIUS_FROM_CORE) {
71 daysInSystem = 0f;
72 systemPlayerIsIn = null;
73 return;
74 }
75
76 if (!(playerFleet.getContainingLocation() instanceof StarSystemAPI)) {
79 if (dist < 3000f) {
80 sendFleet();
81 }
82 }
83 daysInSystem = 0f;
84 systemPlayerIsIn = null;
85 return;
86 }
87
89 daysInSystem += days;
90 }
91
92 protected void sendFleet() {
93 if (sentFleet) return;
94 sentFleet = true;
97 if (hunter != null) {
99 Vector2f hunterLoc = Misc.getPointAtRadius(playerFleet.getLocationInHyperspace(), 500f);
100 hunter.setLocation(hunterLoc.x, hunterLoc.y);
101 hunter.getAI().addAssignmentAtStart(FleetAssignment.INTERCEPT, playerFleet, 1000f, null);
103 }
104
105 }
106
108 Random random = new Random(seed);
109 String faction = Factions.INDEPENDENT;
110
111 float pts = reward / 400;
112 pts *= 0.8f + 0.4f * random.nextFloat();
113 if (pts < 30) pts = 30;
114 if (pts > 150) pts = 150; //maxes out at a 60k mission reward
115
116 float qMod = reward / 100000f; // but the quality keeps going up
117
118 String hunter = "bounty hunter";
119
120 if (random.nextFloat() < 0.5f) {
121 faction = Factions.PIRATES;
122 pts *= 1.5f;
123 hunter = "pirate";
124 }
125
126 FleetParamsV3 params = new FleetParamsV3(
127 null,
129 faction,
130 null,
132 pts, // combatPts
133 0f, // freighterPts
134 pts * 0.1f, // tankerPts
135 0f, // transportPts
136 0f, // linerPts
137 0f, // utilityPts
138 qMod // qualityMod
139 );
140 params.random = random;
141
143 if (fleet.isEmpty()) fleet = null;
144
145 if (fleet != null) {
146 EncounterOption option = fleet.getAI().pickEncounterOption(null, Global.getSector().getPlayerFleet());
147 if (option == EncounterOption.DISENGAGE) {
148 fleet = null;
149 }
150 }
151
152 if (fleet != null) {
153 //fleet.setFaction(Factions.INDEPENDENT, true);
154 Misc.makeLowRepImpact(fleet, "dmi");
155
156 fleet.addScript(new AutoDespawnScript(fleet));
157 fleet.addEventListener(this);
158
159 MemoryAPI memory = fleet.getMemoryWithoutUpdate();
163
164 String hisOrHer = "his";
165 String himOrHer = "him";
166 if (gender == Gender.FEMALE) {
167 hisOrHer = "her";
168 himOrHer = "her";
169 }
170 memory.set("$dmi_bountyHunter", true);
171 memory.set("$dmi_hisOrHer", hisOrHer);
172 memory.set("$dmi_himOrHer", himOrHer);
173 memory.set("$dmi_name", name);
174 memory.set("$dmi_commodity", commodity);
175 memory.set("$dmi_hunter", hunter);
176
177 if (reward >= 50000) {
179 if (eb != null) eb.activate();
180 }
181 }
182 return fleet;
183 }
184
185
186
187 public boolean isDone() {
188 return sentFleet;
189 }
190
191 public boolean runWhilePaused() {
192 return false;
193 }
194
195 public void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle) {
196 MemoryAPI memory = fleet.getMemoryWithoutUpdate();
198 }
199
200 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
201
202 }
203
204}
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
static CampaignFleetAPI createFleet(FleetParamsV3 params)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
static void giveStandardReturnToSourceAssignments(CampaignFleetAPI fleet)
Definition Misc.java:3836
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static float getDays(float amount)
Definition Misc.java:4663
static Vector2f getPointAtRadius(Vector2f from, float r)
Definition Misc.java:697
static void makeLowRepImpact(CampaignFleetAPI fleet, String reason)
Definition Misc.java:1465
CommoditySpecAPI getCommoditySpec(String commodityId)
void addEventListener(FleetEventListener listener)
void addEntity(SectorEntityToken entity)
void addScript(EveryFrameScript script)
EncounterOption pickEncounterOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet)
void addAssignmentAtStart(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, Script onCompletion)
void set(String key, Object value)