47 if (TutorialMissionIntel.isTutorialInProgress()) {
52 if (market ==
null)
return;
54 Long seed =
new Random().nextLong();
57 OptionalFleetData extra =
new OptionalFleetData(market);
59 RouteData route = RouteManager.getInstance().addRoute(
id, market, seed, extra,
this);
61 float distLY = Misc.getDistanceLY(market.getLocationInHyperspace(),
system.getLocation());
62 float travelDays = distLY * 1.5f;
64 float prepDays = 2f + (float) Math.random() * 3f;
65 float endDays = 8f + (float) Math.random() * 3f;
67 float totalTravelTime = prepDays + endDays + travelDays * 2f;
68 float stayDays = Math.max(20f, totalTravelTime);
70 route.addSegment(
new RouteSegment(prepDays, market.getPrimaryEntity()));
71 route.addSegment(
new RouteSegment(travelDays, market.getPrimaryEntity(),
system.getCenter()));
72 route.addSegment(
new RouteSegment(stayDays,
system.getCenter()));
73 route.addSegment(
new RouteSegment(travelDays,
system.getCenter(), market.getPrimaryEntity()));
74 route.addSegment(
new RouteSegment(endDays, market.getPrimaryEntity()));
87 WeightedRandomPicker<MarketAPI> markets =
new WeightedRandomPicker<MarketAPI>();
89 for (MarketAPI market :
Global.
getSector().getEconomy().getMarketsCopy()) {
90 if (market.getFaction().isHostileTo(Factions.INDEPENDENT))
continue;
91 if (market.getContainingLocation() ==
null)
continue;
92 if (market.getContainingLocation().isHyperspace())
continue;
93 if (market.isHidden())
continue;
95 float distLY = Misc.getDistanceLY(
system.getLocation(), market.getLocationInHyperspace());
96 float weight = market.getSize();
98 float f = Math.max(0.1f, 1f - Math.min(1f, distLY / 20f));
102 markets.add(market, weight);
105 return markets.pick();
110 Random random = route.getRandom();
112 WeightedRandomPicker<String> picker =
new WeightedRandomPicker<String>(random);
113 picker.add(FleetTypes.SCAVENGER_SMALL, 10f);
114 picker.add(FleetTypes.SCAVENGER_MEDIUM, 15f);
115 picker.add(FleetTypes.SCAVENGER_LARGE, 5f);
117 String type = picker.pick();
119 boolean pirate = random.nextBoolean();
120 CampaignFleetAPI fleet =
createScavenger(type,
system.getLocation(), route, route.getMarket(), pirate, random);
121 if (fleet ==
null)
return null;;
131 public static CampaignFleetAPI
createScavenger(String type, Vector2f locInHyper, RouteData route, MarketAPI source,
boolean pirate, Random random) {
132 if (random ==
null) random =
new Random();
136 WeightedRandomPicker<String> picker =
new WeightedRandomPicker<String>(random);
137 picker.add(FleetTypes.SCAVENGER_SMALL, 10f);
138 picker.add(FleetTypes.SCAVENGER_MEDIUM, 15f);
139 picker.add(FleetTypes.SCAVENGER_LARGE, 5f);
140 type = picker.pick();
151 if (type.equals(FleetTypes.SCAVENGER_SMALL)) {
152 combat = random.nextInt(2) + 1;
153 tanker = random.nextInt(2) + 1;
154 utility = random.nextInt(2) + 1;
155 }
else if (type.equals(FleetTypes.SCAVENGER_MEDIUM)) {
156 combat = 4 + random.nextInt(5);
157 freighter = 4 + random.nextInt(5);
158 tanker = 3 + random.nextInt(4);
159 transport = random.nextInt(2);
160 utility = 2 + random.nextInt(3);
161 }
else if (type.equals(FleetTypes.SCAVENGER_LARGE)) {
162 combat = 7 + random.nextInt(8);
163 freighter = 6 + random.nextInt(7);
164 tanker = 5 + random.nextInt(6);
165 transport = 3 + random.nextInt(8);
166 utility = 4 + random.nextInt(5);
172 transport = utility = 0;
180 FleetParamsV3 params =
new FleetParamsV3(
181 route !=
null ? route.getMarket() : source,
184 route ==
null ? null : route.getQualityOverride(),
195 params.timestamp = route.getTimestamp();
197 params.random = random;
198 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(params);
200 if (fleet ==
null || fleet.isEmpty())
return null;
202 fleet.setFaction(Factions.INDEPENDENT,
true);
204 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_SCAVENGER,
true);
206 if (pirate ||
true) {
207 Misc.makeLowRepImpact(fleet,
"scav");