返回提交历史
Added
src/controllers/custom/configController.ts
+42
-0
Deleted
src/controllers/custom/getConfigDataController.ts
+0
-14
Deleted
src/controllers/custom/updateConfigDataController.ts
+0
-21
Modified
src/routes/custom.ts
+3
-4
Modified
static/webui/index.html
+89
-2
Modified
static/webui/script.js
+42
-28
Modified
static/webui/translations/de.js
+45
-0
Modified
static/webui/translations/en.js
+45
-0
Modified
static/webui/translations/es.js
+45
-0
Modified
static/webui/translations/fr.js
+45
-0
Modified
static/webui/translations/ru.js
+45
-0
Modified
static/webui/translations/zh.js
+45
-0
XFEstudio/XFESpaceNinjaServer
feat(webui): world state config (#2318)
Re #2312. Will need some follow-up considerations for circuit game modes. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2318 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
d79e7c02
代码差异
12 个文件
+446
-69
@@ -0,0 +1,42 @@
1
import { RequestHandler } from "express";
2
import { config } from "@/src/services/configService";
3
import { getAccountForRequest, isAdministrator } from "@/src/services/loginService";
4
import { saveConfig } from "@/src/services/configWatcherService";
5
6
export const getConfigController: RequestHandler = async (req, res) => {
7
const account = await getAccountForRequest(req);
8
if (isAdministrator(account)) {
9
const responseData: Record<string, boolean | string | number | null> = {};
10
for (const id of req.body as string[]) {
11
const [obj, idx] = configIdToIndexable(id);
12
responseData[id] = obj[idx] ?? null;
13
}
14
res.json(responseData);
15
} else {
16
res.status(401).end();
17
}
18
};
19
20
export const setConfigController: RequestHandler = async (req, res) => {
21
const account = await getAccountForRequest(req);
22
if (isAdministrator(account)) {
23
for (const [id, value] of Object.entries(req.body as Record<string, boolean | string | number>)) {
24
const [obj, idx] = configIdToIndexable(id);
25
obj[idx] = value;
26
}
27
await saveConfig();
28
res.end();
29
} else {
30
res.status(401).end();
31
}
32
};
33
34
const configIdToIndexable = (id: string): [Record<string, boolean | string | number | undefined>, string] => {
35
let obj = config as unknown as Record<string, never>;
36
const arr = id.split(".");
37
while (arr.length > 1) {
38
obj = obj[arr[0]];
39
arr.splice(0, 1);
40
}
41
return [obj, arr[0]];
42
};
@@ -1,14 +0,0 @@
1
import { RequestHandler } from "express";
2
import { config } from "@/src/services/configService";
3
import { getAccountForRequest, isAdministrator } from "@/src/services/loginService";
4
5
const getConfigDataController: RequestHandler = async (req, res) => {
6
const account = await getAccountForRequest(req);
7
if (isAdministrator(account)) {
8
res.json(config);
9
} else {
10
res.status(401).end();
11
}
12
};
13
14
export { getConfigDataController };
@@ -1,21 +0,0 @@
1
import { RequestHandler } from "express";
2
import { saveConfig } from "@/src/services/configWatcherService";
3
import { getAccountForRequest, isAdministrator } from "@/src/services/loginService";
4
import { config, IConfig } from "@/src/services/configService";
5
6
export const updateConfigDataController: RequestHandler = async (req, res) => {
7
const account = await getAccountForRequest(req);
8
if (isAdministrator(account)) {
9
const data = req.body as IUpdateConfigDataRequest;
10
config[data.key] = data.value;
11
await saveConfig();
12
res.end();
13
} else {
14
res.status(401).end();
15
}
16
};
17
18
interface IUpdateConfigDataRequest {
19
key: keyof IConfig;
20
value: never;
21
}
@@ -25,8 +25,7 @@ import { manageQuestsController } from "@/src/controllers/custom/manageQuestsCon
25
25
import { setEvolutionProgressController } from "@/src/controllers/custom/setEvolutionProgressController";
26
26
import { setBoosterController } from "@/src/controllers/custom/setBoosterController";
27
27
28
import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
29
import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
28
import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
30
29
31
30
const customRouter = express.Router();
32
31
@@ -55,7 +54,7 @@ customRouter.post("/manageQuests", manageQuestsController);
55
54
customRouter.post("/setEvolutionProgress", setEvolutionProgressController);
56
55
customRouter.post("/setBooster", setBoosterController);
57
56
58
customRouter.get("/config", getConfigDataController);
59
customRouter.post("/config", updateConfigDataController);
57
customRouter.post("/getConfig", getConfigController);
58
customRouter.post("/setConfig", setConfigController);
60
59
61
60
export { customRouter };
@@ -568,10 +568,10 @@
568
568
<div class="card mb-3">
569
569
<h5 class="card-header" data-loc="cheats_server"></h5>
570
570
<div class="card-body">
571
<div id="server-settings-no-perms" class="d-none">
571
<div class="d-none config-admin-hide">
572
572
<p class="card-text" data-loc="cheats_administratorRequirement"></p>
573
573
</div>
574
<div id="server-settings" class="d-none">
574
<div class="d-none config-admin-show config-form">
575
575
<div class="form-check">
576
576
<input class="form-check-input" type="checkbox" id="skipTutorial" />
577
577
<label class="form-check-label" for="skipTutorial" data-loc="cheats_skipTutorial"></label>
@@ -807,6 +807,93 @@
807
807
</form>
808
808
</div>
809
809
</div>
810
<div class="card mb-3 d-none config-admin-show config-form">
811
<h5 class="card-header" data-loc="worldState"></h5>
812
<div class="card-body">
813
<div class="form-check">
814
<input class="form-check-input" type="checkbox" id="worldState.creditBoost" />
815
<label class="form-check-label" for="worldState.creditBoost" data-loc="worldState_creditBoost"></label>
816
</div>
817
<div class="form-check">
818
<input class="form-check-input" type="checkbox" id="worldState.affinityBoost" />
819
<label class="form-check-label" for="worldState.affinityBoost" data-loc="worldState_affinityBoost"></label>
820
</div>
821
<div class="form-check">
822
<input class="form-check-input" type="checkbox" id="worldState.resourceBoost" />
823
<label class="form-check-label" for="worldState.resourceBoost" data-loc="worldState_resourceBoost"></label>
824
</div>
825
<div class="form-check">
826
<input class="form-check-input" type="checkbox" id="worldState.starDays" />
827
<label class="form-check-label" for="worldState.starDays" data-loc="worldState_starDays"></label>
828
</div>
829
<div class="form-group mt-2">
830
<label class="form-label" for="changeSyndicate" data-loc="worldState_galleonOfGhouls"></label>
831
<select class="form-control" id="worldState.galleonOfGhouls">
832
<option value="0" data-loc="disabled"></option>
833
<option value="1" data-loc="worldState_we1"></option>
834
<option value="2" data-loc="worldState_we2"></option>
835
<option value="3" data-loc="worldState_we3"></option>
836
</select>
837
</div>
838
<div class="form-group mt-2">
839
<label class="form-label" for="changeSyndicate" data-loc="worldState_eidolonOverride"></label>
840
<select class="form-control" id="worldState.eidolonOverride">
841
<option value="" data-loc="disabled"></option>
842
<option value="day" data-loc="worldState_day"></option>
843
<option value="night" data-loc="worldState_night"></option>
844
</select>
845
</div>
846
<div class="form-group mt-2">
847
<label class="form-label" for="changeSyndicate" data-loc="worldState_vallisOverride"></label>
848
<select class="form-control" id="worldState.vallisOverride">
849
<option value="" data-loc="disabled"></option>
850
<option value="warm" data-loc="worldState_warm"></option>
851
<option value="cold" data-loc="worldState_cold"></option>
852
</select>
853
</div>
854
<div class="form-group mt-2">
855
<label class="form-label" for="changeSyndicate" data-loc="worldState_duviriOverride"></label>
856
<select class="form-control" id="worldState.duviriOverride">
857
<option value="" data-loc="disabled"></option>
858
<option value="joy" data-loc="worldState_joy"></option>
859
<option value="anger" data-loc="worldState_anger"></option>
860
<option value="envy" data-loc="worldState_envy"></option>
861
<option value="sorrow" data-loc="worldState_sorrow"></option>
862
<option value="fear" data-loc="worldState_fear"></option>
863
</select>
864
</div>
865
<div class="form-group mt-2">
866
<label class="form-label" for="changeSyndicate" data-loc="worldState_nightwaveOverride"></label>
867
<select class="form-control" id="worldState.nightwaveOverride">
868
<option value="" data-loc="disabled"></option>
869
<option value="RadioLegionIntermission13Syndicate" data-loc="worldState_RadioLegionIntermission13Syndicate"></option>
870
<option value="RadioLegionIntermission12Syndicate" data-loc="worldState_RadioLegionIntermission12Syndicate"></option>
871
<option value="RadioLegionIntermission11Syndicate" data-loc="worldState_RadioLegionIntermission11Syndicate"></option>
872
<option value="RadioLegionIntermission10Syndicate" data-loc="worldState_RadioLegionIntermission10Syndicate"></option>
873
<option value="RadioLegionIntermission9Syndicate" data-loc="worldState_RadioLegionIntermission9Syndicate"></option>
874
<option value="RadioLegionIntermission8Syndicate" data-loc="worldState_RadioLegionIntermission8Syndicate"></option>
875
<option value="RadioLegionIntermission7Syndicate" data-loc="worldState_RadioLegionIntermission7Syndicate"></option>
876
<option value="RadioLegionIntermission6Syndicate" data-loc="worldState_RadioLegionIntermission6Syndicate"></option>
877
<option value="RadioLegionIntermission5Syndicate" data-loc="worldState_RadioLegionIntermission5Syndicate"></option>
878
<option value="RadioLegionIntermission4Syndicate" data-loc="worldState_RadioLegionIntermission4Syndicate"></option>
879
<option value="RadioLegionIntermission3Syndicate" data-loc="worldState_RadioLegionIntermission3Syndicate"></option>
880
<option value="RadioLegion3Syndicate" data-loc="worldState_RadioLegion3Syndicate"></option>
881
<option value="RadioLegionIntermission2Syndicate" data-loc="worldState_RadioLegionIntermission2Syndicate"></option>
882
<option value="RadioLegion2Syndicate" data-loc="worldState_RadioLegion2Syndicate"></option>
883
<option value="RadioLegionIntermissionSyndicate" data-loc="worldState_RadioLegionIntermissionSyndicate"></option>
884
<option value="RadioLegionSyndicate" data-loc="worldState_RadioLegionSyndicate"></option>
885
</select>
886
</div>
887
<div class="form-group mt-2">
888
<label class="form-label" for="changeSyndicate" data-loc="worldState_fissures"></label>
889
<select class="form-control" id="worldState.allTheFissures">
890
<option value="" data-loc="normal"></option>
891
<option value="normal" data-loc="worldState_allAtOnceNormal"></option>
892
<option value="hard" data-loc="worldState_allAtOnceSteelPath"></option>
893
</select>
894
</div>
895
</div>
896
</div>
810
897
</div>
811
898
</div>
812
899
</div>
@@ -1847,16 +1847,28 @@ function doAcquireMod() {
1847
1847
}
1848
1848
}
1849
1849
1850
const uiConfigs = [...$("#server-settings input[id]")].map(x => x.id);
1850
const uiConfigs = [...$(".config-form input[id], .config-form select[id]")].map(x => x.id);
1851
1851
1852
1852
for (const id of uiConfigs) {
1853
1853
const elm = document.getElementById(id);
1854
if (elm.type == "checkbox") {
1854
if (elm.tagName == "SELECT") {
1855
1855
elm.onchange = function () {
1856
let value = this.value;
1857
if (!isNaN(parseInt(value))) {
1858
value = parseInt(value);
1859
}
1856
1860
$.post({
1857
url: "/custom/config?" + window.authz,
1861
url: "/custom/setConfig?" + window.authz,
1858
1862
contentType: "application/json",
1859
data: JSON.stringify({ key: id, value: this.checked })
1863
data: JSON.stringify({ [id]: value })
1864
});
1865
};
1866
} else if (elm.type == "checkbox") {
1867
elm.onchange = function () {
1868
$.post({
1869
url: "/custom/setConfig?" + window.authz,
1870
contentType: "application/json",
1871
data: JSON.stringify({ [id]: this.checked })
1860
1872
}).then(() => {
1861
1873
if (["infiniteCredits", "infinitePlatinum", "infiniteEndo", "infiniteRegalAya"].indexOf(id) != -1) {
1862
1874
updateInventory();
@@ -1869,9 +1881,9 @@ for (const id of uiConfigs) {
1869
1881
function doSaveConfig(id) {
1870
1882
const elm = document.getElementById(id);
1871
1883
$.post({
1872
url: "/custom/config?" + window.authz,
1884
url: "/custom/setConfig?" + window.authz,
1873
1885
contentType: "application/json",
1874
data: JSON.stringify({ key: id, value: parseInt(elm.value) })
1886
data: JSON.stringify({ [id]: parseInt(elm.value) })
1875
1887
});
1876
1888
}
1877
1889
@@ -1882,26 +1894,29 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
1882
1894
interval = setInterval(() => {
1883
1895
if (window.authz) {
1884
1896
clearInterval(interval);
1885
fetch("/custom/config?" + window.authz).then(async res => {
1886
if (res.status == 200) {
1897
$.post({
1898
url: "/custom/getConfig?" + window.authz,
1899
contentType: "application/json",
1900
data: JSON.stringify(uiConfigs)
1901
})
1902
.done(json => {
1887
1903
//window.is_admin = true;
1888
$("#server-settings-no-perms").addClass("d-none");
1889
$("#server-settings").removeClass("d-none");
1890
res.json().then(json =>
1891
Object.entries(json).forEach(entry => {
1892
const [key, value] = entry;
1893
var x = document.getElementById(`${key}`);
1894
if (x != null) {
1895
if (x.type == "checkbox") {
1896
x.checked = value;
1897
} else if (x.type == "number") {
1898
x.setAttribute("value", `${value}`);
1899
}
1904
$(".config-admin-hide").addClass("d-none");
1905
$(".config-admin-show").removeClass("d-none");
1906
Object.entries(json).forEach(entry => {
1907
const [key, value] = entry;
1908
var x = document.getElementById(`${key}`);
1909
if (x != null) {
1910
if (x.type == "checkbox") {
1911
x.checked = value;
1912
} else if (x.type == "number") {
1913
x.setAttribute("value", `${value}`);
1900
1914
}
1901
})
1902
);
1903
} else {
1904
if ((await res.text()) == "Log-in expired") {
1915
}
1916
});
1917
})
1918
.fail(res => {
1919
if (res.responseText == "Log-in expired") {
1905
1920
revalidateAuthz().then(() => {
1906
1921
if (single.getCurrentPath() == "/webui/cheats") {
1907
1922
single.loadRoute("/webui/cheats");
@@ -1909,11 +1924,10 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
1909
1924
});
1910
1925
} else {
1911
1926
//window.is_admin = false;
1912
$("#server-settings-no-perms").removeClass("d-none");
1913
$("#server-settings").addClass("d-none");
1927
$(".config-admin-hide").removeClass("d-none");
1928
$(".config-admin-show").addClass("d-none");
1914
1929
}
1915
}
1916
});
1930
});
1917
1931
}
1918
1932
}, 10);
1919
1933
});
@@ -186,6 +186,51 @@ dict = {
186
186
cheats_changeSupportedSyndicate: `Unterstütztes Syndikat`,
187
187
cheats_changeButton: `Ändern`,
188
188
cheats_none: `Keines`,
189
190
worldState: `[UNTRANSLATED] World State`,
191
worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
192
worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
193
worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
194
worldState_starDays: `[UNTRANSLATED] Star Days`,
195
worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
196
disabled: `[UNTRANSLATED] Disabled`,
197
worldState_we1: `[UNTRANSLATED] Weekend 1`,
198
worldState_we2: `[UNTRANSLATED] Weekend 2`,
199
worldState_we3: `[UNTRANSLATED] Weekend 3`,
200
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
201
worldState_day: `[UNTRANSLATED] Day`,
202
worldState_night: `[UNTRANSLATED] Night`,
203
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
204
worldState_warm: `[UNTRANSLATED] Warm`,
205
worldState_cold: `[UNTRANSLATED] Cold`,
206
worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
207
worldState_joy: `[UNTRANSLATED] Joy`,
208
worldState_anger: `[UNTRANSLATED] Anger`,
209
worldState_envy: `[UNTRANSLATED] Envy`,
210
worldState_sorrow: `[UNTRANSLATED] Sorrow`,
211
worldState_fear: `[UNTRANSLATED] Fear`,
212
worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
213
worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
214
worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
215
worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
216
worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
217
worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
218
worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
219
worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
220
worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
221
worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
222
worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
223
worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
224
worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
225
worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
226
worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
227
worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
228
worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
229
worldState_fissures: `[UNTRANSLATED] Fissures`,
230
normal: `[UNTRANSLATED] Normal`,
231
worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
232
worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
233
189
234
import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
190
235
import_submit: `Absenden`,
191
236
import_samples: `[UNTRANSLATED] Samples:`,
@@ -185,6 +185,51 @@ dict = {
185
185
cheats_changeSupportedSyndicate: `Supported syndicate`,
186
186
cheats_changeButton: `Change`,
187
187
cheats_none: `None`,
188
189
worldState: `World State`,
190
worldState_creditBoost: `Credit Boost`,
191
worldState_affinityBoost: `Affinity Boost`,
192
worldState_resourceBoost: `Resource Boost`,
193
worldState_starDays: `Star Days`,
194
worldState_galleonOfGhouls: `Galleon of Ghouls`,
195
disabled: `Disabled`,
196
worldState_we1: `Weekend 1`,
197
worldState_we2: `Weekend 2`,
198
worldState_we3: `Weekend 3`,
199
worldState_eidolonOverride: `Eidolon Override`,
200
worldState_day: `Day`,
201
worldState_night: `Night`,
202
worldState_vallisOverride: `Orb Vallis Override`,
203
worldState_warm: `Warm`,
204
worldState_cold: `Cold`,
205
worldState_duviriOverride: `Duviri Override`,
206
worldState_joy: `Joy`,
207
worldState_anger: `Anger`,
208
worldState_envy: `Envy`,
209
worldState_sorrow: `Sorrow`,
210
worldState_fear: `Fear`,
211
worldState_nightwaveOverride: `Nightwave Override`,
212
worldState_RadioLegionIntermission13Syndicate: `Nora's Mix Vol. 9`,
213
worldState_RadioLegionIntermission12Syndicate: `Nora's Mix Vol. 8`,
214
worldState_RadioLegionIntermission11Syndicate: `Nora's Mix Vol. 7`,
215
worldState_RadioLegionIntermission10Syndicate: `Nora's Mix Vol. 6`,
216
worldState_RadioLegionIntermission9Syndicate: `Nora's Mix Vol. 5`,
217
worldState_RadioLegionIntermission8Syndicate: `Nora's Mix Vol. 4`,
218
worldState_RadioLegionIntermission7Syndicate: `Nora's Mix Vol. 3`,
219
worldState_RadioLegionIntermission6Syndicate: `Nora's Mix Vol. 2`,
220
worldState_RadioLegionIntermission5Syndicate: `Nora's Mix Vol. 1`,
221
worldState_RadioLegionIntermission4Syndicate: `Nora's Choice`,
222
worldState_RadioLegionIntermission3Syndicate: `Intermission III`,
223
worldState_RadioLegion3Syndicate: `Glassmaker`,
224
worldState_RadioLegionIntermission2Syndicate: `Intermission II`,
225
worldState_RadioLegion2Syndicate: `The Emissary`,
226
worldState_RadioLegionIntermissionSyndicate: `Intermission I`,
227
worldState_RadioLegionSyndicate: `The Wolf of Saturn Six`,
228
worldState_fissures: `Fissures`,
229
normal: `Normal`,
230
worldState_allAtOnceNormal: `All At Once, Normal`,
231
worldState_allAtOnceSteelPath: `All At Once, Steel Path`,
232
188
233
import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
189
234
import_submit: `Submit`,
190
235
import_samples: `Samples:`,
@@ -186,6 +186,51 @@ dict = {
186
186
cheats_changeSupportedSyndicate: `Sindicatos disponibles`,
187
187
cheats_changeButton: `Cambiar`,
188
188
cheats_none: `Ninguno`,
189
190
worldState: `[UNTRANSLATED] World State`,
191
worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
192
worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
193
worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
194
worldState_starDays: `[UNTRANSLATED] Star Days`,
195
worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
196
disabled: `[UNTRANSLATED] Disabled`,
197
worldState_we1: `[UNTRANSLATED] Weekend 1`,
198
worldState_we2: `[UNTRANSLATED] Weekend 2`,
199
worldState_we3: `[UNTRANSLATED] Weekend 3`,
200
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
201
worldState_day: `[UNTRANSLATED] Day`,
202
worldState_night: `[UNTRANSLATED] Night`,
203
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
204
worldState_warm: `[UNTRANSLATED] Warm`,
205
worldState_cold: `[UNTRANSLATED] Cold`,
206
worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
207
worldState_joy: `[UNTRANSLATED] Joy`,
208
worldState_anger: `[UNTRANSLATED] Anger`,
209
worldState_envy: `[UNTRANSLATED] Envy`,
210
worldState_sorrow: `[UNTRANSLATED] Sorrow`,
211
worldState_fear: `[UNTRANSLATED] Fear`,
212
worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
213
worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
214
worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
215
worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
216
worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
217
worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
218
worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
219
worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
220
worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
221
worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
222
worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
223
worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
224
worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
225
worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
226
worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
227
worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
228
worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
229
worldState_fissures: `[UNTRANSLATED] Fissures`,
230
normal: `[UNTRANSLATED] Normal`,
231
worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
232
worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
233
189
234
import_importNote: `Puedes proporcionar una respuesta de inventario completa o parcial (representación del cliente) aquí. Todos los campos compatibles con el importador <b>serán sobrescritos</b> en tu cuenta.`,
190
235
import_submit: `Enviar`,
191
236
import_samples: `Muestras:`,
@@ -186,6 +186,51 @@ dict = {
186
186
cheats_changeSupportedSyndicate: `Allégeance`,
187
187
cheats_changeButton: `Changer`,
188
188
cheats_none: `Aucun`,
189
190
worldState: `[UNTRANSLATED] World State`,
191
worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
192
worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
193
worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
194
worldState_starDays: `[UNTRANSLATED] Star Days`,
195
worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
196
disabled: `[UNTRANSLATED] Disabled`,
197
worldState_we1: `[UNTRANSLATED] Weekend 1`,
198
worldState_we2: `[UNTRANSLATED] Weekend 2`,
199
worldState_we3: `[UNTRANSLATED] Weekend 3`,
200
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
201
worldState_day: `[UNTRANSLATED] Day`,
202
worldState_night: `[UNTRANSLATED] Night`,
203
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
204
worldState_warm: `[UNTRANSLATED] Warm`,
205
worldState_cold: `[UNTRANSLATED] Cold`,
206
worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
207
worldState_joy: `[UNTRANSLATED] Joy`,
208
worldState_anger: `[UNTRANSLATED] Anger`,
209
worldState_envy: `[UNTRANSLATED] Envy`,
210
worldState_sorrow: `[UNTRANSLATED] Sorrow`,
211
worldState_fear: `[UNTRANSLATED] Fear`,
212
worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
213
worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
214
worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
215
worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
216
worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
217
worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
218
worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
219
worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
220
worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
221
worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
222
worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
223
worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
224
worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
225
worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
226
worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
227
worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
228
worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
229
worldState_fissures: `[UNTRANSLATED] Fissures`,
230
normal: `[UNTRANSLATED] Normal`,
231
worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
232
worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
233
189
234
import_importNote: `Import manuel. Toutes les modifcations supportées par l'inventaire <b>écraseront celles présentes dans la base de données</b>.`,
190
235
import_submit: `Soumettre`,
191
236
import_samples: `Echantillons :`,
@@ -186,6 +186,51 @@ dict = {
186
186
cheats_changeSupportedSyndicate: `Поддерживаемый синдикат`,
187
187
cheats_changeButton: `Изменить`,
188
188
cheats_none: `Отсутствует`,
189
190
worldState: `[UNTRANSLATED] World State`,
191
worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
192
worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
193
worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
194
worldState_starDays: `[UNTRANSLATED] Star Days`,
195
worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
196
disabled: `[UNTRANSLATED] Disabled`,
197
worldState_we1: `[UNTRANSLATED] Weekend 1`,
198
worldState_we2: `[UNTRANSLATED] Weekend 2`,
199
worldState_we3: `[UNTRANSLATED] Weekend 3`,
200
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
201
worldState_day: `[UNTRANSLATED] Day`,
202
worldState_night: `[UNTRANSLATED] Night`,
203
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
204
worldState_warm: `[UNTRANSLATED] Warm`,
205
worldState_cold: `[UNTRANSLATED] Cold`,
206
worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
207
worldState_joy: `[UNTRANSLATED] Joy`,
208
worldState_anger: `[UNTRANSLATED] Anger`,
209
worldState_envy: `[UNTRANSLATED] Envy`,
210
worldState_sorrow: `[UNTRANSLATED] Sorrow`,
211
worldState_fear: `[UNTRANSLATED] Fear`,
212
worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
213
worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
214
worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
215
worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
216
worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
217
worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
218
worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
219
worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
220
worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
221
worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
222
worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
223
worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
224
worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
225
worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
226
worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
227
worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
228
worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
229
worldState_fissures: `[UNTRANSLATED] Fissures`,
230
normal: `[UNTRANSLATED] Normal`,
231
worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
232
worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
233
189
234
import_importNote: `Вы можете загрузить полный или частичный ответ инвентаря (клиентское представление) здесь. Все поддерживаемые поля <b>будут перезаписаны</b> в вашем аккаунте.`,
190
235
import_submit: `Отправить`,
191
236
import_samples: `[UNTRANSLATED] Samples:`,
@@ -186,6 +186,51 @@ dict = {
186
186
cheats_changeSupportedSyndicate: `支持的集团`,
187
187
cheats_changeButton: `更改`,
188
188
cheats_none: `无`,
189
190
worldState: `[UNTRANSLATED] World State`,
191
worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
192
worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
193
worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
194
worldState_starDays: `[UNTRANSLATED] Star Days`,
195
worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
196
disabled: `[UNTRANSLATED] Disabled`,
197
worldState_we1: `[UNTRANSLATED] Weekend 1`,
198
worldState_we2: `[UNTRANSLATED] Weekend 2`,
199
worldState_we3: `[UNTRANSLATED] Weekend 3`,
200
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
201
worldState_day: `[UNTRANSLATED] Day`,
202
worldState_night: `[UNTRANSLATED] Night`,
203
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
204
worldState_warm: `[UNTRANSLATED] Warm`,
205
worldState_cold: `[UNTRANSLATED] Cold`,
206
worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
207
worldState_joy: `[UNTRANSLATED] Joy`,
208
worldState_anger: `[UNTRANSLATED] Anger`,
209
worldState_envy: `[UNTRANSLATED] Envy`,
210
worldState_sorrow: `[UNTRANSLATED] Sorrow`,
211
worldState_fear: `[UNTRANSLATED] Fear`,
212
worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
213
worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
214
worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
215
worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
216
worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
217
worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
218
worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
219
worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
220
worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
221
worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
222
worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
223
worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
224
worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
225
worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
226
worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
227
worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
228
worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
229
worldState_fissures: `[UNTRANSLATED] Fissures`,
230
normal: `[UNTRANSLATED] Normal`,
231
worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
232
worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
233
189
234
import_importNote: `您可以在此处提供完整或部分库存响应(客户端表示)。支持的所有字段<b>将被覆盖</b>到您的账户中。`,
190
235
import_submit: `提交`,
191
236
import_samples: `示例:`,