Skip to content

Instantly share code, notes, and snippets.

@Nishisonic
Created October 14, 2018 20:36
Show Gist options
  • Select an option

  • Save Nishisonic/a36f73493369765f539336bdee3db3c2 to your computer and use it in GitHub Desktop.

Select an option

Save Nishisonic/a36f73493369765f539336bdee3db3c2 to your computer and use it in GitHub Desktop.
const fs = require('fs-extra')
const csvSync = require('csv-parse/lib/sync')
const iconv = require('iconv-lite')
const SHIP_DATA = {}
const STYPE_DATA = {}
const ITEM_DATA = {}
fs.readFile('START2.json','utf8',(err, data) => {
if (err) reject(err)
const master = JSON.parse(data).api_data
master.api_mst_stype.forEach(stype => {
STYPE_DATA[stype.api_id] = stype.api_name
})
master.api_mst_slotitem.forEach(item => {
ITEM_DATA[item.api_id] = item
})
fs.readFile('ShipParameterRecord.csv',(err, data) => {
if (err) reject(err)
const rawdata = csvSync(iconv.decode(new Buffer(data, 'binary'), "Shift_JIS"))
const csvdata = []
rawdata.filter((v,i) => i > 0).forEach(row => {
const rowdata = {}
row.forEach((cell, j) => {
rowdata[rawdata[0][j]] = cell
})
csvdata.push(rowdata)
})
let result = `|||CENTER:|CENTER:BGCOLOR(#FFF0F5):|CENTER:BGCOLOR(#FA8072):|CENTER:BGCOLOR(#B0C4DE):|CENTER:BGCOLOR(#90EE90):|CENTER:BGCOLOR(#F0E68C):|CENTER:BGCOLOR(#B0E0E6):|CENTER:BGCOLOR(#FAEBD7):|||||||c\n`
master.api_mst_ship.filter(data => data.api_id > 1500).forEach(data => {
const csv = csvdata.find(element => Number(element['艦船ID']) === data.api_id)
SHIP_DATA[data.api_id] = {csv:csv, master:data}
})
for (let i = 1501;i <= Math.max(...Object.keys(SHIP_DATA));i++) {
const ship = SHIP_DATA[i] ? SHIP_DATA[i].csv : null
if (i % 20 === 1) {
result += `|~[[No.>練習ページ/24/深海棲艦]]|~艦級|~[[艦種>練習ページ/24/深海棲艦/艦種]]|~[[耐久>練習ページ/24/深海棲艦/耐久]]|~[[火力>練習ページ/24/深海棲艦/火力]]|~[[雷装>練習ページ/24/深海棲艦/雷装]]|~[[対空>練習ページ/24/深海棲艦/対空]]|~[[装甲>練習ページ/24/深海棲艦/装甲]]|~[[速力>練習ページ/24/深海棲艦/速力]]|~[[射程>練習ページ/24/深海棲艦/射程]]|~装備1|~装備2|~装備3|~装備4|~装備5|~備考|${i === 1501 ? 'h' : ''}\n`
}
if (ship && ship['艦船名'] !== "") {
result += `|${i}&aname(s${i});|${ship['艦船名']}|${stype(SHIP_DATA[i].master)}|${ship['耐久最大']}|${ship['火力最大']}|${ship['雷装最大']}|${ship['対空最大']}|${ship['装甲最大']}|${soku(SHIP_DATA[i].master)}|${leng(ship)}|${item(ship['装備1'])}|${item(ship['装備2'])}|${item(ship['装備3'])}|${item(ship['装備4'])}|${item(ship['装備5'])}||\n`
} else {
result += `|${i}&aname(s${i});||||||||||||||||\n`
}
}
fs.writeFile('result2.txt', result)
})
})
function item (id) {
if (id > 0) {
return `[[${ITEM_DATA[id].api_name}>練習ページ/24/装備/テーブル#i${id}]]`
} else {
return ''
}
}
function soku (status) {
switch (status.api_soku) {
case 0: return '陸上'
case 5: return '低速'
case 10: return '高速'
case 15: return '高速+'
case 20: return '最速'
default: return '不明'
}
}
function stype (status) {
return status.api_soku === 0 ? '陸上施設' : STYPE_DATA[status.api_stype]
}
function leng (ship) {
const leng = Math.max(ship['射程'] | 0, ...Array.apply(null, { length:5 }).map((v, i) => ship[`装備${i + 1}`] | 0).filter(id => id > 0).map(id => ITEM_DATA[id].api_leng))
switch (leng) {
case 0: return '無'
case 1: return '短'
case 2: return '中'
case 3: return '長'
case 4: return '超長'
case 5: return '超長+'
default: return '不明'
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment