42 protected boolean create(MarketAPI createdAt,
boolean barEvent) {
44 List<String> posts =
new ArrayList<String>();
45 posts.add(Ranks.POST_SUPPLY_OFFICER);
46 if (Misc.isMilitary(createdAt)) {
47 posts.add(Ranks.POST_BASE_COMMANDER);
49 if (Misc.hasOrbitalStation(createdAt)) {
50 posts.add(Ranks.POST_STATION_COMMANDER);
53 String post = pickOne(posts);
55 if (post.equals(Ranks.POST_SUPPLY_OFFICER)) {
56 setGiverRank(Ranks.SPACE_COMMANDER);
57 setGiverImportance(pickImportance());
58 }
else if (post.equals(Ranks.POST_BASE_COMMANDER)) {
59 setGiverRank(Ranks.GROUND_COLONEL);
60 setGiverImportance(pickImportance());
61 }
else if (post.equals(Ranks.POST_STATION_COMMANDER)) {
62 setGiverRank(Ranks.SPACE_CAPTAIN);
63 setGiverImportance(pickHighImportance());
65 if (Factions.PIRATES.equals(createdAt.getFaction().getId())) {
66 setGiverTags(Tags.CONTACT_UNDERWORLD);
67 setGiverFaction(Factions.PIRATES);
69 setGiverTags(Tags.CONTACT_MILITARY);
71 findOrCreateGiver(createdAt,
false,
false);
74 PersonAPI person = getPerson();
75 if (person ==
null)
return false;
76 MarketAPI market = person.getMarket();
77 if (market ==
null)
return false;
79 if (market.isPlayerOwned())
return false;
80 if (!Misc.isMilitary(market) && market.getSize() < 7)
return false;
82 if (!setPersonMissionRef(person,
"$sShip_ref")) {
87 setGiverIsPotentialContactOnSuccess();
93 ShipPickParams params =
new ShipPickParams(ShipPickMode.PRIORITY_THEN_ALL);
94 String role =
pickRole(getQuality(), person.getFaction(), person.getImportance(), genRandom);
96 ShipVariantAPI variant =
null;
97 for (
int i = 0; i < 10; i++) {
98 List<ShipRolePick> picks = market.getFaction().pickShip(role, params,
null, genRandom);
99 if (picks.isEmpty())
return false;
100 String variantId = picks.get(0).variantId;
103 if (variant.getHullSpec().hasTag(Tags.NO_SELL)) {
109 if (variant ==
null)
return false;
112 assignShipName(
member, Factions.INDEPENDENT);
114 float quality = ShipQuality.getShipQuality(market, person.getFaction().getId());
115 float averageDmods = DefaultFleetInflater.getAverageDmodsForQuality(quality);
116 int addDmods = DefaultFleetInflater.getNumDModsToAdd(variant, averageDmods, genRandom);
121 member.getCrewComposition().setCrew(100000);
122 member.getRepairTracker().setCR(0.7f);
125 price = (int) Math.round(variant.getHullSpec().getBaseValue());
130 setRepFactionChangesTiny();
131 setRepPersonChangesVeryLow();
180 public static String
pickRole(
float quality, FactionAPI faction, PersonImportance imp, Random random) {
181 WeightedRandomPicker<String> picker =
new WeightedRandomPicker<String>(random);
183 float cycles = PirateBaseManager.getInstance().getDaysSinceStart() / 365f;
185 if (imp == PersonImportance.VERY_HIGH && cycles < 3) imp = PersonImportance.HIGH;
186 if (imp == PersonImportance.HIGH && cycles < 1) imp = PersonImportance.MEDIUM;
188 if (quality < 0.5f && imp.ordinal() > PersonImportance.MEDIUM.ordinal()) {
189 imp = PersonImportance.MEDIUM;
192 float w = faction.getDoctrine().getWarships() - 1f;
193 float c = faction.getDoctrine().getCarriers() - 1f;
194 float p = faction.getDoctrine().getPhaseShips() - 1f;
195 if (w + c + p < 1) w = 1;
199 picker.add(ShipRoles.COMBAT_SMALL, w);
200 picker.add(ShipRoles.COMBAT_MEDIUM, w/2f);
201 picker.add(ShipRoles.CARRIER_SMALL, c);
202 picker.add(ShipRoles.PHASE_SMALL, p);
205 picker.add(ShipRoles.COMBAT_SMALL, w/2f);
206 picker.add(ShipRoles.COMBAT_MEDIUM, w);
207 picker.add(ShipRoles.CARRIER_SMALL, c);
208 picker.add(ShipRoles.PHASE_SMALL, p);
211 picker.add(ShipRoles.COMBAT_MEDIUM, w/2f);
212 picker.add(ShipRoles.COMBAT_LARGE, w);
213 picker.add(ShipRoles.CARRIER_SMALL, c/2f);
214 picker.add(ShipRoles.CARRIER_MEDIUM, c);
215 picker.add(ShipRoles.PHASE_SMALL, p/2f);
216 picker.add(ShipRoles.PHASE_MEDIUM, p);
219 picker.add(ShipRoles.COMBAT_MEDIUM, w/4f);
220 picker.add(ShipRoles.COMBAT_LARGE, w);
221 picker.add(ShipRoles.COMBAT_CAPITAL, w/2f);
222 picker.add(ShipRoles.CARRIER_MEDIUM, c);
223 picker.add(ShipRoles.CARRIER_LARGE, c/2f);
224 picker.add(ShipRoles.PHASE_MEDIUM, p);
225 picker.add(ShipRoles.PHASE_LARGE, p/2f);
228 picker.add(ShipRoles.COMBAT_MEDIUM, w/4f);
229 picker.add(ShipRoles.COMBAT_LARGE, w/2f);
230 picker.add(ShipRoles.COMBAT_CAPITAL, w);
231 picker.add(ShipRoles.CARRIER_MEDIUM, c/2f);
232 picker.add(ShipRoles.CARRIER_LARGE, c);
233 picker.add(ShipRoles.PHASE_MEDIUM, p/2f);
234 picker.add(ShipRoles.PHASE_LARGE, p);
235 picker.add(ShipRoles.PHASE_CAPITAL, p/2f);
238 return picker.pick();