#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
, субботу. Инстансы будут сброшены в субботу
- Вы находитесь в центральном часовом поясе США, который в настоящее время равен UTC-5. Это
- Время сброса =
- При следующем сбросе инстанса время его следующего сброса сбрасывается с помощью
previous reset time RaidDuration
.
Это означает, что если вы хотите выбрать день недели, вам нужно выполнить одно из следующих действий:
- Измените время сброса инстансов в
instance_reset
таблице так, чтобы оно приходилось на нужный вам день недели. Этот подход рискован, поскольку включает в себя прямое манипулирование временными метками сброса в базе данных - Очистите таблицу инстансов, затем запустите сервер в тот день, когда вы хотите, чтобы инстансы были сброшены. Да, это все еще требует манипулирования базой данных, но, по крайней мере, содержимое таблицы генерируется Azeroth Core, а не вами.
Вот что я сделал, чтобы решить проблему
Причина, по которой я так глубоко погрузил это в ответ, заключается в том, что вы должны понимать, что вы делаете, прежде чем начнете удалять таблицы в своей базе данных. ДЕЙСТВУЙТЕ С ОСТОРОЖНОСТЬЮ.
- Завершите работу мирового сервера
- Очистите
characters
.instance_reset
таблица с помощью SQL - Установите системное время на некоторое время, предшествующее текущему времени, которое при преобразовании в UTC приходится на день недели, который вы хотите сбросить экземпляры
- Запустите мировой сервер. Дождитесь загрузки. Войдите в систему и подтвердите, что срок блокировки инстансов истекает в нужное время.
- Завершите работу мирового сервера
- Установите системное время обратно на правильное время и запустите сервер заново