From cff730573185897e7e50a0fb41dd0f66271f2421 Mon Sep 17 00:00:00 2001 From: Tau Date: Sun, 31 Mar 2019 18:00:42 -0400 Subject: [PATCH] wip --- src/idz/decoder.ts | 20 +++++++++++++++++++- src/idz/defs.ts | 6 ++++++ src/idz/encoder.ts | 12 ++++++++++++ src/idz/index.ts | 21 +++++++++++++++------ src/idz/request.ts | 15 +++++++++++++-- src/idz/response.ts | 14 +++++++++++++- 6 files changed, 78 insertions(+), 10 deletions(-) diff --git a/src/idz/decoder.ts b/src/idz/decoder.ts index 5c8bdd8..37de2f7 100644 --- a/src/idz/decoder.ts +++ b/src/idz/decoder.ts @@ -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(); 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, }; }); diff --git a/src/idz/defs.ts b/src/idz/defs.ts index e86c116..560918d 100644 --- a/src/idz/defs.ts +++ b/src/idz/defs.ts @@ -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); diff --git a/src/idz/encoder.ts b/src/idz/encoder.ts index 4c3f740..3b6fb17 100644 --- a/src/idz/encoder.ts +++ b/src/idz/encoder.ts @@ -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; diff --git a/src/idz/index.ts b/src/idz/index.ts index 9b55552..b2f93dc 100644 --- a/src/idz/index.ts +++ b/src/idz/index.ts @@ -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; } } diff --git a/src/idz/request.ts b/src/idz/request.ts index 738b50d..175bebb 100644 --- a/src/idz/request.ts +++ b/src/idz/request.ts @@ -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; diff --git a/src/idz/response.ts b/src/idz/response.ts index 8c663cd..7c5489e 100644 --- a/src/idz/response.ts +++ b/src/idz/response.ts @@ -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;