Compare commits
No commits in common. "main" and "main" have entirely different histories.
@ -13,6 +13,11 @@
|
|||||||
"skipTutorial": false,
|
"skipTutorial": false,
|
||||||
"skipAllDialogue": false,
|
"skipAllDialogue": false,
|
||||||
"unlockAllScans": false,
|
"unlockAllScans": false,
|
||||||
|
"infiniteCredits": false,
|
||||||
|
"infinitePlatinum": false,
|
||||||
|
"infiniteEndo": false,
|
||||||
|
"infiniteRegalAya": false,
|
||||||
|
"infiniteHelminthMaterials": false,
|
||||||
"claimingBlueprintRefundsIngredients": false,
|
"claimingBlueprintRefundsIngredients": false,
|
||||||
"dontSubtractPurchaseCreditCost": false,
|
"dontSubtractPurchaseCreditCost": false,
|
||||||
"dontSubtractPurchasePlatinumCost": false,
|
"dontSubtractPurchasePlatinumCost": false,
|
||||||
|
@ -3,6 +3,7 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { IInventoryClient, IUpgradeClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { IInventoryClient, IUpgradeClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { addMods, getInventory } from "@/src/services/inventoryService";
|
import { addMods, getInventory } from "@/src/services/inventoryService";
|
||||||
|
import { config } from "@/src/services/configService";
|
||||||
|
|
||||||
export const artifactsController: RequestHandler = async (req, res) => {
|
export const artifactsController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
@ -33,10 +34,10 @@ export const artifactsController: RequestHandler = async (req, res) => {
|
|||||||
addMods(inventory, [{ ItemType, ItemCount: -1 }]);
|
addMods(inventory, [{ ItemType, ItemCount: -1 }]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inventory.infiniteCredits) {
|
if (!config.infiniteCredits) {
|
||||||
inventory.RegularCredits -= Cost;
|
inventory.RegularCredits -= Cost;
|
||||||
}
|
}
|
||||||
if (!inventory.infiniteEndo) {
|
if (!config.infiniteEndo) {
|
||||||
inventory.FusionPoints -= FusionPointCost;
|
inventory.FusionPoints -= FusionPointCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
|
import { config } from "@/src/services/configService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
|
|
||||||
@ -8,7 +9,7 @@ export const creditsController: RequestHandler = async (req, res) => {
|
|||||||
getAccountIdForRequest(req),
|
getAccountIdForRequest(req),
|
||||||
getInventory(
|
getInventory(
|
||||||
req.query.accountId as string,
|
req.query.accountId as string,
|
||||||
"RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits infiniteCredits infinitePlatinum"
|
"RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits"
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
)[1];
|
)[1];
|
||||||
@ -20,10 +21,10 @@ export const creditsController: RequestHandler = async (req, res) => {
|
|||||||
PremiumCredits: inventory.PremiumCredits
|
PremiumCredits: inventory.PremiumCredits
|
||||||
};
|
};
|
||||||
|
|
||||||
if (inventory.infiniteCredits) {
|
if (config.infiniteCredits) {
|
||||||
response.RegularCredits = 999999999;
|
response.RegularCredits = 999999999;
|
||||||
}
|
}
|
||||||
if (inventory.infinitePlatinum) {
|
if (config.infinitePlatinum) {
|
||||||
response.PremiumCreditsFree = 0;
|
response.PremiumCreditsFree = 0;
|
||||||
response.PremiumCredits = 999999999;
|
response.PremiumCredits = 999999999;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import { getRecipe } from "@/src/services/itemDataService";
|
|||||||
import { toMongoDate, version_compare } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, version_compare } from "@/src/helpers/inventoryHelpers";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { colorToShard } from "@/src/helpers/shardHelper";
|
import { colorToShard } from "@/src/helpers/shardHelper";
|
||||||
|
import { config } from "@/src/services/configService";
|
||||||
import {
|
import {
|
||||||
addInfestedFoundryXP,
|
addInfestedFoundryXP,
|
||||||
applyCheatsToInfestedFoundry,
|
applyCheatsToInfestedFoundry,
|
||||||
@ -72,7 +73,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
addMiscItems(inventory, miscItemChanges);
|
addMiscItems(inventory, miscItemChanges);
|
||||||
|
|
||||||
// consume resources
|
// consume resources
|
||||||
if (!inventory.infiniteHelminthMaterials) {
|
if (!config.infiniteHelminthMaterials) {
|
||||||
let type: string;
|
let type: string;
|
||||||
let count: number;
|
let count: number;
|
||||||
if (account.BuildLabel && version_compare(account.BuildLabel, "2025.05.20.10.18") < 0) {
|
if (account.BuildLabel && version_compare(account.BuildLabel, "2025.05.20.10.18") < 0) {
|
||||||
@ -98,7 +99,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
await inventory.save();
|
await inventory.save();
|
||||||
|
|
||||||
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
||||||
applyCheatsToInfestedFoundry(inventory, infestedFoundry);
|
applyCheatsToInfestedFoundry(infestedFoundry);
|
||||||
res.json({
|
res.json({
|
||||||
InventoryChanges: {
|
InventoryChanges: {
|
||||||
MiscItems: miscItemChanges,
|
MiscItems: miscItemChanges,
|
||||||
@ -128,14 +129,13 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
case "c": {
|
case "c": {
|
||||||
// consume items
|
// consume items
|
||||||
|
|
||||||
const inventory = await getInventory(account._id.toString());
|
if (config.infiniteHelminthMaterials) {
|
||||||
|
|
||||||
if (inventory.infiniteHelminthMaterials) {
|
|
||||||
res.status(400).end();
|
res.status(400).end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const request = getJSONfromString<IHelminthFeedRequest>(String(req.body));
|
const request = getJSONfromString<IHelminthFeedRequest>(String(req.body));
|
||||||
|
const inventory = await getInventory(account._id.toString());
|
||||||
inventory.InfestedFoundry ??= {};
|
inventory.InfestedFoundry ??= {};
|
||||||
inventory.InfestedFoundry.Resources ??= [];
|
inventory.InfestedFoundry.Resources ??= [];
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
||||||
applyCheatsToInfestedFoundry(inventory, infestedFoundry);
|
applyCheatsToInfestedFoundry(infestedFoundry);
|
||||||
res.json({
|
res.json({
|
||||||
InventoryChanges: {
|
InventoryChanges: {
|
||||||
InfestedFoundry: infestedFoundry
|
InfestedFoundry: infestedFoundry
|
||||||
@ -254,7 +254,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
const request = getJSONfromString<IHelminthSubsumeRequest>(String(req.body));
|
const request = getJSONfromString<IHelminthSubsumeRequest>(String(req.body));
|
||||||
const inventory = await getInventory(account._id.toString());
|
const inventory = await getInventory(account._id.toString());
|
||||||
const recipe = getRecipe(request.Recipe)!;
|
const recipe = getRecipe(request.Recipe)!;
|
||||||
if (!inventory.infiniteHelminthMaterials) {
|
if (!config.infiniteHelminthMaterials) {
|
||||||
for (const ingredient of recipe.secretIngredients!) {
|
for (const ingredient of recipe.secretIngredients!) {
|
||||||
const resource = inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType);
|
const resource = inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType);
|
||||||
if (resource) {
|
if (resource) {
|
||||||
@ -280,7 +280,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
freeUpSlot(inventory, InventorySlot.SUITS);
|
freeUpSlot(inventory, InventorySlot.SUITS);
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
||||||
applyCheatsToInfestedFoundry(inventory, infestedFoundry);
|
applyCheatsToInfestedFoundry(infestedFoundry);
|
||||||
res.json({
|
res.json({
|
||||||
InventoryChanges: {
|
InventoryChanges: {
|
||||||
Recipes: recipeChanges,
|
Recipes: recipeChanges,
|
||||||
@ -307,7 +307,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
const recipeChanges = handleSubsumeCompletion(inventory);
|
const recipeChanges = handleSubsumeCompletion(inventory);
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
||||||
applyCheatsToInfestedFoundry(inventory, infestedFoundry);
|
applyCheatsToInfestedFoundry(infestedFoundry);
|
||||||
res.json({
|
res.json({
|
||||||
InventoryChanges: {
|
InventoryChanges: {
|
||||||
...currencyChanges,
|
...currencyChanges,
|
||||||
@ -328,7 +328,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
suit.UpgradesExpiry = upgradesExpiry;
|
suit.UpgradesExpiry = upgradesExpiry;
|
||||||
const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00);
|
const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00);
|
||||||
addRecipes(inventory, recipeChanges);
|
addRecipes(inventory, recipeChanges);
|
||||||
if (!inventory.infiniteHelminthMaterials) {
|
if (!config.infiniteHelminthMaterials) {
|
||||||
for (let i = 0; i != request.ResourceTypes.length; ++i) {
|
for (let i = 0; i != request.ResourceTypes.length; ++i) {
|
||||||
inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -=
|
inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -=
|
||||||
request.ResourceCosts[i];
|
request.ResourceCosts[i];
|
||||||
@ -338,7 +338,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|||||||
inventory.InfestedFoundry!.InvigorationsApplied += 1;
|
inventory.InfestedFoundry!.InvigorationsApplied += 1;
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
|
||||||
applyCheatsToInfestedFoundry(inventory, infestedFoundry);
|
applyCheatsToInfestedFoundry(infestedFoundry);
|
||||||
res.json({
|
res.json({
|
||||||
SuitId: request.SuitId,
|
SuitId: request.SuitId,
|
||||||
OffensiveUpgrade: request.OffensiveUpgradeType,
|
OffensiveUpgrade: request.OffensiveUpgradeType,
|
||||||
|
@ -295,17 +295,17 @@ export const getInventoryResponse = async (
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inventory.infiniteCredits) {
|
if (config.infiniteCredits) {
|
||||||
inventoryResponse.RegularCredits = 999999999;
|
inventoryResponse.RegularCredits = 999999999;
|
||||||
}
|
}
|
||||||
if (inventory.infinitePlatinum) {
|
if (config.infinitePlatinum) {
|
||||||
inventoryResponse.PremiumCreditsFree = 0;
|
inventoryResponse.PremiumCreditsFree = 0;
|
||||||
inventoryResponse.PremiumCredits = 999999999;
|
inventoryResponse.PremiumCredits = 999999999;
|
||||||
}
|
}
|
||||||
if (inventory.infiniteEndo) {
|
if (config.infiniteEndo) {
|
||||||
inventoryResponse.FusionPoints = 999999999;
|
inventoryResponse.FusionPoints = 999999999;
|
||||||
}
|
}
|
||||||
if (inventory.infiniteRegalAya) {
|
if (config.infiniteRegalAya) {
|
||||||
inventoryResponse.PrimeTokens = 999999999;
|
inventoryResponse.PrimeTokens = 999999999;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,7 +450,7 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (inventoryResponse.InfestedFoundry) {
|
if (inventoryResponse.InfestedFoundry) {
|
||||||
applyCheatsToInfestedFoundry(inventory, inventoryResponse.InfestedFoundry);
|
applyCheatsToInfestedFoundry(inventoryResponse.InfestedFoundry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set 2FA enabled so trading post can be used
|
// Set 2FA enabled so trading post can be used
|
||||||
|
@ -7,6 +7,7 @@ import { addMiscItems, addRecipes, getInventory, updateCurrency } from "@/src/se
|
|||||||
import { getRecipeByResult } from "@/src/services/itemDataService";
|
import { getRecipeByResult } from "@/src/services/itemDataService";
|
||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
import { addInfestedFoundryXP, applyCheatsToInfestedFoundry } from "@/src/services/infestedFoundryService";
|
import { addInfestedFoundryXP, applyCheatsToInfestedFoundry } from "@/src/services/infestedFoundryService";
|
||||||
|
import { config } from "@/src/services/configService";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/wsService";
|
import { sendWsBroadcastTo } from "@/src/services/wsService";
|
||||||
import { EquipmentFeatures, IEquipmentDatabase } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures, IEquipmentDatabase } from "@/src/types/equipmentTypes";
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
|
|||||||
const recipe = getRecipeByResult(operation.UpgradeRequirement)!;
|
const recipe = getRecipeByResult(operation.UpgradeRequirement)!;
|
||||||
for (const ingredient of recipe.ingredients) {
|
for (const ingredient of recipe.ingredients) {
|
||||||
totalPercentagePointsConsumed += ingredient.ItemCount / 10;
|
totalPercentagePointsConsumed += ingredient.ItemCount / 10;
|
||||||
if (!inventory.infiniteHelminthMaterials) {
|
if (!config.infiniteHelminthMaterials) {
|
||||||
inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType)!.Count -=
|
inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType)!.Count -=
|
||||||
ingredient.ItemCount;
|
ingredient.ItemCount;
|
||||||
}
|
}
|
||||||
@ -68,7 +69,7 @@ export const upgradesController: RequestHandler = async (req, res) => {
|
|||||||
|
|
||||||
inventoryChanges.Recipes = recipeChanges;
|
inventoryChanges.Recipes = recipeChanges;
|
||||||
inventoryChanges.InfestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry;
|
inventoryChanges.InfestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry;
|
||||||
applyCheatsToInfestedFoundry(inventory, inventoryChanges.InfestedFoundry!);
|
applyCheatsToInfestedFoundry(inventoryChanges.InfestedFoundry!);
|
||||||
} else
|
} else
|
||||||
switch (operation.UpgradeRequirement) {
|
switch (operation.UpgradeRequirement) {
|
||||||
case "/Lotus/Types/Items/MiscItems/OrokinReactor":
|
case "/Lotus/Types/Items/MiscItems/OrokinReactor":
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
||||||
import { IAccountCheats } from "@/src/types/inventoryTypes/inventoryTypes";
|
|
||||||
import { RequestHandler } from "express";
|
|
||||||
|
|
||||||
export const setAccountCheatController: RequestHandler = async (req, res) => {
|
|
||||||
const accountId = await getAccountIdForRequest(req);
|
|
||||||
const payload = req.body as ISetAccountCheatRequest;
|
|
||||||
const inventory = await getInventory(accountId, payload.key);
|
|
||||||
inventory[payload.key] = payload.value;
|
|
||||||
await inventory.save();
|
|
||||||
res.end();
|
|
||||||
};
|
|
||||||
|
|
||||||
interface ISetAccountCheatRequest {
|
|
||||||
key: keyof IAccountCheats;
|
|
||||||
value: boolean;
|
|
||||||
}
|
|
@ -22,11 +22,8 @@ export interface INemesisManifest {
|
|||||||
ephemeraTypes?: Record<TInnateDamageTag, string>;
|
ephemeraTypes?: Record<TInnateDamageTag, string>;
|
||||||
firstKillReward: string;
|
firstKillReward: string;
|
||||||
firstConvertReward: string;
|
firstConvertReward: string;
|
||||||
killMessageSubject: string;
|
messageTitle: string;
|
||||||
killMessageBody: string;
|
messageBody: string;
|
||||||
convertMessageSubject: string;
|
|
||||||
convertMessageBody: string;
|
|
||||||
convertMessageIcon: string;
|
|
||||||
minBuild: string;
|
minBuild: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,11 +57,8 @@ class KuvaLichManifest implements INemesisManifest {
|
|||||||
};
|
};
|
||||||
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Clan/LichKillerBadgeItem";
|
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Clan/LichKillerBadgeItem";
|
||||||
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/KuvaLichSigil";
|
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/KuvaLichSigil";
|
||||||
killMessageSubject = "/Lotus/Language/Inbox/VanquishKuvaMsgTitle";
|
messageTitle = "/Lotus/Language/Inbox/VanquishKuvaMsgTitle";
|
||||||
killMessageBody = "/Lotus/Language/Inbox/VanquishLichMsgBody";
|
messageBody = "/Lotus/Language/Inbox/VanquishLichMsgBody";
|
||||||
convertMessageSubject = "/Lotus/Language/Kingpins/InboxKuvaConvertedSubject";
|
|
||||||
convertMessageBody = "/Lotus/Language/Kingpins/InboxKuvaConvertedBody";
|
|
||||||
convertMessageIcon = "/Lotus/Interface/Graphics/WorldStatePanel/Grineer.png";
|
|
||||||
minBuild = "2019.10.31.22.42"; // 26.0.0
|
minBuild = "2019.10.31.22.42"; // 26.0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,11 +131,8 @@ class LawyerManifest implements INemesisManifest {
|
|||||||
};
|
};
|
||||||
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Clan/CorpusLichBadgeItem";
|
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Clan/CorpusLichBadgeItem";
|
||||||
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/CorpusLichSigil";
|
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/CorpusLichSigil";
|
||||||
killMessageSubject = "/Lotus/Language/Inbox/VanquishLawyerMsgTitle";
|
messageTitle = "/Lotus/Language/Inbox/VanquishLawyerMsgTitle";
|
||||||
killMessageBody = "/Lotus/Language/Inbox/VanquishLichMsgBody";
|
messageBody = "/Lotus/Language/Inbox/VanquishLichMsgBody";
|
||||||
convertMessageSubject = "/Lotus/Language/Kingpins/InboxSisterConvertedSubject";
|
|
||||||
convertMessageBody = "/Lotus/Language/Kingpins/InboxSisterConvertedBody";
|
|
||||||
convertMessageIcon = "/Lotus/Interface/Graphics/WorldStatePanel/Corpus.png";
|
|
||||||
minBuild = "2021.07.05.17.03"; // 30.5.0
|
minBuild = "2021.07.05.17.03"; // 30.5.0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,11 +166,8 @@ class InfestedLichManfest implements INemesisManifest {
|
|||||||
ephemeraChance = 0;
|
ephemeraChance = 0;
|
||||||
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/InfLichVanquishedSigil";
|
firstKillReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/InfLichVanquishedSigil";
|
||||||
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/InfLichConvertedSigil";
|
firstConvertReward = "/Lotus/StoreItems/Upgrades/Skins/Sigils/InfLichConvertedSigil";
|
||||||
killMessageSubject = "/Lotus/Language/Inbox/VanquishBandMsgTitle";
|
messageTitle = "/Lotus/Language/Inbox/VanquishBandMsgTitle";
|
||||||
killMessageBody = "/Lotus/Language/Inbox/VanquishBandMsgBody";
|
messageBody = "/Lotus/Language/Inbox/VanquishBandMsgBody";
|
||||||
convertMessageSubject = "/Lotus/Language/Kingpins/InboxBandConvertedSubject";
|
|
||||||
convertMessageBody = "/Lotus/Language/Kingpins/InboxBandConvertedBody";
|
|
||||||
convertMessageIcon = "/Lotus/Interface/Graphics/WorldStatePanel/Infested.png";
|
|
||||||
minBuild = "2025.03.18.09.51"; // 38.5.0
|
minBuild = "2025.03.18.09.51"; // 38.5.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
import { SlotPurchase, SlotPurchaseName } from "@/src/types/purchaseTypes";
|
import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService";
|
||||||
|
import { SlotPurchaseName } from "@/src/types/purchaseTypes";
|
||||||
export const slotPurchaseNameToSlotName: SlotPurchase = {
|
|
||||||
SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 },
|
|
||||||
TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 },
|
|
||||||
TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 },
|
|
||||||
SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 },
|
|
||||||
TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 },
|
|
||||||
MechSlotItem: { name: "MechBin", purchaseQuantity: 1 },
|
|
||||||
TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 },
|
|
||||||
RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 },
|
|
||||||
TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 },
|
|
||||||
CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 }
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
|
export const isSlotPurchaseName = (slotPurchaseName: string): slotPurchaseName is SlotPurchaseName => {
|
||||||
return slotPurchaseName in slotPurchaseNameToSlotName;
|
return slotPurchaseName in slotPurchaseNameToSlotName;
|
||||||
|
@ -1425,14 +1425,6 @@ const hubNpcCustomizationSchema = new Schema<IHubNpcCustomization>(
|
|||||||
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||||
{
|
{
|
||||||
accountOwnerId: Schema.Types.ObjectId,
|
accountOwnerId: Schema.Types.ObjectId,
|
||||||
|
|
||||||
// SNS account cheats
|
|
||||||
infiniteCredits: Boolean,
|
|
||||||
infinitePlatinum: Boolean,
|
|
||||||
infiniteEndo: Boolean,
|
|
||||||
infiniteRegalAya: Boolean,
|
|
||||||
infiniteHelminthMaterials: Boolean,
|
|
||||||
|
|
||||||
SubscribedToEmails: { type: Number, default: 0 },
|
SubscribedToEmails: { type: Number, default: 0 },
|
||||||
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
||||||
RewardSeed: BigInt,
|
RewardSeed: BigInt,
|
||||||
|
@ -28,7 +28,6 @@ import { setBoosterController } from "@/src/controllers/custom/setBoosterControl
|
|||||||
import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController";
|
import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController";
|
||||||
import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController";
|
import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController";
|
||||||
import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController";
|
import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController";
|
||||||
import { setAccountCheatController } from "@/src/controllers/custom/setAccountCheatController";
|
|
||||||
|
|
||||||
import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
|
import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
|
||||||
|
|
||||||
@ -62,7 +61,6 @@ customRouter.post("/setBooster", setBoosterController);
|
|||||||
customRouter.post("/updateFingerprint", updateFingerprintController);
|
customRouter.post("/updateFingerprint", updateFingerprintController);
|
||||||
customRouter.post("/changeModularParts", changeModularPartsController);
|
customRouter.post("/changeModularParts", changeModularPartsController);
|
||||||
customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
|
customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
|
||||||
customRouter.post("/setAccountCheat", setAccountCheatController);
|
|
||||||
|
|
||||||
customRouter.post("/getConfig", getConfigController);
|
customRouter.post("/getConfig", getConfigController);
|
||||||
customRouter.post("/setConfig", setConfigController);
|
customRouter.post("/setConfig", setConfigController);
|
||||||
|
@ -20,6 +20,11 @@ export interface IConfig {
|
|||||||
skipTutorial?: boolean;
|
skipTutorial?: boolean;
|
||||||
skipAllDialogue?: boolean;
|
skipAllDialogue?: boolean;
|
||||||
unlockAllScans?: boolean;
|
unlockAllScans?: boolean;
|
||||||
|
infiniteCredits?: boolean;
|
||||||
|
infinitePlatinum?: boolean;
|
||||||
|
infiniteEndo?: boolean;
|
||||||
|
infiniteRegalAya?: boolean;
|
||||||
|
infiniteHelminthMaterials?: boolean;
|
||||||
claimingBlueprintRefundsIngredients?: boolean;
|
claimingBlueprintRefundsIngredients?: boolean;
|
||||||
dontSubtractPurchaseCreditCost?: boolean;
|
dontSubtractPurchaseCreditCost?: boolean;
|
||||||
dontSubtractPurchasePlatinumCost?: boolean;
|
dontSubtractPurchasePlatinumCost?: boolean;
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
import { ExportRecipes } from "warframe-public-export-plus";
|
import { ExportRecipes } from "warframe-public-export-plus";
|
||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
import {
|
import { IInfestedFoundryClient, IInfestedFoundryDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
IAccountCheats,
|
|
||||||
IInfestedFoundryClient,
|
|
||||||
IInfestedFoundryDatabase
|
|
||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
|
||||||
import { addRecipes } from "@/src/services/inventoryService";
|
import { addRecipes } from "@/src/services/inventoryService";
|
||||||
|
import { config } from "@/src/services/configService";
|
||||||
import { ITypeCount } from "@/src/types/commonTypes";
|
import { ITypeCount } from "@/src/types/commonTypes";
|
||||||
|
|
||||||
export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundryDatabase, delta: number): ITypeCount[] => {
|
export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundryDatabase, delta: number): ITypeCount[] => {
|
||||||
@ -100,8 +97,8 @@ export const handleSubsumeCompletion = (inventory: TInventoryDatabaseDocument):
|
|||||||
return recipeChanges;
|
return recipeChanges;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const applyCheatsToInfestedFoundry = (cheats: IAccountCheats, infestedFoundry: IInfestedFoundryClient): void => {
|
export const applyCheatsToInfestedFoundry = (infestedFoundry: IInfestedFoundryClient): void => {
|
||||||
if (cheats.infiniteHelminthMaterials) {
|
if (config.infiniteHelminthMaterials) {
|
||||||
infestedFoundry.Resources = [
|
infestedFoundry.Resources = [
|
||||||
{ ItemType: "/Lotus/Types/Items/InfestedFoundry/HelminthCalx", Count: 1000 },
|
{ ItemType: "/Lotus/Types/Items/InfestedFoundry/HelminthCalx", Count: 1000 },
|
||||||
{ ItemType: "/Lotus/Types/Items/InfestedFoundry/HelminthBiotics", Count: 1000 },
|
{ ItemType: "/Lotus/Types/Items/InfestedFoundry/HelminthBiotics", Count: 1000 },
|
||||||
|
@ -1201,8 +1201,8 @@ export const updateSlots = (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const isCurrencyTracked = (inventory: TInventoryDatabaseDocument, usePremium: boolean): boolean => {
|
const isCurrencyTracked = (usePremium: boolean): boolean => {
|
||||||
return usePremium ? !inventory.infinitePlatinum : !inventory.infiniteCredits;
|
return usePremium ? !config.infinitePlatinum : !config.infiniteCredits;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const updateCurrency = (
|
export const updateCurrency = (
|
||||||
@ -1211,7 +1211,7 @@ export const updateCurrency = (
|
|||||||
usePremium: boolean,
|
usePremium: boolean,
|
||||||
inventoryChanges: IInventoryChanges = {}
|
inventoryChanges: IInventoryChanges = {}
|
||||||
): IInventoryChanges => {
|
): IInventoryChanges => {
|
||||||
if (price != 0 && isCurrencyTracked(inventory, usePremium)) {
|
if (price != 0 && isCurrencyTracked(usePremium)) {
|
||||||
if (usePremium) {
|
if (usePremium) {
|
||||||
if (inventory.PremiumCreditsFree > 0) {
|
if (inventory.PremiumCreditsFree > 0) {
|
||||||
const premiumCreditsFreeDelta = Math.min(price, inventory.PremiumCreditsFree) * -1;
|
const premiumCreditsFreeDelta = Math.min(price, inventory.PremiumCreditsFree) * -1;
|
||||||
|
@ -841,24 +841,26 @@ export const addMissionInventoryUpdates = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await createMessage(inventory.accountOwnerId, [
|
if (value.killed) {
|
||||||
{
|
await createMessage(inventory.accountOwnerId, [
|
||||||
sndr: value.killed ? "/Lotus/Language/Bosses/Ordis" : value.nemesisName,
|
{
|
||||||
msg: value.killed ? manifest.killMessageBody : manifest.convertMessageBody,
|
sndr: "/Lotus/Language/Bosses/Ordis",
|
||||||
arg: [
|
msg: manifest.messageBody,
|
||||||
{
|
arg: [
|
||||||
Key: "LICH_NAME",
|
{
|
||||||
Tag: value.nemesisName
|
Key: "LICH_NAME",
|
||||||
}
|
Tag: value.nemesisName
|
||||||
],
|
}
|
||||||
att: att,
|
],
|
||||||
countedAtt: countedAtt,
|
att: att,
|
||||||
attVisualOnly: true,
|
countedAtt: countedAtt,
|
||||||
sub: value.killed ? manifest.killMessageSubject : manifest.convertMessageSubject,
|
attVisualOnly: true,
|
||||||
icon: value.killed ? "/Lotus/Interface/Icons/Npcs/Ordis.png" : manifest.convertMessageIcon,
|
sub: manifest.messageTitle,
|
||||||
highPriority: true
|
icon: "/Lotus/Interface/Icons/Npcs/Ordis.png",
|
||||||
}
|
highPriority: true
|
||||||
]);
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
inventory.Nemesis = undefined;
|
inventory.Nemesis = undefined;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { parseSlotPurchaseName, slotPurchaseNameToSlotName } from "@/src/helpers/purchaseHelpers";
|
import { parseSlotPurchaseName } from "@/src/helpers/purchaseHelpers";
|
||||||
import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers";
|
import { getSubstringFromKeyword } from "@/src/helpers/stringHelpers";
|
||||||
import {
|
import {
|
||||||
addBooster,
|
addBooster,
|
||||||
@ -14,6 +14,7 @@ import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
|||||||
import {
|
import {
|
||||||
IPurchaseRequest,
|
IPurchaseRequest,
|
||||||
IPurchaseResponse,
|
IPurchaseResponse,
|
||||||
|
SlotPurchase,
|
||||||
IInventoryChanges,
|
IInventoryChanges,
|
||||||
PurchaseSource,
|
PurchaseSource,
|
||||||
IPurchaseParams
|
IPurchaseParams
|
||||||
@ -327,7 +328,7 @@ export const handlePurchase = async (
|
|||||||
purchaseResponse.InventoryChanges.MiscItems ??= [];
|
purchaseResponse.InventoryChanges.MiscItems ??= [];
|
||||||
purchaseResponse.InventoryChanges.MiscItems.push(invItem);
|
purchaseResponse.InventoryChanges.MiscItems.push(invItem);
|
||||||
}
|
}
|
||||||
} else if (!inventory.infiniteRegalAya) {
|
} else if (!config.infiniteRegalAya) {
|
||||||
inventory.PrimeTokens -= offer.PrimePrice! * purchaseRequest.PurchaseParams.Quantity;
|
inventory.PrimeTokens -= offer.PrimePrice! * purchaseRequest.PurchaseParams.Quantity;
|
||||||
|
|
||||||
purchaseResponse.InventoryChanges.PrimeTokens ??= 0;
|
purchaseResponse.InventoryChanges.PrimeTokens ??= 0;
|
||||||
@ -471,6 +472,19 @@ export const handleStoreItemAcquisition = async (
|
|||||||
return purchaseResponse;
|
return purchaseResponse;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const slotPurchaseNameToSlotName: SlotPurchase = {
|
||||||
|
SuitSlotItem: { name: "SuitBin", purchaseQuantity: 1 },
|
||||||
|
TwoSentinelSlotItem: { name: "SentinelBin", purchaseQuantity: 2 },
|
||||||
|
TwoWeaponSlotItem: { name: "WeaponBin", purchaseQuantity: 2 },
|
||||||
|
SpaceSuitSlotItem: { name: "SpaceSuitBin", purchaseQuantity: 1 },
|
||||||
|
TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", purchaseQuantity: 2 },
|
||||||
|
MechSlotItem: { name: "MechBin", purchaseQuantity: 1 },
|
||||||
|
TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", purchaseQuantity: 2 },
|
||||||
|
RandomModSlotItem: { name: "RandomModBin", purchaseQuantity: 3 },
|
||||||
|
TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", purchaseQuantity: 2 },
|
||||||
|
CrewMemberSlotItem: { name: "CrewMemberBin", purchaseQuantity: 1 }
|
||||||
|
};
|
||||||
|
|
||||||
// // extra = everything above the base +2 slots (depending on slot type)
|
// // extra = everything above the base +2 slots (depending on slot type)
|
||||||
// // new slot above base = extra + 1 and slots +1
|
// // new slot above base = extra + 1 and slots +1
|
||||||
// // new frame = slots -1
|
// // new frame = slots -1
|
||||||
|
@ -19,15 +19,6 @@ export type InventoryDatabaseEquipment = {
|
|||||||
[_ in TEquipmentKey]: IEquipmentDatabase[];
|
[_ in TEquipmentKey]: IEquipmentDatabase[];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Fields specific to SNS
|
|
||||||
export interface IAccountCheats {
|
|
||||||
infiniteCredits?: boolean;
|
|
||||||
infinitePlatinum?: boolean;
|
|
||||||
infiniteEndo?: boolean;
|
|
||||||
infiniteRegalAya?: boolean;
|
|
||||||
infiniteHelminthMaterials?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IInventoryDatabase
|
export interface IInventoryDatabase
|
||||||
extends Omit<
|
extends Omit<
|
||||||
IInventoryClient,
|
IInventoryClient,
|
||||||
@ -70,8 +61,7 @@ export interface IInventoryDatabase
|
|||||||
| "PersonalGoalProgress"
|
| "PersonalGoalProgress"
|
||||||
| TEquipmentKey
|
| TEquipmentKey
|
||||||
>,
|
>,
|
||||||
InventoryDatabaseEquipment,
|
InventoryDatabaseEquipment {
|
||||||
IAccountCheats {
|
|
||||||
accountOwnerId: Types.ObjectId;
|
accountOwnerId: Types.ObjectId;
|
||||||
Created: Date;
|
Created: Date;
|
||||||
TrainingDate: Date;
|
TrainingDate: Date;
|
||||||
|
@ -663,6 +663,26 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="unlockAllScans" />
|
<input class="form-check-input" type="checkbox" id="unlockAllScans" />
|
||||||
<label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
|
<label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
||||||
|
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="infinitePlatinum" />
|
||||||
|
<label class="form-check-label" for="infinitePlatinum" data-loc="cheats_infinitePlatinum"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="infiniteEndo" />
|
||||||
|
<label class="form-check-label" for="infiniteEndo" data-loc="cheats_infiniteEndo"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="infiniteRegalAya" />
|
||||||
|
<label class="form-check-label" for="infiniteRegalAya" data-loc="cheats_infiniteRegalAya"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="infiniteHelminthMaterials" />
|
||||||
|
<label class="form-check-label" for="infiniteHelminthMaterials" data-loc="cheats_infiniteHelminthMaterials"></label>
|
||||||
|
</div>
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="claimingBlueprintRefundsIngredients" />
|
<input class="form-check-input" type="checkbox" id="claimingBlueprintRefundsIngredients" />
|
||||||
<label class="form-check-label" for="claimingBlueprintRefundsIngredients" data-loc="cheats_claimingBlueprintRefundsIngredients"></label>
|
<label class="form-check-label" for="claimingBlueprintRefundsIngredients" data-loc="cheats_claimingBlueprintRefundsIngredients"></label>
|
||||||
@ -871,28 +891,8 @@
|
|||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<h5 class="card-header" data-loc="cheats_account"></h5>
|
<h5 class="card-header" data-loc="cheats_account"></h5>
|
||||||
<div class="card-body" id="account-cheats">
|
<div class="card-body">
|
||||||
<div class="form-check">
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
|
||||||
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="infinitePlatinum" />
|
|
||||||
<label class="form-check-label" for="infinitePlatinum" data-loc="cheats_infinitePlatinum"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteEndo" />
|
|
||||||
<label class="form-check-label" for="infiniteEndo" data-loc="cheats_infiniteEndo"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteRegalAya" />
|
|
||||||
<label class="form-check-label" for="infiniteRegalAya" data-loc="cheats_infiniteRegalAya"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteHelminthMaterials" />
|
|
||||||
<label class="form-check-label" for="infiniteHelminthMaterials" data-loc="cheats_infiniteHelminthMaterials"></label>
|
|
||||||
</div>
|
|
||||||
<div class="mt-2 mb-2 d-flex flex-wrap gap-2">
|
|
||||||
<button class="btn btn-primary" onclick="debounce(doUnlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
|
<button class="btn btn-primary" onclick="debounce(doUnlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(markAllAsRead);" data-loc="cheats_markAllAsRead"></button>
|
<button class="btn btn-primary" onclick="debounce(markAllAsRead);" data-loc="cheats_markAllAsRead"></button>
|
||||||
<button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
|
<button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
|
||||||
|
@ -605,8 +605,6 @@ function fetchItemList() {
|
|||||||
}
|
}
|
||||||
fetchItemList();
|
fetchItemList();
|
||||||
|
|
||||||
const accountCheats = document.querySelectorAll("#account-cheats input[id]");
|
|
||||||
|
|
||||||
// Assumes that caller revalidates authz
|
// Assumes that caller revalidates authz
|
||||||
function updateInventory() {
|
function updateInventory() {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
@ -1475,10 +1473,6 @@ function updateInventory() {
|
|||||||
}
|
}
|
||||||
document.getElementById("Boosters-list").appendChild(tr);
|
document.getElementById("Boosters-list").appendChild(tr);
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const elm of accountCheats) {
|
|
||||||
elm.checked = !!data[elm.id];
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2115,8 +2109,6 @@ function doAcquireModMax() {
|
|||||||
alert("doAcquireModMax: " + uniqueName);
|
alert("doAcquireModMax: " + uniqueName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cheats route
|
|
||||||
|
|
||||||
const uiConfigs = [...$(".config-form input[id], .config-form select[id]")].map(x => x.id);
|
const uiConfigs = [...$(".config-form input[id], .config-form select[id]")].map(x => x.id);
|
||||||
|
|
||||||
for (const id of uiConfigs) {
|
for (const id of uiConfigs) {
|
||||||
@ -2201,6 +2193,8 @@ function doSaveConfigStringArray(id) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cheats route
|
||||||
|
|
||||||
single.getRoute("/webui/cheats").on("beforeload", function () {
|
single.getRoute("/webui/cheats").on("beforeload", function () {
|
||||||
let interval;
|
let interval;
|
||||||
interval = setInterval(() => {
|
interval = setInterval(() => {
|
||||||
@ -2312,23 +2306,6 @@ function doIntrinsicsUnlockAll() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelectorAll("#account-cheats input[type=checkbox]").forEach(elm => {
|
|
||||||
elm.onchange = function () {
|
|
||||||
revalidateAuthz().then(() => {
|
|
||||||
$.post({
|
|
||||||
url: "/custom/setAccountCheat?" + window.authz /*+ "&wsid=" + wsid*/,
|
|
||||||
contentType: "application/json",
|
|
||||||
data: JSON.stringify({
|
|
||||||
key: elm.id,
|
|
||||||
value: elm.checked
|
|
||||||
})
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mods route
|
|
||||||
|
|
||||||
function doAddAllMods() {
|
function doAddAllMods() {
|
||||||
let modsAll = new Set();
|
let modsAll = new Set();
|
||||||
for (const child of document.getElementById("datalist-mods").children) {
|
for (const child of document.getElementById("datalist-mods").children) {
|
||||||
|
@ -36,7 +36,7 @@ dict = {
|
|||||||
code_succRemoved: `Eliminado exitosamente.`,
|
code_succRemoved: `Eliminado exitosamente.`,
|
||||||
code_buffsNumber: `Cantidad de mejoras`,
|
code_buffsNumber: `Cantidad de mejoras`,
|
||||||
code_cursesNumber: `Cantidad de maldiciones`,
|
code_cursesNumber: `Cantidad de maldiciones`,
|
||||||
code_rerollsNumber: `Cantidad de rerolls`,
|
code_rerollsNumber: `Cantidad de reintentos`,
|
||||||
code_viewStats: `Ver estadísticas`,
|
code_viewStats: `Ver estadísticas`,
|
||||||
code_rank: `Rango`,
|
code_rank: `Rango`,
|
||||||
code_rankUp: `Subir de rango`,
|
code_rankUp: `Subir de rango`,
|
||||||
@ -121,11 +121,11 @@ dict = {
|
|||||||
currency_PrimeTokens: `Aya Real`,
|
currency_PrimeTokens: `Aya Real`,
|
||||||
currency_owned: `Tienes |COUNT|.`,
|
currency_owned: `Tienes |COUNT|.`,
|
||||||
|
|
||||||
detailedView_archonShardsLabel: `Ranuras de Fragmento de Arconte`,
|
detailedView_archonShardsLabel: `Ranuras de Fragmento de Archón`,
|
||||||
detailedView_archonShardsDescription: `Puedes usar estas ranuras ilimitadas para aplicar una amplia variedad de mejoras`,
|
detailedView_archonShardsDescription: `Puedes usar estas ranuras ilimitadas para aplicar una amplia variedad de mejoras`,
|
||||||
detailedView_archonShardsDescription2: `Ten en cuenta que cada fragmento de arconte tarda un poco en aplicarse al cargar`,
|
detailedView_archonShardsDescription2: `Ten en cuenta que cada fragmento de archón tarda un poco en aplicarse al cargar`,
|
||||||
detailedView_valenceBonusLabel: `Bonus de Valéncia`,
|
detailedView_valenceBonusLabel: `Bônus de Valência`,
|
||||||
detailedView_valenceBonusDescription: `Puedes establecer o quitar el bonus de valencia de tu arma.`,
|
detailedView_valenceBonusDescription: `Puedes establecer o quitar el bono de valencia de tu arma.`,
|
||||||
detailedView_modularPartsLabel: `Cambiar partes modulares`,
|
detailedView_modularPartsLabel: `Cambiar partes modulares`,
|
||||||
detailedView_suitInvigorationLabel: `Vigorización de Warframe`,
|
detailedView_suitInvigorationLabel: `Vigorización de Warframe`,
|
||||||
detailedView_loadoutLabel: `Equipamientos`,
|
detailedView_loadoutLabel: `Equipamientos`,
|
||||||
@ -156,7 +156,7 @@ dict = {
|
|||||||
invigorations_defensiveLabel: `Mejora Defensiva`,
|
invigorations_defensiveLabel: `Mejora Defensiva`,
|
||||||
invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`,
|
invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`,
|
||||||
|
|
||||||
abilityOverride_label: `Intercambio de Habilidad`,
|
abilityOverride_label: `Anulación de Habilidad`,
|
||||||
abilityOverride_onSlot: `en el espacio`,
|
abilityOverride_onSlot: `en el espacio`,
|
||||||
|
|
||||||
mods_addRiven: `Agregar Agrietado`,
|
mods_addRiven: `Agregar Agrietado`,
|
||||||
@ -180,18 +180,18 @@ dict = {
|
|||||||
cheats_infiniteEndo: `Endo infinito`,
|
cheats_infiniteEndo: `Endo infinito`,
|
||||||
cheats_infiniteRegalAya: `Aya Real infinita`,
|
cheats_infiniteRegalAya: `Aya Real infinita`,
|
||||||
cheats_infiniteHelminthMaterials: `Materiales Helminto infinitos`,
|
cheats_infiniteHelminthMaterials: `Materiales Helminto infinitos`,
|
||||||
cheats_claimingBlueprintRefundsIngredients: `Reclamar planos devuelve los ingredientes`,
|
cheats_claimingBlueprintRefundsIngredients: `Reclamar ingredientes devueltos por planos`,
|
||||||
cheats_dontSubtractPurchaseCreditCost: `No restar costo en créditos al comprar`,
|
cheats_dontSubtractPurchaseCreditCost: `No restar costo en créditos de la compra`,
|
||||||
cheats_dontSubtractPurchasePlatinumCost: `No restar costo en platino al comprar`,
|
cheats_dontSubtractPurchasePlatinumCost: `No restar costo en platino de la compra`,
|
||||||
cheats_dontSubtractPurchaseItemCost: `No restar costo de ítem al comprar`,
|
cheats_dontSubtractPurchaseItemCost: `No restar costo de ítem en la compra`,
|
||||||
cheats_dontSubtractPurchaseStandingCost: `No restar costo en reputación al comprar`,
|
cheats_dontSubtractPurchaseStandingCost: `No restar costo en reputación de la compra`,
|
||||||
cheats_dontSubtractVoidTraces: `No descontar vestigios del Vacío`,
|
cheats_dontSubtractVoidTraces: `No descontar vestigios del Vacío`,
|
||||||
cheats_dontSubtractConsumables: `No restar consumibles`,
|
cheats_dontSubtractConsumables: `No restar consumibles`,
|
||||||
cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`,
|
cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`,
|
||||||
cheats_unlockAllShipDecorations: `Desbloquear todas las decoraciones de nave`,
|
cheats_unlockAllShipDecorations: `Desbloquear todas las decoraciones de nave`,
|
||||||
cheats_unlockAllFlavourItems: `Desbloquear todos los <abbr title="Conjuntos de animaciones, glifos, paletas, etc.">ítems estéticos</abbr>`,
|
cheats_unlockAllFlavourItems: `Desbloquear todos los <abbr title="Conjuntos de animaciones, glifos, paletas, etc.">ítems estéticos</abbr>`,
|
||||||
cheats_unlockAllSkins: `Desbloquear todas las skins`,
|
cheats_unlockAllSkins: `Desbloquear todas las apariencias`,
|
||||||
cheats_unlockAllCapturaScenes: `Desbloquear todas las escenas de Captura`,
|
cheats_unlockAllCapturaScenes: `Desbloquear todas las escenas Captura`,
|
||||||
cheats_unlockAllDecoRecipes: `Desbloquear todas las recetas decorativas del dojo`,
|
cheats_unlockAllDecoRecipes: `Desbloquear todas las recetas decorativas del dojo`,
|
||||||
cheats_universalPolarityEverywhere: `Polaridad universal en todas partes`,
|
cheats_universalPolarityEverywhere: `Polaridad universal en todas partes`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Patatas en todas partes`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Patatas en todas partes`,
|
||||||
@ -208,7 +208,7 @@ dict = {
|
|||||||
cheats_baroAlwaysAvailable: `Baro siempre disponible`,
|
cheats_baroAlwaysAvailable: `Baro siempre disponible`,
|
||||||
cheats_baroFullyStocked: `Baro con stock completo`,
|
cheats_baroFullyStocked: `Baro con stock completo`,
|
||||||
cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`,
|
cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`,
|
||||||
cheats_unlockAllProfitTakerStages: `Desbloquea todas las etapas del Roba-ganancias`,
|
cheats_unlockAllProfitTakerStages: `Deslobquea todas las etapas del Roba-ganancias`,
|
||||||
cheats_instantFinishRivenChallenge: `Terminar desafío de agrietado inmediatamente`,
|
cheats_instantFinishRivenChallenge: `Terminar desafío de agrietado inmediatamente`,
|
||||||
cheats_instantResourceExtractorDrones: `Drones de extracción de recursos instantáneos`,
|
cheats_instantResourceExtractorDrones: `Drones de extracción de recursos instantáneos`,
|
||||||
cheats_noResourceExtractorDronesDamage: `Sin daño a los drones extractores de recursos`,
|
cheats_noResourceExtractorDronesDamage: `Sin daño a los drones extractores de recursos`,
|
||||||
@ -249,17 +249,17 @@ dict = {
|
|||||||
worldState_ghoulEmergence: `Purga de Gules`,
|
worldState_ghoulEmergence: `Purga de Gules`,
|
||||||
worldState_plagueStar: `Estrella Infestada`,
|
worldState_plagueStar: `Estrella Infestada`,
|
||||||
worldState_dogDays: `Canícula`,
|
worldState_dogDays: `Canícula`,
|
||||||
worldState_dogDaysRewards: `Recompensas de Canícula`,
|
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||||
worldState_wolfHunt: `Cacería del Lobo (2025)`,
|
worldState_wolfHunt: `Cacería del Lobo (2025)`,
|
||||||
worldState_longShadow: `Sombra Prolongada`,
|
worldState_longShadow: `Sombra Prolongada`,
|
||||||
worldState_hallowedFlame: `Llama Sagrada`,
|
worldState_hallowedFlame: `Llama Sagrada`,
|
||||||
worldState_hallowedNightmares: `Pesadillas Sagradas`,
|
worldState_hallowedNightmares: `Pesadillas sagradas`,
|
||||||
worldState_hallowedNightmaresRewards: `Recompensas de Pesadillas Sagradas`,
|
worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`,
|
||||||
worldState_proxyRebellion: `Rebelión Proxy`,
|
worldState_proxyRebellion: `Rebelión Proxy`,
|
||||||
worldState_proxyRebellionRewards: `Recompensas de Rebelión Proxy`,
|
worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`,
|
||||||
worldState_from_year: `de |YEAR|`,
|
worldState_from_year: `[UNTRANSLATED] from |YEAR|`,
|
||||||
worldState_pre_year: `antes de |YEAR|`,
|
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`,
|
||||||
worldState_incompatibleWith: `No compatible con:`,
|
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
|
||||||
enabled: `Activado`,
|
enabled: `Activado`,
|
||||||
disabled: `Desactivado`,
|
disabled: `Desactivado`,
|
||||||
worldState_we1: `Semana 1`,
|
worldState_we1: `Semana 1`,
|
||||||
@ -318,7 +318,7 @@ dict = {
|
|||||||
upgrade_WarframeBlastProc: `+|VAL| de escudos al matar con daño de explosión`,
|
upgrade_WarframeBlastProc: `+|VAL| de escudos al matar con daño de explosión`,
|
||||||
upgrade_WarframeCastingSpeed: `+|VAL|% de velocidad de lanzamiento de habilidades`,
|
upgrade_WarframeCastingSpeed: `+|VAL|% de velocidad de lanzamiento de habilidades`,
|
||||||
upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado corrosivo`,
|
upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado corrosivo`,
|
||||||
upgrade_WarframeCorrosiveStack: `Aumenta los stacks máximos de estado corrosivo en +|VAL|`,
|
upgrade_WarframeCorrosiveStack: `Aumenta los acumuladores máximos de estado corrosivo en +|VAL|`,
|
||||||
upgrade_WarframeCritDamageBoost: `+|VAL|% de daño crítico cuerpo a cuerpo (se duplica con más de 500 de energía)`,
|
upgrade_WarframeCritDamageBoost: `+|VAL|% de daño crítico cuerpo a cuerpo (se duplica con más de 500 de energía)`,
|
||||||
upgrade_WarframeElectricDamage: `+|VAL1|% de daño eléctrico en armas primarias (+|VAL2|% por fragmento adicional)`,
|
upgrade_WarframeElectricDamage: `+|VAL1|% de daño eléctrico en armas primarias (+|VAL2|% por fragmento adicional)`,
|
||||||
upgrade_WarframeElectricDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado eléctrico`,
|
upgrade_WarframeElectricDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado eléctrico`,
|
||||||
@ -342,30 +342,30 @@ dict = {
|
|||||||
upgrade_AvatarLootRadar: `+7m de radar de botín`,
|
upgrade_AvatarLootRadar: `+7m de radar de botín`,
|
||||||
upgrade_WeaponAmmoMax: `+15% de munición máxima`,
|
upgrade_WeaponAmmoMax: `+15% de munición máxima`,
|
||||||
upgrade_EnemyArmorReductionAura: `-3% de armadura enemiga`,
|
upgrade_EnemyArmorReductionAura: `-3% de armadura enemiga`,
|
||||||
upgrade_OnExecutionAmmo: `Recarga al 100% el cargador primario y secundario tras ejecución (Mercy)`,
|
upgrade_OnExecutionAmmo: `Recarga al 100% el cargador primario y secundario tras ejecución (Misericordia)`,
|
||||||
upgrade_OnExecutionHealthDrop: `100% de probabilidad de soltar un orbe de salud tras ejecución (Mercy)`,
|
upgrade_OnExecutionHealthDrop: `100% de probabilidad de soltar un orbe de salud tras ejecución (Misericordia)`,
|
||||||
upgrade_OnExecutionEnergyDrop: `50% de probabilidad de soltar un orbe de energía tras ejecución (Mercy)`,
|
upgrade_OnExecutionEnergyDrop: `50% de probabilidad de soltar un orbe de energía tras ejecución (Misericordia)`,
|
||||||
upgrade_OnFailHackReset: `+50% de probabilidad de reintento al fallar un hackeo`,
|
upgrade_OnFailHackReset: `+50% de probabilidad de reintento al fallar un hackeo`,
|
||||||
upgrade_DamageReductionOnHack: `75% de reducción de daño al hackear`,
|
upgrade_DamageReductionOnHack: `75% de reducción de daño al hackear`,
|
||||||
upgrade_OnExecutionReviveCompanion: `Las ejecuciones reducen el tiempo de recuperación del compañero en 15s`,
|
upgrade_OnExecutionReviveCompanion: `Las ejecuciones reducen el tiempo de recuperación del compañero en 15s`,
|
||||||
upgrade_OnExecutionParkourSpeed: `+60% de velocidad de parkour durante 15s tras una ejecución (Mercy)`,
|
upgrade_OnExecutionParkourSpeed: `+60% de velocidad de parkour durante 15s tras una ejecución`,
|
||||||
upgrade_AvatarTimeLimitIncrease: `+8s para hackear`,
|
upgrade_AvatarTimeLimitIncrease: `+8s para hackear`,
|
||||||
upgrade_ElectrifyOnHack: `Electrocuta a los enemigos en un radio de 20m al hackear`,
|
upgrade_ElectrifyOnHack: `Electrocuta a los enemigos en un radio de 20m al hackear`,
|
||||||
upgrade_OnExecutionTerrify: `50% de probabilidad de que enemigos en un radio de 15m entren en pánico por 8s tras una ejecución (Mercy)`,
|
upgrade_OnExecutionTerrify: `50% de probabilidad de que enemigos en un radio de 15m entren en pánico por 8s tras una ejecución`,
|
||||||
upgrade_OnHackLockers: `Desbloquea 5 casilleros en un radio de 20m tras hackear`,
|
upgrade_OnHackLockers: `Desbloquea 5 casilleros en un radio de 20m tras hackear`,
|
||||||
upgrade_OnExecutionBlind: `Ciega a los enemigos en un radio de 18m tras una ejecución (Mercy)`,
|
upgrade_OnExecutionBlind: `Ciega a los enemigos en un radio de 18m tras una ejecución`,
|
||||||
upgrade_OnExecutionDrainPower: `La próxima habilidad usada gana +50% de fuerza al realizar tras una ejecución (Mercy)`,
|
upgrade_OnExecutionDrainPower: `La próxima habilidad usada gana +50% de fuerza al realizar un remate (Mercy)`,
|
||||||
upgrade_OnHackSprintSpeed: `+75% de velocidad de carrera durante 15s después de hackear`,
|
upgrade_OnHackSprintSpeed: `+75% de velocidad de carrera durante 15s después de hackear`,
|
||||||
upgrade_SwiftExecute: `+50% de velocidad al ejecutar remates (Mercy)`,
|
upgrade_SwiftExecute: `+50% de velocidad al ejecutar remates (Mercy)`,
|
||||||
upgrade_OnHackInvis: `Invisible durante 15 segundos después de hackear`,
|
upgrade_OnHackInvis: `Invisible durante 15 segundos después de hackear`,
|
||||||
|
|
||||||
damageType_Electricity: `Eletricidad`,
|
damageType_Electricity: `Eletricidade`,
|
||||||
damageType_Fire: `Calor`,
|
damageType_Fire: `Ígneo`,
|
||||||
damageType_Freeze: `Frío`,
|
damageType_Freeze: `Glacial`,
|
||||||
damageType_Impact: `Impacto`,
|
damageType_Impact: `Colisivo`,
|
||||||
damageType_Magnetic: `Magnético`,
|
damageType_Magnetic: `Magnético`,
|
||||||
damageType_Poison: `Tóxico`,
|
damageType_Poison: `Tóxico`,
|
||||||
damageType_Radiation: `Radiactivo`,
|
damageType_Radiation: `Radioativo`,
|
||||||
|
|
||||||
theme_dark: `Tema Oscuro`,
|
theme_dark: `Tema Oscuro`,
|
||||||
theme_light: `Tema Claro`,
|
theme_light: `Tema Claro`,
|
||||||
|
@ -249,17 +249,17 @@ dict = {
|
|||||||
worldState_ghoulEmergence: `Зачищення від гулів`,
|
worldState_ghoulEmergence: `Зачищення від гулів`,
|
||||||
worldState_plagueStar: `Морова зірка`,
|
worldState_plagueStar: `Морова зірка`,
|
||||||
worldState_dogDays: `Спекотні дні`,
|
worldState_dogDays: `Спекотні дні`,
|
||||||
worldState_dogDaysRewards: `Нагороди Спекотних днів`,
|
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||||
worldState_wolfHunt: `Полювання на Вовка (2025)`,
|
worldState_wolfHunt: `Полювання на Вовка (2025)`,
|
||||||
worldState_longShadow: `Довга тінь`,
|
worldState_longShadow: `Довга тінь`,
|
||||||
worldState_hallowedFlame: `Священне полум'я`,
|
worldState_hallowedFlame: `Священне полум'я`,
|
||||||
worldState_hallowedNightmares: `Священні жахіття`,
|
worldState_hallowedNightmares: `Священні жахіття`,
|
||||||
worldState_hallowedNightmaresRewards: `Нагороди Священних Жахіть`,
|
worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`,
|
||||||
worldState_proxyRebellion: `Повстання роботів`,
|
worldState_proxyRebellion: `Повстання роботів`,
|
||||||
worldState_proxyRebellionRewards: `Нагороди Повстання роботів`,
|
worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`,
|
||||||
worldState_from_year: `з |YEAR|`,
|
worldState_from_year: `[UNTRANSLATED] from |YEAR|`,
|
||||||
worldState_pre_year: `до |YEAR|`,
|
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`,
|
||||||
worldState_incompatibleWith: `Несумісне з:`,
|
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
|
||||||
enabled: `Увімкнено`,
|
enabled: `Увімкнено`,
|
||||||
disabled: `Вимкнено`,
|
disabled: `Вимкнено`,
|
||||||
worldState_we1: `Вихідні 1`,
|
worldState_we1: `Вихідні 1`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user