44 private Map<String, CommodityData> dataBought =
new LinkedHashMap<String, CommodityData>();
59 public void reportNetSold(String commodityId,
float quantity,
float totalPrice) {
61 if (data.getQuantity() < 1 || quantity < 1)
return;
62 float avgBuyPrice = data.getTotalPrice() / data.getQuantity();
65 if (quantity > data.getQuantity()) net = data.getQuantity();
66 data.setQuantity(data.getQuantity() - net);
70 float paidForNet = avgBuyPrice * net;
71 data.setTotalPrice(Math.max(0, data.getTotalPrice() - paidForNet));
73 float receivedForNet = net * totalPrice / quantity;
75 float profit = receivedForNet - paidForNet;
76 if (profit <= 0)
return;
80 long xp = (long) (profit * xpPerCredit);
84 log.info(
"Player accrued " + xp +
" xp for selling " + commodityId +
" (profit per unit: " + (
int) (profit / net) +
")");
90 tracker.advance(days);
91 if (tracker.intervalElapsed()) {
92 float factor = Misc.getGenericRollingAverageFactor();
93 for (CommodityData cd :
new ArrayList<CommodityData>(dataBought.values())) {
94 cd.setQuantity(cd.getQuantity() * factor);
95 cd.setTotalPrice(cd.getTotalPrice() * factor);
96 if (cd.getQuantity() < 1) dataBought.remove(cd.getCommodityId());