diff --git a/iidx@asphyxia/README.md b/iidx@asphyxia/README.md index 258e409..045954c 100644 --- a/iidx@asphyxia/README.md +++ b/iidx@asphyxia/README.md @@ -9,6 +9,7 @@ Supported Versions - beatmaniaIIDX 18 Resort Anthem - beatmaniaIIDX 19 Lincle - beatmaniaIIDX 20 tricoro + - beatmaniaIIDX 21 SPADA - beatmaniaIIDX 27 HEROIC VERSE - beatmaniaIIDX 28 BISTROVER - beatmaniaIIDX 29 CastHour @@ -60,3 +61,8 @@ Changelogs - Event savings are broken - Added movie_upload url setting on plugin setting (BISTROVER ~) - This uses JSON instead of XML and this requires additional setup. (can't test or implement this as I don't own NVIDIA GPU) + +**v0.1.7** + - Added Initial support for SPADA + - Event savings are broken + - Fixed rtype didn't save correctly. (BISTROVER ~) diff --git a/iidx@asphyxia/handlers/music.ts b/iidx@asphyxia/handlers/music.ts index 8f9379a..f1eb814 100644 --- a/iidx@asphyxia/handlers/music.ts +++ b/iidx@asphyxia/handlers/music.ts @@ -59,7 +59,7 @@ export const musicgetrank: EPR = async (info, data, send) => { }); } } - else if (version > 19 && version < 27) { + else if (version > 19 && version < 21) { indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; music_data.forEach((res: score) => { if (cltype == 0) { @@ -89,8 +89,10 @@ export const musicgetrank: EPR = async (info, data, send) => { }); } } - else if (version >= 27) { - indices = cltype === 0 ? [0, 1, 2, 3, 4] : [5, 6, 7, 8, 9]; + else if (version >= 21) { + if (version >= 27) indices = cltype === 0 ? [0, 1, 2, 3, 4] : [5, 6, 7, 8, 9]; + else indices = cltype === 0 ? [1, 2, 3] : [6, 7, 8]; + music_data.forEach((res: score) => { if (cltype == 0) { score_data = [-1, res.mid, ...indices.map(i => res.cArray[i]), ...indices.map(i => res.esArray[i]), ...indices.map(i => res.mArray[i])]; @@ -219,6 +221,7 @@ export const musicreg: EPR = async (info, data, send) => { let ghost = null, ghost_gauge = null; // Heroic Verse // let style = 0, option = 0, option_2 = 0; + // TODO:: SPADA Leggendaria has seperate music_id // const mapping = [1, 2, 3, 6, 7, 8]; if (version == -1) return send.deny(); else if (version < 20) { diff --git a/iidx@asphyxia/handlers/pc.ts b/iidx@asphyxia/handlers/pc.ts index ef5f0cb..9e309e8 100644 --- a/iidx@asphyxia/handlers/pc.ts +++ b/iidx@asphyxia/handlers/pc.ts @@ -1,4 +1,4 @@ -import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata } from "../models/pcdata"; +import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata, IIDX21_pcdata } from "../models/pcdata"; import { grade } from "../models/grade"; import { custom, default_custom } from "../models/custom"; import { IDtoCode, IDtoRef, Base64toBuffer, GetVersion, ReftoProfile, ReftoPcdata, ReftoQPRO, appendSettingConverter } from "../util"; @@ -61,7 +61,8 @@ export const pccommon: EPR = async (info, data, send) => { flg: String(-1), }), }); - } else if (version == 20) { + } + else if (version == 20) { return send.object({ "@attr": { expire: 600, @@ -90,10 +91,9 @@ export const pccommon: EPR = async (info, data, send) => { tricolettepark: K.ATTR({ open: String(1), }), - }); } - else if (version >= 27) { + else if (version >= 21) { return send.pugFile(`pug/LDJ/${version}pccommon.pug`, { beat: U.GetConfig("BeatPhase"), movie_upload: U.GetConfig("MovieUpload"), @@ -123,6 +123,9 @@ export const pcreg: EPR = async (info, data, send) => { case 20: pcdata = LDJ_pcdata; break; + case 21: + pcdata = IIDX21_pcdata; + break; case 27: pcdata = IIDX27_pcdata; lightning_playdata = lm_playdata; @@ -306,14 +309,14 @@ export const pcget: EPR = async (info, data, send) => { wArray.sort((a, b) => a.tour_id - b.tour_id); } - let event, event_1, event_1s, evtArray = [], evtArray2 = []; + let event; if (version == 18) { event = await DB.FindOne(refid, { collection: "event_1", version: version }); if (!_.isNil(event)) { - event.cf = Base64toBuffer(event.cf); - event.pf = Base64toBuffer(event.pf); - event.mf = Base64toBuffer(event.mf); + event.cf = Base64toBuffer(event.cf).toString("hex"); + event.pf = Base64toBuffer(event.pf).toString("hex"); + event.mf = Base64toBuffer(event.mf).toString("hex"); } return send.pugFile("pug/JDZ/pcget.pug", { @@ -330,9 +333,9 @@ export const pcget: EPR = async (info, data, send) => { event = await DB.FindOne(refid, { collection: "event_1", version: version }); if (!_.isNil(event)) { - event.cf = Base64toBuffer(event.cf); - event.qcf = Base64toBuffer(event.qcf); - event.piece = Base64toBuffer(event.piece); + event.cf = Base64toBuffer(event.cf).toString("hex"); + event.qcf = Base64toBuffer(event.qcf).toString("hex"); + event.piece = Base64toBuffer(event.piece).toString("hex"); } return send.pugFile("pug/KDZ/pcget.pug", { @@ -346,7 +349,7 @@ export const pcget: EPR = async (info, data, send) => { }); } else if (version == 20) { - if (!_.isNil(pcdata.st_help)) pcdata.st_help = Base64toBuffer(pcdata.st_help); + if (!_.isNil(pcdata.st_help)) pcdata.st_help = Base64toBuffer(pcdata.st_help).toString("hex"); let link5 = await DB.FindOne(refid, { collection: "event_1", version: version, event_name: "link5" }); let tricolettepark = await DB.FindOne(refid, { collection: "event_1", version: version, event_name: "tricolettepark" }); @@ -366,23 +369,44 @@ export const pcget: EPR = async (info, data, send) => { yellowboss, }); } - else if (version >= 27) { - event_1 = await DB.Find(refid, { collection: "event_1", version: version }); - event_1s = await DB.Find(refid, { collection: "event_1_sub", version: version }); + else if (version >= 21) { + let link5 = null, tricolettepark = null, boss1 = null, evtArray = [], evtArray2 = []; + if (version == 20 || version == 21) { + link5 = await DB.FindOne(refid, { collection: "event_1", version: 20, event_name: "link5" }); + tricolettepark = await DB.FindOne(refid, { collection: "event_1", version: 20, event_name: "tricolettepark" }); - if (event_1.length > 0) { - for (let evt of event_1) { - evtArray.push(evt); + if (version == 21) { + if (!_.isNil(pcdata.sp_mlist)) { + pcdata.sp_mlist = Base64toBuffer(pcdata.sp_mlist).toString("hex"); + pcdata.sp_clist = Base64toBuffer(pcdata.sp_clist).toString("hex"); + pcdata.dp_mlist = Base64toBuffer(pcdata.dp_mlist).toString("hex"); + pcdata.dp_clist = Base64toBuffer(pcdata.dp_clist).toString("hex"); + } + + if (!_.isNil(pcdata.st_album)) pcdata.st_album = Base64toBuffer(pcdata.st_album).toString("hex"); + + boss1 = await DB.FindOne(refid, { collection: "event_1", version: version, event_name: "boss1" }); + if (!_.isNil(boss1.durability)) boss1.durability = Base64toBuffer(boss1.durability).toString("hex"); + } + } + else { + let event_1 = await DB.Find(refid, { collection: "event_1", version: version }); + let event_1s = await DB.Find(refid, { collection: "event_1_sub", version: version }); + + if (event_1.length > 0) { + for (let evt of event_1) { + evtArray.push(evt); + } + } + + if (event_1s.length > 0) { + for (let evt of event_1s) { + evtArray2.push(evt); + } } } - if (event_1s.length > 0) { - for (let evt of event_1s) { - evtArray2.push(evt); - } - } - - if (lm_music_memo_new.length > 0 && version >= 30) { + if (version >= 30 && lm_music_memo_new.length > 0) { lm_music_memo_new.forEach((res) => { let musicmemo_data: musicmemo_data_new = { folder_idx: res.folder_idx, @@ -395,7 +419,8 @@ export const pcget: EPR = async (info, data, send) => { mArray.push(musicmemo_data); }); mArray.sort((a: musicmemo_data_new, b: musicmemo_data_new): number => a.play_style - b.play_style || a.folder_idx - b.folder_idx); - } else if (lm_music_memo.length > 0 && version >= 27) { + } + else if (version >= 27 && lm_music_memo.length > 0) { lm_music_memo.forEach((res) => { let musicmemo_data: musicmemo_data = { music_idx: res.music_idx, @@ -409,7 +434,7 @@ export const pcget: EPR = async (info, data, send) => { mArray.sort((a: musicmemo_data, b: musicmemo_data): number => a.play_style - b.play_style || a.music_idx - b.music_idx); } - /* TODO:: figure out how badges works + /*** TODO:: figure out how badges works [save] - elements are below but get checks for id 0~12 today_recommend (flg) weekly_ranking (flg) @@ -419,9 +444,8 @@ export const pcget: EPR = async (info, data, send) => { event1 (flg_id, flg) [10] arena (flg_id, flg) [2] iidx_exam (flg) - */ - /* [get] + [get] category_id - up to 12 badge_flg_id - This can be up to 23 @@ -429,42 +453,45 @@ export const pcget: EPR = async (info, data, send) => { - category_id: 9 -> 9 - category_id: 7, 10 -> 2 badge_flg - */ - for (let a = 0; a < 13; a++) { - if (a == 0 || a == 1) { - for (let b = 0; b < 24; b++) { - bArray.push({ - id: a, - flg_id: b, - flg: -1, - }); - } - continue; - } else if (a == 9) { - for (let b = 0; b < 10; b++) { - bArray.push({ - id: a, - flg_id: b, - flg: -1, - }); - } - continue; - } else if (a == 7 || a == 10) { - for (let b = 0; b < 2; b++) { - bArray.push({ - id: a, - flg_id: b, - flg: -1, - }); - } - continue; - } + ***/ - bArray.push({ - id: a, - flg_id: 0, - flg: -1, - }); + if (version >= 30) { + for (let a = 0; a < 13; a++) { + if (a == 0 || a == 1) { + for (let b = 0; b < 24; b++) { + bArray.push({ + id: a, + flg_id: b, + flg: -1, + }); + } + continue; + } else if (a == 9) { + for (let b = 0; b < 10; b++) { + bArray.push({ + id: a, + flg_id: b, + flg: -1, + }); + } + continue; + } else if (a == 7 || a == 10) { + for (let b = 0; b < 2; b++) { + bArray.push({ + id: a, + flg_id: b, + flg: -1, + }); + } + continue; + } + + bArray.push({ + id: a, + flg_id: 0, + flg: -1, + }); + } } return send.pugFile(`pug/LDJ/${version}pcget.pug`, { @@ -480,12 +507,15 @@ export const pcget: EPR = async (info, data, send) => { rArray, evtArray, evtArray2, + boss1, + link5, + tricolettepark, wArray, bArray, }); - } else { - return send.deny(); } + + return send.deny(); }; // TODO:: migration (oldget/getname/takeover) // @@ -533,6 +563,9 @@ export const pctakeover: EPR = async (info, data, send) => { case 20: pcdata = LDJ_pcdata; break; + case 21: + pcdata = IIDX21_pcdata; + break; case 27: pcdata = IIDX27_pcdata; lightning_playdata = lm_playdata; @@ -674,7 +707,8 @@ export const pcsave: EPR = async (info, data, send) => { if (cltype == 0) { pcdata.sach = parseInt($(data).attr().achi); pcdata.sp_opt = parseInt($(data).attr().opt); - } else { + } + else { pcdata.dach = parseInt($(data).attr().achi); pcdata.dp_opt = parseInt($(data).attr().opt); pcdata.dp_opt2 = parseInt($(data).attr().opt2); @@ -723,7 +757,8 @@ export const pcsave: EPR = async (info, data, send) => { if (cltype == 0) { pcdata.sach = parseInt($(data).attr().achi); pcdata.sp_opt = parseInt($(data).attr().opt); - } else { + } + else { pcdata.dach = parseInt($(data).attr().achi); pcdata.dp_opt = parseInt($(data).attr().opt); pcdata.dp_opt2 = parseInt($(data).attr().opt2); @@ -799,7 +834,8 @@ export const pcsave: EPR = async (info, data, send) => { if (cltype == 0) { pcdata.sach = parseInt($(data).attr().achi); pcdata.sp_opt = parseInt($(data).attr().opt); - } else { + } + else { pcdata.dach = parseInt($(data).attr().achi); pcdata.dp_opt = parseInt($(data).attr().opt); pcdata.dp_opt2 = parseInt($(data).attr().opt2); @@ -1054,9 +1090,265 @@ export const pcsave: EPR = async (info, data, send) => { ); } } + else if (version == 21) { + pcdata.rtype = parseInt($(data).attr().rtype); + pcdata.sach = parseInt($(data).attr().s_achi); + pcdata.dach = parseInt($(data).attr().d_achi); + pcdata.sp_opt = parseInt($(data).attr().sp_opt); + pcdata.dp_opt = parseInt($(data).attr().dp_opt); + pcdata.dp_opt2 = parseInt($(data).attr().dp_opt2); + pcdata.gpos = parseInt($(data).attr().gpos); + pcdata.s_sorttype = parseInt($(data).attr().s_sorttype); + pcdata.d_sorttype = parseInt($(data).attr().d_sorttype); + pcdata.s_disp_judge = parseInt($(data).attr().s_disp_judge); + pcdata.d_disp_judge = parseInt($(data).attr().d_disp_judge); + pcdata.s_pace = parseInt($(data).attr().s_pace); + pcdata.d_pace = parseInt($(data).attr().d_pace); + pcdata.s_gno = parseInt($(data).attr().s_gno); + pcdata.d_gno = parseInt($(data).attr().d_gno); + pcdata.s_gtype = parseInt($(data).attr().s_gtype); + pcdata.d_gtype = parseInt($(data).attr().d_gtype); + pcdata.s_sdlen = parseInt($(data).attr().s_sdlen); + pcdata.d_sdlen = parseInt($(data).attr().d_sdlen); + pcdata.s_sdtype = parseInt($(data).attr().s_sdtype); + pcdata.d_sdtype = parseInt($(data).attr().d_sdtype); + pcdata.s_notes = parseFloat($(data).attr().s_notes); + pcdata.d_notes = parseFloat($(data).attr().d_notes); + pcdata.s_judge = parseInt($(data).attr().s_judge); + pcdata.d_judge = parseInt($(data).attr().d_judge); + pcdata.s_judgeAdj = parseInt($(data).attr().s_judgeAdj); + pcdata.d_judgeAdj = parseInt($(data).attr().d_judgeAdj); + pcdata.s_hispeed = parseFloat($(data).attr().s_hispeed); + pcdata.d_hispeed = parseFloat($(data).attr().d_hispeed); + pcdata.s_opstyle = parseInt($(data).attr().s_opstyle); + pcdata.d_opstyle = parseInt($(data).attr().d_opstyle); + + if (!_.isNil($(data).element("secret"))) { + pcdata.secret_flg1 = $(data).element("secret").bigints("flg1").map(String); + pcdata.secret_flg2 = $(data).element("secret").bigints("flg2").map(String); + pcdata.secret_flg3 = $(data).element("secret").bigints("flg3").map(String); + } + + if (!_.isNil($(data).element("favorite"))) { + pcdata.sp_mlist = $(data).element("favorite").buffer("sp_mlist").toString("base64"); + pcdata.sp_clist = $(data).element("favorite").buffer("sp_clist").toString("base64"); + pcdata.dp_mlist = $(data).element("favorite").buffer("dp_mlist").toString("base64"); + pcdata.dp_clist = $(data).element("favorite").buffer("dp_clist").toString("base64"); + } + + if (!_.isNil($(data).element("qpro_secret"))) { + custom.qpro_secret_head = $(data).element("qpro_secret").bigints("head").map(String); + custom.qpro_secret_hair = $(data).element("qpro_secret").bigints("hair").map(String); + custom.qpro_secret_face = $(data).element("qpro_secret").bigints("face").map(String); + custom.qpro_secret_body = $(data).element("qpro_secret").bigints("body").map(String); + custom.qpro_secret_hand = $(data).element("qpro_secret").bigints("hand").map(String); + } + + if (!_.isNil($(data).element("achievements"))) { + // TODO:: achi_packflg, achi_packid, achi_playpack // + pcdata.achi_lastweekly = parseInt($(data).attr("achievements").last_weekly); + pcdata.achi_packcomp = parseInt($(data).attr("achievements").pack_comp); + pcdata.achi_visitflg = parseInt($(data).attr("achievements").visit_flg); + pcdata.achi_weeklynum = parseInt($(data).attr("achievements").weekly_num); + pcdata.achi_trophy = $(data).element("achievements").bigints("trophy").map(String); + } + + if (hasStepUpData) { + pcdata.st_damage = parseInt($(data).attr("step").damage); + pcdata.st_defeat = parseInt($(data).attr("step").defeat); + pcdata.st_progress = parseInt($(data).attr("step").progress); + pcdata.st_round = parseInt($(data).attr("step").round); + pcdata.st_sp_mission = parseInt($(data).attr("step").sp_mission); + pcdata.st_dp_mission = parseInt($(data).attr("step").dp_mission); + pcdata.st_sp_level = parseInt($(data).attr("step").sp_level); + pcdata.st_dp_level = parseInt($(data).attr("step").dp_level); + pcdata.st_sp_mplay = parseInt($(data).attr("step").sp_mplay); + pcdata.st_dp_mplay = parseInt($(data).attr("step").dp_mplay); + pcdata.st_last_select = parseInt($(data).attr("step").last_select); + pcdata.st_album = $(data).buffer("step").toString("base64"); // TODO:: verify // + } + + if (!_.isNil($(data).element("deller"))) pcdata.deller += parseInt($(data).attr("deller").deller); + if (!_.isNil($(data).element("orb_data"))) pcdata.orb += parseInt($(data).attr("orb_data").add_orb); + + // TODO:: fix event saving, these event savings are broken. // + if (!_.isNil($(data).element("boss1"))) { + let event_data = { + stamina: parseInt($(data).attr("boss1").stamina), + attack: parseInt($(data).attr("boss1").attack), + item_flg: parseInt($(data).attr("boss1").item_flg), + item_flg2: parseInt($(data).attr("boss1").item_flg2), + pick: parseInt($(data).attr("boss1").pick), + row0: parseInt($(data).attr("boss1").row0), + row1: parseInt($(data).attr("boss1").row1), + row2: parseInt($(data).attr("boss1").row2), + row3: parseInt($(data).attr("boss1").row3), + column0: parseInt($(data).attr("boss1").column0), + column1: parseInt($(data).attr("boss1").column1), + column2: parseInt($(data).attr("boss1").column2), + column3: parseInt($(data).attr("boss1").column3), + map: parseInt($(data).attr("boss1").map), + job: parseInt($(data).attr("boss1").job), + general: parseInt($(data).attr("boss1").general), + battle: parseInt($(data).attr("boss1").battle), + boss0_n: parseInt($(data).attr("boss1").boss0_n), + boss0_h: parseInt($(data).attr("boss1").boss0_h), + boss0_a: parseInt($(data).attr("boss1").boss0_a), + boss1_n: parseInt($(data).attr("boss1").boss1_n), + boss1_h: parseInt($(data).attr("boss1").boss1_h), + boss1_a: parseInt($(data).attr("boss1").boss1_a), + boss2_n: parseInt($(data).attr("boss1").boss2_n), + boss2_h: parseInt($(data).attr("boss1").boss2_h), + boss2_a: parseInt($(data).attr("boss1").boss2_a), + boss_scene: parseInt($(data).attr("boss1").boss_scene), + boss0_damage: parseInt($(data).attr("boss1").boss0_damage), + boss1_damage: parseInt($(data).attr("boss1").boss1_damage), + boss2_damage: parseInt($(data).attr("boss1").boss2_damage), + boss3_damage: parseInt($(data).attr("boss1").boss3_damage), + boss4_damage: parseInt($(data).attr("boss1").boss4_damage), + boss5_damage: parseInt($(data).attr("boss1").boss5_damage), + boss6_damage: parseInt($(data).attr("boss1").boss6_damage), + level: $(data).element("boss1").numbers("level"), + durability: $(data).element("boss1").buffer("durability").toString("base64"), + }; + + await DB.Upsert(refid, + { + collection: "event_1", + version: version, + event_name: "boss1", + }, + { + $set: event_data, + } + ); + } + + if (!_.isNil($(data).element("link5"))) { + let link5 = await DB.FindOne(refid, { collection: "event_1", version: 20, event_name: "link5" }); + let event_data; + + if (_.isNil(link5)) { + event_data = { + qpro: parseInt($(data).attr("link5").qpro), // add + glass: parseInt($(data).attr("link5").glass), // add + beautiful: parseInt($(data).attr("link5").beautiful), + quaver: parseInt($(data).attr("link5").quaver), + castle: parseInt($(data).attr("link5").castle), + flip: parseInt($(data).attr("link5").flip), + titans: parseInt($(data).attr("link5").titans), + exusia: parseInt($(data).attr("link5").exusia), + waxing: parseInt($(data).attr("link5").waxing), + sampling: parseInt($(data).attr("link5").sampling), + beachside: parseInt($(data).attr("link5").beachside), + cuvelia: parseInt($(data).attr("link5").cuvelia), + reunion: parseInt($(data).attr("link5").reunion), + bad: parseInt($(data).attr("link5").bad), + turii: parseInt($(data).attr("link5").turii), + anisakis: parseInt($(data).attr("link5").anisakis), + second: parseInt($(data).attr("link5").second), + whydidyou: parseInt($(data).attr("link5").whydidyou), + china: parseInt($(data).attr("link5").china), + fallen: parseInt($(data).attr("link5").fallen), + broken: parseInt($(data).attr("link5").broken), + summer: parseInt($(data).attr("link5").summer), + sakura: parseInt($(data).attr("link5").sakura), + wuv: parseInt($(data).attr("link5").wuv), + survival: parseInt($(data).attr("link5").survival), + thunder: parseInt($(data).attr("link5").thunder), + } + } + else { + event_data = link5; + + event_data.qpro += parseInt($(data).attr("link5").qpro); + event_data.glass += parseInt($(data).attr("link5").glass); + event_data.beautiful = parseInt($(data).attr("link5").beautiful); + event_data.quaver = parseInt($(data).attr("link5").quaver); + event_data.castle = parseInt($(data).attr("link5").castle); + event_data.flip = parseInt($(data).attr("link5").flip); + event_data.titans = parseInt($(data).attr("link5").titans); + event_data.exusia = parseInt($(data).attr("link5").exusia); + event_data.waxing = parseInt($(data).attr("link5").waxing); + event_data.sampling = parseInt($(data).attr("link5").sampling); + event_data.beachside = parseInt($(data).attr("link5").beachside); + event_data.cuvelia = parseInt($(data).attr("link5").cuvelia); + event_data.reunion = parseInt($(data).attr("link5").reunion); + event_data.bad = parseInt($(data).attr("link5").bad); + event_data.turii = parseInt($(data).attr("link5").turii); + event_data.anisakis = parseInt($(data).attr("link5").anisakis); + event_data.second = parseInt($(data).attr("link5").second); + event_data.whydidyou = parseInt($(data).attr("link5").whydidyou); + event_data.china = parseInt($(data).attr("link5").china); + event_data.fallen = parseInt($(data).attr("link5").fallen); + event_data.broken = parseInt($(data).attr("link5").broken); + event_data.summer = parseInt($(data).attr("link5").summer); + event_data.sakura = parseInt($(data).attr("link5").sakura); + event_data.wuv = parseInt($(data).attr("link5").wuv); + event_data.survival = parseInt($(data).attr("link5").survival); + event_data.thunder = parseInt($(data).attr("link5").thunder); + } + + await DB.Upsert(refid, + { + collection: "event_1", + version: 20, + event_name: "link5", + }, + { + $set: event_data, + } + ); + } + + if (!_.isNil($(data).element("tricolettepark"))) { + let tricolettepark = await DB.FindOne(refid, { collection: "event_1", version: 20, event_name: "tricolettepark" }); + let event_data; + + if (_.isNil(tricolettepark)) { + event_data = { + open_music: parseInt($(data).attr("tricolettepark").open_music), + boss0_damage: parseInt($(data).attr("tricolettepark").boss0_damage), // add + boss1_damage: parseInt($(data).attr("tricolettepark").boss1_damage), + boss2_damage: parseInt($(data).attr("tricolettepark").boss2_damage), + boss3_damage: parseInt($(data).attr("tricolettepark").boss3_damage), + boss0_stun: parseInt($(data).attr("tricolettepark").boss0_stun), + boss1_stun: parseInt($(data).attr("tricolettepark").boss1_stun), + boss2_stun: parseInt($(data).attr("tricolettepark").boss2_stun), + boss3_stun: parseInt($(data).attr("tricolettepark").boss3_stun), + union_magic_used: parseInt($(data).attr("tricolettepark").union_magic_used), + } + } + else { + event_data = tricolettepark; + + event_data.open_music = parseInt($(data).attr("tricolettepark").open_music), + event_data.boss0_damage += parseInt($(data).attr("tricolettepark").boss0_damage); + event_data.boss1_damage += parseInt($(data).attr("tricolettepark").boss1_damage); + event_data.boss2_damage += parseInt($(data).attr("tricolettepark").boss2_damage); + event_data.boss3_damage += parseInt($(data).attr("tricolettepark").boss3_damage); + event_data.boss0_stun = parseInt($(data).attr("tricolettepark").boss0_stun); + event_data.boss1_stun = parseInt($(data).attr("tricolettepark").boss1_stun); + event_data.boss2_stun = parseInt($(data).attr("tricolettepark").boss2_stun); + event_data.boss3_stun = parseInt($(data).attr("tricolettepark").boss3_stun); + event_data.union_magic_used = parseInt($(data).attr("tricolettepark").union_magic_used); + } + + await DB.Upsert(refid, + { + collection: "event_1", + version: 20, + event_name: "tricolettepark", + }, + { + $set: event_data, + } + ); + } + } else if (version >= 27) { // lid bookkeep cid ctype ccode - pcdata.rtype = parseInt($(data).attr().d_sdtype); + pcdata.rtype = parseInt($(data).attr().rtype); pcdata.sach = parseInt($(data).attr().s_achi); pcdata.dach = parseInt($(data).attr().d_achi); pcdata.sp_opt = parseInt($(data).attr().sp_opt); diff --git a/iidx@asphyxia/index.ts b/iidx@asphyxia/index.ts index 8d9ef4e..046f36f 100644 --- a/iidx@asphyxia/index.ts +++ b/iidx@asphyxia/index.ts @@ -34,6 +34,7 @@ export function register() { const MultiRoute = (method: string, handler: EPR | boolean) => { R.Route(`${method}`, handler); + R.Route(`IIDX21${method}`, handler); R.Route(`IIDX27${method}`, handler); R.Route(`IIDX28${method}`, handler); R.Route(`IIDX29${method}`, handler); @@ -67,7 +68,7 @@ export function register() { MultiRoute("gameSystem.systemInfo", gssysteminfo); R.Unhandled((req: EamuseInfo, data: any, send: EamuseSend) => { - console.warn(`Unhandled Request : ${req.module}.${req.method} , [${GetVersion(req)}]`); + console.warn(`Unhandled Request : [${GetVersion(req)}], ${req.module}.${req.method}, ${JSON.stringify(data)}`); return send.success(); }); } diff --git a/iidx@asphyxia/models/pcdata.ts b/iidx@asphyxia/models/pcdata.ts index 3ed1ce5..dac1271 100644 --- a/iidx@asphyxia/models/pcdata.ts +++ b/iidx@asphyxia/models/pcdata.ts @@ -129,11 +129,21 @@ export interface pcdata { st_review: number; st_help: any; // save as base64 string, sent as buffer // + st_damage: number; // step (spada) // + st_defeat: number; + st_round: number; + st_sp_mission: number; + st_dp_mission: number; + st_sp_level: number; + st_dp_level: number; + st_sp_mplay: number; + st_dp_mplay: number; + st_last_select: number; + st_album: any; + st_enemy_damage: number; // step (Heroic Verse) // st_progress: number; st_is_track_ticket: boolean; - st_sp_level: number; - st_dp_level: number; st_sp_mission_point: number; st_dp_mission_point: number; st_sp_dj_mission_level: number; @@ -144,8 +154,6 @@ export interface pcdata { st_dp_dj_mission_clear: number; st_sp_clear_mission_clear: number; st_dp_clear_mission_clear: number; - st_sp_mplay: number; - st_dp_mplay: number; st_tips_read_list: number; st_total_point: number; // CastHour // st_enemy_defeat_flg: number; @@ -167,6 +175,11 @@ export interface pcdata { p3: number[]; p4: number[]; + sp_mlist: any; // favorite (SPADA), save as base64 string, sent as buffer // + sp_clist: any; + dp_mlist: any; + dp_clist: any; + eb_keyorb: number; // extra boss (Heroic Verse) // eb_bossorb0: number; eb_bossorb1: number; @@ -304,6 +317,83 @@ export const LDJ_pcdata = { orb: 0, } +export const IIDX21_pcdata = { + version: 21, + + spnum: 0, + dpnum: 0, + sach: 0, + dach: 0, + mode: 0, + pmode: 0, + rtype: 0, + sp_opt: 0, + dp_opt: 0, + dp_opt2: 0, + gpos: 0, + s_sorttype: 0, + d_sorttype: 0, + s_pace: 0, + d_pace: 0, + s_gno: 0, + d_gno: 0, + s_sub_gno: 0, + d_sub_gno: 0, + s_gtype: 0, + d_gtype: 0, + s_sdlen: 0, + d_sdlen: 0, + s_sdtype: 0, + d_sdtype: 0, + s_timing: 0, + d_timing: 0, + s_notes: 0, + d_notes: 0, + s_judge: 0, + d_judge: 0, + s_judgeAdj: 0, + d_judgeAdj: 0, + s_hispeed: 0, + d_hispeed: 0, + s_liflen: 0, + d_liflen: 0, + s_disp_judge: 0, + d_disp_judge: 0, + s_opstyle: 0, + d_opstyle: 0, + + secret_flg1: Array(3).fill("-1"), + secret_flg2: Array(3).fill("-1"), + secret_flg3: Array(3).fill("-1"), + + sgid: -1, + dgid: -1, + + st_damage: 0, + st_defeat: 0, + st_progress: 0, + st_round: 0, + st_sp_mission: 0, + st_dp_mission: 0, + st_sp_level: 0, + st_dp_level: 0, + st_sp_mplay: 0, + st_dp_mplay: 0, + st_last_select: 0, + st_album: "", + + achi_pack: 0, + achi_packcomp: 0, + achi_lastweekly: 0, + achi_weeklynum: 0, + achi_visitflg: 0, + achi_rivalcrush: 0, + achi_trophy: Array(20).fill("0"), + + deller: 0, + orb: 0, +} + export const IIDX27_pcdata = { version: 27, diff --git a/iidx@asphyxia/pug/LDJ/21pccommon.pug b/iidx@asphyxia/pug/LDJ/21pccommon.pug new file mode 100644 index 0000000..e3545f1 --- /dev/null +++ b/iidx@asphyxia/pug/LDJ/21pccommon.pug @@ -0,0 +1,14 @@ +IIDX21pc(status="0" expire="600") + ir(beat=beat) + limit(phase="1") + boss(phase="1") + boss1(phase="1") + medal(phase="1") + vip_pass_black + cafe(open="1") + tricolettepark(open="1") + tricolettepark_skip(phase="1") + deller_bonus(open="1") + gumi_event + newsong_another(open="1") + superstar(phase="1") diff --git a/iidx@asphyxia/pug/LDJ/21pcget.pug b/iidx@asphyxia/pug/LDJ/21pcget.pug new file mode 100644 index 0000000..b542189 --- /dev/null +++ b/iidx@asphyxia/pug/LDJ/21pcget.pug @@ -0,0 +1,55 @@ +IIDX21pc(status="0") + pcdata(id=profile.id idstr=profile.idstr name=profile.name pid=profile.pid spnum=pcdata.spnum dpnum=pcdata.dpnum sach=pcdata.sach dach=pcdata.dach mode=pcdata.mode pmode=pcdata.pmode rtype=pcdata.rtype sp_opt=pcdata.sp_opt dp_opt=pcdata.dp_opt dp_opt2=pcdata.dp_opt2 gpos=pcdata.gpos s_sorttype=pcdata.s_sorttype d_sorttype=pcdata.d_sorttype s_pace=pcdata.s_pace d_pace=pcdata.d_pace s_gno=pcdata.s_gno d_gno=pcdata.d_gno s_gtype=pcdata.s_gtype d_gtype=pcdata.d_gtype s_sdlen=pcdata.s_sdlen d_sdlen=pcdata.d_sdlen s_sdtype=pcdata.s_sdtype d_sdtype=pcdata.d_sdtype s_timing=pcdata.s_timing d_timing=pcdata.d_timing s_notes=pcdata.s_notes d_notes=pcdata.d_notes s_judge=pcdata.s_judge d_judge=pcdata.d_judge s_judgeAdj=pcdata.s_judgeAdj d_judgeAdj=pcdata.d_judgeAdj s_hispeed=pcdata.s_hispeed d_hispeed=pcdata.d_hispeed s_liflen=pcdata.s_liflen d_liflen=pcdata.d_liflen s_disp_judge=pcdata.s_disp_judge d_disp_judge=pcdata.d_disp_judge s_opstyle=pcdata.s_opstyle d_opstyle=pcdata.d_opstyle) + spdp_rival(flg="-1") + bind_eaappli + secret + flg1(__type="s64" __count="2") -1 -1 + flg2(__type="s64" __count="2") -1 -1 + flg3(__type="s64" __count="2") -1 -1 + if pcdata.sp_mlist != null + favorite + sp_mlist(__type="bin") #{pcdata.sp_mlist} + sp_clist(__type="bin") #{pcdata.sp_clist} + dp_mlist(__type="bin") #{pcdata.dp_mlist} + dp_clist(__type="bin") #{pcdata.dp_clist} + qpro_secret + head(__type="s64" __count="3") -1 -1 -1 + hair(__type="s64" __count="3") -1 -1 -1 + face(__type="s64" __count="3") -1 -1 -1 + body(__type="s64" __count="3") -1 -1 -1 + hand(__type="s64" __count="3") -1 -1 -1 + grade(sgid=pcdata.sgid dgid=pcdata.dgid) + - for (let d of dArray) + g(__type="u8" __count="4") #{d[0]} #{d[1]} #{d[2]} #{d[3]} + skin(__type="s16" __count="14") #{custom.frame} #{custom.turntable} #{custom.note_burst} #{custom.menu_music} #{appendsettings} #{custom.lane_cover} 0 #{custom.category_vox} #{custom.note_skin} #{custom.full_combo_splash} 0 #{custom.disable_musicpreview} 0 0 + qprodata(__type="u32" __count="5") #{custom.qpro_head} #{custom.qpro_hair} #{custom.qpro_face} #{custom.qpro_hand} #{custom.qpro_body} + rlist + - for (let rd of rArray) + rival(spdp=rd.play_style id=rd.profile[2] id_str=rd.profile[3] djname=rd.profile[0] pid=rd.profile[1] sg=rd.pcdata[0] dg=rd.pcdata[1] sa=rd.pcdata[2] da=rd.pcdata[3]) + stepdata(step_sach="-1" step_dach="-1") + qprodata(body=rd.qprodata[3] face=rd.qprodata[2] hair=rd.qprodata[0] hand=rd.qprodata[4] head=rd.qprodata[1]) + shop(name="CORE") + join_shop(joinflg="1" join_cflg="1" join_id="0" join_name="CORE") + if pcdata.st_album != null + step(damage=pcdata.st_damage defeat=pcdata.st_defeat progress=pcdata.st_progress round=pcdata.st_round sp_mission=pcdata.st_sp_mission dp_mission=pcdata.st_dp_mission sp_level=pcdata.st_sp_level dp_level=pcdata.st_dp_level sp_mplay=pcdata.st_sp_mplay dp_mplay=pcdata.st_dp_mplay last_select=pcdata.st_last_select) + album(__type="bin") #{pcdata.st_album} + //-step_assist(iidx_id iidx_id_str name hair head face body hand) + achievements(pack=pcdata.achi_pack pack_comp=pcdata.achi_packcomp last_weekly=pcdata.achi_lastweekly weekly_num=pcdata.achi_weeklynum visit_flg=pcdata.achi_visitflg rival_crush=pcdata.achi_rivalcrush) + trophy(__type="s64" __count="10") #{pcdata.achi_trophy[0]} #{pcdata.achi_trophy[1]} #{pcdata.achi_trophy[2]} #{pcdata.achi_trophy[3]} #{pcdata.achi_trophy[4]} #{pcdata.achi_trophy[5]} #{pcdata.achi_trophy[6]} #{pcdata.achi_trophy[7]} #{pcdata.achi_trophy[8]} #{pcdata.achi_trophy[9]} + if link5 != null + link5(qpro=link5.qpro glass=link5.glass treasure="0" beautiful=link5.beautiful quaver=link5.quaver castle=link5.castle flip=link5.flip titans=link5.titans exusia=link5.exusia waxing=link5.waxing sampling=link5.sampling beachside=link5.beachside cuvelia=link5.cuvelia reunion=link5.reunion bad=link5.bad turii=link5.turii anisakis=link5.anisakis second=link5.second whydidyou=link5.whydidyou china=link5.china fallen=link5.fallen broken=link5.broken summer=link5.summer sakura=link5.sakura wuv=link5.wuv survival=link5.survival thunder=link5.thunder qproflg="0" glassflg="0" reflec_data="0") + //-cafe(food pastry rainbow beastie astraia beachimp holysnow trueblue ledvsscu service is_first) + gakuen(music_list="-1") + baseball(music_list="-1") + if tricolettepark != null + tricolettepark(open_music=tricolettepark.open_music boss0_damage=tricolettepark.boss0_damage boss1_damage=tricolettepark.boss1_damage boss2_damage=tricolettepark.boss2_damage boss3_damage=tricolettepark.boss3_damage boss0_stun=tricolettepark.boss0_stun boss1_stun=tricolettepark.boss1_stun boss2_stun=tricolettepark.boss2_stun boss3_stun=tricolettepark.boss3_stun magic_gauge="0" party="0" is_union="0" attack_rate="1") + pyramid(music_list="-1" item_list="-1" statue_0="0" statue_1="0" statue_2="0") + deller(deller=pcdata.deller rate="1") + orb_data(rest_orb=pcdata.orb) + if boss1 != null + boss1(stamina=boss1.stamina attack=boss1.attack item_flg=boss1.item_flg item_flg2=boss1.item_flg2 pick=boss1.pick row0=boss1.row0 row1=boss1.row1 row2=boss1.row2 row3=boss1.row3 column0=boss1.column0 column1=boss1.column1 column2=boss1.column2 column3=boss1.column3 map=boss1.map job=boss1.job general=boss1.general battle=boss1.battle boss0_n=boss1.boss0_n boss0_h=boss1.boss0_h boss0_a=boss1.boss0_a boss1_n=boss1.boss1_n boss1_h=boss1.boss1_h boss1_a=boss1.boss1_a boss2_n=boss1.boss2_n boss2_h=boss1.boss2_h boss2_a=boss1.boss2_a item1="0" item2="0" item3="0" boss_scene=boss1.boss_scene boss0_damage=boss1.boss0_damage boss1_damage=boss1.boss1_damage boss2_damage=boss1.boss2_damage boss3_damage=boss1.boss3_damage boss4_damage=boss1.boss4_damage boss5_damage=boss1.boss5_damage boss6_damage=boss1.boss6_damage) + durability(__type="bin") #{boss1.durability} + level(__type="s32" __count="28") #{boss1.level[0]} #{boss1.level[1]} #{boss1.level[2]} #{boss1.level[3]} #{boss1.level[4]} #{boss1.level[5]} #{boss1.level[6]} + //-boss1_phase4(map_clear_flg) + new_durability + //-superstar(achieve_flg)