Starsector API
Loading...
Searching...
No Matches
CBTrader.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.Commodities;
6import com.fs.starfarer.api.impl.campaign.ids.Factions;
7import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
8import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
9import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
10import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
11import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
12import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
13import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
14
15public class CBTrader extends BaseCustomBountyCreator {
16
17 public static float PROB_IN_SYSTEM_WITH_BASE = 0.5f;
18
19 @Override
20 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
21 return super.getFrequency(mission, difficulty) * CBStats.TRADER_FREQ;
22 }
23
24 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
25 return " - Trade Fleet";
26 }
27
28 @Override
29 public float getBountyDays() {
30 return 30f;
31 }
32
33 @Override
34 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
36 data.difficulty = difficulty;
37 data.stage = bountyStage;
38
39 //mission.requireSystem(this);
40 mission.requireMarketSizeAtLeast(4);
41 mission.requireMarketNotHidden();
42 mission.requireMarketHasSpaceport();
43 mission.requireMarketNotInHyperspace();
44 mission.requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_DECENTRALIZED);
45 mission.requireMarketFactionNot(Factions.PIRATES); // redundant, given the above
46 mission.requireMarketFactionNotPlayer();
47 mission.requireMarketLocationNot(createdAt.getContainingLocation());
48 MarketAPI target = mission.pickMarket();
49
50 if (target == null || target.getStarSystem() == null) return null;
51
52
53 StarSystemAPI system = target.getStarSystem();
54 data.system = system;
55 data.market = target;
56
57 FleetSize size = FleetSize.SMALL;
58 FleetQuality quality = FleetQuality.DEFAULT;
59 OfficerQuality oQuality = OfficerQuality.LOWER;
60 OfficerNum oNum = OfficerNum.FEWER;
61 String type = FleetTypes.TRADE;
62
63 if (difficulty <= 3) {
64 size = FleetSize.TINY;
65 type = FleetTypes.TRADE_SMALL;
66 }
67
68
69 beginFleet(mission, data);
70 mission.triggerCreateFleet(size, quality, Factions.INDEPENDENT, type, data.system);
71 mission.triggerSetFleetOfficers(oNum, oQuality);
72 mission.triggerSetFleetNoCommanderSkills();
73 mission.triggerSetFleetComposition(1f, 0.2f, 0f, 0f, 0f);
74 mission.triggerSetFleetProbabilityCombatFreighters(0f);
75 mission.triggerPickLocationAtInSystemJumpPoint(data.system);
76 mission.triggerSpawnFleetAtPickedLocation(null, null);
77
78 String expensive = mission.pickOne(Commodities.LUXURY_GOODS,
79 Commodities.RARE_METALS, Commodities.VOLATILES, Commodities.LOBSTER);
80 String cheap = mission.pickOne(Commodities.DOMESTIC_GOODS, Commodities.FOOD, Commodities.ORGANICS);
81
82 mission.triggerAddCommodityFractionDrop(expensive, 0.25f);
83 mission.triggerAddCommodityFractionDrop(cheap, 0.25f);
84 mission.triggerFleetSetPatrolActionText("waiting for customs inspection");
85 mission.triggerOrderFleetPatrol(data.system, true, target.getPrimaryEntity());
86 mission.triggerFleetSetPatrolLeashRange(800f);
87
88 data.fleet = createFleet(mission, data);
89 if (data.fleet == null) return null;
90
91 data.custom1 = target;
92
93 setRepChangesBasedOnDifficulty(data, difficulty);
94 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.TRADER_MULT, mission);
95
96 return data;
97 }
98
99 @Override
100 public void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data) {
101
102 FleetSize size = FleetSize.SMALL;
103 FleetQuality quality = FleetQuality.DEFAULT;
104 OfficerQuality oQuality = OfficerQuality.DEFAULT;
105 OfficerNum oNum = OfficerNum.DEFAULT;
106 String type = FleetTypes.PATROL_MEDIUM;
107
108 int difficulty = data.difficulty;
109 int num = 1;
110 if (difficulty > 6) num = 2;
111
112 for (int i = 0; i < num; i++) {
113 if (difficulty <= 2) {
114 size = FleetSize.TINY;
115 type = FleetTypes.PATROL_SMALL;
116 } else if (difficulty <= 3) {
117 size = FleetSize.VERY_SMALL;
118 type = FleetTypes.PATROL_SMALL;
119 } else if (difficulty <= 4) {
120 size = FleetSize.SMALL;
121 type = FleetTypes.PATROL_SMALL;
122 } else if (difficulty <= 5) {
123 size = FleetSize.MEDIUM;
124 type = FleetTypes.PATROL_MEDIUM;
125 } else {
126 size = FleetSize.LARGE;
127 type = FleetTypes.PATROL_LARGE;
128 }
129
130 MarketAPI market = (MarketAPI) data.custom1;
131 mission.beginWithinHyperspaceRangeTrigger(market, 1f, false, data.stage);
132 mission.triggerCreateFleet(size, quality, market.getFactionId(), type, market.getPrimaryEntity());
133 mission.triggerSetFleetOfficers(oNum, oQuality);
134 mission.triggerSetPatrol();
135 mission.triggerSpawnFleetNear(data.fleet, null, null);
136 mission.triggerFleetSetPatrolActionText("guarding " + data.fleet.getName().toLowerCase());
137 mission.triggerFleetSetPatrolLeashRange(100f);
138 mission.triggerOrderFleetPatrol(data.system, true, data.fleet);
139 mission.endTrigger();
140
141 difficulty -= 4;
142 }
143
144 }
145
146
147 @Override
148 public int getMaxDifficulty() {
149 return MAX_DIFFICULTY;
150 }
151
152 @Override
153 public int getMinDifficulty() {
154 return 0;
155 }
156
157}
158
159
160
161
162
163
void beginFleet(HubMissionWithBarEvent mission, CustomBountyData data)
CampaignFleetAPI createFleet(HubMissionWithBarEvent mission, CustomBountyData data)
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
Definition CBStats.java:83
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
Definition CBTrader.java:24
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
Definition CBTrader.java:34
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
Definition CBTrader.java:20
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)