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.
Короче говоря это пример реализации, а не требование и полное ТЗ.
Ждём`с "мнения экспертов"...
Предложение
Ввести в систему бронирования ещё один параметр в настройки системы бронирования "Лимит времени повторного бронирования", которое будет указываться в днях. Скажем при значении 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.
Короче говоря это пример реализации, а не требование и полное ТЗ.
Ждём`с "мнения экспертов"...