Honey Village: six model builds + hub frontend, Dockerized for Dokploy
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
// 门往返专项:每条通道双向走一遍,确认到达后 1.2 秒内不被弹回(防出生点压住触发区)
|
||||
import { chromium } from "playwright";
|
||||
import { createServer } from "vite";
|
||||
const server = await createServer({ server: { port: 5193 } });
|
||||
await server.listen();
|
||||
const browser = await chromium.launch();
|
||||
const page = await browser.newPage({ viewport: { width: 1280, height: 720 } });
|
||||
const errors = [];
|
||||
page.on("console", m => { if (m.type() === "error") errors.push(m.text()); });
|
||||
page.on("pageerror", e => errors.push(e.message));
|
||||
const sleep = ms => page.waitForTimeout(ms);
|
||||
const tp = (x, y) => page.evaluate(([x, y]) => {
|
||||
const sc = window.__game.scene.getScenes(true).find(s => s.player);
|
||||
sc.player.setPosition(x, y); sc.player.body.reset(x, y);
|
||||
}, [x, y]);
|
||||
const cur = () => page.evaluate(() => window.__director.currentScene);
|
||||
const failures = [];
|
||||
// 沿指定方向持续走 ms 毫秒(模拟真实按键走进出口)
|
||||
const walk = async (key, ms) => { await page.keyboard.down(key); await sleep(ms); await page.keyboard.up(key); };
|
||||
|
||||
await page.goto("http://localhost:5193/");
|
||||
await sleep(2500);
|
||||
await page.fill("#name-input", "门测");
|
||||
await page.press("#name-input", "Enter");
|
||||
await sleep(1800);
|
||||
|
||||
// [出发场景, 门口站位, 行走方向, 目标场景]
|
||||
const LEGS = [
|
||||
["house", [88, 110], "s", "plaza"], // 小屋 → 广场
|
||||
["plaza", [72, 90], "w", "house"], // 广场 → 小屋
|
||||
["house", [88, 110], "s", "plaza"],
|
||||
["plaza", [152, 90], "w", "bakery"], // 广场 → 面包房
|
||||
["bakery", [128, 140], "s", "plaza"],
|
||||
["plaza", [344, 90], "w", "store"], // 广场 → 杂货店
|
||||
["store", [128, 140], "s", "plaza"],
|
||||
["plaza", [424, 90], "w", "clinic"], // 广场 → 诊所
|
||||
["clinic", [96, 110], "s", "plaza"],
|
||||
["plaza", [20, 148], "a", "lake"], // 广场 → 湖畔
|
||||
["lake", [360, 120], "d", "plaza"], // 湖畔 → 广场
|
||||
["plaza", [462, 148], "d", "field"], // 广场 → 花田
|
||||
["field", [24, 104], "a", "plaza"], // 花田 → 广场
|
||||
["plaza", [232, 24], "w", "well"], // 广场 → 古井
|
||||
["well", [112, 136], "s", "plaza"], // 古井 → 广场
|
||||
["plaza", [232, 296], "s", "fogwall"], // 广场 → 雾墙
|
||||
["fogwall", [168, 30], "w", "plaza"], // 雾墙 → 广场(用户报告的死循环路径)
|
||||
];
|
||||
for (const [from, [x, y], dir, to] of LEGS) {
|
||||
const at = await cur();
|
||||
if (at !== from) { console.log(`FAIL 前置不在 ${from}(在 ${at})`); failures.push(from + "->" + to); continue; }
|
||||
await tp(x, y); await sleep(250);
|
||||
await walk(dir, 900);
|
||||
let arrived = false;
|
||||
for (let i = 0; i < 20; i++) { await sleep(150); if ((await cur()) === to) { arrived = true; break; } }
|
||||
await sleep(1200); // 到达后必须站得住
|
||||
const settled = (await cur()) === to;
|
||||
console.log(`${arrived && settled ? "PASS" : "FAIL"} ${from} → ${to}${arrived && !settled ? "(被弹回!)" : ""}`);
|
||||
if (!(arrived && settled)) failures.push(from + "->" + to);
|
||||
}
|
||||
console.log("CONSOLE ERRORS:", errors.length);
|
||||
console.log("FAILURES:", failures.length, failures.join(" | "));
|
||||
await browser.close(); await server.close();
|
||||
process.exit(errors.length || failures.length ? 1 : 0);
|
||||
Reference in New Issue
Block a user