02-16-2018, 03:53 PM
В данной теме разберём серверные и клиентские пакеты, а так же структуру кеша магазина.
Структура серверных пакетов магазина
Для построения списка товаров, предметов и их связей используются пакеты:
Начиная с 3 версии клиент стал кешировать полученные данные в файл Shop.dat.
Структура кеша Shop.dat
Для проверки актуальности данных клиент отправляет пакет PROTOCOL_SHOP_GET_SAILLIST_REQ (1029) c md5 хешем файла Shop.dat и в ответ ожидает PROTOCOL_SHOP_GET_SAILLIST_ACK (1030) со следующей структурой:
Если хеш отличается, то необходимо отправить 4 пакета описанные ранее.
Примеры работы с данными
Рассмотрим пример добавления товара включающем в себя SG 550 Ext. с ограничением по количеству боёв. Я буду использовать json, вы же можете использовать xml или базу данных.
Обратите внимание на идентификатор товара (10300101), он состоит из ItemId * 100 + n (есть исключения, но об этом как-то в другой раз), это необходимо для группировки предметов, дальше вы поймёте о чём я.
После отправки пакетов в магазине появится 1 товар на 100 боёв стоимостью в 10000 очков.
Теперь разберёмся с группировкой. Если добавить второй товар с идентификатором 10300102 и тем же предметом, но отличающимся ценой или количеством, то у пользователя появится возможность выбора предмета:
Результат.
Также вместо количества боёв - мы может указать количество дней в секундах (86400 * n дней), ниже в примере предмет на 7 дней.
Пока всё, буду дописывать по мере появления желания. kappa
Появились вопросы и дополнения касательно магазина PB - пожалуйста, пишите их в этой теме.
Структура серверных пакетов магазина
Для построения списка товаров, предметов и их связей используются пакеты:
Начиная с 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 или базу данных.
Обратите внимание на идентификатор товара (10300101), он состоит из ItemId * 100 + n (есть исключения, но об этом как-то в другой раз), это необходимо для группировки предметов, дальше вы поймёте о чём я.
После отправки пакетов в магазине появится 1 товар на 100 боёв стоимостью в 10000 очков.
Теперь разберёмся с группировкой. Если добавить второй товар с идентификатором 10300102 и тем же предметом, но отличающимся ценой или количеством, то у пользователя появится возможность выбора предмета:
Результат.
Также вместо количества боёв - мы может указать количество дней в секундах (86400 * n дней), ниже в примере предмет на 7 дней.
Пока всё, буду дописывать по мере появления желания. kappa
Появились вопросы и дополнения касательно магазина PB - пожалуйста, пишите их в этой теме.