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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

feat(webui): bulk remove items (#3452)

Also moves bulk actions to corresponding cards Closes #2644 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3452 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>

264bdc9d
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

11 个文件 +436 -294
Added src/controllers/custom/removeItemsController.ts +24 -0
@@ -0,0 +1,24 @@
1 import { getAccountIdForRequest } from "../../services/loginService.ts";
2 import { getInventory } from "../../services/inventoryService.ts";
3 import type { RequestHandler } from "express";
4 import { broadcastInventoryUpdate } from "../../services/wsService.ts";
5 import type { TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
6
7 export const removeItemsController: RequestHandler = async (req, res) => {
8 const accountId = await getAccountIdForRequest(req);
9 const category = req.query.category as
10 | TEquipmentKey
11 | "WeaponSkins"
12 | "ShipDecorations"
13 | "FlavourItems"
14 | undefined;
15 if (category) {
16 const inventory = await getInventory(accountId, category);
17 if (category in inventory) {
18 inventory.set(category, []);
19 await inventory.save();
20 broadcastInventoryUpdate(req);
21 }
22 }
23 res.end();
24 };
Modified src/routes/custom.ts +2 -0
@@ -25,6 +25,7 @@ import { unlockAllShipFeaturesController } from "../controllers/custom/unlockAll
25 25 import { unlockAllCapturaScenesController } from "../controllers/custom/unlockAllCapturaScenesController.ts";
26 26 import { removeCustomizationController } from "../controllers/custom/removeCustomizationController.ts";
27 27 import { removeIsNewController } from "../controllers/custom/removeIsNewController.ts";
28 import { removeItemsController } from "../controllers/custom/removeItemsController.ts";
28 29 import { retroactivelyApplyCheatController } from "../controllers/api/retroactivelyApplyCheatController.ts";
29 30
30 31 import { abilityOverrideController } from "../controllers/custom/abilityOverrideController.ts";
@@ -81,6 +82,7 @@ customRouter.get("/unlockAllShipFeatures", unlockAllShipFeaturesController);
81 82 customRouter.get("/unlockAllCapturaScenes", unlockAllCapturaScenesController);
82 83 customRouter.get("/removeCustomization", removeCustomizationController);
83 84 customRouter.get("/removeIsNew", removeIsNewController);
85 customRouter.get("/removeItems", removeItemsController);
84 86 customRouter.get("/retroactivelyApplyCheat", retroactivelyApplyCheatController);
85 87
86 88 customRouter.post("/abilityOverride", abilityOverrideController);
Modified static/webui/index.html +23 -58
@@ -179,7 +179,7 @@
179 179 <div class="row g-3 mb-3">
180 180 <div class="col-lg-6">
181 181 <div class="card" style="height: 400px;">
182 <h5 class="card-header" data-loc="inventory_suits"></h5>
182 <div class="card-header" data-cardType="Suits"></div>
183 183 <div class="card-body d-flex flex-column">
184 184 <form class="input-group mb-3" onsubmit="doAcquireEquipment('Suits');return false;">
185 185 <input class="form-control" id="acquire-type-Suits" list="datalist-Suits" autocomplete="off" />
@@ -195,7 +195,7 @@
195 195 </div>
196 196 <div class="col-lg-6">
197 197 <div class="card" style="height: 400px;">
198 <h5 class="card-header" data-loc="inventory_longGuns"></h5>
198 <div class="card-header" data-cardType="LongGuns"></div>
199 199 <div class="card-body d-flex flex-column">
200 200 <form class="input-group mb-3" onsubmit="handleModularSelection('LongGuns');return false;">
201 201 <input class="form-control" id="acquire-type-LongGuns" list="datalist-LongGuns" autocomplete="off" />
@@ -218,7 +218,7 @@
218 218 <div class="row g-3 mb-3">
219 219 <div class="col-lg-6">
220 220 <div class="card" style="height: 400px;">
221 <h5 class="card-header" data-loc="inventory_pistols"></h5>
221 <div class="card-header" data-cardType="Pistols"></div>
222 222 <div class="card-body d-flex flex-column">
223 223 <form class="input-group mb-3" onsubmit="handleModularSelection('Pistols');return false;">
224 224 <input class="form-control" id="acquire-type-Pistols" list="datalist-Pistols" autocomplete="off" />
@@ -239,7 +239,7 @@
239 239 </div>
240 240 <div class="col-lg-6">
241 241 <div class="card" style="height: 400px;">
242 <h5 class="card-header" data-loc="inventory_melee"></h5>
242 <div class="card-header" data-cardType="Melee"></div>
243 243 <div class="card-body d-flex flex-column">
244 244 <form class="input-group mb-3" onsubmit="handleModularSelection('Melee');return false;">
245 245 <input class="form-control" id="acquire-type-Melee" list="datalist-Melee" autocomplete="off" />
@@ -262,7 +262,7 @@
262 262 <div class="row g-3 mb-3">
263 263 <div class="col-lg-6">
264 264 <div class="card" style="height: 400px;">
265 <h5 class="card-header" data-loc="inventory_spaceSuits"></h5>
265 <div class="card-header" data-cardType="SpaceSuits"></div>
266 266 <div class="card-body d-flex flex-column">
267 267 <form class="input-group mb-3" onsubmit="doAcquireEquipment('SpaceSuits');return false;">
268 268 <input class="form-control" id="acquire-type-SpaceSuits" list="datalist-SpaceSuits" autocomplete="off" />
@@ -278,7 +278,7 @@
278 278 </div>
279 279 <div class="col-lg-6">
280 280 <div class="card" style="height: 400px;">
281 <h5 class="card-header" data-loc="inventory_spaceGuns"></h5>
281 <div class="card-header" data-cardType="SpaceGuns"></div>
282 282 <div class="card-body d-flex flex-column">
283 283 <form class="input-group mb-3" onsubmit="doAcquireEquipment('SpaceGuns');return false;">
284 284 <input class="form-control" id="acquire-type-SpaceGuns" list="datalist-SpaceGuns" autocomplete="off" />
@@ -296,7 +296,7 @@
296 296 <div class="row g-3 mb-3">
297 297 <div class="col-lg-6">
298 298 <div class="card" style="height: 400px;">
299 <h5 class="card-header" data-loc="inventory_spaceMelee"></h5>
299 <div class="card-header" data-cardType="SpaceMelee"></div>
300 300 <div class="card-body d-flex flex-column">
301 301 <form class="input-group mb-3" onsubmit="doAcquireEquipment('SpaceMelee');return false;">
302 302 <input class="form-control" id="acquire-type-SpaceMelee" list="datalist-SpaceMelee" autocomplete="off" />
@@ -312,7 +312,7 @@
312 312 </div>
313 313 <div class="col-lg-6">
314 314 <div class="card" style="height: 400px;">
315 <h5 class="card-header" data-loc="inventory_mechSuits"></h5>
315 <div class="card-header" data-cardType="MechSuits"></div>
316 316 <div class="card-body d-flex flex-column">
317 317 <form class="input-group mb-3" onsubmit="doAcquireEquipment('MechSuits');return false;">
318 318 <input class="form-control" id="acquire-type-MechSuits" list="datalist-MechSuits" autocomplete="off" />
@@ -330,7 +330,7 @@
330 330 <div class="row g-3 mb-3">
331 331 <div class="col-lg-6">
332 332 <div class="card" style="height: 400px;">
333 <h5 class="card-header" data-loc="inventory_sentinels"></h5>
333 <div class="card-header" data-cardType="Sentinels"></div>
334 334 <div class="card-body d-flex flex-column">
335 335 <form class="input-group mb-3" onsubmit="doAcquireEquipment('Sentinels');return false;">
336 336 <input class="form-control" id="acquire-type-Sentinels" list="datalist-Sentinels" autocomplete="off" />
@@ -346,7 +346,7 @@
346 346 </div>
347 347 <div class="col-lg-6">
348 348 <div class="card" style="height: 400px;">
349 <h5 class="card-header" data-loc="inventory_moaPets"></h5>
349 <div class="card-header" data-cardType="MoaPets"></div>
350 350 <div class="card-body d-flex flex-column">
351 351 <form class="input-group mb-3" onsubmit="handleModularSelection('MoaPets');return false;">
352 352 <input class="form-control" id="acquire-type-MoaPets" list="datalist-MoaPets" autocomplete="off" />
@@ -376,7 +376,7 @@
376 376 <div class="row g-3 mb-3">
377 377 <div class="col-lg-6">
378 378 <div class="card" style="height: 400px;">
379 <h5 class="card-header" data-loc="inventory_kubrowPets"></h5>
379 <div class="card-header" data-cardType="KubrowPets"></div>
380 380 <div class="card-body d-flex flex-column">
381 381 <form class="input-group mb-3" onsubmit="handleModularSelection('KubrowPets');return false;">
382 382 <input class="form-control" id="acquire-type-KubrowPets" list="datalist-KubrowPets" autocomplete="off" />
@@ -400,7 +400,7 @@
400 400 </div>
401 401 <div class="col-lg-6">
402 402 <div class="card" style="height: 400px;">
403 <h5 class="card-header" data-loc="inventory_sentinelWeapons"></h5>
403 <div class="card-header" data-cardType="SentinelWeapons"></div>
404 404 <div class="card-body d-flex flex-column">
405 405 <form class="input-group mb-3" onsubmit="doAcquireEquipment('SentinelWeapons');return false;">
406 406 <input class="form-control" id="acquire-type-SentinelWeapons" list="datalist-SentinelWeapons" autocomplete="off" />
@@ -418,7 +418,7 @@
418 418 <div class="row g-3 mb-3">
419 419 <div class="col-lg-6">
420 420 <div class="card" style="height: 400px;">
421 <h5 class="card-header" data-loc="inventory_operatorAmps"></h5>
421 <div class="card-header" data-cardType="OperatorAmps"></div>
422 422 <div class="card-body d-flex flex-column">
423 423 <form class="input-group mb-3" onsubmit="handleModularSelection('OperatorAmps');return false;">
424 424 <input class="form-control" id="acquire-type-OperatorAmps" list="datalist-OperatorAmps" autocomplete="off" />
@@ -439,7 +439,7 @@
439 439 </div>
440 440 <div class="col-lg-6">
441 441 <div class="card" style="height: 400px;">
442 <h5 class="card-header" data-loc="inventory_hoverboards"></h5>
442 <div class="card-header" data-cardType="Hoverboards"></div>
443 443 <div class="card-body d-flex flex-column">
444 444 <form class="input-group mb-3" onsubmit="doAcquireModularEquipment('Hoverboards');return false;">
445 445 <input class="form-control" id="acquire-type-Hoverboards-HB_DECK" list="datalist-ModularParts-HB_DECK" autocomplete="off" />
@@ -460,7 +460,7 @@
460 460 <div class="row g-3 mb-3">
461 461 <div class="col-lg-6">
462 462 <div class="card" style="height: 400px;">
463 <h5 class="card-header" data-loc="inventory_evolutionProgress"></h5>
463 <div class="card-header" data-cardType="EvolutionProgress"></div>
464 464 <div class="card-body d-flex flex-column">
465 465 <form class="input-group mb-3" onsubmit="doAcquireEvolution();return false;">
466 466 <input class="form-control" id="acquire-type-EvolutionProgress" list="datalist-EvolutionProgress" autocomplete="off" />
@@ -476,7 +476,7 @@
476 476 </div>
477 477 <div class="col-lg-6">
478 478 <div class="card" style="height: 400px;">
479 <h5 class="card-header" data-loc="inventory_boosters"></h5>
479 <div class="card-header" data-cardType="Boosters"></div>
480 480 <div class="card-body d-flex flex-column">
481 481 <form class="input-group mb-3" onsubmit="doAcquireBooster();return false;">
482 482 <input class="form-control" id="acquire-type-Boosters" list="datalist-Boosters" autocomplete="off" />
@@ -494,7 +494,7 @@
494 494 <div class="row g-3 mb-3">
495 495 <div class="col-lg-6">
496 496 <div class="card" style="height: 400px;">
497 <h5 class="card-header" data-loc="inventory_flavourItems"></h5>
497 <div class="card-header" data-cardType="FlavourItems"></div>
498 498 <div class="card-body d-flex flex-column">
499 499 <form class="input-group mb-3" onsubmit="doAcquireEquipment('FlavourItems');return false;">
500 500 <input class="form-control" id="acquire-type-FlavourItems" list="datalist-FlavourItems" autocomplete="off" />
@@ -510,7 +510,7 @@
510 510 </div>
511 511 <div class="col-lg-6">
512 512 <div class="card" style="height: 400px;">
513 <h5 class="card-header" data-loc="inventory_shipDecorations"></h5>
513 <div class="card-header" data-cardType="ShipDecorations"></div>
514 514 <div class="card-body d-flex flex-column">
515 515 <form class="input-group mb-3" onsubmit="doAcquireCountItems('ShipDecorations');return false;">
516 516 <input class="form-control" id="ShipDecorations-count" type="number" value="1" />
@@ -529,7 +529,7 @@
529 529 <div class="row g-3 mb-3">
530 530 <div class="col-lg-6">
531 531 <div class="card" style="height: 400px;">
532 <h5 class="card-header" data-loc="inventory_weaponSkins"></h5>
532 <div class="card-header" data-cardType="WeaponSkins"></div>
533 533 <div class="card-body d-flex flex-column">
534 534 <form class="input-group mb-3" onsubmit="doAcquireEquipment('WeaponSkins');return false;">
535 535 <input class="form-control" id="acquire-type-WeaponSkins" list="datalist-WeaponSkins" autocomplete="off" />
@@ -548,27 +548,8 @@
548 548 <h5 class="card-header" data-loc="general_bulkActions"></h5>
549 549 <div class="card-body">
550 550 <div class="mb-2 d-flex flex-wrap gap-2">
551 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Suits']);" data-loc="inventory_bulkAddSuits"></button>
552 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkAddWeapons"></button>
553 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceSuits']);" data-loc="inventory_bulkAddSpaceSuits"></button>
554 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
555 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
556 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
557 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['FlavourItems']);" data-loc="inventory_bulkAddFlavourItems"></button>
558 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['ShipDecorations']);" data-loc="inventory_bulkAddShipDecorations"></button>
559 <button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['WeaponSkins']);" data-loc="inventory_bulkAddWeaponSkins"></button>
560 <button class="btn btn-primary" onclick="debounce(addMissingEvolutionProgress);" data-loc="inventory_bulkAddEvolutionProgress"></button>
561 551 <button class="btn btn-primary" onclick="removeIsNew();" data-loc="inventory_removeIsNew"></button>
562 552 </div>
563 <div class="mb-2 d-flex flex-wrap gap-2">
564 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
565 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkRankUpWeapons"></button>
566 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceSuits']);" data-loc="inventory_bulkRankUpSpaceSuits"></button>
567 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
568 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
569 <button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
570 <button class="btn btn-success" onclick="debounce(maxRankAllEvolutions);" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
571 </div>
572 553 </div>
573 554 </div>
574 555 </div>
@@ -609,7 +590,7 @@
609 590 <div class="row g-3 mb-3">
610 591 <div class="col-lg-6">
611 592 <div class="card" style="height: 400px;">
612 <h5 class="card-header" data-loc="guildView_techProjects"></h5>
593 <div class="card-header" data-guildCardType="TechProjects"></div>
613 594 <div class="card-body d-flex flex-column">
614 595 <form id="techProjects-form" class="input-group mb-3 d-none" onsubmit="addGuildTechProject();return false;">
615 596 <input class="form-control" id="acquire-type-TechProjects" list="datalist-TechProjects" autocomplete="off" />
@@ -625,7 +606,7 @@
625 606 </div>
626 607 <div class="col-lg-6">
627 608 <div class="card" style="height: 400px;">
628 <h5 class="card-header" data-loc="guildView_vaultDecoRecipes"></h5>
609 <div class="card-header" data-guildCardType="VaultDecoRecipes"></div>
629 610 <div class="card-body d-flex flex-column">
630 611 <form id="vaultDecoRecipes-form" class="input-group mb-3 d-none" onsubmit="addVaultItem('VaultDecoRecipes');return false;">
631 612 <input class="form-control" id="acquire-type-VaultDecoRecipes" list="datalist-VaultDecoRecipes" autocomplete="off" />
@@ -643,7 +624,7 @@
643 624 <div class="row g-3 mb-3">
644 625 <div class="col-lg-6">
645 626 <div class="card" style="height: 400px;">
646 <h5 class="card-header" data-loc="guildView_vaultMiscItems"></h5>
627 <div class="card-header" data-guildCardType="VaultMiscItems"></div>
647 628 <div class="card-body d-flex flex-column">
648 629 <form id="vaultMiscItems-form" class="input-group mb-3 d-none" onsubmit="addVaultItem('VaultMiscItems');return false;">
649 630 <input class="form-control" id="VaultMiscItems-count" type="number" value="1" />
@@ -660,7 +641,7 @@
660 641 </div>
661 642 <div class="col-lg-6">
662 643 <div class="card" style="height: 400px;">
663 <h5 class="card-header" data-loc="guildView_vaultShipDecorations"></h5>
644 <div class="card-header" data-guildCardType="VaultShipDecorations"></div>
664 645 <div class="card-body d-flex flex-column">
665 646 <form id="vaultShipDecorations-form" class="input-group mb-3 d-none" onsubmit="addVaultItem('VaultShipDecorations');return false;">
666 647 <input class="form-control" id="VaultShipDecorations-count" type="number" value="1" />
@@ -699,22 +680,6 @@
699 680 </div>
700 681 </div>
701 682 <div class="row g-3 mb-3">
702 <div class="col-lg-6">
703 <div class="card">
704 <h5 class="card-header" data-loc="general_bulkActions"></h5>
705 <div class="card-body" id="guild-actions">
706 <div class="mb-2 d-flex flex-wrap gap-2">
707 <button class="btn btn-primary" onclick="debounce(addMissingTechProjects);" data-loc="guildView_bulkAddTechProjects"></button>
708 <button class="btn btn-primary" onclick="debounce(addMissingVaultItems, ['VaultDecoRecipes']);" data-loc="guildView_bulkAddVaultDecoRecipes"></button>
709 <button class="btn btn-primary" onclick="debounce(addMissingVaultItems, ['VaultShipDecorations']);" data-loc="guildView_bulkAddVaultShipDecorations"></button>
710 </div>
711 <div class="mb-2 d-flex flex-wrap gap-2">
712 <button class="btn btn-success" onclick="debounce(fundAllTechProjects);" data-loc="guildView_bulkFundTechProjects"></button>
713 <button class="btn btn-success" onclick="debounce(completeAllTechProjects);" data-loc="guildView_bulkCompleteTechProjects"></button>
714 </div>
715 </div>
716 </div>
717 </div>
718 683 <div class="col-lg-6">
719 684 <div class="card mb-3">
720 685 <h5 class="card-header" data-loc="guildView_cheats"></h5>
Modified static/webui/script.js +324 -82
@@ -176,8 +176,7 @@ function doLogout() {
176 176
177 177 function renameAccount(taken_name) {
178 178 const newname = window.prompt(
179 (taken_name ? loc("code_changeNameRetry").split("|NAME|").join(taken_name) + " " : "") +
180 loc("code_changeNameConfirm")
179 `${taken_name ? loc("code_changeNameRetry").replace("|NAME|", taken_name) + " " : ""}${loc("code_changeNameConfirm")}`
181 180 );
182 181 if (newname) {
183 182 revalidateAuthz().then(() => {
@@ -336,6 +335,29 @@ const permanentEvolutionWeapons = new Set([
336 335 "/Lotus/Weapons/Tenno/Zariman/Melee/HeavyScythe/ZarimanHeavyScythe/ZarimanHeavyScytheWeapon"
337 336 ]);
338 337
338 const icons = {
339 angleDown: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`,
340 angleLeft: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>`,
341 angleRight: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg>`,
342 angleUp: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"/></svg>`,
343 arrowRotateRight: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z"/></svg>`,
344 arrowUp: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`,
345 chartSimple: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 80c0-26.5 21.5-48 48-48h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V80zM0 272c0-26.5 21.5-48 48-48H80c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272zM368 96h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H368c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z"/></svg>`,
346 check: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>`,
347 childReaching: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`,
348 circleStop: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z"/></svg>`,
349 feather: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`,
350 forward: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M371.7 43.1C360.1 32 343 28.9 328.3 35.2S304 56 304 72l0 136.3-172.3-165.1C120.1 32 103 28.9 88.3 35.2S64 56 64 72l0 368c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9L304 303.7 304 440c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9l192-184c7.9-7.5 12.3-18 12.3-28.9s-4.5-21.3-12.3-28.9l-192-184z"/></svg>`,
351 graduationCap: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M48 195.8l209.2 86.1c9.8 4 20.2 6.1 30.8 6.1s21-2.1 30.8-6.1l242.4-99.8c9-3.7 14.8-12.4 14.8-22.1s-5.8-18.4-14.8-22.1L318.8 38.1C309 34.1 298.6 32 288 32s-21 2.1-30.8 6.1L14.8 137.9C5.8 141.6 0 150.3 0 160L0 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-260.2zm48 71.7L96 384c0 53 86 96 192 96s192-43 192-96l0-116.6-142.9 58.9c-15.6 6.4-32.2 9.7-49.1 9.7s-33.5-3.3-49.1-9.7L96 267.4z"/></svg>`,
352 person: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`,
353 plus: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M256 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-160z" /></svg>`,
354 star: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`,
355 tag: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`,
356 trash: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`,
357
358 note: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg>`
359 };
360
339 361 const itemToString = item => item.name;
340 362 const itemToStringWithSubtype = item => (item.subtype ? item.name + " (" + item.subtype + ")" : item.name);
341 363 const itemToStringWithUniqueName = item => item.name + " [" + item.uniqueName.split("/").pop() + "]";
@@ -1042,13 +1064,15 @@ function translateInventoryDataToDom() {
1042 1064
1043 1065 let maxXP = Math.pow(itemMap[item.ItemType]?.maxLevelCap ?? 30, 2) * 1000;
1044 1066 if (
1045 category != "Suits" &&
1046 category != "SpaceSuits" &&
1047 category != "Sentinels" &&
1048 category != "Hoverboards" &&
1049 category != "MechSuits" &&
1050 category != "MoaPets" &&
1051 category != "KubrowPets"
1067 ![
1068 "Suits",
1069 "SpaceSuits",
1070 "Hoverboards",
1071 "MechSuits",
1072 "Sentinels",
1073 "MoaPets",
1074 "KubrowPets"
1075 ].includes(category)
1052 1076 ) {
1053 1077 maxXP /= 2;
1054 1078 }
@@ -1081,7 +1105,7 @@ function translateInventoryDataToDom() {
1081 1105 );
1082 1106 };
1083 1107 a.title = loc("code_unlockLevelCap");
1084 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M48 195.8l209.2 86.1c9.8 4 20.2 6.1 30.8 6.1s21-2.1 30.8-6.1l242.4-99.8c9-3.7 14.8-12.4 14.8-22.1s-5.8-18.4-14.8-22.1L318.8 38.1C309 34.1 298.6 32 288 32s-21 2.1-30.8 6.1L14.8 137.9C5.8 141.6 0 150.3 0 160L0 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-260.2zm48 71.7L96 384c0 53 86 96 192 96s192-43 192-96l0-116.6-142.9 58.9c-15.6 6.4-32.2 9.7-49.1 9.7s-33.5-3.3-49.1-9.7L96 267.4z"/></svg>`;
1108 a.innerHTML = icons.graduationCap;
1085 1109 td.appendChild(a);
1086 1110 }
1087 1111 if (item.XP < maxXP || anyExaltedMissingXP) {
@@ -1115,7 +1139,7 @@ function translateInventoryDataToDom() {
1115 1139 });
1116 1140 };
1117 1141 a.title = loc("code_maxRank");
1118 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
1142 a.innerHTML = icons.arrowUp;
1119 1143 td.appendChild(a);
1120 1144 }
1121 1145
@@ -1123,7 +1147,7 @@ function translateInventoryDataToDom() {
1123 1147 const a = document.createElement("a");
1124 1148 a.href =
1125 1149 "/webui/detailedView?productCategory=" + category + "&itemId=" + item.ItemId.$oid;
1126 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
1150 a.innerHTML = icons.feather;
1127 1151 td.appendChild(a);
1128 1152 }
1129 1153
@@ -1135,7 +1159,7 @@ function translateInventoryDataToDom() {
1135 1159 equipmentFeatures(category, item.ItemId.$oid, 8);
1136 1160 };
1137 1161 a.title = loc("code_gild");
1138 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`;
1162 a.innerHTML = icons.star;
1139 1163 td.appendChild(a);
1140 1164 }
1141 1165 if (category == "KubrowPets") {
@@ -1147,10 +1171,10 @@ function translateInventoryDataToDom() {
1147 1171 };
1148 1172 if (item.Details.IsPuppy) {
1149 1173 a.title = loc("code_mature");
1150 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`;
1174 a.innerHTML = icons.person;
1151 1175 } else {
1152 1176 a.title = loc("code_unmature");
1153 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`;
1177 a.innerHTML = icons.childReaching;
1154 1178 }
1155 1179 td.appendChild(a);
1156 1180 }
@@ -1165,7 +1189,7 @@ function translateInventoryDataToDom() {
1165 1189 }
1166 1190 };
1167 1191 a.title = loc("code_rename");
1168 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`;
1192 a.innerHTML = icons.tag;
1169 1193 td.appendChild(a);
1170 1194 }
1171 1195 {
@@ -1177,7 +1201,7 @@ function translateInventoryDataToDom() {
1177 1201 disposeOfGear(category, item.ItemId.$oid);
1178 1202 };
1179 1203 a.title = loc("code_remove");
1180 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1204 a.innerHTML = icons.trash;
1181 1205 td.appendChild(a);
1182 1206 }
1183 1207 tr.appendChild(td);
@@ -1209,7 +1233,7 @@ function translateInventoryDataToDom() {
1209 1233 setEvolutionProgress([{ ItemType: item.ItemType, Rank: 5 }]);
1210 1234 };
1211 1235 a.title = loc("code_maxRank");
1212 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
1236 a.innerHTML = icons.arrowUp;
1213 1237
1214 1238 td.appendChild(a);
1215 1239 }
@@ -1221,7 +1245,7 @@ function translateInventoryDataToDom() {
1221 1245 setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank - 1 }]);
1222 1246 };
1223 1247 a.title = loc("code_rankDown");
1224 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`;
1248 a.innerHTML = icons.angleDown;
1225 1249
1226 1250 td.appendChild(a);
1227 1251 }
@@ -1233,7 +1257,7 @@ function translateInventoryDataToDom() {
1233 1257 setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank + 1 }]);
1234 1258 };
1235 1259 a.title = loc("code_rankUp");
1236 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"/></svg>`;
1260 a.innerHTML = icons.angleUp;
1237 1261
1238 1262 td.appendChild(a);
1239 1263 }
@@ -1258,7 +1282,7 @@ function translateInventoryDataToDom() {
1258 1282 if (item.ItemType == "/Lotus/Types/Boosters/ReviveBooster") {
1259 1283 td.textContent += " ";
1260 1284 const abbr = document.createElement("abbr");
1261 abbr.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg>`;
1285 abbr.innerHTML = icons.note;
1262 1286 abbr.title = loc("code_reviveBoosterDesc");
1263 1287 td.appendChild(abbr);
1264 1288 }
@@ -1304,7 +1328,7 @@ function translateInventoryDataToDom() {
1304 1328 setBooster(item.ItemType, 0);
1305 1329 };
1306 1330 a.title = loc("code_remove");
1307 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1331 a.innerHTML = icons.trash;
1308 1332 td.appendChild(a);
1309 1333 }
1310 1334 tr.appendChild(td);
@@ -1333,7 +1357,7 @@ function translateInventoryDataToDom() {
1333 1357 removeCustomization(item.ItemType);
1334 1358 };
1335 1359 a.title = loc("code_remove");
1336 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1360 a.innerHTML = icons.trash;
1337 1361 td.appendChild(a);
1338 1362 }
1339 1363 tr.appendChild(td);
@@ -1364,7 +1388,7 @@ function translateInventoryDataToDom() {
1364 1388 disposeOfGear("WeaponSkins", item.ItemId.$oid);
1365 1389 };
1366 1390 a.title = loc("code_remove");
1367 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1391 a.innerHTML = icons.trash;
1368 1392 td.appendChild(a);
1369 1393 }
1370 1394
@@ -1406,7 +1430,7 @@ function translateInventoryDataToDom() {
1406 1430 removeCountItems(item.ItemType, item.ItemCount);
1407 1431 };
1408 1432 a.title = loc("code_remove");
1409 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1433 a.innerHTML = icons.trash;
1410 1434 td.appendChild(a);
1411 1435 }
1412 1436 tr.appendChild(td);
@@ -1453,7 +1477,7 @@ function translateInventoryDataToDom() {
1453 1477 debounce(doQuestUpdate, "setInactive", item.ItemType);
1454 1478 };
1455 1479 a.title = loc("code_setInactive");
1456 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z"/></svg>`;
1480 a.innerHTML = icons.circleStop;
1457 1481 td.appendChild(a);
1458 1482 }
1459 1483 if (stage > 0) {
@@ -1464,7 +1488,7 @@ function translateInventoryDataToDom() {
1464 1488 debounce(doQuestUpdate, "resetKey", item.ItemType);
1465 1489 };
1466 1490 a.title = loc("code_reset");
1467 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z"/></svg>`;
1491 a.innerHTML = icons.arrowRotateRight;
1468 1492 td.appendChild(a);
1469 1493 }
1470 1494 if (itemMap[item.ItemType]?.chainLength > stage && !item.Completed) {
@@ -1475,7 +1499,7 @@ function translateInventoryDataToDom() {
1475 1499 debounce(doQuestUpdate, "completeKey", item.ItemType);
1476 1500 };
1477 1501 a.title = loc("code_complete");
1478 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>`;
1502 a.innerHTML = icons.check;
1479 1503 td.appendChild(a);
1480 1504 }
1481 1505 if (stage > 0 && itemMap[item.ItemType]?.chainLength > 1) {
@@ -1486,7 +1510,7 @@ function translateInventoryDataToDom() {
1486 1510 debounce(doQuestUpdate, "prevStage", item.ItemType);
1487 1511 };
1488 1512 a.title = loc("code_prevStage");
1489 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>`;
1513 a.innerHTML = icons.angleLeft;
1490 1514 td.appendChild(a);
1491 1515 }
1492 1516 if (
@@ -1501,7 +1525,7 @@ function translateInventoryDataToDom() {
1501 1525 debounce(doQuestUpdate, "nextStage", item.ItemType);
1502 1526 };
1503 1527 a.title = loc("code_nextStage");
1504 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg>`;
1528 a.innerHTML = icons.angleRight;
1505 1529 td.appendChild(a);
1506 1530 }
1507 1531 {
@@ -1512,7 +1536,7 @@ function translateInventoryDataToDom() {
1512 1536 debounce(doQuestUpdate, "deleteKey", item.ItemType);
1513 1537 };
1514 1538 a.title = loc("code_remove");
1515 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1539 a.innerHTML = icons.trash;
1516 1540 td.appendChild(a);
1517 1541 }
1518 1542 tr.appendChild(td);
@@ -1576,7 +1600,7 @@ function translateInventoryDataToDom() {
1576 1600 );
1577 1601 a.target = "_blank";
1578 1602 a.title = loc("code_viewStats");
1579 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 80c0-26.5 21.5-48 48-48h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V80zM0 272c0-26.5 21.5-48 48-48H80c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272zM368 96h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H368c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z"/></svg>`;
1603 a.innerHTML = icons.chartSimple;
1580 1604 td.appendChild(a);
1581 1605 }
1582 1606 {
@@ -1588,7 +1612,7 @@ function translateInventoryDataToDom() {
1588 1612 disposeOfGear("Upgrades", item.ItemId.$oid);
1589 1613 };
1590 1614 a.title = loc("code_remove");
1591 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1615 a.innerHTML = icons.trash;
1592 1616 td.appendChild(a);
1593 1617 }
1594 1618 tr.appendChild(td);
@@ -1621,7 +1645,7 @@ function translateInventoryDataToDom() {
1621 1645 setFingerprint(item.ItemType, item.ItemId, { lvl: maxRank });
1622 1646 };
1623 1647 a.title = loc("code_maxRank");
1624 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
1648 a.innerHTML = icons.arrowUp;
1625 1649 td.appendChild(a);
1626 1650 }
1627 1651 {
@@ -1633,7 +1657,7 @@ function translateInventoryDataToDom() {
1633 1657 disposeOfGear("Upgrades", item.ItemId.$oid);
1634 1658 };
1635 1659 a.title = loc("code_remove");
1636 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1660 a.innerHTML = icons.trash;
1637 1661 td.appendChild(a);
1638 1662 }
1639 1663 tr.appendChild(td);
@@ -1667,7 +1691,7 @@ function translateInventoryDataToDom() {
1667 1691 setFingerprint(item.ItemType, item.LastAdded, { lvl: maxRank });
1668 1692 };
1669 1693 a.title = loc("code_maxRank");
1670 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
1694 a.innerHTML = icons.arrowUp;
1671 1695 td.appendChild(a);
1672 1696 }
1673 1697 {
@@ -1679,7 +1703,7 @@ function translateInventoryDataToDom() {
1679 1703 disposeOfItems("Upgrades", item.ItemType, item.ItemCount);
1680 1704 };
1681 1705 a.title = loc("code_remove");
1682 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1706 a.innerHTML = icons.trash;
1683 1707 td.appendChild(a);
1684 1708 }
1685 1709 tr.appendChild(td);
@@ -1816,7 +1840,7 @@ function translateInventoryDataToDom() {
1816 1840 doPopArchonCrystalUpgrade(upgradeType);
1817 1841 };
1818 1842 a.title = loc("code_remove");
1819 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
1843 a.innerHTML = icons.trash;
1820 1844 td.appendChild(a);
1821 1845 }
1822 1846 tr.appendChild(td);
@@ -2002,6 +2026,16 @@ function translateInventoryDataToDom() {
2002 2026 const guildReq = $.get("/custom/getGuild?guildId=" + window.guildId);
2003 2027 guildReq.done(guildData => {
2004 2028 window.itemListPromise.then(itemMap => {
2029 document.getElementById("TechProjects-bulkAdd").classList.add("d-none");
2030 document.getElementById("TechProjects-bulkFund").classList.add("d-none");
2031 document.getElementById("TechProjects-bulkComplete").classList.add("d-none");
2032 document.getElementById("TechProjects-bulkRemove").classList.add("d-none");
2033 document.getElementById("VaultDecoRecipes-bulkAdd").classList.add("d-none");
2034 document.getElementById("VaultDecoRecipes-bulkRemove").classList.add("d-none");
2035 document.getElementById("VaultShipDecorations-bulkRemove").classList.add("d-none");
2036 document.getElementById("VaultShipDecorations-bulkAdd").classList.add("d-none");
2037 document.getElementById("VaultShipDecorations-bulkRemove").classList.add("d-none");
2038 document.getElementById("VaultMiscItems-bulkRemove").classList.add("d-none");
2005 2039 document.getElementById("guildView-loading").classList.add("d-none");
2006 2040 $("#guild-route > .row").removeClass("d-none");
2007 2041
@@ -2051,9 +2085,16 @@ function translateInventoryDataToDom() {
2051 2085 document.getElementById("vaultShipDecorations-form").classList.remove("d-none");
2052 2086 }
2053 2087 if (userGuildMember.Rank <= 1) {
2054 document.querySelectorAll("#guild-actions button").forEach(btn => {
2055 btn.disabled = false;
2056 });
2088 document.getElementById("TechProjects-bulkAdd").classList.remove("d-none");
2089 document.getElementById("TechProjects-bulkFund").classList.remove("d-none");
2090 document.getElementById("TechProjects-bulkComplete").classList.remove("d-none");
2091 document.getElementById("TechProjects-bulkRemove").classList.remove("d-none");
2092 document.getElementById("VaultDecoRecipes-bulkAdd").classList.remove("d-none");
2093 document.getElementById("VaultDecoRecipes-bulkRemove").classList.remove("d-none");
2094 document.getElementById("VaultShipDecorations-bulkRemove").classList.remove("d-none");
2095 document.getElementById("VaultShipDecorations-bulkAdd").classList.remove("d-none");
2096 document.getElementById("VaultShipDecorations-bulkRemove").classList.remove("d-none");
2097 document.getElementById("VaultMiscItems-bulkRemove").classList.remove("d-none");
2057 2098 }
2058 2099 }
2059 2100
@@ -2094,7 +2135,7 @@ function translateInventoryDataToDom() {
2094 2135 debounce(fundGuildTechProject, item.ItemType);
2095 2136 };
2096 2137 a.title = loc("code_fund");
2097 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free v7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M214.6 17.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 117.3 160 488c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 105.4 105.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
2138 a.innerHTML = icons.arrowUp;
2098 2139 td.appendChild(a);
2099 2140 }
2100 2141
@@ -2111,7 +2152,7 @@ function translateInventoryDataToDom() {
2111 2152 debounce(completeGuildTechProject, item.ItemType);
2112 2153 };
2113 2154 a.title = loc("code_complete");
2114 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free v7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M371.7 43.1C360.1 32 343 28.9 328.3 35.2S304 56 304 72l0 136.3-172.3-165.1C120.1 32 103 28.9 88.3 35.2S64 56 64 72l0 368c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9L304 303.7 304 440c0 16 9.6 30.5 24.3 36.8s31.8 3.2 43.4-7.9l192-184c7.9-7.5 12.3-18 12.3-28.9s-4.5-21.3-12.3-28.9l-192-184z"/></svg>`;
2155 a.innerHTML = icons.forward;
2115 2156 td.appendChild(a);
2116 2157 }
2117 2158
@@ -2123,7 +2164,7 @@ function translateInventoryDataToDom() {
2123 2164 debounce(removeGuildTechProject, item.ItemType);
2124 2165 };
2125 2166 a.title = loc("code_remove");
2126 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
2167 a.innerHTML = icons.trash;
2127 2168 td.appendChild(a);
2128 2169 }
2129 2170
@@ -2161,7 +2202,7 @@ function translateInventoryDataToDom() {
2161 2202 e.preventDefault();
2162 2203 removeVaultItem(vaultKey, item.ItemType, item.ItemCount * -1);
2163 2204 };
2164 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
2205 a.innerHTML = icons.trash;
2165 2206 td.appendChild(a);
2166 2207 }
2167 2208 tr.appendChild(td);
@@ -2202,7 +2243,7 @@ function translateInventoryDataToDom() {
2202 2243 changeGuildRank(guildId, member._id.$oid, member.Rank + 1);
2203 2244 };
2204 2245 a.title = loc("guildView_demote");
2205 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`;
2246 a.innerHTML = icons.angleDown;
2206 2247 td.appendChild(a);
2207 2248 }
2208 2249 if (
@@ -2218,7 +2259,7 @@ function translateInventoryDataToDom() {
2218 2259 changeGuildRank(guildId, member._id.$oid, member.Rank - 1);
2219 2260 };
2220 2261 a.title = loc("guildView_promote");
2221 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"/></svg>`;
2262 a.innerHTML = icons.angleUp;
2222 2263 td.appendChild(a);
2223 2264 }
2224 2265
@@ -2236,7 +2277,7 @@ function translateInventoryDataToDom() {
2236 2277 kickFromGuild(member._id.$oid);
2237 2278 };
2238 2279 a.title = loc("code_remove");
2239 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
2280 a.innerHTML = icons.trash;
2240 2281 td.appendChild(a);
2241 2282 }
2242 2283
@@ -2285,7 +2326,7 @@ function translateInventoryDataToDom() {
2285 2326 kickFromAlliance(clan._id.$oid);
2286 2327 };
2287 2328 a.title = loc("code_remove");
2288 a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
2329 a.innerHTML = icons.trash;
2289 2330 td.appendChild(a);
2290 2331 }
2291 2332
@@ -2317,17 +2358,160 @@ function translateInventoryDataToDom() {
2317 2358 });
2318 2359 }
2319 2360
2361 dictPromise.then(() => {
2362 const invenotryHeaders = document.querySelectorAll(".card-header[data-cardtype]");
2363 invenotryHeaders.forEach(elm => {
2364 elm.innerHTML = "";
2365 elm.classList.remove(...elm.classList);
2366 elm.classList.add("card-header", "d-flex", "justify-content-between", "align-items-center");
2367
2368 const cardType = elm.dataset.cardtype;
2369
2370 {
2371 const h5 = document.createElement("h5");
2372 h5.classList.add("mb-0");
2373 const locStr = `inventory_${cardType.charAt(0).toLowerCase() + cardType.slice(1)}`;
2374 h5.textContent = loc(locStr);
2375 h5.setAttribute("data-loc", locStr);
2376
2377 elm.appendChild(h5);
2378 }
2379 {
2380 const butDiv = document.createElement("div");
2381 butDiv.classList.add("d-flex", "gap-2");
2382
2383 if (!["MoaPets", "Hoverboards", "Boosters"].includes(cardType)) {
2384 const a = document.createElement("a");
2385 a.href = "#";
2386 a.onclick = function (event) {
2387 event.preventDefault();
2388 if (cardType != "EvolutionProgress") {
2389 debounce(addMissingEquipment, [cardType]);
2390 } else {
2391 debounce(addMissingEvolutionProgress);
2392 }
2393 };
2394 a.title = loc("inventory_bulkAdd");
2395 a.innerHTML = icons.plus;
2396 butDiv.appendChild(a);
2397 }
2398 if (!["Boosters", "FlavourItems", "ShipDecorations", "WeaponSkins"].includes(cardType)) {
2399 const a = document.createElement("a");
2400 a.href = "#";
2401 a.onclick = function (event) {
2402 event.preventDefault();
2403 if (cardType != "EvolutionProgress") {
2404 debounce(maxRankAllEquipment, [cardType]);
2405 } else {
2406 debounce(maxRankAllEvolutions);
2407 }
2408 };
2409 a.title = loc("inventory_bulkRankUp");
2410 a.innerHTML = icons.arrowUp;
2411 butDiv.appendChild(a);
2412 }
2413 if (!["EvolutionProgress", "Boosters"].includes(cardType)) {
2414 const a = document.createElement("a");
2415 a.href = "#";
2416 a.onclick = function (event) {
2417 event.preventDefault();
2418 removeItems(cardType);
2419 };
2420 a.title = loc("inventory_bulkRemove");
2421 a.innerHTML = icons.trash;
2422 butDiv.appendChild(a);
2423 }
2424
2425 elm.appendChild(butDiv);
2426 }
2427 });
2428 const guildHeaders = document.querySelectorAll(".card-header[data-guildCardType]");
2429 guildHeaders.forEach(elm => {
2430 elm.innerHTML = "";
2431 elm.classList.remove(...elm.classList);
2432 elm.classList.add("card-header", "d-flex", "justify-content-between", "align-items-center");
2433
2434 const cardType = elm.dataset.guildcardtype;
2435
2436 {
2437 const h5 = document.createElement("h5");
2438 h5.classList.add("mb-0");
2439 const locStr = `guildView_${cardType.charAt(0).toLowerCase() + cardType.slice(1)}`;
2440 h5.textContent = loc(locStr);
2441 h5.setAttribute("data-loc", locStr);
2442
2443 elm.appendChild(h5);
2444 }
2445 {
2446 const butDiv = document.createElement("div");
2447 butDiv.classList.add("d-flex", "gap-2");
2448
2449 if (cardType != "VaultMiscItems") {
2450 const a = document.createElement("a");
2451 a.href = "#";
2452 a.onclick = function (event) {
2453 event.preventDefault();
2454 if (cardType != "TechProjects") {
2455 debounce(addMissingVaultItems, cardType);
2456 } else {
2457 debounce(addMissingTechProjects);
2458 }
2459 };
2460 a.title = loc("inventory_bulkAdd");
2461 a.innerHTML = icons.plus;
2462 a.id = `${cardType}-bulkAdd`;
2463 butDiv.appendChild(a);
2464 }
2465 if (cardType == "TechProjects") {
2466 const a = document.createElement("a");
2467 a.href = "#";
2468 a.onclick = function (event) {
2469 event.preventDefault();
2470 debounce(fundAllTechProjects);
2471 };
2472 a.title = loc("guildView_bulkFund");
2473 a.innerHTML = icons.arrowUp;
2474 a.id = `${cardType}-bulkFund`;
2475 butDiv.appendChild(a);
2476 }
2477 if (cardType == "TechProjects") {
2478 const a = document.createElement("a");
2479 a.href = "#";
2480 a.onclick = function (event) {
2481 event.preventDefault();
2482 debounce(completeAllTechProjects);
2483 };
2484 a.title = loc("guildView_bulkComplete");
2485 a.innerHTML = icons.forward;
2486 a.id = `${cardType}-bulkComplete`;
2487 butDiv.appendChild(a);
2488 }
2489 {
2490 const a = document.createElement("a");
2491 a.href = "#";
2492 a.onclick = function (event) {
2493 event.preventDefault();
2494 if (cardType != "TechProjects") {
2495 debounce(bulkRemoveVaultItems, cardType);
2496 } else {
2497 debounce(bulkRemoveTechProjects);
2498 }
2499 };
2500 a.title = loc("inventory_bulkRemove");
2501 a.innerHTML = icons.trash;
2502 a.id = `${cardType}-bulkRemove`;
2503 butDiv.appendChild(a);
2504 }
2505
2506 elm.appendChild(butDiv);
2507 }
2508 });
2509 });
2510
2320 2511 function changeGuildRank(guildId, targetId, rankChange) {
2321 2512 revalidateAuthz().then(() => {
2322 2513 const req = $.get(
2323 "/api/changeGuildRank.php?" +
2324 window.authz +
2325 "&guildId=" +
2326 guildId +
2327 "&targetId=" +
2328 targetId +
2329 "&rankChange=" +
2330 rankChange
2514 `/api/changeGuildRank.php?${window.authz}&guildId=${guildId}&targetId=${targetId}&rankChange=${rankChange}`
2331 2515 );
2332 2516 req.done(() => {
2333 2517 updateInventory();
@@ -2762,7 +2946,7 @@ function dispatchAddVaultItemsBatch(requests, vaultType) {
2762 2946 return new Promise(resolve => {
2763 2947 revalidateAuthz().then(() => {
2764 2948 const req = $.post({
2765 url: "/custom/addVaultItems?" + window.authz + "&guildId=" + window.guildId,
2949 url: "/custom/addVaultTypeCount?" + window.authz + "&guildId=" + window.guildId,
2766 2950 contentType: "application/json",
2767 2951 data: JSON.stringify({
2768 2952 vaultType,
@@ -2779,12 +2963,11 @@ function dispatchAddVaultItemsBatch(requests, vaultType) {
2779 2963
2780 2964 function addMissingVaultItems(vaultType) {
2781 2965 const requests = [];
2782
2783 document.querySelectorAll(`#datalist-${vaultType} option`).forEach(elm => {
2784 const datalist = vaultType === "VaultShipDecorations" ? "ShipDecorations" : vaultType;
2785 if (!document.querySelector(`#${datalist}-list [data-item-type='${elm.getAttribute("data-key")}']`)) {
2966 const datalist = vaultType === "VaultShipDecorations" ? "ShipDecorations" : vaultType;
2967 document.querySelectorAll(`#datalist-${datalist} option`).forEach(elm => {
2968 if (!document.querySelector(`#${vaultType}-list [data-item-type='${elm.getAttribute("data-key")}']`)) {
2786 2969 let ItemCount = 1;
2787 if (category == "VaultShipDecorations") ItemCount = 999999;
2970 if (vaultType == "VaultShipDecorations") ItemCount = 999999;
2788 2971 requests.push({ ItemType: elm.getAttribute("data-key"), ItemCount });
2789 2972 }
2790 2973 });
@@ -2830,6 +3013,58 @@ function addMissingTechProjects() {
2830 3013 }
2831 3014 }
2832 3015
3016 function bulkRemoveVaultItems(vaultType) {
3017 const requests = [];
3018 const datalist = vaultType === "VaultShipDecorations" ? "ShipDecorations" : vaultType;
3019 document.querySelectorAll(`#datalist-${datalist} option`).forEach(elm => {
3020 if (document.querySelector(`#${vaultType}-list [data-item-type='${elm.getAttribute("data-key")}']`)) {
3021 let ItemCount = 1;
3022 if (vaultType == "VaultShipDecorations") ItemCount = 999999;
3023 requests.push({ ItemType: elm.getAttribute("data-key"), ItemCount: ItemCount * -1 });
3024 }
3025 });
3026
3027 if (
3028 requests.length != 0 &&
3029 window.confirm(loc("code_removeVaultItemsConfirm").split("|COUNT|").join(requests.length))
3030 ) {
3031 return dispatchAddVaultItemsBatch(requests, vaultType);
3032 }
3033 }
3034
3035 function dispatchRemoveTechProjectsBatch(requests) {
3036 return new Promise(resolve => {
3037 revalidateAuthz().then(() => {
3038 const req = $.post({
3039 url: "/custom/removeTechProject?" + window.authz + "&guildId=" + window.guildId,
3040 contentType: "application/json",
3041 data: JSON.stringify(requests)
3042 });
3043 req.done(() => {
3044 updateInventory();
3045 resolve();
3046 });
3047 });
3048 });
3049 }
3050
3051 function bulkRemoveTechProjects() {
3052 const requests = [];
3053
3054 document.querySelectorAll("#datalist-TechProjects option").forEach(elm => {
3055 if (document.querySelector("#TechProjects-list [data-item-type='" + elm.getAttribute("data-key") + "']")) {
3056 requests.push({ ItemType: elm.getAttribute("data-key") });
3057 }
3058 });
3059
3060 if (
3061 requests.length != 0 &&
3062 window.confirm(loc("code_removeTechProjectsConfirm").split("|COUNT|").join(requests.length))
3063 ) {
3064 return dispatchRemoveTechProjectsBatch(requests);
3065 }
3066 }
3067
2833 3068 function dispatchFundTechProjectsBatch(requests) {
2834 3069 return new Promise(resolve => {
2835 3070 revalidateAuthz().then(() => {
@@ -2957,13 +3192,17 @@ function maxRankAllEquipment(categories) {
2957 3192
2958 3193 categories.forEach(category => {
2959 3194 data[category].forEach(item => {
2960 const maxXP =
2961 category === "Suits" ||
2962 category === "SpaceSuits" ||
2963 category === "Sentinels" ||
2964 category === "Hoverboards"
2965 ? 1_600_000
2966 : 800_000;
3195 const maxXP = [
3196 "Suits",
3197 "SpaceSuits",
3198 "Sentinels",
3199 "Hoverboards",
3200 "MechSuits",
3201 "MoaPets",
3202 "KubrowPets"
3203 ].includes(category)
3204 ? 1_600_000
3205 : 800_000;
2967 3206
2968 3207 if (item.XP < maxXP) {
2969 3208 if (!batchData[category]) {
@@ -3248,7 +3487,7 @@ function addItemByItemType() {
3248 3487 }
3249 3488 ])
3250 3489 })
3251 .done(function (_, _, jqXHR) {
3490 .done(function (_, __, jqXHR) {
3252 3491 if (jqXHR.status === 200) {
3253 3492 toast(loc("code_succAdded"));
3254 3493 updateInventory();
@@ -3783,9 +4022,6 @@ single.getRoute("#guild-route").on("beforeload", function () {
3783 4022 document.getElementById("Alliance-list").innerHTML = "";
3784 4023 document.getElementById("guildView-alliance").textContent = "";
3785 4024 document.getElementById("Members-list").innerHTML = "";
3786 document.querySelectorAll("#guild-actions button").forEach(btn => {
3787 btn.disabled = true;
3788 });
3789 4025 $("#guild-route > .row").addClass("d-none");
3790 4026 if (window.didInitialInventoryUpdate) {
3791 4027 translateInventoryDataToDom();
@@ -3801,14 +4037,7 @@ function doPushArchonCrystalUpgrade() {
3801 4037 }
3802 4038 revalidateAuthz().then(() => {
3803 4039 $.get(
3804 "/custom/pushArchonCrystalUpgrade?" +
3805 window.authz +
3806 "&oid=" +
3807 urlParams.get("itemId") +
3808 "&type=" +
3809 uniqueName +
3810 "&count=" +
3811 $("#archon-crystal-add-count").val()
4040 `/custom/pushArchonCrystalUpgrade?${window.authz}&oid=${urlParams.get("itemId")}&type=${uniqueName}&count=${$("#archon-crystal-add-count").val()}`
3812 4041 ).done(function () {
3813 4042 $("[list='datalist-archonCrystalUpgrades']").val("");
3814 4043 updateInventory();
@@ -4559,3 +4788,16 @@ function handleAbilityOverride(event, configIndex) {
4559 4788 });
4560 4789 });
4561 4790 }
4791
4792 function removeItems(category) {
4793 revalidateAuthz().then(() => {
4794 const count = document.getElementById(category + "-list").getElementsByTagName("tr").length;
4795 let message = loc("code_bulkRemoveConfirm").split("|COUNT|").join(count);
4796 if (category === "Suits") message += "\n" + loc("code_bulkRemoveNote");
4797 if (count != 0 && window.confirm(message)) {
4798 $.get("/custom/removeItems?" + window.authz + "&category=" + category).done(function () {
4799 updateInventory();
4800 });
4801 }
4802 });
4803 }
Modified static/webui/translations/de.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `Neuen benutzerdefinierten Namen eingeben:`,
38 38 code_remove: `Entfernen`,
39 39 code_addItemsConfirm: `Bist du sicher, dass du |COUNT| Inhalt(e) zu deinem Account hinzufügen möchtest?`,
40 code_bulkRemoveConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) from your account?`,
41 code_bulkRemoveNote: `[UNTRANSLATED] For the game to work properly, it is recommended to own at least one Warframe.`,
40 42 code_addTechProjectsConfirm: `Bist du sicher, dass du |COUNT| Forschung(en) zu deinem Clan hinzufügen möchtest?`,
41 43 code_addVaultItemsConfirm: `Bist du sicher, dass du |COUNT| Inhalt(e) zu deinem Clan-Tresor hinzufügen möchtest?`,
44 code_removeTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| research to your clan?`,
45 code_removeVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
42 46 code_succRankUp: `Erfolgreich aufgestiegen.`,
43 47 code_noEquipmentToRankUp: `Keine Ausstattung zum Rangaufstieg verfügbar.`,
44 48 code_succAdded: `Erfolgreich hinzugefügt.`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="Animationssets, Glyphen, Farbpaletten usw.">Sammlerstücke</abbr>`,
136 140 inventory_shipDecorations: `Schiffsdekorationen`,
137 141 inventory_weaponSkins: `Skins`,
138 inventory_bulkAddSuits: `Fehlende Warframes hinzufügen`,
139 inventory_bulkAddWeapons: `Fehlende Waffen hinzufügen`,
140 inventory_bulkAddSpaceSuits: `Fehlende Archwings hinzufügen`,
141 inventory_bulkAddSpaceWeapons: `Fehlende Archwing-Waffen hinzufügen`,
142 inventory_bulkAddSentinels: `Fehlende Wächter hinzufügen`,
143 inventory_bulkAddSentinelWeapons: `Fehlende Wächter-Waffen hinzufügen`,
144 inventory_bulkAddFlavourItems: `Fehlende Sammlerstücke hinzufügen`,
145 inventory_bulkAddShipDecorations: `Fehlende Schiffsdekorationen hinzufügen`,
146 inventory_bulkAddEvolutionProgress: `Fehlende Incarnon-Entwicklungsfortschritte hinzufügen`,
147 inventory_bulkAddWeaponSkins: `Fehlende Skins hinzufügen`,
148 inventory_bulkRankUpSuits: `Alle Warframes auf Max. Rang`,
149 inventory_bulkRankUpWeapons: `Alle Waffen auf Max. Rang`,
150 inventory_bulkRankUpSpaceSuits: `Alle Archwings auf Max. Rang`,
151 inventory_bulkRankUpSpaceWeapons: `Alle Archwing-Waffen auf Max. Rang`,
152 inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
153 inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
154 inventory_bulkRankUpEvolutionProgress: `Alle Incarnon-Entwicklungsfortschritte auf Max. Rang`,
142 inventory_bulkAdd: `[UNTRANSLATED] Add Missing`,
143 inventory_bulkRankUp: `[UNTRANSLATED] Max Rank All`,
144 inventory_bulkRemove: `[UNTRANSLATED] Remove all`,
155 145 inventory_removeIsNew: `Entferne Ausrufezeichen bei neuem Equipment`,
156 146
157 147 quests_list: `Quests`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `Versorger`,
490 480 guildView_rank_warlord: `Kriegsherr`,
491 481 guildView_currency_owned: `|COUNT| im Tresor.`,
492 guildView_bulkAddTechProjects: `Fehlende Forschungen hinzufügen`,
493 guildView_bulkAddVaultDecoRecipes: `Fehlende Dojo-Deko-Baupläne hinzufügen`,
494 guildView_bulkAddVaultShipDecorations: `Fehlende Dekorationen im Tresor hinzufügen`,
495 guildView_bulkFundTechProjects: `Alle Forschungen spenden`,
496 guildView_bulkCompleteTechProjects: `Alle Forschungen abschließen`,
482 guildView_bulkFund: `[UNTRANSLATED] Fund All`,
483 guildView_bulkComplete: `[UNTRANSLATED] Complete All`,
497 484 guildView_promote: `Befördern`,
498 485 guildView_demote: `Degradieren`,
499 486
Modified static/webui/translations/en.js +9 -22
@@ -36,8 +36,12 @@ dict = {
36 36 code_renamePrompt: `Enter new custom name:`,
37 37 code_remove: `Remove`,
38 38 code_addItemsConfirm: `Are you sure you want to add |COUNT| item(s) to your account?`,
39 code_bulkRemoveConfirm: `Are you sure you want to remove |COUNT| item(s) from your account?`,
40 code_bulkRemoveNote: `For the game to work properly, it is recommended to own at least one Warframe.`,
39 41 code_addTechProjectsConfirm: `Are you sure you want to add |COUNT| research to your clan?`,
40 42 code_addVaultItemsConfirm: `Are you sure you want to add |COUNT| item(s) to your clan vault?`,
43 code_removeTechProjectsConfirm: `Are you sure you want to remove |COUNT| research to your clan?`,
44 code_removeVaultItemsConfirm: `Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
41 45 code_succRankUp: `Successfully ranked up.`,
42 46 code_noEquipmentToRankUp: `No equipment to rank up.`,
43 47 code_succAdded: `Successfully added.`,
@@ -134,23 +138,9 @@ dict = {
134 138 inventory_flavourItems: `<abbr title="Animation Sets, Glyphs, Palettes, etc.">Flavour Items</abbr>`,
135 139 inventory_shipDecorations: `Ship Decorations`,
136 140 inventory_weaponSkins: `Skins`,
137 inventory_bulkAddSuits: `Add Missing Warframes`,
138 inventory_bulkAddWeapons: `Add Missing Weapons`,
139 inventory_bulkAddSpaceSuits: `Add Missing Archwings`,
140 inventory_bulkAddSpaceWeapons: `Add Missing Archwing Weapons`,
141 inventory_bulkAddSentinels: `Add Missing Sentinels`,
142 inventory_bulkAddSentinelWeapons: `Add Missing Sentinel Weapons`,
143 inventory_bulkAddFlavourItems: `Add Missing Flavour Items`,
144 inventory_bulkAddShipDecorations: `Add Missing Ship Decorations`,
145 inventory_bulkAddEvolutionProgress: `Add Missing Incarnon Evolution Progress`,
146 inventory_bulkAddWeaponSkins: `Add Missing Skins`,
147 inventory_bulkRankUpSuits: `Max Rank All Warframes`,
148 inventory_bulkRankUpWeapons: `Max Rank All Weapons`,
149 inventory_bulkRankUpSpaceSuits: `Max Rank All Archwings`,
150 inventory_bulkRankUpSpaceWeapons: `Max Rank All Archwing Weapons`,
151 inventory_bulkRankUpSentinels: `Max Rank All Sentinels`,
152 inventory_bulkRankUpSentinelWeapons: `Max Rank All Sentinel Weapons`,
153 inventory_bulkRankUpEvolutionProgress: `Max Rank All Incarnon Evolution Progress`,
141 inventory_bulkAdd: `Add Missing`,
142 inventory_bulkRankUp: `Max Rank All`,
143 inventory_bulkRemove: `Remove all`,
154 144 inventory_removeIsNew: `Remove New Equipment Exclamation Icon`,
155 145
156 146 quests_list: `Quests`,
@@ -488,11 +478,8 @@ dict = {
488 478 guildView_rank_utility: `Utility`,
489 479 guildView_rank_warlord: `Warlord`,
490 480 guildView_currency_owned: `|COUNT| in Vault.`,
491 guildView_bulkAddTechProjects: `Add Missing Research`,
492 guildView_bulkAddVaultDecoRecipes: `Add Missing Dojo Deco Recipes`,
493 guildView_bulkAddVaultShipDecorations: `Add Missing Decorations in Vault`,
494 guildView_bulkFundTechProjects: `Fund All Research`,
495 guildView_bulkCompleteTechProjects: `Complete All Research`,
481 guildView_bulkFund: `Fund All`,
482 guildView_bulkComplete: `Complete All`,
496 483 guildView_promote: `Promote`,
497 484 guildView_demote: `Demote`,
498 485
Modified static/webui/translations/es.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `Escribe tu nuevo nombre personalizado:`,
38 38 code_remove: `Quitar`,
39 39 code_addItemsConfirm: `¿Estás seguro de que deseas agregar |COUNT| objetos a tu cuenta?`,
40 code_bulkRemoveConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) from your account?`,
41 code_bulkRemoveNote: `[UNTRANSLATED] For the game to work properly, it is recommended to own at least one Warframe.`,
40 42 code_addTechProjectsConfirm: `¿Estás seguro de que quieres añadir |COUNT| proyectos de investigación a tu clan?`,
41 43 code_addVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to add |COUNT| item(s) to your clan vault?`,
44 code_removeTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| research to your clan?`,
45 code_removeVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
42 46 code_succRankUp: `Ascenso exitoso.`,
43 47 code_noEquipmentToRankUp: `No hay equipo para ascender.`,
44 48 code_succAdded: `Agregado exitosamente.`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="Conjuntos de animaciones, glifos, paletas, etc.">Ítems estéticos</abbr>`,
136 140 inventory_shipDecorations: `Decoraciones de nave`,
137 141 inventory_weaponSkins: `Diseños`,
138 inventory_bulkAddSuits: `Agregar Warframes faltantes`,
139 inventory_bulkAddWeapons: `Agregar armas faltantes`,
140 inventory_bulkAddSpaceSuits: `Agregar Archwings faltantes`,
141 inventory_bulkAddSpaceWeapons: `Agregar armas Archwing faltantes`,
142 inventory_bulkAddSentinels: `Agregar centinelas faltantes`,
143 inventory_bulkAddSentinelWeapons: `Agregar armas de centinela faltantes`,
144 inventory_bulkAddFlavourItems: `Añadir items estéticos faltantes`,
145 inventory_bulkAddShipDecorations: `Añadir decoraciones de Nave Faltantes`,
146 inventory_bulkAddEvolutionProgress: `Completar el progreso de evolución Incarnon faltante`,
147 inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
148 inventory_bulkRankUpSuits: `Maximizar rango de todos los Warframes`,
149 inventory_bulkRankUpWeapons: `Maximizar rango de todas las armas`,
150 inventory_bulkRankUpSpaceSuits: `Maximizar rango de todos los Archwings`,
151 inventory_bulkRankUpSpaceWeapons: `Maximizar rango de todas las armas Archwing`,
152 inventory_bulkRankUpSentinels: `Maximizar rango de todos los centinelas`,
153 inventory_bulkRankUpSentinelWeapons: `Maximizar rango de todas las armas de centinela`,
154 inventory_bulkRankUpEvolutionProgress: `Maximizar todo el progreso de evolución Incarnon`,
142 inventory_bulkAdd: `[UNTRANSLATED] Add Missing`,
143 inventory_bulkRankUp: `[UNTRANSLATED] Max Rank All`,
144 inventory_bulkRemove: `[UNTRANSLATED] Remove all`,
155 145 inventory_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`,
156 146
157 147 quests_list: `Misiones`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `Utilitario`,
490 480 guildView_rank_warlord: `Señor de la guerra`,
491 481 guildView_currency_owned: `|COUNT| en la Bóveda.`,
492 guildView_bulkAddTechProjects: `Añadir proyectos de Investigación Faltantes`,
493 guildView_bulkAddVaultDecoRecipes: `Añadir planos de Decoración de Dojo Faltantes`,
494 guildView_bulkAddVaultShipDecorations: `[UNTRANSLATED] Add Missing Decorations in Vault`,
495 guildView_bulkFundTechProjects: `Financiar toda la Investigación`,
496 guildView_bulkCompleteTechProjects: `Completar toda la Investigación`,
482 guildView_bulkFund: `[UNTRANSLATED] Fund All`,
483 guildView_bulkComplete: `[UNTRANSLATED] Complete All`,
497 484 guildView_promote: `Promover`,
498 485 guildView_demote: `Degradar`,
499 486
Modified static/webui/translations/fr.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `Nouveau nom :`,
38 38 code_remove: `Retirer`,
39 39 code_addItemsConfirm: `Ajouter |COUNT| items à l'inventaire ?`,
40 code_bulkRemoveConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) from your account?`,
41 code_bulkRemoveNote: `[UNTRANSLATED] For the game to work properly, it is recommended to own at least one Warframe.`,
40 42 code_addTechProjectsConfirm: `Ajouter |COUNT| recherches au clan ?`,
41 43 code_addVaultItemsConfirm: `Ajouter |COUNT| objets au coffre de clan ?`,
44 code_removeTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| research to your clan?`,
45 code_removeVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
42 46 code_succRankUp: `Montée de niveau effectuée.`,
43 47 code_noEquipmentToRankUp: `Aucun équipement à monter de niveau.`,
44 48 code_succAdded: `Ajouté.`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="Animation Sets, Glyphs, Palettes, etc.">Collectables</abbr>`,
136 140 inventory_shipDecorations: `Décorations du vaisseau`,
137 141 inventory_weaponSkins: `Aspects`,
138 inventory_bulkAddSuits: `Ajouter les Warframes manquantes`,
139 inventory_bulkAddWeapons: `Ajouter les armes manquantes`,
140 inventory_bulkAddSpaceSuits: `Ajouter les Archwings manquants`,
141 inventory_bulkAddSpaceWeapons: `Ajouter les armes d'Archwing manquantes`,
142 inventory_bulkAddSentinels: `Ajouter les Sentinelles manquantes`,
143 inventory_bulkAddSentinelWeapons: `Ajouter les armes de Sentinelles manquantes`,
144 inventory_bulkAddFlavourItems: `Ajouter les collectables manquants ?`,
145 inventory_bulkAddShipDecorations: `Ajouter les décorations de vaisseau manquantes`,
146 inventory_bulkAddEvolutionProgress: `Ajouter les évolutions Incarnon manquantes`,
147 inventory_bulkAddWeaponSkins: `Ajouter les skins manquants`,
148 inventory_bulkRankUpSuits: `Toutes les Warframes au rang max`,
149 inventory_bulkRankUpWeapons: `Toutes les armes au rang max`,
150 inventory_bulkRankUpSpaceSuits: `Tous les Archwings au rang max`,
151 inventory_bulkRankUpSpaceWeapons: `Toutes les armes d'Archwing au rang max`,
152 inventory_bulkRankUpSentinels: `Toutes les Sentinelles au rang max`,
153 inventory_bulkRankUpSentinelWeapons: `Toutes les armes de Sentinelles au rang max`,
154 inventory_bulkRankUpEvolutionProgress: `Toutes les évolutions Incarnon au rang max`,
142 inventory_bulkAdd: `[UNTRANSLATED] Add Missing`,
143 inventory_bulkRankUp: `[UNTRANSLATED] Max Rank All`,
144 inventory_bulkRemove: `[UNTRANSLATED] Remove all`,
155 145 inventory_removeIsNew: `Supprimer "!" sur les nouveaux équipements`,
156 146
157 147 quests_list: `Quêtes`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `Utilitaire`,
490 480 guildView_rank_warlord: `Seigneur de guerre`,
491 481 guildView_currency_owned: `|COUNT| dans le coffre.`,
492 guildView_bulkAddTechProjects: `Ajouter les recherches manquantes`,
493 guildView_bulkAddVaultDecoRecipes: `Ajouter les schémas de décorations de dojo manquantes`,
494 guildView_bulkAddVaultShipDecorations: `Ajouter dans le coffre les décorations manquantes`,
495 guildView_bulkFundTechProjects: `Financer toutes les recherches`,
496 guildView_bulkCompleteTechProjects: `Compléter toutes les recherches`,
482 guildView_bulkFund: `[UNTRANSLATED] Fund All`,
483 guildView_bulkComplete: `[UNTRANSLATED] Complete All`,
497 484 guildView_promote: `Promouvoir`,
498 485 guildView_demote: `Rétrograder`,
499 486
Modified static/webui/translations/ru.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `Введите новое имя:`,
38 38 code_remove: `Удалить`,
39 39 code_addItemsConfirm: `Вы уверены, что хотите добавить |COUNT| предмет(ов) на ваш аккаунт?`,
40 code_bulkRemoveConfirm: `Вы уверены, что хотите удалить |COUNT| предмет(ов) с вашего аккаунта?`,
41 code_bulkRemoveNote: `Для правильной работы игры рекомендуется иметь хотя бы одного Варфрейма.`,
40 42 code_addTechProjectsConfirm: `Вы уверены, что хотите добавить |COUNT| исследований в свой клан?`,
41 43 code_addVaultItemsConfirm: `Вы уверены, что хотите добавить |COUNT| предмет(ов) в хранилище своего клана?`,
44 code_removeTechProjectsConfirm: `Вы уверены, что хотите удалить |COUNT| исследований своего клана?`,
45 code_removeVaultItemsConfirm: `Вы уверены, что хотите удалить |COUNT| предмет(ов) с хранилища своего клана?`,
42 46 code_succRankUp: `Ранг успешно повышен.`,
43 47 code_noEquipmentToRankUp: `Нет снаряжения для повышения ранга.`,
44 48 code_succAdded: `Успешно добавлено.`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="Наборы анимаций, глифы, палитры и т. д.">Уникальные предметы</abbr>`,
136 140 inventory_shipDecorations: `Украшения корабля`,
137 141 inventory_weaponSkins: `Скины`,
138 inventory_bulkAddSuits: `Добавить отсутствующие Варфреймы`,
139 inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
140 inventory_bulkAddSpaceSuits: `Добавить отсутствующие Арчвинги`,
141 inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие Арчвингов`,
142 inventory_bulkAddSentinels: `Добавить отсутствующих Стражей`,
143 inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие Стражей`,
144 inventory_bulkAddFlavourItems: `Добавить отсутствующие уникальные предметы`,
145 inventory_bulkAddShipDecorations: `Добавить отсутствующие украшения корабля`,
146 inventory_bulkAddEvolutionProgress: `Добавить отсутствующий прогресс эволюции Инкарнонов`,
147 inventory_bulkAddWeaponSkins: `Добавить отсутствующие скины`,
148 inventory_bulkRankUpSuits: `Макс. ранг всех Варфреймов`,
149 inventory_bulkRankUpWeapons: `Макс. ранг всего оружия`,
150 inventory_bulkRankUpSpaceSuits: `Макс. ранг всех Арчвингов`,
151 inventory_bulkRankUpSpaceWeapons: `Макс. ранг всего оружия Арчвингов`,
152 inventory_bulkRankUpSentinels: `Макс. ранг всех Стражей`,
153 inventory_bulkRankUpSentinelWeapons: `Макс. ранг всего оружия Стражей`,
154 inventory_bulkRankUpEvolutionProgress: `Макс. ранг всех эволюций Инкарнонов`,
142 inventory_bulkAdd: `Добавить отсутствующие`,
143 inventory_bulkRankUp: `Макс. ранг всего`,
144 inventory_bulkRemove: `Удалить все`,
155 145 inventory_removeIsNew: `Удалить значок восклицательного знака нового снаряжения`,
156 146
157 147 quests_list: `Квесты`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `Инженер`,
490 480 guildView_rank_warlord: `Военачальник`,
491 481 guildView_currency_owned: `В хранилище |COUNT|.`,
492 guildView_bulkAddTechProjects: `Добавить отсутствующие исследования`,
493 guildView_bulkAddVaultDecoRecipes: `Добавить отсутствующие рецепты декораций Дoдзё`,
494 guildView_bulkAddVaultShipDecorations: `Добавить отсутствующие укращения в Хранилище`,
495 guildView_bulkFundTechProjects: `Профинансировать все исследования`,
496 guildView_bulkCompleteTechProjects: `Завершить все исследования`,
482 guildView_bulkFund: `Профинансировать все`,
483 guildView_bulkComplete: `Завершить все`,
497 484 guildView_promote: `Повысить`,
498 485 guildView_demote: `Понизить`,
499 486
Modified static/webui/translations/uk.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `Введіть нове ім'я:`,
38 38 code_remove: `Видалити`,
39 39 code_addItemsConfirm: `Ви впевнені, що хочете додати |COUNT| предмет(ів) на ваш обліковий запис?`,
40 code_bulkRemoveConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) from your account?`,
41 code_bulkRemoveNote: `[UNTRANSLATED] For the game to work properly, it is recommended to own at least one Warframe.`,
40 42 code_addTechProjectsConfirm: `Ви впевнені, що хочете додати |COUNT| досліджень до свого клану?`,
41 43 code_addVaultItemsConfirm: `Ви впевнені, що хочете додати |COUNT| предмет(ів) до сховища вашого клану?`,
44 code_removeTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| research to your clan?`,
45 code_removeVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
42 46 code_succRankUp: `Рівень успішно підвищено`,
43 47 code_noEquipmentToRankUp: `Немає спорядження для підвищення рівня.`,
44 48 code_succAdded: `Успішно додано.`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="Набори анімацій, гліфи, палітри і т. д.">Унікальні предмети</abbr>`,
136 140 inventory_shipDecorations: `Прикраси судна`,
137 141 inventory_weaponSkins: `Вигляди`,
138 inventory_bulkAddSuits: `Додати відсутні Ворфрейми`,
139 inventory_bulkAddWeapons: `Додати відсутню зброю`,
140 inventory_bulkAddSpaceSuits: `Додати відсутні Арквінґи`,
141 inventory_bulkAddSpaceWeapons: `Додати відсутню зброю Арквінґів`,
142 inventory_bulkAddSentinels: `Додати відсутніх Вартових`,
143 inventory_bulkAddSentinelWeapons: `Додати відсутню зброю Вартових`,
144 inventory_bulkAddFlavourItems: `Додати відсутні унікальні предмети`,
145 inventory_bulkAddShipDecorations: `Додати відсутні оздоби корабля`,
146 inventory_bulkAddEvolutionProgress: `Додати відсутній прогрес еволюції Інкарнонів`,
147 inventory_bulkAddWeaponSkins: `Додати відсутні вигляди`,
148 inventory_bulkRankUpSuits: `Макс. рівень всіх Ворфреймів`,
149 inventory_bulkRankUpWeapons: `Макс. рівень всієї зброї`,
150 inventory_bulkRankUpSpaceSuits: `Макс. рівень всіх Арквінґів`,
151 inventory_bulkRankUpSpaceWeapons: `Макс. рівень всієї зброї Арквінґів`,
152 inventory_bulkRankUpSentinels: `Макс. рівень всіх Вартових`,
153 inventory_bulkRankUpSentinelWeapons: `Макс. рівень всієї зброї Вартових`,
154 inventory_bulkRankUpEvolutionProgress: `Макс. рівень всіх еволюцій Інкарнонів`,
142 inventory_bulkAdd: `[UNTRANSLATED] Add Missing`,
143 inventory_bulkRankUp: `[UNTRANSLATED] Max Rank All`,
144 inventory_bulkRemove: `[UNTRANSLATED] Remove all`,
155 145 inventory_removeIsNew: `Видалити значок вигуку нового обладнання`,
156 146
157 147 quests_list: `Пригоди`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `Наймит`,
490 480 guildView_rank_warlord: `Воєвода`,
491 481 guildView_currency_owned: `В сховищі |COUNT|.`,
492 guildView_bulkAddTechProjects: `Додати відсутні дослідження`,
493 guildView_bulkAddVaultDecoRecipes: `Додати відсутні рецепти оздоблень Доджьо`,
494 guildView_bulkAddVaultShipDecorations: `Додати відсутні оздоблення в сховище`,
495 guildView_bulkFundTechProjects: `Фінансувати всі дослідження`,
496 guildView_bulkCompleteTechProjects: `Завершити всі дослідження`,
482 guildView_bulkFund: `[UNTRANSLATED] Fund All`,
483 guildView_bulkComplete: `[UNTRANSLATED] Complete All`,
497 484 guildView_promote: `Підвищити звання`,
498 485 guildView_demote: `Понизити звання`,
499 486
Modified static/webui/translations/zh.js +9 -22
@@ -37,8 +37,12 @@ dict = {
37 37 code_renamePrompt: `输入新的自定义名称:`,
38 38 code_remove: `移除`,
39 39 code_addItemsConfirm: `确定要向您的账户添加 |COUNT| 件物品吗?`,
40 code_bulkRemoveConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) from your account?`,
41 code_bulkRemoveNote: `[UNTRANSLATED] For the game to work properly, it is recommended to own at least one Warframe.`,
40 42 code_addTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to add |COUNT| research to your clan?`,
41 43 code_addVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to add |COUNT| item(s) to your clan vault?`,
44 code_removeTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| research to your clan?`,
45 code_removeVaultItemsConfirm: `[UNTRANSLATED] Are you sure you want to remove |COUNT| item(s) to your clan vault?`,
42 46 code_succRankUp: `等级已提升`,
43 47 code_noEquipmentToRankUp: `没有可升级的装备`,
44 48 code_succAdded: `添加成功`,
@@ -135,23 +139,9 @@ dict = {
135 139 inventory_flavourItems: `<abbr title="动作表情、浮印、调色板等">装饰物品</abbr>`,
136 140 inventory_shipDecorations: `飞船装饰`,
137 141 inventory_weaponSkins: `外观`,
138 inventory_bulkAddSuits: `添加缺失战甲`,
139 inventory_bulkAddWeapons: `添加缺失武器`,
140 inventory_bulkAddSpaceSuits: `添加缺失载具`,
141 inventory_bulkAddSpaceWeapons: `添加缺失载具武器`,
142 inventory_bulkAddSentinels: `添加缺失守护`,
143 inventory_bulkAddSentinelWeapons: `添加缺失守护武器`,
144 inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
145 inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
146 inventory_bulkAddEvolutionProgress: `添加缺失的灵化之源进度`,
147 inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
148 inventory_bulkRankUpSuits: `所有战甲升满级`,
149 inventory_bulkRankUpWeapons: `所有武器升满级`,
150 inventory_bulkRankUpSpaceSuits: `所有载具升满级`,
151 inventory_bulkRankUpSpaceWeapons: `所有载具武器升满级`,
152 inventory_bulkRankUpSentinels: `所有守护升满级`,
153 inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`,
154 inventory_bulkRankUpEvolutionProgress: `所有灵化之源进度最大等级`,
142 inventory_bulkAdd: `[UNTRANSLATED] Add Missing`,
143 inventory_bulkRankUp: `[UNTRANSLATED] Max Rank All`,
144 inventory_bulkRemove: `[UNTRANSLATED] Remove all`,
155 145 inventory_removeIsNew: `[UNTRANSLATED] Remove New Equipment Exclamation Icon`,
156 146
157 147 quests_list: `系列任务`,
@@ -489,11 +479,8 @@ dict = {
489 479 guildView_rank_utility: `实管`,
490 480 guildView_rank_warlord: `军阀`,
491 481 guildView_currency_owned: `[UNTRANSLATED] |COUNT| in Vault.`,
492 guildView_bulkAddTechProjects: `[UNTRANSLATED] Add Missing Research`,
493 guildView_bulkAddVaultDecoRecipes: `[UNTRANSLATED] Add Missing Dojo Deco Recipes`,
494 guildView_bulkAddVaultShipDecorations: `[UNTRANSLATED] Add Missing Decorations in Vault`,
495 guildView_bulkFundTechProjects: `[UNTRANSLATED] Fund All Research`,
496 guildView_bulkCompleteTechProjects: `[UNTRANSLATED] Complete All Research`,
482 guildView_bulkFund: `[UNTRANSLATED] Fund All`,
483 guildView_bulkComplete: `[UNTRANSLATED] Complete All`,
497 484 guildView_promote: `升级`,
498 485 guildView_demote: `降级`,
499 486