1package com.fs.starfarer.api.impl.campaign.missions.cb;
4import java.util.ArrayList;
6import java.util.Random;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.fleet.FleetMemberAPI;
16import com.fs.starfarer.api.fleet.FleetMemberType;
17import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards;
18import com.fs.starfarer.api.impl.campaign.DebugFlags;
19import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.Abortable;
20import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.EntityAdded;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
33 Color tc,
float pad, HubMissionWithBarEvent mission,
36 info.addPara(
"Target is in the " + data.
system.getNameWithLowercaseTypeShort() +
"", tc, pad);
43 Color h = Misc.getHighlightColor();
45 info.addPara(
"The target is located in the " + data.
system.getNameWithLowercaseType() +
".", opad);
51 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
52 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
55 float iconSize = 440 / cols;
56 Color h = Misc.getHighlightColor();
59 for (FleetMemberAPI member : members) {
60 if (list.size() >= max)
break;
62 if (member.isFighterWing())
continue;
65 if (member.isFlagship()) {
66 copy.setCaptain(data.
fleet.getCommander());
71 if (!list.isEmpty()) {
72 TooltipMakerAPI info = text.beginTooltip();
73 info.setParaSmallInsignia();
74 info.addPara(Misc.ucFirst(mission.getPerson().getHeOrShe()) +
" taps a data pad, and " +
75 "an intel assessment shows up on your tripad.", 0f);
76 info.addShipList(cols, 1, iconSize, data.
fleet.getFaction().getBaseUIColor(), list, opad);
78 int num = members.size() - list.size();
81 else if (num < 10) num = 5;
82 else if (num < 20) num = 10;
86 info.addPara(
"The assessment notes the fleet may contain upwards of %s other ships" +
87 " of lesser significance.", opad, h,
"" + num);
89 info.addPara(
"The assessment notes the fleet may contain several other ships" +
90 " of lesser significance.", opad);
92 info.addPara(
"It appears to contain complete information about the scope of the assignment.", opad);
112 PersonAPI person = data.
fleet.getCommander();
113 FactionAPI faction = person.getFaction();
115 float iconSize = width / cols;
117 Color h = Misc.getHighlightColor();
122 boolean deflate =
false;
123 if (!data.
fleet.isInflated()) {
124 data.
fleet.inflateIfNeeded();
128 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
129 Random random =
new Random(person.getNameString().hashCode() * 170000);
131 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
133 for (FleetMemberAPI member : members) {
134 if (list.size() >= max)
break;
136 if (member.isFighterWing())
continue;
146 if (member.isFlagship()) {
147 copy.setCaptain(person);
152 if (!list.isEmpty()) {
153 info.addPara(
"The bounty posting contains partial intel on some of the ships in the target fleet.", opad);
154 info.addShipList(cols, 1, iconSize, faction.getBaseUIColor(), list, opad);
156 int num = members.size() - list.size();
159 if (num < 5) num = 0;
160 else if (num < 10) num = 5;
161 else if (num < 20) num = 10;
165 info.addPara(
"The intel assessment notes the fleet may contain upwards of %s other ships" +
166 " of lesser significance.", opad, h,
"" + num);
167 }
else if (num > 0) {
168 info.addPara(
"The intel assessment notes the fleet may contain several other ships" +
169 " of lesser significance.", opad);
174 data.
fleet.deflate();
178 public float getFrequency(HubMissionWithBarEvent mission,
int difficulty) {
179 PersonAPI person = mission.getPerson();
191 return "$" +
getId() +
"_numCompleted";
194 return "$" +
getId() +
"_numCompleted";
209 return getClass().getSimpleName();
217 return RepRewards.TINY;
221 return RepRewards.MEDIUM;
224 protected static Object
STAGE =
new Object();
226 mission.beginStageTrigger(
STAGE);
230 mission.triggerMakeFleetIgnoreOtherFleetsExceptPlayer();
231 mission.triggerFleetOnlyEngageableWhenVisibleToPlayer();
232 mission.endTrigger();
234 List<Abortable> before =
new ArrayList<Abortable>(mission.getChanges());
235 List<CampaignFleetAPI> fleets = mission.runStageTriggersReturnFleets(
STAGE);
236 if (fleets.isEmpty())
return null;
238 CampaignFleetAPI fleet = fleets.get(0);
239 mission.getChanges().add(
new EntityAdded(fleet));
241 for (Abortable curr : mission.getChanges()) {
242 if (!before.contains(curr)) {
250 PersonAPI person = mission.getPerson();
253 Integer num = (Integer)
Global.
getSector().getMemoryWithoutUpdate().get(key);
254 if (num ==
null) num = 0;
259 num = (Integer) person.getMemoryWithoutUpdate().get(key);
260 if (num ==
null) num = 0;
262 person.getMemoryWithoutUpdate().set(key, num);
271 Integer num = (Integer) person.getMemoryWithoutUpdate().get(key);
272 if (num ==
null) num = 0;
278 Integer num = (Integer)
Global.
getSector().getMemoryWithoutUpdate().get(key);
279 if (num ==
null) num = 0;
313 if (difficulty <= 3) {
314 data.repPerson = RepRewards.SMALL;
315 data.repFaction = RepRewards.TINY;
316 }
else if (difficulty <= 7) {
317 data.repPerson = RepRewards.MEDIUM;
318 data.repFaction = RepRewards.SMALL;
320 data.repPerson = RepRewards.HIGH;
321 data.repFaction = RepRewards.SMALL;
static FactoryAPI getFactory()
static SectorAPI getSector()
static boolean PERSON_BOUNTY_DEBUG_INFO
int getNumCompletedGlobal()
static float DEFAULT_FREQUENCY
String getBaseBountyName(HubMissionWithBarEvent mission, CustomBountyData data)
boolean isReduceFrequencyBasedOnNumberOfCompletions()
boolean isRepeatableGlobally()
void notifyCompleted(HubMissionWithBarEvent mission, CustomBountyData data)
int getNumCompletedForPerson(PersonAPI person)
void setRepChangesBasedOnDifficulty(CustomBountyData data, int difficulty)
String getNumCompletedGlobalKey()
StarSystemAPI getSystemWithNoTimeLimit(CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
String getNumCompletedPerPersonKey()
void beginFleet(HubMissionWithBarEvent mission, CustomBountyData data)
void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data)
boolean isRepeatablePerPerson()
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
boolean systemMatchesRequirement(StarSystemAPI system)
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)
CampaignFleetAPI createFleet(HubMissionWithBarEvent mission, CustomBountyData data)
void notifyFailed(HubMissionWithBarEvent mission, CustomBountyData data)
void addTargetLocationAndDescriptionBulletPoint(TooltipMakerAPI info, Color tc, float pad, HubMissionWithBarEvent mission, CustomBountyData data)
void addTargetLocationAndDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
static float DEFAULT_DAYS
List< Abortable > abortWhenOtherVersionAccepted
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
static int MAX_DIFFICULTY
static int MIN_DIFFICULTY