返回提交历史
Modified
src/services/inventoryService.ts
+25
-0
Modified
static/webui/index.html
+30
-6
Modified
static/webui/script.js
+38
-1
Modified
static/webui/translations/de.js
+2
-0
Modified
static/webui/translations/en.js
+2
-0
Modified
static/webui/translations/es.js
+2
-0
Modified
static/webui/translations/fr.js
+2
-0
Modified
static/webui/translations/ru.js
+2
-0
Modified
static/webui/translations/uk.js
+2
-0
Modified
static/webui/translations/zh.js
+2
-0
XFEstudio/XFESpaceNinjaServer
feat(webui): add item by ItemType (#2704)
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2704 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
e98cb2ec
代码差异
10 个文件
+107
-7
@@ -689,6 +689,7 @@ export const addItem = async (
689
689
// Path-based duck typing
690
690
switch (typeName.substr(1).split("/")[1]) {
691
691
case "Powersuits":
692
if (typeName.endsWith("AugmentCard")) break;
692
693
switch (typeName.substr(1).split("/")[2]) {
693
694
default: {
694
695
return {
@@ -773,6 +774,10 @@ export const addItem = async (
773
774
}
774
775
}
775
776
break;
777
778
case "Skins": {
779
return addSkin(inventory, typeName);
780
}
776
781
}
777
782
break;
778
783
}
@@ -869,6 +874,26 @@ export const addItem = async (
869
874
break;
870
875
}
871
876
break;
877
case "Weapons": {
878
if (typeName.substr(1).split("/")[4] == "MeleeTrees") break;
879
const productCategory = typeName.substr(1).split("/")[3];
880
switch (productCategory) {
881
case "Pistols":
882
case "LongGuns":
883
case "Melee": {
884
const inventoryChanges = addEquipment(inventory, productCategory, typeName);
885
return {
886
...inventoryChanges,
887
...occupySlot(
888
inventory,
889
productCategoryToInventoryBin(productCategory) ?? InventorySlot.WEAPONS,
890
premiumPurchase
891
)
892
};
893
}
894
}
895
break;
896
}
872
897
}
873
898
throw new Error(`unable to add item: ${typeName}`);
874
899
};
@@ -92,12 +92,36 @@
92
92
<div data-route="/webui/inventory" data-title="Inventory | OpenWF WebUI">
93
93
<p class="mb-3" data-loc="general_inventoryUpdateNote"></p>
94
94
<div class="card mb-3">
95
<h5 class="card-header" data-loc="inventory_addItems"></h5>
96
<form class="card-body input-group" onsubmit="doAcquireMiscItems();return false;">
97
<input class="form-control" id="miscitem-count" type="number" value="1" />
98
<input class="form-control w-50" id="miscitem-type" list="datalist-miscitems" />
99
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
100
</form>
95
<div class="card-header">
96
<ul class="nav nav-tabs card-header-tabs">
97
<li class="nav-item">
98
<button class="nav-link" id="miscItems-tab" data-bs-toggle="tab" data-bs-target="#miscItems-tab-content" data-loc="inventory_addItems"></button>
99
</li>
100
<li class="nav-item">
101
<button class="nav-link" id="typeName-tab" data-bs-toggle="tab" data-bs-target="#typeName-tab-content" data-loc="inventory_addItemByItemType"></button>
102
</li>
103
</ul>
104
</div>
105
<div class="card-body">
106
<div class="tab-content">
107
<div class="tab-pane" id="miscItems-tab-content">
108
<form class="card-body input-group" onsubmit="doAcquireMiscItems();return false;">
109
<input class="form-control" id="miscitem-count" type="number" value="1" />
110
<input class="form-control w-50" id="miscitem-type" list="datalist-miscitems" />
111
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
112
</form>
113
</div>
114
<div class="tab-pane" id="typeName-tab-content">
115
<form class="card-body" onsubmit="addItemByItemType();return false;">
116
<p data-loc="inventory_addItemByItemType_warning"></p>
117
<div class="input-group">
118
<input class="form-control" id="typeName-type" />
119
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
120
</div>
121
</form>
122
</div>
123
</div>
124
</div>
101
125
</div>
102
126
<div class="row g-3 mb-3">
103
127
<div class="col-md-3">
@@ -649,6 +649,14 @@ function updateInventory() {
649
649
];
650
650
651
651
// Populate inventory route
652
653
document.getElementById("typeName-tab").classList.remove("active");
654
document.getElementById("typeName-tab-content").classList.remove("active", "show");
655
document.getElementById("typeName-type").value = "";
656
657
document.getElementById("miscItems-tab").classList.add("active");
658
document.getElementById("miscItems-tab-content").classList.add("active", "show");
659
652
660
["RegularCredits", "PremiumCredits", "FusionPoints", "PrimeTokens"].forEach(currency => {
653
661
document.getElementById(currency + "-owned").textContent = loc("currency_owned")
654
662
.split("|COUNT|")
@@ -1685,7 +1693,7 @@ function doAcquireEvolution() {
1685
1693
setEvolutionProgress([{ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 }]);
1686
1694
}
1687
1695
1688
$(document).on("input", "input[list]", function () {
1696
$(document).on("input", "input", function () {
1689
1697
$(this).removeClass("is-invalid");
1690
1698
});
1691
1699
@@ -2008,6 +2016,35 @@ function doAcquireMiscItems() {
2008
2016
}
2009
2017
}
2010
2018
2019
function addItemByItemType() {
2020
const ItemType = document.getElementById("typeName-type").value;
2021
// Must start with "/Lotus/", contain only A–Z letters, no "//", and not end with "/"
2022
if (!ItemType || !/^\/Lotus\/(?:[A-Za-z]+(?:\/[A-Za-z]+)*)$/.test(ItemType)) {
2023
$("#typeName-type").addClass("is-invalid").focus();
2024
return;
2025
}
2026
revalidateAuthz().then(() => {
2027
$.post({
2028
url: "/custom/addItems?" + window.authz,
2029
contentType: "application/json",
2030
data: JSON.stringify([
2031
{
2032
ItemType,
2033
ItemCount: 1
2034
}
2035
])
2036
})
2037
.done(function (_, _, jqXHR) {
2038
if (jqXHR.status === 200) {
2039
updateInventory();
2040
}
2041
})
2042
.fail(function () {
2043
$("#typeName-type").addClass("is-invalid").focus();
2044
});
2045
});
2046
}
2047
2011
2048
function doAcquireRiven() {
2012
2049
let fingerprint;
2013
2050
try {
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `Cheats`,
80
80
navbar_import: `Importieren`,
81
81
inventory_addItems: `Gegenstände hinzufügen`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_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.`,
82
84
inventory_suits: `Warframes`,
83
85
inventory_longGuns: `Primärwaffen`,
84
86
inventory_pistols: `Sekundärwaffen`,
@@ -78,6 +78,8 @@ dict = {
78
78
navbar_cheats: `Cheats`,
79
79
navbar_import: `Import`,
80
80
inventory_addItems: `Add Items`,
81
inventory_addItemByItemType: `Raw`,
82
inventory_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.`,
81
83
inventory_suits: `Warframes`,
82
84
inventory_longGuns: `Primary Weapons`,
83
85
inventory_pistols: `Secondary Weapons`,
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `Trucos`,
80
80
navbar_import: `Importar`,
81
81
inventory_addItems: `Agregar objetos`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_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.`,
82
84
inventory_suits: `Warframes`,
83
85
inventory_longGuns: `Armas primarias`,
84
86
inventory_pistols: `Armas secundarias`,
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `Cheats`,
80
80
navbar_import: `Importer`,
81
81
inventory_addItems: `Ajouter des items`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_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.`,
82
84
inventory_suits: `Warframes`,
83
85
inventory_longGuns: `Armes principales`,
84
86
inventory_pistols: `Armes secondaires`,
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `Читы`,
80
80
navbar_import: `Импорт`,
81
81
inventory_addItems: `Добавить предметы`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_addItemByItemType_warning: `Используйте эту функцию на свой страх и риск. Она может повредить ваш инвентарь, и в случае проблем вам придётся удалять предметы вручную.`,
82
84
inventory_suits: `Варфреймы`,
83
85
inventory_longGuns: `Основное оружие`,
84
86
inventory_pistols: `Вторичное оружие`,
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `Чити`,
80
80
navbar_import: `Імпорт`,
81
81
inventory_addItems: `Додати предмети`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_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.`,
82
84
inventory_suits: `Ворфрейми`,
83
85
inventory_longGuns: `Основна зброя`,
84
86
inventory_pistols: `Допоміжна зброя`,
@@ -79,6 +79,8 @@ dict = {
79
79
navbar_cheats: `作弊选项`,
80
80
navbar_import: `导入`,
81
81
inventory_addItems: `添加物品`,
82
inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
83
inventory_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.`,
82
84
inventory_suits: `战甲`,
83
85
inventory_longGuns: `主要武器`,
84
86
inventory_pistols: `次要武器`,