XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

chore(webui): split weapons by category (#820)

4ce03ad5
Sainan <sainan@calamity.inc>
提交于

代码差异

3 个文件 +83 -58
Modified src/controllers/custom/getItemListsController.ts +27 -22
@@ -17,23 +17,30 @@ interface ListedItem {
17 17 fusionLimit?: number;
18 18 }
19 19
20 const getItemListsController: RequestHandler = (req, res) => {
20 const getItemListsController: RequestHandler = (req, response) => {
21 21 const lang = getDict(typeof req.query.lang == "string" ? req.query.lang : "en");
22 const weapons = [];
23 const miscitems = [];
22 const res: Record<string, ListedItem[]> = {};
23 res.LongGuns = [];
24 res.Pistols = [];
25 res.Melee = [];
26 res.miscitems = [];
24 27 for (const [uniqueName, item] of Object.entries(ExportWeapons)) {
25 if (item.productCategory !== "OperatorAmps") {
26 if (item.totalDamage !== 0) {
27 weapons.push({
28 if (item.totalDamage !== 0) {
29 if (
30 item.productCategory == "LongGuns" ||
31 item.productCategory == "Pistols" ||
32 item.productCategory == "Melee"
33 ) {
34 res[item.productCategory].push({
28 35 uniqueName,
29 36 name: getString(item.name, lang)
30 37 });
31 } else if (!item.excludeFromCodex) {
32 miscitems.push({
33 uniqueName: "MiscItems:" + uniqueName,
34 name: getString(item.name, lang)
35 });
36 38 }
39 } else if (!item.excludeFromCodex) {
40 res.miscitems.push({
41 uniqueName: "MiscItems:" + uniqueName,
42 name: getString(item.name, lang)
43 });
37 44 }
38 45 }
39 46 for (const [uniqueName, item] of Object.entries(ExportResources)) {
@@ -48,13 +55,13 @@ const getItemListsController: RequestHandler = (req, res) => {
48 55 name = name.split("|FISH_SIZE|").join(getString("/Lotus/Language/Fish/FishSizeSmallAbbrev", lang));
49 56 }
50 57 }
51 miscitems.push({
58 res.miscitems.push({
52 59 uniqueName: item.productCategory + ":" + uniqueName,
53 60 name: name
54 61 });
55 62 }
56 63 for (const [uniqueName, item] of Object.entries(ExportGear)) {
57 miscitems.push({
64 res.miscitems.push({
58 65 uniqueName: "Consumables:" + uniqueName,
59 66 name: getString(item.name, lang)
60 67 });
@@ -64,7 +71,7 @@ const getItemListsController: RequestHandler = (req, res) => {
64 71 if (!item.hidden) {
65 72 const resultName = getItemName(item.resultType);
66 73 if (resultName) {
67 miscitems.push({
74 res.miscitems.push({
68 75 uniqueName: "Recipes:" + uniqueName,
69 76 name: recipeNameTemplate.replace("|ITEM|", getString(resultName, lang))
70 77 });
@@ -72,10 +79,10 @@ const getItemListsController: RequestHandler = (req, res) => {
72 79 }
73 80 }
74 81
75 const mods: ListedItem[] = [];
82 res.mods = [];
76 83 const badItems: Record<string, boolean> = {};
77 84 for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
78 mods.push({
85 res.mods.push({
79 86 uniqueName,
80 87 name: getString(upgrade.name, lang),
81 88 fusionLimit: upgrade.fusionLimit
@@ -85,7 +92,7 @@ const getItemListsController: RequestHandler = (req, res) => {
85 92 }
86 93 }
87 94 for (const [uniqueName, arcane] of Object.entries(ExportArcanes)) {
88 mods.push({
95 res.mods.push({
89 96 uniqueName,
90 97 name: getString(arcane.name, lang)
91 98 });
@@ -94,7 +101,7 @@ const getItemListsController: RequestHandler = (req, res) => {
94 101 }
95 102 }
96 103
97 res.json({
104 response.json({
98 105 warframes: Object.entries(ExportWarframes)
99 106 .filter(([_uniqueName, warframe]) => warframe.productCategory == "Suits")
100 107 .map(([uniqueName, warframe]) => {
@@ -104,11 +111,9 @@ const getItemListsController: RequestHandler = (req, res) => {
104 111 exalted: warframe.exalted
105 112 };
106 113 }),
107 weapons,
108 miscitems,
109 mods,
110 114 badItems,
111 archonCrystalUpgrades
115 archonCrystalUpgrades,
116 ...res
112 117 });
113 118 };
114 119
Modified static/webui/index.html +39 -7
@@ -96,7 +96,7 @@
96 96 </div>
97 97 <div class="row g-3">
98 98 <div class="col-lg-6">
99 <div class="card mb-3" style="height: 480px;">
99 <div class="card mb-3" style="height: 400px;">
100 100 <h5 class="card-header">Warframes</h5>
101 101 <div class="card-body overflow-auto">
102 102 <form class="input-group mb-3" onsubmit="doAcquireWarframe();return false;">
@@ -110,15 +110,45 @@
110 110 </div>
111 111 </div>
112 112 <div class="col-lg-6">
113 <div class="card mb-3" style="height: 480px;">
114 <h5 class="card-header">Weapons</h5>
113 <div class="card mb-3" style="height: 400px;">
114 <h5 class="card-header">Primary Weapons</h5>
115 115 <div class="card-body overflow-auto">
116 <form class="input-group mb-3" onsubmit="doAcquireWeapon();return false;">
117 <input class="form-control" id="weapon-to-acquire" list="datalist-weapons" />
116 <form class="input-group mb-3" onsubmit="doAcquireWeapon('LongGuns');return false;">
117 <input class="form-control" id="acquire-type-LongGuns" list="datalist-LongGuns" />
118 118 <button class="btn btn-primary" type="submit">Add</button>
119 119 </form>
120 120 <table class="table table-hover w-100">
121 <tbody id="weapon-list"></tbody>
121 <tbody id="LongGuns-list"></tbody>
122 </table>
123 </div>
124 </div>
125 </div>
126 </div>
127 <div class="row g-3">
128 <div class="col-lg-6">
129 <div class="card mb-3" style="height: 400px;">
130 <h5 class="card-header">Secondary Weapons</h5>
131 <div class="card-body overflow-auto">
132 <form class="input-group mb-3" onsubmit="doAcquireWeapon('Pistols');return false;">
133 <input class="form-control" id="acquire-type-Pistols" list="datalist-Pistols" />
134 <button class="btn btn-primary" type="submit">Add</button>
135 </form>
136 <table class="table table-hover w-100">
137 <tbody id="Pistols-list"></tbody>
138 </table>
139 </div>
140 </div>
141 </div>
142 <div class="col-lg-6">
143 <div class="card mb-3" style="height: 400px;">
144 <h5 class="card-header">Melee Weapons</h5>
145 <div class="card-body overflow-auto">
146 <form class="input-group mb-3" onsubmit="doAcquireWeapon('Melee');return false;">
147 <input class="form-control" id="acquire-type-Melee" list="datalist-Melee" />
148 <button class="btn btn-primary" type="submit">Add</button>
149 </form>
150 <table class="table table-hover w-100">
151 <tbody id="Melee-list"></tbody>
122 152 </table>
123 153 </div>
124 154 </div>
@@ -355,7 +385,9 @@
355 385 </div>
356 386 </div>
357 387 <datalist id="datalist-warframes"></datalist>
358 <datalist id="datalist-weapons"></datalist>
388 <datalist id="datalist-LongGuns"></datalist>
389 <datalist id="datalist-Pistols"></datalist>
390 <datalist id="datalist-Melee"></datalist>
359 391 <datalist id="datalist-miscitems"></datalist>
360 392 <datalist id="datalist-mods">
361 393 <option data-key="/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser" value="Legendary Core"></option>
Modified static/webui/script.js +17 -29
@@ -265,8 +265,8 @@ function updateInventory() {
265 265 }
266 266 document.getElementById("warframe-list").appendChild(tr);
267 267 });
268 document.getElementById("weapon-list").innerHTML = "";
269 268 ["LongGuns", "Pistols", "Melee"].forEach(category => {
269 document.getElementById(category + "-list").innerHTML = "";
270 270 data[category].forEach(item => {
271 271 const tr = document.createElement("tr");
272 272 tr.setAttribute("data-item-type", item.ItemType);
@@ -319,7 +319,7 @@ function updateInventory() {
319 319 }
320 320 tr.appendChild(td);
321 321 }
322 document.getElementById("weapon-list").appendChild(tr);
322 document.getElementById(category + "-list").appendChild(tr);
323 323 });
324 324 });
325 325
@@ -548,14 +548,16 @@ function doAcquireWarframe() {
548 548 });
549 549 }
550 550
551 $("#warframe-to-acquire").on("input", () => {
552 $("#warframe-to-acquire").removeClass("is-invalid");
551 $("input[list]").on("input", function () {
552 $(this).removeClass("is-invalid");
553 553 });
554 554
555 function doAcquireWeapon() {
556 const uniqueName = getKey(document.getElementById("weapon-to-acquire"));
555 function doAcquireWeapon(category) {
556 const uniqueName = getKey(document.getElementById("acquire-type-" + category));
557 557 if (!uniqueName) {
558 $("#weapon-to-acquire").addClass("is-invalid").focus();
558 $("#acquire-type-" + category)
559 .addClass("is-invalid")
560 .focus();
559 561 return;
560 562 }
561 563 revalidateAuthz(() => {
@@ -570,16 +572,12 @@ function doAcquireWeapon() {
570 572 ])
571 573 });
572 574 req.done(() => {
573 document.getElementById("weapon-to-acquire").value = "";
575 document.getElementById("acquire-type-" + category).value = "";
574 576 updateInventory();
575 577 });
576 578 });
577 579 }
578 580
579 $("#weapon-to-acquire").on("input", () => {
580 $("#weapon-to-acquire").removeClass("is-invalid");
581 });
582
583 581 function dispatchAddItemsRequestsBatch(requests) {
584 582 revalidateAuthz(() => {
585 583 const req = $.post({
@@ -650,11 +648,13 @@ function maxRankAllWarframes() {
650 648
651 649 function addMissingWeapons() {
652 650 const requests = [];
653 document.querySelectorAll("#datalist-weapons option").forEach(elm => {
654 if (!document.querySelector("#weapon-list [data-item-type='" + elm.getAttribute("data-key") + "']")) {
655 requests.push({ type: "Weapon", internalName: elm.getAttribute("data-key") });
656 }
657 });
651 document
652 .querySelectorAll("#datalist-LongGuns option, #datalist-Pistols option, #datalist-Melee option")
653 .forEach(elm => {
654 if (!document.querySelector("#weapon-list [data-item-type='" + elm.getAttribute("data-key") + "']")) {
655 requests.push({ type: "Weapon", internalName: elm.getAttribute("data-key") });
656 }
657 });
658 658 if (
659 659 requests.length != 0 &&
660 660 window.confirm("Are you sure you want to add " + requests.length + " items to your account?")
@@ -809,10 +809,6 @@ function doAcquireMiscItems() {
809 809 });
810 810 }
811 811
812 $("#miscitem-type").on("input", () => {
813 $("#miscitem-type").removeClass("is-invalid");
814 });
815
816 812 function doAcquireRiven() {
817 813 let fingerprint;
818 814 try {
@@ -925,10 +921,6 @@ function doAcquireMod() {
925 921 });
926 922 }
927 923
928 $("#mod-to-acquire").on("input", () => {
929 $("#mod-to-acquire").removeClass("is-invalid");
930 });
931
932 924 const uiConfigs = [...$("#server-settings input[id]")].map(x => x.id);
933 925
934 926 function doChangeSettings() {
@@ -1155,10 +1147,6 @@ function doPushArchonCrystalUpgrade() {
1155 1147 });
1156 1148 }
1157 1149
1158 $("[list='datalist-archonCrystalUpgrades']").on("input", () => {
1159 $("[list='datalist-archonCrystalUpgrades']").removeClass("is-invalid");
1160 });
1161
1162 1150 function doPopArchonCrystalUpgrade(type) {
1163 1151 revalidateAuthz(() => {
1164 1152 $.get(