feat: add Nikke, the third Fandom template
Its robots.txt was read in a browser and is the standard Fandom file: no Disallow: / for *, /api.php?action= explicitly allowed, and only the namespaces we never want refused. The AI crawlers it blocks by name are not us. That was the one thing missing — the API itself has always answered our own User-Agent with a 200, and it is only robots.txt that a datacentre address cannot read. The zone lives in the column header, Start(UTC+9) / End(UTC+9), and no date in any cell carries an offset. So the header is the safety property: a table that stops naming its zone is refused rather than read as UTC, which is the Blue Archive hazard arriving one column to the left. Two shapes worth knowing. Every title is an image read from <a title>, and the newest row is the one whose logo has not been uploaded yet — it renders as a red link reading "File:Persona on Frontline logo.png", so a reader that only understood the link title would silently drop today's live event. And story events state a clock only on the end, so the start keeps the day the page printed rather than being shifted nine hours into the previous one; the start's day is half an event ID. That is the FGO rule applied to the opposite gap. resetOffsets and resetHourLocal ship with the game because the page evidences both: events end 04:59:59 and the banner replacing them starts 05:00:00, one second later, on a stated UTC+9. Adding that later would re-label day keys readers had already logged ticks under. Seconds now survive the date helpers, since rounding 04:59:59 to the minute would make an event overlap the banner that succeeds it. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c9e9359808
commit
bd385855c0
@@ -139,6 +139,17 @@ export const GAMES: Record<GameId, GameMeta> = {
|
||||
// which states the zone the *dates* are in and says nothing about where the
|
||||
// server's day rolls — and every row on it is a bare date anyway, with no
|
||||
// time of day to read a reset out of. Same silence as p5x and czn.
|
||||
// Nikke runs one worldwide server on a Japanese clock that rolls its day at
|
||||
// **05:00**, not 04:00 — and both halves come from the source rather than
|
||||
// from habit. Every schedule column on the wiki is headed `Start(UTC+9)` /
|
||||
// `End(UTC+9)`, and the rows themselves show the boundary: story events end
|
||||
// at 04:59:59 and the pickup banner replacing them starts at 05:00:00, one
|
||||
// second apart. That is the Reverse: 1999 evidence pattern exactly.
|
||||
//
|
||||
// Set in the same commit that ships the game, which costs nothing now and
|
||||
// could not be added later without re-labelling day keys readers had already
|
||||
// logged ticks under.
|
||||
nikke: { id: "nikke", name: "Goddess of Victory: Nikke", short: "Nikke", hue: "#E4572E", studio: "Shift Up", dailyTasks: "Daily missions, outpost", resetOffsets: { asia: 9, america: 9, europe: 9 }, resetHourLocal: 5 },
|
||||
uma: { id: "uma", name: "Umamusume: Pretty Derby", short: "Umamusume", hue: "#6FBF44", studio: "Cygames", dailyTasks: "Daily races, missions" },
|
||||
};
|
||||
|
||||
|
||||
@@ -18,6 +18,9 @@ export const GameId = z.enum([
|
||||
"stellasora", // Stella Sora
|
||||
"czn", // Chaos Zero Nightmare
|
||||
"uma", // Umamusume: Pretty Derby
|
||||
// NOTE: one letter from "nikki" (Infinity Nikki) above, and both are the
|
||||
// first segment of every completion key their game will ever have.
|
||||
"nikke", // Goddess of Victory: Nikke
|
||||
]);
|
||||
export type GameId = z.infer<typeof GameId>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user