This commit is contained in:
Tau
2019-11-06 17:28:29 -05:00
parent 093097cf5b
commit cff7305731
6 changed files with 78 additions and 10 deletions
+19 -1
View File
@@ -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,
};
});
+6
View File
@@ -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);
+12
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;