чуваки, я походу совсем ниче не вижу, ткните меня носом где тут ИД пакета записан?
кстати 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";
}
}