07-05-2014, 11:20 AM
Есть в клиенте линейки такая вещь как инвентарь товаров, возможность вызова которого появляется при включении настройки UseGoodsInventory в l2.ini и чем-то похожее на список призовых предметов, вызываемых у менеджера витаминов, но при этом более детальное и функциональное.
ну вот пытаюсь я этот самый инвентарь реализовать и столкнулся с непонятной проблемой, над которой уже пару дней голову ломаю...
имеется пакет, который шлет клиенту информацию об имеющихся товарах в этом инвентаре:
[SRC="java"]
package l2p.gameserver.network.serverpackets;
import java.util.LinkedHashMap;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.actor.instances.player.PremiumItem;
import l2p.gameserver.network.serverpackets.components.Opcode;
public class ExGoodsInventoryInfo extends L2GameServerPacket
{
private LinkedHashMap<Integer, PremiumItem> _list;
public ExGoodsInventoryInfo(Player player)
{
_list = player.getPremiumItems().getItems();
}
@Override
protected void writeImpl()
{
writeEx(Opcode.ExGoodsInventoryInfo);
writeH(_list.size());
if (_list.isEmpty())
return;
for (int uid : _list.keySet())
{
PremiumItem item = _list.get(uid);
writeQ(uid);
writeC(0x00); // 0 - иконка из датки GoodsIcon, 1 - ?
writeD(10001); // номер иконки из GoodsIcon
writeS("название товара " + uid); // название товара
writeS("описание товара " + uid); // описание товара
writeQ(0x00); // время до удаления итема?
writeC(0x00); // цвет?
writeC(0x01); // 1 - показать информацию об отправителе, 0 - не показывать
writeS(item.getSender()); // имя отправителя
writeS("сообщение от отправителя"); // сообщение от отправителя
writeH(0x01); // количество вещей
writeD(item.getId()); // id вещи
writeD((int) item.getCount()); // количество
}
}
}
[/SRC]
и он вполне нормально работает, но только пока товар один
но если товаров больше одного, то вместо 2 и далее товаров в списке будет мусор типа такого
но структура пакета вроде как вполне правильная и ничего более туда не впихать или убрать... тем более что если я буду слать место writeQ(uid); всегда writeQ(1);, то список будет выглядеть вполне нормально
на первый взгляд вроде как типа проблема решена, так? да вот к сожалению нифига - в пакете RequestUseGoodsInventoryItem, отправлемом клиентом при нажатии кнопки "Забрать товар", в таком случае всегда приходит запрос на получение только первого товара в списке...
Ну вот собственно говоря меня и интересует - может кто уже с этим инвентарем работал и может подсказать что делать?
ну вот пытаюсь я этот самый инвентарь реализовать и столкнулся с непонятной проблемой, над которой уже пару дней голову ломаю...
имеется пакет, который шлет клиенту информацию об имеющихся товарах в этом инвентаре:
[SRC="java"]
package l2p.gameserver.network.serverpackets;
import java.util.LinkedHashMap;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.actor.instances.player.PremiumItem;
import l2p.gameserver.network.serverpackets.components.Opcode;
public class ExGoodsInventoryInfo extends L2GameServerPacket
{
private LinkedHashMap<Integer, PremiumItem> _list;
public ExGoodsInventoryInfo(Player player)
{
_list = player.getPremiumItems().getItems();
}
@Override
protected void writeImpl()
{
writeEx(Opcode.ExGoodsInventoryInfo);
writeH(_list.size());
if (_list.isEmpty())
return;
for (int uid : _list.keySet())
{
PremiumItem item = _list.get(uid);
writeQ(uid);
writeC(0x00); // 0 - иконка из датки GoodsIcon, 1 - ?
writeD(10001); // номер иконки из GoodsIcon
writeS("название товара " + uid); // название товара
writeS("описание товара " + uid); // описание товара
writeQ(0x00); // время до удаления итема?
writeC(0x00); // цвет?
writeC(0x01); // 1 - показать информацию об отправителе, 0 - не показывать
writeS(item.getSender()); // имя отправителя
writeS("сообщение от отправителя"); // сообщение от отправителя
writeH(0x01); // количество вещей
writeD(item.getId()); // id вещи
writeD((int) item.getCount()); // количество
}
}
}
[/SRC]
и он вполне нормально работает, но только пока товар один
Ну вот собственно говоря меня и интересует - может кто уже с этим инвентарем работал и может подсказать что делать?