diff --git a/src/controllers/custom/setAccountCheatController.ts b/src/controllers/custom/setAccountCheatController.ts index 07a1da4f..586cebb6 100644 --- a/src/controllers/custom/setAccountCheatController.ts +++ b/src/controllers/custom/setAccountCheatController.ts @@ -3,12 +3,19 @@ import { getAccountIdForRequest } from "../../services/loginService.ts"; import { sendWsBroadcastTo } from "../../services/wsService.ts"; import type { IAccountCheats } from "../../types/inventoryTypes/inventoryTypes.ts"; import type { RequestHandler } from "express"; +import { logger } from "../../utils/logger.ts"; export const setAccountCheatController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const payload = req.body as ISetAccountCheatRequest; const inventory = await getInventory(accountId, payload.key); - inventory[payload.key] = payload.value; + + if (payload.value == undefined) { + logger.warn(`Aborting setting ${payload.key} as undefined!`); + return; + } + + inventory[payload.key] = payload.value as never; await inventory.save(); res.end(); if (["infiniteCredits", "infinitePlatinum", "infiniteEndo", "infiniteRegalAya"].indexOf(payload.key) != -1) { @@ -18,5 +25,5 @@ export const setAccountCheatController: RequestHandler = async (req, res) => { interface ISetAccountCheatRequest { key: keyof IAccountCheats; - value: boolean; + value: IAccountCheats[keyof IAccountCheats]; } diff --git a/static/webui/script.js b/static/webui/script.js index bf971cf8..40b68999 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -1986,7 +1986,11 @@ function updateInventory() { } for (const elm of accountCheats) { - elm.checked = !!data[elm.id]; + if (elm.type === "checkbox") { + elm.checked = !!data[elm.id]; + } else if (elm.type === "number") { + elm.value = data[elm.id] !== undefined ? data[elm.id] : elm.getAttribute("data-default") || ""; + } } }); }); @@ -3214,9 +3218,10 @@ function doIntrinsicsUnlockAll() { }); } -document.querySelectorAll("#account-cheats input[type=checkbox]").forEach(elm => { +document.querySelectorAll("#account-cheats input[type=checkbox], #account-cheats input[type=number]").forEach(elm => { elm.onchange = function () { revalidateAuthz().then(() => { + const value = elm.type === "checkbox" ? elm.checked : elm.value; $.post({ url: "/custom/setAccountCheat?" + window.authz, contentType: "application/json", @@ -3237,7 +3242,7 @@ document.querySelectorAll("#guild-cheats input[type=checkbox]").forEach(elm => { contentType: "application/json", data: JSON.stringify({ key: elm.id, - value: elm.checked + value: value }) }); });