add support for omnimix, add bgm items back

This commit is contained in:
GEEKiDoS
2024-04-15 23:35:18 +08:00
parent cd19c26c8c
commit 38fd029dd3
4 changed files with 1832 additions and 361 deletions
File diff suppressed because it is too large Load Diff
+12 -1
View File
@@ -40,7 +40,12 @@ export default class extends Combine(Service, User, Game, Music) {
}
}
export const ITEM_LIST = data.items;
export const ITEM_LIST = data.items.map(id => ({
item_id: v.str(id),
not_free_count: v.s32(1),
free_count: v.s32(0),
}));
export const MUSIC_LIST = [
...data.musics.map(m => ({
music_id: v.s32(m.id),
@@ -48,4 +53,10 @@ export const MUSIC_LIST = [
note_bit: v.s32(m.noteBit),
music_pack_item_id: v.str('')
})),
...data.omni_musics.map(m => ({
music_id: v.s32(m.id),
kind: v.s32(2),
note_bit: v.s32(0),
music_pack_item_id: v.str('')
})),
];
+39 -5
View File
@@ -5,6 +5,10 @@ import { Context } from "../../types.js";
import { v } from "../../utils/kxml-value.js";
import { MUSIC_LIST } from "./index.js";
import { Binary } from "mongodb";
import { omni_musics } from './data.json' with { type: "json" };
// user only needs to unlock omni music, which is temporary
const userUnlockMusic = new Map<string, number>();
export class Music {
userService: UserService;
@@ -128,19 +132,49 @@ export class Music {
}
@eacnet('p2d')
async getMusicList() {
async unlockMusic(ctx: Context) {
const { music: { music_id } } = ctx.body as { music: { music_id: number } };
userUnlockMusic.set(ctx.token, music_id);
console.log(music_id);
return {
status: v.s32(0),
error: v.s32(0),
};
}
@eacnet('p2d')
async getMusicList(ctx: Context) {
let music = [...MUSIC_LIST];
if (userUnlockMusic.has(ctx.token)) {
const targetMusic = userUnlockMusic.get(ctx.token);
userUnlockMusic.delete(ctx.token);
const bitData = omni_musics.find(v => v.id === targetMusic);
music = music.filter(v => v.music_id['__value'] !== targetMusic);
music.push({
music_id: v.s32(bitData.id),
kind: v.s32(1),
note_bit: v.s32(bitData.noteBit),
music_pack_item_id: v.str(''),
});
}
return {
status: v.s32(0),
error: v.s32(0),
result: {
status: v.s32(0),
check_sum: v.str('2e49eba0b6ca8b6898f5d684ea0c3bc1ed6f1d572a4d308cf32727d64069a588'),
check_sum: v.str(''),
music_list: {
music_num: v.s32(MUSIC_LIST.length),
music: MUSIC_LIST,
music_num: v.s32(music.length),
music,
}
},
}
};
}
@eacnet('p2d')
+15 -11
View File
@@ -5,6 +5,7 @@ import { fromToken } from "../../utils/laochan-id.js";
import { UserService } from "../../services/p2d/user.js";
import { sha256 } from "../../utils/sha256.js";
import { toKBinXml } from "../../utils/kbinxml.js";
import { ITEM_LIST } from "./index.js";
export class User {
userService: UserService;
@@ -338,17 +339,20 @@ export class User {
result: {
item_list: {
item_num: v.s32(2),
item: [{
// infinitas ticket
item_id: v.str('I1000000'),
not_free_count: v.s32(items_count.infinitas_ticket),
free_count: v.s32(items_count.infinitas_ticket_free),
}, {
// ldisc
item_id: v.str('I1000001'),
not_free_count: v.s32(items_count.ldisc),
free_count: v.s32(0),
}]
item: [
...ITEM_LIST,
{
// infinitas ticket
item_id: v.str('I1000000'),
not_free_count: v.s32(items_count.infinitas_ticket),
free_count: v.s32(items_count.infinitas_ticket_free),
}, {
// ldisc
item_id: v.str('I1000001'),
not_free_count: v.s32(items_count.ldisc),
free_count: v.s32(0),
}
]
}
}
};