Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package net.sf.l2j.gameserver.network.clientpackets;
- import net.sf.l2j.Config;
- import net.sf.l2j.gameserver.model.TradeList;
- import net.sf.l2j.gameserver.model.actor.L2Character;
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.PrivateStoreManageListBuy;
- import net.sf.l2j.gameserver.network.serverpackets.PrivateStoreMsgBuy;
- import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
- import net.sf.l2j.gameserver.taskmanager.AttackStanceTaskManager;
- public final class SetPrivateStoreListBuy extends L2GameClientPacket
- {
- private static final int BATCH_LENGTH = 12; // length of one item
- private Item[] _items = null;
- @Override
- protected void readImpl()
- {
- int count = readD();
- if (count < 1 || count > Config.MAX_ITEM_IN_PACKET || count * BATCH_LENGTH != _buf.remaining())
- return;
- _items = new Item[count];
- for (int i = 0; i < count; i++)
- {
- int itemId = readD();
- readH(); //TODO analyse this
- readH(); //TODO analyse this
- long cnt = readD();
- int price = readD();
- if (itemId < 1 || cnt < 1 || price < 0)
- {
- _items = null;
- return;
- }
- _items[i] = new Item(itemId, (int)cnt, price);
- }
- }
- @Override
- protected void runImpl()
- {
- L2PcInstance player = getClient().getActiveChar();
- if (player == null)
- return;
- if (_items == null)
- {
- player.setPrivateStoreType(L2PcInstance.STORE_PRIVATE_NONE);
- player.broadcastUserInfo();
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- if (!player.getAccessLevel().allowTransaction())
- {
- player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- return;
- }
- if (AttackStanceTaskManager.getInstance().getAttackStanceTask(player)
- || (player.isCastingNow() || player.isCastingSimultaneouslyNow())
- || player.isInDuel())
- {
- player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- if (player.isInsideZone(L2Character.ZONE_NOSTORE))
- {
- player.sendPacket(new SystemMessage(SystemMessageId.NO_PRIVATE_STORE_HERE));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- TradeList tradeList = player.getBuyList();
- tradeList.clear();
- // Check maximum number of allowed slots for pvt shops
- if (_items.length > player.getPrivateBuyStoreLimit())
- {
- player.sendPacket(new SystemMessage(SystemMessageId.YOU_HAVE_EXCEEDED_QUANTITY_THAT_CAN_BE_INPUTTED));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- int totalCost = 0;
- for (Item i : _items)
- {
- if (!i.addToTradeList(tradeList))
- {
- player.sendPacket(new SystemMessage(SystemMessageId.EXCEEDED_THE_MAXIMUM));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- totalCost += i.getCost();
- if (totalCost > Integer.MAX_VALUE)
- {
- player.sendPacket(new SystemMessage(SystemMessageId.EXCEEDED_THE_MAXIMUM));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- }
- // Check for available funds
- if (totalCost > player.getAdena())
- {
- player.sendPacket(new SystemMessage(SystemMessageId.THE_PURCHASE_PRICE_IS_HIGHER_THAN_MONEY));
- player.sendPacket(new PrivateStoreManageListBuy(player));
- return;
- }
- player.sitDown();
- player.setPrivateStoreType(L2PcInstance.STORE_PRIVATE_BUY);
- player.broadcastUserInfo();
- player.broadcastPacket(new PrivateStoreMsgBuy(player));
- }
- private static class Item
- {
- private final int _itemId, _count, _price;
- public Item(int id, int num, int pri)
- {
- _itemId = id;
- _count = num;
- _price = pri;
- }
- public boolean addToTradeList(TradeList list)
- {
- if ((Integer.MAX_VALUE / _count) < _price)
- return false;
- list.addItemByItemId(_itemId, _count, _price);
- return true;
- }
- public long getCost()
- {
- return _count * _price;
- }
- }
- @Override
- public String getType()
- {
- return "[C] 91 SetPrivateStoreListBuy";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement