{
int seedId = (int) _items[i * 2 + 0];
long count = _items[i * 2 + 1];
long price = 0;
long residual = 0;
SeedProduction seed = castle.getSeed(seedId, CastleManorManager.PERIOD_CURRENT);
price = seed.getPrice();
residual = seed.getCanProduce();
if(price <= 0)
{
return;
}
if(residual < count)
{
return;
}
try
{
totalPrice = SafeMath.safeAddLong(totalPrice, SafeMath.safeMulLong(count, price));
}
catch(ArithmeticException e)
{
Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " tried to purchase over " + Long.MAX_VALUE + " adena worth of goods.\r\n" + e.getMessage(), "", Config.DEFAULT_PUNISH);
return;
}
L2Item template = ItemTable.getInstance().getTemplate(seedId);
totalWeight += count * template.getWeight();
if(!template.isStackable())
{
slots += count;
}
else if(player.getInventory().getItemByItemId(seedId) == null)
{
slots++;
}
}
if(!player.getInventory().validateWeight(totalWeight))
{
sendPacket(Msg.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT);
return;
}
if(!player.getInventory().validateCapacity(slots))
{
sendPacket(Msg.YOUR_INVENTORY_IS_FULL);
return;
}
// Charge buyer
if(totalPrice < 0 || player.getAdena() < totalPrice)
{
sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
player.reduceAdena(totalPrice, true);
// Adding to treasury for Manor Castle
castle.addToTreasuryNoTax((int) totalPrice, false, true);
Log.add(castle.getName() + "|" + (int) totalPrice + "|BuySeed", "treasury");
// Proceed the purchase
for(int i = 0; i < _count; i++)
{
int seedId = (int) _items[i * 2 + 0];
long count = _items[i * 2 + 1];
if(count < 0)
{
count = 0;
}
// Update Castle Seeds Amount
SeedProduction seed = castle.getSeed(seedId, CastleManorManager.PERIOD_CURRENT);
seed.setCanProduce(seed.getCanProduce() - count);
CastleManager.getInstance().getCastleByIndex(_manorId).updateSeed(seed.getId(), seed.getCanProduce(), CastleManorManager.PERIOD_CURRENT);
// Add item to Inventory and adjust update packet
player.getInventory().addItem(seedId, count);
player.sendPacket(SystemMessage.obtainItems(seedId, count, 0));
}
player.sendStatusUpdate(false, StatusUpdate.CUR_LOAD);