IIDX: Initial support added for copula

This commit is contained in:
duel0213 2024-02-14 08:37:31 +09:00
parent 1f4f881545
commit 6e8c8017e5
10 changed files with 427 additions and 61 deletions

View File

@ -1,6 +1,6 @@
# beatmaniaIIDX
Plugin Version: **v0.1.8**
Plugin Version: **v0.1.9**
---
@ -11,6 +11,7 @@ Supported Versions
- beatmaniaIIDX 20 tricoro
- beatmaniaIIDX 21 SPADA
- beatmaniaIIDX 22 PENDUAL
- beatmaniaIIDX 23 copula
- beatmaniaIIDX 27 HEROIC VERSE
- beatmaniaIIDX 28 BISTROVER
- beatmaniaIIDX 29 CastHour
@ -75,3 +76,8 @@ Changelogs
- Fixed where old_linkage_secret_flg is missing on pc.get response (RESIDENT)
- Fixed where game could crash due to invalid rival qprodata
- Fixed where lift isn't saving (SPADA)
**v0.1.9**
- Added Initial support for copula
- Event savings are broken
- Added shop.getconvention/shop.setconvention/shop.getname/shop.savename response

View File

@ -21,7 +21,7 @@ export const graderaised: EPR = async (info, data, send) => {
gradeId: gid,
});
if (version >= 27) cflg = parseInt($(data).attr().cstage);
if (version >= 23) cflg = parseInt($(data).attr().cstage);
const isTDJ = !(_.isNil($(data).element("lightning_play_data"))); // lightning model //
const hasEiseiData = (!(_.isNil($(data).element("eisei_data"))) || !(_.isNil($(data).element("eisei_grade_data"))));;

View File

