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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

feat(webui): EvolutionProgress support (#1818)

Closes #1815 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1818 Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>

3f6734ac
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

12 个文件 +293 -8
Modified src/controllers/custom/getItemListsController.ts +9 -0
@@ -20,6 +20,7 @@ import {
20 20 TRelicQuality
21 21 } from "warframe-public-export-plus";
22 22 import archonCrystalUpgrades from "@/static/fixed_responses/webuiArchonCrystalUpgrades.json";
23 import allIncarnons from "@/static/fixed_responses/allIncarnonList.json";
23 24
24 25 interface ListedItem {
25 26 uniqueName: string;
@@ -51,6 +52,7 @@ interface ItemLists {
51 52 OperatorAmps: ListedItem[];
52 53 QuestKeys: ListedItem[];
53 54 KubrowPets: ListedItem[];
55 EvolutionProgress: ListedItem[];
54 56 mods: ListedItem[];
55 57 }
56 58
@@ -82,6 +84,7 @@ const getItemListsController: RequestHandler = (req, response) => {
82 84 OperatorAmps: [],
83 85 QuestKeys: [],
84 86 KubrowPets: [],
87 EvolutionProgress: [],
85 88 mods: []
86 89 };
87 90 for (const [uniqueName, item] of Object.entries(ExportWarframes)) {
@@ -283,6 +286,12 @@ const getItemListsController: RequestHandler = (req, response) => {
283 286 });
284 287 }
285 288 }
289 for (const uniqueName of allIncarnons) {
290 res.EvolutionProgress.push({
291 uniqueName,
292 name: getString(getItemName(uniqueName) || "", lang)
293 });
294 }
286 295
287 296 response.json(res);
288 297 };
Added src/controllers/custom/setEvolutionProgressController.ts +33 -0
@@ -0,0 +1,33 @@
1 import { getInventory } from "@/src/services/inventoryService";
2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 import { RequestHandler } from "express";
4
5 export const setEvolutionProgressController: RequestHandler = async (req, res) => {
6 const accountId = await getAccountIdForRequest(req);
7 const inventory = await getInventory(accountId);
8 const payload = req.body as ISetEvolutionProgressRequest;
9
10 inventory.EvolutionProgress ??= [];
11 payload.forEach(element => {
12 const entry = inventory.EvolutionProgress!.find(entry => entry.ItemType === element.ItemType);
13
14 if (entry) {
15 entry.Progress = 0;
16 entry.Rank = element.Rank;
17 } else {
18 inventory.EvolutionProgress!.push({
19 Progress: 0,
20 Rank: element.Rank,
21 ItemType: element.ItemType
22 });
23 }
24 });
25
26 await inventory.save();
27 res.end();
28 };
29
30 type ISetEvolutionProgressRequest = {
31 ItemType: string;
32 Rank: number;
33 }[];
Modified src/routes/custom.ts +3 -1
@@ -17,10 +17,11 @@ import { addCurrencyController } from "@/src/controllers/custom/addCurrencyContr
17 17 import { addItemsController } from "@/src/controllers/custom/addItemsController";
18 18 import { addXpController } from "@/src/controllers/custom/addXpController";
19 19 import { importController } from "@/src/controllers/custom/importController";
20 import { manageQuestsController } from "@/src/controllers/custom/manageQuestsController";
21 import { setEvolutionProgressController } from "@/src/controllers/custom/setEvolutionProgressController";
20 22
21 23 import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
22 24 import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
23 import { manageQuestsController } from "@/src/controllers/custom/manageQuestsController";
24 25
25 26 const customRouter = express.Router();
26 27
@@ -42,6 +43,7 @@ customRouter.post("/addItems", addItemsController);
42 43 customRouter.post("/addXp", addXpController);
43 44 customRouter.post("/import", importController);
44 45 customRouter.post("/manageQuests", manageQuestsController);
46 customRouter.post("/setEvolutionProgress", setEvolutionProgressController);
45 47
46 48 customRouter.get("/config", getConfigDataController);
47 49 customRouter.post("/config", updateConfigDataController);
Added static/fixed_responses/allIncarnonList.json +49 -0
@@ -0,0 +1,49 @@
1 [
2 "/Lotus/Weapons/ClanTech/Bio/BioWeapon",
3 "/Lotus/Weapons/ClanTech/Energy/EnergyRifle",
4 "/Lotus/Weapons/Corpus/Pistols/CorpusMinigun/CorpusMinigun",
5 "/Lotus/Weapons/Corpus/Pistols/CrpHandRL/CorpusHandRocketLauncher",
6 "/Lotus/Weapons/Grineer/LongGuns/GrineerSawbladeGun/SawBladeGun",
7 "/Lotus/Weapons/Grineer/Melee/GrineerTylAxeAndBoar/RegorAxeShield",
8 "/Lotus/Weapons/Grineer/Pistols/HeatGun/GrnHeatGun",
9 "/Lotus/Weapons/Infested/Pistols/InfVomitGun/InfVomitGunWep",
10 "/Lotus/Weapons/Syndicates/CephalonSuda/Pistols/CSDroidArray",
11 "/Lotus/Weapons/Tenno/Bows/HuntingBow",
12 "/Lotus/Weapons/Tenno/Bows/StalkerBow",
13 "/Lotus/Weapons/Tenno/LongGuns/TnoLeverAction/TnoLeverActionRifle",
14 "/Lotus/Weapons/Tenno/Melee/Axe/DualInfestedAxesWeapon",
15 "/Lotus/Weapons/Tenno/Melee/Dagger/CeramicDagger",
16 "/Lotus/Weapons/Tenno/Melee/Fist/Fist",
17 "/Lotus/Weapons/Tenno/Melee/Hammer/IceHammer/IceHammer",
18 "/Lotus/Weapons/Tenno/Melee/LongSword/LongSword",
19 "/Lotus/Weapons/Tenno/Melee/Maces/PaladinMace/PaladinMaceWeapon",
20 "/Lotus/Weapons/Tenno/Melee/Scythe/StalkerScytheWeapon",
21 "/Lotus/Weapons/Tenno/Melee/Scythe/ParisScythe/ParisScythe",
22 "/Lotus/Weapons/Tenno/Melee/Staff/Staff",
23 "/Lotus/Weapons/Tenno/Melee/Swords/CutlassAndPoignard/TennoCutlass",
24 "/Lotus/Weapons/Tenno/Melee/Swords/TennoSai/TennoSais",
25 "/Lotus/Weapons/Tenno/Pistol/AutoPistol",
26 "/Lotus/Weapons/Tenno/Pistol/BurstPistol",
27 "/Lotus/Weapons/Tenno/Pistol/HandShotGun",
28 "/Lotus/Weapons/Tenno/Pistol/HeavyPistol",
29 "/Lotus/Weapons/Tenno/Pistol/Pistol",
30 "/Lotus/Weapons/Tenno/Pistol/RevolverPistol",
31 "/Lotus/Weapons/Tenno/Pistols/ConclaveLeverPistol/ConclaveLeverPistol",
32 "/Lotus/Weapons/Tenno/Rifle/BoltoRifle",
33 "/Lotus/Weapons/Tenno/Rifle/BurstRifle",
34 "/Lotus/Weapons/Tenno/Rifle/HeavyRifle",
35 "/Lotus/Weapons/Tenno/Rifle/Rifle",
36 "/Lotus/Weapons/Tenno/Rifle/SemiAutoRifle",
37 "/Lotus/Weapons/Tenno/Rifle/TennoAR",
38 "/Lotus/Weapons/Tenno/Shotgun/FullAutoShotgun",
39 "/Lotus/Weapons/Tenno/Shotgun/Shotgun",
40 "/Lotus/Weapons/Tenno/ThrowingWeapons/Kunai",
41 "/Lotus/Weapons/Tenno/ThrowingWeapons/StalkerKunai",
42 "/Lotus/Weapons/Tenno/Zariman/LongGuns/PumpShotgun/ZarimanPumpShotgun",
43 "/Lotus/Weapons/Tenno/Zariman/LongGuns/SemiAutoRifle/ZarimanSemiAutoRifle",
44 "/Lotus/Weapons/Tenno/Zariman/Melee/Dagger/ZarimanDaggerWeapon",
45 "/Lotus/Weapons/Tenno/Zariman/Melee/Tonfas/ZarimanTonfaWeapon",
46 "/Lotus/Weapons/Tenno/Zariman/Pistols/HeavyPistol/ZarimanHeavyPistol",
47 "/Lotus/Weapons/Thanotech/EntFistIncarnon/EntFistIncarnon",
48 "/Lotus/Weapons/Thanotech/EntratiWristGun/EntratiWristGunWeapon"
49 ]
Modified static/webui/index.html +19 -0
@@ -401,6 +401,22 @@
401 401 </div>
402 402 </div>
403 403 </div>
404 <div class="row g-3">
405 <div class="col-lg-6">
406 <div class="card mb-3" style="height: 400px;">
407 <h5 class="card-header" data-loc="inventory_evolutionProgress"></h5>
408 <div class="card-body overflow-auto">
409 <form class="input-group mb-3" onsubmit="doAcquireEvolution();return false;">
410 <input class="form-control" id="acquire-type-EvolutionProgress" list="datalist-EvolutionProgress" />
411 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
412 </form>
413 <table class="table table-hover w-100">
414 <tbody id="EvolutionProgress-list"></tbody>
415 </table>
416 </div>
417 </div>
418 </div>
419 </div>
404 420 <div class="card mb-3">
405 421 <h5 class="card-header" data-loc="general_bulkActions"></h5>
406 422 <div class="card-body">
@@ -411,6 +427,7 @@
411 427 <button class="btn btn-primary" onclick="addMissingEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
412 428 <button class="btn btn-primary" onclick="addMissingEquipment(['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
413 429 <button class="btn btn-primary" onclick="addMissingEquipment(['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
430 <button class="btn btn-primary" onclick="addMissingEvolutionProgress();" data-loc="inventory_bulkAddEvolutionProgress"></button>
414 431 </div>
415 432 <div class="mb-2 d-flex flex-wrap gap-2">
416 433 <button class="btn btn-success" onclick="maxRankAllEquipment(['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
@@ -419,6 +436,7 @@
419 436 <button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
420 437 <button class="btn btn-success" onclick="maxRankAllEquipment(['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
421 438 <button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
439 <button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
422 440 </div>
423 441 </div>
424 442 </div>
@@ -733,6 +751,7 @@
733 751 </datalist>
734 752 <datalist id="datalist-archonCrystalUpgrades"></datalist>
735 753 <datalist id="datalist-OperatorAmps"></datalist>
754 <datalist id="datalist-EvolutionProgress"></datalist>
736 755 <datalist id="datalist-ModularParts"></datalist>
737 756 <datalist id="datalist-ModularParts-HB_DECK"></datalist>
738 757 <datalist id="datalist-ModularParts-HB_ENGINE"></datalist>
Modified static/webui/script.js +150 -7
@@ -183,6 +183,16 @@ const webUiModularWeapons = [
183 183 "/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit"
184 184 ];
185 185
186 const permanentEvolutionWeapons = new Set([
187 "/Lotus/Weapons/Tenno/Zariman/LongGuns/PumpShotgun/ZarimanPumpShotgun",
188 "/Lotus/Weapons/Tenno/Zariman/LongGuns/SemiAutoRifle/ZarimanSemiAutoRifle",
189 "/Lotus/Weapons/Tenno/Zariman/Melee/Dagger/ZarimanDaggerWeapon",
190 "/Lotus/Weapons/Tenno/Zariman/Melee/Tonfas/ZarimanTonfaWeapon",
191 "/Lotus/Weapons/Tenno/Zariman/Pistols/HeavyPistol/ZarimanHeavyPistol",
192 "/Lotus/Weapons/Thanotech/EntFistIncarnon/EntFistIncarnon",
193 "/Lotus/Weapons/Thanotech/EntratiWristGun/EntratiWristGunWeapon"
194 ]);
195
186 196 let uniqueLevelCaps = {};
187 197 function fetchItemList() {
188 198 window.itemListPromise = new Promise(resolve => {
@@ -563,6 +573,82 @@ function updateInventory() {
563 573 });
564 574 });
565 575
576 document.getElementById("EvolutionProgress-list").innerHTML = "";
577 data.EvolutionProgress.forEach(item => {
578 const datalist = document.getElementById("datalist-EvolutionProgress");
579 const optionToRemove = datalist.querySelector(`option[data-key="${item.ItemType}"]`);
580 if (optionToRemove) {
581 datalist.removeChild(optionToRemove);
582 }
583 const tr = document.createElement("tr");
584 tr.setAttribute("data-item-type", item.ItemType);
585 {
586 const td = document.createElement("td");
587 td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
588 if (item.Rank != null) {
589 td.textContent += " | " + loc("code_rank") + ": [" + item.Rank + "/5]";
590 }
591 tr.appendChild(td);
592 }
593 {
594 const td = document.createElement("td");
595 td.classList = "text-end text-nowrap";
596 if (item.Rank < 5) {
597 const a = document.createElement("a");
598 a.href = "#";
599 a.onclick = function (event) {
600 event.preventDefault();
601 setEvolutionProgress([{ ItemType: item.ItemType, Rank: 5 }]);
602 };
603 a.title = loc("code_maxRank");
604 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>`;
605
606 td.appendChild(a);
607 }
608 if ((permanentEvolutionWeapons.has(item.ItemType) && item.Rank > 0) || item.Rank > 1) {
609 const a = document.createElement("a");
610 a.href = "#";
611 a.onclick = function (event) {
612 event.preventDefault();
613 setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank - 1 }]);
614 };
615 a.title = loc("code_rankDown");
616 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>`;
617
618 td.appendChild(a);
619 }
620 if (item.Rank < 5) {
621 const a = document.createElement("a");
622 a.href = "#";
623 a.onclick = function (event) {
624 event.preventDefault();
625 setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank + 1 }]);
626 };
627 a.title = loc("code_rankUp");
628 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>`;
629
630 td.appendChild(a);
631 }
632
633 tr.appendChild(td);
634 }
635
636 document.getElementById("EvolutionProgress-list").appendChild(tr);
637 });
638
639 const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
640 const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
641 const giveAllQEvolutionProgress = document.querySelector(
642 'button[onclick*="addMissingEvolutionProgress()"]'
643 );
644
645 if (datalistEvolutionProgress.length === 0) {
646 formEvolutionProgress.classList.add("disabled");
647 formEvolutionProgress.querySelector("input").disabled = true;
648 formEvolutionProgress.querySelector("button").disabled = true;
649 giveAllQEvolutionProgress.disabled = true;
650 }
651
566 652 // Populate quests route
567 653 document.getElementById("QuestKeys-list").innerHTML = "";
568 654 data.QuestKeys.forEach(item => {
@@ -674,18 +760,18 @@ function updateInventory() {
674 760 });
675 761
676 762 const datalistQuestKeys = document.querySelectorAll("#datalist-QuestKeys option");
677 const form = document.querySelector("form[onsubmit*=\"doAcquireEquipment('QuestKeys')\"]");
763 const formQuestKeys = document.querySelector("form[onsubmit*=\"doAcquireEquipment('QuestKeys')\"]");
678 764 const giveAllQuestButton = document.querySelector("button[onclick*=\"doBulkQuestUpdate('giveAll')\"]");
679 765
680 766 if (datalistQuestKeys.length === 0) {
681 form.classList.add("disabled");
682 form.querySelector("input").disabled = true;
683 form.querySelector("button").disabled = true;
767 formQuestKeys.classList.add("disabled");
768 formQuestKeys.querySelector("input").disabled = true;
769 formQuestKeys.querySelector("button").disabled = true;
684 770 giveAllQuestButton.disabled = true;
685 771 } else {
686 form.classList.remove("disabled");
687 form.querySelector("input").disabled = false;
688 form.querySelector("button").disabled = false;
772 formQuestKeys.classList.remove("disabled");
773 formQuestKeys.querySelector("input").disabled = false;
774 formQuestKeys.querySelector("button").disabled = false;
689 775 giveAllQuestButton.disabled = false;
690 776 }
691 777
@@ -1080,6 +1166,16 @@ function doAcquireModularEquipment(category, WeaponType) {
1080 1166 }
1081 1167 }
1082 1168
1169 function doAcquireEvolution() {
1170 const uniqueName = getKey(document.getElementById("acquire-type-EvolutionProgress"));
1171 if (!uniqueName) {
1172 $("#acquire-type-EvolutionProgress").addClass("is-invalid").focus();
1173 return;
1174 }
1175
1176 setEvolutionProgress([{ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 }]);
1177 }
1178
1083 1179 $("input[list]").on("input", function () {
1084 1180 $(this).removeClass("is-invalid");
1085 1181 });
@@ -1117,6 +1213,40 @@ function addMissingEquipment(categories) {
1117 1213 }
1118 1214 }
1119 1215
1216 function addMissingEvolutionProgress() {
1217 const requests = [];
1218 document.querySelectorAll("#datalist-EvolutionProgress option").forEach(elm => {
1219 const uniqueName = elm.getAttribute("data-key");
1220 requests.push({ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 });
1221 });
1222 if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
1223 setEvolutionProgress(requests);
1224 }
1225 }
1226
1227 function maxRankAllEvolutions() {
1228 const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
1229
1230 req.done(data => {
1231 const requests = [];
1232
1233 data.EvolutionProgress.forEach(item => {
1234 if (item.Rank < 5) {
1235 requests.push({
1236 ItemType: item.ItemType,
1237 Rank: 5
1238 });
1239 }
1240 });
1241
1242 if (Object.keys(requests).length > 0) {
1243 return setEvolutionProgress(requests);
1244 }
1245
1246 toast(loc("code_noEquipmentToRankUp"));
1247 });
1248 }
1249
1120 1250 function maxRankAllEquipment(categories) {
1121 1251 const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
1122 1252
@@ -1304,6 +1434,19 @@ function maturePet(oid, revert) {
1304 1434 });
1305 1435 }
1306 1436
1437 function setEvolutionProgress(requests) {
1438 revalidateAuthz(() => {
1439 const req = $.post({
1440 url: "/custom/setEvolutionProgress?" + window.authz,
1441 contentType: "application/json",
1442 data: JSON.stringify(requests)
1443 });
1444 req.done(() => {
1445 updateInventory();
1446 });
1447 });
1448 }
1449
1307 1450 function doAcquireMiscItems() {
1308 1451 const uniqueName = getKey(document.getElementById("miscitem-type"));
1309 1452 if (!uniqueName) {
Modified static/webui/translations/de.js +5 -0
@@ -34,6 +34,8 @@ dict = {
34 34 code_rerollsNumber: `Anzahl der Umrollversuche`,
35 35 code_viewStats: `Statistiken anzeigen`,
36 36 code_rank: `Rang`,
37 code_rankUp: `[UNTRANSLATED] Rank up`,
38 code_rankDown: `[UNTRANSLATED] Rank down`,
37 39 code_count: `Anzahl`,
38 40 code_focusAllUnlocked: `Alle Fokus-Schulen sind bereits freigeschaltet.`,
39 41 code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`,
@@ -84,18 +86,21 @@ dict = {
84 86 inventory_hoverboards: `K-Drives`,
85 87 inventory_moaPets: `Moa`,
86 88 inventory_kubrowPets: `Bestien`,
89 inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
87 90 inventory_bulkAddSuits: `Fehlende Warframes hinzufügen`,
88 91 inventory_bulkAddWeapons: `Fehlende Waffen hinzufügen`,
89 92 inventory_bulkAddSpaceSuits: `Fehlende Archwings hinzufügen`,
90 93 inventory_bulkAddSpaceWeapons: `Fehlende Archwing-Waffen hinzufügen`,
91 94 inventory_bulkAddSentinels: `Fehlende Wächter hinzufügen`,
92 95 inventory_bulkAddSentinelWeapons: `Fehlende Wächter-Waffen hinzufügen`,
96 inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
93 97 inventory_bulkRankUpSuits: `Alle Warframes auf Max. Rang`,
94 98 inventory_bulkRankUpWeapons: `Alle Waffen auf Max. Rang`,
95 99 inventory_bulkRankUpSpaceSuits: `Alle Archwings auf Max. Rang`,
96 100 inventory_bulkRankUpSpaceWeapons: `Alle Archwing-Waffen auf Max. Rang`,
97 101 inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
98 102 inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
103 inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
99 104
100 105 quests_list: `Quests`,
101 106 quests_completeAll: `Alle Quests abschließen`,
Modified static/webui/translations/en.js +5 -0
@@ -33,6 +33,8 @@ dict = {
33 33 code_rerollsNumber: `Number of rerolls`,
34 34 code_viewStats: `View Stats`,
35 35 code_rank: `Rank`,
36 code_rankUp: `Rank up`,
37 code_rankDown: `Rank down`,
36 38 code_count: `Count`,
37 39 code_focusAllUnlocked: `All focus schools are already unlocked.`,
38 40 code_focusUnlocked: `Unlocked |COUNT| new focus schools! An inventory update will be needed for the changes to be reflected in-game. Visiting the navigation should be the easiest way to trigger that.`,
@@ -83,18 +85,21 @@ dict = {
83 85 inventory_hoverboards: `K-Drives`,
84 86 inventory_moaPets: `Moa`,
85 87 inventory_kubrowPets: `Beasts`,
88 inventory_evolutionProgress: `Incarnon Evolution Progress`,
86 89 inventory_bulkAddSuits: `Add Missing Warframes`,
87 90 inventory_bulkAddWeapons: `Add Missing Weapons`,
88 91 inventory_bulkAddSpaceSuits: `Add Missing Archwings`,
89 92 inventory_bulkAddSpaceWeapons: `Add Missing Archwing Weapons`,
90 93 inventory_bulkAddSentinels: `Add Missing Sentinels`,
91 94 inventory_bulkAddSentinelWeapons: `Add Missing Sentinel Weapons`,
95 inventory_bulkAddEvolutionProgress: `Add Missing Incarnon Evolution Progress`,
92 96 inventory_bulkRankUpSuits: `Max Rank All Warframes`,
93 97 inventory_bulkRankUpWeapons: `Max Rank All Weapons`,
94 98 inventory_bulkRankUpSpaceSuits: `Max Rank All Archwings`,
95 99 inventory_bulkRankUpSpaceWeapons: `Max Rank All Archwing Weapons`,
96 100 inventory_bulkRankUpSentinels: `Max Rank All Sentinels`,
97 101 inventory_bulkRankUpSentinelWeapons: `Max Rank All Sentinel Weapons`,
102 inventory_bulkRankUpEvolutionProgress: `Max Rank All Incarnon Evolution Progress`,
98 103
99 104 quests_list: `Quests`,
100 105 quests_completeAll: `Complete All Quests`,
Modified static/webui/translations/es.js +5 -0
@@ -34,6 +34,8 @@ dict = {
34 34 code_rerollsNumber: `Cantidad de reintentos`,
35 35 code_viewStats: `Ver estadísticas`,
36 36 code_rank: `Rango`,
37 code_rankUp: `[UNTRANSLATED] Rank up`,
38 code_rankDown: `[UNTRANSLATED] Rank down`,
37 39 code_count: `Cantidad`,
38 40 code_focusAllUnlocked: `Todas las escuelas de enfoque ya están desbloqueadas.`,
39 41 code_focusUnlocked: `¡Desbloqueadas |COUNT| nuevas escuelas de enfoque! Se necesita una actualización del inventario para reflejar los cambios en el juego. Visitar la navegación debería ser la forma más sencilla de activarlo.`,
@@ -84,18 +86,21 @@ dict = {
84 86 inventory_hoverboards: `K-Drives`,
85 87 inventory_moaPets: `Moa`,
86 88 inventory_kubrowPets: `Bestias`,
89 inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
87 90 inventory_bulkAddSuits: `Agregar Warframes faltantes`,
88 91 inventory_bulkAddWeapons: `Agregar armas faltantes`,
89 92 inventory_bulkAddSpaceSuits: `Agregar Archwings faltantes`,
90 93 inventory_bulkAddSpaceWeapons: `Agregar armas Archwing faltantes`,
91 94 inventory_bulkAddSentinels: `Agregar centinelas faltantes`,
92 95 inventory_bulkAddSentinelWeapons: `Agregar armas de centinela faltantes`,
96 inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
93 97 inventory_bulkRankUpSuits: `Maximizar rango de todos los Warframes`,
94 98 inventory_bulkRankUpWeapons: `Maximizar rango de todas las armas`,
95 99 inventory_bulkRankUpSpaceSuits: `Maximizar rango de todos los Archwings`,
96 100 inventory_bulkRankUpSpaceWeapons: `Maximizar rango de todas las armas Archwing`,
97 101 inventory_bulkRankUpSentinels: `Maximizar rango de todos los centinelas`,
98 102 inventory_bulkRankUpSentinelWeapons: `Maximizar rango de todas las armas de centinela`,
103 inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
99 104
100 105 quests_list: `Misiones`,
101 106 quests_completeAll: `Completar todas las misiones`,
Modified static/webui/translations/fr.js +5 -0
@@ -34,6 +34,8 @@ dict = {
34 34 code_rerollsNumber: `Nombre de rerolls`,
35 35 code_viewStats: `Voir les stats`,
36 36 code_rank: `Rang`,
37 code_rankUp: `[UNTRANSLATED] Rank up`,
38 code_rankDown: `[UNTRANSLATED] Rank down`,
37 39 code_count: `Quantité`,
38 40 code_focusAllUnlocked: `Les écoles de Focus sont déjà déverrouillées.`,
39 41 code_focusUnlocked: `|COUNT| écoles de Focus déverrouillées ! Synchronisation de l'inventaire nécessaire.`,
@@ -84,18 +86,21 @@ dict = {
84 86 inventory_hoverboards: `K-Drives`,
85 87 inventory_moaPets: `Moa`,
86 88 inventory_kubrowPets: `Bêtes`,
89 inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
87 90 inventory_bulkAddSuits: `Ajouter les Warframes manquantes`,
88 91 inventory_bulkAddWeapons: `Ajouter les armes manquantes`,
89 92 inventory_bulkAddSpaceSuits: `Ajouter les Archwings manquants`,
90 93 inventory_bulkAddSpaceWeapons: `Ajouter les armes d'Archwing manquantes`,
91 94 inventory_bulkAddSentinels: `Ajouter les Sentinelles manquantes`,
92 95 inventory_bulkAddSentinelWeapons: `Ajouter les armes de Sentinelles manquantes`,
96 inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
93 97 inventory_bulkRankUpSuits: `Toutes les Warframes rang max`,
94 98 inventory_bulkRankUpWeapons: `Toutes les armes rang max`,
95 99 inventory_bulkRankUpSpaceSuits: `Tous les Archwings rang max`,
96 100 inventory_bulkRankUpSpaceWeapons: `Toutes les armes d'Archwing rang max`,
97 101 inventory_bulkRankUpSentinels: `Toutes les Sentinelles rang max`,
98 102 inventory_bulkRankUpSentinelWeapons: `Toutes les armes de Sentinelles rang max`,
103 inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
99 104
100 105 quests_list: `Quêtes`,
101 106 quests_completeAll: `Compléter toutes les quêtes`,
Modified static/webui/translations/ru.js +5 -0
@@ -34,6 +34,8 @@ dict = {
34 34 code_rerollsNumber: `Количество циклов`,
35 35 code_viewStats: `Просмотр характеристики`,
36 36 code_rank: `Ранг`,
37 code_rankUp: `Повысить Ранг`,
38 code_rankDown: `Понизить Ранг`,
37 39 code_count: `Количество`,
38 40 code_focusAllUnlocked: `Все школы фокуса уже разблокированы.`,
39 41 code_focusUnlocked: `Разблокировано |COUNT| новых школ фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`,
@@ -84,18 +86,21 @@ dict = {
84 86 inventory_hoverboards: `К-Драйвы`,
85 87 inventory_moaPets: `МОА`,
86 88 inventory_kubrowPets: `Звери`,
89 inventory_evolutionProgress: `Прогресс эволюции Инкарнонов`,
87 90 inventory_bulkAddSuits: `Добавить отсутствующие варфреймы`,
88 91 inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
89 92 inventory_bulkAddSpaceSuits: `Добавить отсутствующие арчвинги`,
90 93 inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие арчвингов`,
91 94 inventory_bulkAddSentinels: `Добавить отсутствующих стражей`,
92 95 inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие стражей`,
96 inventory_bulkAddEvolutionProgress: `Добавить отсуствующий прогресс эволюции Инкарнонов`,
93 97 inventory_bulkRankUpSuits: `Максимальный ранг всех варфреймов`,
94 98 inventory_bulkRankUpWeapons: `Максимальный ранг всего оружия`,
95 99 inventory_bulkRankUpSpaceSuits: `Максимальный ранг всех арчвингов`,
96 100 inventory_bulkRankUpSpaceWeapons: `Максимальный ранг всего оружия арчвингов`,
97 101 inventory_bulkRankUpSentinels: `Максимальный ранг всех стражей`,
98 102 inventory_bulkRankUpSentinelWeapons: `Максимальный ранг всего оружия стражей`,
103 inventory_bulkRankUpEvolutionProgress: `Максимальный ранг всех эволюций Инкарнонов`,
99 104
100 105 quests_list: `Квесты`,
101 106 quests_completeAll: `Завершить все квесты`,
Modified static/webui/translations/zh.js +5 -0
@@ -34,6 +34,8 @@ dict = {
34 34 code_rerollsNumber: `洗卡次数`,
35 35 code_viewStats: `查看属性`,
36 36 code_rank: `等级`,
37 code_rankUp: `[UNTRANSLATED] Rank up`,
38 code_rankDown: `[UNTRANSLATED] Rank down`,
37 39 code_count: `数量`,
38 40 code_focusAllUnlocked: `所有专精学派均已解锁。`,
39 41 code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新。`,
@@ -84,18 +86,21 @@ dict = {
84 86 inventory_hoverboards: `K式悬浮板`,
85 87 inventory_moaPets: `恐鸟`,
86 88 inventory_kubrowPets: `[UNTRANSLATED] Beasts`,
89 inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
87 90 inventory_bulkAddSuits: `添加缺失战甲`,
88 91 inventory_bulkAddWeapons: `添加缺失武器`,
89 92 inventory_bulkAddSpaceSuits: `添加缺失Archwing`,
90 93 inventory_bulkAddSpaceWeapons: `添加缺失Archwing武器`,
91 94 inventory_bulkAddSentinels: `添加缺失守护`,
92 95 inventory_bulkAddSentinelWeapons: `添加缺失守护武器`,
96 inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
93 97 inventory_bulkRankUpSuits: `所有战甲升满级`,
94 98 inventory_bulkRankUpWeapons: `所有武器升满级`,
95 99 inventory_bulkRankUpSpaceSuits: `所有Archwing升满级`,
96 100 inventory_bulkRankUpSpaceWeapons: `所有Archwing武器升满级`,
97 101 inventory_bulkRankUpSentinels: `所有守护升满级`,
98 102 inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`,
103 inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
99 104
100 105 quests_list: `任务`,
101 106 quests_completeAll: `完成所有任务`,