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: ``
};