63 if (dialog ==
null)
return false;
71 CargoScanResult result =
new CargoScanResult();
74 float totalLegalCargo = 0;
75 float totalIllegal = 0;
76 float totalIllegalFound = 0;
86 boolean legal = !faction.
isIllegal(stack);
88 totalLegal += stack.getSize();
89 totalLegalCargo += stack.getCargoSpace();
91 totalIllegal += stack.getSize();
99 float unshieldedFraction = 1f - shieldedFraction;
101 float shieldedMult = (0.25f + 0.75f * unshieldedFraction);
105 float suspicionMult = 0f;
106 if (market !=
null) {
107 if (level >= 0.05f) {
108 suspicionMult = 0.5f + 0.5f * level;
112 totalLegalCargo *= shieldedMult;
115 boolean suspicious =
false;
116 boolean suspiciousDueToLevel =
false;
118 totalLegalCargo *= suspicionMult;
119 suspicious = totalLegalCargo * guiltMult * (float) Math.random() >
126 if (!suspicious && level >= 0.5f) {
127 float r = (float) Math.random();
128 suspicious |= r * r < level;
130 suspiciousDueToLevel =
true;
134 if (totalLegal + totalIllegal > 0) {
136 Collections.shuffle(stacks);
138 float illegalCargoSoFar = 0;
139 float illegalCrewSoFar = 0;
140 float illegalFuelSoFar = 0;
142 if (stack.getSize() <= 0)
continue;
143 boolean legal = !faction.
isIllegal(stack);
144 float chanceToFind = 0f;
145 if (stack.isPersonnelStack()) {
147 if (!legal) illegalCrewSoFar += stack.getSize();
148 chanceToFind = illegalCrewSoFar / totalCrew;
150 }
else if (stack.isFuelStack()) {
152 if (!legal) illegalFuelSoFar += stack.getSize();
153 chanceToFind = illegalFuelSoFar / totalFuel;
156 if (totalCargo > 0) {
157 if (!legal) illegalCargoSoFar += stack.getCargoSpace();
158 chanceToFind = illegalCargoSoFar / totalCargo;
162 chanceToFind *= guiltMult;
163 chanceToFind *= shieldedMult;
171 }
else if ((
float) Math.random() < chanceToFind) {
172 float qty = stack.getSize();
173 qty = qty * (0.33f + (float) Math.random() * 0.67f);
175 qty = Math.round(qty);
176 if (qty < 1) qty = 1;
177 illegalFound.
addItems(stack.getType(), stack.getData(), qty);
184 if (suspicious && illegalFound.
isEmpty()) {
187 if (member.isMothballed() && member.getRepairTracker().getBaseCR() < 0.2f)
continue;
188 picker.
add(member, member.getFleetPointCost());
195 while (picked < totalDamage && !picker.
isEmpty()) {
197 result.shipsToDamage.add(pick);
203 result.setLegalFound(legalFound);
204 result.setIllegalFound(illegalFound);
211 float maxPodsDist = 1500f;
214 VisibilityLevel vLevel = entity.getVisibilityLevelTo(other);
217 if (dist > maxPodsDist)
continue;
220 if (plugin.
getElapsed() <= 1f && entity.getCargo() !=
null) {
221 if (vLevel == VisibilityLevel.COMPOSITION_DETAILS ||
222 vLevel == VisibilityLevel.COMPOSITION_AND_FACTION_DETAILS) {
224 boolean legal = !faction.
isIllegal(stack);
245 text.
addParagraph(
"-----------------------------------------------------------------------------");
250 List<String> highlights =
new ArrayList<String>();
252 para += stack.getDisplayName() +
" " + Strings.X +
" " + (int)stack.getSize() +
"\n";
253 highlights.add(
"" + (
int)stack.getSize());
255 para = para.substring(0, para.length() - 1);
258 }
else if (suspicious) {
259 if (suspiciousDueToLevel) {
260 text.
addParagraph(
"Vessels flagged for inspection due to overall suspicion level!", hl);
265 text.
addParagraph(
"No contraband or suspicious cargo found.");
268 text.
addParagraph(
"-----------------------------------------------------------------------------");
273 totalIllegalFound += stack.getSize();
277 float repLoss = totalIllegalFound / 5f * totalIllegalFound / capacity;
278 repLoss = Math.round(repLoss);
279 if (repLoss > 5) repLoss = 5f;
280 if (repLoss == 0 && totalIllegalFound > 0) repLoss = 1f;
285 RepActionEnvelope envelope =
new RepActionEnvelope(RepActions.CUSTOMS_CAUGHT_SMUGGLING, repLoss, dialog.
getTextPanel());
288 envelope =
new RepActionEnvelope(RepActions.CUSTOMS_CAUGHT_SMUGGLING, repLoss * 2f, dialog.
getTextPanel());