Starsector API
Loading...
Searching...
No Matches
CBPatrol.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.cb;
2
3import java.awt.Color;
4
5import com.fs.starfarer.api.campaign.CampaignFleetAPI;
6import com.fs.starfarer.api.campaign.StarSystemAPI;
7import com.fs.starfarer.api.campaign.econ.MarketAPI;
8import com.fs.starfarer.api.impl.campaign.ids.Factions;
9import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
10import com.fs.starfarer.api.impl.campaign.ids.Tags;
11import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
12import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
13import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
14import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
15import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
16import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
17import com.fs.starfarer.api.ui.TooltipMakerAPI;
18import com.fs.starfarer.api.util.Misc;
19
20public class CBPatrol extends BaseCustomBountyCreator {
21
22 @Override
23 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
24 return super.getFrequency(mission, difficulty) * CBStats.PATROL_FREQ;
25 }
26
27 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
28 return " - Patrol";
29 }
30
31 public void addTargetLocationAndDescriptionBulletPoint(TooltipMakerAPI info,
32 Color tc, float pad, HubMissionWithBarEvent mission,
33 CustomBountyData data) {
34 if (data.system != null) {
35 //info.addPara("Target is in the " + data.system.getNameWithLowercaseTypeShort() + "", tc, pad);
36 info.addPara("Target is a %s patrol located in the " +
37 data.system.getNameWithLowercaseType() + ".", pad,
38 tc, data.fleet.getFaction().getBaseUIColor(), data.fleet.getFaction().getPersonNamePrefix());
39 }
40 }
41
42 public void addTargetLocationAndDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data) {
43 float opad = 10f;
44 float pad = 3f;
45 Color h = Misc.getHighlightColor();
46 if (data.system != null && data.fleet != null && data.market != null) {
47 info.addPara("The target is a %s patrol and is located in the " + data.system.getNameWithLowercaseType() + ".", opad,
48 data.fleet.getFaction().getBaseUIColor(), data.fleet.getFaction().getPersonNamePrefix());
49 info.addPara("It will most likely be found either in orbit around " +
50 data.market.getName() + ", or patrolling one of the system's objectives "
51 + "(such as a comm relay) or jump-points.", opad);
52 }
53 }
54
55 @Override
56 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
58 data.difficulty = difficulty;
59
60 mission.requireMarketSizeAtLeast(4);
61 mission.requireMarketNotHidden();
62 mission.requireMarketHasSpaceport();
63 mission.requireMarketNotInHyperspace();
64 mission.requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_DECENTRALIZED);
65 mission.requireMarketFactionNot(Factions.PIRATES); // redundant, given the above
66 mission.requireMarketFactionNotPlayer();
67 mission.requireMarketLocationNot(createdAt.getContainingLocation());
68 MarketAPI target = mission.pickMarket();
69
70 if (target == null || target.getStarSystem() == null) return null;
71
72
73 StarSystemAPI system = target.getStarSystem();
74 data.system = system;
75 data.market = target;
76
77 int num = 1;
78 if (difficulty > 6) num = 2;
79 if (difficulty > 8) num = 3;
80 float protectorDiff = difficulty - 3;
81
82 FleetSize size = FleetSize.MEDIUM;
83 FleetQuality quality = FleetQuality.DEFAULT;
84 String type = FleetTypes.PATROL_MEDIUM;
85 OfficerQuality oQuality = OfficerQuality.DEFAULT;
86 OfficerNum oNum = OfficerNum.DEFAULT;
87
88 for (int i = 0; i < num; i++) {
89 float diff = difficulty;
90 if (i > 0) diff = protectorDiff;
91
92 if (diff <= 2) {
93 size = FleetSize.TINY;
94 type = FleetTypes.PATROL_SMALL;
95 } else if (diff <= 3) {
96 size = FleetSize.VERY_SMALL;
97 type = FleetTypes.PATROL_SMALL;
98 } else if (diff <= 4) {
99 size = FleetSize.SMALL;
100 type = FleetTypes.PATROL_SMALL;
101 } else if (difficulty <= 5) {
102 size = FleetSize.MEDIUM;
103 type = FleetTypes.PATROL_MEDIUM;
104 } else {
105 size = FleetSize.LARGE;
106 type = FleetTypes.PATROL_LARGE;
107 }
108
109 beginFleet(mission, data);
110 mission.triggerCreateFleet(size, quality, target.getFactionId(), type, data.system);
111 mission.triggerSetFleetOfficers(oNum, oQuality);
112 mission.triggerAutoAdjustFleetSize(size, size.next());
113 mission.triggerFleetAllowLongPursuit();
114 mission.triggerFleetSetAllWeapons();
115
116 mission.triggerSetPatrol();
117
118 if (i == 0) {
119 mission.triggerSpawnFleetNear(target.getPrimaryEntity(), null, null);
120 mission.triggerFleetSetPatrolActionText("patrolling");
121 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.OBJECTIVE);
122 mission.triggerOrderExtraPatrolPoints(target.getPrimaryEntity());
123 } else {
124 mission.triggerSpawnFleetNear(data.fleet, null, null);
125 mission.triggerFleetSetPatrolActionText("guarding " + data.fleet.getName().toLowerCase());
126 mission.triggerFleetSetPatrolLeashRange(100f);
127 mission.triggerOrderFleetPatrol(data.system, true, data.fleet);
128 }
129
130 CampaignFleetAPI fleet = createFleet(mission, data);
131 if (i == 0) {
132 data.fleet = fleet;
133 }
134 }
135
136 if (data.fleet == null) return null;
137
138 setRepChangesBasedOnDifficulty(data, difficulty);
139 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.PATROL_MULT, mission);
140
141 return data;
142 }
143
144 @Override
145 public void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data) {
146 String id = mission.getMissionId();
147 String faction = data.fleet.getFaction().getPersonNamePrefix();
148 Color factionColor = data.fleet.getFaction().getBaseUIColor();
149 mission.set("$" + id + "_patrolFaction", faction);
150 mission.set("$bcb_patrolFaction", faction);
151 mission.set("$" + id + "_patrolFactionColor", factionColor);
152 mission.set("$bcb_patrolFactionColor", factionColor);
153 }
154
155
156 @Override
157 public int getMaxDifficulty() {
158 return super.getMaxDifficulty();
159 }
160
161 @Override
162 public int getMinDifficulty() {
163 return 0;
164 }
165
166}
167
168
169
170
171
172
void beginFleet(HubMissionWithBarEvent mission, CustomBountyData data)
CampaignFleetAPI createFleet(HubMissionWithBarEvent mission, CustomBountyData data)
void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBPatrol.java:27
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
Definition CBPatrol.java:23
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
Definition CBPatrol.java:56
void addTargetLocationAndDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBPatrol.java:42
void addTargetLocationAndDescriptionBulletPoint(TooltipMakerAPI info, Color tc, float pad, HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBPatrol.java:31
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
Definition CBStats.java:83