Starsector API
Loading...
Searching...
No Matches
CBMerc.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.cb;
2
3import com.fs.starfarer.api.campaign.StarSystemAPI;
4import com.fs.starfarer.api.campaign.econ.MarketAPI;
5import com.fs.starfarer.api.impl.campaign.ids.Factions;
6import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
7import com.fs.starfarer.api.impl.campaign.ids.Skills;
8import com.fs.starfarer.api.impl.campaign.ids.Tags;
9import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
10import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
11import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
12import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
13import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
14
15public class CBMerc extends BaseCustomBountyCreator {
16
17 public static float PROB_SMALL_FLEET = 0.5f;
18 public static float PROB_SOME_PHASE_IN_SMALL_FLEET = 0.5f;
19 public static float PROB_CARRIER_BASED_LARGE_FLEET = 0.33f;
20 public static float PROB_SOME_PHASE_IN_LARGE_FLEET = 0.5f;
21
22 @Override
23 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
24 return super.getFrequency(mission, difficulty) * CBStats.MERC_FREQ;
25 }
26
27 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
28 return " - Elite Mercenary";
29 }
30
31 protected StarSystemAPI findSystem(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
32// mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT_SECONDARY,
33// Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED);
34 mission.requireSystemInterestingAndNotUnsafeOrCore();
35 mission.requireSystemNotHasPulsar();
36
37 StarSystemAPI system = mission.pickSystem();
38 return system;
39 }
40
41 protected boolean isAggro() {
42 return true;
43 }
44
45 @Override
46 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
48 data.difficulty = difficulty;
49
50 data.system = findSystem(createdAt, mission, difficulty, bountyStage);
51 if (data.system == null) return null;
52
53// FleetSize size = FleetSize.MEDIUM;
54// FleetSize sizeWolfpack = FleetSize.MEDIUM;
55// FleetQuality quality = FleetQuality.VERY_HIGH;
56// FleetQuality qualityWolfpack = FleetQuality.SMOD_3;
57
58 boolean smallFleet = mission.rollProbability(PROB_SMALL_FLEET);
59 boolean smallUsePhase = mission.rollProbability(PROB_SOME_PHASE_IN_SMALL_FLEET);
60 boolean largeUsePhase = mission.rollProbability(PROB_SOME_PHASE_IN_LARGE_FLEET);
61 boolean largeUseCarriers = mission.rollProbability(PROB_CARRIER_BASED_LARGE_FLEET);
62
63// smallFleet = true;
64// largeUseCarriers = false;
65// largeUsePhase = true;
66// smallUsePhase = true;
67
68 beginFleet(mission, data);
69 if (smallFleet) {
70 data.custom1 = true;
71 if (difficulty <= 6) {
72 mission.triggerCreateFleet(FleetSize.SMALL, FleetQuality.SMOD_3,
73 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
74 mission.triggerSetFleetMaxShipSize(1);
75 mission.triggerSetFleetDoctrineOther(1, 4);
76 } else if (difficulty <= 7) {
77 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.SMOD_3,
78 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
79 mission.triggerSetFleetMaxShipSize(2);
80 mission.triggerSetFleetDoctrineOther(2, 4);
81 } else if (difficulty <= 8) {
82 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.SMOD_3,
83 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
84 mission.triggerSetFleetMaxShipSize(3);
85 mission.triggerSetFleetDoctrineOther(3, 4);
86 } else if (difficulty <= 9) {
87 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.SMOD_3,
88 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
89 mission.triggerSetFleetDoctrineOther(4, 4);
90 } else if (difficulty <= 10) {
91 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.SMOD_3,
92 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
93 mission.triggerSetFleetDoctrineOther(5, 4);
94 }
95
96 mission.triggerSetFleetMaxNumShips(12);
97
98 if (smallUsePhase) {
99 if (difficulty <= 8) {
100 mission.triggerSetFleetDoctrineComp(0, 0, 5);
101 } else {
102 mission.triggerSetFleetDoctrineComp(4, 0, 3);
103 }
104 } else {
105 mission.triggerSetFleetDoctrineComp(5, 0, 0);
106 }
107
108 mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
109 mission.triggerFleetAddCommanderSkill(Skills.WOLFPACK_TACTICS, 1);
110 mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1);
111 mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
112 mission.triggerFleetAddCommanderSkill(Skills.TACTICAL_DRILLS, 1);
113 mission.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.UNUSUALLY_HIGH);
114 } else {
115 if (difficulty <= 6) {
116 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.VERY_HIGH,
117 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
118 } else if (difficulty <= 7) {
119 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.VERY_HIGH,
120 Factions.MERCENARY, FleetTypes.MERC_PRIVATEER, data.system);
121 } else if (difficulty <= 8) {
122 mission.triggerCreateFleet(FleetSize.VERY_LARGE, FleetQuality.VERY_HIGH,
123 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system);
124 } else if (difficulty <= 9) {
125 mission.triggerCreateFleet(FleetSize.VERY_LARGE, FleetQuality.SMOD_1,
126 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system);
127 } else if (difficulty <= 10) {
128 mission.triggerCreateFleet(FleetSize.HUGE, FleetQuality.SMOD_2,
129 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system);
130 }
131
132 if (largeUseCarriers) {
133 mission.triggerSetFleetDoctrineComp(3, 4, 0);
134 mission.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1);
135 mission.triggerFleetAddCommanderSkill(Skills.FIGHTER_UPLINK, 1);
136 } else {
137 if (largeUsePhase) {
138 mission.triggerSetFleetDoctrineComp(3, 0, 2);
139 mission.triggerFleetAddCommanderSkill(Skills.PHASE_CORPS, 1);
140 mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
141 } else {
142 mission.triggerSetFleetDoctrineComp(5, 0, 0);
143 mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
144 mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1);
145 }
146 }
147
148 mission.triggerSetFleetDoctrineOther(3, 3);
149 mission.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
150 }
151
152
153 mission.triggerSetFleetNoCommanderSkills();
154 mission.triggerFleetAddCommanderSkill(Skills.CREW_TRAINING, 1);
155 mission.triggerSetFleetFaction(Factions.INDEPENDENT);
156 if (isAggro()) {
157 mission.triggerMakeHostileAndAggressive();
158 mission.triggerMakeNoRepImpact();
159 }
160 mission.triggerFleetAllowLongPursuit();
161 mission.triggerDoNotShowFleetDesc();
162 mission.triggerFleetSetAllWeapons();
163
164 mission.triggerPickLocationAtInSystemJumpPoint(data.system);
165 mission.triggerSpawnFleetAtPickedLocation(null, null);
166 //mission.triggerFleetSetPatrolActionText("patrolling");
167 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.SALVAGEABLE, Tags.PLANET, Tags.OBJECTIVE);
168
169 data.fleet = createFleet(mission, data);
170 if (data.fleet == null) return null;
171
172 setRepChangesBasedOnDifficulty(data, difficulty);
173 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.MERC_MULT, mission);
174
175 return data;
176 }
177
178 @Override
179 public void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data) {
180 String id = mission.getMissionId();
181 if (data.custom1 != null) {
182 mission.set("$" + id + "_smallMerc", data.difficulty);
183 mission.set("$bcb_smallMerc", data.difficulty);
184 } else {
185 mission.unset("$" + id + "_smallMerc");
186 mission.unset("$bcb_smallMerc");
187 }
188 }
189
190 @Override
191 public int getMaxDifficulty() {
192 return super.getMaxDifficulty();
193 }
194
195 @Override
196 public int getMinDifficulty() {
197 return 6;
198 }
199
200}
201
202
203
204
205
206
void beginFleet(HubMissionWithBarEvent mission, CustomBountyData data)
CampaignFleetAPI createFleet(HubMissionWithBarEvent mission, CustomBountyData data)
StarSystemAPI findSystem(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
Definition CBMerc.java:31
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
Definition CBMerc.java:46
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
Definition CBMerc.java:23
void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBMerc.java:179
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBMerc.java:27
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
Definition CBStats.java:83