[Piercing Blow] Устройство внутриигрового магазина PointBlank и PiercingBlow 3.0+ - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Point Blank (Piercing Blow)

Point Blank (Piercing Blow)
Общие вопросы по написанию эмулятора. General questions on developing emulator. При поддержке: Lucera 2 - разработка Java Interlude

Ответ
Опции темы
Непрочитано 16.02.2018, 15:53   #1
Аватар для PROGRAMMATOR
Администратор

Автор темы (Топик Стартер) Устройство внутриигрового магазина PointBlank и PiercingBlow 3.0+

В данной теме разберём серверные и клиентские пакеты, а так же структуру кеша магазина.

Структура серверных пакетов магазина

Для построения списка товаров, предметов и их связей используются пакеты:

PROTOCOL_AUTH_SHOP_ITEMLIST_ACK (1038):
Свернуть ↑Развернуть ↓

PROTOCOL_AUTH_SHOP_GOODSLIST_ACK (1036):
Свернуть ↑Развернуть ↓

PROTOCOL_AUTH_SHOP_REPAIRLIST_ACK (1070):
Свернуть ↑Развернуть ↓

PROTOCOL_AUTH_SHOP_MATCHINGLIST_ACK (1040):
Свернуть ↑Развернуть ↓


Начиная с 3 версии клиент стал кешировать полученные данные в файл Shop.dat.

Структура кеша Shop.dat

Код:
// int уникальный идентификатор магазина
// int количество товаров
// int количество предметов
// int количество восстанавливаемых предметов
// int количество связей

// byte[количество товаров * 58]
// byte[количество предметов * 11]
// byte[количество восстанавливаемых предметов * 16]
// byte[количество связей * 16]
Для проверки актуальности данных клиент отправляет пакет PROTOCOL_SHOP_GET_SAILLIST_REQ (1029) c md5 хешем файла Shop.dat и в ответ ожидает PROTOCOL_SHOP_GET_SAILLIST_ACK (1030) со следующей структурой:

Код:
bool // true если кеш отличается от актуального
int // дата последней проверки в формате yyMMddhhmm
Если хеш отличается, то необходимо отправить 4 пакета описанные ранее.

Примеры работы с данными

Рассмотрим пример добавления товара включающем в себя SG 550 Ext. с ограничением по количеству боёв. Я буду использовать json, вы же можете использовать xml или базу данных.

Класс Item и необходимые пречисления:
Свернуть ↑Развернуть ↓

Классы Goods, GoodsItemMatching и перечисления:
Свернуть ↑Развернуть ↓

Items.json:
Свернуть ↑Развернуть ↓

Goods.json:
Свернуть ↑Развернуть ↓


Обратите внимание на идентификатор товара (10300101), он состоит из ItemId * 100 + n (есть исключения, но об этом как-то в другой раз), это необходимо для группировки предметов, дальше вы поймёте о чём я.

После отправки пакетов в магазине появится 1 товар на 100 боёв стоимостью в 10000 очков.



Теперь разберёмся с группировкой. Если добавить второй товар с идентификатором 10300102 и тем же предметом, но отличающимся ценой или количеством, то у пользователя появится возможность выбора предмета:

Goods.json:
Свернуть ↑Развернуть ↓


Результат.



Также вместо количества боёв - мы может указать количество дней в секундах (86400 * n дней), ниже в примере предмет на 7 дней.

Items.json:
Свернуть ↑Развернуть ↓

Goods.json:
Свернуть ↑Развернуть ↓




Пока всё, буду дописывать по мере появления желания.

Появились вопросы и дополнения касательно магазина PB - пожалуйста, пишите их в этой теме.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Piercing Blow] PointBlank\PiercingBlow. CreateMutex Awiion Point Blank (Piercing Blow) 22 28.11.2019 07:03
[Point Blank] Items PointBlank? Codex1to Point Blank (Piercing Blow) 5 12.02.2018 22:00
PointBlank Server ArxNetwork Рынок / Marketplace 9 15.05.2016 22:35
Плагин для магазина Lexc Курилка / Yak floor 0 14.08.2015 14:28
[Куплю] Пакеты PointBlank grizly Рынок / Marketplace 0 01.06.2014 10:28


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 18:33. Часовой пояс GMT +3.

Вверх