Незачем. Можно просто отправлять либо любое число, либо itemId предмета. Ничего уникального там не нужно создавать. Просто нужно потестировать и проверить как клиент отнесется к измененному пакету.Зачем отправлять игроку objectId предмета если он его еще не купил и в мире предмет не появился?
То есть я 100 раз открою окно и 100 раз создам уникальный objectId?
В SellList такая же ситуацияБайлист это продажа от игрока к нпц
А вы уверены?Байлист это продажа от игрока к нпц
В SellList ещё refund есть, возврат проданных предметовВ SellList такая же ситуация
Интересует только objectId и его актуальность тамВ SellList ещё refund есть, возврат проданных предметов
давайте посмотрим на это с другой стороны.Интересует только objectId и его актуальность там
writeH(temp.getItem().getType1()); // item type1
writeD(temp.getObjectId());
writeD(temp.getItemId());
writeD(temp.getCount());
writeH(temp.getItem().getType2()); // item type2
writeH(temp.getCustomType1()); // item type3
if (temp.isEquipped())
{
writeH(0x01);
}
else
{
writeH(0x00);
}
writeD(temp.getItem().getBodyPart()); // slot 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand
writeH(temp.getEnchantLevel()); // enchant level
// race tickets
writeH(temp.getCustomType2()); // item type3
writeH(item.getItem().getType1());
writeD(item.getObjectId());
writeD(item.getItemId());
writeD(item.getCount());
writeH(item.getItem().getType2());
writeH(0x00);
writeD(item.getItem().getBodyPart());
writeH(item.getEnchantLevel());
writeH(0x00);
writeH(item.getCustomType2());
writeH(item.getItem().getType1()); // item type1
writeD(item.getObjectId());
writeD(item.getItemId());
if (item.getCount() < 0)
{
writeD(0x00); // max amount of items that a player can buy at a time (with this item id)
}
else
{
writeD(item.getCount());
}
writeH(item.getItem().getType2()); // item type2
writeH(0x00); // ?
writeD(item.getItem().getBodyPart()); // 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand
writeH(item.getEnchantLevel()); // enchant level
writeH(0x00); // ?
writeH(0x00);
С семечками, приватными магазинами, гмшопами с предметаси с СА все понятно.давайте посмотрим на это с другой стороны.
Пакет используется для продажи предметов и может быть использован в первобытных ГМ панелях (которые на сервере л2, а не в ВЕБ-е).
То-есть человек может добавить предмету СА / ЛС и для тестирования и потом без проблем получать через ГМ Магазин.
Так что - ответ все равно остается тот же - в этих пакетах используется "ItemInfo".
Примеры использования его можно еще найти и в TradePacket и в Семечках для Манора ну и основные его потребители - InventoryUpdate и ItemInfo.
Почему Вы этого видеть не хотите - не имею представления.
ItemInfo:
Java:writeH(temp.getItem().getType1()); // item type1 writeD(temp.getObjectId()); writeD(temp.getItemId()); writeD(temp.getCount()); writeH(temp.getItem().getType2()); // item type2 writeH(temp.getCustomType1()); // item type3 if (temp.isEquipped()) { writeH(0x01); } else { writeH(0x00); } writeD(temp.getItem().getBodyPart()); // slot 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand writeH(temp.getEnchantLevel()); // enchant level // race tickets writeH(temp.getCustomType2()); // item type3
SellList
Java:writeH(item.getItem().getType1()); writeD(item.getObjectId()); writeD(item.getItemId()); writeD(item.getCount()); writeH(item.getItem().getType2()); writeH(0x00); writeD(item.getItem().getBodyPart()); writeH(item.getEnchantLevel()); writeH(0x00); writeH(item.getCustomType2());
Buy List
Java:writeH(item.getItem().getType1()); // item type1 writeD(item.getObjectId()); writeD(item.getItemId()); if (item.getCount() < 0) { writeD(0x00); // max amount of items that a player can buy at a time (with this item id) } else { writeD(item.getCount()); } writeH(item.getItem().getType2()); // item type2 writeH(0x00); // ? writeD(item.getItem().getBodyPart()); // 0006-lr.ear 0008-neck 0030-lr.finger 0040-head 0080-?? 0100-l.hand 0200-gloves 0400-chest 0800-pants 1000-feet 2000-?? 4000-r.hand 8000-r.hand writeH(item.getEnchantLevel()); // enchant level writeH(0x00); // ? writeH(0x00);
Так сказать - найдите 10 отличий.
но я думаю что это рудиментарный прикол, из-за того что бы разработчики не писали для каждого метода работы с предметами свои парсеры для инфы об этих предметах.С семечками, приватными магазинами, гмшопами с предметаси с СА все понятно.
Если семечки то заранее создается itemList, количество предметов и objectId. Тоже самое и с ГМшопом.
Мой вопрос про обычные предметы, которыми торгуют NPC.
Предмет еще не создан в мире но уже имеет objectId? Какая логика была у разработчиков?
Предмет не уникальный. Обычный. Ему-то зачем objectId ?
Или логика такая
1) Создаем на старте сервера ItemList для Trader Lector
2) При нажатии на Buy Fighter weapon загружать этот лист и отправлять через пакет с указанием не только ItemId но и ObjectId
3) Покупаем sword
4) При подтверждении создаем новый sword, присваиваем новый objectId и кладем в сумку
Верно?
Да, objectId наверное именно тут не нужен но логика buyList нужна.Незачем. Можно просто отправлять либо любое число, либо itemId предмета. Ничего уникального там не нужно создавать. Просто нужно потестировать и проверить как клиент отнесется к измененному пакету.
Хочеться добавить что во многих пакетах есть либо бинарные данные которыет просто не изменяются, либо не имеют никакого эффекта на клиент. Так что просто нужно проверить свою модификацию.
Данные для BuyList пакета должны проверяться на наличие и адены у игрока, и самих предметов для покупки. Это намного сложнее чем просто проверить предметы. Например нужно учитывать что делает игрок в это время, или вообще он запрашивал этот BuyList от NPC ? Есть также ситуации когда может прийти много пакетов для покупки вещей, но только первый должен быть использован ( у нас структура запрос - ответ, а не запрос - много ответов ). Зачастую не учитывается что вообще пакет может быть неправильным, то есть перед тем что-либо делать нужно тоже проверить сколько предметов покупается, сколько адены нужно на это, есть ли лимит на количество предметов (у нас всетаки есть ситуация когда пакет может иметь тот же самый предмет но сотни раз повторяющийся). Ну и когда предмет уже куплен, тогда нужно отослать соответствующие сообщения на клиент, типа купил того-то и столько-то за такую-то сумму. Или наоборот, мол нехватает деньжат, вали подальше...Да, objectId наверное именно тут не нужен но логика buyList нужна.
Поэтому на старте сервера можно создавать buyList.
* Создать предметы один раз
* Присвоим каждому objectId
* Потом каждый предмет записать в buyList
При диалоге с NPC Lector подгружать этот buyList
Нужно проверять когда приходит ответ от игрока, что он хочет купить и сравнить есть ли этот предмет в buyList у NPC Lector?
В этом поле в данном случае вполне может просто 0 слаться.Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
1) Открыл диалог с NPC
2) Buy item
3) Отображается окно покупки (Пакет BuyList)
Зачем отправлять игроку objectId предмета если он его еще не купил и в мире предмет не появился?
То есть я 100 раз открою окно и 100 раз создам уникальный objectId?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?