mirror of
https://github.com/asphyxia-core/plugins.git
synced 2026-04-07 09:45:14 -05:00
saucer fulfill support
This commit is contained in:
parent
c18baaedd6
commit
105c9796bd
|
|
@ -1,6 +1,6 @@
|
|||
# Jubeat
|
||||
|
||||
Plugin Version: **v1.4.1**
|
||||
Plugin Version: **v1.5.0**
|
||||
|
||||
### Supported Versions
|
||||
|
||||
|
|
@ -11,11 +11,16 @@ Plugin Version: **v1.4.1**
|
|||
- copious
|
||||
- copious APPEND
|
||||
- saucer
|
||||
- saucer fulfill
|
||||
|
||||
### Changelogs
|
||||
|
||||
***
|
||||
|
||||
#### 1.5.0
|
||||
|
||||
- saucer fulfill support
|
||||
|
||||
#### 1.4.1
|
||||
|
||||
- saucer support
|
||||
|
|
|
|||
1624
jubeat@asphyxia/data/fulfill_courses.json
Normal file
1624
jubeat@asphyxia/data/fulfill_courses.json
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -1,35 +1,39 @@
|
|||
import {getVersion, VersionRange} from '../utils';
|
||||
import {getVersion, VersionRange} from "../utils";
|
||||
|
||||
export const gameInfo: EPR = (info, data, send) => {
|
||||
const locId = $(data).content('shop.locationid');
|
||||
const locId = $(data).content("shop.locationid");
|
||||
const version = getVersion(info);
|
||||
if (version === 0) return send.deny();
|
||||
|
||||
return send.object({
|
||||
data: {
|
||||
...info.module === 'shopinfo' && {
|
||||
cabid: K.ITEM('u32', _.random(1, 10)),
|
||||
locationid: K.ITEM('str', locId),
|
||||
...VersionRange(version, 3, 6) && { is_send: K.ITEM('u8', 1) },
|
||||
...info.module === "shopinfo" && {
|
||||
cabid: K.ITEM("u32", _.random(1, 10)),
|
||||
locationid: K.ITEM("str", locId),
|
||||
...VersionRange(version, 3, 6) && { is_send: K.ITEM("u8", 1) },
|
||||
tax_phase: K.ITEM("u8", 0),
|
||||
facility: {
|
||||
exist: K.ITEM("u32", 1)
|
||||
}
|
||||
},
|
||||
|
||||
...VersionRange(version, 5, 6) && {
|
||||
white_music_list: K.ARRAY('s32', Array(32).fill(-1))
|
||||
white_music_list: K.ARRAY("s32", Array(32).fill(-1))
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const demodata = {
|
||||
getNews: (_, __, send) => send.object({ data: { officialnews: K.ATTR({ count: '0' }) } }),
|
||||
getNews: (_, __, send) => send.object({ data: { officialnews: K.ATTR({ count: "0" }) } }),
|
||||
getData: (_, data, send) => {
|
||||
const newsId = $(data).number('officialnews.newsid');
|
||||
const newsId = $(data).number("officialnews.newsid");
|
||||
return send.object({
|
||||
data: {
|
||||
officialnews: {
|
||||
data: {
|
||||
newsid: K.ITEM('s16', newsId),
|
||||
image: K.ITEM('u8', 0, { size: '0' })
|
||||
newsid: K.ITEM("s16", newsId),
|
||||
image: K.ITEM("u8", 0, { size: "0" })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,10 +42,10 @@ export const demodata = {
|
|||
getHitchart: (_, __, send) => send.object({
|
||||
data: {
|
||||
hitchart: {
|
||||
update: K.ITEM('str', ''),
|
||||
update: K.ITEM("str", ""),
|
||||
|
||||
hitchart_lic: K.ATTR({ count: '0' }),
|
||||
hitchart_org: K.ATTR({ count: '0' }),
|
||||
hitchart_lic: K.ATTR({ count: "0" }),
|
||||
hitchart_org: K.ATTR({ count: "0" }),
|
||||
}
|
||||
}
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import {getVersion, getVersionName, VersionRange} from "../utils";
|
||||
import Profile from "../models/profile";
|
||||
import {Score} from "../models/score";
|
||||
import {CourseResult} from "../models/course";
|
||||
|
||||
export const profile: EPR = async (info, data, send) => {
|
||||
let refId = $(data).str("data.player.pass.refid");
|
||||
|
|
@ -32,17 +33,20 @@ export const profile: EPR = async (info, data, send) => {
|
|||
|
||||
return send.object({
|
||||
data: {
|
||||
...VersionRange(version, 5, 5) && require("../templates/gameInfos/saucer.ts")(profile),
|
||||
...version === 5 && require("../templates/gameInfos/saucer.ts")(profile),
|
||||
...version === 6 && require("../templates/gameInfos/fulfill.ts")(profile),
|
||||
|
||||
player: {
|
||||
name: K.ITEM("str", profile.name),
|
||||
jid: K.ITEM("s32", profile.jubeatId),
|
||||
refid: K.ITEM("str", profile.__refid),
|
||||
session_id: K.ITEM("s32", 1),
|
||||
event_flag: K.ITEM("u64", BigInt(0)),
|
||||
|
||||
...version === 3 && require("../templates/profiles/knit.ts")(profile),
|
||||
...version === 4 && require("../templates/profiles/copious.ts")(profile),
|
||||
...version === 5 && require("../templates/profiles/saucer.ts")(profile),
|
||||
...version === 6 && require("../templates/profiles/fulfill.ts")(profile),
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -236,6 +240,62 @@ export const saveProfile: EPR = async (info, { data }, send) => {
|
|||
profile.saucer.bistro.carry_over = $(data).number("player.bistro.carry_over");
|
||||
}
|
||||
|
||||
if (version === 6) {
|
||||
if (!profile.fulfill) profile.fulfill = {};
|
||||
profile.fulfill.jubility = $(data).number("player.info.jubility");
|
||||
profile.fulfill.jubilityYday = $(data).number("player.info.jubility_yday");
|
||||
profile.fulfill.tuneCount = $(data).number("player.info.tune_cnt");
|
||||
profile.fulfill.saveCount = $(data).number("player.info.save_cnt");
|
||||
profile.fulfill.savedCount = $(data).number("player.info.saved_cnt");
|
||||
profile.fulfill.fcCount = $(data).number("player.info.fc_cnt");
|
||||
profile.fulfill.exCount = $(data).number("player.info.exc_cnt");
|
||||
profile.fulfill.clearCount = $(data).number("player.info.clear_cnt");
|
||||
profile.fulfill.matchCount = $(data).number("player.info.match_cnt");
|
||||
profile.fulfill.expertOption = $(data).number("player.info.expert_option");
|
||||
profile.fulfill.matching = $(data).number("player.info.matching");
|
||||
profile.fulfill.hazard = $(data).number("player.info.hazard");
|
||||
profile.fulfill.hard = $(data).number("player.info.hard");
|
||||
profile.fulfill.extraPoint = $(data).number("player.info.extra_point");
|
||||
profile.fulfill.isExtraPlayed = $(data).bool("player.info.is_extra_played");
|
||||
profile.fulfill.totalBestScore = $(data).number("player.info.total_best_score");
|
||||
profile.fulfill.clearMaxLevel = $(data).number("player.info.clear_max_level");
|
||||
profile.fulfill.fcMaxLevel = $(data).number("player.info.fc_max_level");
|
||||
profile.fulfill.exMaxLevel = $(data).number("player.info.exc_max_level");
|
||||
|
||||
profile.fulfill.marker = lastMarker;
|
||||
profile.fulfill.theme = lastTheme;
|
||||
profile.fulfill.title = lastTitle;
|
||||
profile.fulfill.parts = lastParts;
|
||||
profile.fulfill.sort = lastSort;
|
||||
profile.fulfill.category = lastCategory;
|
||||
|
||||
profile.fulfill.secretList = $(data).numbers("player.item.secret_list");
|
||||
profile.fulfill.themeList = $(data).number("player.item.theme_list");
|
||||
profile.fulfill.markerList = $(data).numbers("player.item.marker_list");
|
||||
profile.fulfill.titleList = $(data).numbers("player.item.title_list");
|
||||
profile.fulfill.partsList = $(data).numbers("player.item.parts_list");
|
||||
profile.fulfill.secretListNew = $(data).numbers("player.item.secret_new");
|
||||
profile.fulfill.themeListNew = $(data).number("player.item.theme_new");
|
||||
profile.fulfill.markerListNew = $(data).numbers("player.item.marker_new");
|
||||
profile.fulfill.titleListNew = $(data).numbers("player.item.title_new");
|
||||
|
||||
const courseNode = $(data).element("course");
|
||||
if (courseNode) {
|
||||
profile.fulfill.lastCourseId = courseNode.number("course_id");
|
||||
|
||||
await DB.Upsert<CourseResult>(refId, {
|
||||
collection: "course_results",
|
||||
courseId: courseNode.number("course_id"),
|
||||
version: 6
|
||||
}, {
|
||||
$set: {
|
||||
rating: courseNode.number("rating"),
|
||||
scores: courseNode.elements("music").map(m => m.number("score"))
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
await DB.Update<Profile>(refId, { collection: "profile" }, profile);
|
||||
|
||||
|
|
@ -340,6 +400,69 @@ const updateScore = async (refId: string, data: any): Promise<boolean> => {
|
|||
}
|
||||
};
|
||||
|
||||
export const getCourse: EPR = async (info, data, send) => {
|
||||
const version = getVersion(info);
|
||||
if (version === 0) return send.deny();
|
||||
|
||||
const jubeatId = $(data).number("data.player.jid");
|
||||
if (!jubeatId) return send.deny();
|
||||
|
||||
const profile = await DB.FindOne<Profile>(null, { collection: "profile", jubeatId });
|
||||
if (!profile) return send.deny();
|
||||
|
||||
if (version === 6) {
|
||||
const results = await DB.Find<CourseResult>(profile.__refid, { collection: "course_results", version: 6 });
|
||||
|
||||
const { courses } = require("../data/fulfill_courses.json");
|
||||
|
||||
const validCourseIds: number[] = courses.map(course => course.course_id);
|
||||
|
||||
return send.object({
|
||||
data: {
|
||||
course_list: {
|
||||
course: courses.map(course => ({
|
||||
id: K.ITEM("s32", course.course_id),
|
||||
name: K.ITEM("str", course.course_name),
|
||||
level: K.ITEM("u8", course.course_level),
|
||||
|
||||
norma: {
|
||||
norma_id: K.ARRAY("s32", course.norma.norma_id),
|
||||
bronze_value: K.ARRAY("s32", course.norma.bronze),
|
||||
silver_value: K.ARRAY("s32", course.norma.silver),
|
||||
gold_value: K.ARRAY("s32", course.norma.gold)
|
||||
},
|
||||
|
||||
music_list: {
|
||||
music: course.music_list.map(music => (K.ATTR({ index: music.index }, {
|
||||
music_id: K.ITEM("s32", music.music_id),
|
||||
seq: K.ITEM("u8", music.seq_id)
|
||||
})))
|
||||
}
|
||||
}))
|
||||
},
|
||||
|
||||
player_list: {
|
||||
player: {
|
||||
jid: K.ITEM("s32", jubeatId),
|
||||
|
||||
result_list: {
|
||||
result: results.filter(e => validCourseIds.find(valid => valid === e.courseId)).map(result => ({
|
||||
id: K.ITEM("s32", result.courseId),
|
||||
rating: K.ITEM("u8", result.rating),
|
||||
score: K.ARRAY("s32", result.scores)
|
||||
}))
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
last_course_id: K.ITEM("s32", profile.fulfill?.lastCourseId || 0)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return send.deny();
|
||||
};
|
||||
|
||||
export const meeting: EPR = (info, data, send) => {
|
||||
return send.object({
|
||||
data: {
|
||||
|
|
|
|||
|
|
@ -1,36 +1,37 @@
|
|||
import {demodata, gameInfo} from './handlers/common';
|
||||
import {check, entry, refresh, report} from './handlers/matching';
|
||||
import {getCollabo, loadScore, meeting, profile, saveProfile} from './handlers/profile';
|
||||
import {demodata, gameInfo} from "./handlers/common";
|
||||
import {check, entry, refresh, report} from "./handlers/matching";
|
||||
import {getCollabo, getCourse, loadScore, meeting, profile, saveProfile} from "./handlers/profile";
|
||||
|
||||
export function register() {
|
||||
if (CORE_VERSION_MAJOR <= 1 && CORE_VERSION_MINOR < 31) {
|
||||
console.error('The current version of Asphyxia Core is not supported. Requires version \'1.31\' or later.');
|
||||
console.error("The current version of Asphyxia Core is not supported. Requires version '1.31' or later.");
|
||||
return;
|
||||
}
|
||||
R.GameCode('J44');
|
||||
R.GameCode('K44');
|
||||
R.GameCode('L44');
|
||||
R.GameCode("J44");
|
||||
R.GameCode("K44");
|
||||
R.GameCode("L44");
|
||||
|
||||
R.Route('gametop.regist', profile);
|
||||
R.Route('gametop.get_info', gameInfo);
|
||||
R.Route('gametop.get_pdata', profile);
|
||||
R.Route('gametop.get_mdata', loadScore);
|
||||
R.Route('gametop.get_meeting', meeting);
|
||||
R.Route('gametop.get_collabo', getCollabo);
|
||||
R.Route("gametop.regist", profile);
|
||||
R.Route("gametop.get_info", gameInfo);
|
||||
R.Route("gametop.get_pdata", profile);
|
||||
R.Route("gametop.get_mdata", loadScore);
|
||||
R.Route("gametop.get_course", getCourse);
|
||||
R.Route("gametop.get_meeting", meeting);
|
||||
R.Route("gametop.get_collabo", getCollabo);
|
||||
|
||||
R.Route('gameend.regist', saveProfile);
|
||||
R.Route('gameend.log', true);
|
||||
R.Route('gameend.set_collabo', true);
|
||||
R.Route("gameend.regist", saveProfile);
|
||||
R.Route("gameend.log", true);
|
||||
R.Route("gameend.set_collabo", true);
|
||||
|
||||
R.Route('shopinfo.regist', gameInfo);
|
||||
R.Route('demodata.get_news', demodata.getNews);
|
||||
R.Route('demodata.get_data', demodata.getData);
|
||||
R.Route('demodata.get_hitchart', demodata.getHitchart);
|
||||
R.Route('lobby.check', check);
|
||||
R.Route('lobby.entry', entry);
|
||||
R.Route('lobby.refresh', refresh);
|
||||
R.Route('lobby.report', report);
|
||||
R.Route("shopinfo.regist", gameInfo);
|
||||
R.Route("demodata.get_news", demodata.getNews);
|
||||
R.Route("demodata.get_data", demodata.getData);
|
||||
R.Route("demodata.get_hitchart", demodata.getHitchart);
|
||||
R.Route("lobby.check", check);
|
||||
R.Route("lobby.entry", entry);
|
||||
R.Route("lobby.refresh", refresh);
|
||||
R.Route("lobby.report", report);
|
||||
|
||||
R.Route('netlog.send', true);
|
||||
R.Route('logger.report', true);
|
||||
R.Route("netlog.send", true);
|
||||
R.Route("logger.report", true);
|
||||
}
|
||||
|
|
|
|||
9
jubeat@asphyxia/models/course.ts
Normal file
9
jubeat@asphyxia/models/course.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
export interface CourseResult {
|
||||
collection: "course_results";
|
||||
|
||||
version: number;
|
||||
|
||||
courseId: number;
|
||||
rating: number;
|
||||
scores: number[];
|
||||
}
|
||||
|
|
@ -120,4 +120,48 @@ export default interface Profile {
|
|||
carry_over?: number;
|
||||
}
|
||||
};
|
||||
|
||||
fulfill?: {
|
||||
jubility?: number;
|
||||
jubilityYday?: number;
|
||||
tuneCount?: number;
|
||||
clearCount?: number;
|
||||
saveCount?: number;
|
||||
savedCount?: number;
|
||||
fcCount?: number;
|
||||
exCount?: number;
|
||||
matchCount?: number;
|
||||
extraPoint?: number;
|
||||
isExtraPlayed?: boolean;
|
||||
totalBestScore?: number;
|
||||
clearMaxLevel?: number;
|
||||
fcMaxLevel?: number;
|
||||
exMaxLevel?: number;
|
||||
|
||||
marker?: number;
|
||||
theme?: number;
|
||||
title?: number;
|
||||
parts?: number;
|
||||
sort?: number;
|
||||
category?: number;
|
||||
expertOption?: number;
|
||||
matching?: number;
|
||||
hazard?: number;
|
||||
hard?: number;
|
||||
|
||||
secretList?: number[];
|
||||
themeList?: number;
|
||||
markerList?: number[];
|
||||
titleList?: number[];
|
||||
partsList?: number[];
|
||||
|
||||
secretListNew?: number[];
|
||||
themeListNew?: number;
|
||||
markerListNew?: number[];
|
||||
titleListNew?: number[];
|
||||
|
||||
lastCourseId?: number;
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
|
|
|||
28
jubeat@asphyxia/templates/gameInfos/fulfill.ts
Normal file
28
jubeat@asphyxia/templates/gameInfos/fulfill.ts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
module.exports = () => ({
|
||||
termver: K.ITEM("u8", 0),
|
||||
season_etime: K.ITEM("u32", 0),
|
||||
white_music_list: K.ARRAY("s32", Array(32).fill(-1)),
|
||||
open_music_list: K.ARRAY("s32", Array(32).fill(0)),
|
||||
|
||||
collabo_info: {
|
||||
collabo: [
|
||||
K.ATTR({ type: "1" }, { state: K.ITEM("u8", 0) }),
|
||||
K.ATTR({ type: "2" }, { state: K.ITEM("u8", 0) }),
|
||||
K.ATTR({ type: "3" }, { state: K.ITEM("u8", 0) }),
|
||||
K.ATTR({ type: "4" }, { state: K.ITEM("u8", 0) }),
|
||||
K.ATTR({ type: "5" }, { state: K.ITEM("u8", 0) }),
|
||||
K.ATTR({ type: "8" }, { state: K.ITEM("u8", 0) })
|
||||
],
|
||||
|
||||
policy_break: {
|
||||
is_report_end: K.ITEM("bool", true)
|
||||
}
|
||||
},
|
||||
|
||||
lab: {
|
||||
is_open: K.ITEM("bool", false)
|
||||
},
|
||||
|
||||
share_music: K.ATTR({ count: "0" }),
|
||||
bonus_music: K.ATTR({ count: "0" })
|
||||
});
|
||||
117
jubeat@asphyxia/templates/profiles/fulfill.ts
Normal file
117
jubeat@asphyxia/templates/profiles/fulfill.ts
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
import Profile from "../../models/profile";
|
||||
|
||||
module.exports = (data: Profile) => ({
|
||||
info: {
|
||||
jubility: K.ITEM("s16", data.fulfill?.jubility || 0),
|
||||
jubility_yday: K.ITEM("s16", data.fulfill?.jubilityYday || 0),
|
||||
tune_cnt: K.ITEM("s32", data.fulfill?.tuneCount || 31),
|
||||
save_cnt: K.ITEM("s32", data.fulfill?.saveCount || 0),
|
||||
saved_cnt: K.ITEM("s32", data.fulfill?.savedCount || 0),
|
||||
fc_cnt: K.ITEM("s32", data.fulfill?.fcCount || 0),
|
||||
ex_cnt: K.ITEM("s32", data.fulfill?.exCount || 0),
|
||||
clear_cnt: K.ITEM("s32", data.fulfill?.clearCount || 0),
|
||||
pf_cnt: K.ITEM("s32", 0),
|
||||
match_cnt: K.ITEM("s32", data.fulfill?.matchCount || 0),
|
||||
beat_cnt: K.ITEM("s32", 0),
|
||||
mynews_cnt: K.ITEM("s32", 0),
|
||||
mtg_entry_cnt: K.ITEM("s32", 0),
|
||||
mtg_hold_cnt: K.ITEM("s32", 0),
|
||||
mtg_result: K.ITEM("u8", 0),
|
||||
extra_point: K.ITEM("s32", data.fulfill?.extraPoint || 0),
|
||||
is_extra_played: K.ITEM("bool", data.fulfill?.isExtraPlayed || false)
|
||||
},
|
||||
|
||||
last: {
|
||||
play_time: K.ITEM("s64", BigInt(0)),
|
||||
shopname: K.ITEM("str", data.lastShopname),
|
||||
areaname: K.ITEM("str", data.lastAreaname),
|
||||
title: K.ITEM("s16", data.fulfill?.title || 0),
|
||||
parts: K.ITEM("s16", data.fulfill?.parts || 0),
|
||||
theme: K.ITEM("s8", data.fulfill?.theme || 0),
|
||||
marker: K.ITEM("s8", data.fulfill?.marker || 0),
|
||||
rank_sort: K.ITEM("s8", data.rankSort || 1),
|
||||
combo_disp: K.ITEM("s8", data.comboDisp || 1),
|
||||
music_id: K.ITEM("s32", data.musicId || 0),
|
||||
seq_id: K.ITEM("s8", data.seqId || 0),
|
||||
sort: K.ITEM("s8", data.fulfill?.sort || 0),
|
||||
category: K.ITEM("s8", data.fulfill?.category || 0),
|
||||
expert_option: K.ITEM("s8", data.fulfill?.category || 0),
|
||||
matching: K.ITEM("s8", data.fulfill?.category || 1),
|
||||
hazard: K.ITEM("s8", data.fulfill?.category || 0),
|
||||
hard: K.ITEM("s8", data.fulfill?.category || 0)
|
||||
},
|
||||
|
||||
item: {
|
||||
secret_list: K.ARRAY("s32", Array(32).fill(-1)),
|
||||
theme_list: K.ITEM("s16", -1),
|
||||
marker_list: K.ARRAY("s32", Array(2).fill(-1)),
|
||||
title_list: K.ARRAY("s32", Array(96).fill(-1)),
|
||||
parts_list: K.ARRAY("s32", Array(96).fill(-1)),
|
||||
|
||||
new: {
|
||||
secret_list: K.ARRAY("s32", Array(32).fill(0)),
|
||||
theme_list: K.ITEM("s16", 0),
|
||||
marker_list: K.ARRAY("s32", Array(2).fill(0)),
|
||||
title_list: K.ARRAY("s32", Array(96).fill(0))
|
||||
}
|
||||
},
|
||||
|
||||
history: K.ATTR({ count: "0" }),
|
||||
|
||||
challenge: {
|
||||
today: {
|
||||
music_id: K.ITEM("s32", 0),
|
||||
state: K.ITEM("u8", 0)
|
||||
}
|
||||
},
|
||||
|
||||
news: {
|
||||
checked: K.ITEM("s16", 0)
|
||||
},
|
||||
|
||||
macchiato: {
|
||||
pack_id: K.ITEM("s32", 0),
|
||||
bean_num: K.ITEM("u16", 0),
|
||||
daily_milk_num: K.ITEM("s32", 1200),
|
||||
is_received_daily_milk: K.ITEM("bool", true),
|
||||
today_tune_cnt: K.ITEM("s32", 0),
|
||||
daily_milk_bonus: K.ARRAY("s32", [100, 100, 1000, 200, 200, 200, 200, 200, 1000]),
|
||||
daily_play_burst: K.ITEM("s32", 300),
|
||||
|
||||
sub_menu_is_completed: K.ITEM("bool", true),
|
||||
compensation_milk: K.ITEM("s32", 0),
|
||||
|
||||
macchiato_music_list: K.ATTR({ count: "0" }, {
|
||||
music: []
|
||||
}),
|
||||
|
||||
sub_pack_id: K.ITEM("s32", 0),
|
||||
|
||||
sub_macchiato_music_list: K.ATTR({ count: "0" }, {
|
||||
music: []
|
||||
}),
|
||||
|
||||
season_music_list: K.ATTR({ count: "0" }),
|
||||
|
||||
match_cnt: K.ITEM("s32", 0),
|
||||
|
||||
achievement_list: K.ATTR({ count: "0" }, {
|
||||
achievement: []
|
||||
}),
|
||||
|
||||
cow_list: K.ATTR({ count: "0" }),
|
||||
},
|
||||
|
||||
rivallist: K.ATTR({ count: "0" }),
|
||||
|
||||
only_now_music: K.ATTR({ count: "0" }),
|
||||
lab_edit_seq: K.ATTR({ count: "0" }),
|
||||
kac_music: K.ATTR({ count: "0" }),
|
||||
|
||||
memorial: {
|
||||
latest_event_id: K.ITEM("u8", 1),
|
||||
player_event_id: K.ITEM("u8", 1),
|
||||
flag: K.ITEM("u32", 0),
|
||||
params: K.ARRAY("u32", Array(15).fill(0))
|
||||
}
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user