From 8ed1c1416629c650ddecae7b1949046b10ba8487 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sat, 29 Mar 2025 21:52:04 +0100 Subject: [PATCH] feat(webui): gild action for modular equipment --- .../custom/gildEquipmentController.ts | 23 +++++++++++ src/routes/custom.ts | 2 + static/webui/script.js | 40 +++++++++++++++++++ static/webui/translations/de.js | 1 + static/webui/translations/en.js | 1 + static/webui/translations/fr.js | 1 + static/webui/translations/ru.js | 1 + static/webui/translations/zh.js | 1 + 8 files changed, 70 insertions(+) create mode 100644 src/controllers/custom/gildEquipmentController.ts diff --git a/src/controllers/custom/gildEquipmentController.ts b/src/controllers/custom/gildEquipmentController.ts new file mode 100644 index 00000000..46716207 --- /dev/null +++ b/src/controllers/custom/gildEquipmentController.ts @@ -0,0 +1,23 @@ +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; +import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; + +export const gildEquipmentController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const request = req.body as IGildEquipmentRequest; + const inventory = await getInventory(accountId, request.Category); + const weapon = inventory[request.Category].id(request.ItemId); + if (weapon) { + weapon.Features ??= 0; + weapon.Features |= EquipmentFeatures.GILDED; + await inventory.save(); + } + res.end(); +}; + +type IGildEquipmentRequest = { + ItemId: string; + Category: TEquipmentKey; +}; diff --git a/src/routes/custom.ts b/src/routes/custom.ts index 20f19a59..5367c5b4 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -16,6 +16,7 @@ import { createMessageController } from "@/src/controllers/custom/createMessageC import { addCurrencyController } from "../controllers/custom/addCurrencyController"; import { addItemsController } from "@/src/controllers/custom/addItemsController"; import { addXpController } from "@/src/controllers/custom/addXpController"; +import { gildEquipmentController } from "@/src/controllers/custom/gildEquipmentController"; import { importController } from "@/src/controllers/custom/importController"; import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController"; @@ -40,6 +41,7 @@ customRouter.post("/createMessage", createMessageController); customRouter.post("/addCurrency", addCurrencyController); customRouter.post("/addItems", addItemsController); customRouter.post("/addXp", addXpController); +customRouter.post("/gildEquipment", gildEquipmentController); customRouter.post("/import", importController); customRouter.post("/manageQuests", manageQuestsController); diff --git a/static/webui/script.js b/static/webui/script.js index 8697414e..5c957438 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -255,6 +255,20 @@ function updateInventory() { window.itemListPromise.then(itemMap => { window.didInitialInventoryUpdate = true; + const modularWeapons = [ + "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimary", + "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryBeam", + "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryLauncher", + "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryShotgun", + "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimarySniper", + "/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary", + "/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryBeam", + "/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryShotgun", + "/Lotus/Weapons/Ostron/Melee/LotusModularWeapon", + "/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon", + "/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit" + ]; + // Populate inventory route ["RegularCredits", "PremiumCredits", "FusionPoints", "PrimeTokens"].forEach(currency => { document.getElementById(currency + "-owned").textContent = loc("currency_owned") @@ -341,6 +355,17 @@ function updateInventory() { a.innerHTML = ``; td.appendChild(a); } + if (!(item.Features & 8) && modularWeapons.includes(item.ItemType)) { + const a = document.createElement("a"); + a.href = "#"; + a.onclick = function (event) { + event.preventDefault(); + gildEquipment(category, item.ItemId.$oid); + }; + a.title = loc("code_gild"); + a.innerHTML = ``; + td.appendChild(a); + } if (category == "Suits") { const a = document.createElement("a"); a.href = "/webui/powersuit/" + item.ItemId.$oid; @@ -806,6 +831,21 @@ function disposeOfItems(category, type, count) { }); } +function gildEquipment(category, oid) { + revalidateAuthz(() => { + $.post({ + url: "/custom/gildEquipment?" + window.authz, + contentType: "application/json", + data: JSON.stringify({ + ItemId: oid, + Category: category + }) + }).done(function () { + updateInventory(); + }); + }); +} + function doAcquireMiscItems() { const uniqueName = getKey(document.getElementById("miscitem-type")); if (!uniqueName) { diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js index 4aa6d562..fbafd106 100644 --- a/static/webui/translations/de.js +++ b/static/webui/translations/de.js @@ -40,6 +40,7 @@ dict = { code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`, code_addModsConfirm: `Bist du sicher, dass du |COUNT| Mods zu deinem Account hinzufügen möchtest?`, code_succImport: `Erfolgreich importiert.`, + code_gild: `[UNTRANSLATED] Gild`, login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`, login_emailLabel: `E-Mail-Adresse`, login_passwordLabel: `Passwort`, diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js index ee197c9e..a873626b 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -39,6 +39,7 @@ dict = { code_focusUnlocked: `Unlocked |COUNT| new focus schools! An inventory update will be needed for the changes to be reflected in-game. Visiting the navigation should be the easiest way to trigger that.`, code_addModsConfirm: `Are you sure you want to add |COUNT| mods to your account?`, code_succImport: `Successfully imported.`, + code_gild: `Gild`, login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`, login_emailLabel: `Email address`, login_passwordLabel: `Password`, diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js index c51695bd..75e0bf95 100644 --- a/static/webui/translations/fr.js +++ b/static/webui/translations/fr.js @@ -40,6 +40,7 @@ dict = { code_focusUnlocked: `|COUNT| écoles de Focus déverrouillées ! Synchronisation de l'inventaire nécessaire.`, code_addModsConfirm: `Ajouter |COUNT| mods à l'inventaire ?`, code_succImport: `Importé.`, + code_gild: `[UNTRANSLATED] Gild`, login_description: `Connexion avec les informations de connexion OpenWF.`, login_emailLabel: `Email`, login_passwordLabel: `Mot de passe`, diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index 5af34072..5f588dd8 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -40,6 +40,7 @@ dict = { code_focusUnlocked: `Разблокировано |COUNT| новых школ фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`, code_addModsConfirm: `Вы уверены, что хотите добавить |COUNT| модов на ваш аккаунт?`, code_succImport: `Успешно импортировано.`, + code_gild: `Улучшить`, login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`, login_emailLabel: `Адрес электронной почты`, login_passwordLabel: `Пароль`, diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index dbcf45d0..3bce6ed3 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -40,6 +40,7 @@ dict = { code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新。`, code_addModsConfirm: `确定要向账户添加 |COUNT| 张MOD吗?`, code_succImport: `导入成功。`, + code_gild: `[UNTRANSLATED] Gild`, login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)。`, login_emailLabel: `电子邮箱`, login_passwordLabel: `密码`,