diff --git a/src/idz/decoder/index.ts b/src/idz/decoder/index.ts index cde1cdf..5e647fb 100644 --- a/src/idz/decoder/index.ts +++ b/src/idz/decoder/index.ts @@ -9,6 +9,7 @@ import { load2on2_v1, load2on2_v2 } from "./load2on2"; import { loadConfig } from "./loadConfig"; import { loadConfig2 } from "./loadConfig2"; import { loadEventInfo } from "./loadEventInfo"; +import { loadGacha } from "./loadGacha"; import { loadGarage } from "./loadGarage"; import { loadGeneralReward1, loadGeneralReward2 } from "./loadGeneralReward"; import { loadGhost } from "./loadGhost"; @@ -57,6 +58,7 @@ const funcList: ReaderFn[] = [ loadConfig, loadConfig2, loadEventInfo, + loadGacha, loadGarage, loadGeneralReward1, loadGeneralReward2, diff --git a/src/idz/decoder/loadGacha.ts b/src/idz/decoder/loadGacha.ts new file mode 100644 index 0000000..2b473d9 --- /dev/null +++ b/src/idz/decoder/loadGacha.ts @@ -0,0 +1,14 @@ +import { RequestCode } from "./_defs"; +import { LoadGachaRequest } from "../request/loadGacha"; +import { ExtId } from "../model/base"; +import { Profile } from "../model/profile"; + +loadGacha.msgCode = 0x00c1 as RequestCode; +loadGacha.msgLen = 0x0010; + +export function loadGacha(buf: Buffer): LoadGachaRequest { + return { + type: "load_gacha_req", + profileId: buf.readUInt32LE(0x0004) as ExtId, + }; +} diff --git a/src/idz/encoder/index.ts b/src/idz/encoder/index.ts index 77ae91c..4f8afca 100644 --- a/src/idz/encoder/index.ts +++ b/src/idz/encoder/index.ts @@ -10,6 +10,7 @@ import { load2on2 } from "./load2on2"; import { loadConfig } from "./loadConfig"; import { loadConfig2 } from "./loadConfig2"; import { loadEventInfo } from "./loadEventInfo"; +import { loadGacha } from "./loadGacha"; import { loadGarage } from "./loadGarage"; import { loadGeneralReward } from "./loadGeneralReward"; import { loadGhost } from "./loadGhost"; @@ -58,6 +59,9 @@ function encode(res: Response): Buffer { case "load_event_info_res": return loadEventInfo(res); + case "load_gacha_res": + return loadGacha(res); + case "load_garage_res": return loadGarage(res); diff --git a/src/idz/encoder/loadGacha.ts b/src/idz/encoder/loadGacha.ts new file mode 100644 index 0000000..12d7478 --- /dev/null +++ b/src/idz/encoder/loadGacha.ts @@ -0,0 +1,10 @@ +import { LoadGachaResponse } from "../response/loadGacha"; + +export function loadGacha(res: LoadGachaResponse): Buffer { + const buf = Buffer.alloc(0x0090); + + buf.writeUInt16LE(0x00c2, 0x0000); + buf.writeUInt8(res.awardedToday ? 0x01 : 0x00, 0x0002); + + return buf; +} diff --git a/src/idz/handler/index.ts b/src/idz/handler/index.ts index fcf16e5..6be85e8 100644 --- a/src/idz/handler/index.ts +++ b/src/idz/handler/index.ts @@ -7,6 +7,7 @@ import { load2on2 } from "./load2on2"; import { loadConfig } from "./loadConfig"; import { loadConfig2 } from "./loadConfig2"; import { loadEventInfo } from "./loadEventInfo"; +import { loadGacha } from "./loadGacha"; import { loadGarage } from "./loadGarage"; import { loadGeneralReward } from "./loadGeneralReward"; import { loadGhost } from "./loadGhost"; @@ -70,6 +71,9 @@ export async function dispatch( case "load_event_info_req": return loadEventInfo(w, req); + case "load_gacha_req": + return loadGacha(w, req); + case "load_garage_req": return loadGarage(w, req); diff --git a/src/idz/handler/loadGacha.ts b/src/idz/handler/loadGacha.ts new file mode 100644 index 0000000..b8706cd --- /dev/null +++ b/src/idz/handler/loadGacha.ts @@ -0,0 +1,13 @@ +import { Repositories } from "../repo"; +import { LoadGachaRequest } from "../request/loadGacha"; +import { LoadGachaResponse } from "../response/loadGacha"; + +export function loadGacha( + w: Repositories, + req: LoadGachaRequest +): LoadGachaResponse { + return { + type: "load_gacha_res", + awardedToday: true, // Disable for now, not even mapped out yet. + }; +} diff --git a/src/idz/request/index.ts b/src/idz/request/index.ts index 9c53fe3..e2049ef 100644 --- a/src/idz/request/index.ts +++ b/src/idz/request/index.ts @@ -7,6 +7,7 @@ import { Load2on2Request } from "./load2on2"; import { LoadConfigRequest } from "./loadConfig"; import { LoadConfigRequest2 } from "./loadConfig2"; import { LoadEventInfoRequest } from "./loadEventInfo"; +import { LoadGachaRequest } from "./loadGacha"; import { LoadGarageRequest } from "./loadGarage"; import { LoadGeneralRewardRequest } from "./loadGeneralReward"; import { LoadGhostRequest } from "./loadGhost"; @@ -46,6 +47,7 @@ export type Request = | LoadConfigRequest | LoadConfigRequest2 | LoadEventInfoRequest + | LoadGachaRequest | LoadGarageRequest | LoadGeneralRewardRequest | LoadGhostRequest diff --git a/src/idz/request/loadGacha.ts b/src/idz/request/loadGacha.ts new file mode 100644 index 0000000..65b06af --- /dev/null +++ b/src/idz/request/loadGacha.ts @@ -0,0 +1,7 @@ +import { ExtId } from "../model/base"; +import { Profile } from "../model/profile"; + +export interface LoadGachaRequest { + type: "load_gacha_req"; + profileId: ExtId; +} diff --git a/src/idz/response/index.ts b/src/idz/response/index.ts index 46bb1bc..d994bbb 100644 --- a/src/idz/response/index.ts +++ b/src/idz/response/index.ts @@ -7,6 +7,7 @@ import { Load2on2Response } from "./load2on2"; import { LoadConfigResponse } from "./loadConfig"; import { LoadConfigResponse2 } from "./loadConfig2"; import { LoadEventInfoResponse } from "./loadEventInfo"; +import { LoadGachaResponse } from "./loadGacha"; import { LoadGarageResponse } from "./loadGarage"; import { LoadGeneralRewardResponse } from "./loadGeneralReward"; import { LoadGhostResponse } from "./loadGhost"; @@ -37,6 +38,7 @@ export type Response = | LoadConfigResponse | LoadConfigResponse2 | LoadEventInfoResponse + | LoadGachaResponse | LoadGarageResponse | LoadGeneralRewardResponse | LoadGhostResponse diff --git a/src/idz/response/loadGacha.ts b/src/idz/response/loadGacha.ts new file mode 100644 index 0000000..c74aa3e --- /dev/null +++ b/src/idz/response/loadGacha.ts @@ -0,0 +1,4 @@ +export interface LoadGachaResponse { + type: "load_gacha_res"; + awardedToday: boolean; +}