Created
May 9, 2021 12:55
-
-
Save pixelkritzel/52886706cc18cf0159dd5eabc979211a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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