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): edit suit invigorations (#2478)

Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com> Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2478 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: nyaoouo <nyaoouo@noreply.localhost> Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>

b60723ef
nyaoouo <nyaoouo@noreply.localhost>
提交于

代码差异

10 个文件 +350 -0
Added src/controllers/custom/editSuitInvigorationUpgradeController.ts +34 -0
@@ -0,0 +1,34 @@
1 import { getAccountIdForRequest } from "@/src/services/loginService";
2 import { getInventory } from "@/src/services/inventoryService";
3 import { RequestHandler } from "express";
4
5 const DEFAULT_UPGRADE_EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
6
7 export const editSuitInvigorationUpgradeController: RequestHandler = async (req, res) => {
8 const accountId = await getAccountIdForRequest(req);
9 const { oid, data } = req.body as {
10 oid: string;
11 data?: {
12 DefensiveUpgrade: string;
13 OffensiveUpgrade: string;
14 UpgradesExpiry?: number;
15 };
16 };
17 const inventory = await getInventory(accountId);
18 const suit = inventory.Suits.id(oid)!;
19 if (data) {
20 suit.DefensiveUpgrade = data.DefensiveUpgrade;
21 suit.OffensiveUpgrade = data.OffensiveUpgrade;
22 if (data.UpgradesExpiry) {
23 suit.UpgradesExpiry = new Date(data.UpgradesExpiry);
24 } else {
25 suit.UpgradesExpiry = new Date(Date.now() + DEFAULT_UPGRADE_EXPIRY_MS);
26 }
27 } else {
28 suit.DefensiveUpgrade = undefined;
29 suit.OffensiveUpgrade = undefined;
30 suit.UpgradesExpiry = undefined;
31 }
32 await inventory.save();
33 res.end();
34 };
Modified src/routes/custom.ts +2 -0
@@ -26,6 +26,7 @@ import { setEvolutionProgressController } from "@/src/controllers/custom/setEvol
26 26 import { setBoosterController } from "@/src/controllers/custom/setBoosterController";
27 27 import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController";
28 28 import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController";
29 import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController";
29 30
30 31 import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
31 32
@@ -57,6 +58,7 @@ customRouter.post("/setEvolutionProgress", setEvolutionProgressController);
57 58 customRouter.post("/setBooster", setBoosterController);
58 59 customRouter.post("/updateFingerprint", updateFingerprintController);
59 60 customRouter.post("/changeModularParts", changeModularPartsController);
61 customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
60 62
61 63 customRouter.post("/getConfig", getConfigController);
62 64 customRouter.post("/setConfig", setConfigController);
Modified static/webui/index.html +50 -0
@@ -478,6 +478,56 @@
478 478 </table>
479 479 </div>
480 480 </div>
481 <div id="edit-suit-invigorations-card" class="card mb-3 d-none">
482 <h5 class="card-header" data-loc="detailedView_editSuitInvigoration"></h5>
483 <div class="card-body">
484 <form onsubmit="submitSuitInvigorationUpgrade(event)">
485 <div class="mb-3">
486 <label for="invigoration-offensive" class="form-label" data-loc="invigorations_offensiveLabel"></label>
487 <select class="form-select" id="dv-invigoration-offensive">
488 <option value="" data-loc="invigorations_noneOption"></option>
489 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerStrength" data-loc="invigorations_offensive_PowerStrength"></option>
490 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerRange" data-loc="invigorations_offensive_PowerRange"></option>
491 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerDuration" data-loc="invigorations_offensive_PowerDuration"></option>
492 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeDamage" data-loc="invigorations_offensive_MeleeDamage"></option>
493 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPrimaryDamage" data-loc="invigorations_offensive_PrimaryDamage"></option>
494 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationSecondaryDamage" data-loc="invigorations_offensive_SecondaryDamage"></option>
495 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPrimaryCritChance" data-loc="invigorations_offensive_PrimaryCritChance"></option>
496 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationSecondaryCritChance" data-loc="invigorations_offensive_SecondaryCritChance"></option>
497 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeCritChance" data-loc="invigorations_offensive_MeleeCritChance"></option>
498 </select>
499 </div>
500
501 <div class="mb-3">
502 <label for="invigoration-defensive" class="form-label" data-loc="invigorations_defensiveLabel"></label>
503 <select class="form-select" id="dv-invigoration-defensive">
504 <option value="" data-loc="invigorations_noneOption"></option>
505 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationPowerEfficiency" data-loc="invigorations_utility_PowerEfficiency"></option>
506 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationMovementSpeed" data-loc="invigorations_utility_MovementSpeed"></option>
507 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationParkourSpeed" data-loc="invigorations_utility_ParkourSpeed"></option>
508 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationHealth" data-loc="invigorations_utility_Health"></option>
509 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergy" data-loc="invigorations_utility_Energy"></option>
510 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationStatusResistance" data-loc="invigorations_utility_StatusResistance"></option>
511 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationReloadSpeed" data-loc="invigorations_utility_ReloadSpeed"></option>
512 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationHealthRegen" data-loc="invigorations_utility_HealthRegen"></option>
513 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationArmor" data-loc="invigorations_utility_Armor"></option>
514 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationJumps" data-loc="invigorations_utility_Jumps"></option>
515 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergyRegen" data-loc="invigorations_utility_EnergyRegen"></option>
516 </select>
517 </div>
518
519 <div class="mb-3">
520 <label for="invigoration-expiry" class="form-label" data-loc="invigorations_expiryLabel"></label>
521 <input type="datetime-local" class="form-control" id="dv-invigoration-expiry" />
522 </div>
523
524 <div class="d-flex gap-2">
525 <button type="submit" class="btn btn-primary" data-loc="invigorations_applyButton"></button>
526 <button type="button" class="btn btn-danger" onclick="clearSuitInvigorationUpgrades()" data-loc="invigorations_clearButton"></button>
527 </div>
528 </form>
529 </div>
530 </div>
481 531 <div id="modularParts-card" class="card mb-3 d-none">
482 532 <h5 class="card-header" data-loc="detailedView_modularPartsLabel"></h5>
483 533 <div class="card-body">
Modified static/webui/script.js +78 -0
@@ -1231,6 +1231,13 @@ function updateInventory() {
1231 1231 }
1232 1232 document.getElementById("crystals-list").appendChild(tr);
1233 1233 });
1234
1235 document.getElementById("edit-suit-invigorations-card").classList.remove("d-none");
1236 const { OffensiveUpgrade, DefensiveUpgrade, UpgradesExpiry } =
1237 suitInvigorationUpgradeData(item);
1238 document.getElementById("dv-invigoration-offensive").value = OffensiveUpgrade;
1239 document.getElementById("dv-invigoration-defensive").value = DefensiveUpgrade;
1240 document.getElementById("dv-invigoration-expiry").value = UpgradesExpiry;
1234 1241 } else if (["LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category)) {
1235 1242 document.getElementById("valenceBonus-card").classList.remove("d-none");
1236 1243 document.getElementById("valenceBonus-innateDamage").value = "";
@@ -2863,3 +2870,74 @@ function handleModularPartsChange(event) {
2863 2870 });
2864 2871 }
2865 2872 }
2873 function suitInvigorationUpgradeData(suitData) {
2874 let expiryDate = "";
2875 if (suitData.UpgradesExpiry) {
2876 if (suitData.UpgradesExpiry.$date) {
2877 expiryDate = new Date(parseInt(suitData.UpgradesExpiry.$date.$numberLong));
2878 } else if (typeof suitData.UpgradesExpiry === "number") {
2879 expiryDate = new Date(suitData.UpgradesExpiry);
2880 } else if (suitData.UpgradesExpiry instanceof Date) {
2881 expiryDate = suitData.UpgradesExpiry;
2882 }
2883 if (expiryDate && !isNaN(expiryDate.getTime())) {
2884 const year = expiryDate.getFullYear();
2885 const month = String(expiryDate.getMonth() + 1).padStart(2, "0");
2886 const day = String(expiryDate.getDate()).padStart(2, "0");
2887 const hours = String(expiryDate.getHours()).padStart(2, "0");
2888 const minutes = String(expiryDate.getMinutes()).padStart(2, "0");
2889 expiryDate = `${year}-${month}-${day}T${hours}:${minutes}`;
2890 } else {
2891 expiryDate = "";
2892 }
2893 }
2894 return {
2895 oid: suitData.ItemId.$oid,
2896 OffensiveUpgrade: suitData.OffensiveUpgrade || "",
2897 DefensiveUpgrade: suitData.DefensiveUpgrade || "",
2898 UpgradesExpiry: expiryDate
2899 };
2900 }
2901
2902 function submitSuitInvigorationUpgrade(event) {
2903 event.preventDefault();
2904 const oid = new URLSearchParams(window.location.search).get("itemId");
2905 const offensiveUpgrade = document.getElementById("dv-invigoration-offensive").value;
2906 const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value;
2907 const expiry = document.getElementById("dv-invigoration-expiry").value;
2908
2909 if (!offensiveUpgrade || !defensiveUpgrade) {
2910 alert(loc("code_requiredInvigorationUpgrade"));
2911 return;
2912 }
2913
2914 const data = {
2915 OffensiveUpgrade: offensiveUpgrade,
2916 DefensiveUpgrade: defensiveUpgrade
2917 };
2918
2919 if (expiry) {
2920 data.UpgradesExpiry = new Date(expiry).getTime();
2921 }
2922
2923 editSuitInvigorationUpgrade(oid, data);
2924 }
2925
2926 function clearSuitInvigorationUpgrades() {
2927 editSuitInvigorationUpgrade(new URLSearchParams(window.location.search).get("itemId"), null);
2928 }
2929
2930 async function editSuitInvigorationUpgrade(oid, data) {
2931 /* data?: {
2932 DefensiveUpgrade: string;
2933 OffensiveUpgrade: string;
2934 UpgradesExpiry?: number;
2935 }*/
2936 $.post({
2937 url: "/custom/editSuitInvigorationUpgrade?" + window.authz,
2938 contentType: "application/json",
2939 data: JSON.stringify({ oid, data })
2940 }).done(function () {
2941 updateInventory();
2942 });
2943 }
Modified static/webui/translations/de.js +31 -0
@@ -62,6 +62,7 @@ dict = {
62 62 code_mature: `Für den Kampf auswachsen lassen`,
63 63 code_unmature: `Genetisches Altern zurücksetzen`,
64 64 code_succChange: `Erfolgreich geändert.`,
65 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`,
65 66 login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`,
66 67 login_emailLabel: `E-Mail-Adresse`,
67 68 login_passwordLabel: `Passwort`,
@@ -125,6 +126,36 @@ dict = {
125 126 detailedView_valenceBonusLabel: `Valenz-Bonus`,
126 127 detailedView_valenceBonusDescription: `Du kannst den Valenz-Bonus deiner Waffe festlegen oder entfernen.`,
127 128 detailedView_modularPartsLabel: `Modulare Teile ändern`,
129 detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`,
130
131 invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`,
132 invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`,
133 invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`,
134 invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`,
135 invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`,
136 invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`,
137 invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`,
138 invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`,
139 invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`,
140
141 invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`,
142 invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`,
143 invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`,
144 invigorations_utility_Health: `[UNTRANSLATED] Health`,
145 invigorations_utility_Energy: `[UNTRANSLATED] Energy`,
146 invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`,
147 invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`,
148 invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`,
149 invigorations_utility_Armor: `[UNTRANSLATED] Armor`,
150 invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`,
151 invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`,
152
153 invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
154 invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
155 invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
156 invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`,
157 invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`,
158 invigorations_noneOption: `[UNTRANSLATED] None`,
128 159
129 160 mods_addRiven: `Riven hinzufügen`,
130 161 mods_fingerprint: `Fingerabdruck`,
Modified static/webui/translations/en.js +31 -0
@@ -61,6 +61,7 @@ dict = {
61 61 code_mature: `Mature for combat`,
62 62 code_unmature: `Regress genetic aging`,
63 63 code_succChange: `Successfully changed.`,
64 code_requiredInvigorationUpgrade: `You must select both an offensive and a defensive upgrade.`,
64 65 login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`,
65 66 login_emailLabel: `Email address`,
66 67 login_passwordLabel: `Password`,
@@ -124,6 +125,36 @@ dict = {
124 125 detailedView_valenceBonusLabel: `Valence Bonus`,
125 126 detailedView_valenceBonusDescription: `You can set or remove the Valence Bonus from your weapon.`,
126 127 detailedView_modularPartsLabel: `Change Modular Parts`,
128 detailedView_editSuitInvigoration: `Edit Suit Invigoration`,
129
130 invigorations_offensive_PowerStrength: `Power Strength`,
131 invigorations_offensive_PowerRange: `Power Range`,
132 invigorations_offensive_PowerDuration: `Power Duration`,
133 invigorations_offensive_MeleeDamage: `Melee Damage`,
134 invigorations_offensive_PrimaryDamage: `Primary Damage`,
135 invigorations_offensive_SecondaryDamage: `Secondary Damage`,
136 invigorations_offensive_PrimaryCritChance: `Primary Critical Chance`,
137 invigorations_offensive_SecondaryCritChance: `Secondary Critical Chance`,
138 invigorations_offensive_MeleeCritChance: `Melee Critical Chance`,
139
140 invigorations_utility_PowerEfficiency: `Power Efficiency`,
141 invigorations_utility_MovementSpeed: `Movement Speed`,
142 invigorations_utility_ParkourSpeed: `Parkour Speed`,
143 invigorations_utility_Health: `Health`,
144 invigorations_utility_Energy: `Energy`,
145 invigorations_utility_StatusResistance: `Status Resistance`,
146 invigorations_utility_ReloadSpeed: `Reload Speed`,
147 invigorations_utility_HealthRegen: `Health Regen`,
148 invigorations_utility_Armor: `Armor`,
149 invigorations_utility_Jumps: `Jumps`,
150 invigorations_utility_EnergyRegen: `Energy Regen`,
151
152 invigorations_offensiveLabel: `Offensive Upgrade`,
153 invigorations_defensiveLabel: `Defensive Upgrade`,
154 invigorations_expiryLabel: `Upgrades Expiry (optional)`,
155 invigorations_applyButton: `Apply Upgrades`,
156 invigorations_clearButton: `Clear Upgrades`,
157 invigorations_noneOption: `None`,
127 158
128 159 mods_addRiven: `Add Riven`,
129 160 mods_fingerprint: `Fingerprint`,
Modified static/webui/translations/es.js +31 -0
@@ -62,6 +62,7 @@ dict = {
62 62 code_mature: `Listo para el combate`,
63 63 code_unmature: `Regresar el envejecimiento genético`,
64 64 code_succChange: `Cambiado correctamente`,
65 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`,
65 66 login_description: `Inicia sesión con las credenciales de tu cuenta OpenWF (las mismas que usas en el juego al conectarte a este servidor).`,
66 67 login_emailLabel: `Dirección de correo electrónico`,
67 68 login_passwordLabel: `Contraseña`,
@@ -125,6 +126,36 @@ dict = {
125 126 detailedView_valenceBonusLabel: `Bônus de Valência`,
126 127 detailedView_valenceBonusDescription: `Puedes establecer o quitar el bono de valencia de tu arma.`,
127 128 detailedView_modularPartsLabel: `Cambiar partes modulares`,
129 detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`,
130
131 invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`,
132 invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`,
133 invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`,
134 invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`,
135 invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`,
136 invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`,
137 invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`,
138 invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`,
139 invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`,
140
141 invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`,
142 invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`,
143 invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`,
144 invigorations_utility_Health: `[UNTRANSLATED] Health`,
145 invigorations_utility_Energy: `[UNTRANSLATED] Energy`,
146 invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`,
147 invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`,
148 invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`,
149 invigorations_utility_Armor: `[UNTRANSLATED] Armor`,
150 invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`,
151 invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`,
152
153 invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
154 invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
155 invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
156 invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`,
157 invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`,
158 invigorations_noneOption: `[UNTRANSLATED] None`,
128 159
129 160 mods_addRiven: `Agregar Agrietado`,
130 161 mods_fingerprint: `Huella digital`,
Modified static/webui/translations/fr.js +31 -0
@@ -62,6 +62,7 @@ dict = {
62 62 code_mature: `Maturer pour le combat`,
63 63 code_unmature: `Régrésser l'âge génétique`,
64 64 code_succChange: `[UNTRANSLATED] Successfully changed.`,
65 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`,
65 66 login_description: `Connexion avec les informations de connexion OpenWF.`,
66 67 login_emailLabel: `Email`,
67 68 login_passwordLabel: `Mot de passe`,
@@ -125,6 +126,36 @@ dict = {
125 126 detailedView_valenceBonusLabel: `Bonus de Valence`,
126 127 detailedView_valenceBonusDescription: `[UNTRANSLATED] You can set or remove the Valence Bonus from your weapon.`,
127 128 detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`,
129 detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`,
130
131 invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`,
132 invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`,
133 invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`,
134 invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`,
135 invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`,
136 invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`,
137 invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`,
138 invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`,
139 invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`,
140
141 invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`,
142 invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`,
143 invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`,
144 invigorations_utility_Health: `[UNTRANSLATED] Health`,
145 invigorations_utility_Energy: `[UNTRANSLATED] Energy`,
146 invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`,
147 invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`,
148 invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`,
149 invigorations_utility_Armor: `[UNTRANSLATED] Armor`,
150 invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`,
151 invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`,
152
153 invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
154 invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
155 invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
156 invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`,
157 invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`,
158 invigorations_noneOption: `[UNTRANSLATED] None`,
128 159
129 160 mods_addRiven: `Ajouter un riven`,
130 161 mods_fingerprint: `Empreinte`,
Modified static/webui/translations/ru.js +31 -0
@@ -62,6 +62,7 @@ dict = {
62 62 code_mature: `Подготовить к сражениям`,
63 63 code_unmature: `Регрессия генетического старения`,
64 64 code_succChange: `Успешно изменено.`,
65 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`,
65 66 login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
66 67 login_emailLabel: `Адрес электронной почты`,
67 68 login_passwordLabel: `Пароль`,
@@ -125,6 +126,36 @@ dict = {
125 126 detailedView_valenceBonusLabel: `Бонус Валентности`,
126 127 detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус валентности с вашего оружия.`,
127 128 detailedView_modularPartsLabel: `Изменить Модульные Части`,
129 detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`,
130
131 invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`,
132 invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`,
133 invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`,
134 invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`,
135 invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`,
136 invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`,
137 invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`,
138 invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`,
139 invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`,
140
141 invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`,
142 invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`,
143 invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`,
144 invigorations_utility_Health: `[UNTRANSLATED] Health`,
145 invigorations_utility_Energy: `[UNTRANSLATED] Energy`,
146 invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`,
147 invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`,
148 invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`,
149 invigorations_utility_Armor: `[UNTRANSLATED] Armor`,
150 invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`,
151 invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`,
152
153 invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
154 invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
155 invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
156 invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`,
157 invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`,
158 invigorations_noneOption: `[UNTRANSLATED] None`,
128 159
129 160 mods_addRiven: `Добавить Мод Разлома`,
130 161 mods_fingerprint: `Отпечаток`,
Modified static/webui/translations/zh.js +31 -0
@@ -62,6 +62,7 @@ dict = {
62 62 code_mature: `成长并战备`,
63 63 code_unmature: `逆转衰老基因`,
64 64 code_succChange: `更改成功.`,
65 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive and a defensive upgrade.`,
65 66 login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同).`,
66 67 login_emailLabel: `电子邮箱`,
67 68 login_passwordLabel: `密码`,
@@ -125,6 +126,36 @@ dict = {
125 126 detailedView_valenceBonusLabel: `效价加成`,
126 127 detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
127 128 detailedView_modularPartsLabel: `更换部件`,
129 detailedView_editSuitInvigoration: `[UNTRANSLATED] Edit Suit Invigoration`,
130
131 invigorations_offensive_PowerStrength: `[UNTRANSLATED] Power Strength`,
132 invigorations_offensive_PowerRange: `[UNTRANSLATED] Power Range`,
133 invigorations_offensive_PowerDuration: `[UNTRANSLATED] Power Duration`,
134 invigorations_offensive_MeleeDamage: `[UNTRANSLATED] Melee Damage`,
135 invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] Primary Damage`,
136 invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] Secondary Damage`,
137 invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] Primary Critical Chance`,
138 invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] Secondary Critical Chance`,
139 invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] Melee Critical Chance`,
140
141 invigorations_utility_PowerEfficiency: `[UNTRANSLATED] Power Efficiency`,
142 invigorations_utility_MovementSpeed: `[UNTRANSLATED] Movement Speed`,
143 invigorations_utility_ParkourSpeed: `[UNTRANSLATED] Parkour Speed`,
144 invigorations_utility_Health: `[UNTRANSLATED] Health`,
145 invigorations_utility_Energy: `[UNTRANSLATED] Energy`,
146 invigorations_utility_StatusResistance: `[UNTRANSLATED] Status Resistance`,
147 invigorations_utility_ReloadSpeed: `[UNTRANSLATED] Reload Speed`,
148 invigorations_utility_HealthRegen: `[UNTRANSLATED] Health Regen`,
149 invigorations_utility_Armor: `[UNTRANSLATED] Armor`,
150 invigorations_utility_Jumps: `[UNTRANSLATED] Jumps`,
151 invigorations_utility_EnergyRegen: `[UNTRANSLATED] Energy Regen`,
152
153 invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
154 invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
155 invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
156 invigorations_applyButton: `[UNTRANSLATED] Apply Upgrades`,
157 invigorations_clearButton: `[UNTRANSLATED] Clear Upgrades`,
158 invigorations_noneOption: `[UNTRANSLATED] None`,
128 159
129 160 mods_addRiven: `添加裂罅MOD`,
130 161 mods_fingerprint: `印记`,