From d8a389fa7f382147702f2a99e9a98cbcac030a40 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Wed, 27 Aug 2025 04:47:59 +0200 Subject: [PATCH] feat(webui): add item by ItemType --- src/services/inventoryService.ts | 24 ++++++++++++++++++ static/webui/index.html | 33 +++++++++++++++++++++---- static/webui/script.js | 42 ++++++++++++++++++++++++++++---- static/webui/translations/de.js | 4 +++ static/webui/translations/en.js | 4 +++ static/webui/translations/es.js | 4 +++ static/webui/translations/fr.js | 4 +++ static/webui/translations/ru.js | 4 +++ static/webui/translations/uk.js | 4 +++ static/webui/translations/zh.js | 4 +++ 10 files changed, 117 insertions(+), 10 deletions(-) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index c8e25c1b..1ecae8a8 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -689,6 +689,7 @@ export const addItem = async ( // Path-based duck typing switch (typeName.substr(1).split("/")[1]) { case "Powersuits": + if (typeName.endsWith("AugmentCard")) break; switch (typeName.substr(1).split("/")[2]) { default: { return { @@ -773,6 +774,10 @@ export const addItem = async ( } } break; + + case "Skins": { + return addSkin(inventory, typeName); + } } break; } @@ -869,6 +874,25 @@ export const addItem = async ( break; } break; + case "Weapons": + if (typeName.substr(1).split("/")[4] == "MeleeTrees") break; + let productCategory = typeName.substr(1).split("/")[3]; + switch (productCategory) { + case "Pistols": + case "LongGuns": + case "Melee": { + const inventoryChanges = addEquipment(inventory, productCategory, typeName); + return { + ...inventoryChanges, + ...occupySlot( + inventory, + productCategoryToInventoryBin(productCategory) ?? InventorySlot.WEAPONS, + premiumPurchase + ) + }; + } + } + break; } throw new Error(`unable to add item: ${typeName}`); }; diff --git a/static/webui/index.html b/static/webui/index.html index 52e278f2..23e564f1 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -93,11 +93,34 @@

-
- - - -
+
+ +
+
+
+ + + +
+
+
+
+

+
+ + +
+
+
+
+
diff --git a/static/webui/script.js b/static/webui/script.js index 6feb4020..cd970901 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -649,6 +649,14 @@ function updateInventory() { ]; // Populate inventory route + + document.getElementById("typeName-tab").classList.remove("active"); + document.getElementById("typeName").classList.remove("active", "show"); + document.getElementById("itemType-type").value = ""; + + document.getElementById("miscItems-tab").classList.add("active"); + document.getElementById("miscItems").classList.add("active", "show"); + ["RegularCredits", "PremiumCredits", "FusionPoints", "PrimeTokens"].forEach(currency => { document.getElementById(currency + "-owned").textContent = loc("currency_owned") .split("|COUNT|") @@ -1685,7 +1693,7 @@ function doAcquireEvolution() { setEvolutionProgress([{ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 }]); } -$(document).on("input", "input[list]", function () { +$(document).on("input", "input", function () { $(this).removeClass("is-invalid"); }); @@ -2008,6 +2016,34 @@ function doAcquireMiscItems() { } } +function addItemByItemType() { + const ItemType = document.getElementById("itemType-type").value; + if (!ItemType || !/^[A-Za-z/]+$/.test(ItemType) || !ItemType.startsWith("/Lotus/")) { + $("#itemType-type").addClass("is-invalid").focus(); + return; + } + revalidateAuthz().then(() => { + $.post({ + url: "/custom/addItems?" + window.authz, + contentType: "application/json", + data: JSON.stringify([ + { + ItemType, + ItemCount: 1 + } + ]) + }) + .done(function (_, _, jqXHR) { + if (jqXHR.status === 200) { + updateInventory(); + } + }) + .fail(function () { + $("#itemType-type").addClass("is-invalid").focus(); + }); + }); +} + function doAcquireRiven() { let fingerprint; try { @@ -2070,10 +2106,6 @@ function doAcquireRiven() { }); } -$("#addriven-fingerprint").on("input", () => { - $("#addriven-fingerprint").removeClass("is-invalid"); -}); - function setFingerprint(ItemType, ItemId, fingerprint) { revalidateAuthz().then(() => { $.post({ diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js index 42637903..f2996d58 100644 --- a/static/webui/translations/de.js +++ b/static/webui/translations/de.js @@ -382,5 +382,9 @@ dict = { theme_dark: `Dunkles Design`, theme_light: `Helles Design`, + addMiscItems_label: `[UNTRANSLATED] Add by Name`, + addItemByItemType_label: `[UNTRANSLATED] Add By ItemType`, + addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js index 76fbfd3b..295dca1f 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -381,5 +381,9 @@ dict = { theme_dark: `Dark Theme`, theme_light: `Light Theme`, + addMiscItems_label: `Add by Name`, + addItemByItemType_label: `Add By ItemType`, + addItemByItemType_warning: `Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js index e5ddb59d..3ebc1f97 100644 --- a/static/webui/translations/es.js +++ b/static/webui/translations/es.js @@ -382,5 +382,9 @@ dict = { theme_dark: `Tema Oscuro`, theme_light: `Tema Claro`, + addMiscItems_label: `[UNTRANSLATED] Add by Name`, + addItemByItemType_label: `[UNTRANSLATED] Add By ItemType`, + addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js index 2c802a8d..4547c0ce 100644 --- a/static/webui/translations/fr.js +++ b/static/webui/translations/fr.js @@ -382,5 +382,9 @@ dict = { theme_dark: `Thème sombre`, theme_light: `Thème clair`, + addMiscItems_label: `[UNTRANSLATED] Add by Name`, + addItemByItemType_label: `[UNTRANSLATED] Add By ItemType`, + addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index 961d63ab..f9b6e54f 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -382,5 +382,9 @@ dict = { theme_dark: `Темная тема`, theme_light: `Светлая тема`, + addMiscItems_label: `По имени`, + addItemByItemType_label: `По ItemType`, + addItemByItemType_warning: `Используйте эту функцию на свой страх и риск. Она может повредить ваш инвентарь, и в случае проблем вам придётся удалять предметы вручную.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/uk.js b/static/webui/translations/uk.js index d820559c..7c9f38ce 100644 --- a/static/webui/translations/uk.js +++ b/static/webui/translations/uk.js @@ -382,5 +382,9 @@ dict = { theme_dark: `Темна тема`, theme_light: `Світла тема`, + addMiscItems_label: `[UNTRANSLATED] Add by Name`, + addItemByItemType_label: `[UNTRANSLATED] Add By ItemType`, + addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` }; diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index bc199a17..d66a0162 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -382,5 +382,9 @@ dict = { theme_dark: `暗色主题`, theme_light: `亮色主题`, + addMiscItems_label: `[UNTRANSLATED] Add by Name`, + addItemByItemType_label: `[UNTRANSLATED] Add By ItemType`, + addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`, + prettier_sucks_ass: `` };