1package com.fs.starfarer.api.impl.campaign.intel;
4import java.util.ArrayList;
5import java.util.LinkedHashMap;
6import java.util.LinkedHashSet;
10import org.apache.log4j.Logger;
12import com.fs.starfarer.api.EveryFrameScript;
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.BattleAPI;
15import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
16import com.fs.starfarer.api.campaign.CampaignFleetAPI;
17import com.fs.starfarer.api.campaign.FactionAPI;
18import com.fs.starfarer.api.campaign.InteractionDialogAPI;
19import com.fs.starfarer.api.campaign.RepLevel;
20import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
21import com.fs.starfarer.api.campaign.SectorEntityToken;
22import com.fs.starfarer.api.campaign.econ.MarketAPI;
23import com.fs.starfarer.api.campaign.econ.MonthlyReport;
24import com.fs.starfarer.api.campaign.econ.MonthlyReport.FDNode;
25import com.fs.starfarer.api.campaign.listeners.EconomyTickListener;
26import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
27import com.fs.starfarer.api.campaign.listeners.ListenerUtil;
28import com.fs.starfarer.api.fleet.FleetMemberAPI;
29import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
30import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
31import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
32import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
33import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
34import com.fs.starfarer.api.impl.campaign.ids.Tags;
35import com.fs.starfarer.api.impl.campaign.rulecmd.missions.Commission;
36import com.fs.starfarer.api.impl.campaign.shared.SharedData;
37import com.fs.starfarer.api.ui.SectorMapAPI;
38import com.fs.starfarer.api.ui.TooltipMakerAPI;
39import com.fs.starfarer.api.ui.TooltipMakerAPI.TooltipCreator;
40import com.fs.starfarer.api.util.Misc;
48 public static class CommissionBountyResult
extends MissionResult {
49 public float fraction;
50 public CommissionBountyResult(
int payment,
float fraction, ReputationAdjustmentResult rep) {
52 this.fraction = fraction;
56 public static class RepChangeData {
68 protected LinkedHashMap<String, RepChangeData>
repChanges =
new LinkedHashMap<String, RepChangeData>();
134 RepChangeData change =
repChanges.get(other.getId());
136 boolean madeHostile = change !=
null;
140 if (factionHostile && !playerHostile && !madeHostile) {
144 if (!factionHostile && madeHostile) {
152 new RepActionEnvelope(RepActions.MAKE_HOSTILE_AT_BEST,
153 null,
null, dialog !=
null ? dialog.
getTextPanel() :
null,
false,
true),
156 RepChangeData data =
new RepChangeData();
157 data.faction = other;
158 data.delta = rep.delta;
163 String
id = other.
getId();
166 if (change ==
null)
return;
168 CustomRepImpact impact =
new CustomRepImpact();
169 impact.delta = -change.delta;
170 impact.delta = Math.max(0f, impact.delta -
Global.
getSettings().
getFloat(
"factionCommissionRestoredRelationshipPenalty"));
171 if (impact.delta > 0) {
173 new RepActionEnvelope(RepActions.CUSTOM,
174 impact,
null, dialog !=
null ? dialog.
getTextPanel() :
null,
false,
true),
181 for (RepChangeData data :
new ArrayList<RepChangeData>(
repChanges.values())) {
188 Set<FactionAPI> factions =
new LinkedHashSet<FactionAPI>();
190 if (market.isHidden())
continue;
192 if (factions.contains(curr))
continue;
199 return new ArrayList<FactionAPI>(factions);
203 List<FactionAPI> hostile =
new ArrayList<FactionAPI>();
229 float fpDestroyed = 0;
237 fpDestroyed += loss.getFleetPointCost();
248 new RepActionEnvelope(RepActions.COMMISSION_BOUNTY_REWARD,
new Float(repFP),
null,
null,
true,
false),
263 if (mode == ListInfoMode.IN_DESC) initPad = opad;
280 info.
addPara(
"%s share based on damage dealt", 0f, tc, h,
281 "" + (
int) Math.round(
latestResult.fraction * 100f) +
"%");
284 null,
null, info, tc, isUpdate, 0f);
285 }
else if (mode == ListInfoMode.IN_DESC) {
326 return prefix +
" - Annulled";
328 return prefix +
" - Annulled";
332 return prefix +
" - Resigned";
336 return prefix +
" - Accepted";
358 boolean forMarketConditionTooltip) {
371 " due to your standing falling too low.",
384 info.
addPara(
"You've accepted a %s commission.",
389 info.
addPara(
"The combat bounty payment depends on the number and size of ships destroyed.", opad);
396 info.
addPara(
"Most recent bounty:", opad);
400 info.
addPara(
"%s share based on damage dealt", 0f, tc, h,
401 "" + (
int) Math.round(
latestResult.fraction * 100f) +
"%");
404 null,
null, info, tc,
false, 0f);
413 info.
addPara(
"You can not resign your commission while polities under your "
414 +
"control are members of the League.", opad);
424 Set<String> tags = super.getIntelTags(map);
445 CustomRepImpact impact =
new CustomRepImpact();
451 new RepActionEnvelope(RepActions.CUSTOM,
452 impact,
null, dialog !=
null ? dialog.
getTextPanel() :
null,
false,
true),
454 return new MissionResult();
456 return new MissionResult();
461 return new MissionResult();
485 float f = 1f / numIter;
491 fleetNode.name =
"Fleet";
497 stipendNode.income += stipend * f;
499 if (stipendNode.name ==
null) {
503 public boolean isTooltipExpandable(Object tooltipParam) {
506 public float getTooltipWidth(Object tooltipParam) {
509 public void createTooltip(
TooltipMakerAPI tooltip,
boolean expanded, Object tooltipParam) {
static SettingsAPI getSettings()
static Logger getLogger(Class c)
static SectorAPI getSector()
FDNode getNode(String ... path)
MonthlyReportNodeTooltipCreator getMonthlyReportTooltip()
static void reportCommissionEnded(FactionCommissionIntel intel)
static void addRequiredStanding(FactionAPI faction, RepLevel req, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad, boolean orBetter)
static void addAdjustmentMessage(float delta, FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, boolean withCurrent, float pad)
static void addCurrentStanding(FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad)
static final String FCM_EVENT
static final String FCM_FACTION
boolean isSendingUpdate()
void unindent(TooltipMakerAPI info)
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
Object getListInfoParam()
Color getBulletColorForMode(ListInfoMode mode)
void setImportant(Boolean important)
void bullet(TooltipMakerAPI info)
Color getTitleColor(ListInfoMode mode)
void setMissionState(MissionState missionState)
MissionResult missionResult
void addAbandonButton(TooltipMakerAPI info, float width)
void setMissionResult(MissionResult missionResult)
void createSmallDescription(TooltipMakerAPI info, float width, float height)
void makeRepChanges(InteractionDialogAPI dialog)
void makeHostile(FactionAPI other, InteractionDialogAPI dialog)
SectorEntityToken getMapLocation(SectorMapAPI map)
void reportEconomyTick(int iterIndex)
void undoRepChange(FactionAPI other, InteractionDialogAPI dialog)
float getNoPenaltyAbandonDays()
LinkedHashMap< String, RepChangeData > repChanges
void reportBattleOccurred(CampaignFleetAPI fleet, CampaignFleetAPI primaryWinner, BattleAPI battle)
FactionAPI getFactionForUIColors()
String getMissionTypeNoun()
void advanceMission(float amount)
void createSmallDescription(TooltipMakerAPI info, float width, float height, boolean forMarketConditionTooltip)
void endMission(InteractionDialogAPI dialog)
List< FactionAPI > getRelevantFactions()
Set< String > getIntelTags(SectorMapAPI map)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
void reportEconomyMonthEnd()
MissionResult createAbandonedResult(boolean withPenalty)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
CommissionBountyResult latestResult
String getSmallDescriptionTitle()
MissionResult createTimeRanOutFailedResult()
void undoAllRepChanges(InteractionDialogAPI dialog)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
FactionCommissionIntel(FactionAPI faction)
List< FactionAPI > getHostileFactions()
MissionResult createResignedCommissionResult(boolean withPenalty, boolean inPerson, InteractionDialogAPI dialog)
static String UPDATE_PARAM_ACCEPTED
static boolean isLeagueMember()
static RepLevel COMMISSION_REQ
static SharedData getData()
MonthlyReport getCurrentReport()
static Color getTextColor()
static String getDGSCredits(float num)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
static String ucFirst(String str)
static float getSizeNum(HullSize size)
static Color getGrayColor()
static Color getHighlightColor()
boolean isAtWorst(RepLevel level)
float getFloat(String key)
float getPlayerInvolvementFraction()
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
boolean isPlayerInvolved()
float convertToDays(float realSeconds)
MutableValue getCredits()
MemoryAPI getMemoryWithoutUpdate()
String getDisplayNameWithArticleWithoutArticle()
String getDisplayNameWithArticle()
RelationshipAPI getRelToPlayer()
String getPersonNamePrefix()
boolean isShowInIntelTab()
boolean isHostileTo(FactionAPI other)
TextPanelAPI getTextPanel()
CampaignFleetAPI getPlayerFleet()
void addScript(EveryFrameScript script)
ReputationAdjustmentResult adjustPlayerReputation(Object action, String factionId)
CampaignClockAPI getClock()
void removeScript(EveryFrameScript script)
FactionAPI getPlayerFaction()
IntelManagerAPI getIntelManager()
PersonAPI getPlayerPerson()
ListenerManagerAPI getListenerManager()
CharacterDataAPI getCharacterData()
void addIntel(IntelInfoPlugin plugin)
List< MarketAPI > getMarketsCopy()
void addListener(Object listener)
void removeListener(Object listener)
void set(String key, Object value)
MutableCharacterStatsAPI getStats()