@ -228,10 +228,10 @@ export const musicappoint: EPR = async (info, data, send) => {
if (_.isNaN(other_pcdata) || _.isNil(other_musicdata)) break;
sdata = K.ITEM("bin", Base64toBuffer(other_musicdata[clid]), {
score: other_musicdata.esArray[clid].toString(),
pid: other_profile[1].toString(),
name: other_profile[0].toString(),
riidxid: other_profile[2].toString()
score: String(other_musicdata.esArray[clid]),
pid: String(other_profile[1]),
name: String(other_profile[0]),
riidxid: String(other_profile[2])
});
break;
@ -249,13 +249,13 @@ export const musicappoint: EPR = async (info, data, send) => {
}
let other_data = K.ITEM("bin", Base64toBuffer(other_musicdata[clid]), {
score: other_musicdata.esArray[clid].toString(),
achieve: other_pcdata[ClidToPlaySide(clid) + 2].toString(),
pid: other_profile[1].toString(),
name: other_profile[0].toString(),
riidxid: other_profile[2].toString(),
option: other_musicdata.optArray[clid].toString(), // CastHour //
option2: other_musicdata.opt2Array[clid].toString(),
score: String(other_musicdata.esArray[clid]),
achieve: String(other_pcdata[ClidToPlaySide(clid) + 2]),
pid: String(other_profile[1]),
name: String(other_profile[0]),
riidxid: String(other_profile[2]),
option: String(other_musicdata.optArray[clid]), // CastHour //
option2: String(other_musicdata.opt2Array[clid]),
});
sdata = {

View File

@ -1,4 +1,4 @@
import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata, IIDX21_pcdata, IIDX22_pcdata } from "../models/pcdata";
import { pcdata, KDZ_pcdata, IIDX27_pcdata, IIDX28_pcdata, IIDX29_pcdata, IIDX30_pcdata, JDZ_pcdata, LDJ_pcdata, IIDX21_pcdata, IIDX22_pcdata, IIDX23_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";
@ -99,9 +99,8 @@ export const pccommon: EPR = async (info, data, send) => {
movie_upload: U.GetConfig("MovieUpload"),
});
}
else {
return send.deny();
}
return send.deny();
};
export const pcreg: EPR = async (info, data, send) => {
@ -129,6 +128,9 @@ export const pcreg: EPR = async (info, data, send) => {
case 22:
pcdata = IIDX22_pcdata;
break;
case 23:
pcdata = IIDX23_pcdata;
break;
case 27:
pcdata = IIDX27_pcdata;
lightning_playdata = lm_playdata;
@ -378,41 +380,48 @@ export const pcget: EPR = async (info, data, send) => {
boss1 = null,
chrono_diver = null,
evtArray = [], evtArray2 = [];
if (version == 21 || version == 22) {
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");
if (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" });
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 if (version == 22) {
chrono_diver = await DB.FindOne(refid, { collection: "event_1", version: version, event_name: "chrono_diver" });
}
}
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);
switch (version) {
case 21:
case 22:
case 23:
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 (event_1s.length > 0) {
for (let evt of event_1s) {
evtArray2.push(evt);
if (!_.isNil(pcdata.st_album)) pcdata.st_album = Base64toBuffer(pcdata.st_album).toString("hex");
else if (!_.isNil(pcdata.st_tokimeki)) pcdata.st_tokimeki = Base64toBuffer(pcdata.st_tokimeki).toString("hex");
if (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" });
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 if (version == 22) {
chrono_diver = await DB.FindOne(refid, { collection: "event_1", version: version, event_name: "chrono_diver" });
}
}
break;
default:
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);
}
}
break;
}
if (version >= 30 && lm_music_memo_new.length > 0) {
@ -579,6 +588,9 @@ export const pctakeover: EPR = async (info, data, send) => {
case 22:
pcdata = IIDX22_pcdata;
break;
case 23:
pcdata = IIDX23_pcdata;
break;
case 27:
pcdata = IIDX27_pcdata;
lightning_playdata = lm_playdata;
@ -1518,6 +1530,104 @@ export const pcsave: EPR = async (info, data, send) => {
);
}
}
else if (version == 23) {
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);
pcdata.s_exscore = parseInt($(data).attr().s_exscore);
pcdata.d_exscore = parseInt($(data).attr().d_exscore);
pcdata.s_largejudge = parseInt($(data).attr().s_largejudge);
pcdata.d_largejudge = parseInt($(data).attr().d_largejudge);
if (!_.isNil($(data).attr().s_lift)) pcdata.s_liflen = parseInt($(data).attr().s_lift);
if (!_.isNil($(data).attr().d_lift)) pcdata.s_liflen = parseInt($(data).attr().d_lift);
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("qpro_equip"))) {
custom.qpro_head = parseInt($(data).attr("qpro_equip").head);
custom.qpro_hair = parseInt($(data).attr("qpro_equip").hair);
custom.qpro_face = parseInt($(data).attr("qpro_equip").face);
custom.qpro_body = parseInt($(data).attr("qpro_equip").body);
custom.qpro_hand = parseInt($(data).attr("qpro_equip").head);
}
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_friendship = parseInt($(data).attr("step").friendship);
pcdata.st_progress = parseInt($(data).attr("step").progress);
pcdata.st_station_clear = parseInt($(data).attr("step").station_clear);
pcdata.st_station_play = parseInt($(data).attr("step").station_play);
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_mission_gauge = parseInt($(data).attr("step").mission_gauge);
pcdata.st_tokimeki = $(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. //
}
else if (version >= 27) {
// lid bookkeep cid ctype ccode
pcdata.rtype = parseInt($(data).attr().rtype);
@ -2057,7 +2167,3 @@ export const pcdrawlanegacha: EPR = async (info, data, send) => {
}),
});
};
export const pcconsumelanegacha: EPR = async (info, data, send) => {
return send.success();
};

View File

