// act-state.js — act 城镇页的状态断言(acts.html) // // 判定全部来自 window.__d2webAct 的字段,不看图:归档是否真的读进来了、地图块 // 有几格、瓦片引用是否全部解析、图集多大、以及按键之后角色是否真的沿屏幕方向 // 位移且朝向正确。返回 JSON,由 scripts/browser/inspect-page.mjs 打印。 // // CHROME=/root/.cache/ms-playwright/chromium-1223/chrome-linux64/chrome // node scripts/browser/inspect-page.mjs "$CHROME" \ // "http://127.0.0.1:5173/acts.html?act=1" scripts/browser/checks/act-state.js (async () => { const sleep = (ms) => new Promise((r) => setTimeout(r, ms)) const deadline = Date.now() + 150000 while (Date.now() < deadline) { const s = window.__d2webAct if (s && (s.ready || s.error)) break await sleep(500) } const first = { ...(window.__d2webAct ?? {}) } await sleep(1500) const before = { x: window.__d2webAct?.x ?? 0, y: window.__d2webAct?.y ?? 0, tick: window.__d2webAct?.tick ?? 0 } const press = (code, down) => window.dispatchEvent(new KeyboardEvent(down ? 'keydown' : 'keyup', { code, bubbles: true })) // 向东走 1.2 秒,再向南走 1.2 秒;记录位移与朝向 press('ArrowRight', true); await sleep(1200); press('ArrowRight', false) const east = { x: window.__d2webAct?.x ?? 0, y: window.__d2webAct?.y ?? 0, facing: window.__d2webAct?.facing ?? -1 } press('ArrowDown', true); await sleep(1200); press('ArrowDown', false) await sleep(300) const south = { x: window.__d2webAct?.x ?? 0, y: window.__d2webAct?.y ?? 0, facing: window.__d2webAct?.facing ?? -1 } press('KeyT', true); await sleep(100); press('KeyT', false) await sleep(200) const afterTalk = { ...(window.__d2webAct ?? {}) } return { ready: first.ready, error: first.error ?? null, act: first.act, level: first.level, quadrant: first.quadrant, quadrants: first.quadrants, cells: `${first.cellsX}x${first.cellsY}`, scene: `${first.widthPx}x${first.heightPx}`, floors: first.floors, walls: first.walls, frames: first.frames, atlas: `${first.atlasWidth}x${first.atlasHeight}`, missing: first.missing, walkable: Number((first.walkable ?? 0).toFixed(3)), character: first.character, drawCalls: first.drawCalls, tickRate: Number((first.tickRate ?? 0).toFixed(1)), moved: { east: [Math.round(east.x - before.x), Math.round(east.y - before.y)], south: [Math.round(south.x - east.x), Math.round(south.y - east.y)], tickDelta: (window.__d2webAct?.tick ?? 0) - before.tick }, facingEast: east.facing, facingSouth: south.facing, dialogOpen: (afterTalk.dialog ?? []).length > 0, } })()