diff --git a/src/idz/decoder/checkRank.ts b/src/idz/decoder/checkRank.ts new file mode 100644 index 0000000..9df7b54 --- /dev/null +++ b/src/idz/decoder/checkRank.ts @@ -0,0 +1,28 @@ +import { RequestCode } from "./_defs"; +import { CheckRankRequest } from "../request/checkRank"; + +checkRank.msgCode = 0x00cd as RequestCode; +checkRank.msgLen = 0x0080; + +export function checkRank(buf: Buffer): CheckRankRequest { + return { + type: "check_rank_req", + field_0002: buf.readUInt16LE(0x0002), + field_0004: buf.readUInt32LE(0x0004), + field_0008: buf.readUInt32LE(0x0008), + field_000C: buf.readUInt16LE(0x000c), + field_0012: buf.readUInt8(0x0012), + field_0015: buf.readUInt8(0x0015), + field_0018: buf.readUInt32LE(0x0018), + field_0024: buf.readUInt32LE(0x0024), + field_0028: buf.readUInt32LE(0x0028), + field_002C: buf.readUInt32LE(0x002c), + field_0054: buf.readUInt8(0x0054), + field_0058: buf.readUInt32LE(0x0058), + field_005C: buf.readUInt8(0x005c), + field_005D: buf.readUInt8(0x005d), + field_005E: buf.readUInt16LE(0x005e), + field_0060: buf.readUInt16LE(0x0060), + field_0062: buf.readUInt8(0x0062), + }; +} diff --git a/src/idz/decoder/index.ts b/src/idz/decoder/index.ts index d4c2ce4..7b904db 100644 --- a/src/idz/decoder/index.ts +++ b/src/idz/decoder/index.ts @@ -1,5 +1,6 @@ import { Transform } from "stream"; +import { checkRank } from "./checkRank"; import { createProfile } from "./createProfile"; import { createTeam } from "./createTeam"; import { discoverProfile } from "./discoverProfile"; @@ -27,6 +28,9 @@ import { updateStoryClearNum } from "./updateStoryClearNum"; import { RequestCode } from "./_defs"; import { Request } from "../request"; import { loadTopTen } from "./loadTopTen"; +import { updateResult } from "./updateResult"; +import { updateTeamPoints } from "./updateTeamPoints"; +import { updateUiReport } from "./updateUiReport"; export type ReaderFn = ((buf: Buffer) => Request) & { msgCode: RequestCode; @@ -34,7 +38,7 @@ export type ReaderFn = ((buf: Buffer) => Request) & { }; const funcList: ReaderFn[] = [ - unlockProfile, + checkRank, createProfile, createTeam, discoverProfile, @@ -58,8 +62,12 @@ const funcList: ReaderFn[] = [ saveSettings, saveStocker, saveTopic, + unlockProfile, updateProvisionalStoreRank, + updateResult, updateStoryClearNum, + updateTeamPoints, + updateUiReport, ]; const readerFns = new Map(); diff --git a/src/idz/decoder/updateResult.ts b/src/idz/decoder/updateResult.ts new file mode 100644 index 0000000..2aeb095 --- /dev/null +++ b/src/idz/decoder/updateResult.ts @@ -0,0 +1,24 @@ +import { RequestCode } from "./_defs"; +import { UpdateResultRequest } from "../request/updateResult"; + +updateResult.msgCode = 0x00cc as RequestCode; +updateResult.msgLen = 0x0030; + +export function updateResult(buf: Buffer): UpdateResultRequest { + return { + type: "update_result_req", + field_0002: buf.readUInt16LE(0x0002), + field_0004: buf.readUInt32LE(0x0004), + field_0008: buf.readUInt32LE(0x0008), + field_000C: buf.readUInt32LE(0x000c), + field_0010: buf.readUInt32LE(0x0010), + field_0014: buf.readUInt16LE(0x0014), + field_0016: buf.readUInt16LE(0x0016), + field_0018: buf.readUInt8(0x0018), + field_0019: buf.readUInt8(0x0019), + field_001A: buf.readUInt8(0x001a), + field_001C: buf.readUInt16LE(0x001c), + field_0020: buf.readUInt32LE(0x0020), + field_0024: buf.readUInt8(0x0024), + }; +} diff --git a/src/idz/decoder/updateTeamPoints.ts b/src/idz/decoder/updateTeamPoints.ts new file mode 100644 index 0000000..d59fc02 --- /dev/null +++ b/src/idz/decoder/updateTeamPoints.ts @@ -0,0 +1,13 @@ +import { RequestCode } from "./_defs"; +import { UpdateTeamPointsRequest } from "../request/updateTeamPoints"; + +updateTeamPoints.msgCode = 0x0081 as RequestCode; +updateTeamPoints.msgLen = 0x0010; + +export function updateTeamPoints(buf: Buffer): UpdateTeamPointsRequest { + return { + type: "update_team_points_req", + field_0004: buf.readUInt32LE(0x0004), + field_0008: buf.readUInt32LE(0x0008), + }; +} diff --git a/src/idz/decoder/updateUiReport.ts b/src/idz/decoder/updateUiReport.ts new file mode 100644 index 0000000..85a94ed --- /dev/null +++ b/src/idz/decoder/updateUiReport.ts @@ -0,0 +1,13 @@ +import { RequestCode } from "./_defs"; +import { UpdateUiReportRequest } from "../request/updateUiReport"; + +updateUiReport.msgCode = 0x0084 as RequestCode; +updateUiReport.msgLen = 0x0410; + +export function updateUiReport(buf: Buffer): UpdateUiReportRequest { + return { + type: "update_ui_report_req", + field_02: buf.readUInt16LE(0x0002), + field_04: buf.readUInt16LE(0x0004), + }; +} diff --git a/src/idz/encoder/checkRank.ts b/src/idz/encoder/checkRank.ts new file mode 100644 index 0000000..be72fbf --- /dev/null +++ b/src/idz/encoder/checkRank.ts @@ -0,0 +1,9 @@ +import { CheckRankResponse } from "../response/checkRank"; + +export function checkRank(res: CheckRankResponse): Buffer { + const buf = Buffer.alloc(0x00b0); + + buf.writeUInt16LE(0x00ce, 0x0000); + + return buf; +} diff --git a/src/idz/encoder/index.ts b/src/idz/encoder/index.ts index 65edd74..ab14ea1 100644 --- a/src/idz/encoder/index.ts +++ b/src/idz/encoder/index.ts @@ -1,10 +1,10 @@ import { Transform } from "stream"; import { _team } from "./_team"; -import { lockProfile } from "./lockProfile"; -import { unlockProfile } from "./unlockProfile"; +import { checkRank } from "./checkRank"; import { discoverProfile } from "./discoverProfile"; import { generic } from "./generic"; +import { lockProfile } from "./lockProfile"; import { load2on2 } from "./load2on2"; import { loadConfig } from "./loadConfig"; import { loadConfig2 } from "./loadConfig2"; @@ -15,16 +15,20 @@ import { loadRewardTable } from "./loadRewardTable"; import { loadServerList } from "./loadServerList"; import { loadStocker } from "./loadStocker"; import { loadTeamRanking } from "./loadTeamRanking"; +import { loadTopTen } from "./loadTopTen"; import { saveExpedition } from "./saveExpedition"; import { saveGarage } from "./saveGarage"; import { saveTopic } from "./saveTopic"; +import { unlockProfile } from "./unlockProfile"; import { updateProvisionalStoreRank } from "./updateProvisionalStoreRank"; import { updateStoryClearNum } from "./updateStoryClearNum"; import { Response } from "../response"; -import { loadTopTen } from "./loadTopTen"; function encode(res: Response): Buffer { switch (res.type) { + case "check_rank_res": + return checkRank(res); + case "create_team_res": return _team(res); diff --git a/src/idz/handler/checkRank.ts b/src/idz/handler/checkRank.ts new file mode 100644 index 0000000..c878901 --- /dev/null +++ b/src/idz/handler/checkRank.ts @@ -0,0 +1,9 @@ +import { CheckRankRequest } from "../request/checkRank"; +import { CheckRankResponse } from "../response/checkRank"; +import { World } from "../world"; + +export function checkRank(w: World, req: CheckRankRequest): CheckRankResponse { + return { + type: "check_rank_res", + }; +} diff --git a/src/idz/handler/index.ts b/src/idz/handler/index.ts index 626e583..11e01c6 100644 --- a/src/idz/handler/index.ts +++ b/src/idz/handler/index.ts @@ -1,4 +1,5 @@ import { _team } from "./_team"; +import { checkRank } from "./checkRank"; import { createProfile } from "./createProfile"; import { discoverProfile } from "./discoverProfile"; import { load2on2 } from "./load2on2"; @@ -21,13 +22,19 @@ import { saveStocker } from "./saveStocker"; import { saveTopic } from "./saveTopic"; import { unlockProfile } from "./unlockProfile"; import { updateProvisionalStoreRank } from "./updateProvisionalStoreRank"; +import { updateResult } from "./updateResult"; import { updateStoryClearNum } from "./updateStoryClearNum"; +import { updateTeamPoints } from "./updateTeamPoints"; +import { updateUiReport } from "./updateUiReport"; import { Request } from "../request"; import { Response } from "../response"; import { World } from "../world"; export async function dispatch(w: World, req: Request): Promise { switch (req.type) { + case "check_rank_req": + return checkRank(w, req); + case "create_profile_req": return createProfile(w, req); @@ -79,9 +86,6 @@ export async function dispatch(w: World, req: Request): Promise { case "save_expedition_req": return saveExpedition(w, req); - case "update_provisional_store_rank_req": - return updateProvisionalStoreRank(w, req); - case "save_garage_req": return saveGarage(w, req); @@ -91,9 +95,6 @@ export async function dispatch(w: World, req: Request): Promise { case "save_settings_req": return saveSettings(w, req); - case "update_story_clear_num_req": - return updateStoryClearNum(w, req); - case "save_topic_req": return saveTopic(w, req); @@ -103,6 +104,21 @@ export async function dispatch(w: World, req: Request): Promise { case "unlock_profile_req": return unlockProfile(w, req); + case "update_provisional_store_rank_req": + return updateProvisionalStoreRank(w, req); + + case "update_result_req": + return updateResult(req); + + case "update_story_clear_num_req": + return updateStoryClearNum(w, req); + + case "update_team_points_req": + return updateTeamPoints(w, req); + + case "update_ui_report_req": + return updateUiReport(w, req); + default: const exhaustCheck: never = req; diff --git a/src/idz/handler/updateResult.ts b/src/idz/handler/updateResult.ts new file mode 100644 index 0000000..2d7e744 --- /dev/null +++ b/src/idz/handler/updateResult.ts @@ -0,0 +1,7 @@ +import { UpdateResultRequest } from "../request/updateResult"; +import { GenericResponse } from "../response/generic"; + +export function updateResult(req: UpdateResultRequest): GenericResponse { + // Apparently field_000C in this supposedly-generic response matters here?! + return { type: "generic_res" }; +} diff --git a/src/idz/handler/updateTeamPoints.ts b/src/idz/handler/updateTeamPoints.ts new file mode 100644 index 0000000..7206e2b --- /dev/null +++ b/src/idz/handler/updateTeamPoints.ts @@ -0,0 +1,10 @@ +import { UpdateTeamPointsRequest } from "../request/updateTeamPoints"; +import { GenericResponse } from "../response/generic"; +import { World } from "../world"; + +export function updateTeamPoints( + w: World, + req: UpdateTeamPointsRequest +): GenericResponse { + return { type: "generic_res" }; +} diff --git a/src/idz/handler/updateUiReport.ts b/src/idz/handler/updateUiReport.ts new file mode 100644 index 0000000..0f65279 --- /dev/null +++ b/src/idz/handler/updateUiReport.ts @@ -0,0 +1,10 @@ +import { UpdateUiReportRequest } from "../request/updateUiReport"; +import { GenericResponse } from "../response/generic"; +import { World } from "../world"; + +export function updateUiReport( + w: World, + req: UpdateUiReportRequest +): GenericResponse { + return { type: "generic_res" }; +} diff --git a/src/idz/request/checkRank.ts b/src/idz/request/checkRank.ts new file mode 100644 index 0000000..c486ce0 --- /dev/null +++ b/src/idz/request/checkRank.ts @@ -0,0 +1,20 @@ +export interface CheckRankRequest { + type: "check_rank_req"; + field_0002: number; // u16, always 1 + field_0004: number; // u32 + field_0008: number; // u32 + field_000C: number; // u16 + field_0012: number; // u8 + field_0015: number; // u8 + field_0018: number; // u32 + field_0024: number; // u32 + field_0028: number; // u32 + field_002C: number; // u32 + field_0054: number; // u8 + field_0058: number; // u32 + field_005C: number; // u8 bit map + field_005D: number; // u8 + field_005E: number; // u16 + field_0060: number; // u16 + field_0062: number; // u8 +} diff --git a/src/idz/request/index.ts b/src/idz/request/index.ts index 0e2d2f9..5d75534 100644 --- a/src/idz/request/index.ts +++ b/src/idz/request/index.ts @@ -1,4 +1,4 @@ -import { UnlockProfileRequest } from "./unlockProfile"; +import { CheckRankRequest } from "./checkRank"; import { CreateProfileRequest } from "./createProfile"; import { CreateTeamRequest } from "./createTeam"; import { DiscoverProfileRequest } from "./discoverProfile"; @@ -21,10 +21,15 @@ import { SaveProfileRequest } from "./saveProfile"; import { SaveSettingsRequest } from "./saveSettings"; import { SaveStockerRequest } from "./saveStocker"; import { SaveTopicRequest } from "./saveTopic"; +import { UnlockProfileRequest } from "./unlockProfile"; import { UpdateProvisionalStoreRankRequest } from "./updateProvisionalStoreRank"; +import { UpdateResultRequest } from "./updateResult"; import { UpdateStoryClearNumRequest } from "./updateStoryClearNum"; +import { UpdateTeamPointsRequest } from "./updateTeamPoints"; +import { UpdateUiReportRequest } from "./updateUiReport"; export type Request = + | CheckRankRequest | CreateProfileRequest | CreateTeamRequest | DiscoverProfileRequest @@ -49,4 +54,7 @@ export type Request = | SaveTopicRequest | UnlockProfileRequest | UpdateProvisionalStoreRankRequest - | UpdateStoryClearNumRequest; + | UpdateResultRequest + | UpdateStoryClearNumRequest + | UpdateTeamPointsRequest + | UpdateUiReportRequest; diff --git a/src/idz/request/updateResult.ts b/src/idz/request/updateResult.ts new file mode 100644 index 0000000..405402f --- /dev/null +++ b/src/idz/request/updateResult.ts @@ -0,0 +1,16 @@ +export interface UpdateResultRequest { + type: "update_result_req"; + field_0002: number; + field_0004: number; + field_0008: number; + field_000C: number; + field_0010: number; + field_0014: number; + field_0016: number; + field_0018: number; + field_0019: number; + field_001A: number; + field_001C: number; + field_0020: number; + field_0024: number; +} diff --git a/src/idz/request/updateTeamPoints.ts b/src/idz/request/updateTeamPoints.ts new file mode 100644 index 0000000..09e3e29 --- /dev/null +++ b/src/idz/request/updateTeamPoints.ts @@ -0,0 +1,5 @@ +export interface UpdateTeamPointsRequest { + type: "update_team_points_req"; + field_0004: number; + field_0008: number; +} diff --git a/src/idz/request/updateUiReport.ts b/src/idz/request/updateUiReport.ts new file mode 100644 index 0000000..00d448c --- /dev/null +++ b/src/idz/request/updateUiReport.ts @@ -0,0 +1,5 @@ +export interface UpdateUiReportRequest { + type: "update_ui_report_req"; + field_02: number; + field_04: number; +} diff --git a/src/idz/response/checkRank.ts b/src/idz/response/checkRank.ts new file mode 100644 index 0000000..0ae48a3 --- /dev/null +++ b/src/idz/response/checkRank.ts @@ -0,0 +1,3 @@ +export interface CheckRankResponse { + type: "check_rank_res"; +} diff --git a/src/idz/response/index.ts b/src/idz/response/index.ts index bbf49b3..e88baeb 100644 --- a/src/idz/response/index.ts +++ b/src/idz/response/index.ts @@ -1,3 +1,4 @@ +import { CheckRankResponse } from "./checkRank"; import { CreateTeamResponse } from "./createTeam"; import { DiscoverProfileResponse } from "./discoverProfile"; import { GenericResponse } from "./generic"; @@ -22,7 +23,7 @@ import { SaveGarageResponse } from "./saveGarage"; import { SaveTopicResponse } from "./saveTopic"; export type Response = - | UnlockProfileResponse + | CheckRankResponse | CreateTeamResponse | DiscoverProfileResponse | GenericResponse @@ -39,6 +40,7 @@ export type Response = | LoadTeamRankingResponse | LockProfileResponse | LoadTopTenResponse + | UnlockProfileResponse | UpdateProvisionalStoreRankResponse | UpdateStoryClearNumResponse | SaveExpeditionResponse