From 8c2b4f2c48aa2710809a1d8474fb4e4a880d404c Mon Sep 17 00:00:00 2001 From: nyaoouo <64143453+nyaoouo@users.noreply.github.com> Date: Sat, 12 Jul 2025 23:20:48 +0800 Subject: [PATCH 01/10] impl editSuitInvigorationUpgradeController in web ui --- .../editSuitInvigorationUpgradeController.ts | 34 +++++ src/routes/custom.ts | 2 + static/webui/index.html | 53 +++++++ static/webui/script.js | 130 ++++++++++++++++++ 4 files changed, 219 insertions(+) create mode 100644 src/controllers/custom/editSuitInvigorationUpgradeController.ts diff --git a/src/controllers/custom/editSuitInvigorationUpgradeController.ts b/src/controllers/custom/editSuitInvigorationUpgradeController.ts new file mode 100644 index 00000000..bc624911 --- /dev/null +++ b/src/controllers/custom/editSuitInvigorationUpgradeController.ts @@ -0,0 +1,34 @@ +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getInventory } from "@/src/services/inventoryService"; +import { RequestHandler } from "express"; + +const DEFAULT_UPGRADE_EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; // 7 days + +export const editSuitInvigorationUpgradeController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const { oid, data } = req.body as { + oid: string; + data?: { + DefensiveUpgrade: string; + OffensiveUpgrade: string; + UpgradesExpiry?: number; + }; + }; + const inventory = await getInventory(accountId); + const suit = inventory.Suits.id(oid)!; + if (data) { + suit.DefensiveUpgrade = data.DefensiveUpgrade; + suit.OffensiveUpgrade = data.OffensiveUpgrade; + if (data.UpgradesExpiry) { + suit.UpgradesExpiry = new Date(data.UpgradesExpiry); + } else { + suit.UpgradesExpiry = new Date(Date.now() + DEFAULT_UPGRADE_EXPIRY_MS); + } + } else { + suit.DefensiveUpgrade = undefined; + suit.OffensiveUpgrade = undefined; + suit.UpgradesExpiry = undefined; + } + await inventory.save(); + res.end(); +}; diff --git a/src/routes/custom.ts b/src/routes/custom.ts index bc0427f4..3a88fefe 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -14,6 +14,7 @@ import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMis import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController"; import { completeAllMissionsController } from "@/src/controllers/custom/completeAllMissionsController"; import { addMissingHelminthBlueprintsController } from "@/src/controllers/custom/addMissingHelminthBlueprintsController"; +import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController"; import { createAccountController } from "@/src/controllers/custom/createAccountController"; import { createMessageController } from "@/src/controllers/custom/createMessageController"; @@ -45,6 +46,7 @@ customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController); customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController); customRouter.get("/completeAllMissions", completeAllMissionsController); customRouter.get("/addMissingHelminthBlueprints", addMissingHelminthBlueprintsController); +customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController); customRouter.post("/createAccount", createAccountController); customRouter.post("/createMessage", createMessageController); diff --git a/static/webui/index.html b/static/webui/index.html index c6f6baa3..34ef3870 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -977,6 +977,59 @@
+ diff --git a/static/webui/script.js b/static/webui/script.js index 8b041836..3eccd2bf 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -667,6 +667,21 @@ function updateInventory() { const td = document.createElement("td"); td.classList = "text-end text-nowrap"; + if (category == "Suits") { + const a = document.createElement("a"); + a.href = "#"; + a.onclick = () => showSuitInvigorationForm(item); + a.innerHTML = ``; + a.style.textDecoration = "none"; + a.title = ""; + td.appendChild(a); + } + let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000; if ( category != "Suits" && @@ -2862,3 +2877,118 @@ function handleModularPartsChange(event) { }); } } + +function showSuitInvigorationForm(suitData) { + document.getElementById("invigoration-oid").value = suitData.ItemId.$oid; + + // Auto-fill form with existing data + document.getElementById("invigoration-offensive").value = suitData?.OffensiveUpgrade || ""; + document.getElementById("invigoration-defensive").value = suitData?.DefensiveUpgrade || ""; + + // Handle expiry date + if (suitData?.UpgradesExpiry) { + let expiryDate; + if (suitData.UpgradesExpiry.$date) { + // MongoDB format: { "$date": { "$numberLong": "1752933467151" } } + expiryDate = new Date(parseInt(suitData.UpgradesExpiry.$date.$numberLong)); + } else if (typeof suitData.UpgradesExpiry === "number") { + // Timestamp format + expiryDate = new Date(suitData.UpgradesExpiry); + } else if (suitData.UpgradesExpiry instanceof Date) { + // Date object + expiryDate = suitData.UpgradesExpiry; + } + + if (expiryDate && !isNaN(expiryDate.getTime())) { + // Format for datetime-local input (YYYY-MM-DDTHH:mm) + const year = expiryDate.getFullYear(); + const month = String(expiryDate.getMonth() + 1).padStart(2, "0"); + const day = String(expiryDate.getDate()).padStart(2, "0"); + const hours = String(expiryDate.getHours()).padStart(2, "0"); + const minutes = String(expiryDate.getMinutes()).padStart(2, "0"); + + document.getElementById("invigoration-expiry").value = `${year}-${month}-${day}T${hours}:${minutes}`; + } else { + document.getElementById("invigoration-expiry").value = ""; + } + } else { + document.getElementById("invigoration-expiry").value = ""; + } + + const form = document.getElementById("editSuitInvigorationForm"); + form.style.display = "block"; + form.style.position = "fixed"; + form.style.top = "50%"; + form.style.left = "50%"; + form.style.transform = "translate(-50%, -50%)"; + form.style.zIndex = "1050"; + form.style.width = "400px"; + + // Add backdrop + const backdrop = document.createElement("div"); + backdrop.id = "invigoration-backdrop"; + backdrop.style.position = "fixed"; + backdrop.style.top = "0"; + backdrop.style.left = "0"; + backdrop.style.width = "100%"; + backdrop.style.height = "100%"; + backdrop.style.backgroundColor = "rgba(0, 0, 0, 0.5)"; + backdrop.style.zIndex = "1040"; + backdrop.onclick = hideSuitInvigorationForm; + document.body.appendChild(backdrop); +} + +function hideSuitInvigorationForm() { + document.getElementById("editSuitInvigorationForm").style.display = "none"; + const backdrop = document.getElementById("invigoration-backdrop"); + if (backdrop) { + backdrop.remove(); + } +} + +function submitSuitInvigorationUpgrade(event) { + event.preventDefault(); + + const oid = document.getElementById("invigoration-oid").value; + const offensiveUpgrade = document.getElementById("invigoration-offensive").value; + const defensiveUpgrade = document.getElementById("invigoration-defensive").value; + const expiry = document.getElementById("invigoration-expiry").value; + + if (!offensiveUpgrade && !defensiveUpgrade) { + alert("Please select at least one upgrade type."); + return; + } + + const data = { + OffensiveUpgrade: offensiveUpgrade, + DefensiveUpgrade: defensiveUpgrade + }; + + if (expiry) { + data.UpgradesExpiry = new Date(expiry).getTime(); + } + + editSuitInvigorationUpgrade(oid, data); + hideSuitInvigorationForm(); +} + +function clearSuitInvigorationUpgrades() { + const oid = document.getElementById("invigoration-oid").value; + editSuitInvigorationUpgrade(oid, null); + hideSuitInvigorationForm(); +} + +async function editSuitInvigorationUpgrade(oid, data) { + /* data?: { + DefensiveUpgrade: string; + OffensiveUpgrade: string; + UpgradesExpiry?: number; + }*/ + $.post({ + url: "/custom/editSuitInvigorationUpgrade?" + window.authz, + contentType: "application/json", + data: JSON.stringify({ oid, data }) + }).done(function () { + updateInventory(); + }); +} -- 2.47.2 From 164e3e7c12bedcde8f06f8fc8f1c2ea5f9351419 Mon Sep 17 00:00:00 2001 From: nyaoouo <64143453+nyaoouo@users.noreply.github.com> Date: Sun, 13 Jul 2025 00:29:12 +0800 Subject: [PATCH 02/10] fix coding --- src/routes/custom.ts | 4 +- static/webui/index.html | 109 +++++++++++++++++++++------------------- static/webui/script.js | 28 +---------- static/webui/style.css | 19 +++++++ 4 files changed, 79 insertions(+), 81 deletions(-) diff --git a/src/routes/custom.ts b/src/routes/custom.ts index 3a88fefe..9eb3d9e4 100644 --- a/src/routes/custom.ts +++ b/src/routes/custom.ts @@ -14,7 +14,6 @@ import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMis import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController"; import { completeAllMissionsController } from "@/src/controllers/custom/completeAllMissionsController"; import { addMissingHelminthBlueprintsController } from "@/src/controllers/custom/addMissingHelminthBlueprintsController"; -import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController"; import { createAccountController } from "@/src/controllers/custom/createAccountController"; import { createMessageController } from "@/src/controllers/custom/createMessageController"; @@ -27,6 +26,7 @@ import { setEvolutionProgressController } from "@/src/controllers/custom/setEvol import { setBoosterController } from "@/src/controllers/custom/setBoosterController"; import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController"; import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController"; +import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController"; import { getConfigController, setConfigController } from "@/src/controllers/custom/configController"; @@ -46,7 +46,6 @@ customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController); customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController); customRouter.get("/completeAllMissions", completeAllMissionsController); customRouter.get("/addMissingHelminthBlueprints", addMissingHelminthBlueprintsController); -customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController); customRouter.post("/createAccount", createAccountController); customRouter.post("/createMessage", createMessageController); @@ -59,6 +58,7 @@ customRouter.post("/setEvolutionProgress", setEvolutionProgressController); customRouter.post("/setBooster", setBoosterController); customRouter.post("/updateFingerprint", updateFingerprintController); customRouter.post("/changeModularParts", changeModularPartsController); +customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController); customRouter.post("/getConfig", getConfigController); customRouter.post("/setConfig", setConfigController); diff --git a/static/webui/index.html b/static/webui/index.html index 34ef3870..da8087f9 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -455,6 +455,62 @@ +

@@ -977,59 +1033,6 @@
- diff --git a/static/webui/script.js b/static/webui/script.js index 3eccd2bf..dc2e0edf 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -2915,35 +2915,11 @@ function showSuitInvigorationForm(suitData) { document.getElementById("invigoration-expiry").value = ""; } - const form = document.getElementById("editSuitInvigorationForm"); - form.style.display = "block"; - form.style.position = "fixed"; - form.style.top = "50%"; - form.style.left = "50%"; - form.style.transform = "translate(-50%, -50%)"; - form.style.zIndex = "1050"; - form.style.width = "400px"; - - // Add backdrop - const backdrop = document.createElement("div"); - backdrop.id = "invigoration-backdrop"; - backdrop.style.position = "fixed"; - backdrop.style.top = "0"; - backdrop.style.left = "0"; - backdrop.style.width = "100%"; - backdrop.style.height = "100%"; - backdrop.style.backgroundColor = "rgba(0, 0, 0, 0.5)"; - backdrop.style.zIndex = "1040"; - backdrop.onclick = hideSuitInvigorationForm; - document.body.appendChild(backdrop); + document.getElementById("editSuitInvigoration").style.display = "block"; } function hideSuitInvigorationForm() { - document.getElementById("editSuitInvigorationForm").style.display = "none"; - const backdrop = document.getElementById("invigoration-backdrop"); - if (backdrop) { - backdrop.remove(); - } + document.getElementById("editSuitInvigoration").style.display = "none"; } function submitSuitInvigorationUpgrade(event) { diff --git a/static/webui/style.css b/static/webui/style.css index becce85d..d96d5dd7 100644 --- a/static/webui/style.css +++ b/static/webui/style.css @@ -49,3 +49,22 @@ td.text-end > a > svg { padding-right: var(--bs-navbar-nav-link-padding-x); padding-left: var(--bs-navbar-nav-link-padding-x); } + +/* Modal overlay and form styling */ +.modal-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 1040; +} +.modal-form { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 1050; + width: 400px; +} -- 2.47.2 From 8d144188f795e8e86f059a521a02a47ac6168f0e Mon Sep 17 00:00:00 2001 From: nyaoouo <64143453+nyaoouo@users.noreply.github.com> Date: Sun, 13 Jul 2025 01:01:50 +0800 Subject: [PATCH 03/10] move InvigorationUpgrade from modal to detailed view --- static/webui/index.html | 103 ++++++++++++++++++---------------------- static/webui/script.js | 73 +++++++++------------------- 2 files changed, 69 insertions(+), 107 deletions(-) diff --git a/static/webui/index.html b/static/webui/index.html index da8087f9..f9e1e227 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -455,62 +455,6 @@ -

@@ -532,6 +476,53 @@
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
diff --git a/static/webui/script.js b/static/webui/script.js index dc2e0edf..cc4d6df6 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -667,21 +667,6 @@ function updateInventory() { const td = document.createElement("td"); td.classList = "text-end text-nowrap"; - if (category == "Suits") { - const a = document.createElement("a"); - a.href = "#"; - a.onclick = () => showSuitInvigorationForm(item); - a.innerHTML = ``; - a.style.textDecoration = "none"; - a.title = ""; - td.appendChild(a); - } - let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000; if ( category != "Suits" && @@ -1245,6 +1230,12 @@ function updateInventory() { } document.getElementById("crystals-list").appendChild(tr); }); + const { OffensiveUpgrade, DefensiveUpgrade, UpgradesExpiry } = + suitInvigorationUpgradeData(item); + document.getElementById("dv-invigoration-oid").value = oid; + document.getElementById("dv-invigoration-offensive").value = OffensiveUpgrade; + document.getElementById("dv-invigoration-defensive").value = DefensiveUpgrade; + document.getElementById("dv-invigoration-expiry").value = UpgradesExpiry; } else if (["LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category)) { document.getElementById("valenceBonus-card").classList.remove("d-none"); document.getElementById("valenceBonus-innateDamage").value = ""; @@ -2877,58 +2868,41 @@ function handleModularPartsChange(event) { }); } } - -function showSuitInvigorationForm(suitData) { - document.getElementById("invigoration-oid").value = suitData.ItemId.$oid; - - // Auto-fill form with existing data - document.getElementById("invigoration-offensive").value = suitData?.OffensiveUpgrade || ""; - document.getElementById("invigoration-defensive").value = suitData?.DefensiveUpgrade || ""; - - // Handle expiry date - if (suitData?.UpgradesExpiry) { - let expiryDate; +function suitInvigorationUpgradeData(suitData) { + let expiryDate = ""; + if (suitData.UpgradesExpiry) { if (suitData.UpgradesExpiry.$date) { - // MongoDB format: { "$date": { "$numberLong": "1752933467151" } } expiryDate = new Date(parseInt(suitData.UpgradesExpiry.$date.$numberLong)); } else if (typeof suitData.UpgradesExpiry === "number") { - // Timestamp format expiryDate = new Date(suitData.UpgradesExpiry); } else if (suitData.UpgradesExpiry instanceof Date) { - // Date object expiryDate = suitData.UpgradesExpiry; } - if (expiryDate && !isNaN(expiryDate.getTime())) { - // Format for datetime-local input (YYYY-MM-DDTHH:mm) const year = expiryDate.getFullYear(); const month = String(expiryDate.getMonth() + 1).padStart(2, "0"); const day = String(expiryDate.getDate()).padStart(2, "0"); const hours = String(expiryDate.getHours()).padStart(2, "0"); const minutes = String(expiryDate.getMinutes()).padStart(2, "0"); - - document.getElementById("invigoration-expiry").value = `${year}-${month}-${day}T${hours}:${minutes}`; + expiryDate = `${year}-${month}-${day}T${hours}:${minutes}`; } else { - document.getElementById("invigoration-expiry").value = ""; + expiryDate = ""; } - } else { - document.getElementById("invigoration-expiry").value = ""; } - - document.getElementById("editSuitInvigoration").style.display = "block"; -} - -function hideSuitInvigorationForm() { - document.getElementById("editSuitInvigoration").style.display = "none"; + return { + oid: suitData.ItemId.$oid, + OffensiveUpgrade: suitData.OffensiveUpgrade || "", + DefensiveUpgrade: suitData.DefensiveUpgrade || "", + UpgradesExpiry: expiryDate + }; } function submitSuitInvigorationUpgrade(event) { event.preventDefault(); - - const oid = document.getElementById("invigoration-oid").value; - const offensiveUpgrade = document.getElementById("invigoration-offensive").value; - const defensiveUpgrade = document.getElementById("invigoration-defensive").value; - const expiry = document.getElementById("invigoration-expiry").value; + const oid = new URLSearchParams(window.location.search).get("itemId"); + const offensiveUpgrade = document.getElementById("dv-invigoration-offensive").value; + const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value; + const expiry = document.getElementById("dv-invigoration-expiry").value; if (!offensiveUpgrade && !defensiveUpgrade) { alert("Please select at least one upgrade type."); @@ -2945,13 +2919,10 @@ function submitSuitInvigorationUpgrade(event) { } editSuitInvigorationUpgrade(oid, data); - hideSuitInvigorationForm(); } function clearSuitInvigorationUpgrades() { - const oid = document.getElementById("invigoration-oid").value; - editSuitInvigorationUpgrade(oid, null); - hideSuitInvigorationForm(); + editSuitInvigorationUpgrade(new URLSearchParams(window.location.search).get("itemId"), null); } async function editSuitInvigorationUpgrade(oid, data) { -- 2.47.2 From 9be4e14de247aa6f9acbf0f602e9586f30723cd7 Mon Sep 17 00:00:00 2001 From: nyaoouo <64143453+nyaoouo@users.noreply.github.com> Date: Sun, 13 Jul 2025 01:05:30 +0800 Subject: [PATCH 04/10] remove unused style --- static/webui/style.css | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/static/webui/style.css b/static/webui/style.css index d96d5dd7..becce85d 100644 --- a/static/webui/style.css +++ b/static/webui/style.css @@ -49,22 +49,3 @@ td.text-end > a > svg { padding-right: var(--bs-navbar-nav-link-padding-x); padding-left: var(--bs-navbar-nav-link-padding-x); } - -/* Modal overlay and form styling */ -.modal-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - z-index: 1040; -} -.modal-form { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1050; - width: 400px; -} -- 2.47.2 From fb7d5efa0a7a33942e92c4eae55f8207012f0bbd Mon Sep 17 00:00:00 2001 From: nyaoouo Date: Sun, 13 Jul 2025 03:56:06 -0700 Subject: [PATCH 05/10] Remove unused field --- static/webui/index.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/static/webui/index.html b/static/webui/index.html index f9e1e227..b73b1fe9 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -477,8 +477,6 @@
- -
- - - - - - - - - - + + + + + + + + + +
- +
- +
- - + +
diff --git a/static/webui/script.js b/static/webui/script.js index 036e2f9e..449da772 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -2906,8 +2906,8 @@ function submitSuitInvigorationUpgrade(event) { const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value; const expiry = document.getElementById("dv-invigoration-expiry").value; - if (!offensiveUpgrade && !defensiveUpgrade) { - alert("Please select at least one upgrade type."); + if (!offensiveUpgrade || !defensiveUpgrade) { + alert(loc("code_requiredInvigorationUpgrade")); return; } diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js index fb3d1357..a432bf2f 100644 --- a/static/webui/translations/de.js +++ b/static/webui/translations/de.js @@ -62,6 +62,7 @@ dict = { code_mature: `Für den Kampf auswachsen lassen`, code_unmature: `Genetisches Altern zurücksetzen`, code_succChange: `[UNTRANSLATED] Successfully changed.`, + code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`, login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`, login_emailLabel: `E-Mail-Adresse`, login_passwordLabel: `Passwort`, @@ -127,6 +128,35 @@ dict = { detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`, detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`, + invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`, + invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`, + invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`, + invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`, + invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`, + invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`, + invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`, + invigorations_utility_Health: `[UNTRANSLATED] Health`, + invigorations_utility_Energy: `[UNTRANSLATED] Energy`, + invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`, + invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`, + invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`, + invigorations_utility_Armor: `[UNTRANSLATED] Armor`, + invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`, + invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`, + + invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`, + invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`, + invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`, + invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`, + invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`, + invigorations_noneOption: `[UNTRANSLATED] None`, + mods_addRiven: `Riven hinzufügen`, mods_fingerprint: `Fingerabdruck`, mods_fingerprintHelp: `Benötigst du Hilfe mit dem Fingerabdruck?`, diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js index c667d24a..725bb705 100644 --- a/static/webui/translations/en.js +++ b/static/webui/translations/en.js @@ -61,6 +61,7 @@ dict = { code_mature: `Mature for combat`, code_unmature: `Regress genetic aging`, code_succChange: `Successfully changed.`, + code_requiredInvigorationUpgrade: `You must select both an offensive and a defensive upgrade.`, login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`, login_emailLabel: `Email address`, login_passwordLabel: `Password`, @@ -126,6 +127,35 @@ dict = { detailedView_modularPartsLabel: `Change Modular Parts`, detailedView_editSuitInvigoration: `Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `Power Strength`, + invigorations_offensive_PowerRange: `Power Range`, + invigorations_offensive_PowerDuration: `Power Duration`, + invigorations_offensive_MeleeDamage: `Melee Damage`, + invigorations_offensive_PrimaryDamage: `Primary Damage`, + invigorations_offensive_SecondaryDamage: `Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `Power Efficiency`, + invigorations_utility_MovementSpeed: `Movement Speed`, + invigorations_utility_ParkourSpeed: `Parkour Speed`, + invigorations_utility_Health: `Health`, + invigorations_utility_Energy: `Energy`, + invigorations_utility_StatusResistance: `Status Resistance`, + invigorations_utility_ReloadSpeed: `Reload Speed`, + invigorations_utility_HealthRegen: `Health Regen`, + invigorations_utility_Armor: `Armor`, + invigorations_utility_Jumps: `Jumps`, + invigorations_utility_EnergyRegen: `Energy Regen`, + + invigorations_offensiveLabel: `Offensive Upgrade`, + invigorations_defensiveLabel: `Defensive Upgrade`, + invigorations_expiryLabel: `Upgrades Expiry (optional)`, + invigorations_applyButton: `Apply Upgrades`, + invigorations_clearButton: `Clear Upgrades`, + invigorations_noneOption: `None`, + mods_addRiven: `Add Riven`, mods_fingerprint: `Fingerprint`, mods_fingerprintHelp: `Need help with the fingerprint?`, diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js index 258decfa..c7527b96 100644 --- a/static/webui/translations/es.js +++ b/static/webui/translations/es.js @@ -62,6 +62,7 @@ dict = { code_mature: `Listo para el combate`, code_unmature: `Regresar el envejecimiento genético`, code_succChange: `Cambiado correctamente`, + code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`, login_description: `Inicia sesión con las credenciales de tu cuenta OpenWF (las mismas que usas en el juego al conectarte a este servidor).`, login_emailLabel: `Dirección de correo electrónico`, login_passwordLabel: `Contraseña`, @@ -127,6 +128,35 @@ dict = { detailedView_modularPartsLabel: `Cambiar partes modulares`, detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`, + invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`, + invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`, + invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`, + invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`, + invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`, + invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`, + invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`, + invigorations_utility_Health: `[UNTRANSLATED] Health`, + invigorations_utility_Energy: `[UNTRANSLATED] Energy`, + invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`, + invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`, + invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`, + invigorations_utility_Armor: `[UNTRANSLATED] Armor`, + invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`, + invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`, + + invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`, + invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`, + invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`, + invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`, + invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`, + invigorations_noneOption: `[UNTRANSLATED] None`, + mods_addRiven: `Agregar Agrietado`, mods_fingerprint: `Huella digital`, mods_fingerprintHelp: `¿Necesitas ayuda con la huella digital?`, diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js index 5653d9cc..3e0ffada 100644 --- a/static/webui/translations/fr.js +++ b/static/webui/translations/fr.js @@ -62,6 +62,7 @@ dict = { code_mature: `Maturer pour le combat`, code_unmature: `Régrésser l'âge génétique`, code_succChange: `[UNTRANSLATED] Successfully changed.`, + code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`, login_description: `Connexion avec les informations de connexion OpenWF.`, login_emailLabel: `Email`, login_passwordLabel: `Mot de passe`, @@ -127,6 +128,35 @@ dict = { detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`, detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`, + invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`, + invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`, + invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`, + invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`, + invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`, + invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`, + invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`, + invigorations_utility_Health: `[UNTRANSLATED] Health`, + invigorations_utility_Energy: `[UNTRANSLATED] Energy`, + invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`, + invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`, + invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`, + invigorations_utility_Armor: `[UNTRANSLATED] Armor`, + invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`, + invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`, + + invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`, + invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`, + invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`, + invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`, + invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`, + invigorations_noneOption: `[UNTRANSLATED] None`, + mods_addRiven: `Ajouter un riven`, mods_fingerprint: `Empreinte`, mods_fingerprintHelp: `Besoin d'aide pour l'empreinte ?`, diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index d2a70e85..d5e460aa 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -62,6 +62,7 @@ dict = { code_mature: `Подготовить к сражениям`, code_unmature: `Регрессия генетического старения`, code_succChange: `Успешно изменено.`, + code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`, login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`, login_emailLabel: `Адрес электронной почты`, login_passwordLabel: `Пароль`, @@ -127,6 +128,35 @@ dict = { detailedView_modularPartsLabel: `Изменить Модульные Части`, detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`, + invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`, + invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`, + invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`, + invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`, + invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`, + invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`, + invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`, + invigorations_utility_Health: `[UNTRANSLATED] Health`, + invigorations_utility_Energy: `[UNTRANSLATED] Energy`, + invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`, + invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`, + invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`, + invigorations_utility_Armor: `[UNTRANSLATED] Armor`, + invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`, + invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`, + + invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`, + invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`, + invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`, + invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`, + invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`, + invigorations_noneOption: `[UNTRANSLATED] None`, + mods_addRiven: `Добавить Мод Разлома`, mods_fingerprint: `Отпечаток`, mods_fingerprintHelp: `Нужна помощь с отпечатком?`, diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index 9e5850eb..f1761ef6 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -62,6 +62,7 @@ dict = { code_mature: `成长并战备`, code_unmature: `逆转衰老基因`, code_succChange: `更改成功.`, + code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`, login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同).`, login_emailLabel: `电子邮箱`, login_passwordLabel: `密码`, @@ -127,6 +128,35 @@ dict = { detailedView_modularPartsLabel: `更换部件`, detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`, + invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`, + invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`, + invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`, + invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`, + invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`, + invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`, + invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`, + invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`, + invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`, + + invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`, + invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`, + invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`, + invigorations_utility_Health: `[UNTRANSLATED] Health`, + invigorations_utility_Energy: `[UNTRANSLATED] Energy`, + invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`, + invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`, + invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`, + invigorations_utility_Armor: `[UNTRANSLATED] Armor`, + invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`, + invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`, + + invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`, + invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`, + invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`, + invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`, + invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`, + invigorations_noneOption: `[UNTRANSLATED] None`, + mods_addRiven: `添加裂罅MOD`, mods_fingerprint: `印记`, mods_fingerprintHelp: `需要印记相关的帮助?`, -- 2.47.2