@ -1,20 +1,93 @@
export const shopgetname: EPR = async (info, data, send) => {
import { convention_data, shop_data } from "../models/shop";
import { GetVersion } from "../util";
export const shopgetname: EPR = async (info, data, send) => {
const shop_data = await DB.FindOne<shop_data>({
collection: "shop_data",
});
if (_.isNil(shop_data)) {
return send.object(
K.ATTR({
status: "0",
opname: "CORE",
pid: "57",
cls_opt: "0",
hr: "0",
mi: "0",
})
);
}
return send.object(
K.ATTR({
status: "0",
opname: "CORE",
pid: "57",
cls_opt: "0",
opname: shop_data.opname,
pid: String(shop_data.pid),
cls_opt: String(shop_data.cls_opt),
hr: "0",
mi: "0",
})
);
};
export const shopsavename: EPR = async (info, data, send) => {
await DB.Upsert<shop_data>(
{
collection: "shop_data",
},
{
$set: {
opname: $(data).attr().opname,
pid: parseInt($(data).attr().pid),
cls_opt: parseInt($(data).attr().cls_opt),
},
}
);
return send.success();
};
export const shopgetconvention: EPR = async (info, data, send) => {
return send.deny();
const version = GetVersion(info);
const convention_data = await DB.FindOne<convention_data>({
collection: "shop_convention",
version: version,
});
if (_.isNil(convention_data)) return send.deny();
return send.object(
K.ATTR({
music_0: String(convention_data.music_0),
music_1: String(convention_data.music_1),
music_2: String(convention_data.music_2),
music_3: String(convention_data.music_3),
},
{
valid: K.ITEM("bool", convention_data.valid),
})
);
};
export const shopsetconvention: EPR = async (info, data, send) => {
return send.deny();
const version = GetVersion(info);
await DB.Upsert<convention_data>(
{
collection: "shop_convention",
version: version,
},
{
$set: {
music_0: $(data).number("music_0"),
music_1: $(data).number("music_1"),
music_2: $(data).number("music_2"),
music_3: $(data).number("music_3"),
valid: $(data).bool("valid"),
},
}
);
return send.success();
};

View File

@ -1,5 +1,5 @@
import { pccommon, pcreg, pcget, pcgetname, pctakeover, pcvisit, pcsave, pcoldget, pcgetlanegacha, pcconsumelanegacha, pcdrawlanegacha, pcshopregister } from "./handlers/pc";
import { shopgetname, shopgetconvention, shopsetconvention } from "./handlers/shop";
import { pccommon, pcreg, pcget, pcgetname, pctakeover, pcvisit, pcsave, pcoldget, pcgetlanegacha, pcdrawlanegacha, pcshopregister } from "./handlers/pc";
import { shopgetname, shopsavename, shopgetconvention, shopsetconvention } from "./handlers/shop";
import { musicreg, musicgetrank, musicappoint, musicarenacpu } from "./handlers/music";
import { graderaised } from "./handlers/grade";
import { gssysteminfo } from "./handlers/gamesystem";
@ -36,6 +36,7 @@ export function register() {
R.Route(`${method}`, handler);
R.Route(`IIDX21${method}`, handler);
R.Route(`IIDX22${method}`, handler);
R.Route(`IIDX23${method}`, handler);
R.Route(`IIDX27${method}`, handler);
R.Route(`IIDX28${method}`, handler);
R.Route(`IIDX29${method}`, handler);
@ -53,9 +54,10 @@ export function register() {
MultiRoute("pc.shopregister", pcshopregister);
MultiRoute("pc.getLaneGachaTicket", pcgetlanegacha);
MultiRoute("pc.drawLaneGacha", pcdrawlanegacha);
MultiRoute("pc.consumeLaneGachaTicket", pcconsumelanegacha);
MultiRoute("pc.consumeLaneGachaTicket", true);
MultiRoute("shop.getname", shopgetname);
MultiRoute("shop.savename", shopsavename);
MultiRoute("shop.getconvention", shopgetconvention);
MultiRoute("shop.setconvention", shopsetconvention);

View File

@ -148,6 +148,11 @@ export interface pcdata {
st_age_list: number;
st_is_present: number;
st_is_future: number;
st_friendship: number; // step (copula) //
st_station_clear: number;
st_station_play: number;
st_mission_gauge: number;
st_tokimeki: any;
st_enemy_damage: number; // step (Heroic Verse) //
st_progress: number;
@ -483,6 +488,85 @@ export const IIDX22_pcdata = {
orb: 0,
}
export const IIDX23_pcdata = {
version: 23,
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_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,
s_exscore: 0,
d_exscore: 0,
s_largejudge: 0,
d_largejudge: 0,
secret_flg1: Array<string>(3).fill("-1"),
secret_flg2: Array<string>(3).fill("-1"),
secret_flg3: Array<string>(3).fill("-1"),
sgid: -1,
dgid: -1,
st_friendship: 0,
st_progress: 0,
st_station_clear: 0,
st_station_play: 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_mission_gauge: 0,
st_tokimeki: null,
achi_pack: 0,
achi_packcomp: 0,
achi_lastweekly: 0,
achi_weeklynum: 0,
achi_visitflg: 0,
achi_rivalcrush: 0,
achi_trophy: Array<string>(20).fill("0"),
deller: 0,
orb: 0,
}
export const IIDX27_pcdata = {
version: 27,

View File

@ -0,0 +1,19 @@
export interface shop_data {
collection: "shop_data";
opname: string;
pid: number;
cls_opt: number;
}
export interface convention_data {
collection: "shop_convention";
version: number;
music_0: number;
music_1: number;
music_2: number;
music_3: number;
valid: boolean;
}

View File

@ -0,0 +1,21 @@
IIDX23pc(status="0" expire="600")
ir(beat=beat)
//-
cm(id="" folder="" compo="")
expert(phase="1")
expert_random_secret(phase="2")
boss(phase="3")
event1_phase(phase="1")
event2_phase(phase="2")
extra_boss_event(phase="30")
vip_pass_black
event1_rainbow_ticket
deller_bonus(open="1")
newsong_another(open="1")
expert_secret_full_open
remocon_collabo
ravemania_collabo
djlevel_result
virtual_coin(phase="1")
reflec_volzza_collabo
bemani_summer2016(phase="2")

View File

@ -0,0 +1,55 @@
IIDX23pc(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 s_exscore=pcdata.s_exscore d_exscore=pcdata.d_exscore s_largejudge=pcdata.s_largejudge d_largejudge=pcdata.d_largejudge)
spdp_rival(flg="-1")
bind_eaappli
ea_premium_course
secret
flg1(__type="s64" __count="3") -1 -1 -1
flg2(__type="s64" __count="3") -1 -1 -1
flg3(__type="s64" __count="3") -1 -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="4") -1 -1 -1 -1
hair(__type="s64" __count="4") -1 -1 -1 -1
face(__type="s64" __count="4") -1 -1 -1 -1
body(__type="s64" __count="4") -1 -1 -1 -1
hand(__type="s64" __count="4") -1 -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_tokimeki != null
step(friendship=pcdata.st_friendship progress=pcdata.st_progress station_clear=pcdata.st_station_clear station_play=pcdata.st_station_play 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 mission_gauge=pcdata.st_mission_gauge)
tokimeki(__type="bin") #{pcdata.st_tokimeki}
//-step_assist(iidx_id iidx_id_str name hair head face body hand)
qpronicle_love(music_list="-1")
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]}
//-
event1_data(point_map_0 point_map_1 point_map_2 point_map_3 point_map_4 last_map hold_point rank_point tips_list gift_point)
event1_assist(iidx_id iidx_id_str name hair head face body hand)
event2_data(play_num now_area now_note_grade stop_area_time)
event2_area_data(area_no area_play normal_point hyper_point another_point)
onemore_data(defeat_0 defeat_1 defeat_2 defeat_3 defeat_4 defeat_5 challenge_num_n challenge_num_h challenge_num_a)
reflec_collabo(phase1_music_list="-1" phase2_music_list="-1")
destiny_catharsis(music_bit="-1")
bemani_summer_collabo(music_bit="-1")
deller(deller=pcdata.deller rate="1")
orb_data(rest_orb=pcdata.orb)
rainbow_ticket(item_num="10")
beatstream_collabo(music_list="-1")
floor_infection(music_list="-1")
reflec_volzza_collabo(iidx_music_list="-1" reflec_music_list="-1")