From 79311d686ca46363aa864834db8bd09ecbc43b18 Mon Sep 17 00:00:00 2001 From: DitFranXX Date: Mon, 26 Apr 2021 17:20:19 +0900 Subject: [PATCH] Simplfiy --- gitadora@asphyxia/data/Exchain.ts | 60 ------------ gitadora@asphyxia/data/Matixx.ts | 60 ------------ gitadora@asphyxia/data/Nextage.ts | 60 ------------ gitadora@asphyxia/data/helper.ts | 41 -------- gitadora@asphyxia/data/index.ts | 123 ++++++++++++++++++++++++ gitadora@asphyxia/handlers/MusicList.ts | 14 +-- 6 files changed, 126 insertions(+), 232 deletions(-) delete mode 100644 gitadora@asphyxia/data/Exchain.ts delete mode 100644 gitadora@asphyxia/data/Matixx.ts delete mode 100644 gitadora@asphyxia/data/Nextage.ts delete mode 100644 gitadora@asphyxia/data/helper.ts create mode 100644 gitadora@asphyxia/data/index.ts diff --git a/gitadora@asphyxia/data/Exchain.ts b/gitadora@asphyxia/data/Exchain.ts deleted file mode 100644 index 41f51e4..0000000 --- a/gitadora@asphyxia/data/Exchain.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { CommonMusicData, readJSONOrXML, readXML, readB64JSON } from './helper'; - -export async function processData() { - if (IO.Exists("data/mdb_ex.b64")) { - return await readB64JSON("data/mdb_ex.b64"); - } - const { music } = await readJSONOrXML('data/mdb_ex.json', 'data/mdb_ex.xml', processRawData) - // await IO.WriteFile("data/mdb_ex.b64", Buffer.from(JSON.stringify({music})).toString("base64")) - return { music }; -} - -export async function processRawData(path: string): Promise { - const data = await readXML(path) - const mdb = $(data).elements("mdb.mdb_data"); - const music: any[] = []; - for (const m of mdb) { - const d = m.numbers("xg_diff_list"); - const contain = m.numbers("contain_stat"); - const gf = contain[0]; - const dm = contain[1]; - - if (gf == 0 && dm == 0) { - continue; - } - - let type = gf; - if (gf == 0) { - type = dm; - } - - music.push({ - id: K.ITEM('s32', m.number("music_id")), - cont_gf: K.ITEM('bool', gf == 0 ? 0 : 1), - cont_dm: K.ITEM('bool', dm == 0 ? 0 : 1), - is_secret: K.ITEM('bool', 0), - is_hot: K.ITEM('bool', type == 2 ? 0 : 1), - data_ver: K.ITEM('s32', m.number("data_ver")), - diff: K.ARRAY('u16', [ - d[0], - d[1], - d[2], - d[3], - d[4], - d[10], - d[11], - d[12], - d[13], - d[14], - d[5], - d[6], - d[7], - d[8], - d[9], - ]), - }); - } - return { - music, - }; -} diff --git a/gitadora@asphyxia/data/Matixx.ts b/gitadora@asphyxia/data/Matixx.ts deleted file mode 100644 index b3fc3dc..0000000 --- a/gitadora@asphyxia/data/Matixx.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { CommonMusicData, readJSONOrXML, readXML, readB64JSON } from './helper'; - -export async function processData() { - if (IO.Exists("data/mdb_mt.b64")) { - return await readB64JSON("data/mdb_mt.b64"); - } - const { music } = await readJSONOrXML('data/mdb_mt.json', 'data/mdb_mt.xml', processRawData) - // await IO.WriteFile("data/mdb_mt.b64", Buffer.from(JSON.stringify({music})).toString("base64")) - return { music }; -} - -export async function processRawData(path: string): Promise { - const data = await readXML(path) - const mdb = $(data).elements("mdb.mdb_data"); - const music: any[] = []; - for (const m of mdb) { - const d = m.numbers("xg_diff_list"); - const contain = m.numbers("contain_stat"); - const gf = contain[0]; - const dm = contain[1]; - - if (gf == 0 && dm == 0) { - continue; - } - - let type = gf; - if (gf == 0) { - type = dm; - } - - music.push({ - id: K.ITEM('s32', m.number("music_id")), - cont_gf: K.ITEM('bool', gf == 0 ? 0 : 1), - cont_dm: K.ITEM('bool', dm == 0 ? 0 : 1), - is_secret: K.ITEM('bool', 0), - is_hot: K.ITEM('bool', type == 2 ? 0 : 1), - data_ver: K.ITEM('s32', m.number("data_ver")), - diff: K.ARRAY('u16', [ - d[0], - d[1], - d[2], - d[3], - d[4], - d[10], - d[11], - d[12], - d[13], - d[14], - d[5], - d[6], - d[7], - d[8], - d[9], - ]), - }); - } - return { - music, - }; -} diff --git a/gitadora@asphyxia/data/Nextage.ts b/gitadora@asphyxia/data/Nextage.ts deleted file mode 100644 index 4b803a3..0000000 --- a/gitadora@asphyxia/data/Nextage.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { CommonMusicData, readJSONOrXML, readXML, readB64JSON } from './helper'; - -export async function processData() { - if (IO.Exists("data/mdb_nt.b64")) { - return await readB64JSON("data/mdb_nt.b64"); - } - const { music } = await readJSONOrXML('data/mdb_nt.json', 'data/mdb_nt.xml', processRawData) - // await IO.WriteFile("data/mdb_nt.b64", Buffer.from(JSON.stringify({music})).toString("base64")) - return { music }; -} - -export async function processRawData(path: string): Promise { - const data = await readXML(path) - const mdb = $(data).elements("mdb.mdb_data"); - const music: any[] = []; - for (const m of mdb) { - const d = m.numbers("xg_diff_list"); - const contain = m.numbers("contain_stat"); - const gf = contain[0]; - const dm = contain[1]; - - if (gf == 0 && dm == 0) { - continue; - } - - let type = gf; - if (gf == 0) { - type = dm; - } - - music.push({ - id: K.ITEM('s32', m.number("music_id")), - cont_gf: K.ITEM('bool', gf == 0 ? 0 : 1), - cont_dm: K.ITEM('bool', dm == 0 ? 0 : 1), - is_secret: K.ITEM('bool', 0), - is_hot: K.ITEM('bool', type == 2 ? 0 : 1), - data_ver: K.ITEM('s32', m.number("data_ver")), - diff: K.ARRAY('u16', [ - d[0], - d[1], - d[2], - d[3], - d[4], - d[10], - d[11], - d[12], - d[13], - d[14], - d[5], - d[6], - d[7], - d[8], - d[9], - ]), - }); - } - return { - music, - }; -} diff --git a/gitadora@asphyxia/data/helper.ts b/gitadora@asphyxia/data/helper.ts deleted file mode 100644 index a02b5c3..0000000 --- a/gitadora@asphyxia/data/helper.ts +++ /dev/null @@ -1,41 +0,0 @@ -export interface CommonMusicDataField { - id: KITEM<"s32">; - cont_gf: KITEM<"bool">; - cont_dm: KITEM<"bool">; - is_secret: KITEM<"bool">; - is_hot: KITEM<"bool">; - data_ver: KITEM<"s32">; - diff: KARRAY<"u16">; -} - -export interface CommonMusicData { - music: CommonMusicDataField[] -} - -export async function readXML(path: string) { - const xml = await IO.ReadFile(path, 'utf-8'); - const json = U.parseXML(xml, false) - return json -} - -export async function readJSON(path: string) { - const str = await IO.ReadFile(path, 'utf-8'); - const json = JSON.parse(str) - return json -} - -export async function readJSONOrXML(jsonPath: string, xmlPath: string, processHandler: (path: string) => Promise): Promise { - if (!IO.Exists(jsonPath)) { - const data = await processHandler(xmlPath) - await IO.WriteFile(jsonPath, JSON.stringify(data)) - return data - } else { - const json = JSON.parse(await IO.ReadFile(jsonPath, 'utf-8')) - return json - } -} - -export async function readB64JSON(b64path: string) { - const buff = await IO.ReadFile(b64path, 'utf-8'); - return JSON.parse(Buffer.from(buff, 'base64').toString('utf-8')); -} diff --git a/gitadora@asphyxia/data/index.ts b/gitadora@asphyxia/data/index.ts new file mode 100644 index 0000000..5947c41 --- /dev/null +++ b/gitadora@asphyxia/data/index.ts @@ -0,0 +1,123 @@ +export interface CommonMusicDataField { + id: KITEM<"s32">; + cont_gf: KITEM<"bool">; + cont_dm: KITEM<"bool">; + is_secret: KITEM<"bool">; + is_hot: KITEM<"bool">; + data_ver: KITEM<"s32">; + diff: KARRAY<"u16">; +} + +export interface CommonMusicData { + music: CommonMusicDataField[] +} + +export enum DATAVersion { + NEXTAGE = "nt", + EXCHAIN = "ex", + MATTIX = "mt" +} + +type processRawDataHandler = (path: string) => Promise + +export async function readXML(path: string) { + const xml = await IO.ReadFile(path, 'utf-8'); + const json = U.parseXML(xml, false) + return json +} + +export async function readJSON(path: string) { + const str = await IO.ReadFile(path, 'utf-8'); + const json = JSON.parse(str) + return json +} + +export async function readJSONOrXML(jsonPath: string, xmlPath: string, processHandler: processRawDataHandler): Promise { + if (!IO.Exists(jsonPath)) { + const data = await processHandler(xmlPath) + await IO.WriteFile(jsonPath, JSON.stringify(data)) + return data + } else { + const json = JSON.parse(await IO.ReadFile(jsonPath, 'utf-8')) + return json + } +} + +export async function readB64JSON(b64path: string) { + const buff = await IO.ReadFile(b64path, 'utf-8'); + return JSON.parse(Buffer.from(buff, 'base64').toString('utf-8')); +} + +export function gameVerToDataVer(ver: string): DATAVersion { + switch(ver) { + case 'nextage': + return DATAVersion.NEXTAGE + case 'excahin': + return DATAVersion.EXCHAIN + case 'matixx': + default: + return DATAVersion.MATTIX + } +} + +export async function processDataBuilder(gameVer: string, processHandler?: processRawDataHandler) { + const ver = gameVerToDataVer(gameVer) + const base = `data/mdb_${ver}` + if (IO.Exists(`${base}.b64`)) { + return await readB64JSON(`${base}.b64`); + } + const { music } = await readJSONOrXML(`${base}.json`, `${base}.xml`, processHandler ?? defaultProcessRawData) + // await IO.WriteFile(`${base}.b64`, Buffer.from(JSON.stringify({music})).toString("base64")) + return { music }; +} + + +export async function defaultProcessRawData(path: string): Promise { + const data = await readXML(path) + const mdb = $(data).elements("mdb.mdb_data"); + const music: any[] = []; + for (const m of mdb) { + const d = m.numbers("xg_diff_list"); + const contain = m.numbers("contain_stat"); + const gf = contain[0]; + const dm = contain[1]; + + if (gf == 0 && dm == 0) { + continue; + } + + let type = gf; + if (gf == 0) { + type = dm; + } + + music.push({ + id: K.ITEM('s32', m.number("music_id")), + cont_gf: K.ITEM('bool', gf == 0 ? 0 : 1), + cont_dm: K.ITEM('bool', dm == 0 ? 0 : 1), + is_secret: K.ITEM('bool', 0), + is_hot: K.ITEM('bool', type == 2 ? 0 : 1), + data_ver: K.ITEM('s32', m.number("data_ver")), + diff: K.ARRAY('u16', [ + d[0], + d[1], + d[2], + d[3], + d[4], + d[10], + d[11], + d[12], + d[13], + d[14], + d[5], + d[6], + d[7], + d[8], + d[9], + ]), + }); + } + return { + music, + }; +} \ No newline at end of file diff --git a/gitadora@asphyxia/handlers/MusicList.ts b/gitadora@asphyxia/handlers/MusicList.ts index 6e6f12c..169be3b 100644 --- a/gitadora@asphyxia/handlers/MusicList.ts +++ b/gitadora@asphyxia/handlers/MusicList.ts @@ -1,8 +1,6 @@ import { getVersion } from "../utils"; -import { processData as ExchainMusic } from "../data/Exchain" -import { processData as MatixxMusic } from "../data/Matixx" -import { processData as NextageMusic } from "../data/Nextage" -import { CommonMusicDataField, readJSONOrXML, readXML } from "../data/helper"; +import { processDataBuilder } from "../data" +import { CommonMusicDataField, readJSONOrXML, readXML } from "../data"; export const playableMusic: EPR = async (info, data, send) => { const version = getVersion(info); @@ -61,13 +59,7 @@ export const playableMusic: EPR = async (info, data, send) => { } if (music.length == 0) { - if (version == 'nextage') { - music = _.get(await NextageMusic(), 'music', []); - } else if (version == 'exchain') { - music = _.get(await ExchainMusic(), 'music', []); - } else { - music = _.get(await MatixxMusic(), 'music', []); - } + music = _.get(await processDataBuilder(version), 'music', []); }