albion/server/src/gamedata/cli.ts
Заид Омар Медхат 7ba275dd77 Phase 1: scaffold + game data ingestion
npm workspaces (Fastify+TS server, Vite+React web), SQLite schema,
ao-bin-dumps downloader and parser (items, recipes, enchant upgrades,
EN localization), item browser UI and debug API.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 02:53:19 +05:00

35 lines
1.3 KiB
TypeScript

import { downloadGameData } from './download.js';
import { parseGameData } from './parse.js';
import { getDb } from '../db/index.js';
const force = process.argv.includes('--force');
console.log(`Downloading game data${force ? ' (forced refresh)' : ''}...`);
const downloads = await downloadGameData(force);
for (const d of downloads) {
console.log(` ${d.file}: ${d.status} (${(d.bytes / 1024 / 1024).toFixed(1)} MB)`);
}
console.log('Parsing into database...');
const stats = parseGameData();
console.log(` items: ${stats.items}, recipes: ${stats.recipes}, inputs: ${stats.recipeInputs}, localized names: ${stats.localizedNames}`);
// Sanity check: a well-known recipe (Adept's Bag = 8 T4 leather)
const db = getDb();
const bag = db
.prepare(
`SELECT r.id, r.output_item, r.focus_cost, i.name_en
FROM recipes r JOIN items i ON i.unique_name = r.output_item
WHERE r.output_item = 'T4_BAG' AND r.source = 'crafting'`,
)
.all() as any[];
for (const r of bag) {
const inputs = db
.prepare('SELECT input_item, count, max_return_amount FROM recipe_inputs WHERE recipe_id = ?')
.all(r.id);
console.log(`Sanity check — ${r.name_en} (${r.output_item}), focus ${r.focus_cost}:`, inputs);
}
if (bag.length === 0) {
console.error('WARNING: T4_BAG recipe not found — parser needs adjustment.');
process.exitCode = 1;
}