mirror of
https://github.com/laochan-eacnet/backend.git
synced 2026-09-28 09:47:58 +03:00
bugfix, add more p2d apis.
status: in-game now
This commit is contained in:
@@ -20,7 +20,7 @@ function serializeValue(value: any, type: string): string {
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
if (['b', 'bool'].includes('type')) {
|
||||
if (['b', 'bool'].includes(type)) {
|
||||
return value ? '1' : '0';
|
||||
}
|
||||
|
||||
@@ -123,6 +123,9 @@ export function eacnet(topName: string, encoding: 'UTF-8' | 'SHIFT_JIS' = 'UTF-8
|
||||
const obj = await orig.apply(this, args);
|
||||
const xml =
|
||||
`<?xml version="1.0" encoding="${encoding}"?>` + serializeObject(obj, topName);
|
||||
|
||||
console.log(xml);
|
||||
|
||||
const kxml = to_bin(xml);
|
||||
const compressed = LZ77.compress(kxml.data);
|
||||
const result = Buffer.allocUnsafe(compressed.length + 0x2E);
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
import { eacnet } from "../../decorators/eacnet.js";
|
||||
import { Context } from "../../types.js";
|
||||
import { v } from "../../utils/kxml-value.js";
|
||||
|
||||
export class Game {
|
||||
@eacnet('p2d')
|
||||
async getChampionshipInfo() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
championship_id: v.s32(-1),
|
||||
championship_state: v.s32(0),
|
||||
championship_name: v.str(''),
|
||||
entry_begin_clock: v.u64(0),
|
||||
championship_begin_clock: v.u64(0),
|
||||
championship_end_clock: v.u64(0),
|
||||
is_possible_play: v.bool(0),
|
||||
repertoire_list: {
|
||||
repertoire_num: v.s32(0),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getServerValues() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
bit_boost_magnification: v.str('2'),
|
||||
debug_user_force_subscription: v.str('TRUE'),
|
||||
devline_ignore_maintenance: v.str('FALSE'),
|
||||
enable_file_upload: v.str('TRUE'),
|
||||
frame_bit_magnification: v.str('1'),
|
||||
open_bemani_linkage_hinabita2023: v.str('FALSE'),
|
||||
open_bemani_linkage_knst2024sp: v.str('FALSE'),
|
||||
open_bemani_linkage_mixup: v.str('FALSE'),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async checkGameVersion() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
permission: v.s32(1),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getClearRate(ctx: Context) {
|
||||
const { play_style } = ctx.body as { play_style: number };
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
play_style: v.s32(play_style),
|
||||
result: {},
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getGoodsList() {
|
||||
const goods = [{
|
||||
goods_id: v.str('G1000000'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G2000000'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G2000001'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G2000002'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G1000001'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G3000000'),
|
||||
item_id: v.str('I1000000'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}, {
|
||||
goods_id: v.str('G3000001'),
|
||||
item_id: v.str('I1000001'),
|
||||
use_priority: v.s32(1),
|
||||
price: v.s32(1),
|
||||
}];
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
goods_list: {
|
||||
goods_num: v.s32(goods.length),
|
||||
goods,
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -28,35 +28,6 @@ export class Service {
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getServerValues() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
bit_boost_magnification: v.str('2'),
|
||||
debug_user_force_subscription: v.str('TRUE'),
|
||||
devline_ignore_maintenance: v.str('TRUE'),
|
||||
enable_file_upload: v.str('TRUE'),
|
||||
frame_bit_magnification: v.str('TRUE'),
|
||||
open_bemani_linkage_hinabita2023: v.str('TRUE'),
|
||||
open_bemani_linkage_knst2024sp: v.str('TRUE'),
|
||||
open_bemani_linkage_mixup: v.str('TRUE'),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async checkGameVersion() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
permission: v.s32(1),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async heartbeat(ctx: Context) {
|
||||
return {
|
||||
@@ -65,7 +36,7 @@ export class Service {
|
||||
result: {
|
||||
state: v.s32(1),
|
||||
next_clock: v.u64(new Date().valueOf() + 36e5),
|
||||
token: ctx.token,
|
||||
token: v.str(ctx.token),
|
||||
time_remain: v.s32(0x7fffffff),
|
||||
subscription_status: v.s32(1),
|
||||
}
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
import { eacnet } from "../../decorators/eacnet.js";
|
||||
import { Context } from "../../types.js";
|
||||
import { v } from "../../utils/kxml-value.js";
|
||||
import { MUSIC_LIST } from "./index.js";
|
||||
|
||||
export class User {
|
||||
userDataSaveTemp = new Map<string, { pdata: Buffer, checksum: string }>();
|
||||
|
||||
@eacnet('p2d')
|
||||
async getCustomizeSetting() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
customize: [{ item_category: v.s32(2), item_id: v.str('I1100000') }, { item_category: v.s32(3), item_id: v.str('I1200000') }, { item_category: v.s32(4), item_id: v.str('I1300000') }, { item_category: v.s32(5), item_id: v.str('I1400000') }, { item_category: v.s32(6), item_id: v.str('I1500000') }, { item_category: v.s32(7), item_id: v.str('I1600000') }, { item_category: v.s32(8), item_id: v.str('I1700000') }, { item_category: v.s32(11), item_id: v.str('I1300000') }, { item_category: v.s32(10), item_id: v.str('I1900000') }],
|
||||
other_customize: [{ item_category: v.s32(1), item_id: v.str('C1000000') }, { item_category: v.s32(2), item_id: v.str('C1100000') }, { item_category: v.s32(3), item_id: v.str('C1200000') }, { item_category: v.s32(4), item_id: v.str('C1300000') }, { item_category: v.s32(5), item_id: v.str('C1400000') },],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async gameEnd() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getPointList() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
point_count: v.s32(114514),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getPrivilegeClient() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
list_num: v.s32(0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getPrivilegeServer() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
list_num: v.s32(0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async savePlayData(ctx: Context) {
|
||||
const uid = ctx.token;
|
||||
const { pdata, checksum } = ctx.body as { pdata: Buffer, checksum: string };
|
||||
|
||||
this.userDataSaveTemp.set(uid, { pdata, checksum });
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getPlayData(ctx: Context) {
|
||||
const uid = ctx.token;
|
||||
|
||||
if (!this.userDataSaveTemp.has(uid)) {
|
||||
return {
|
||||
status: v.s32(1),
|
||||
error: v.s32(404),
|
||||
}
|
||||
}
|
||||
|
||||
const { pdata } = this.userDataSaveTemp.get(uid);
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
pdata: v.bin(pdata),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async registPlayer(ctx: Context) {
|
||||
const uid = ctx.token;
|
||||
const { pdata, checksum } = ctx.body as { pdata: Buffer, checksum: string };
|
||||
|
||||
this.userDataSaveTemp.set(uid, { pdata, checksum });
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getRivalInfo() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {},
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getMusicList() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
status: v.s32(0),
|
||||
check_sum: v.str('d4980d5c3436638d4802314993e66a1790075e13022b36979b081c494536d6aa'),
|
||||
music_list: {
|
||||
music_num: v.s32(MUSIC_LIST.length),
|
||||
music: MUSIC_LIST,
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getCompeScoreData() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {},
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getMusicData(ctx: Context) {
|
||||
const { play_style } = ctx.body as { play_style: number };
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
play_style: v.s32(play_style),
|
||||
result: {},
|
||||
}
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async checkPlayData(ctx: Context) {
|
||||
const exists = this.userDataSaveTemp.has(ctx.token)
|
||||
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
infinitas_id: v.str(ctx.token),
|
||||
valid: v.bool(exists),
|
||||
is_exist: v.bool(exists),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@eacnet('p2d')
|
||||
async getItemList() {
|
||||
return {
|
||||
status: v.s32(0),
|
||||
error: v.s32(0),
|
||||
result: {
|
||||
item_list: {
|
||||
item_num: v.s32(2),
|
||||
item: [{
|
||||
item_id: v.str('I1000000'),
|
||||
not_free_count: v.s32(0),
|
||||
free_count: v.s32(1000),
|
||||
}, {
|
||||
item_id: v.str('I1000001'),
|
||||
not_free_count: v.s32(0),
|
||||
free_count: v.s32(1000),
|
||||
}]
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user