Newer
Older
rpg / tools / smoke-quest.mjs
/**
 * Смоук квестовой рамки: новая игра → Звенец → диалог с Ирвином (задание) →
 * сумка с журналом (I). Запуск: node tools/smoke-quest.mjs [url] [скриншот]
 */
import { openGame } from './agent-lib.mjs';

const url = process.argv[2] ?? 'http://localhost:5199/';
const shot = process.argv[3] ?? '/tmp/rpg_quest.png';

const { browser, page, agent } = await openGame({ url, newGame: true });
page.on('pageerror', (err) => console.log(`[ошибка страницы] ${err.message}`));

// Усыпить сгустков: путь героя не должен прерываться уроном.
await page.evaluate(() => {
    const g = window.__game;
    for (const [, en] of g.scenes.current.combat.enemies) en.brain.putToSleep(9999);
});

// В Звенец, затем клик по Ирвину (12,9) — сцена сама подведёт героя.
await agent.walkTo(26, 14);
await agent.waitFor('s.area === "zvenets"', { timeoutTicks: 300 });
await agent.waitFor('!s.transitioning', { timeoutTicks: 300 });
await agent.tapTile(12, 9);
const talked = await agent.runDialogue();
console.log(`Диалог с Ирвином: ${talked ? 'сыгран' : 'НЕ открылся'}`);

const flags = (await agent.snapshot()).flags;
console.log('Флаги:', JSON.stringify(flags));
if (!flags.includes('metElder')) console.log('  ! флаг metElder не поставлен');

// Сумка с журналом (I) — через инъекцию клавиши.
await agent.key('KeyI');
await page.screenshot({ path: shot });
console.log(`Скриншот: ${shot}`);
await browser.close();