Darum Games

Darum Games 

Разработка компьютерных игр.

0subscribers

104posts

Менеджер инвентаря.

Функционал баг-репортов потянул за собой ещё некоторые доработки. Дело в том, что до сегодняшнего дня, в каждой ячейке инвентаря можно было хранить только 1 предмет. Легко предположить, что в первое время после запуска игры инвентаря может просто не хватить для всех баг-репортов. Поэтому пришлось реализовать возможность хранения нескольких одинаковых предметов в каждой ячейке. У разных предметов будет разное максимальное количество. Например, каждый меч будет занимать отдельную ячейку, а предмет "Баг-репорт" в данный момент поместится в одну ячейку аж в ста экземплярах.
На скрине видно, что количество предметов указывается в правом нижнем углу ячейки.
В процессе работы выявился ещё один недостаток. Дело в том, что если игрок будет очень быстро получать одни и те же предметы, есть вероятность, что их количество запишется в базу данных в неправильном порядке. Например, игрок подбирает лечебное зелье - теперь у него их, допустим, 2. Эта цифра отправляется на запись в базу данных. Но тут игрок подбирает ещё одно зелье: 2 + 1 = 3, и эта цифра тоже отправляется на запись.
Допустим, что в результате сетевой нагрузки второй запрос приходит в базу данных раньше первого. Записывается число 3. И тут приходит первый запрос, который записывает число 2. В результате, игрок теряет 1 зелье.
Для решения этой проблемы я выделил весь функционал инвентаря в отдельный блок - в так называемый менеджер (диспетчер) инвентаря. Этот менеджер управляет всеми предметами, и помимо этого - хранит у себя очередь записи в базу данных. Он знает, что запрос на запись числа 2 пришёл раньше, и ждёт, когда от базы данных придёт ответ, что это число успешно записалось. После этого он отправляет на запись число 3.
Таким образом, порядок не будет нарушен, и все предметы запишутся правильно.
Помимо этого, менеджер следит, чтобы игрок не открыл инвентарь раньше его синхронизации с базой данных (иначе он увидит пустой инвентарь и вознегодует). Лог синхронизации виден в левом верхнем углу скрина.
Subscription levels1

Подписка

$1.26 per month
Go up