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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

chore(webui): unify Invigoration code (#2809)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2809 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>

7bcb5f21
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

12 个文件 +95 -148
Deleted src/controllers/custom/editSuitInvigorationUpgradeController.ts +0 -36
@@ -1,36 +0,0 @@
1 import { getAccountIdForRequest } from "../../services/loginService.ts";
2 import { getInventory } from "../../services/inventoryService.ts";
3 import type { RequestHandler } from "express";
4 import { broadcastInventoryUpdate } from "../../services/wsService.ts";
5
6 const DEFAULT_UPGRADE_EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
7
8 export const editSuitInvigorationUpgradeController: RequestHandler = async (req, res) => {
9 const accountId = await getAccountIdForRequest(req);
10 const { oid, data } = req.body as {
11 oid: string;
12 data?: {
13 DefensiveUpgrade: string;
14 OffensiveUpgrade: string;
15 UpgradesExpiry?: number;
16 };
17 };
18 const inventory = await getInventory(accountId);
19 const suit = inventory.Suits.id(oid)!;
20 if (data) {
21 suit.DefensiveUpgrade = data.DefensiveUpgrade;
22 suit.OffensiveUpgrade = data.OffensiveUpgrade;
23 if (data.UpgradesExpiry) {
24 suit.UpgradesExpiry = new Date(data.UpgradesExpiry);
25 } else {
26 suit.UpgradesExpiry = new Date(Date.now() + DEFAULT_UPGRADE_EXPIRY_MS);
27 }
28 } else {
29 suit.DefensiveUpgrade = undefined;
30 suit.OffensiveUpgrade = undefined;
31 suit.UpgradesExpiry = undefined;
32 }
33 await inventory.save();
34 res.end();
35 broadcastInventoryUpdate(req);
36 };
Added src/controllers/custom/setInvigorationController.ts +27 -0
@@ -0,0 +1,27 @@
1 import { getAccountIdForRequest } from "../../services/loginService.ts";
2 import { getInventory } from "../../services/inventoryService.ts";
3 import type { RequestHandler } from "express";
4 import { broadcastInventoryUpdate } from "../../services/wsService.ts";
5
6 export const setInvigorationController: RequestHandler = async (req, res) => {
7 const accountId = await getAccountIdForRequest(req);
8 const request = req.body as ISetInvigorationRequest;
9 const inventory = await getInventory(accountId, "Suits");
10 const suit = inventory.Suits.id(request.oid);
11 if (suit) {
12 const hasUpgrades = request.DefensiveUpgrade && request.OffensiveUpgrade && request.UpgradesExpiry;
13 suit.DefensiveUpgrade = hasUpgrades ? request.DefensiveUpgrade : undefined;
14 suit.OffensiveUpgrade = hasUpgrades ? request.OffensiveUpgrade : undefined;
15 suit.UpgradesExpiry = hasUpgrades ? new Date(request.UpgradesExpiry) : undefined;
16 await inventory.save();
17 broadcastInventoryUpdate(req);
18 }
19 res.end();
20 };
21
22 interface ISetInvigorationRequest {
23 oid: string;
24 DefensiveUpgrade: string;
25 OffensiveUpgrade: string;
26 UpgradesExpiry: number;
27 }
Modified src/routes/custom.ts +2 -2
@@ -43,7 +43,7 @@ import { setBoosterController } from "../controllers/custom/setBoosterController
43 43 import { updateFingerprintController } from "../controllers/custom/updateFingerprintController.ts";
44 44 import { unlockLevelCapController } from "../controllers/custom/unlockLevelCapController.ts";
45 45 import { changeModularPartsController } from "../controllers/custom/changeModularPartsController.ts";
46 import { editSuitInvigorationUpgradeController } from "../controllers/custom/editSuitInvigorationUpgradeController.ts";
46 import { setInvigorationController } from "../controllers/custom/setInvigorationController.ts";
47 47 import { setAccountCheatController } from "../controllers/custom/setAccountCheatController.ts";
48 48 import { setGuildCheatController } from "../controllers/custom/setGuildCheatController.ts";
49 49
@@ -92,7 +92,7 @@ customRouter.post("/setBooster", setBoosterController);
92 92 customRouter.post("/updateFingerprint", updateFingerprintController);
93 93 customRouter.post("/unlockLevelCap", unlockLevelCapController);
94 94 customRouter.post("/changeModularParts", changeModularPartsController);
95 customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
95 customRouter.post("/setInvigoration", setInvigorationController);
96 96 customRouter.post("/setAccountCheat", setAccountCheatController);
97 97 customRouter.post("/setGuildCheat", setGuildCheatController);
98 98
Modified static/webui/index.html +9 -12
@@ -719,12 +719,12 @@
719 719 </div>
720 720 </div>
721 721 <div id="edit-suit-invigorations-card" class="card mb-3 d-none">
722 <h5 class="card-header" data-loc="detailedView_suitInvigorationLabel"></h5>
722 <h5 class="card-header" data-loc="detailedView_invigorationLabel"></h5>
723 723 <div class="card-body">
724 <form onsubmit="submitSuitInvigorationUpgrade(event)">
724 <form onsubmit="submitInvigoration(event)">
725 725 <div class="mb-3">
726 <label for="invigoration-offensive" class="form-label" data-loc="invigorations_offensiveLabel"></label>
727 <select class="form-select" id="dv-invigoration-offensive">
726 <label for="invigoration-offensive" class="form-label" data-loc="detailedView_invigorationOffensiveLabel"></label>
727 <select class="form-select" id="invigoration-offensive">
728 728 <option value="" data-loc="general_none"></option>
729 729 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerStrength" data-loc="invigorations_offensive_AbilityStrength"></option>
730 730 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerRange" data-loc="invigorations_offensive_AbilityRange"></option>
@@ -737,10 +737,9 @@
737 737 <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeCritChance" data-loc="invigorations_offensive_MeleeCritChance"></option>
738 738 </select>
739 739 </div>
740
741 740 <div class="mb-3">
742 <label for="invigoration-defensive" class="form-label" data-loc="invigorations_defensiveLabel"></label>
743 <select class="form-select" id="dv-invigoration-defensive">
741 <label for="invigoration-defensive" class="form-label" data-loc="detailedView_invigorationUtilityLabel"></label>
742 <select class="form-select" id="invigoration-defensive">
744 743 <option value="" data-loc="general_none"></option>
745 744 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationPowerEfficiency" data-loc="invigorations_utility_AbilityEfficiency"></option>
746 745 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationMovementSpeed" data-loc="invigorations_utility_SprintSpeed"></option>
@@ -755,15 +754,13 @@
755 754 <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergyRegen" data-loc="invigorations_utility_EnergyRegen"></option>
756 755 </select>
757 756 </div>
758
759 757 <div class="mb-3">
760 <label for="invigoration-expiry" class="form-label" data-loc="invigorations_expiryLabel"></label>
761 <input type="datetime-local" class="form-control" id="dv-invigoration-expiry" />
758 <label for="invigoration-expiry" class="form-label" data-loc="detailedView_invigorationExpiryLabel"></label>
759 <input type="datetime-local" class="form-control" max="2038-01-19T03:14" id="invigoration-expiry" onblur="this.value=new Date(this.value)>new Date(this.max)?new Date(this.max).toISOString().slice(0,16):this.value"/>
762 760 </div>
763
764 761 <div class="d-flex gap-2">
765 762 <button type="submit" class="btn btn-primary" data-loc="general_setButton"></button>
766 <button type="button" class="btn btn-danger" onclick="clearSuitInvigorationUpgrades()" data-loc="code_remove"></button>
763 <button type="button" class="btn btn-danger" onclick="setInvigoration()" data-loc="code_remove"></button>
767 764 </div>
768 765 </form>
769 766 </div>
Modified static/webui/script.js +24 -65
@@ -1513,12 +1513,13 @@ function updateInventory() {
1513 1513 document.getElementById("crystals-list").appendChild(tr);
1514 1514 });
1515 1515
1516 document.getElementById("edit-suit-invigorations-card").classList.remove("d-none");
1517 const { OffensiveUpgrade, DefensiveUpgrade, UpgradesExpiry } =
1518 suitInvigorationUpgradeData(item);
1519 document.getElementById("dv-invigoration-offensive").value = OffensiveUpgrade;
1520 document.getElementById("dv-invigoration-defensive").value = DefensiveUpgrade;
1521 document.getElementById("dv-invigoration-expiry").value = UpgradesExpiry;
1516 {
1517 document.getElementById("edit-suit-invigorations-card").classList.remove("d-none");
1518 document.getElementById("invigoration-offensive").value = item.OffensiveUpgrade || "";
1519 document.getElementById("invigoration-defensive").value = item.DefensiveUpgrade || "";
1520 document.getElementById("invigoration-expiry").value =
1521 formatDatetime("%Y-%m-%d %H:%M", Number(item.UpgradesExpiry?.$date.$numberLong)) || "";
1522 }
1522 1523
1523 1524 {
1524 1525 document.getElementById("loadout-card").classList.remove("d-none");
@@ -3445,9 +3446,9 @@ function doBulkQuestUpdate(operation) {
3445 3446 });
3446 3447 }
3447 3448
3448 function toast(text) {
3449 function toast(text, type = "primary") {
3449 3450 const toast = document.createElement("div");
3450 toast.className = "toast align-items-center text-bg-primary border-0";
3451 toast.className = `toast align-items-center text-bg-${type} border-0`;
3451 3452 const div = document.createElement("div");
3452 3453 div.className = "d-flex";
3453 3454 const body = document.createElement("div");
@@ -3999,73 +4000,31 @@ function handleModularPartsChange(event) {
3999 4000 });
4000 4001 }
4001 4002 }
4002 function suitInvigorationUpgradeData(suitData) {
4003 let expiryDate = "";
4004 if (suitData.UpgradesExpiry) {
4005 if (suitData.UpgradesExpiry.$date) {
4006 expiryDate = new Date(parseInt(suitData.UpgradesExpiry.$date.$numberLong));
4007 } else if (typeof suitData.UpgradesExpiry === "number") {
4008 expiryDate = new Date(suitData.UpgradesExpiry);
4009 } else if (suitData.UpgradesExpiry instanceof Date) {
4010 expiryDate = suitData.UpgradesExpiry;
4011 }
4012 if (expiryDate && !isNaN(expiryDate.getTime())) {
4013 const year = expiryDate.getFullYear();
4014 const month = String(expiryDate.getMonth() + 1).padStart(2, "0");
4015 const day = String(expiryDate.getDate()).padStart(2, "0");
4016 const hours = String(expiryDate.getHours()).padStart(2, "0");
4017 const minutes = String(expiryDate.getMinutes()).padStart(2, "0");
4018 expiryDate = `${year}-${month}-${day}T${hours}:${minutes}`;
4019 } else {
4020 expiryDate = "";
4021 }
4022 }
4023 return {
4024 oid: suitData.ItemId.$oid,
4025 OffensiveUpgrade: suitData.OffensiveUpgrade || "",
4026 DefensiveUpgrade: suitData.DefensiveUpgrade || "",
4027 UpgradesExpiry: expiryDate
4028 };
4029 }
4030 4003
4031 function submitSuitInvigorationUpgrade(event) {
4004 function submitInvigoration(event) {
4032 4005 event.preventDefault();
4033 const oid = new URLSearchParams(window.location.search).get("itemId");
4034 const offensiveUpgrade = document.getElementById("dv-invigoration-offensive").value;
4035 const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value;
4036 const expiry = document.getElementById("dv-invigoration-expiry").value;
4006 const OffensiveUpgrade = document.getElementById("invigoration-offensive").value;
4007 const DefensiveUpgrade = document.getElementById("invigoration-defensive").value;
4008 const expiry = document.getElementById("invigoration-expiry").value;
4037 4009
4038 if (!offensiveUpgrade || !defensiveUpgrade) {
4039 alert(loc("code_requiredInvigorationUpgrade"));
4010 if (!OffensiveUpgrade || !DefensiveUpgrade) {
4011 toast(loc("code_requiredInvigorationUpgrade"), "warning");
4040 4012 return;
4041 4013 }
4042 4014
4043 const data = {
4044 OffensiveUpgrade: offensiveUpgrade,
4045 DefensiveUpgrade: defensiveUpgrade
4046 };
4047
4048 if (expiry) {
4049 data.UpgradesExpiry = new Date(expiry).getTime();
4050 }
4051
4052 editSuitInvigorationUpgrade(oid, data);
4053 }
4054
4055 function clearSuitInvigorationUpgrades() {
4056 editSuitInvigorationUpgrade(new URLSearchParams(window.location.search).get("itemId"), null);
4015 setInvigoration({
4016 OffensiveUpgrade,
4017 DefensiveUpgrade,
4018 UpgradesExpiry: expiry ? new Date(expiry).getTime() : Date.now() + 7 * 24 * 60 * 60 * 1000
4019 });
4057 4020 }
4058 4021
4059 async function editSuitInvigorationUpgrade(oid, data) {
4060 /* data?: {
4061 DefensiveUpgrade: string;
4062 OffensiveUpgrade: string;
4063 UpgradesExpiry?: number;
4064 }*/
4022 function setInvigoration(data) {
4023 const oid = new URLSearchParams(window.location.search).get("itemId");
4065 4024 $.post({
4066 url: "/custom/editSuitInvigorationUpgrade?" + window.authz,
4025 url: "/custom/setInvigoration?" + window.authz,
4067 4026 contentType: "application/json",
4068 data: JSON.stringify({ oid, data })
4027 data: JSON.stringify({ oid, ...data })
4069 4028 }).done(function () {
4070 4029 updateInventory();
4071 4030 });
Modified static/webui/translations/de.js +5 -5
@@ -76,7 +76,7 @@ dict = {
76 76 code_replays: `[UNTRANSLATED] Replays`,
77 77 code_stalker: `Stalker`,
78 78 code_succChange: `Erfolgreich geändert.`,
79 code_requiredInvigorationUpgrade: `Du musst sowohl ein offensives & defensives Upgrade auswählen.`,
79 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility upgrade.`,
80 80 login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`,
81 81 login_emailLabel: `E-Mail-Adresse`,
82 82 login_passwordLabel: `Passwort`,
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `Valenz-Bonus`,
148 148 detailedView_valenceBonusDescription: `Du kannst den Valenz-Bonus deiner Waffe festlegen oder entfernen.`,
149 149 detailedView_modularPartsLabel: `Modulare Teile ändern`,
150 detailedView_suitInvigorationLabel: `Warframe-Kräftigung`,
150 detailedView_invigorationLabel: `Kräftigung`,
151 151 detailedView_loadoutLabel: `Loadouts`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200% Fähigkeitsstärke`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5 Sprung-Zurücksetzungen`,
173 173 invigorations_utility_EnergyRegen: `+2 Energieregeneration pro Sekunde`,
174 174
175 invigorations_offensiveLabel: `Offensives Upgrade`,
176 invigorations_defensiveLabel: `Defensives Upgrade`,
177 invigorations_expiryLabel: `Upgrades Ablaufdatum (optional)`,
175 detailedView_invigorationOffensiveLabel: `Offensives Upgrade`,
176 detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
177 detailedView_invigorationExpiryLabel: `[UNTRANSLATED] Invigoration Expiry (optional)`,
178 178
179 179 abilityOverride_label: `Fähigkeitsüberschreibung`,
180 180 abilityOverride_onSlot: `auf Slot`,
Modified static/webui/translations/en.js +5 -5
@@ -75,7 +75,7 @@ dict = {
75 75 code_replays: `Replays`,
76 76 code_stalker: `Stalker`,
77 77 code_succChange: `Successfully changed.`,
78 code_requiredInvigorationUpgrade: `You must select both an offensive & defensive upgrade.`,
78 code_requiredInvigorationUpgrade: `You must select both an offensive & utility upgrade.`,
79 79 login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`,
80 80 login_emailLabel: `Email address`,
81 81 login_passwordLabel: `Password`,
@@ -146,7 +146,7 @@ dict = {
146 146 detailedView_valenceBonusLabel: `Valence Bonus`,
147 147 detailedView_valenceBonusDescription: `You can set or remove the Valence Bonus from your weapon.`,
148 148 detailedView_modularPartsLabel: `Change Modular Parts`,
149 detailedView_suitInvigorationLabel: `Warframe Invigoration`,
149 detailedView_invigorationLabel: `Invigoration`,
150 150 detailedView_loadoutLabel: `Loadouts`,
151 151
152 152 invigorations_offensive_AbilityStrength: `+200% Ability Strength`,
@@ -171,9 +171,9 @@ dict = {
171 171 invigorations_utility_Jumps: `+5 Jump Resets`,
172 172 invigorations_utility_EnergyRegen: `+2 Energy Regen/s`,
173 173
174 invigorations_offensiveLabel: `Offensive Upgrade`,
175 invigorations_defensiveLabel: `Defensive Upgrade`,
176 invigorations_expiryLabel: `Upgrades Expiry (optional)`,
174 detailedView_invigorationOffensiveLabel: `Offensive Upgrade`,
175 detailedView_invigorationUtilityLabel: `Utility Upgrade`,
176 detailedView_invigorationExpiryLabel: `Invigoration Expiry (optional)`,
177 177
178 178 abilityOverride_label: `Ability Override`,
179 179 abilityOverride_onSlot: `on slot`,
Modified static/webui/translations/es.js +5 -5
@@ -76,7 +76,7 @@ dict = {
76 76 code_replays: `Repeticiones`,
77 77 code_stalker: `Stalker`,
78 78 code_succChange: `Cambiado correctamente`,
79 code_requiredInvigorationUpgrade: `Debes seleccionar una mejora ofensiva y una defensiva.`,
79 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility upgrade.`,
80 80 login_description: `Inicia sesión con las credenciales de tu cuenta OpenWF (las mismas que usas en el juego al conectarte a este servidor).`,
81 81 login_emailLabel: `Dirección de correo electrónico`,
82 82 login_passwordLabel: `Contraseña`,
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `Bonus de Valéncia`,
148 148 detailedView_valenceBonusDescription: `Puedes establecer o quitar el bonus de valencia de tu arma.`,
149 149 detailedView_modularPartsLabel: `Cambiar partes modulares`,
150 detailedView_suitInvigorationLabel: `Vigorización de Warframe`,
150 detailedView_invigorationLabel: `Fortalecimiento`,
151 151 detailedView_loadoutLabel: `Equipamientos`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200% Fuerza de Habilidad`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5 Restablecimientos de Salto`,
173 173 invigorations_utility_EnergyRegen: `+2 Regeneración de Energía/s`,
174 174
175 invigorations_offensiveLabel: `Mejora Ofensiva`,
176 invigorations_defensiveLabel: `Mejora Defensiva`,
177 invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`,
175 detailedView_invigorationOffensiveLabel: `Mejora Ofensiva`,
176 detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
177 detailedView_invigorationExpiryLabel: `[UNTRANSLATED] Invigoration Expiry (optional)`,
178 178
179 179 abilityOverride_label: `Intercambio de Habilidad`,
180 180 abilityOverride_onSlot: `en el espacio`,
Modified static/webui/translations/fr.js +5 -5
@@ -76,7 +76,7 @@ dict = {
76 76 code_replays: `[UNTRANSLATED] Replays`,
77 77 code_stalker: `Stalker`,
78 78 code_succChange: `Changement effectué.`,
79 code_requiredInvigorationUpgrade: `Augmentation offensive et défensive requises.`,
79 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility upgrade.`,
80 80 login_description: `Connexion avec les informations de connexion OpenWF.`,
81 81 login_emailLabel: `Email`,
82 82 login_passwordLabel: `Mot de passe`,
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `Bonus de Valence`,
148 148 detailedView_valenceBonusDescription: `Définir le Bonus Valence de l'arme.`,
149 149 detailedView_modularPartsLabel: `Changer l'équipement modulaire`,
150 detailedView_suitInvigorationLabel: `Invigoration de Warframe`,
150 detailedView_invigorationLabel: `Dynamisation`,
151 151 detailedView_loadoutLabel: `Équipements`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200% de puissance de pouvoir`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5 réinitialisations de saut`,
173 173 invigorations_utility_EnergyRegen: `+2 d'énergie régénérés/s`,
174 174
175 invigorations_offensiveLabel: `Amélioration offensive`,
176 invigorations_defensiveLabel: `Amélioration défensive`,
177 invigorations_expiryLabel: `Expiration de l'invigoration (optionnel)`,
175 detailedView_invigorationOffensiveLabel: `Amélioration offensive`,
176 detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
177 detailedView_invigorationExpiryLabel: `[UNTRANSLATED] Invigoration Expiry (optional)`,
178 178
179 179 abilityOverride_label: `Remplacement de pouvoir`,
180 180 abilityOverride_onSlot: `Sur l'emplacement`,
Modified static/webui/translations/ru.js +4 -4
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `Бонус Валентности`,
148 148 detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус Валентности с вашего оружия.`,
149 149 detailedView_modularPartsLabel: `Изменить модульные части`,
150 detailedView_suitInvigorationLabel: `Воодушевление Варфрейма`,
150 detailedView_invigorationLabel: `Воодушевление`,
151 151 detailedView_loadoutLabel: `Конфигурации`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200% к силе способностей.`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5 сбросов прыжка.`,
173 173 invigorations_utility_EnergyRegen: `+2 к регенерации энергии в секунду.`,
174 174
175 invigorations_offensiveLabel: `Атакующее улучшение`,
176 invigorations_defensiveLabel: `Вспомогательное улучшение`,
177 invigorations_expiryLabel: `Срок действия Воодушевления (необязательно)`,
175 detailedView_invigorationOffensiveLabel: `Атакующее улучшение`,
176 detailedView_invigorationUtilityLabel: `Вспомогательное улучшение`,
177 detailedView_invigorationExpiryLabel: `Срок действия Воодушевления (необязательно)`,
178 178
179 179 abilityOverride_label: `Переопределение способности`,
180 180 abilityOverride_onSlot: `в ячейке`,
Modified static/webui/translations/uk.js +4 -4
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `Ознака Валентності`,
148 148 detailedView_valenceBonusDescription: `Ви можете встановити або прибрати ознаку Валентності з вашої зброї.`,
149 149 detailedView_modularPartsLabel: `Змінити модульні частини`,
150 detailedView_suitInvigorationLabel: `Зміцнення Ворфрейма`,
150 detailedView_invigorationLabel: `Зміцнення`,
151 151 detailedView_loadoutLabel: `Конфігурації`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200% до потужності здібностей.`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5 Оновлень стрибків.`,
173 173 invigorations_utility_EnergyRegen: `+2 до відновлення енергії на секунду.`,
174 174
175 invigorations_offensiveLabel: `Атакуюче вдосконалення`,
176 invigorations_defensiveLabel: `Допоміжне вдосконалення`,
177 invigorations_expiryLabel: `Термін дії Зміцнення (необов'язково)`,
175 detailedView_invigorationOffensiveLabel: `Атакуюче вдосконалення`,
176 detailedView_invigorationUtilityLabel: `Допоміжне вдосконалення`,
177 detailedView_invigorationExpiryLabel: `Термін дії Зміцнення (необов'язково)`,
178 178
179 179 abilityOverride_label: `Перевизначення здібностей`,
180 180 abilityOverride_onSlot: `у комірці`,
Modified static/webui/translations/zh.js +5 -5
@@ -76,7 +76,7 @@ dict = {
76 76 code_replays: `[UNTRANSLATED] Replays`,
77 77 code_stalker: `追猎者`,
78 78 code_succChange: `更改成功`,
79 code_requiredInvigorationUpgrade: `您必须同时选择一个进攻型和一个功能型活化属性.`,
79 code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility upgrade.`,
80 80 login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)`,
81 81 login_emailLabel: `电子邮箱`,
82 82 login_passwordLabel: `密码`,
@@ -147,7 +147,7 @@ dict = {
147 147 detailedView_valenceBonusLabel: `效价加成`,
148 148 detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
149 149 detailedView_modularPartsLabel: `更换部件`,
150 detailedView_suitInvigorationLabel: `编辑战甲活化属性`,
150 detailedView_invigorationLabel: `活化`,
151 151 detailedView_loadoutLabel: `配置`,
152 152
153 153 invigorations_offensive_AbilityStrength: `+200%技能强度`,
@@ -172,9 +172,9 @@ dict = {
172 172 invigorations_utility_Jumps: `+5跳跃次数`,
173 173 invigorations_utility_EnergyRegen: `+2/秒能量恢复`,
174 174
175 invigorations_offensiveLabel: `进攻型属性`,
176 invigorations_defensiveLabel: `功能型属性`,
177 invigorations_expiryLabel: `活化时效(可选)`,
175 detailedView_invigorationOffensiveLabel: `进攻型属性`,
176 detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
177 detailedView_invigorationExpiryLabel: `活化时效(可选)`,
178 178
179 179 abilityOverride_label: `技能替换`,
180 180 abilityOverride_onSlot: `槽位`,