返回提交历史
Modified
src/controllers/custom/addModularEquipmentController.ts
+62
-3
Modified
src/helpers/modularWeaponHelper.ts
+1
-0
Modified
static/webui/index.html
+37
-0
Modified
static/webui/script.js
+71
-9
Modified
static/webui/translations/de.js
+6
-0
Modified
static/webui/translations/en.js
+6
-0
Modified
static/webui/translations/fr.js
+6
-0
Modified
static/webui/translations/ru.js
+6
-0
Modified
static/webui/translations/zh.js
+6
-0
XFEstudio/XFESpaceNinjaServer
feat(webui): MoaPets support (#1402)
Translations were taken from the game Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1402 Reviewed-by: Sainan <sainan@calamity.inc> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
d033c2bc
代码差异
9 个文件
+201
-12
@@ -1,15 +1,26 @@
1
1
import { getAccountIdForRequest } from "@/src/services/loginService";
2
import { getInventory, addEquipment, occupySlot, productCategoryToInventoryBin } from "@/src/services/inventoryService";
2
import {
3
getInventory,
4
addEquipment,
5
occupySlot,
6
productCategoryToInventoryBin,
7
applyDefaultUpgrades
8
} from "@/src/services/inventoryService";
3
9
import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
10
import { getDefaultUpgrades } from "@/src/services/itemDataService";
11
import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
4
12
import { ExportWeapons } from "warframe-public-export-plus";
5
13
import { RequestHandler } from "express";
6
14
7
15
export const addModularEquipmentController: RequestHandler = async (req, res) => {
16
const requiredFields = new Set();
8
17
const accountId = await getAccountIdForRequest(req);
9
18
const request = req.body as IAddModularEquipmentRequest;
10
19
const category = modularWeaponTypes[request.ItemType];
11
20
const inventoryBin = productCategoryToInventoryBin(category)!;
12
const inventory = await getInventory(accountId, `${category} ${inventoryBin}`);
21
requiredFields.add(category);
22
requiredFields.add(inventoryBin);
23
13
24
request.ModularParts.forEach(part => {
14
25
if (ExportWeapons[part].gunType) {
15
26
if (category == "LongGuns") {
@@ -25,9 +36,57 @@ export const addModularEquipmentController: RequestHandler = async (req, res) =>
25
36
GT_BEAM: "/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryBeam"
26
37
}[ExportWeapons[part].gunType];
27
38
}
39
} else if (request.ItemType == "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit") {
40
if (part.includes("ZanukaPetPartHead")) {
41
request.ItemType = {
42
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetParts/ZanukaPetPartHeadA":
43
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit",
44
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetParts/ZanukaPetPartHeadB":
45
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit",
46
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetParts/ZanukaPetPartHeadC":
47
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit"
48
}[part]!;
49
}
28
50
}
29
51
});
30
addEquipment(inventory, category, request.ItemType, request.ModularParts);
52
const defaultUpgrades = getDefaultUpgrades(request.ModularParts);
53
if (defaultUpgrades) {
54
requiredFields.add("RawUpgrades");
55
}
56
const defaultWeaponsMap: Record<string, string[]> = {
57
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": [
58
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetMeleeWeaponIP"
59
],
60
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": [
61
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetMeleeWeaponIS"
62
],
63
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": [
64
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetMeleeWeaponPS"
65
]
66
};
67
const defaultWeapons = defaultWeaponsMap[request.ItemType];
68
if (defaultWeapons) {
69
for (const defaultWeapon of defaultWeapons) {
70
const category = ExportWeapons[defaultWeapon].productCategory;
71
requiredFields.add(category);
72
requiredFields.add(productCategoryToInventoryBin(category));
73
}
74
}
75
76
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
77
if (defaultWeapons) {
78
for (const defaultWeapon of defaultWeapons) {
79
const category = ExportWeapons[defaultWeapon].productCategory;
80
addEquipment(inventory, category, defaultWeapon);
81
occupySlot(inventory, productCategoryToInventoryBin(category)!, true);
82
}
83
}
84
85
const defaultOverwrites: Partial<IEquipmentDatabase> = {
86
Configs: applyDefaultUpgrades(inventory, defaultUpgrades)
87
};
88
89
addEquipment(inventory, category, request.ItemType, request.ModularParts, undefined, defaultOverwrites);
31
90
occupySlot(inventory, inventoryBin, true);
32
91
await inventory.save();
33
92
res.end();
@@ -13,6 +13,7 @@ export const modularWeaponTypes: Record<string, TEquipmentKey> = {
13
13
"/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon": "OperatorAmps",
14
14
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit": "Hoverboards",
15
15
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit": "MoaPets",
16
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit": "MoaPets",
16
17
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": "MoaPets",
17
18
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": "MoaPets",
18
19
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets",
@@ -294,6 +294,34 @@
294
294
</div>
295
295
</div>
296
296
</div>
297
<div class="col-lg-6">
298
<div class="card mb-3" style="height: 400px;">
299
<h5 class="card-header" data-loc="inventory_moaPets"></h5>
300
<div class="card-body overflow-auto">
301
<form class="input-group mb-3" onsubmit="handleModularSelection('MoaPets');return false;">
302
<input class="form-control" id="acquire-type-MoaPets" list="datalist-MoaPets" />
303
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
304
</form>
305
<form class="input-group mb-3" id="modular-MoaPets" style="display: none;">
306
<input class="form-control" id="acquire-type-MoaPets-MOA_ENGINE" list="datalist-ModularParts-MOA_ENGINE" />
307
<input class="form-control" id="acquire-type-MoaPets-MOA_PAYLOAD" list="datalist-ModularParts-MOA_PAYLOAD" />
308
<input class="form-control" id="acquire-type-MoaPets-MOA_HEAD" list="datalist-ModularParts-MOA_HEAD" />
309
<input class="form-control" id="acquire-type-MoaPets-MOA_LEG" list="datalist-ModularParts-MOA_LEG" />
310
</form>
311
<form class="input-group mb-3" id="modular-MoaPets-Zanuka" style="display: none;">
312
<input class="form-control" id="acquire-type-MoaPets-ZANUKA_HEAD" list="datalist-ModularParts-ZANUKA_HEAD" />
313
<input class="form-control" id="acquire-type-MoaPets-ZANUKA_BODY" list="datalist-ModularParts-ZANUKA_BODY" />
314
<input class="form-control" id="acquire-type-MoaPets-ZANUKA_LEG" list="datalist-ModularParts-ZANUKA_LEG" />
315
<input class="form-control" id="acquire-type-MoaPets-ZANUKA_TAIL" list="datalist-ModularParts-ZANUKA_TAIL" />
316
</form>
317
<table class="table table-hover w-100">
318
<tbody id="MoaPets-list"></tbody>
319
</table>
320
</div>
321
</div>
322
</div>
323
</div>
324
<div class="row g-3">
297
325
<div class="col-lg-6">
298
326
<div class="card mb-3" style="height: 400px;">
299
327
<h5 class="card-header" data-loc="inventory_sentinelWeapons"></h5>
@@ -637,6 +665,7 @@
637
665
<datalist id="datalist-Sentinels"></datalist>
638
666
<datalist id="datalist-MechSuits"></datalist>
639
667
<datalist id="datalist-Syndicates"></datalist>
668
<datalist id="datalist-MoaPets"></datalist>
640
669
<datalist id="datalist-miscitems"></datalist>
641
670
<datalist id="datalist-mods">
642
671
<option data-key="/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser" value="Legendary Core"></option>
@@ -659,6 +688,14 @@
659
688
<datalist id="datalist-ModularParts-GUN_SECONDARY_HANDLE"></datalist>
660
689
<datalist id="datalist-ModularParts-GUN_BARREL"></datalist>
661
690
<datalist id="datalist-ModularParts-GUN_CLIP"></datalist>
691
<datalist id="datalist-ModularParts-MOA_ENGINE"></datalist>
692
<datalist id="datalist-ModularParts-MOA_PAYLOAD"></datalist>
693
<datalist id="datalist-ModularParts-MOA_HEAD"></datalist>
694
<datalist id="datalist-ModularParts-MOA_LEG"></datalist>
695
<datalist id="datalist-ModularParts-ZANUKA_BODY"></datalist>
696
<datalist id="datalist-ModularParts-ZANUKA_HEAD"></datalist>
697
<datalist id="datalist-ModularParts-ZANUKA_LEG"></datalist>
698
<datalist id="datalist-ModularParts-ZANUKA_TAIL"></datalist>
662
699
<script src="/webui/libs/jquery-3.6.0.min.js"></script>
663
700
<script src="/webui/libs/whirlpool-js.min.js"></script>
664
701
<script src="/webui/libs/single.js"></script>
@@ -202,6 +202,15 @@ function fetchItemList() {
202
202
uniqueName: "/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary",
203
203
name: loc("code_kitgun")
204
204
});
205
data.MoaPets ??= [];
206
data.MoaPets.push({
207
uniqueName: "/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit",
208
name: loc("code_moa")
209
});
210
data.MoaPets.push({
211
uniqueName: "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit",
212
name: loc("code_zanuka")
213
});
205
214
206
215
const itemMap = {
207
216
// Generics for rivens
@@ -220,7 +229,16 @@ function fetchItemList() {
220
229
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/OperatorTrainingAmpWeapon": {
221
230
name: loc("code_moteAmp")
222
231
},
223
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit": { name: loc("code_kDrive") }
232
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit": { name: loc("code_kDrive") },
233
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": {
234
name: loc("code_zanukaA")
235
},
236
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": {
237
name: loc("code_zanukaB")
238
},
239
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": {
240
name: loc("code_zanukaC")
241
}
224
242
};
225
243
for (const [type, items] of Object.entries(data)) {
226
244
if (type == "archonCrystalUpgrades") {
@@ -259,7 +277,15 @@ function fetchItemList() {
259
277
"LWPT_GUN_PRIMARY_HANDLE",
260
278
"LWPT_GUN_SECONDARY_HANDLE",
261
279
"LWPT_GUN_BARREL",
262
"LWPT_GUN_CLIP"
280
"LWPT_GUN_CLIP",
281
"LWPT_MOA_ENGINE",
282
"LWPT_MOA_PAYLOAD",
283
"LWPT_MOA_HEAD",
284
"LWPT_MOA_LEG",
285
"LWPT_ZANUKA_BODY",
286
"LWPT_ZANUKA_HEAD",
287
"LWPT_ZANUKA_LEG",
288
"LWPT_ZANUKA_TAIL"
263
289
];
264
290
if (supportedModularParts.includes(item.partType)) {
265
291
const option = document.createElement("option");
@@ -269,6 +295,7 @@ function fetchItemList() {
269
295
.getElementById("datalist-" + type + "-" + item.partType.slice(5))
270
296
.appendChild(option);
271
297
} else {
298
console.log(item.partType);
272
299
const option = document.createElement("option");
273
300
option.setAttribute("data-key", item.uniqueName);
274
301
option.value = item.name;
@@ -308,7 +335,11 @@ function updateInventory() {
308
335
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryShotgun",
309
336
"/Lotus/Weapons/Ostron/Melee/LotusModularWeapon",
310
337
"/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon",
311
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit"
338
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit",
339
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit",
340
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit",
341
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit",
342
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit"
312
343
];
313
344
314
345
// Populate inventory route
@@ -330,7 +361,8 @@ function updateInventory() {
330
361
"SentinelWeapons",
331
362
"Hoverboards",
332
363
"OperatorAmps",
333
"MechSuits"
364
"MechSuits",
365
"MoaPets"
334
366
].forEach(category => {
335
367
document.getElementById(category + "-list").innerHTML = "";
336
368
data[category].forEach(item => {
@@ -709,6 +741,13 @@ function doAcquireModularEquipment(category, ItemType) {
709
741
case "Pistols":
710
742
requiredParts = ["GUN_BARREL", "GUN_SECONDARY_HANDLE", "GUN_CLIP"];
711
743
break;
744
case "MoaPets":
745
if (ItemType == "/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit") {
746
requiredParts = ["MOA_ENGINE", "MOA_PAYLOAD", "MOA_HEAD", "MOA_LEG"];
747
} else {
748
requiredParts = ["ZANUKA_BODY", "ZANUKA_HEAD", "ZANUKA_LEG", "ZANUKA_TAIL"];
749
}
750
break;
712
751
}
713
752
requiredParts.forEach(part => {
714
753
const partName = getKey(document.getElementById("acquire-type-" + category + "-" + part));
@@ -1375,7 +1414,9 @@ function handleModularSelection(category) {
1375
1414
"/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon",
1376
1415
"/Lotus/Weapons/Ostron/Melee/LotusModularWeapon",
1377
1416
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimary",
1378
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary"
1417
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary",
1418
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit",
1419
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit"
1379
1420
];
1380
1421
const itemType = getKey(document.getElementById("acquire-type-" + category));
1381
1422
@@ -1390,16 +1431,37 @@ function handleModularSelection(category) {
1390
1431
"/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon",
1391
1432
"/Lotus/Weapons/Ostron/Melee/LotusModularWeapon",
1392
1433
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimary",
1393
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary"
1434
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary",
1435
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit",
1436
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit"
1394
1437
];
1395
const supportedModularInventoryCategory = ["OperatorAmps", "Melee", "LongGuns", "Pistols"];
1438
const supportedModularInventoryCategory = ["OperatorAmps", "Melee", "LongGuns", "Pistols", "MoaPets"];
1396
1439
supportedModularInventoryCategory.forEach(inventoryCategory => {
1397
1440
document.getElementById("acquire-type-" + inventoryCategory).addEventListener("input", function () {
1398
1441
const modularFields = document.getElementById("modular-" + inventoryCategory);
1399
if (modularWeapons.includes(getKey(this))) {
1400
modularFields.style.display = "";
1442
const modularFieldsZanuka =
1443
inventoryCategory === "MoaPets"
1444
? document.getElementById("modular-" + inventoryCategory + "-Zanuka")
1445
: null;
1446
const key = getKey(this);
1447
1448
if (modularWeapons.includes(key)) {
1449
if (key === "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetPowerSuit" && modularFieldsZanuka) {
1450
modularFields.style.display = "none";
1451
modularFieldsZanuka.style.display = "";
1452
} else if (key === "/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit") {
1453
modularFields.style.display = "";
1454
if (modularFieldsZanuka) {
1455
modularFieldsZanuka.style.display = "none";
1456
}
1457
} else {
1458
modularFields.style.display = "";
1459
}
1401
1460
} else {
1402
1461
modularFields.style.display = "none";
1462
if (modularFieldsZanuka) {
1463
modularFieldsZanuka.style.display = "none";
1464
}
1403
1465
}
1404
1466
});
1405
1467
});
@@ -40,6 +40,11 @@ dict = {
40
40
code_addModsConfirm: `Bist du sicher, dass du |COUNT| Mods zu deinem Account hinzufügen möchtest?`,
41
41
code_succImport: `Erfolgreich importiert.`,
42
42
code_gild: `Veredeln`,
43
code_moa: `Moa`,
44
code_zanuka: `Jagdhund`,
45
code_zanukaA: `Jagdhund: Dorma`,
46
code_zanukaB: `Jagdhund: Bhaira`,
47
code_zanukaC: `Jagdhund: Hec`,
43
48
login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`,
44
49
login_emailLabel: `E-Mail-Adresse`,
45
50
login_passwordLabel: `Passwort`,
@@ -65,6 +70,7 @@ dict = {
65
70
inventory_sentinelWeapons: `Wächter-Waffen`,
66
71
inventory_operatorAmps: `Verstärker`,
67
72
inventory_hoverboards: `K-Drives`,
73
inventory_moaPets: `Moa`,
68
74
inventory_bulkAddSuits: `Fehlende Warframes hinzufügen`,
69
75
inventory_bulkAddWeapons: `Fehlende Waffen hinzufügen`,
70
76
inventory_bulkAddSpaceSuits: `Fehlende Archwings hinzufügen`,
@@ -39,6 +39,11 @@ dict = {
39
39
code_addModsConfirm: `Are you sure you want to add |COUNT| mods to your account?`,
40
40
code_succImport: `Successfully imported.`,
41
41
code_gild: `Gild`,
42
code_moa: `Moa`,
43
code_zanuka: `Hound`,
44
code_zanukaA: `Dorma Hound`,
45
code_zanukaB: `Bhaira Hound`,
46
code_zanukaC: `Hec Hound`,
42
47
login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`,
43
48
login_emailLabel: `Email address`,
44
49
login_passwordLabel: `Password`,
@@ -64,6 +69,7 @@ dict = {
64
69
inventory_sentinelWeapons: `Sentinel Weapons`,
65
70
inventory_operatorAmps: `Amps`,
66
71
inventory_hoverboards: `K-Drives`,
72
inventory_moaPets: `Moa`,
67
73
inventory_bulkAddSuits: `Add Missing Warframes`,
68
74
inventory_bulkAddWeapons: `Add Missing Weapons`,
69
75
inventory_bulkAddSpaceSuits: `Add Missing Archwings`,
@@ -40,6 +40,11 @@ dict = {
40
40
code_addModsConfirm: `Ajouter |COUNT| mods à l'inventaire ?`,
41
41
code_succImport: `Importé.`,
42
42
code_gild: `[UNTRANSLATED] Gild`,
43
code_moa: `Moa`,
44
code_zanuka: `Molosse`,
45
code_zanukaA: `Molosse Dorma`,
46
code_zanukaB: `Molosse Bhaira`,
47
code_zanukaC: `Molosse Hec`,
43
48
login_description: `Connexion avec les informations de connexion OpenWF.`,
44
49
login_emailLabel: `Email`,
45
50
login_passwordLabel: `Mot de passe`,
@@ -65,6 +70,7 @@ dict = {
65
70
inventory_sentinelWeapons: `Armes de sentinelles`,
66
71
inventory_operatorAmps: `Amplificateurs`,
67
72
inventory_hoverboards: `K-Drives`,
73
inventory_moaPets: `Moa`,
68
74
inventory_bulkAddSuits: `Ajouter les Warframes manquantes`,
69
75
inventory_bulkAddWeapons: `Ajouter les armes manquantes`,
70
76
inventory_bulkAddSpaceSuits: `Ajouter les Archwings manquants`,
@@ -40,6 +40,11 @@ dict = {
40
40
code_addModsConfirm: `Вы уверены, что хотите добавить |COUNT| модов на ваш аккаунт?`,
41
41
code_succImport: `Успешно импортировано.`,
42
42
code_gild: `Улучшить`,
43
code_moa: `МОА`,
44
code_zanuka: `Гончая`,
45
code_zanukaA: `Гончая: Дорма`,
46
code_zanukaB: `Гончая: Бхайра`,
47
code_zanukaC: `Гончая: Хек`,
43
48
login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
44
49
login_emailLabel: `Адрес электронной почты`,
45
50
login_passwordLabel: `Пароль`,
@@ -65,6 +70,7 @@ dict = {
65
70
inventory_sentinelWeapons: `Оружие стражей`,
66
71
inventory_operatorAmps: `Усилители`,
67
72
inventory_hoverboards: `К-Драйвы`,
73
inventory_moaPets: `МОА`,
68
74
inventory_bulkAddSuits: `Добавить отсутствующие варфреймы`,
69
75
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
70
76
inventory_bulkAddSpaceSuits: `Добавить отсутствующие арчвинги`,
@@ -40,6 +40,11 @@ dict = {
40
40
code_addModsConfirm: `确定要向账户添加 |COUNT| 张MOD吗?`,
41
41
code_succImport: `导入成功。`,
42
42
code_gild: `[UNTRANSLATED] Gild`,
43
code_moa: `恐鸟`,
44
code_zanuka: `猎犬`,
45
code_zanukaA: `铎玛猎犬`,
46
code_zanukaB: `拜拉猎犬`,
47
code_zanukaC: `骸克猎犬`,
43
48
login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)。`,
44
49
login_emailLabel: `电子邮箱`,
45
50
login_passwordLabel: `密码`,
@@ -65,6 +70,7 @@ dict = {
65
70
inventory_sentinelWeapons: `守护武器`,
66
71
inventory_operatorAmps: `增幅器`,
67
72
inventory_hoverboards: `K式悬浮板`,
73
inventory_moaPets: `恐鸟`,
68
74
inventory_bulkAddSuits: `添加缺失战甲`,
69
75
inventory_bulkAddWeapons: `添加缺失武器`,
70
76
inventory_bulkAddSpaceSuits: `添加缺失Archwing`,