Starsector API
Loading...
Searching...
No Matches
TriTachLoanIncentiveScript.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.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FleetAssignment;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.characters.AbilityPlugin;
14import com.fs.starfarer.api.characters.FullName.Gender;
15import com.fs.starfarer.api.impl.campaign.DebugFlags;
16import com.fs.starfarer.api.impl.campaign.fleets.AutoDespawnScript;
17import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
18import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
19import com.fs.starfarer.api.impl.campaign.ids.Abilities;
20import com.fs.starfarer.api.impl.campaign.ids.Factions;
21import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
22import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
23import com.fs.starfarer.api.util.Misc;
24
26
27 protected float delayDays;
28 protected boolean sentFleet;
29 //protected TriTachLoanIntel intel;
30 protected Gender gender;
31 protected long seed;
33 //this.intel = intel;
34 gender = intel.getEvent().getPerson().getGender();
35 seed = Misc.genRandomSeed();
36
37 // revenge is a dish best served after at least this many days
38 delayDays = 200f + (float) Math.random() * 100f;
40 delayDays = 0f;
41 }
42 }
43
44 protected StarSystemAPI systemPlayerIsIn = null;
45 protected float daysInSystem = 0f;
46 public void advance(float amount) {
47 if (sentFleet) return;
48
49 float days = Misc.getDays(amount);
50 //days *= 1000f;
51 delayDays -= days;
52 if (delayDays > 0) return;
53
54
55 final CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
56 float distFromCore = playerFleet.getLocationInHyperspace().length();
57 if (distFromCore > 30000f) {
58 daysInSystem = 0f;
59 systemPlayerIsIn = null;
60 return;
61 }
62
63 if (!(playerFleet.getContainingLocation() instanceof StarSystemAPI)) {
64 if ((daysInSystem > 7f || DebugFlags.BAR_DEBUG) && systemPlayerIsIn != null) {
65 float dist = Misc.getDistance(systemPlayerIsIn.getLocation(), playerFleet.getLocationInHyperspace());
66 if (dist < 3000f) {
67 sendFleet();
68 }
69 }
70 daysInSystem = 0f;
71 systemPlayerIsIn = null;
72 return;
73 }
74
75 systemPlayerIsIn = (StarSystemAPI)playerFleet.getContainingLocation();
76 daysInSystem += days;
77 }
78
79 protected void sendFleet() {
80 if (sentFleet) return;
81 sentFleet = true;
82 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
83 CampaignFleetAPI hunter = createBountyHunter();
84 if (hunter != null) {
85 Global.getSector().getHyperspace().addEntity(hunter);
86 Vector2f hunterLoc = Misc.getPointAtRadius(playerFleet.getLocationInHyperspace(), 500f);
87 hunter.setLocation(hunterLoc.x, hunterLoc.y);
88
89 hunter.getAI().addAssignmentAtStart(FleetAssignment.INTERCEPT, playerFleet, 1000f, null);
90
91 Misc.giveStandardReturnToSourceAssignments(hunter, false);
92
93 hunter.getMemoryWithoutUpdate().set("$ttli_bountyHunter", true);
94 //PersonAPI person = hunter.getCommander();
95 //person.getMemoryWithoutUpdate().set("$mpm_eventRef", this, mission.getBaseDuration());
96 }
97
98 }
99
100 protected CampaignFleetAPI createBountyHunter() {
101 float pts = 200f;
102 FleetParamsV3 params = new FleetParamsV3(
103 null,
104 Global.getSector().getPlayerFleet().getLocationInHyperspace(),
105 Factions.TRITACHYON,
106 1f,
107 FleetTypes.MERC_BOUNTY_HUNTER,
108 pts, // combatPts
109 0f, // freighterPts
110 pts * 0.1f, // tankerPts
111 0f, // transportPts
112 0f, // linerPts
113 0f, // utilityPts
114 0f // qualityMod
115 );
116 params.officerNumberBonus = 4;
117 params.officerLevelBonus = 3;
118 params.doctrineOverride = Global.getSector().getFaction(Factions.TRITACHYON).getDoctrine().clone();
119 params.doctrineOverride.setWarships(3);
120 params.doctrineOverride.setPhaseShips(3);
121 params.doctrineOverride.setCarriers(1);
122 params.random = new Random(seed);
123
124 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(params);
125 if (fleet.isEmpty()) fleet = null;
126
127 if (fleet != null) {
128 fleet.setFaction(Factions.INDEPENDENT, true);
129 Misc.makeLowRepImpact(fleet, "ttli");
130
131 fleet.addScript(new AutoDespawnScript(fleet));
132
133 MemoryAPI memory = fleet.getMemoryWithoutUpdate();
134 memory.set(MemFlags.MEMORY_KEY_MAKE_HOSTILE, true);
135
136 String hisOrHer = "his";
137 if (gender == Gender.FEMALE) hisOrHer = "her";
138 memory.set("$ttli_hisOrHer", hisOrHer);
139
140 AbilityPlugin eb = fleet.getAbility(Abilities.EMERGENCY_BURN);
141 if (eb != null) eb.activate();
142 }
143 return fleet;
144 }
145
146
147
148 public boolean isDone() {
149 return sentFleet;
150 }
151
152 public boolean runWhilePaused() {
153 return false;
154 }
155
156}
static SectorAPI getSector()
Definition Global.java:59