1package com.fs.starfarer.api.impl.campaign.missions.cb;
4import java.util.ArrayList;
5import java.util.LinkedHashSet;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.BattleAPI;
12import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
13import com.fs.starfarer.api.campaign.CampaignFleetAPI;
14import com.fs.starfarer.api.campaign.InteractionDialogAPI;
15import com.fs.starfarer.api.campaign.PlanetAPI;
16import com.fs.starfarer.api.campaign.SectorEntityToken;
17import com.fs.starfarer.api.campaign.econ.MarketAPI;
18import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
19import com.fs.starfarer.api.campaign.rules.MemKeys;
20import com.fs.starfarer.api.campaign.rules.MemoryAPI;
21import com.fs.starfarer.api.characters.PersonAPI;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
23import com.fs.starfarer.api.impl.campaign.missions.cb.CustomBountyCreator.CustomBountyData;
24import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
25import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
26import com.fs.starfarer.api.ui.SectorMapAPI;
27import com.fs.starfarer.api.ui.TooltipMakerAPI;
28import com.fs.starfarer.api.util.Misc;
29import com.fs.starfarer.api.util.Misc.Token;
30import com.fs.starfarer.api.util.WeightedRandomPicker;
36 public static enum Stage {
43 public static enum DifficultyChoice {
49 public static class AggregateBountyData {
50 public List<Integer> completedDifficulty =
new ArrayList<Integer>();
61 data =
new AggregateBountyData();
80 return new ArrayList<CustomBountyCreator>();
91 for (Integer diff : d.completedDifficulty) {
96 float difficulty = total;
99 difficulty = (int) difficulty;
109 difficulty = Math.min(difficulty - 3f, (
int)(difficulty / 2f));
114 difficulty = difficulty + 1;
118 difficulty = difficulty + 3;
122 int result = (int)Math.round(difficulty);
140 }
catch (Throwable t) {
141 throw new RuntimeException(t);
151 if (curr.getMinDifficulty() > difficulty)
continue;
152 if (curr.getMaxDifficulty() < difficulty)
continue;
155 if (choice == DifficultyChoice.HIGH) {
157 if (difficulty >= threshold)
continue;
159 if (choice == DifficultyChoice.NORMAL) {
161 if (difficulty >= threshold)
continue;
164 float probToSkip = (1.1f -
quality) * (
float) curr.getMinDifficulty() / maxDiff;
167 picker.
add(curr, curr.getFrequency(
this, difficulty));
170 return picker.
pick();
209 if (person ==
null)
return false;
288 set(
"$" +
id +
"_targetHeOrShe", p.
getHeOrShe());
289 set(
"$" +
id +
"_targetHisOrHer", p.
getHisOrHer());
290 set(
"$" +
id +
"_targetHimOrHer", p.
getHimOrHer());
314 Map<String, MemoryAPI> memoryMap) {
316 if (
"showBountyDetail".equals(action)) {
319 DifficultyChoice difficulty = (DifficultyChoice) Enum.valueOf(DifficultyChoice.class, memory.
getString(
"$" +
id +
"_difficulty"));
322 switch (difficulty) {
345 if (icon ==
null) icon =
getIcon();
347 Set<String> tags =
new LinkedHashSet<String>();
360 true, icon, text, tags);
363 }
else if (
"showBountyAssessment".equals(action) &&
showCreator !=
null) {
369 return super.callAction(action, ruleId, dialog, params, memoryMap);
377 DifficultyChoice difficulty = (DifficultyChoice) Enum.valueOf(DifficultyChoice.class, memory.
getString(
"$" +
id +
"_difficulty"));
378 List<Abortable>
abort =
new ArrayList<Abortable>();
379 switch (difficulty) {
400 for (Abortable curr :
abort) {
401 curr.abort(
this,
false);
420 if (market !=
null) {
422 if (station !=
null) {
440 super.accept(dialog, memoryMap);
480 return super.getMapLocation(map);
485 super.notifyEnding();
496 d.completedDifficulty.remove(0);
505 d.completedDifficulty.add(0);
507 d.completedDifficulty.remove(0);
518 if (battle.
isInvolved(fleet) && !playerInvolved) {
553 if (this.data.
fleet == fleet) {
577 String post = super.getPostfixForState();
578 post = post.replaceFirst(
" - ",
"");
579 if (!post.isEmpty()) post =
" (" + post +
")";
582 return super.getPostfixForState();
587 return super.getName();
static SectorAPI getSector()
static final String LOCAL
boolean callAction(String action, String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void createBarGiver(MarketAPI createdAt)
void updateInteractionDataImpl()
CustomBountyCreator creatorLow
void setTestMode(Class c, int difficulty)
CustomBountyData dataHigh
boolean create(MarketAPI createdAt, boolean barEvent)
String getPostfixForState()
String getAggregateDataKey()
void accept(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void endFailureImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
List< CustomBountyCreator > getCreators()
SectorEntityToken getMapLocation(SectorMapAPI map)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void endSuccessImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
static int NUM_TO_TRACK_FOR_DIFFICULTY
String getMissionTypeNoun()
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
CustomBountyCreator creator
transient CustomBountyData showData
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
int pickDifficulty(DifficultyChoice choice)
CustomBountyCreator creatorHigh
AggregateBountyData getAggregateData()
CustomBountyCreator creatorNormal
transient Integer difficultyOverride
CustomBountyCreator pickCreator(int difficulty, DifficultyChoice choice)
void acceptImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
transient CustomBountyCreator showCreator
CustomBountyData dataNormal
transient Class creatorOverride
static int getThresholdNotHigh(Class c)
static int getThresholdNotNormal(Class c)
List< Abortable > abortWhenOtherVersionAccepted
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
void connectWithMemoryFlag(Object from, Object to, HasMemory withMemory, String flag)
boolean rollProbability(float p)
void setRepRewardFaction(Float repRewardFaction)
boolean setPersonMissionRef(PersonAPI person, String key)
void setIconName(String iconName)
void setRepRewardPerson(Float repRewardPerson)
int getDistanceLY(MarketAPI market)
void makeImportant(PersonAPI person, String flag, Enum ... stages)
void setSuccessStage(Object id)
void setCreditRewardApplyRelMult(Integer creditReward)
void setFailureStage(Object id)
void updateInteractionData(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void setStartingStage(Object startingStage)
void addNoPenaltyFailureStages(Object ... ids)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
static String getWithDGS(float num)
static String ucFirst(String str)
static Color setAlpha(Color color, int alpha)
static Color getBasePlayerColor()
static Color setBrightness(Color color, int brightness)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static MarketAPI getStationMarket(CampaignFleetAPI station)
static Color getHighlightColor()
static SectorEntityToken getStationEntity(MarketAPI market, CampaignFleetAPI fleet)
boolean onPlayerSide(CampaignFleetAPI fleet)
boolean isInvolved(CampaignFleetAPI test)
boolean isPlayerInvolved()
FleetMemberAPI getFlagship()
boolean isInCurrentLocation()
boolean isNeutralFaction()
void addEventListener(FleetEventListener listener)
TextPanelAPI getTextPanel()
VisualPanelAPI getVisualPanel()
SectorEntityToken getInteractionTarget()
String getNameWithLowercaseType()
String getNameWithLowercaseTypeShort()
CampaignFleetAPI getPlayerFleet()
MemoryAPI getMemoryWithoutUpdate()
SectorEntityToken getCenter()
void showMapMarker(SectorEntityToken marker, String title, Color titleColor, boolean withIntel, String icon, String text, Set< String > intelTags)
Color getTextColorForFactionOrPlanet()
String getString(String key)
void set(String key, Object value)
MemoryAPI getMemoryWithoutUpdate()
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data)
void notifyFailed(HubMissionWithBarEvent mission, CustomBountyData data)
void addTargetLocationAndDescriptionBulletPoint(TooltipMakerAPI info, Color tc, float pad, HubMissionWithBarEvent mission, CustomBountyData data)
void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
static int MAX_DIFFICULTY
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
void addTargetLocationAndDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
void notifyCompleted(HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)
StarSystemAPI getSystemWithNoTimeLimit(CustomBountyData data)
String getBaseBountyName(HubMissionWithBarEvent mission, CustomBountyData data)
static int MIN_DIFFICULTY