Skip to content

Instantly share code, notes, and snippets.

@pixelkritzel
Created May 9, 2021 12:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pixelkritzel/52886706cc18cf0159dd5eabc979211a to your computer and use it in GitHub Desktop.
Save pixelkritzel/52886706cc18cf0159dd5eabc979211a to your computer and use it in GitHub Desktop.
const sb1 = require('./spellbook_1.json');
const sb2 = require('./spellbook_2.json');
const sb3 = require('./spellbook_3.json');
const sb4 = require('./spellbook_4.json');
const sb5 = require('./spellbook_5.json');
const sb6 = require('./spellbook_6.json');
const sb7 = require('./spellbook_7.json');
const sb8 = require('./spellbook_8.json');
const sb9 = require('./spellbook_9.json');
const sb10 = require('./spellbook_10.json');
const sb11 = require('./spellbook_11.json');
const sb12 = require('./spellbook_12.json');
const sb13 = require('./spellbook_13.json');
const sb14 = require('./spellbook_14.json');
const sb15 = require('./spellbook_15.json');
const sb16 = require('./spellbook_16.json');
const sb17 = require('./spellbook_17.json');
const sb18 = require('./spellbook_18.json');
const sb19 = require('./spellbook_19.json');
const sb20 = require('./spellbook_20.json');
const sb21 = require('./spellbook_21.json');
const sb22 = require('./spellbook_22.json');
const sb23 = require('./spellbook_23.json');
const sb24 = require('./spellbook_24.json');
const sb25 = require('./spellbook_25.json');
const sb26 = require('./spellbook_26.json');
const { writeFileSync } = require('fs');
var { ExportToCsv } = require('export-to-csv');
interface Grade {
zeon: number;
requiredIntelligence: number;
effect: string;
retention: number;
}
interface BookSpell {
spellId: number;
bookId: number;
name: string;
actionType: string;
type: string;
effect: string;
level: number;
initialGrade: Grade;
intermediateGrade: Grade;
advancedGrade: Grade;
arcaneGrade: Grade;
withRetention: boolean;
dailyRetention: boolean;
}
interface Book {
bookId: number;
bookName: string;
description: string;
type?: string;
primaryBookUnaccessibles?: string[];
secondaryBookAccessibles?: string[];
spells: BookSpell[];
}
const spellbooksJSON: Book[] = [
sb1,
sb2,
sb3,
sb4,
sb5,
sb6,
sb7,
sb8,
sb9,
sb10,
sb11,
sb12,
sb13,
sb14,
sb15,
sb16,
sb17,
sb18,
sb19,
sb20,
sb21,
sb22,
sb23,
sb24,
sb25,
sb26,
];
interface Spell {
Spell: BookSpell['name'];
Level: BookSpell['level'];
Book: Book['bookName'];
Action: BookSpell['actionType'];
Type: BookSpell['type'];
Description: BookSpell['effect'];
'Zeon (Basic)': BookSpell['initialGrade']['zeon'];
'Zeon (Intermediate)': BookSpell['intermediateGrade']['zeon'];
'Zeon (Advanced)': BookSpell['advancedGrade']['zeon'];
'Zeon (Arcane)': BookSpell['arcaneGrade']['zeon'];
'Intelligence (Basic)': BookSpell['initialGrade']['requiredIntelligence'];
'Intelligence (Intermediate)': BookSpell['intermediateGrade']['requiredIntelligence'];
'Intelligence (Advanced)': BookSpell['advancedGrade']['requiredIntelligence'];
'Intelligence (Arcane)': BookSpell['arcaneGrade']['requiredIntelligence'];
'Effect (Basic)': BookSpell['initialGrade']['effect'];
'Effect (Intermediate)': BookSpell['intermediateGrade']['effect'];
'Effect (Advanced)': BookSpell['advancedGrade']['effect'];
'Effect (Arcane)': BookSpell['arcaneGrade']['effect'];
'Maintenance (Basic)'?: BookSpell['initialGrade']['retention'];
'Maintenance (Intermediate)'?: BookSpell['intermediateGrade']['retention'];
'Maintenance (Advanced)'?: BookSpell['advancedGrade']['retention'];
'Maintenance (Arcane)'?: BookSpell['arcaneGrade']['retention'];
Daily?: 'Daily';
ClosedPaths?: string;
}
const SPELL_SCAFFOLD: Spell = {
Spell: '',
Level: NaN,
Book: '',
Action: '',
Type: '',
Description: '',
'Zeon (Basic)': NaN,
'Zeon (Intermediate)': NaN,
'Zeon (Advanced)': NaN,
'Zeon (Arcane)': NaN,
'Intelligence (Basic)': NaN,
'Intelligence (Intermediate)': NaN,
'Intelligence (Advanced)': NaN,
'Intelligence (Arcane)': NaN,
'Effect (Basic)': '',
'Effect (Intermediate)': '',
'Effect (Advanced)': '',
'Effect (Arcane)': '',
'Maintenance (Basic)': undefined,
'Maintenance (Intermediate)': undefined,
'Maintenance (Advanced)': undefined,
'Maintenance (Arcane)': undefined,
Daily: undefined,
ClosedPaths: undefined,
};
const spells: Spell[] = [];
spellbooksJSON.forEach((spellBook) => {
spellBook.spells.forEach((src) => {
const spell: Spell = { ...SPELL_SCAFFOLD };
spell.Spell = src.name;
spell.Level = src.level;
spell.Book = spellBook.bookName;
spell.Action = src.actionType;
spell.Type = src.type;
spell.Description = src.effect;
spell['Zeon (Basic)'] = src.initialGrade.zeon;
spell['Zeon (Intermediate)'] = src.intermediateGrade.zeon;
spell['Zeon (Advanced)'] = src.advancedGrade.zeon;
spell['Zeon (Arcane)'] = src.arcaneGrade.zeon;
spell['Intelligence (Basic)'] = src.initialGrade.requiredIntelligence;
spell['Intelligence (Intermediate)'] = src.intermediateGrade.requiredIntelligence;
spell['Intelligence (Advanced)'] = src.advancedGrade.requiredIntelligence;
spell['Intelligence (Arcane)'] = src.arcaneGrade.requiredIntelligence;
spell['Effect (Basic)'] = src.initialGrade.effect;
spell['Effect (Intermediate)'] = src.intermediateGrade.effect;
spell['Effect (Advanced)'] = src.advancedGrade.effect;
spell['Effect (Arcane)'] = src.arcaneGrade.effect;
if (src.withRetention) {
spell['Maintenance (Basic)'] = src.initialGrade.retention;
spell['Maintenance (Intermediate)'] = src.intermediateGrade.retention;
spell['Maintenance (Advanced)'] = src.advancedGrade.retention;
spell['Maintenance (Arcane)'] = src.arcaneGrade.retention;
}
if (src.dailyRetention) {
spell.Daily = 'Daily';
}
if (Array.isArray(spellBook.primaryBookUnaccessibles)) {
spell.ClosedPaths = spellBook.primaryBookUnaccessibles.join(' ');
}
spells.push(spell);
});
});
const options = {
fieldSeparator: ',',
quoteStrings: '"',
decimalSeparator: '.',
showLabels: true,
showTitle: true,
title: 'Anima Spells',
useTextFile: true,
useBom: true,
useKeysAsHeaders: true,
// headers: ['Column 1', 'Column 2', etc...] <-- Won't work with useKeysAsHeaders present!
};
const csvExporter = new ExportToCsv(options);
const result = csvExporter.generateCsv(spells, true);
writeFileSync('./anima-spells.csv', result, 'utf-8');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment