返回提交历史
Modified
config.json.example
+0
-1
Modified
src/controllers/api/inventoryController.ts
+2
-26
Added
src/controllers/custom/completeAllMissionsController.ts
+34
-0
Modified
src/helpers/stringHelpers.ts
+6
-0
Modified
src/routes/custom.ts
+2
-0
Modified
src/services/configService.ts
+0
-1
Modified
src/services/missionInventoryUpdateService.ts
+1
-1
Modified
static/webui/index.html
+2
-7
Modified
static/webui/script.js
+44
-40
XFEstudio/XFESpaceNinjaServer
chore: replace unlockAllMissions config with an account cheats button (#2241)
This way, mission completion rewards are given. This is especially import for junction rewards like quest keys (Closes #2229). Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2241 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
bf12f90c
代码差异
9 个文件
+91
-76
@@ -13,7 +13,6 @@
13
13
"skipTutorial": false,
14
14
"skipAllDialogue": false,
15
15
"unlockAllScans": false,
16
"unlockAllMissions": false,
17
16
"infiniteCredits": false,
18
17
"infinitePlatinum": false,
19
18
"infiniteEndo": false,
@@ -6,13 +6,7 @@ import allDialogue from "@/static/fixed_responses/allDialogue.json";
6
6
import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
7
7
import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
8
8
import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
9
import {
10
ExportCustoms,
11
ExportFlavour,
12
ExportRegions,
13
ExportResources,
14
ExportVirtuals
15
} from "warframe-public-export-plus";
9
import { ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus";
16
10
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
17
11
import {
18
12
addMiscItems,
@@ -22,7 +16,7 @@ import {
22
16
generateRewardSeed
23
17
} from "@/src/services/inventoryService";
24
18
import { logger } from "@/src/utils/logger";
25
import { catBreadHash } from "@/src/helpers/stringHelpers";
19
import { addString, catBreadHash } from "@/src/helpers/stringHelpers";
26
20
import { Types } from "mongoose";
27
21
import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
28
22
import { getPersonalRooms } from "@/src/services/personalRoomsService";
@@ -167,18 +161,6 @@ export const getInventoryResponse = async (
167
161
}
168
162
}
169
163
170
if (config.unlockAllMissions) {
171
inventoryResponse.Missions = [];
172
for (const tag of Object.keys(ExportRegions)) {
173
inventoryResponse.Missions.push({
174
Completes: 1,
175
Tier: 1,
176
Tag: tag
177
});
178
}
179
addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked");
180
}
181
182
164
if (config.unlockAllShipDecorations) {
183
165
inventoryResponse.ShipDecorations = [];
184
166
for (const [uniqueName, item] of Object.entries(ExportResources)) {
@@ -362,12 +344,6 @@ const allEudicoHeistJobs = [
362
344
"/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyFour"
363
345
];
364
346
365
const addString = (arr: string[], str: string): void => {
366
if (arr.indexOf(str) == -1) {
367
arr.push(str);
368
}
369
};
370
371
347
const getExpRequiredForMr = (rank: number): number => {
372
348
if (rank <= 30) {
373
349
return 2500 * rank * rank;
@@ -0,0 +1,34 @@
1
import { addString } from "@/src/helpers/stringHelpers";
2
import { getInventory } from "@/src/services/inventoryService";
3
import { getAccountIdForRequest } from "@/src/services/loginService";
4
import { addFixedLevelRewards } from "@/src/services/missionInventoryUpdateService";
5
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
6
import { IMissionReward } from "@/src/types/missionTypes";
7
import { RequestHandler } from "express";
8
import { ExportRegions } from "warframe-public-export-plus";
9
10
export const completeAllMissionsController: RequestHandler = async (req, res) => {
11
const accountId = await getAccountIdForRequest(req);
12
const inventory = await getInventory(accountId);
13
const MissionRewards: IMissionReward[] = [];
14
for (const [tag, node] of Object.entries(ExportRegions)) {
15
if (!inventory.Missions.find(x => x.Tag == tag)) {
16
inventory.Missions.push({
17
Completes: 1,
18
Tier: 1,
19
Tag: tag
20
});
21
22
if (node.missionReward) {
23
console.log(node.missionReward);
24
addFixedLevelRewards(node.missionReward, inventory, MissionRewards);
25
}
26
}
27
}
28
for (const reward of MissionRewards) {
29
await handleStoreItemAcquisition(reward.StoreItem, inventory, reward.ItemCount, undefined, true);
30
}
31
addString(inventory.NodeIntrosCompleted, "TeshinHardModeUnlocked");
32
await inventory.save();
33
res.end();
34
};
@@ -54,3 +54,9 @@ export const regexEscape = (str: string): string => {
54
54
str = str.split("}").join("\\}");
55
55
return str;
56
56
};
57
58
export const addString = (arr: string[], str: string): void => {
59
if (arr.indexOf(str) == -1) {
60
arr.push(str);
61
}
62
};
@@ -12,6 +12,7 @@ import { ircDroppedController } from "@/src/controllers/custom/ircDroppedControl
12
12
import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
13
13
import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
14
14
import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController";
15
import { completeAllMissionsController } from "@/src/controllers/custom/completeAllMissionsController";
15
16
16
17
import { createAccountController } from "@/src/controllers/custom/createAccountController";
17
18
import { createMessageController } from "@/src/controllers/custom/createMessageController";
@@ -40,6 +41,7 @@ customRouter.get("/ircDropped", ircDroppedController);
40
41
customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
41
42
customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
42
43
customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController);
44
customRouter.get("/completeAllMissions", completeAllMissionsController);
43
45
44
46
customRouter.post("/createAccount", createAccountController);
45
47
customRouter.post("/createMessage", createMessageController);
@@ -19,7 +19,6 @@ export interface IConfig {
19
19
skipTutorial?: boolean;
20
20
skipAllDialogue?: boolean;
21
21
unlockAllScans?: boolean;
22
unlockAllMissions?: boolean;
23
22
infiniteCredits?: boolean;
24
23
infinitePlatinum?: boolean;
25
24
infiniteEndo?: boolean;
@@ -1367,7 +1367,7 @@ export const addFixedLevelRewards = (
1367
1367
if (rewards.countedItems) {
1368
1368
for (const item of rewards.countedItems) {
1369
1369
MissionRewards.push({
1370
StoreItem: `/Lotus/StoreItems${item.ItemType.substring("Lotus/".length)}`,
1370
StoreItem: toStoreItem(item.ItemType),
1371
1371
ItemCount: item.ItemCount
1372
1372
});
1373
1373
}
@@ -452,9 +452,6 @@
452
452
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
453
453
<button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
454
454
</div>
455
<div class="mb-2 d-flex flex-wrap gap-2">
456
<button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
457
</div>
458
455
</div>
459
456
</div>
460
457
</div>
@@ -587,10 +584,6 @@
587
584
<input class="form-check-input" type="checkbox" id="unlockAllScans" />
588
585
<label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
589
586
</div>
590
<div class="form-check">
591
<input class="form-check-input" type="checkbox" id="unlockAllMissions" />
592
<label class="form-check-label" for="unlockAllMissions" data-loc="cheats_unlockAllMissions"></label>
593
</div>
594
587
<div class="form-check">
595
588
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
596
589
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
@@ -782,9 +775,11 @@
782
775
<h5 class="card-header" data-loc="cheats_account"></h5>
783
776
<div class="card-body">
784
777
<div class="mb-2 d-flex flex-wrap gap-2">
778
<button class="btn btn-primary" onclick="debounce(doUnlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
785
779
<button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
786
780
<button class="btn btn-primary" onclick="doHelminthUnlockAll();" data-loc="cheats_helminthUnlockAll"></button>
787
781
<button class="btn btn-primary" onclick="doIntrinsicsUnlockAll();" data-loc="cheats_intrinsicsUnlockAll"></button>
782
<button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
788
783
</div>
789
784
<form class="mt-2" onsubmit="doChangeSupportedSyndicate(); return false;">
790
785
<label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
@@ -114,11 +114,9 @@ function doLogin() {
114
114
window.registerSubmit = false;
115
115
}
116
116
117
function revalidateAuthz(succ_cb) {
118
getWebSocket().then(() => {
119
// We have a websocket connection, so authz should be good.
120
succ_cb();
121
});
117
async function revalidateAuthz() {
118
await getWebSocket();
119
// We have a websocket connection, so authz should be good.
122
120
}
123
121
124
122
function logout() {
@@ -138,7 +136,7 @@ function doLogout() {
138
136
function renameAccount() {
139
137
const newname = window.prompt(loc("code_changeNameConfirm"));
140
138
if (newname) {
141
revalidateAuthz(() => {
139
revalidateAuthz().then(() => {
142
140
fetch("/custom/renameAccount?" + window.authz + "&newname=" + newname).then(() => {
143
141
$(".displayname").text(newname);
144
142
updateLocElements();
@@ -149,7 +147,7 @@ function renameAccount() {
149
147
150
148
function deleteAccount() {
151
149
if (window.confirm(loc("code_deleteAccountConfirm"))) {
152
revalidateAuthz(() => {
150
revalidateAuthz().then(() => {
153
151
fetch("/custom/deleteAccount?" + window.authz).then(() => {
154
152
logout();
155
153
single.loadRoute("/webui/"); // Show login screen
@@ -649,7 +647,7 @@ function updateInventory() {
649
647
a.href = "#";
650
648
a.onclick = function (event) {
651
649
event.preventDefault();
652
revalidateAuthz(() => {
650
revalidateAuthz().then(() => {
653
651
const promises = [];
654
652
if (item.XP < maxXP) {
655
653
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
@@ -1239,7 +1237,7 @@ function doAcquireEquipment(category) {
1239
1237
.focus();
1240
1238
return;
1241
1239
}
1242
revalidateAuthz(() => {
1240
revalidateAuthz().then(() => {
1243
1241
const req = $.post({
1244
1242
url: "/custom/addItems?" + window.authz,
1245
1243
contentType: "application/json",
@@ -1366,7 +1364,7 @@ function doAcquireModularEquipment(category, WeaponType) {
1366
1364
}
1367
1365
});
1368
1366
if (category == "KubrowPets") Parts.unshift(WeaponType);
1369
revalidateAuthz(() => {
1367
revalidateAuthz().then(() => {
1370
1368
const req = $.post({
1371
1369
url: "/api/modularWeaponCrafting.php?" + window.authz,
1372
1370
contentType: "application/octet-stream",
@@ -1419,7 +1417,7 @@ $("input[list]").on("input", function () {
1419
1417
});
1420
1418
1421
1419
function dispatchAddItemsRequestsBatch(requests) {
1422
revalidateAuthz(() => {
1420
revalidateAuthz().then(() => {
1423
1421
const req = $.post({
1424
1422
url: "/custom/addItems?" + window.authz,
1425
1423
contentType: "application/json",
@@ -1463,7 +1461,7 @@ function addMissingEvolutionProgress() {
1463
1461
}
1464
1462
1465
1463
function maxRankAllEvolutions() {
1466
revalidateAuthz(() => {
1464
revalidateAuthz().then(() => {
1467
1465
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
1468
1466
req.done(data => {
1469
1467
const requests = [];
@@ -1487,7 +1485,7 @@ function maxRankAllEvolutions() {
1487
1485
}
1488
1486
1489
1487
function maxRankAllEquipment(categories) {
1490
revalidateAuthz(() => {
1488
revalidateAuthz().then(() => {
1491
1489
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
1492
1490
req.done(data => {
1493
1491
window.itemListPromise.then(itemMap => {
@@ -1561,7 +1559,7 @@ function addGearExp(category, oid, xp) {
1561
1559
}
1562
1560
1563
1561
function sendBatchGearExp(data) {
1564
revalidateAuthz(() => {
1562
revalidateAuthz().then(() => {
1565
1563
$.post({
1566
1564
url: "/custom/addXp?" + window.authz,
1567
1565
contentType: "application/json",
@@ -1574,7 +1572,7 @@ function sendBatchGearExp(data) {
1574
1572
}
1575
1573
1576
1574
function renameGear(category, oid, name) {
1577
revalidateAuthz(() => {
1575
revalidateAuthz().then(() => {
1578
1576
if (category == "KubrowPets") {
1579
1577
$.post({
1580
1578
url: "/api/renamePet.php?" + window.authz + "&webui=1",
@@ -1602,7 +1600,7 @@ function renameGear(category, oid, name) {
1602
1600
1603
1601
function disposeOfGear(category, oid) {
1604
1602
if (category == "KubrowPets") {
1605
revalidateAuthz(() => {
1603
revalidateAuthz().then(() => {
1606
1604
$.post({
1607
1605
url: "/api/releasePet.php?" + window.authz,
1608
1606
contentType: "application/octet-stream",
@@ -1624,7 +1622,7 @@ function disposeOfGear(category, oid) {
1624
1622
Count: 0
1625
1623
}
1626
1624
];
1627
revalidateAuthz(() => {
1625
revalidateAuthz().then(() => {
1628
1626
$.post({
1629
1627
url: "/api/sell.php?" + window.authz,
1630
1628
contentType: "text/plain",
@@ -1646,7 +1644,7 @@ function disposeOfItems(category, type, count) {
1646
1644
Count: count
1647
1645
}
1648
1646
];
1649
revalidateAuthz(() => {
1647
revalidateAuthz().then(() => {
1650
1648
$.post({
1651
1649
url: "/api/sell.php?" + window.authz,
1652
1650
contentType: "text/plain",
@@ -1656,7 +1654,7 @@ function disposeOfItems(category, type, count) {
1656
1654
}
1657
1655
1658
1656
function gildEquipment(category, oid) {
1659
revalidateAuthz(() => {
1657
revalidateAuthz().then(() => {
1660
1658
$.post({
1661
1659
url: "/api/gildWeapon.php?" + window.authz + "&ItemId=" + oid + "&Category=" + category,
1662
1660
contentType: "application/octet-stream",
@@ -1670,7 +1668,7 @@ function gildEquipment(category, oid) {
1670
1668
}
1671
1669
1672
1670
function maturePet(oid, revert) {
1673
revalidateAuthz(() => {
1671
revalidateAuthz().then(() => {
1674
1672
$.post({
1675
1673
url: "/api/maturePet.php?" + window.authz,
1676
1674
contentType: "application/octet-stream",
@@ -1685,7 +1683,7 @@ function maturePet(oid, revert) {
1685
1683
}
1686
1684
1687
1685
function setEvolutionProgress(requests) {
1688
revalidateAuthz(() => {
1686
revalidateAuthz().then(() => {
1689
1687
const req = $.post({
1690
1688
url: "/custom/setEvolutionProgress?" + window.authz,
1691
1689
contentType: "application/json",
@@ -1705,7 +1703,7 @@ function doAcquireMiscItems() {
1705
1703
}
1706
1704
const count = parseInt($("#miscitem-count").val());
1707
1705
if (count != 0) {
1708
revalidateAuthz(() => {
1706
revalidateAuthz().then(() => {
1709
1707
$.post({
1710
1708
url: "/custom/addItems?" + window.authz,
1711
1709
contentType: "application/json",
@@ -1746,7 +1744,7 @@ function doAcquireRiven() {
1746
1744
return;
1747
1745
}
1748
1746
const uniqueName = "/Lotus/Upgrades/Mods/Randomized/" + $("#addriven-type").val();
1749
revalidateAuthz(() => {
1747
revalidateAuthz().then(() => {
1750
1748
// Add riven type to inventory
1751
1749
$.post({
1752
1750
url: "/custom/addItems?" + window.authz,
@@ -1793,7 +1791,7 @@ $("#addriven-fingerprint").on("input", () => {
1793
1791
});
1794
1792
1795
1793
function setFingerprint(ItemType, ItemId, fingerprint) {
1796
revalidateAuthz(() => {
1794
revalidateAuthz().then(() => {
1797
1795
$.post({
1798
1796
url: "/api/artifacts.php?" + window.authz,
1799
1797
contentType: "text/plain",
@@ -1821,7 +1819,7 @@ function doAcquireMod() {
1821
1819
}
1822
1820
const count = parseInt($("#mod-count").val());
1823
1821
if (count != 0) {
1824
revalidateAuthz(() => {
1822
revalidateAuthz().then(() => {
1825
1823
$.post({
1826
1824
url: "/custom/addItems?" + window.authz,
1827
1825
contentType: "application/json",
@@ -1898,7 +1896,7 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
1898
1896
);
1899
1897
} else {
1900
1898
if ((await res.text()) == "Log-in expired") {
1901
revalidateAuthz(() => {
1899
revalidateAuthz().then(() => {
1902
1900
if (single.getCurrentPath() == "/webui/cheats") {
1903
1901
single.loadRoute("/webui/cheats");
1904
1902
}
@@ -1915,7 +1913,7 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
1915
1913
});
1916
1914
1917
1915
function doUnlockAllFocusSchools() {
1918
revalidateAuthz(() => {
1916
revalidateAuthz().then(() => {
1919
1917
$.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1").done(async data => {
1920
1918
const missingFocusUpgrades = {
1921
1919
"/Lotus/Upgrades/Focus/Attack/AttackFocusAbility": true,
@@ -1966,13 +1964,13 @@ function unlockFocusSchool(upgradeType) {
1966
1964
}
1967
1965
1968
1966
function doHelminthUnlockAll() {
1969
revalidateAuthz(() => {
1967
revalidateAuthz().then(() => {
1970
1968
$.post("/api/infestedFoundry.php?" + window.authz + "&mode=custom_unlockall");
1971
1969
});
1972
1970
}
1973
1971
1974
1972
function doIntrinsicsUnlockAll() {
1975
revalidateAuthz(() => {
1973
revalidateAuthz().then(() => {
1976
1974
$.get("/custom/unlockAllIntrinsics?" + window.authz);
1977
1975
});
1978
1976
}
@@ -1984,7 +1982,7 @@ function doAddAllMods() {
1984
1982
}
1985
1983
modsAll.delete("/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser");
1986
1984
1987
revalidateAuthz(() => {
1985
revalidateAuthz().then(() => {
1988
1986
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
1989
1987
req.done(data => {
1990
1988
for (const modOwned of data.RawUpgrades) {
@@ -2016,7 +2014,7 @@ function doAddAllMods() {
2016
2014
}
2017
2015
2018
2016
function doRemoveUnrankedMods() {
2019
revalidateAuthz(() => {
2017
revalidateAuthz().then(() => {
2020
2018
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
2021
2019
req.done(inventory => {
2022
2020
window.itemListPromise.then(itemMap => {
@@ -2041,7 +2039,7 @@ function doRemoveUnrankedMods() {
2041
2039
}
2042
2040
2043
2041
function doAddMissingMaxRankMods() {
2044
revalidateAuthz(() => {
2042
revalidateAuthz().then(() => {
2045
2043
fetch("/custom/addMissingMaxRankMods?" + window.authz).then(() => {
2046
2044
updateInventory();
2047
2045
});
@@ -2063,7 +2061,7 @@ function doPushArchonCrystalUpgrade() {
2063
2061
$("[list='datalist-archonCrystalUpgrades']").addClass("is-invalid").focus();
2064
2062
return;
2065
2063
}
2066
revalidateAuthz(() => {
2064
revalidateAuthz().then(() => {
2067
2065
$.get(
2068
2066
"/custom/pushArchonCrystalUpgrade?" +
2069
2067
window.authz +
@@ -2081,7 +2079,7 @@ function doPushArchonCrystalUpgrade() {
2081
2079
}
2082
2080
2083
2081
function doPopArchonCrystalUpgrade(type) {
2084
revalidateAuthz(() => {
2082
revalidateAuthz().then(() => {
2085
2083
$.get(
2086
2084
"/custom/popArchonCrystalUpgrade?" +
2087
2085
window.authz +
@@ -2096,7 +2094,7 @@ function doPopArchonCrystalUpgrade(type) {
2096
2094
}
2097
2095
2098
2096
function doImport() {
2099
revalidateAuthz(() => {
2097
revalidateAuthz().then(() => {
2100
2098
$.post({
2101
2099
url: "/custom/import?" + window.authz,
2102
2100
contentType: "application/json",
@@ -2113,7 +2111,7 @@ function doImport() {
2113
2111
function doChangeSupportedSyndicate() {
2114
2112
const uniqueName = document.getElementById("changeSyndicate").value;
2115
2113
2116
revalidateAuthz(() => {
2114
revalidateAuthz().then(() => {
2117
2115
$.get("/api/setSupportedSyndicate.php?" + window.authz + "&syndicate=" + uniqueName).done(function () {
2118
2116
updateInventory();
2119
2117
});
@@ -2121,7 +2119,7 @@ function doChangeSupportedSyndicate() {
2121
2119
}
2122
2120
2123
2121
function doAddCurrency(currency) {
2124
revalidateAuthz(() => {
2122
revalidateAuthz().then(() => {
2125
2123
$.post({
2126
2124
url: "/custom/addCurrency?" + window.authz,
2127
2125
contentType: "application/json",
@@ -2136,7 +2134,7 @@ function doAddCurrency(currency) {
2136
2134
}
2137
2135
2138
2136
function doQuestUpdate(operation, itemType) {
2139
revalidateAuthz(() => {
2137
revalidateAuthz().then(() => {
2140
2138
$.post({
2141
2139
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation + "&itemType=" + itemType,
2142
2140
contentType: "application/json"
@@ -2147,7 +2145,7 @@ function doQuestUpdate(operation, itemType) {
2147
2145
}
2148
2146
2149
2147
function doBulkQuestUpdate(operation) {
2150
revalidateAuthz(() => {
2148
revalidateAuthz().then(() => {
2151
2149
$.post({
2152
2150
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation,
2153
2151
contentType: "application/json"
@@ -2245,7 +2243,7 @@ function handleModularSelection(category) {
2245
2243
}
2246
2244
2247
2245
function setBooster(ItemType, ExpiryDate, callback) {
2248
revalidateAuthz(() => {
2246
revalidateAuthz().then(() => {
2249
2247
$.post({
2250
2248
url: "/custom/setBooster?" + window.authz,
2251
2249
contentType: "application/json",
@@ -2335,3 +2333,9 @@ async function doMaxPlexus() {
2335
2333
toast(loc("code_noEquipmentToRankUp"));
2336
2334
}
2337
2335
}
2336
2337
async function doUnlockAllMissions() {
2338
await revalidateAuthz();
2339
await fetch("/custom/completeAllMissions?" + window.authz);
2340
updateInventory();
2341
}