Обсуждение Система бронирования деревень ...

DeletedUser

Гость
Сделаю небольшое отступление от предложения, чтобы было понятно к чему оно... Открываю карту и вижу по соседству деру, которую забронил кто-то и осталось пару дней чтобы забронивший её взял. Смотрю по системе бронирования - этот кто-то набронил под завязку... Ладно, через день смотрю на "облюбованный" сарай - бронь опять такая как будто он (кто-то) её только что поставил (опять две недели добавил к бронированию)! Ладно варварки, но когда сарай врага возле моего сарая и рядом того кто забронил нет - нонсенс. Ну а теперь что я предлагаю...

Предложение

Ввести в систему бронирования ещё один параметр в настройки системы бронирования "Лимит времени повторного бронирования", которое будет указываться в днях. Скажем при значении 0 этого параметра система бронирования будет работать так же, как и сейчас на основании "Лимит времени". Но если этот параметр отличен от 0, то игрок сможет повторно поставить бронь только через указанное количество дней.

Сейчас

Сейчас система бронирования построена следующим образом:

player_id - идентификатор игрока
village_id - идентификатор деревни
ExpiresDate - дата и время, до которого деревня забронирована

Примерно так выглядит таблица в игровом движке. Соответственно когда игрок ставит бронь, то:

1. Проверяется, что бронь ещё не стоит (нет записи для бронируемой деревни)
2. В таблицу добавляется запись (идентификатор игрока и деревни) с текущей датой плюс "Лимит времени" (ExpiresDate = GetDate() + limit_days)

Далее игровой движок по времени (типа CRON или аналог) проверяет и удаляет записи в "прошлом". Именно по этому мы иногда видим брони, которые уже реально не существуют, т.к. бронь уже просрочена, а задание на очистку таблицы от таких записей ещё не выполнено...

Надо

Нужно добавить в систему бронирования:

player_id - идентификатор игрока
village_id - идентификатор деревни
ExpiresDate - дата и время, до которого деревня забронирована
DeleteDate - дата и время, после которого игрок может повторно забронировать деревню

Соответственно когда игрок ставит бронь, то:

1. Проверяется, что бронь ещё не стоит (нет записи для бронируемой деревни или бронь просрочена, но ещё не удалена)
2. В таблицу добавляется запись (идентификатор игрока и деревни) с текущей датой плюс "Лимит времени" (ExpiresDate = GetDate() + limit_days) и датой и времем удаления записи (DeleteDate = GetDate() + limit_days + delete_days)

Ну и естественно для обработчика удаления просроченных броней нужно брать не ExpiresDate, а DeleteDate. Ну и при отображении брони не только просто проверять, что запись по деревне есть, а и проверять, что она не вышла за ExpiresDate.

Короче говоря это пример реализации, а не требование и полное ТЗ.

Ждём`с "мнения экспертов"... =)
 

Brameow

Конный лучник
Член команды
TWM 2015
Модератор
Оценка реакций
130
тут надо руководство шевелить. В хороших племенах такие проблемы пересекаются сразу. Не нужная фишка, как мне
 

DeletedUser

Гость
Предложение

Ввести в систему бронирования ещё один параметр в настройки системы бронирования "Лимит времени повторного бронирования", которое будет указываться в днях. Скажем при значении 0 этого параметра система бронирования будет работать так же, как и сейчас на основании "Лимит времени". Но если этот параметр отличен от 0, то игрок сможет повторно поставить бронь только через указанное количество дней.

Остальное лишнее.
 
Верх