К содержанию

События и таймеры

Расписание мировых событий DFO. Данные подтягиваются из открытого events.json проекта Daggerfall Watch.

Таймеры считаются по расписанию игры; у Врат Обливиона своя полоса в каждой провинции.
Загружаю расписание…

Как это устроено

Сайт dfo.spaceghosts.com публикует машинночитаемый файл events.json: список событий, их добыча и, главное, schedule — правило, по которому вычисляется следующее открытие.

Таймер считается на клиенте: берётся anchorOpenUtc и intervalMs, дальше — ближайшее время больше текущего. Сервер не нужен, файл статический.

const data = await fetch('https://dfo.spaceghosts.com/events.json').then(r => r.json());
for (const e of data.events) {
  if (e.schedule?.mode !== 'deterministic') continue;
  const { intervalMs, anchorOpenUtc } = e.schedule;
  const anchor = Date.parse(anchorOpenUtc);
  const now = Date.now();
  const next = anchor + Math.ceil((now - anchor) / intervalMs) * intervalMs;
  console.log(e.name, new Date(next));
}

Сервер dfo.spaceghosts.com не отдаёт заголовок CORS, поэтому браузер не может забрать файл напрямую: страница сразу берёт локальную копию assets/events-fallback.json и считает таймеры по ней. Чтобы обновить расписание, положите рядом со сайтом свежий events.json и пересоберите страницу.