diff --git a/src/cmds/archive.ts b/src/cmds/archive.ts index f9890e5e..15a9b649 100644 --- a/src/cmds/archive.ts +++ b/src/cmds/archive.ts @@ -321,6 +321,25 @@ async function fetchAndSaveLatestGamePatches(gameTargets: GameTarget[]) { await Bun.write(patchAllPath, JSON.stringify(patchAll, null, 2)); } } + for (const target of gameTargets) { + const patchAllPath = path.join( + argvUtils.getArgv()['outputDir'], + 'akEndfield', + 'launcher', + 'game', + target.dirName, + 'all_patch.json', + ); + const patchAll: StoredData[] = (await Bun.file(patchAllPath).exists()) + ? await Bun.file(patchAllPath).json() + : []; + for (const e of patchAll) { + if (!e.rsp.patch) continue; + const v2PatchInfoUrl = e.rsp.patch.v2_patch_info_url; + if (!v2PatchInfoUrl) continue; + await downloadRawFile(v2PatchInfoUrl); + } + } } async function fetchAndSaveLatestGameResources(gameTargets: GameTarget[]) { @@ -409,7 +428,7 @@ async function downloadRawFile(url: string) { try { const data = await ky - .get(urlObj.href, { + .get(url, { headers: { 'User-Agent': appConfig.network.userAgent.minimum }, timeout: appConfig.network.timeout, retry: { limit: appConfig.network.retryCount }, @@ -587,7 +606,7 @@ async function fetchAndSaveLatestWebApis(gameTargets: GameTarget[]) { { name: 'mainBgImage', method: apiUtils.akEndfield.launcherWeb.mainBgImage, dir: 'main_bg_image' }, { name: 'banner', method: apiUtils.akEndfield.launcherWeb.banner, dir: 'banner' }, { name: 'announcement', method: apiUtils.akEndfield.launcherWeb.announcement, dir: 'announcement' }, - { name: 'urlConfig', method: apiUtils.akEndfield.launcherWeb.urlConfig, dir: 'url_config' } + { name: 'urlConfig', method: apiUtils.akEndfield.launcherWeb.urlConfig, dir: 'url_config' }, ] as const; for (const target of gameTargets) { diff --git a/src/types/api/akEndfield/Api.ts b/src/types/api/akEndfield/Api.ts index 99e5d903..0273605e 100644 --- a/src/types/api/akEndfield/Api.ts +++ b/src/types/api/akEndfield/Api.ts @@ -34,6 +34,9 @@ type LauncherLatestGame = { md5: string; package_size: string; }[]; + v2_patch_info_url: string; + v2_patch_info_size: string; + v2_patch_info_md5: string; } | null; state: number; launcher_action: number; @@ -559,37 +562,37 @@ type GameHubGiftCodeRedeem = { }; export type { - LauncherProtocol, - LauncherLatestGame, - LauncherLatestGameResources, - LauncherLatestLauncher, - LauncherLatestLauncherExe, - LauncherWebSidebar, - LauncherWebSingleEnt, - LauncherWebMainBgImage, - LauncherWebBanner, - LauncherWebAnnouncement, - LauncherWebUrlConfig, AccSrvUserAuthV1TokenByEmail, AccSrvUserInfoV1Basic, AccSrvUserInfoV1ThirdParty, AccSrvUserOAuth2V2Grant, AccSrvUserOAuth2V2GrantType1, - U8UserAuthV2ChToken, - U8UserAuthV2Grant, - U8GameServerV1ServerList, - U8GameRoleV1ConfirmServer, BindApiAccBindV1BindList, BindApiAccBindV1U8TokenByUid, BindApiGeneralV1AuthAppList, + GameHubGiftCodeRedeem, + LauncherLatestGame, + LauncherLatestGameResources, + LauncherLatestLauncher, + LauncherLatestLauncherExe, + LauncherProtocol, + LauncherWebAnnouncement, + LauncherWebBanner, + LauncherWebMainBgImage, + LauncherWebSidebar, + LauncherWebSingleEnt, + LauncherWebUrlConfig, + U8GameRoleV1ConfirmServer, + U8GameServerV1ServerList, + U8UserAuthV2ChToken, + U8UserAuthV2Grant, WebViewRecordChar, WebViewRecordContent, + ZonaiApiV1GamePlayerBinding, + ZonaiWebV1GameEndfieldAttendance, + ZonaiWebV1GameEndfieldAttendanceRecord, ZonaiWebV1UserAuthGenCredByCode, ZonaiWebV1UserCheck, ZonaiWebV1WikiMe, ZonaiWebV2User, - ZonaiApiV1GamePlayerBinding, - ZonaiWebV1GameEndfieldAttendance, - ZonaiWebV1GameEndfieldAttendanceRecord, - GameHubGiftCodeRedeem, };