chore: move more cheats to account section #2680
@ -13,38 +13,15 @@
|
|||||||
"skipTutorial": false,
|
"skipTutorial": false,
|
||||||
"skipAllDialogue": false,
|
"skipAllDialogue": false,
|
||||||
"unlockAllScans": false,
|
"unlockAllScans": false,
|
||||||
"claimingBlueprintRefundsIngredients": false,
|
|
||||||
"dontSubtractPurchaseCreditCost": false,
|
|
||||||
"dontSubtractPurchasePlatinumCost": false,
|
|
||||||
"dontSubtractPurchaseItemCost": false,
|
|
||||||
"dontSubtractPurchaseStandingCost": false,
|
|
||||||
"dontSubtractVoidTraces": false,
|
|
||||||
"dontSubtractConsumables": false,
|
|
||||||
"unlockAllShipFeatures": false,
|
"unlockAllShipFeatures": false,
|
||||||
"unlockAllShipDecorations": false,
|
"unlockAllShipDecorations": false,
|
||||||
"unlockAllFlavourItems": false,
|
"unlockAllFlavourItems": false,
|
||||||
"unlockAllSkins": false,
|
"unlockAllSkins": false,
|
||||||
"unlockAllCapturaScenes": false,
|
"unlockAllCapturaScenes": false,
|
||||||
"universalPolarityEverywhere": false,
|
|
||||||
"unlockDoubleCapacityPotatoesEverywhere": false,
|
|
||||||
"unlockExilusEverywhere": false,
|
|
||||||
"unlockArcanesEverywhere": false,
|
|
||||||
"noDailyStandingLimits": false,
|
|
||||||
"noDailyFocusLimit": false,
|
|
||||||
"noArgonCrystalDecay": false,
|
|
||||||
"noMasteryRankUpCooldown": false,
|
|
||||||
"noVendorPurchaseLimits": false,
|
|
||||||
"noDeathMarks": false,
|
|
||||||
"noKimCooldowns": false,
|
|
||||||
"fullyStockedVendors": false,
|
"fullyStockedVendors": false,
|
||||||
|
AMelonInsideLemon marked this conversation as resolved
Outdated
|
|||||||
"baroAlwaysAvailable": false,
|
"baroAlwaysAvailable": false,
|
||||||
"baroFullyStocked": false,
|
"baroFullyStocked": false,
|
||||||
"syndicateMissionsRepeatable": false,
|
|
||||||
"unlockAllProfitTakerStages": false,
|
"unlockAllProfitTakerStages": false,
|
||||||
"instantFinishRivenChallenge": false,
|
|
||||||
"instantResourceExtractorDrones": false,
|
|
||||||
"noResourceExtractorDronesDamage": false,
|
|
||||||
"skipClanKeyCrafting": false,
|
|
||||||
"noDojoRoomBuildStage": false,
|
"noDojoRoomBuildStage": false,
|
||||||
"noDecoBuildStage": false,
|
"noDecoBuildStage": false,
|
||||||
"fastDojoRoomDestruction": false,
|
"fastDojoRoomDestruction": false,
|
||||||
|
|||||||
@ -10,11 +10,10 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
|
|||||||
import { getRandomElement } from "@/src/services/rngService";
|
import { getRandomElement } from "@/src/services/rngService";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { ExportUpgrades } from "warframe-public-export-plus";
|
import { ExportUpgrades } from "warframe-public-export-plus";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
|
|
||||||
export const activateRandomModController: RequestHandler = async (req, res) => {
|
export const activateRandomModController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId, "RawUpgrades Upgrades instantFinishRivenChallenge");
|
||||||
const request = getJSONfromString<IActiveRandomModRequest>(String(req.body));
|
const request = getJSONfromString<IActiveRandomModRequest>(String(req.body));
|
||||||
addMods(inventory, [
|
addMods(inventory, [
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ export const activateRandomModController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
const rivenType = getRandomElement(rivenRawToRealWeighted[request.ItemType])!;
|
const rivenType = getRandomElement(rivenRawToRealWeighted[request.ItemType])!;
|
||||||
const fingerprint = config.instantFinishRivenChallenge
|
const fingerprint = inventory.instantFinishRivenChallenge
|
||||||
? createUnveiledRivenFingerprint(ExportUpgrades[rivenType])
|
? createUnveiledRivenFingerprint(ExportUpgrades[rivenType])
|
||||||
: createVeiledRivenFingerprint(ExportUpgrades[rivenType]);
|
: createVeiledRivenFingerprint(ExportUpgrades[rivenType]);
|
||||||
const upgradeIndex =
|
const upgradeIndex =
|
||||||
|
|||||||
@ -23,7 +23,6 @@ import { InventorySlot, IPendingRecipeDatabase } from "@/src/types/inventoryType
|
|||||||
import { toOid2 } from "@/src/helpers/inventoryHelpers";
|
import { toOid2 } from "@/src/helpers/inventoryHelpers";
|
||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
import { IRecipe } from "warframe-public-export-plus";
|
import { IRecipe } from "warframe-public-export-plus";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
import { EquipmentFeatures, IEquipmentClient, Status } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures, IEquipmentClient, Status } from "@/src/types/equipmentTypes";
|
||||||
|
|
||||||
interface IClaimCompletedRecipeRequest {
|
interface IClaimCompletedRecipeRequest {
|
||||||
@ -247,7 +246,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
config.claimingBlueprintRefundsIngredients &&
|
inventory.claimingBlueprintRefundsIngredients &&
|
||||||
recipe.secretIngredientAction != "SIA_CREATE_KUBROW" // Can't refund the egg
|
recipe.secretIngredientAction != "SIA_CREATE_KUBROW" // Can't refund the egg
|
||||||
) {
|
) {
|
||||||
await refundRecipeIngredients(inventory, InventoryChanges, recipe, pendingRecipe);
|
await refundRecipeIngredients(inventory, InventoryChanges, recipe, pendingRecipe);
|
||||||
|
|||||||
@ -95,7 +95,10 @@ export const confirmGuildInvitationPostController: RequestHandler = async (req,
|
|||||||
await GuildMember.deleteMany({ accountId: guildMember.accountId, status: 1 });
|
await GuildMember.deleteMany({ accountId: guildMember.accountId, status: 1 });
|
||||||
|
|
||||||
// Update inventory of new member
|
// Update inventory of new member
|
||||||
const inventory = await getInventory(guildMember.accountId.toString(), "GuildId LevelKeys Recipes");
|
const inventory = await getInventory(
|
||||||
|
guildMember.accountId.toString(),
|
||||||
|
"GuildId LevelKeys Recipes skipClanKeyCrafting"
|
||||||
|
);
|
||||||
inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
|
inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
|
||||||
giveClanKey(inventory);
|
giveClanKey(inventory);
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
|
|||||||
@ -27,7 +27,7 @@ export const createGuildController: RequestHandler = async (req, res) => {
|
|||||||
rank: 0
|
rank: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
const inventory = await getInventory(account._id.toString(), "GuildId LevelKeys Recipes");
|
const inventory = await getInventory(account._id.toString(), "GuildId LevelKeys Recipes skipClanKeyCrafting");
|
||||||
inventory.GuildId = guild._id;
|
inventory.GuildId = guild._id;
|
||||||
const inventoryChanges: IInventoryChanges = {};
|
const inventoryChanges: IInventoryChanges = {};
|
||||||
giveClanKey(inventory, inventoryChanges);
|
giveClanKey(inventory, inventoryChanges);
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
||||||
import { fromStoreItem } from "@/src/services/itemDataService";
|
import { fromStoreItem } from "@/src/services/itemDataService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
@ -39,10 +38,13 @@ export const dronesController: RequestHandler = async (req, res) => {
|
|||||||
ActiveDrones: activeDrones
|
ActiveDrones: activeDrones
|
||||||
});
|
});
|
||||||
} else if ("droneId" in req.query && "systemIndex" in req.query) {
|
} else if ("droneId" in req.query && "systemIndex" in req.query) {
|
||||||
const inventory = await getInventory(accountId, "Drones");
|
const inventory = await getInventory(
|
||||||
|
accountId,
|
||||||
|
"Drones instantResourceExtractorDrones noResourceExtractorDronesDamage"
|
||||||
|
);
|
||||||
const drone = inventory.Drones.id(req.query.droneId as string)!;
|
const drone = inventory.Drones.id(req.query.droneId as string)!;
|
||||||
const droneMeta = ExportDrones[drone.ItemType];
|
const droneMeta = ExportDrones[drone.ItemType];
|
||||||
drone.DeployTime = config.instantResourceExtractorDrones ? new Date(0) : new Date();
|
drone.DeployTime = inventory.instantResourceExtractorDrones ? new Date(0) : new Date();
|
||||||
if (drone.RepairStart) {
|
if (drone.RepairStart) {
|
||||||
const repairMinutes = (Date.now() - drone.RepairStart.getTime()) / 60_000;
|
const repairMinutes = (Date.now() - drone.RepairStart.getTime()) / 60_000;
|
||||||
const hpPerMinute = droneMeta.repairRate / 60;
|
const hpPerMinute = droneMeta.repairRate / 60;
|
||||||
@ -51,11 +53,11 @@ export const dronesController: RequestHandler = async (req, res) => {
|
|||||||
}
|
}
|
||||||
drone.System = parseInt(req.query.systemIndex as string);
|
drone.System = parseInt(req.query.systemIndex as string);
|
||||||
const system = ExportSystems[drone.System - 1];
|
const system = ExportSystems[drone.System - 1];
|
||||||
drone.DamageTime = config.instantResourceExtractorDrones
|
drone.DamageTime = inventory.instantResourceExtractorDrones
|
||||||
? new Date()
|
? new Date()
|
||||||
: new Date(Date.now() + getRandomInt(3 * 3600 * 1000, 4 * 3600 * 1000));
|
: new Date(Date.now() + getRandomInt(3 * 3600 * 1000, 4 * 3600 * 1000));
|
||||||
drone.PendingDamage =
|
drone.PendingDamage =
|
||||||
!config.noResourceExtractorDronesDamage && Math.random() < system.damageChance
|
!inventory.noResourceExtractorDronesDamage && Math.random() < system.damageChance
|
||||||
? getRandomInt(system.droneDamage.minValue, system.droneDamage.maxValue)
|
? getRandomInt(system.droneDamage.minValue, system.droneDamage.maxValue)
|
||||||
: 0;
|
: 0;
|
||||||
const resource = getRandomWeightedRewardUc(system.resources, droneMeta.probabilities)!;
|
const resource = getRandomWeightedRewardUc(system.resources, droneMeta.probabilities)!;
|
||||||
|
|||||||
@ -68,7 +68,7 @@ export const inventoryController: RequestHandler = async (request, response) =>
|
|||||||
const lastLoginDay = Math.trunc(inventory.NextRefill.getTime() / 86400000) - 1;
|
const lastLoginDay = Math.trunc(inventory.NextRefill.getTime() / 86400000) - 1;
|
||||||
const daysPassed = today - lastLoginDay;
|
const daysPassed = today - lastLoginDay;
|
||||||
|
|
||||||
if (config.noArgonCrystalDecay) {
|
if (inventory.noArgonCrystalDecay) {
|
||||||
inventory.FoundToday = undefined;
|
inventory.FoundToday = undefined;
|
||||||
} else {
|
} else {
|
||||||
for (let i = 0; i != daysPassed; ++i) {
|
for (let i = 0; i != daysPassed; ++i) {
|
||||||
@ -387,7 +387,7 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.universalPolarityEverywhere) {
|
if (inventory.universalPolarityEverywhere) {
|
||||||
const Polarity: IPolarity[] = [];
|
const Polarity: IPolarity[] = [];
|
||||||
// 12 is needed for necramechs. 15 is needed for plexus/crewshipharness.
|
// 12 is needed for necramechs. 15 is needed for plexus/crewshipharness.
|
||||||
for (let i = 0; i != 15; ++i) {
|
for (let i = 0; i != 15; ++i) {
|
||||||
@ -405,7 +405,7 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.unlockDoubleCapacityPotatoesEverywhere) {
|
if (inventory.unlockDoubleCapacityPotatoesEverywhere) {
|
||||||
for (const key of equipmentKeys) {
|
for (const key of equipmentKeys) {
|
||||||
if (key in inventoryResponse) {
|
if (key in inventoryResponse) {
|
||||||
for (const equipment of inventoryResponse[key]) {
|
for (const equipment of inventoryResponse[key]) {
|
||||||
@ -416,7 +416,7 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.unlockExilusEverywhere) {
|
if (inventory.unlockExilusEverywhere) {
|
||||||
for (const key of equipmentKeys) {
|
for (const key of equipmentKeys) {
|
||||||
if (key in inventoryResponse) {
|
if (key in inventoryResponse) {
|
||||||
for (const equipment of inventoryResponse[key]) {
|
for (const equipment of inventoryResponse[key]) {
|
||||||
@ -427,7 +427,7 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.unlockArcanesEverywhere) {
|
if (inventory.unlockArcanesEverywhere) {
|
||||||
for (const key of equipmentKeys) {
|
for (const key of equipmentKeys) {
|
||||||
if (key in inventoryResponse) {
|
if (key in inventoryResponse) {
|
||||||
for (const equipment of inventoryResponse[key]) {
|
for (const equipment of inventoryResponse[key]) {
|
||||||
@ -438,14 +438,14 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.noDailyStandingLimits) {
|
if (inventory.noDailyStandingLimits) {
|
||||||
const spoofedDailyAffiliation = Math.max(999_999, 16000 + inventoryResponse.PlayerLevel * 500);
|
const spoofedDailyAffiliation = Math.max(999_999, 16000 + inventoryResponse.PlayerLevel * 500);
|
||||||
for (const key of allDailyAffiliationKeys) {
|
for (const key of allDailyAffiliationKeys) {
|
||||||
inventoryResponse[key] = spoofedDailyAffiliation;
|
inventoryResponse[key] = spoofedDailyAffiliation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.noDailyFocusLimit) {
|
if (inventory.noDailyFocusLimit) {
|
||||||
inventoryResponse.DailyFocus = Math.max(999_999, 250000 + inventoryResponse.PlayerLevel * 5000);
|
inventoryResponse.DailyFocus = Math.max(999_999, 250000 + inventoryResponse.PlayerLevel * 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,14 +2,13 @@ import { RequestHandler } from "express";
|
|||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
||||||
import { ExportRelics, IRelic } from "warframe-public-export-plus";
|
import { ExportRelics, IRelic } from "warframe-public-export-plus";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
|
|
||||||
export const projectionManagerController: RequestHandler = async (req, res) => {
|
export const projectionManagerController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId, "MiscItems dontSubtractVoidTraces");
|
||||||
const request = JSON.parse(String(req.body)) as IProjectionUpgradeRequest;
|
const request = JSON.parse(String(req.body)) as IProjectionUpgradeRequest;
|
||||||
const [era, category, currentQuality] = parseProjection(request.projectionType);
|
const [era, category, currentQuality] = parseProjection(request.projectionType);
|
||||||
const upgradeCost = config.dontSubtractVoidTraces
|
const upgradeCost = inventory.dontSubtractVoidTraces
|
||||||
? 0
|
? 0
|
||||||
: qualityNumberToCost[request.qualityTag] - qualityNumberToCost[qualityKeywordToNumber[currentQuality]];
|
: qualityNumberToCost[request.qualityTag] - qualityNumberToCost[qualityKeywordToNumber[currentQuality]];
|
||||||
const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
|
const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { config } from "@/src/services/configService";
|
|
||||||
import { addEmailItem, getDialogue, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { addEmailItem, getDialogue, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { ICompletedDialogue } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { ICompletedDialogue } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
@ -9,7 +8,7 @@ export const saveDialogueController: RequestHandler = async (req, res) => {
|
|||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const request = JSON.parse(String(req.body)) as SaveDialogueRequest;
|
const request = JSON.parse(String(req.body)) as SaveDialogueRequest;
|
||||||
if ("YearIteration" in request) {
|
if ("YearIteration" in request) {
|
||||||
const inventory = await getInventory(accountId, "DialogueHistory");
|
const inventory = await getInventory(accountId, "DialogueHistory noKimCooldowns");
|
||||||
inventory.DialogueHistory ??= {};
|
inventory.DialogueHistory ??= {};
|
||||||
inventory.DialogueHistory.YearIteration = request.YearIteration;
|
inventory.DialogueHistory.YearIteration = request.YearIteration;
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
@ -17,7 +16,7 @@ export const saveDialogueController: RequestHandler = async (req, res) => {
|
|||||||
} else {
|
} else {
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId);
|
||||||
const inventoryChanges: IInventoryChanges = {};
|
const inventoryChanges: IInventoryChanges = {};
|
||||||
const tomorrowAt0Utc = config.noKimCooldowns
|
const tomorrowAt0Utc = inventory.noKimCooldowns
|
||||||
? Date.now()
|
? Date.now()
|
||||||
: (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
|
: (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
|
||||||
inventory.DialogueHistory ??= {};
|
inventory.DialogueHistory ??= {};
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import { RequestHandler } from "express";
|
|||||||
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
import { createMessage } from "@/src/services/inboxService";
|
import { createMessage } from "@/src/services/inboxService";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
|
|
||||||
interface ITrainingResultsRequest {
|
interface ITrainingResultsRequest {
|
||||||
numLevelsGained: number;
|
numLevelsGained: number;
|
||||||
@ -23,11 +22,11 @@ const trainingResultController: RequestHandler = async (req, res): Promise<void>
|
|||||||
|
|
||||||
const trainingResults = getJSONfromString<ITrainingResultsRequest>(String(req.body));
|
const trainingResults = getJSONfromString<ITrainingResultsRequest>(String(req.body));
|
||||||
|
|
||||||
const inventory = await getInventory(accountId, "TrainingDate PlayerLevel TradesRemaining");
|
const inventory = await getInventory(accountId, "TrainingDate PlayerLevel TradesRemaining noMasteryRankUpCooldown");
|
||||||
|
|
||||||
if (trainingResults.numLevelsGained == 1) {
|
if (trainingResults.numLevelsGained == 1) {
|
||||||
let time = Date.now();
|
let time = Date.now();
|
||||||
if (!config.noMasteryRankUpCooldown) {
|
if (!inventory.noMasteryRankUpCooldown) {
|
||||||
time += unixTimesInMs.hour * 23;
|
time += unixTimesInMs.hour * 23;
|
||||||
}
|
}
|
||||||
inventory.TrainingDate = new Date(time);
|
inventory.TrainingDate = new Date(time);
|
||||||
|
|||||||
@ -1427,11 +1427,34 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|||||||
accountOwnerId: Schema.Types.ObjectId,
|
accountOwnerId: Schema.Types.ObjectId,
|
||||||
|
|
||||||
// SNS account cheats
|
// SNS account cheats
|
||||||
|
dontSubtractPurchaseCreditCost: Boolean,
|
||||||
|
dontSubtractPurchasePlatinumCost: Boolean,
|
||||||
|
dontSubtractPurchaseItemCost: Boolean,
|
||||||
|
dontSubtractPurchaseStandingCost: Boolean,
|
||||||
|
dontSubtractVoidTraces: Boolean,
|
||||||
|
dontSubtractConsumables: Boolean,
|
||||||
infiniteCredits: Boolean,
|
infiniteCredits: Boolean,
|
||||||
infinitePlatinum: Boolean,
|
infinitePlatinum: Boolean,
|
||||||
infiniteEndo: Boolean,
|
infiniteEndo: Boolean,
|
||||||
infiniteRegalAya: Boolean,
|
infiniteRegalAya: Boolean,
|
||||||
infiniteHelminthMaterials: Boolean,
|
infiniteHelminthMaterials: Boolean,
|
||||||
|
universalPolarityEverywhere: Boolean,
|
||||||
|
unlockDoubleCapacityPotatoesEverywhere: Boolean,
|
||||||
|
unlockExilusEverywhere: Boolean,
|
||||||
|
unlockArcanesEverywhere: Boolean,
|
||||||
|
syndicateMissionsRepeatable: Boolean,
|
||||||
|
instantFinishRivenChallenge: Boolean,
|
||||||
|
noDailyStandingLimits: Boolean,
|
||||||
|
noDailyFocusLimit: Boolean,
|
||||||
|
noArgonCrystalDecay: Boolean,
|
||||||
|
noMasteryRankUpCooldown: Boolean,
|
||||||
|
noVendorPurchaseLimits: Boolean,
|
||||||
|
noDeathMarks: Boolean,
|
||||||
|
noKimCooldowns: Boolean,
|
||||||
|
skipClanKeyCrafting: Boolean,
|
||||||
|
claimingBlueprintRefundsIngredients: Boolean,
|
||||||
|
instantResourceExtractorDrones: Boolean,
|
||||||
|
noResourceExtractorDronesDamage: Boolean,
|
||||||
|
|
||||||
SubscribedToEmails: { type: Number, default: 0 },
|
SubscribedToEmails: { type: Number, default: 0 },
|
||||||
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
||||||
|
|||||||
@ -20,39 +20,16 @@ export interface IConfig {
|
|||||||
skipTutorial?: boolean;
|
skipTutorial?: boolean;
|
||||||
skipAllDialogue?: boolean;
|
skipAllDialogue?: boolean;
|
||||||
unlockAllScans?: boolean;
|
unlockAllScans?: boolean;
|
||||||
claimingBlueprintRefundsIngredients?: boolean;
|
|
||||||
dontSubtractPurchaseCreditCost?: boolean;
|
|
||||||
dontSubtractPurchasePlatinumCost?: boolean;
|
|
||||||
dontSubtractPurchaseItemCost?: boolean;
|
|
||||||
dontSubtractPurchaseStandingCost?: boolean;
|
|
||||||
dontSubtractVoidTraces?: boolean;
|
|
||||||
dontSubtractConsumables?: boolean;
|
|
||||||
unlockAllShipFeatures?: boolean;
|
unlockAllShipFeatures?: boolean;
|
||||||
unlockAllShipDecorations?: boolean;
|
unlockAllShipDecorations?: boolean;
|
||||||
unlockAllFlavourItems?: boolean;
|
unlockAllFlavourItems?: boolean;
|
||||||
unlockAllSkins?: boolean;
|
unlockAllSkins?: boolean;
|
||||||
unlockAllCapturaScenes?: boolean;
|
unlockAllCapturaScenes?: boolean;
|
||||||
unlockAllDecoRecipes?: boolean;
|
unlockAllDecoRecipes?: boolean;
|
||||||
universalPolarityEverywhere?: boolean;
|
|
||||||
unlockDoubleCapacityPotatoesEverywhere?: boolean;
|
|
||||||
unlockExilusEverywhere?: boolean;
|
|
||||||
unlockArcanesEverywhere?: boolean;
|
|
||||||
noDailyStandingLimits?: boolean;
|
|
||||||
noDailyFocusLimit?: boolean;
|
|
||||||
noArgonCrystalDecay?: boolean;
|
|
||||||
noMasteryRankUpCooldown?: boolean;
|
|
||||||
noVendorPurchaseLimits?: boolean;
|
|
||||||
noDeathMarks?: boolean;
|
|
||||||
noKimCooldowns?: boolean;
|
|
||||||
fullyStockedVendors?: boolean;
|
fullyStockedVendors?: boolean;
|
||||||
baroAlwaysAvailable?: boolean;
|
baroAlwaysAvailable?: boolean;
|
||||||
baroFullyStocked?: boolean;
|
baroFullyStocked?: boolean;
|
||||||
syndicateMissionsRepeatable?: boolean;
|
|
||||||
unlockAllProfitTakerStages?: boolean;
|
unlockAllProfitTakerStages?: boolean;
|
||||||
instantFinishRivenChallenge?: boolean;
|
|
||||||
instantResourceExtractorDrones?: boolean;
|
|
||||||
noResourceExtractorDronesDamage?: boolean;
|
|
||||||
skipClanKeyCrafting?: boolean;
|
|
||||||
noDojoRoomBuildStage?: boolean;
|
noDojoRoomBuildStage?: boolean;
|
||||||
noDojoDecoBuildStage?: boolean;
|
noDojoDecoBuildStage?: boolean;
|
||||||
fastDojoRoomDestruction?: boolean;
|
fastDojoRoomDestruction?: boolean;
|
||||||
|
|||||||
@ -690,7 +690,7 @@ export const checkClanAscensionHasRequiredContributors = async (guild: TGuildDat
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const giveClanKey = (inventory: TInventoryDatabaseDocument, inventoryChanges?: IInventoryChanges): void => {
|
export const giveClanKey = (inventory: TInventoryDatabaseDocument, inventoryChanges?: IInventoryChanges): void => {
|
||||||
if (config.skipClanKeyCrafting) {
|
if (inventory.skipClanKeyCrafting) {
|
||||||
const levelKeyChanges = [
|
const levelKeyChanges = [
|
||||||
{
|
{
|
||||||
ItemType: "/Lotus/Types/Keys/DojoKey",
|
ItemType: "/Lotus/Types/Keys/DojoKey",
|
||||||
|
|||||||
@ -1299,15 +1299,19 @@ const standingLimitBinToInventoryKey: Record<
|
|||||||
|
|
||||||
export const allDailyAffiliationKeys: (keyof IDailyAffiliations)[] = Object.values(standingLimitBinToInventoryKey);
|
export const allDailyAffiliationKeys: (keyof IDailyAffiliations)[] = Object.values(standingLimitBinToInventoryKey);
|
||||||
|
|
||||||
const getStandingLimit = (inventory: IDailyAffiliations, bin: TStandingLimitBin): number => {
|
const getStandingLimit = (inventory: TInventoryDatabaseDocument, bin: TStandingLimitBin): number => {
|
||||||
if (bin == "STANDING_LIMIT_BIN_NONE" || config.noDailyStandingLimits) {
|
if (bin == "STANDING_LIMIT_BIN_NONE" || inventory.noDailyStandingLimits) {
|
||||||
return Number.MAX_SAFE_INTEGER;
|
return Number.MAX_SAFE_INTEGER;
|
||||||
}
|
}
|
||||||
return inventory[standingLimitBinToInventoryKey[bin]];
|
return inventory[standingLimitBinToInventoryKey[bin]];
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateStandingLimit = (inventory: IDailyAffiliations, bin: TStandingLimitBin, subtrahend: number): void => {
|
const updateStandingLimit = (
|
||||||
if (bin != "STANDING_LIMIT_BIN_NONE" && !config.noDailyStandingLimits) {
|
inventory: TInventoryDatabaseDocument,
|
||||||
|
bin: TStandingLimitBin,
|
||||||
|
subtrahend: number
|
||||||
|
): void => {
|
||||||
|
if (bin != "STANDING_LIMIT_BIN_NONE" && !inventory.noDailyStandingLimits) {
|
||||||
inventory[standingLimitBinToInventoryKey[bin]] -= subtrahend;
|
inventory[standingLimitBinToInventoryKey[bin]] -= subtrahend;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1922,7 +1926,7 @@ export const addFocusXpIncreases = (inventory: TInventoryDatabaseDocument, focus
|
|||||||
inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD];
|
inventory.FocusXP.AP_WARD += focusXpPlus[FocusType.AP_WARD];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.noDailyFocusLimit) {
|
if (!inventory.noDailyFocusLimit) {
|
||||||
inventory.DailyFocus -= focusXpPlus.reduce((a, b) => a + b, 0);
|
inventory.DailyFocus -= focusXpPlus.reduce((a, b) => a + b, 0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -295,7 +295,7 @@ export const addMissionInventoryUpdates = async (
|
|||||||
addMiscItems(inventory, value);
|
addMiscItems(inventory, value);
|
||||||
break;
|
break;
|
||||||
case "Consumables":
|
case "Consumables":
|
||||||
if (config.dontSubtractConsumables) {
|
if (inventory.dontSubtractConsumables) {
|
||||||
addConsumables(
|
addConsumables(
|
||||||
inventory,
|
inventory,
|
||||||
value.filter(x => x.ItemCount > 0)
|
value.filter(x => x.ItemCount > 0)
|
||||||
@ -466,7 +466,7 @@ export const addMissionInventoryUpdates = async (
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case "SyndicateId": {
|
case "SyndicateId": {
|
||||||
if (!config.syndicateMissionsRepeatable) {
|
if (!inventory.syndicateMissionsRepeatable) {
|
||||||
inventory.CompletedSyndicates.push(value);
|
inventory.CompletedSyndicates.push(value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -486,7 +486,7 @@ export const addMissionInventoryUpdates = async (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "DeathMarks": {
|
case "DeathMarks": {
|
||||||
if (!config.noDeathMarks) {
|
if (!inventory.noDeathMarks) {
|
||||||
for (const bossName of value) {
|
for (const bossName of value) {
|
||||||
if (inventory.DeathMarks.indexOf(bossName) == -1) {
|
if (inventory.DeathMarks.indexOf(bossName) == -1) {
|
||||||
// It's a new death mark; we have to say the line.
|
// It's a new death mark; we have to say the line.
|
||||||
@ -1550,7 +1550,7 @@ export const addMissionRewards = async (
|
|||||||
const dialogue = getDialogue(inventory, buddy);
|
const dialogue = getDialogue(inventory, buddy);
|
||||||
if (Date.now() >= dialogue.BountyChemExpiry.getTime()) {
|
if (Date.now() >= dialogue.BountyChemExpiry.getTime()) {
|
||||||
logger.debug(`Giving 20 chemistry for ${buddy}`);
|
logger.debug(`Giving 20 chemistry for ${buddy}`);
|
||||||
const tomorrowAt0Utc = config.noKimCooldowns
|
const tomorrowAt0Utc = inventory.noKimCooldowns
|
||||||
? Date.now()
|
? Date.now()
|
||||||
: (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
|
: (Math.trunc(Date.now() / 86400_000) + 1) * 86400_000;
|
||||||
dialogue.Chemistry += 20;
|
dialogue.Chemistry += 20;
|
||||||
|
|||||||
@ -31,7 +31,6 @@ import {
|
|||||||
ExportVendors,
|
ExportVendors,
|
||||||
TRarity
|
TRarity
|
||||||
} from "warframe-public-export-plus";
|
} from "warframe-public-export-plus";
|
||||||
import { config } from "@/src/services/configService";
|
|
||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
import { fromStoreItem, toStoreItem } from "@/src/services/itemDataService";
|
import { fromStoreItem, toStoreItem } from "@/src/services/itemDataService";
|
||||||
import { DailyDeal } from "@/src/models/worldStateModel";
|
import { DailyDeal } from "@/src/models/worldStateModel";
|
||||||
@ -63,7 +62,7 @@ const tallyVendorPurchase = (
|
|||||||
numPurchased: number,
|
numPurchased: number,
|
||||||
Expiry: Date
|
Expiry: Date
|
||||||
): void => {
|
): void => {
|
||||||
if (!config.noVendorPurchaseLimits) {
|
if (!inventory.noVendorPurchaseLimits) {
|
||||||
inventory.RecentVendorPurchases ??= [];
|
inventory.RecentVendorPurchases ??= [];
|
||||||
let vendorPurchases = inventory.RecentVendorPurchases.find(x => x.VendorType == VendorType);
|
let vendorPurchases = inventory.RecentVendorPurchases.find(x => x.VendorType == VendorType);
|
||||||
if (!vendorPurchases) {
|
if (!vendorPurchases) {
|
||||||
@ -130,12 +129,12 @@ export const handlePurchase = async (
|
|||||||
if (!offer) {
|
if (!offer) {
|
||||||
throw new Error(`unknown vendor offer: ${ItemId ? ItemId : purchaseRequest.PurchaseParams.StoreItem}`);
|
throw new Error(`unknown vendor offer: ${ItemId ? ItemId : purchaseRequest.PurchaseParams.StoreItem}`);
|
||||||
}
|
}
|
||||||
if (!config.dontSubtractPurchaseCreditCost) {
|
if (!inventory.dontSubtractPurchaseCreditCost) {
|
||||||
if (offer.RegularPrice) {
|
if (offer.RegularPrice) {
|
||||||
updateCurrency(inventory, offer.RegularPrice[0], false, prePurchaseInventoryChanges);
|
updateCurrency(inventory, offer.RegularPrice[0], false, prePurchaseInventoryChanges);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!config.dontSubtractPurchasePlatinumCost) {
|
if (!inventory.dontSubtractPurchasePlatinumCost) {
|
||||||
if (offer.PremiumPrice) {
|
if (offer.PremiumPrice) {
|
||||||
updateCurrency(inventory, offer.PremiumPrice[0], true, prePurchaseInventoryChanges);
|
updateCurrency(inventory, offer.PremiumPrice[0], true, prePurchaseInventoryChanges);
|
||||||
}
|
}
|
||||||
@ -156,7 +155,7 @@ export const handlePurchase = async (
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!config.dontSubtractPurchaseItemCost) {
|
if (!inventory.dontSubtractPurchaseItemCost) {
|
||||||
if (offer.ItemPrices) {
|
if (offer.ItemPrices) {
|
||||||
handleItemPrices(
|
handleItemPrices(
|
||||||
inventory,
|
inventory,
|
||||||
@ -223,14 +222,14 @@ export const handlePurchase = async (
|
|||||||
x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
|
x => x.ItemType == purchaseRequest.PurchaseParams.StoreItem
|
||||||
);
|
);
|
||||||
if (offer) {
|
if (offer) {
|
||||||
if (!config.dontSubtractPurchaseCreditCost) {
|
if (!inventory.dontSubtractPurchaseCreditCost) {
|
||||||
updateCurrency(inventory, offer.RegularPrice, false, purchaseResponse.InventoryChanges);
|
updateCurrency(inventory, offer.RegularPrice, false, purchaseResponse.InventoryChanges);
|
||||||
}
|
}
|
||||||
if (purchaseRequest.PurchaseParams.ExpectedPrice) {
|
if (purchaseRequest.PurchaseParams.ExpectedPrice) {
|
||||||
throw new Error(`vendor purchase should not have an expected price`);
|
throw new Error(`vendor purchase should not have an expected price`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offer.PrimePrice && !config.dontSubtractPurchaseItemCost) {
|
if (offer.PrimePrice && !inventory.dontSubtractPurchaseItemCost) {
|
||||||
const invItem: IMiscItem = {
|
const invItem: IMiscItem = {
|
||||||
ItemType: "/Lotus/Types/Items/MiscItems/PrimeBucks",
|
ItemType: "/Lotus/Types/Items/MiscItems/PrimeBucks",
|
||||||
ItemCount: offer.PrimePrice * purchaseRequest.PurchaseParams.Quantity * -1
|
ItemCount: offer.PrimePrice * purchaseRequest.PurchaseParams.Quantity * -1
|
||||||
@ -267,7 +266,7 @@ export const handlePurchase = async (
|
|||||||
Title: lastTitle
|
Title: lastTitle
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
} else if (!config.dontSubtractPurchaseStandingCost) {
|
} else if (!inventory.dontSubtractPurchaseStandingCost) {
|
||||||
const syndicate = ExportSyndicates[syndicateTag];
|
const syndicate = ExportSyndicates[syndicateTag];
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||||
if (syndicate) {
|
if (syndicate) {
|
||||||
@ -301,13 +300,13 @@ export const handlePurchase = async (
|
|||||||
const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId!];
|
const vendor = ExportVendors[purchaseRequest.PurchaseParams.SourceId!];
|
||||||
const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
|
const offer = vendor.items.find(x => x.storeItem == purchaseRequest.PurchaseParams.StoreItem);
|
||||||
if (offer) {
|
if (offer) {
|
||||||
if (typeof offer.credits == "number" && !config.dontSubtractPurchaseCreditCost) {
|
if (typeof offer.credits == "number" && !inventory.dontSubtractPurchaseCreditCost) {
|
||||||
updateCurrency(inventory, offer.credits, false, purchaseResponse.InventoryChanges);
|
updateCurrency(inventory, offer.credits, false, purchaseResponse.InventoryChanges);
|
||||||
}
|
}
|
||||||
if (typeof offer.platinum == "number" && !config.dontSubtractPurchasePlatinumCost) {
|
if (typeof offer.platinum == "number" && !inventory.dontSubtractPurchasePlatinumCost) {
|
||||||
updateCurrency(inventory, offer.platinum, true, purchaseResponse.InventoryChanges);
|
updateCurrency(inventory, offer.platinum, true, purchaseResponse.InventoryChanges);
|
||||||
}
|
}
|
||||||
if (offer.itemPrices && !config.dontSubtractPurchaseItemCost) {
|
if (offer.itemPrices && !inventory.dontSubtractPurchaseItemCost) {
|
||||||
handleItemPrices(
|
handleItemPrices(
|
||||||
inventory,
|
inventory,
|
||||||
offer.itemPrices,
|
offer.itemPrices,
|
||||||
@ -335,7 +334,7 @@ export const handlePurchase = async (
|
|||||||
);
|
);
|
||||||
if (offer) {
|
if (offer) {
|
||||||
if (offer.RegularPrice) {
|
if (offer.RegularPrice) {
|
||||||
if (!config.dontSubtractPurchaseItemCost) {
|
if (!inventory.dontSubtractPurchaseItemCost) {
|
||||||
const invItem: IMiscItem = {
|
const invItem: IMiscItem = {
|
||||||
ItemType: "/Lotus/Types/Items/MiscItems/SchismKey",
|
ItemType: "/Lotus/Types/Items/MiscItems/SchismKey",
|
||||||
ItemCount: offer.RegularPrice * purchaseRequest.PurchaseParams.Quantity * -1
|
ItemCount: offer.RegularPrice * purchaseRequest.PurchaseParams.Quantity * -1
|
||||||
@ -394,11 +393,11 @@ export const handleDailyDealPurchase = async (
|
|||||||
dailyDeal.AmountSold += 1;
|
dailyDeal.AmountSold += 1;
|
||||||
await dailyDeal.save();
|
await dailyDeal.save();
|
||||||
|
|
||||||
if (!config.dontSubtractPurchasePlatinumCost) {
|
if (!inventory.dontSubtractPurchasePlatinumCost) {
|
||||||
updateCurrency(inventory, dailyDeal.SalePrice, true, purchaseResponse.InventoryChanges);
|
updateCurrency(inventory, dailyDeal.SalePrice, true, purchaseResponse.InventoryChanges);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.noVendorPurchaseLimits) {
|
if (!inventory.noVendorPurchaseLimits) {
|
||||||
inventory.UsedDailyDeals.push(purchaseParams.StoreItem);
|
inventory.UsedDailyDeals.push(purchaseParams.StoreItem);
|
||||||
purchaseResponse.DailyDealUsed = purchaseParams.StoreItem;
|
purchaseResponse.DailyDealUsed = purchaseParams.StoreItem;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,11 +21,34 @@ export type InventoryDatabaseEquipment = {
|
|||||||
|
|
||||||
// Fields specific to SNS
|
// Fields specific to SNS
|
||||||
export interface IAccountCheats {
|
export interface IAccountCheats {
|
||||||
|
dontSubtractPurchaseCreditCost?: boolean;
|
||||||
|
dontSubtractPurchasePlatinumCost?: boolean;
|
||||||
|
dontSubtractPurchaseItemCost?: boolean;
|
||||||
|
dontSubtractPurchaseStandingCost?: boolean;
|
||||||
|
dontSubtractVoidTraces?: boolean;
|
||||||
|
dontSubtractConsumables?: boolean;
|
||||||
infiniteCredits?: boolean;
|
infiniteCredits?: boolean;
|
||||||
infinitePlatinum?: boolean;
|
infinitePlatinum?: boolean;
|
||||||
infiniteEndo?: boolean;
|
infiniteEndo?: boolean;
|
||||||
infiniteRegalAya?: boolean;
|
infiniteRegalAya?: boolean;
|
||||||
infiniteHelminthMaterials?: boolean;
|
infiniteHelminthMaterials?: boolean;
|
||||||
|
universalPolarityEverywhere?: boolean;
|
||||||
|
unlockDoubleCapacityPotatoesEverywhere?: boolean;
|
||||||
|
unlockExilusEverywhere?: boolean;
|
||||||
|
unlockArcanesEverywhere?: boolean;
|
||||||
|
syndicateMissionsRepeatable?: boolean;
|
||||||
|
instantFinishRivenChallenge?: boolean;
|
||||||
|
noDailyStandingLimits?: boolean;
|
||||||
|
noDailyFocusLimit?: boolean;
|
||||||
|
noArgonCrystalDecay?: boolean;
|
||||||
|
noMasteryRankUpCooldown?: boolean;
|
||||||
|
noVendorPurchaseLimits?: boolean;
|
||||||
|
noDeathMarks?: boolean;
|
||||||
|
noKimCooldowns?: boolean;
|
||||||
|
skipClanKeyCrafting?: boolean;
|
||||||
|
claimingBlueprintRefundsIngredients?: boolean;
|
||||||
|
instantResourceExtractorDrones?: boolean;
|
||||||
|
noResourceExtractorDronesDamage?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IInventoryDatabase
|
export interface IInventoryDatabase
|
||||||
|
|||||||
@ -663,34 +663,6 @@
|
|||||||
<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="claimingBlueprintRefundsIngredients" />
|
|
||||||
<label class="form-check-label" for="claimingBlueprintRefundsIngredients" data-loc="cheats_claimingBlueprintRefundsIngredients"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseCreditCost" />
|
|
||||||
<label class="form-check-label" for="dontSubtractPurchaseCreditCost" data-loc="cheats_dontSubtractPurchaseCreditCost"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractPurchasePlatinumCost" />
|
|
||||||
<label class="form-check-label" for="dontSubtractPurchasePlatinumCost" data-loc="cheats_dontSubtractPurchasePlatinumCost"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseItemCost" />
|
|
||||||
<label class="form-check-label" for="dontSubtractPurchaseItemCost" data-loc="cheats_dontSubtractPurchaseItemCost"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseStandingCost" />
|
|
||||||
<label class="form-check-label" for="dontSubtractPurchaseStandingCost" data-loc="cheats_dontSubtractPurchaseStandingCost"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractVoidTraces" />
|
|
||||||
<label class="form-check-label" for="dontSubtractVoidTraces" data-loc="cheats_dontSubtractVoidTraces"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="dontSubtractConsumables" />
|
|
||||||
<label class="form-check-label" for="dontSubtractConsumables" data-loc="cheats_dontSubtractConsumables"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="unlockAllShipFeatures" />
|
<input class="form-check-input" type="checkbox" id="unlockAllShipFeatures" />
|
||||||
<label class="form-check-label" for="unlockAllShipFeatures" data-loc="cheats_unlockAllShipFeatures"></label>
|
<label class="form-check-label" for="unlockAllShipFeatures" data-loc="cheats_unlockAllShipFeatures"></label>
|
||||||
@ -715,50 +687,6 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="unlockAllDecoRecipes" />
|
<input class="form-check-input" type="checkbox" id="unlockAllDecoRecipes" />
|
||||||
<label class="form-check-label" for="unlockAllDecoRecipes" data-loc="cheats_unlockAllDecoRecipes"></label>
|
<label class="form-check-label" for="unlockAllDecoRecipes" data-loc="cheats_unlockAllDecoRecipes"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="universalPolarityEverywhere" />
|
|
||||||
<label class="form-check-label" for="universalPolarityEverywhere" data-loc="cheats_universalPolarityEverywhere"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="unlockDoubleCapacityPotatoesEverywhere" />
|
|
||||||
<label class="form-check-label" for="unlockDoubleCapacityPotatoesEverywhere" data-loc="cheats_unlockDoubleCapacityPotatoesEverywhere"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="unlockExilusEverywhere" />
|
|
||||||
<label class="form-check-label" for="unlockExilusEverywhere" data-loc="cheats_unlockExilusEverywhere"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="unlockArcanesEverywhere" />
|
|
||||||
<label class="form-check-label" for="unlockArcanesEverywhere" data-loc="cheats_unlockArcanesEverywhere"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noDailyStandingLimits" />
|
|
||||||
<label class="form-check-label" for="noDailyStandingLimits" data-loc="cheats_noDailyStandingLimits"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noDailyFocusLimit" />
|
|
||||||
<label class="form-check-label" for="noDailyFocusLimit" data-loc="cheats_noDailyFocusLimit"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noArgonCrystalDecay" />
|
|
||||||
<label class="form-check-label" for="noArgonCrystalDecay" data-loc="cheats_noArgonCrystalDecay"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noMasteryRankUpCooldown" />
|
|
||||||
<label class="form-check-label" for="noMasteryRankUpCooldown" data-loc="cheats_noMasteryRankUpCooldown"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noVendorPurchaseLimits" />
|
|
||||||
<label class="form-check-label" for="noVendorPurchaseLimits" data-loc="cheats_noVendorPurchaseLimits"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noDeathMarks" />
|
|
||||||
<label class="form-check-label" for="noDeathMarks" data-loc="cheats_noDeathMarks"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noKimCooldowns" />
|
|
||||||
<label class="form-check-label" for="noKimCooldowns" data-loc="cheats_noKimCooldowns"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="fullyStockedVendors" />
|
<input class="form-check-input" type="checkbox" id="fullyStockedVendors" />
|
||||||
<label class="form-check-label" for="fullyStockedVendors" data-loc="cheats_fullyStockedVendors"></label>
|
<label class="form-check-label" for="fullyStockedVendors" data-loc="cheats_fullyStockedVendors"></label>
|
||||||
@ -771,30 +699,10 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="baroFullyStocked" />
|
<input class="form-check-input" type="checkbox" id="baroFullyStocked" />
|
||||||
<label class="form-check-label" for="baroFullyStocked" data-loc="cheats_baroFullyStocked"></label>
|
<label class="form-check-label" for="baroFullyStocked" data-loc="cheats_baroFullyStocked"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="syndicateMissionsRepeatable" />
|
|
||||||
<label class="form-check-label" for="syndicateMissionsRepeatable" data-loc="cheats_syndicateMissionsRepeatable"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="unlockAllProfitTakerStages" />
|
<input class="form-check-input" type="checkbox" id="unlockAllProfitTakerStages" />
|
||||||
<label class="form-check-label" for="unlockAllProfitTakerStages" data-loc="cheats_unlockAllProfitTakerStages"></label>
|
<label class="form-check-label" for="unlockAllProfitTakerStages" data-loc="cheats_unlockAllProfitTakerStages"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="instantFinishRivenChallenge" />
|
|
||||||
<label class="form-check-label" for="instantFinishRivenChallenge" data-loc="cheats_instantFinishRivenChallenge"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="instantResourceExtractorDrones" />
|
|
||||||
<label class="form-check-label" for="instantResourceExtractorDrones" data-loc="cheats_instantResourceExtractorDrones"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="noResourceExtractorDronesDamage" />
|
|
||||||
<label class="form-check-label" for="noResourceExtractorDronesDamage" data-loc="cheats_noResourceExtractorDronesDamage"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="skipClanKeyCrafting" />
|
|
||||||
<label class="form-check-label" for="skipClanKeyCrafting" data-loc="cheats_skipClanKeyCrafting"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="noDojoRoomBuildStage" />
|
<input class="form-check-input" type="checkbox" id="noDojoRoomBuildStage" />
|
||||||
<label class="form-check-label" for="noDojoRoomBuildStage" data-loc="cheats_noDojoRoomBuildStage"></label>
|
<label class="form-check-label" for="noDojoRoomBuildStage" data-loc="cheats_noDojoRoomBuildStage"></label>
|
||||||
@ -872,6 +780,30 @@
|
|||||||
<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" id="account-cheats">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseCreditCost" />
|
||||||
|
<label class="form-check-label" for="dontSubtractPurchaseCreditCost" data-loc="cheats_dontSubtractPurchaseCreditCost"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractPurchasePlatinumCost" />
|
||||||
|
<label class="form-check-label" for="dontSubtractPurchasePlatinumCost" data-loc="cheats_dontSubtractPurchasePlatinumCost"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseItemCost" />
|
||||||
|
<label class="form-check-label" for="dontSubtractPurchaseItemCost" data-loc="cheats_dontSubtractPurchaseItemCost"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractPurchaseStandingCost" />
|
||||||
|
<label class="form-check-label" for="dontSubtractPurchaseStandingCost" data-loc="cheats_dontSubtractPurchaseStandingCost"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractVoidTraces" />
|
||||||
|
<label class="form-check-label" for="dontSubtractVoidTraces" data-loc="cheats_dontSubtractVoidTraces"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="dontSubtractConsumables" />
|
||||||
|
<label class="form-check-label" for="dontSubtractConsumables" data-loc="cheats_dontSubtractConsumables"></label>
|
||||||
|
</div>
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
||||||
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
||||||
@ -892,6 +824,74 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="infiniteHelminthMaterials" />
|
<input class="form-check-input" type="checkbox" id="infiniteHelminthMaterials" />
|
||||||
<label class="form-check-label" for="infiniteHelminthMaterials" data-loc="cheats_infiniteHelminthMaterials"></label>
|
<label class="form-check-label" for="infiniteHelminthMaterials" data-loc="cheats_infiniteHelminthMaterials"></label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="universalPolarityEverywhere" />
|
||||||
|
<label class="form-check-label" for="universalPolarityEverywhere" data-loc="cheats_universalPolarityEverywhere"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="unlockDoubleCapacityPotatoesEverywhere" />
|
||||||
|
<label class="form-check-label" for="unlockDoubleCapacityPotatoesEverywhere" data-loc="cheats_unlockDoubleCapacityPotatoesEverywhere"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="unlockExilusEverywhere" />
|
||||||
|
<label class="form-check-label" for="unlockExilusEverywhere" data-loc="cheats_unlockExilusEverywhere"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="unlockArcanesEverywhere" />
|
||||||
|
<label class="form-check-label" for="unlockArcanesEverywhere" data-loc="cheats_unlockArcanesEverywhere"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="syndicateMissionsRepeatable" />
|
||||||
|
<label class="form-check-label" for="syndicateMissionsRepeatable" data-loc="cheats_syndicateMissionsRepeatable"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="instantFinishRivenChallenge" />
|
||||||
|
<label class="form-check-label" for="instantFinishRivenChallenge" data-loc="cheats_instantFinishRivenChallenge"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noDailyStandingLimits" />
|
||||||
|
<label class="form-check-label" for="noDailyStandingLimits" data-loc="cheats_noDailyStandingLimits"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noDailyFocusLimit" />
|
||||||
|
<label class="form-check-label" for="noDailyFocusLimit" data-loc="cheats_noDailyFocusLimit"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noArgonCrystalDecay" />
|
||||||
|
<label class="form-check-label" for="noArgonCrystalDecay" data-loc="cheats_noArgonCrystalDecay"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noMasteryRankUpCooldown" />
|
||||||
|
<label class="form-check-label" for="noMasteryRankUpCooldown" data-loc="cheats_noMasteryRankUpCooldown"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noVendorPurchaseLimits" />
|
||||||
|
<label class="form-check-label" for="noVendorPurchaseLimits" data-loc="cheats_noVendorPurchaseLimits"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noDeathMarks" />
|
||||||
|
<label class="form-check-label" for="noDeathMarks" data-loc="cheats_noDeathMarks"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noKimCooldowns" />
|
||||||
|
<label class="form-check-label" for="noKimCooldowns" data-loc="cheats_noKimCooldowns"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="noResourceExtractorDronesDamage" />
|
||||||
|
<label class="form-check-label" for="noResourceExtractorDronesDamage" data-loc="cheats_noResourceExtractorDronesDamage"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="instantResourceExtractorDrones" />
|
||||||
|
<label class="form-check-label" for="instantResourceExtractorDrones" data-loc="cheats_instantResourceExtractorDrones"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="skipClanKeyCrafting" />
|
||||||
|
<label class="form-check-label" for="skipClanKeyCrafting" data-loc="cheats_skipClanKeyCrafting"></label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="claimingBlueprintRefundsIngredients" />
|
||||||
|
<label class="form-check-label" for="claimingBlueprintRefundsIngredients" data-loc="cheats_claimingBlueprintRefundsIngredients"></label>
|
||||||
|
</div>
|
||||||
<div class="mt-2 mb-2 d-flex flex-wrap gap-2">
|
<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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user
You removed these from configService but not here: