Тема: l2phx & kamael
Показать сообщение отдельно
Старый 16.02.2008, 23:42   #9
Гость
 
Сообщений: n/a
По умолчанию

чуваки, я походу совсем ниче не вижу, ткните меня носом где тут ИД пакета записан?
кстати l2phx, присваивает этому пакету ИД= 40.

Код:
package net.sf.l2j.gameserver.clientpackets;

import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.TradeController;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.MerchantPriceConfigTable;
import net.sf.l2j.gameserver.model.L2TradeList;
import net.sf.l2j.gameserver.model.PcInventory;
import net.sf.l2j.gameserver.model.actor.instance.*;
import net.sf.l2j.gameserver.model.entity.Castle;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.*;
import net.sf.l2j.gameserver.templates.L2Item;
import net.sf.l2j.gameserver.util.Util;

// Referenced classes of package net.sf.l2j.gameserver.clientpackets:
//            L2GameClientPacket

public final class RequestBuyItem extends L2GameClientPacket
{

    private static final String m_C__1F_REQUESTBUYITEM = "[C] 1F RequestBuyItem";
    private static Logger m_log = Logger._getLoggerStringLogger(net/sf/l2j/gameserver/clientpackets/RequestBuyItem.getName());
    private int m_listId;
    private int m_count;
    private int m_items[];

    public RequestBuyItem()
    {
    }

    protected void _readImplvV()
    {
        m_listId = _readDvI();
        m_count = _readDvI();
        if(m_count * 2 < 0 || m_count * 8 > m_buf._remainingvI() || m_count > Config.m_MAX_ITEM_IN_PACKETI)
            m_count = 0;
        m_items = new int[m_count * 2];
        for(int i = 0; i < m_count; i++)
        {
            int itemId = _readDvI();
            m_items[i * 2 + 0] = itemId;
            long cnt = _readDvI();
            if(cnt > 0x7fffffffL || cnt < 0L)
            {
                m_count = 0;
                m_items = null;
                return;
            }
            m_items[i * 2 + 1] = (int)cnt;
        }

    }

    protected void _runImplvV()
    {
        L2PcInstance player = ((L2GameClient)_getClientvMMOClient())._getActiveCharvL2PcInstance();
        if(player == null)
            return;
        if(!Config.m_ALT_GAME_KARMA_PLAYER_CAN_SHOPZ && player._getKarmavI() > 0)
            return;
        net.sf.l2j.gameserver.model.L2Object target = player._getTargetvL2Object();
        if(!player._isGMvZ() && (target == null || !(target instanceof L2MerchantInstance) && !(target instanceof L2FishermanInstance) && !(target instanceof L2MercManagerInstance) && !(target instanceof L2ClanHallManagerInstance) && !(target instanceof L2CastleChamberlainInstance) || !player._isInsideRadiusL2ObjectZZZ(target, 150, false, false)))
            return;
        boolean ok = true;
        String htmlFolder = "";
        if(target != null)
        {
            if(target instanceof L2FishermanInstance)
                htmlFolder = "fisherman";
            else
            if(target instanceof L2MerchantInstance)
                htmlFolder = "merchant";
            else
                ok = false;
        } else
        {
            ok = false;
        }
        L2MerchantInstance merchant = null;
        if(ok)
            merchant = (L2MerchantInstance)target;
        else
        if(!ok && !player._isGMvZ())
        {
            player._sendMessageStringV("Invalid Target: Seller must be targetted");
            return;
        }
        L2TradeList list = null;
        if(merchant != null)
        {
            List lists = TradeController.getInstance()._getBuyListByNpcIdIList(merchant._getNpcIdvI());
            if(!player._isGMvZ())
            {
                if(lists == null)
                {
                    Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                    return;
                }
                Iterator i$ = lists._iteratorvIterator();
                do
                {
                    if(!i$._hasNextvZ())
                        break;
                    L2TradeList tradeList = (L2TradeList)i$._nextvObject();
                    if(tradeList._getListIdvI() == m_listId)
                        list = tradeList;
                } while(true);
            } else
            {
                list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
            }
        } else
        {
            list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
        }
        if(list == null)
        {
            Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
            return;
        }
        m_listId = list._getListIdvI();
        if(m_count < 1)
        {
            _sendPacketL2GameServerPacketV(new ActionFailed());
            return;
        }
        double castleTaxRate = 0.0D;
        double baseTaxRate = 0.0D;
        if(merchant != null)
        {
            castleTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getCastleTaxRatevD();
            baseTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getBaseTaxRatevD();
        }
        long subTotal = 0L;
        int castleTax = 0;
        int baseTax = 0;
        long slots = 0L;
        long weight = 0L;
        for(int i = 0; i < m_count; i++)
        {
            int itemId = m_items[i * 2 + 0];
            int count = m_items[i * 2 + 1];
            int price = -1;
            net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
            if(tradeItem == null)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            L2Item template = ItemTable.getInstance()._getTemplateIL2Item(itemId);
            if(template == null)
                continue;
            if(count > 0x7fffffff || !template._isStackablevZ() && count > 1)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase invalid quantity of items at the same time.").toString(), Config.m_DEFAULT_PUNISHI);
                SystemMessage sm = new SystemMessage(SystemMessageId.m_YOU_HAVE_EXCEEDED_QUANTITY_THAT_CAN_BE_INPUTTEDSystemMessageId);
                _sendPacketL2GameServerPacketV(sm);
                sm = null;
                return;
            }
            price = list._getPriceForItemIdII(itemId);
            if(itemId >= 3960 && itemId <= 4026)
                price = (int)((float)price * Config.m_RATE_SIEGE_GUARDS_PRICEF);
            if(price < 0)
            {
                m_log._warningStringV("ERROR, no price found .. wrong buylist ??");
                _sendPacketL2GameServerPacketV(new ActionFailed());
                return;
            }
            if(price == 0 && !player._isGMvZ() && Config.m_ONLY_GM_ITEMS_FREEZ)
            {
                player._sendMessageStringV("Ohh Cheat dont work? You have a problem now!");
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried buy item for 0 adena.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            if(tradeItem._hasLimitedStockvZ() && count > tradeItem._getCurrentCountvI())
                return;
            subTotal += (long)count * (long)price;
            castleTax = (int)((double)subTotal * castleTaxRate);
            baseTax = (int)((double)subTotal * baseTaxRate);
            if(subTotal + (long)castleTax + (long)baseTax > 0x7fffffffL)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase over ").append(0x7fffffff).append(" adena worth of goods.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            weight += (long)count * (long)template._getWeightvI();
            if(!template._isStackablevZ())
            {
                slots += count;
                continue;
            }
            if(player._getInventoryvPcInventory()._getItemByItemIdIL2ItemInstance(itemId) == null)
                slots++;
        }

        if(weight > 0x7fffffffL || weight < 0L || !player._getInventoryvPcInventory()._validateWeightIZ((int)weight))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_WEIGHT_LIMIT_EXCEEDEDSystemMessageId));
            return;
        }
        if(slots > 0x7fffffffL || slots < 0L || !player._getInventoryvPcInventory()._validateCapacityIZ((int)slots))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_SLOTS_FULLSystemMessageId));
            return;
        }
        if(subTotal < 0L || !player._reduceAdenaStringL2ObjectvZ("Buy", (int)(subTotal + (long)baseTax + (long)castleTax), player._getLastFolkNPCvL2FolkInstance(), false))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_YOU_NOT_ENOUGH_ADENASystemMessageId));
            return;
        }
        for(int i = 0; i < m_count; i++)
        {
            int itemId = m_items[i * 2 + 0];
            int count = m_items[i * 2 + 1];
            if(count < 0)
                count = 0;
            net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
            if(tradeItem == null)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                continue;
            }
            if(tradeItem._hasLimitedStockvZ())
            {
                if(tradeItem._decreaseCountIZ(count))
                    player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
            } else
            {
                player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
            }
        }

        if(merchant != null)
        {
            merchant._getCastlevCastle()._addToTreasuryIV(castleTax);
            String html = HtmCache.getInstance()._getHtmStringString((new StringBuilder()).append("data/html/").append(htmlFolder).append("/").append(merchant._getNpcIdvI()).append("-bought.htm").toString());
            if(html != null)
            {
                NpcHtmlMessage boughtMsg = new NpcHtmlMessage(merchant._getObjectIdvI());
                boughtMsg._setHtmlStringV(html._replaceAllStringString("%objectId%", String.valueOf(merchant._getObjectIdvI())));
                player._sendPacketL2GameServerPacketV(boughtMsg);
            }
        }
        StatusUpdate su = new StatusUpdate(player._getObjectIdvI());
        su._addAttributeIIV(14, player._getCurrentLoadvI());
        player._sendPacketL2GameServerPacketV(su);
        player._sendPacketL2GameServerPacketV(new ItemList(player, true));
    }

    public String getType()
    {
        return "[C] 1F RequestBuyItem";
    }

}
  Ответить с цитированием