Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 06.10.2015, 16:53   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
[MySql] Очередь

И снова у меня вопрос по MySql!

В общем есть задача - организовать очередь производства итемов в игре. Например по умолчанию она длиной 5 итемов. Игрок добавляет в очередь то, что ему нужно произвести. По завершении производства в очереди освобождаетеся место для следующего итема. И т.д. до бесконечности.

Как такую очередь лучше организовать в БД?

Мои варианты:
  1. Сделать таблицу, в которую добавляеть записи о начале производства, а в клиенте сортировать по дате начала. По завершении производства удалять записи.
  2. Сделать фиксированную запись для каждого слота, потом их местами менять (переназначая поле order). Не удалять записи.
  3. Еще как-то?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 06.10.2015, 17:18   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: [MySql] Очередь

Геймплей имеет также влияние на решение.

Например большинство игр не позволяет делать "планирование" - добавление больше задач чем очередь позволяет.
Также большинство игр требует действие игрока чтобы "закончить" задачу. Например если это производство, то это хороший элемент в игре, где игроку нужно нажать по завершению на кнопку, чтобы "собрать" созданный предмет. Это имеет положительный эффект "награждения" за ожидание.
Также это технически упрощает, т.к. не нужно делать авто-подборку задачек.

Лучше сделать очередь, сортировка не имеет значение (в случае с вариантом "без планирования"). Это уже больше вопрос для клиента как в UI сортировать.
Далее многие игры позволяют разное число паралельных работ, и это также может быть субъектом для монетизации (продавать дополнительные слоты).
Если предполагается что будет больше слотов в будущем, то лучше не делать "номер слота" в базе.
По сути у тебя просто идет проверка: подсчитай число работ, если число меньше позволенного максимума, дай возможность добавить еще работы.
Иначе игроку нужно ждать.
Также "ручное заканчивание" работ, мотивирует игроков возвращаться "подобрать" работы.
Это была весьма большая "фича" вначале существования EVE Online, где система сертификатов была именно такой, мотивируя игроков возвращаться в игру по истечению изучения сертификата, чтобы начать изучение нового, т.к. нету планирования.

Если все же будет планирование и авто-завершение, то тут нужно скрипт который будет постоянно проверять бд на завершенные работы, и запускать скрипты для их завершения, и проверять если есть еще работы для обработки которые ожидают.

Я бы сделал что-то типо:
id, user, added, activated, duration

Где added и activated - DATETIME. activated будет назначен только при активации. Если activated + duration уже в прошлом - значит задача завершилась. Если activated не указан, значит задача в очереди и не обрабатывается.

Скрипт получает все задачи которые activated AND (activated + duration) < now, производит операции по завершению (там добавить вещи в инвентарь или т.п.). Далее смотрит если у этого user'а есть еще задачи которые имеют не указанный activated, если такие есть, то устанвливает activated на now.

Индексация по activated, и еще compound index по user,activated.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
pax (06.10.2015), tirarex (10.10.2015)
Ответ


Опции темы

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

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


Часовой пояс GMT +4, время: 16:23.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com