wip
This commit is contained in:
+19
-1
@@ -1,3 +1,4 @@
|
||||
import iconv = require("iconv-lite");
|
||||
import { Transform } from "stream";
|
||||
|
||||
import { MSG, REQ_LEN } from "./defs";
|
||||
@@ -5,6 +6,7 @@ import { Request } from "./request";
|
||||
|
||||
type ReaderFn = (buf: Buffer) => Request;
|
||||
|
||||
const sjis = "shift_jis";
|
||||
const readers = new Map<number, ReaderFn>();
|
||||
|
||||
function readHeader(buf: Buffer) {
|
||||
@@ -35,7 +37,7 @@ readers.set(MSG.CREATE_RECORD_REQ, buf => {
|
||||
type: "create_record_req",
|
||||
aimeId: buf.readInt32LE(0x0004),
|
||||
luid: buf.slice(0x0008, buf.indexOf("\0", 0x0008)).toString("ascii"),
|
||||
field_0018: buf.slice(0x0018, 0x0034),
|
||||
name: iconv.decode(buf.slice(0x001e, buf.indexOf("\0", 0x001e)), sjis),
|
||||
field_0034: buf.readUInt32LE(0x0034),
|
||||
field_0040: buf.slice(0x0040, 0x0084),
|
||||
field_0084: buf.readUInt16LE(0x0084),
|
||||
@@ -84,6 +86,12 @@ readers.set(MSG.GET_EXIST_RECORD_REQ, buf => {
|
||||
};
|
||||
});
|
||||
|
||||
readers.set(MSG.GET_REWARD_TABLE_REQ, () => {
|
||||
return {
|
||||
type: "get_reward_table_req",
|
||||
};
|
||||
});
|
||||
|
||||
readers.set(MSG.GET_SERVER_LIST_REQ, () => {
|
||||
return { type: "get_server_list_req" };
|
||||
});
|
||||
@@ -98,6 +106,16 @@ readers.set(MSG.UPDATE_PROVISIONAL_STORE_RANK_REQ, buf => {
|
||||
readers.set(MSG.UPDATE_RECORD_REQ, buf => {
|
||||
return {
|
||||
type: "update_record_req",
|
||||
// mega TODO
|
||||
};
|
||||
});
|
||||
|
||||
readers.set(MSG.UPDATE_TOPIC_REQ, buf => {
|
||||
const aimeId = buf.readUInt32LE(0x0004);
|
||||
|
||||
return {
|
||||
type: "update_topic_req",
|
||||
aimeId: aimeId !== 0xffffffff ? aimeId : undefined,
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
@@ -17,6 +17,10 @@ export const MSG = {
|
||||
UPDATE_STORY_CLEAR_REQ: 0x007f,
|
||||
UPDATE_PROVISIONAL_STORE_RANK_REQ: 0x0082,
|
||||
UPDATE_PROVISIONAL_STORE_RANK_RES: 0x0083,
|
||||
GET_REWARD_TABLE_REQ: 0x0086,
|
||||
GET_REWARD_TABLE_RES: 0x0087,
|
||||
UPDATE_TOPIC_REQ: 0x009a,
|
||||
UPDATE_TOPIC_RES: 0x009b,
|
||||
GET_CONFIG_DATA_2_REQ: 0x00ab,
|
||||
GET_CONFIG_DATA_2_RES: 0x00ac,
|
||||
};
|
||||
@@ -30,7 +34,9 @@ REQ_LEN.set(MSG.CREATE_TEAM_REQ, 0x0010);
|
||||
REQ_LEN.set(MSG.GET_CONFIG_REQ, 0x0050);
|
||||
REQ_LEN.set(MSG.GET_CONFIG_DATA_2_REQ, 0x0010);
|
||||
REQ_LEN.set(MSG.GET_EXIST_RECORD_REQ, 0x0010);
|
||||
REQ_LEN.set(MSG.GET_REWARD_TABLE_REQ, 0x0010);
|
||||
REQ_LEN.set(MSG.GET_SERVER_LIST_REQ, 0x0020);
|
||||
REQ_LEN.set(MSG.UPDATE_PROVISIONAL_STORE_RANK_REQ, 0x0010);
|
||||
REQ_LEN.set(MSG.UPDATE_RECORD_REQ, 0x0940);
|
||||
REQ_LEN.set(MSG.UPDATE_STORY_CLEAR_REQ, 0x0020);
|
||||
REQ_LEN.set(MSG.UPDATE_TOPIC_REQ, 0x0010);
|
||||
|
||||
@@ -71,6 +71,12 @@ export class Encoder extends Transform {
|
||||
|
||||
break;
|
||||
|
||||
case "get_reward_table_res":
|
||||
buf = Buffer.alloc(0x01c0);
|
||||
buf.writeUInt16LE(MSG.GET_REWARD_TABLE_RES, 0x0000);
|
||||
|
||||
break;
|
||||
|
||||
case "get_server_list_res":
|
||||
buf = Buffer.alloc(0x04b0);
|
||||
buf.writeUInt16LE(MSG.GET_SERVER_LIST_RES, 0x0000);
|
||||
@@ -117,6 +123,12 @@ export class Encoder extends Transform {
|
||||
|
||||
break;
|
||||
|
||||
case "update_topic_res":
|
||||
buf = Buffer.alloc(0x05d0);
|
||||
buf.writeUInt16LE(MSG.UPDATE_TOPIC_RES, 0x0000);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
const exhaustCheck: never = obj;
|
||||
|
||||
|
||||
+15
-6
@@ -62,6 +62,13 @@ export default async function idz(socket: Socket) {
|
||||
|
||||
break;
|
||||
|
||||
case "get_reward_table_req":
|
||||
output.write({
|
||||
type: "get_reward_table_res",
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case "get_server_list_req":
|
||||
const myHost = hostname();
|
||||
|
||||
@@ -118,12 +125,7 @@ export default async function idz(socket: Socket) {
|
||||
case "update_provisional_store_rank_req":
|
||||
output.write({
|
||||
type: "update_provisional_store_rank_res",
|
||||
rows: [10, 11, 12, 13].map(rank => ({
|
||||
field_0000: rank,
|
||||
field_0004: msg.aimeId + rank - 11,
|
||||
field_0010: `x${rank}`,
|
||||
field_003B: `y${rank}`,
|
||||
})),
|
||||
rows: [],
|
||||
});
|
||||
|
||||
break;
|
||||
@@ -134,6 +136,13 @@ export default async function idz(socket: Socket) {
|
||||
status: 1,
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case "update_topic_req":
|
||||
output.write({
|
||||
type: "update_topic_res",
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-2
@@ -15,7 +15,7 @@ export interface CreateRecordRequest {
|
||||
type: "create_record_req";
|
||||
aimeId: number;
|
||||
luid: string;
|
||||
field_0018: Buffer;
|
||||
name: string;
|
||||
field_0034: number;
|
||||
field_0040: Buffer;
|
||||
field_0084: number;
|
||||
@@ -57,6 +57,10 @@ export interface GetExistRecordRequest {
|
||||
aimeId: number;
|
||||
}
|
||||
|
||||
export interface GetRewardTableRequest {
|
||||
type: "get_reward_table_req";
|
||||
}
|
||||
|
||||
export interface GetServerListRequest {
|
||||
type: "get_server_list_req";
|
||||
}
|
||||
@@ -71,6 +75,11 @@ export interface UpdateRecordRequest {
|
||||
// TODO
|
||||
}
|
||||
|
||||
export interface UpdateTopicRequest {
|
||||
type: "update_topic_req";
|
||||
aimeId?: number;
|
||||
}
|
||||
|
||||
export type Request =
|
||||
| AccountLockRequest
|
||||
| AccountUnlockRequest
|
||||
@@ -79,6 +88,8 @@ export type Request =
|
||||
| GetConfigRequest
|
||||
| GetConfigRequest2
|
||||
| GetExistRecordRequest
|
||||
| GetRewardTableRequest
|
||||
| GetServerListRequest
|
||||
| UpdateProvisionalStoreRankRequest
|
||||
| UpdateRecordRequest;
|
||||
| UpdateRecordRequest
|
||||
| UpdateTopicRequest;
|
||||
|
||||
+13
-1
@@ -35,6 +35,11 @@ export interface GetExistRecordResponse {
|
||||
result: boolean;
|
||||
}
|
||||
|
||||
export interface GetRewardTableResponse {
|
||||
type: "get_reward_table_res";
|
||||
// TODO
|
||||
}
|
||||
|
||||
export interface GetServerListResponse {
|
||||
type: "get_server_list_res";
|
||||
status: number;
|
||||
@@ -87,6 +92,11 @@ export interface UpdateProvisionalStoreRankResponse {
|
||||
rows: UpdateProvisionalStoreRankResponseRow[];
|
||||
}
|
||||
|
||||
export interface UpdateTopicResponse {
|
||||
type: "update_topic_res";
|
||||
// mega TODO
|
||||
}
|
||||
|
||||
export type Response =
|
||||
| AccountLockResponse
|
||||
| AccountUnlockResponse
|
||||
@@ -95,5 +105,7 @@ export type Response =
|
||||
| GetConfigResponse
|
||||
| GetConfigResponse2
|
||||
| GetExistRecordResponse
|
||||
| GetRewardTableResponse
|
||||
| GetServerListResponse
|
||||
| UpdateProvisionalStoreRankResponse;
|
||||
| UpdateProvisionalStoreRankResponse
|
||||
| UpdateTopicResponse;
|
||||
|
||||
Reference in New Issue
Block a user