События и таймеры
Расписание мировых событий 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 и пересоберите
страницу.