CommissionItemInfo itemInfo = CommissionShopDAO.getInstance().getCommissionItemInfo(auctionId, ExItemType.values()[exItemType]);
if (itemInfo == null)
{
return;
}
PcInventory inventory = player.getInventory();
container.writeLock();
inventory.writeLock();
try
{
if (itemInfo.getItem().getOwnerId() == player.getObjectId())
{
player.sendPacket(new SystemMessage2(SystemMsg.ITEM_PURCHASE_HAS_FAILED));
player.sendPacket(ExResponseCommissionBuyItem.FAILED);
return;
}
if (!inventory.validateCapacity(itemInfo.getItem()) || !inventory.validateWeight(itemInfo.getItem()))
{
player.sendPacket(ExResponseCommissionBuyItem.FAILED);
return;
}
long price = itemInfo.getRegisteredPrice() * itemInfo.getItem().getCount();
if (price > player.getAdena())
{
player.sendPacket(ExResponseCommissionBuyItem.FAILED);
return;
}
if (!CommissionShopDAO.getInstance().removeItem(auctionId))
{
player.sendPacket(ExResponseCommissionBuyItem.FAILED);
return;
}
int receiverId = itemInfo.getItem().getOwnerId();
inventory.reduceAdena(price);
container.removeItem(itemInfo.getItem());
inventory.addItem(itemInfo.getItem());
player.sendPacket(new ExResponseCommissionBuyItem(1, itemInfo.getItem().getItemId(), itemInfo.getItem().getCount()));
long fee = (long) Math.max(1000, price * SALE_FEE);
Mail mail = new Mail();
mail.setSenderId(receiverId);
mail.setSenderName(itemInfo.getSellerName());
mail.setReceiverId(receiverId);
mail.setReceiverName(itemInfo.getSellerName());
mail.setTopic("CommissionBuyTitle");
mail.setBody(itemInfo.getItem().getName());
mail.setSystemMsg1(3490);
mail.setSystemMsg2(3491);
ItemInstance item = ItemFunctions.createItem(ItemTemplate.ITEM_ID_ADENA);
item.setLocation(ItemInstance.ItemLocation.MAIL);
item.setCount(price - fee);
if (item.getCount() > 0)
{
item.save();
mail.addAttachment(item);
}
mail.setType(Mail.SenderType.SYSTEM);
mail.setUnread(true);
mail.setReturnable(false);
mail.setExpireTime((360 * 3600) + (int) (System.currentTimeMillis() / 1000L));
mail.save();
Player receiver = World.getPlayer(receiverId);
if (receiver != null)
{
receiver.sendPacket(ExNoticePostArrived.STATIC_TRUE);
receiver.sendPacket(Msg.THE_MAIL_HAS_ARRIVED);
}
Log.LogItem(player, Log.CommissionItemSold, itemInfo.getItem());
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
container.writeUnlock();
inventory.writeUnlock();
}
}