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]
и он вполне нормально работает, но только пока товар один
Ну вот собственно говоря меня и интересует - может кто уже с этим инвентарем работал и может подсказать что делать?


![[Изображение: f3ac84ed6f67ae4cb55e82a84e05ca7e.jpg]](http://i63.fastpic.ru/big/2014/0705/7e/f3ac84ed6f67ae4cb55e82a84e05ca7e.jpg)
![[Изображение: af7c87fa4bc3d80c3895df6a422de33b.jpg]](http://i63.fastpic.ru/big/2014/0705/3b/af7c87fa4bc3d80c3895df6a422de33b.jpg)
![[Изображение: 8024cc7269b23ce09c32c823a31d5358.jpg]](http://i62.fastpic.ru/big/2014/0705/58/8024cc7269b23ce09c32c823a31d5358.jpg)
![[Изображение: 71f8c36721346d92fd61a40b7dbcdfe5.jpg]](http://i61.fastpic.ru/big/2014/0706/e5/71f8c36721346d92fd61a40b7dbcdfe5.jpg)
![[Изображение: afdebb086c34039067ba6b2f8011e4c8.jpg]](http://i61.fastpic.ru/big/2014/0706/c8/afdebb086c34039067ba6b2f8011e4c8.jpg)

![[Изображение: 033c3abf7ffbbad6e2f063af5810b5ca.jpg]](http://i64.fastpic.ru/big/2014/0706/ca/033c3abf7ffbbad6e2f063af5810b5ca.jpg)
![[Изображение: 0c9c6a2d85d2c1879805b1f1309ab58e.jpg]](http://i64.fastpic.ru/big/2014/0706/8e/0c9c6a2d85d2c1879805b1f1309ab58e.jpg)