23 lines
1.3 KiB
JavaScript
23 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/** verify.js — read-back + integrity check for ghost-roster.db */
|
|
const Database = require('better-sqlite3');
|
|
const path = require('path');
|
|
const db = new Database(process.argv[2] || path.join(__dirname, 'ghost-roster.db'), { readonly: true });
|
|
|
|
const fk = db.pragma('foreign_key_check');
|
|
console.log('FK violations:', fk.length ? fk : 'none');
|
|
console.log('ghosts: ', db.prepare('SELECT COUNT(*) c FROM roster_ghosts').get().c);
|
|
console.log('abilities:', db.prepare('SELECT COUNT(*) c FROM roster_abilities').get().c);
|
|
console.log('locations:', db.prepare('SELECT COUNT(*) c FROM roster_locations').get().c);
|
|
console.log('by color: ', db.prepare('SELECT color, COUNT(*) c FROM roster_ghosts GROUP BY color').all());
|
|
console.log('by rarity:', db.prepare('SELECT rarity, COUNT(*) c FROM roster_ghosts GROUP BY rarity_tier ORDER BY rarity_tier').all());
|
|
console.log('\nrarity-weighted spawn sample (10 draws):');
|
|
const pool = db.prepare(`SELECT id, name, color, rarity FROM roster_ghosts`).all();
|
|
const W = { Common: 50, Rare: 30, Epic: 15, Legendary: 5 };
|
|
const weighted = pool.flatMap(g => Array(W[g.rarity]).fill(g));
|
|
for (let i = 0; i < 10; i++) {
|
|
const g = weighted[Math.floor(Math.random() * weighted.length)];
|
|
console.log(` ${g.color.padEnd(6)} ${g.rarity.padEnd(9)} ${g.name}`);
|
|
}
|
|
db.close();
|