43 lines
2.4 KiB
JavaScript
43 lines
2.4 KiB
JavaScript
import * as s from './stages.mjs';
|
|
const e=s.primitive;
|
|
export const TABLES={
|
|
GridFightItemConfigRow:['GameCore', 'GridFightItems'],
|
|
GridFightEquipConfigRow:['GameCore', 'GridFightEquipment'],
|
|
GridFightCraftConfigRow:['GameCore', 'GridFightCraftConfig'],
|
|
GridFightEquipUpgradeConfigRow:['GameCore', 'GridFightEquipUpgrade'],
|
|
GridFightConsumablesConfigRow:['GameCore', 'GridFightConsumables'],
|
|
GridFightAugmentConfigRow:['GameCore', 'GridFightAugment'],
|
|
GridFightPortalBuffConfigRow:['', 'GridFightPortalBuff'],
|
|
GridFightSeasonAugmentConfigRow:['', 'GridFightSeasonAugment'],
|
|
GridFightSeasonPortalConfigRow:['', 'GridFightSeasonPortal'],
|
|
GridFightSeasonItemConfigRow:['', 'GridFightSeasonItem'],
|
|
GridFightSeasonCraftConfigRow:['', 'GridFightSeasonCraft']
|
|
};
|
|
export function validate(t){
|
|
for(const [row, link, target, key]of [['GridFightSeasonAugmentConfigRow', 'AugmentID', 'GridFightAugmentConfigRow', 'ID'], ['GridFightSeasonPortalConfigRow', 'PortalID', 'GridFightPortalBuffConfigRow', 'ID'], ['GridFightSeasonCraftConfigRow', 'CraftID', 'GridFightCraftConfigRow', 'CraftID']]){
|
|
const known=new Set(t[target].map(i=>i[key]));
|
|
if(t[row].some(i=>!known.has(i[link])))e.fail(`Unresolved season reference: ${row}.${link}`);
|
|
}
|
|
if(!e.subset(new Set(t.GridFightEquipConfigRow.map(i=>i.ID)), new Set(t.GridFightItemConfigRow.map(i=>i.ID))))e.fail('Equipment missing from native item catalog');
|
|
}
|
|
export function main(){
|
|
const a=e.cli(['client', 'dump', 'identity', 'output']),
|
|
ctx=s.extractionContext(a),
|
|
[t, proofs]=s.collect(a, TABLES, ctx);
|
|
validate(t);
|
|
e.atomic_json(e.path.join(a.output, 'items.raw.json'), t);
|
|
e.atomic_json(e.path.join(a.output, 'items-schemas.json'), ctx.codec.schemas);
|
|
e.atomic_json(e.path.join(a.output, 'items-provenance.json'), {
|
|
source:'installed-client-files',
|
|
dump_sha256:ctx.identity.dump_sha256,
|
|
game_assembly_sha256:ctx.identity.game_assembly_sha256,
|
|
catalogues:ctx.assets.catalogues,
|
|
tables:proofs,
|
|
outputs:Object.fromEntries(['items.raw.json', 'items-schemas.json'].map(n=>[n, e.sha256_file(e.path.join(a.output, n))])),
|
|
purpose:'Raw inventory, recipe and selection contracts; no effect implementation',
|
|
unresolved:['Forge asset binding', 'Native choice generation and effect execution', 'Equipment transfer on merge/sell', 'Season item ConfigID semantics'],
|
|
gameplay_verified:false
|
|
});
|
|
}
|
|
e.runMain(import.meta.url, main);
|