Как настроить день недели для сброса героических экземпляров?

#azerothcore

#azerothcore

Вопрос:

Проблема с изменением дня недели для перезагрузки героических инстансов.
Это всегда пятница в 04:00.

Я пытаюсь вставить конфигурацию в строку:
Экземпляр.Сбрасываемая временная отметка =
одна из других дат:
1552867201 = 18.03.2019 00:01 понедельник
1552953600 = 19.03.2019 00:00 вторник
1553040001 = 20.03.2019 00:01 среда
1552521601 = 14.03.2019 00:00 четверг
1552608001 = 15.03.2019 00:01 пятница
1552694401 = 16.03.2019 00:01 суббота
1552780801 = 17.03.2019 00:01 воскресенье

Затем я очистил 3 таблицы в characters DB:
instance_reset экземпляр
character_instance

Когда я запускаю сервер — я вижу тот же результат — перезапуск в пятницу в 4:00.

Вопрос: Как изменить день недели? Должно быть, среда.

Ответ №1:

На самом деле я только что закончил разбираться в этом сам. После долгих поисков в исходниках AzerothCore, похоже, что день недели, в который сбрасываются инстансы, выбирается при самом первом запуске сервера. Насколько я могу судить, ResetTimeRelativeTimestamp не используется для определения времени сброса. Если быть более конкретным:

  • Сервер запускается и начинает загружать время сброса экземпляра из characters . instance_reset таблица
  • Если у экземпляра отсутствует запись в instance_reset таблице, запись добавляется с использованием следующей формулы:
    • Время сброса = today (в UTC, округленное до ближайшего дня) RaidDuration (из mapdifficulty_dbc, в коде указано время сброса) Instance.ResetTimeHour (из worldserver.conf)
    • Давайте рассмотрим пример
      • Вы находитесь в центральном часовом поясе США, который в настоящее время равен UTC-5. Это 2020_10_18 14:56:23 , преобразуйте это в UTC, и вы получите: 2020_10_18 19:56:23 . Округлите до ближайшего дня, и вы получите UTC 2020_10_18 00:00:00
      • Допустим, устанавливается время сброса для ICC 10 man. Если вы посмотрите на mapdifficulty_dbc , RaidDuration это 604800 секунд, который составляет 7 дней.
      • Допустим, вы Instance.ResetTimeHour установили значение по умолчанию, 4 . Это становится 4 hours .
      • Подключите все это, и вы получите resettime = 'UTC 2020_10_18 00:00:00' 7 days 4 hours = UTC 2020_10_25 04:00:00 воскресенье. Переведите обратно в центральное время США, и вы получите: 2020_10_24 23:00:00 CST , субботу. Инстансы будут сброшены в субботу
  • При следующем сбросе инстанса время его следующего сброса сбрасывается с помощью previous reset time RaidDuration .

Это означает, что если вы хотите выбрать день недели, вам нужно выполнить одно из следующих действий:

  • Измените время сброса инстансов в instance_reset таблице так, чтобы оно приходилось на нужный вам день недели. Этот подход рискован, поскольку включает в себя прямое манипулирование временными метками сброса в базе данных
  • Очистите таблицу инстансов, затем запустите сервер в тот день, когда вы хотите, чтобы инстансы были сброшены. Да, это все еще требует манипулирования базой данных, но, по крайней мере, содержимое таблицы генерируется Azeroth Core, а не вами.

Вот что я сделал, чтобы решить проблему

Причина, по которой я так глубоко погрузил это в ответ, заключается в том, что вы должны понимать, что вы делаете, прежде чем начнете удалять таблицы в своей базе данных. ДЕЙСТВУЙТЕ С ОСТОРОЖНОСТЬЮ.

  1. Завершите работу мирового сервера
  2. Очистите characters . instance_reset таблица с помощью SQL
  3. Установите системное время на некоторое время, предшествующее текущему времени, которое при преобразовании в UTC приходится на день недели, который вы хотите сбросить экземпляры
  4. Запустите мировой сервер. Дождитесь загрузки. Войдите в систему и подтвердите, что срок блокировки инстансов истекает в нужное время.
  5. Завершите работу мирового сервера
  6. Установите системное время обратно на правильное время и запустите сервер заново