WIP: Nemesis cheats #2729
@ -30,7 +30,8 @@ import type {
 | 
				
			|||||||
    IUpgradeClient,
 | 
					    IUpgradeClient,
 | 
				
			||||||
    IWeaponSkinClient,
 | 
					    IWeaponSkinClient,
 | 
				
			||||||
    TEquipmentKey,
 | 
					    TEquipmentKey,
 | 
				
			||||||
    TNemesisFaction
 | 
					    TNemesisFaction,
 | 
				
			||||||
 | 
					    IAccountCheats
 | 
				
			||||||
} from "../../types/inventoryTypes/inventoryTypes.ts";
 | 
					} from "../../types/inventoryTypes/inventoryTypes.ts";
 | 
				
			||||||
import { InventorySlot, LoadoutIndex } from "../../types/inventoryTypes/inventoryTypes.ts";
 | 
					import { InventorySlot, LoadoutIndex } from "../../types/inventoryTypes/inventoryTypes.ts";
 | 
				
			||||||
import { logger } from "../../utils/logger.ts";
 | 
					import { logger } from "../../utils/logger.ts";
 | 
				
			||||||
@ -39,6 +40,9 @@ import { Types } from "mongoose";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const nemesisController: RequestHandler = async (req, res) => {
 | 
					export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			||||||
    const account = await getAccountForRequest(req);
 | 
					    const account = await getAccountForRequest(req);
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 | 
				|||||||
 | 
					    const cheatProperties = Object.keys({} as IAccountCheats) as Array<keyof IAccountCheats>;
 | 
				
			||||||
 | 
					    const accountCheats = await getInventory(account._id.toString(), cheatProperties.join(" "));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((req.query.mode as string) == "f") {
 | 
					    if ((req.query.mode as string) == "f") {
 | 
				
			||||||
        const body = getJSONfromString<IValenceFusionRequest>(String(req.body));
 | 
					        const body = getJSONfromString<IValenceFusionRequest>(String(req.body));
 | 
				
			||||||
        const inventory = await getInventory(account._id.toString(), body.Category + " WeaponBin");
 | 
					        const inventory = await getInventory(account._id.toString(), body.Category + " WeaponBin");
 | 
				
			||||||
@ -55,7 +59,8 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
        // Upgrade destination damage value
 | 
					        // Upgrade destination damage value
 | 
				
			||||||
        const destDamage = 0.25 + (destFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
					        const destDamage = 0.25 + (destFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
				
			||||||
        const sourceDamage = 0.25 + (sourceFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
					        const sourceDamage = 0.25 + (sourceFingerprint.buffs[0].Value / 0x3fffffff) * (0.6 - 0.25);
 | 
				
			||||||
        let newDamage = Math.max(destDamage, sourceDamage) * 1.1;
 | 
					        const WeaponFusionMultiplier = accountCheats.nemesisWeaponFusionMultiplier ?? 1;
 | 
				
			||||||
 | 
					        let newDamage = Math.max(destDamage, sourceDamage) * 1.1 * WeaponFusionMultiplier;
 | 
				
			||||||
        if (newDamage >= 0.5794998) {
 | 
					        if (newDamage >= 0.5794998) {
 | 
				
			||||||
            newDamage = 0.6;
 | 
					            newDamage = 0.6;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -82,14 +87,18 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
        let guessResult = 0;
 | 
					        let guessResult = 0;
 | 
				
			||||||
        if (inventory.Nemesis!.Faction == "FC_INFESTATION") {
 | 
					        if (inventory.Nemesis!.Faction == "FC_INFESTATION") {
 | 
				
			||||||
            for (let i = 0; i != 3; ++i) {
 | 
					            for (let i = 0; i != 3; ++i) {
 | 
				
			||||||
                if (body.guess[i] == passcode[0]) {
 | 
					                if (body.guess[i] == passcode[0] || accountCheats.nemesisAlwaysCorrect) {
 | 
				
			||||||
                    guessResult = 1 + i;
 | 
					                    guessResult = 1 + i;
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            for (let i = 0; i != 3; ++i) {
 | 
					            for (let i = 0; i != 3; ++i) {
 | 
				
			||||||
                if (body.guess[i] == passcode[i] || body.guess[i] == GUESS_WILDCARD) {
 | 
					                if (
 | 
				
			||||||
 | 
					                    body.guess[i] == passcode[i] ||
 | 
				
			||||||
 | 
					                    body.guess[i] == GUESS_WILDCARD ||
 | 
				
			||||||
 | 
					                    accountCheats.nemesisAlwaysCorrect
 | 
				
			||||||
 | 
					                ) {
 | 
				
			||||||
                    ++guessResult;
 | 
					                    ++guessResult;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -100,10 +109,16 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
            account._id.toString(),
 | 
					            account._id.toString(),
 | 
				
			||||||
            "Nemesis LoadOutPresets CurrentLoadOutIds DataKnives Upgrades RawUpgrades"
 | 
					            "Nemesis LoadOutPresets CurrentLoadOutIds DataKnives Upgrades RawUpgrades"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const body = getJSONfromString<INemesisRequiemRequest>(String(req.body));
 | 
					        const body = getJSONfromString<INemesisRequiemRequest>(String(req.body));
 | 
				
			||||||
        if (inventory.Nemesis!.Faction == "FC_INFESTATION") {
 | 
					        if (inventory.Nemesis!.Faction == "FC_INFESTATION") {
 | 
				
			||||||
            const guess: number[] = [body.guess & 0xf, (body.guess >> 4) & 0xf, (body.guess >> 8) & 0xf];
 | 
					            const guess: number[] = [body.guess & 0xf, (body.guess >> 4) & 0xf, (body.guess >> 8) & 0xf];
 | 
				
			||||||
            const passcode = getNemesisPasscode(inventory.Nemesis!)[0];
 | 
					            const passcode = getNemesisPasscode(inventory.Nemesis!)[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (accountCheats.nemesisAlwaysCorrect) {
 | 
				
			||||||
 | 
					                guess[0] = guess[1] = guess[2] = passcode;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 
				
					
						Sainan
						commented  
			
		This is clearly too late to do this, just change  This is clearly too late to do this, just change `guess` directly. 
			
			
		 | 
				|||||||
            const result1 = passcode == guess[0] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
					            const result1 = passcode == guess[0] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
				
			||||||
            const result2 = passcode == guess[1] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
					            const result2 = passcode == guess[1] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
				
			||||||
            const result3 = passcode == guess[2] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
					            const result3 = passcode == guess[2] ? GUESS_CORRECT : GUESS_INCORRECT;
 | 
				
			||||||
@ -126,7 +141,12 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Increase antivirus if correct antivirus mod is installed
 | 
					            // Increase antivirus if correct antivirus mod is installed
 | 
				
			||||||
            const response: IKnifeResponse = {};
 | 
					            const response: IKnifeResponse = {};
 | 
				
			||||||
            if (result1 == GUESS_CORRECT || result2 == GUESS_CORRECT || result3 == GUESS_CORRECT) {
 | 
					            if (
 | 
				
			||||||
 | 
					                result1 == GUESS_CORRECT ||
 | 
				
			||||||
 | 
					                result2 == GUESS_CORRECT ||
 | 
				
			||||||
 | 
					                result3 == GUESS_CORRECT ||
 | 
				
			||||||
 | 
					                accountCheats.nemesisAlwaysCorrect
 | 
				
			||||||
 | 
					            ) {
 | 
				
			||||||
                let antivirusGain = 5;
 | 
					                let antivirusGain = 5;
 | 
				
			||||||
                const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
					                const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
 | 
				
			||||||
                const dataknifeLoadout = loadout.DATAKNIFE.id(
 | 
					                const dataknifeLoadout = loadout.DATAKNIFE.id(
 | 
				
			||||||
@ -149,7 +169,8 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                inventory.Nemesis!.HenchmenKilled += antivirusGain;
 | 
					                inventory.Nemesis!.HenchmenKilled +=
 | 
				
			||||||
 | 
					                    antivirusGain * (accountCheats.nemesisAntivirusGainMultiplier ?? 1);
 | 
				
			||||||
                if (inventory.Nemesis!.HenchmenKilled >= 100) {
 | 
					                if (inventory.Nemesis!.HenchmenKilled >= 100) {
 | 
				
			||||||
                    inventory.Nemesis!.HenchmenKilled = 100;
 | 
					                    inventory.Nemesis!.HenchmenKilled = 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -161,8 +182,10 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    ];
 | 
					                    ];
 | 
				
			||||||
                    inventory.Nemesis!.Weakened = true;
 | 
					                    inventory.Nemesis!.Weakened = true;
 | 
				
			||||||
                    const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, antivirusMods[passcode]);
 | 
					                    if (!accountCheats.nemesisAlwaysCorrect) {
 | 
				
			||||||
                    consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
					                        const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, antivirusMods[passcode]);
 | 
				
			||||||
 | 
					                        consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -192,10 +215,15 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
                    ])
 | 
					                    ])
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (accountCheats.nemesisAlwaysCorrect) {
 | 
				
			||||||
 | 
					                body.guess = GUESS_WILDCARD | (GUESS_WILDCARD << 4) | (GUESS_WILDCARD << 8);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Evaluate guess
 | 
					            // Evaluate guess
 | 
				
			||||||
            const correct =
 | 
					            const correct =
 | 
				
			||||||
                body.guess == GUESS_WILDCARD || getNemesisPasscode(inventory.Nemesis!)[body.position] == body.guess;
 | 
					                body.guess == GUESS_WILDCARD ||
 | 
				
			||||||
 | 
					                getNemesisPasscode(inventory.Nemesis!)[body.position] == body.guess ||
 | 
				
			||||||
 | 
					                accountCheats.nemesisAlwaysCorrect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Update entry
 | 
					            // Update entry
 | 
				
			||||||
            const guess = decodeNemesisGuess(
 | 
					            const guess = decodeNemesisGuess(
 | 
				
			||||||
@ -226,15 +254,22 @@ export const nemesisController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
                    const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
					                    const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
 | 
				
			||||||
                    for (let i = 3; i != 6; ++i) {
 | 
					                    for (let i = 3; i != 6; ++i) {
 | 
				
			||||||
                        //logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
 | 
					                        //logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
 | 
				
			||||||
 | 
					                        if (accountCheats.nemesisAlwaysCorrect) {
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 
				
					
						Sainan
						commented  
			
		So confused by this. Who would want a disadvantage? Why is it randomised? So confused by this. Who would want a disadvantage? Why is it randomised? 
			
			
		
				
					
						AlexisinGit
						commented  
			
		Just to simulate a speed up stabbing process, somewhere between vanilla and always correct. Honestly just my personal interest. I can remove this... Just to simulate a speed up stabbing process, somewhere between vanilla and always correct.
Honestly just my personal interest. I can remove this... 
			
			
		 | 
				|||||||
 | 
					                        }
 | 
				
			||||||
                        const upgrade = parseUpgrade(inventory, dataknifeUpgrades[i]);
 | 
					                        const upgrade = parseUpgrade(inventory, dataknifeUpgrades[i]);
 | 
				
			||||||
                        consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
					                        consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                // Guess was incorrect, increase rank
 | 
					                // Guess was incorrect, increase rank
 | 
				
			||||||
 | 
					                const nemesisExtraRank = Math.floor(Math.random() * ((inventory.nemesisGainExtraRank ?? 0) + 1));
 | 
				
			||||||
                response.RankIncrease = 1;
 | 
					                response.RankIncrease = 1;
 | 
				
			||||||
                const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
 | 
					                const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
 | 
				
			||||||
                inventory.Nemesis!.Rank = Math.min(inventory.Nemesis!.Rank + 1, manifest.systemIndexes.length - 1);
 | 
					                inventory.Nemesis!.Rank = Math.min(
 | 
				
			||||||
 | 
					                    inventory.Nemesis!.Rank + 1 + nemesisExtraRank,
 | 
				
			||||||
 | 
					                    manifest.systemIndexes.length - 1
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
                inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
 | 
					                inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            await inventory.save();
 | 
					            await inventory.save();
 | 
				
			||||||
 | 
				
			|||||||
@ -14,5 +14,5 @@ export const setAccountCheatController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
interface ISetAccountCheatRequest {
 | 
					interface ISetAccountCheatRequest {
 | 
				
			||||||
    key: keyof IAccountCheats;
 | 
					    key: keyof IAccountCheats;
 | 
				
			||||||
    value: boolean;
 | 
					    value: boolean | number;
 | 
				
			||||||
| 
							
							
								
									
	
	
	
	
	
	
	
	 
				
					
						Sainan
						commented  
			
		Absolutely not.  Absolutely not. `boolean | number`. 
			
			
		 | 
					|||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1462,6 +1462,15 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
 | 
				
			|||||||
        flawlessRelicsAlwaysGiveSilverReward: Boolean,
 | 
					        flawlessRelicsAlwaysGiveSilverReward: Boolean,
 | 
				
			||||||
        radiantRelicsAlwaysGiveGoldReward: Boolean,
 | 
					        radiantRelicsAlwaysGiveGoldReward: Boolean,
 | 
				
			||||||
        disableDailyTribute: Boolean,
 | 
					        disableDailyTribute: Boolean,
 | 
				
			||||||
 | 
					        nemesisAlwaysCorrect: Boolean,
 | 
				
			||||||
 | 
					        nemesisHenchmenKillsMultiplierGrineer: Number,
 | 
				
			||||||
 | 
					        nemesisHenchmenKillsMultiplierCorpus: Number,
 | 
				
			||||||
 | 
					        nemesisAntivirusGainMultiplier: Number,
 | 
				
			||||||
 | 
					        nemesisHintProgressMultiplierGrineer: Number,
 | 
				
			||||||
 | 
					        nemesisHintProgressMultiplierCorpus: Number,
 | 
				
			||||||
 | 
					        nemesisWeaponFusionMultiplier: Number,
 | 
				
			||||||
 | 
					        nemesisGainExtraRank: Number,
 | 
				
			||||||
 | 
					        nemesisExtraWeaponOnKill: Number,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        SubscribedToEmails: { type: Number, default: 0 },
 | 
					        SubscribedToEmails: { type: Number, default: 0 },
 | 
				
			||||||
        SubscribedToEmailsPersonalized: { type: Number, default: 0 },
 | 
					        SubscribedToEmailsPersonalized: { type: Number, default: 0 },
 | 
				
			||||||
 | 
				
			|||||||
@ -201,10 +201,33 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
            inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
 | 
					            inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (inventoryUpdates.RewardInfo.NemesisHenchmenKills && inventory.Nemesis) {
 | 
					        if (inventoryUpdates.RewardInfo.NemesisHenchmenKills && inventory.Nemesis) {
 | 
				
			||||||
            inventory.Nemesis.HenchmenKilled += inventoryUpdates.RewardInfo.NemesisHenchmenKills;
 | 
					            let NemesisHenchmenKillsMultiplier = 1;
 | 
				
			||||||
 | 
					            switch (inventory.Nemesis.Faction) {
 | 
				
			||||||
 | 
					                case "FC_GRINEER":
 | 
				
			||||||
 | 
					                    NemesisHenchmenKillsMultiplier = inventory.nemesisHenchmenKillsMultiplierGrineer ?? 1;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "FC_CORPUS":
 | 
				
			||||||
 | 
					                    NemesisHenchmenKillsMultiplier = inventory.nemesisHenchmenKillsMultiplierCorpus ?? 1;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "FC_INFESTATION":
 | 
				
			||||||
 | 
					                    //antivirus progess is controlled in nemesisController
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inventory.Nemesis.HenchmenKilled +=
 | 
				
			||||||
 | 
					                inventoryUpdates.RewardInfo.NemesisHenchmenKills * NemesisHenchmenKillsMultiplier;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (inventoryUpdates.RewardInfo.NemesisHintProgress && inventory.Nemesis) {
 | 
					        if (inventoryUpdates.RewardInfo.NemesisHintProgress && inventory.Nemesis) {
 | 
				
			||||||
            inventory.Nemesis.HintProgress += inventoryUpdates.RewardInfo.NemesisHintProgress;
 | 
					            let NemesisHintProgressMultiplier = 1;
 | 
				
			||||||
 | 
					            switch (inventory.Nemesis.Faction) {
 | 
				
			||||||
 | 
					                case "FC_GRINEER":
 | 
				
			||||||
 | 
					                    NemesisHintProgressMultiplier = inventory.nemesisHintProgressMultiplierGrineer ?? 1;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "FC_CORPUS":
 | 
				
			||||||
 | 
					                    NemesisHintProgressMultiplier = inventory.nemesisHintProgressMultiplierCorpus ?? 1;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inventory.Nemesis.HintProgress +=
 | 
				
			||||||
 | 
					                inventoryUpdates.RewardInfo.NemesisHintProgress * NemesisHintProgressMultiplier;
 | 
				
			||||||
            if (inventory.Nemesis.Faction != "FC_INFESTATION" && inventory.Nemesis.Hints.length != 3) {
 | 
					            if (inventory.Nemesis.Faction != "FC_INFESTATION" && inventory.Nemesis.Hints.length != 3) {
 | 
				
			||||||
                const progressNeeded = [35, 60, 100][inventory.Nemesis.Hints.length];
 | 
					                const progressNeeded = [35, 60, 100][inventory.Nemesis.Hints.length];
 | 
				
			||||||
                if (inventory.Nemesis.HintProgress >= progressNeeded) {
 | 
					                if (inventory.Nemesis.HintProgress >= progressNeeded) {
 | 
				
			||||||
@ -851,6 +874,22 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                            const weaponType = manifest.weapons[inventory.Nemesis.WeaponIdx];
 | 
					                            const weaponType = manifest.weapons[inventory.Nemesis.WeaponIdx];
 | 
				
			||||||
                            giveNemesisWeaponRecipe(inventory, weaponType, value.nemesisName, value.weaponLoc, profile);
 | 
					                            giveNemesisWeaponRecipe(inventory, weaponType, value.nemesisName, value.weaponLoc, profile);
 | 
				
			||||||
                            att.push(weaponType);
 | 
					                            att.push(weaponType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if (inventory.nemesisExtraWeaponOnKill && inventory.nemesisExtraWeaponOnKill > 1) {
 | 
				
			||||||
 | 
					                                const weaponManifest = manifest.weapons;
 | 
				
			||||||
 | 
					                                for (let i = 0; i < inventory.nemesisExtraWeaponOnKill; i++) {
 | 
				
			||||||
 | 
					                                    const randomIndex = Math.floor(Math.random() * weaponManifest.length);
 | 
				
			||||||
 | 
					                                    const randomWeapon = weaponManifest[randomIndex];
 | 
				
			||||||
 | 
					                                    giveNemesisWeaponRecipe(
 | 
				
			||||||
 | 
					                                        inventory,
 | 
				
			||||||
 | 
					                                        randomWeapon,
 | 
				
			||||||
 | 
					                                        value.nemesisName,
 | 
				
			||||||
 | 
					                                        value.weaponLoc,
 | 
				
			||||||
 | 
					                                        profile
 | 
				
			||||||
 | 
					                                    );
 | 
				
			||||||
 | 
					                                    att.push(randomWeapon);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        //if (value.petLoc) {
 | 
					                        //if (value.petLoc) {
 | 
				
			||||||
                        if (profile.petHead) {
 | 
					                        if (profile.petHead) {
 | 
				
			||||||
@ -891,10 +930,11 @@ export const addMissionInventoryUpdates = async (
 | 
				
			|||||||
                        att.push(rotBReward);
 | 
					                        att.push(rotBReward);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if (value.killed) {
 | 
					                        if (value.killed) {
 | 
				
			||||||
 | 
					                            const tokenMultiplier = Math.max(1, inventory.nemesisExtraWeaponOnKill ?? 1);
 | 
				
			||||||
                            countedAtt = [
 | 
					                            countedAtt = [
 | 
				
			||||||
| 
						
							
	
	
	
	
	
	
	
	 
				
					
						Sainan
						commented  
			
		Very confusing interaction of this cheat to be dual-purposed as a token multiplier. Very confusing interaction of this cheat to be dual-purposed as a token multiplier. 
			
			
		
				
					
						AlexisinGit
						commented  
			
		for G / C 1 stab = 1 weapon. for I 1 stab = at least 10 token = 1 weapon. I think to combine is better and more intuitive. People would just want more token if they have this cheat enabled anyway. for G / C 1 stab = 1 weapon.
for I 1 stab = at least 10 token  = 1 weapon.
I think to combine is better and more intuitive. People would just want more token if they have this cheat enabled anyway. 
			
			
		 | 
				|||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    ItemType: "/Lotus/Types/Items/MiscItems/CodaWeaponBucks",
 | 
					                                    ItemType: "/Lotus/Types/Items/MiscItems/CodaWeaponBucks",
 | 
				
			||||||
                                    ItemCount: getKillTokenRewardCount(inventory.Nemesis.fp)
 | 
					                                    ItemCount: getKillTokenRewardCount(inventory.Nemesis.fp) * tokenMultiplier
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            ];
 | 
					                            ];
 | 
				
			||||||
                            addMiscItems(inventory, countedAtt);
 | 
					                            addMiscItems(inventory, countedAtt);
 | 
				
			||||||
@ -1422,7 +1462,9 @@ export const addMissionRewards = async (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (inventory.Nemesis.Faction == "FC_INFESTATION") {
 | 
					            if (inventory.Nemesis.Faction == "FC_INFESTATION") {
 | 
				
			||||||
                inventory.Nemesis.MissionCount += 1;
 | 
					                inventory.Nemesis.MissionCount += 1;
 | 
				
			||||||
                inventory.Nemesis.HenchmenKilled = Math.min(inventory.Nemesis.HenchmenKilled + 5, 95); // 5 progress per mission until 95
 | 
					                let antivirusGain = 5;
 | 
				
			||||||
 | 
					                antivirusGain *= inventory.nemesisAntivirusGainMultiplier ?? 1;
 | 
				
			||||||
 | 
					                inventory.Nemesis.HenchmenKilled = Math.min(inventory.Nemesis.HenchmenKilled + antivirusGain, 95); // 5 progress per mission until 95
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                inventoryChanges.Nemesis.MissionCount ??= 0;
 | 
					                inventoryChanges.Nemesis.MissionCount ??= 0;
 | 
				
			||||||
                inventoryChanges.Nemesis.MissionCount += 1;
 | 
					                inventoryChanges.Nemesis.MissionCount += 1;
 | 
				
			||||||
 | 
				
			|||||||
@ -55,6 +55,15 @@ export interface IAccountCheats {
 | 
				
			|||||||
    flawlessRelicsAlwaysGiveSilverReward?: boolean;
 | 
					    flawlessRelicsAlwaysGiveSilverReward?: boolean;
 | 
				
			||||||
    radiantRelicsAlwaysGiveGoldReward?: boolean;
 | 
					    radiantRelicsAlwaysGiveGoldReward?: boolean;
 | 
				
			||||||
    disableDailyTribute?: boolean;
 | 
					    disableDailyTribute?: boolean;
 | 
				
			||||||
 | 
					    nemesisAlwaysCorrect?: boolean;
 | 
				
			||||||
 | 
					    nemesisHenchmenKillsMultiplierGrineer?: number;
 | 
				
			||||||
 | 
					    nemesisHenchmenKillsMultiplierCorpus?: number;
 | 
				
			||||||
 | 
					    nemesisAntivirusGainMultiplier?: number;
 | 
				
			||||||
 | 
					    nemesisHintProgressMultiplierGrineer?: number;
 | 
				
			||||||
 | 
					    nemesisHintProgressMultiplierCorpus?: number;
 | 
				
			||||||
 | 
					    nemesisWeaponFusionMultiplier?: number;
 | 
				
			||||||
 | 
					    nemesisGainExtraRank?: number;
 | 
				
			||||||
 | 
					    nemesisExtraWeaponOnKill?: number;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IInventoryDatabase
 | 
					export interface IInventoryDatabase
 | 
				
			||||||
 | 
				
			|||||||
@ -787,6 +787,68 @@
 | 
				
			|||||||
                                    <input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" />
 | 
					                                    <input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" />
 | 
				
			||||||
                                    <label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label>
 | 
					                                    <label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <div class="form-check">
 | 
				
			||||||
 | 
					                                    <input class="form-check-input" type="checkbox" id="nemesisAlwaysCorrect" />
 | 
				
			||||||
 | 
					                                    <label class="form-check-label" for="nemesisAlwaysCorrect" data-loc="cheats_nemesisAlwaysCorrect"></label>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisHenchmenKillsMultiplierGrineer" data-loc="cheats_nemesisHenchmenKillsMultiplierGrineer"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisHenchmenKillsMultiplierGrineer" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisHenchmenKillsMultiplierCorpus" data-loc="cheats_nemesisHenchmenKillsMultiplierCorpus"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisHenchmenKillsMultiplierCorpus" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisAntivirusGainMultiplier" data-loc="cheats_nemesisAntivirusGainMultiplier"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisAntivirusGainMultiplier" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisHintProgressMultiplierGrineer" data-loc="cheats_nemesisHintProgressMultiplierGrineer"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisHintProgressMultiplierGrineer" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisHintProgressMultiplierCorpus" data-loc="cheats_nemesisHintProgressMultiplierCorpus"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisHintProgressMultiplierCorpus" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisWeaponFusionMultiplier" data-loc="cheats_nemesisWeaponFusionMultiplier"></label>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisWeaponFusionMultiplier" type="number" min="-1" max="65535" data-default="1" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisGainExtraRank" data-loc="cheats_nemesisGainExtraRank"></label>
 | 
				
			||||||
 | 
					                                    <abbr data-loc-info="cheats_nemesisGainExtraRank_information"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisGainExtraRank" type="number" min="0" max="65535" data-default="0" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
 | 
					                                <form class="form-group mt-2">
 | 
				
			||||||
 | 
					                                    <label class="form-label" for="nemesisExtraWeaponOnKill" data-loc="cheats_nemesisExtraWeaponOnKill"></label>
 | 
				
			||||||
 | 
					                                    <abbr data-loc-info="cheats_nemesisExtraWeaponOnKill_information"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
 | 
				
			||||||
 | 
					                                    <div class="input-group">
 | 
				
			||||||
 | 
					                                        <input class="form-control" id="nemesisExtraWeaponOnKill" type="number" min="0" max="65535" data-default="0" />
 | 
				
			||||||
 | 
					                                        <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                </form>
 | 
				
			||||||
                                <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>
 | 
				
			||||||
 | 
				
			|||||||
@ -220,6 +220,13 @@ function updateLocElements() {
 | 
				
			|||||||
            .join(", ");
 | 
					            .join(", ");
 | 
				
			||||||
        elm.title = `${loc("worldState_incompatibleWith")} ${incWith}`;
 | 
					        elm.title = `${loc("worldState_incompatibleWith")} ${incWith}`;
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    document.querySelectorAll("[data-loc-info]").forEach(elm => {
 | 
				
			||||||
 | 
					        const incWith = elm
 | 
				
			||||||
 | 
					            .getAttribute("data-loc-info")
 | 
				
			||||||
 | 
					            .split("|")
 | 
				
			||||||
 | 
					            .map(key => loc(key));
 | 
				
			||||||
 | 
					        elm.title = `${incWith}`;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    document.querySelectorAll("[data-loc-replace]").forEach(elm => {
 | 
					    document.querySelectorAll("[data-loc-replace]").forEach(elm => {
 | 
				
			||||||
        elm.innerHTML = elm.innerHTML.replace("|VAL|", elm.getAttribute("data-loc-replace"));
 | 
					        elm.innerHTML = elm.innerHTML.replace("|VAL|", elm.getAttribute("data-loc-replace"));
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
@ -1495,7 +1502,11 @@ function updateInventory() {
 | 
				
			|||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (const elm of accountCheats) {
 | 
					            for (const elm of accountCheats) {
 | 
				
			||||||
                elm.checked = !!data[elm.id];
 | 
					                if (elm.type === "checkbox") {
 | 
				
			||||||
 | 
					                    elm.checked = !!data[elm.id];
 | 
				
			||||||
 | 
					                } else if (elm.type === "number" || elm.type === "text") {
 | 
				
			||||||
 | 
					                    elm.value = data[elm.id] !== undefined ? data[elm.id] : elm.getAttribute("data-default") || "";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
@ -2330,15 +2341,16 @@ function doIntrinsicsUnlockAll() {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
document.querySelectorAll("#account-cheats input[type=checkbox]").forEach(elm => {
 | 
					document.querySelectorAll("#account-cheats input[type=checkbox], #account-cheats input[type=number]").forEach(elm => {
 | 
				
			||||||
    elm.onchange = function () {
 | 
					    elm.onchange = function () {
 | 
				
			||||||
        revalidateAuthz().then(() => {
 | 
					        revalidateAuthz().then(() => {
 | 
				
			||||||
 | 
					            const value = elm.type === "checkbox" ? elm.checked : elm.value;
 | 
				
			||||||
            $.post({
 | 
					            $.post({
 | 
				
			||||||
                url: "/custom/setAccountCheat?" + window.authz /*+ "&wsid=" + wsid*/,
 | 
					                url: "/custom/setAccountCheat?" + window.authz /*+ "&wsid=" + wsid*/,
 | 
				
			||||||
                contentType: "application/json",
 | 
					                contentType: "application/json",
 | 
				
			||||||
                data: JSON.stringify({
 | 
					                data: JSON.stringify({
 | 
				
			||||||
                    key: elm.id,
 | 
					                    key: elm.id,
 | 
				
			||||||
                    value: elm.checked
 | 
					                    value: value
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Ändern`,
 | 
					    cheats_changeButton: `Ändern`,
 | 
				
			||||||
    cheats_markAllAsRead: `Posteingang als gelesen markieren`,
 | 
					    cheats_markAllAsRead: `Posteingang als gelesen markieren`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `[UNTRANSLATED] Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `[UNTRANSLATED] Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `[UNTRANSLATED] Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `[UNTRANSLATED] An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `[UNTRANSLATED] Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `[UNTRANSLATED] Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Weltstatus`,
 | 
					    worldState: `Weltstatus`,
 | 
				
			||||||
    worldState_creditBoost: `Event Booster: Credit`,
 | 
					    worldState_creditBoost: `Event Booster: Credit`,
 | 
				
			||||||
 | 
				
			|||||||
@ -239,6 +239,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Change`,
 | 
					    cheats_changeButton: `Change`,
 | 
				
			||||||
    cheats_markAllAsRead: `Mark Inbox As Read`,
 | 
					    cheats_markAllAsRead: `Mark Inbox As Read`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `World State`,
 | 
					    worldState: `World State`,
 | 
				
			||||||
    worldState_creditBoost: `Credit Boost`,
 | 
					    worldState_creditBoost: `Credit Boost`,
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Cambiar`,
 | 
					    cheats_changeButton: `Cambiar`,
 | 
				
			||||||
    cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
 | 
					    cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `[UNTRANSLATED] Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `[UNTRANSLATED] Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `[UNTRANSLATED] Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `[UNTRANSLATED] An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `[UNTRANSLATED] Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `[UNTRANSLATED] Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Estado del mundo`,
 | 
					    worldState: `Estado del mundo`,
 | 
				
			||||||
    worldState_creditBoost: `Potenciador de Créditos`,
 | 
					    worldState_creditBoost: `Potenciador de Créditos`,
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Changer`,
 | 
					    cheats_changeButton: `Changer`,
 | 
				
			||||||
    cheats_markAllAsRead: `Marquer la boîte de réception comme lue`,
 | 
					    cheats_markAllAsRead: `Marquer la boîte de réception comme lue`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `[UNTRANSLATED] Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `[UNTRANSLATED] Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `[UNTRANSLATED] Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `[UNTRANSLATED] An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `[UNTRANSLATED] Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `[UNTRANSLATED] Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Carte Solaire`,
 | 
					    worldState: `Carte Solaire`,
 | 
				
			||||||
    worldState_creditBoost: `Booster de Crédit`,
 | 
					    worldState_creditBoost: `Booster de Crédit`,
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Изменить`,
 | 
					    cheats_changeButton: `Изменить`,
 | 
				
			||||||
    cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
 | 
					    cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `[UNTRANSLATED] Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `[UNTRANSLATED] Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `[UNTRANSLATED] Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `[UNTRANSLATED] An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `[UNTRANSLATED] Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `[UNTRANSLATED] Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Состояние мира`,
 | 
					    worldState: `Состояние мира`,
 | 
				
			||||||
    worldState_creditBoost: `Глобальный бустер Кредитов`,
 | 
					    worldState_creditBoost: `Глобальный бустер Кредитов`,
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `Змінити`,
 | 
					    cheats_changeButton: `Змінити`,
 | 
				
			||||||
    cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
 | 
					    cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
					    cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `[UNTRANSLATED] Any Requiem / Antivirus Guess Is Correct`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier (Techrot)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `[UNTRANSLATED] Valence Fusion Multiplier (Adversary Weapons)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `[UNTRANSLATED] Extra Adversary Level`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `[UNTRANSLATED] An incorrect guess may give your adversary extra level, up to the value you put in this setting. 0 to disable.`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `[UNTRANSLATED] Extra Adversary Weapon On Vanquish`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `[UNTRANSLATED] Random adversary weapons with identical elemental bonus stat will be sent to your foundry. This works as a multiplier for Live Heartcell. 0 to disable.`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Стан світу`,
 | 
					    worldState: `Стан світу`,
 | 
				
			||||||
    worldState_creditBoost: `Глобальне посилення Кредитів`,
 | 
					    worldState_creditBoost: `Глобальне посилення Кредитів`,
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,17 @@ dict = {
 | 
				
			|||||||
    cheats_changeButton: `更改`,
 | 
					    cheats_changeButton: `更改`,
 | 
				
			||||||
    cheats_markAllAsRead: `收件箱全部标记为已读`,
 | 
					    cheats_markAllAsRead: `收件箱全部标记为已读`,
 | 
				
			||||||
    cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`,
 | 
					    cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`,
 | 
				
			||||||
 | 
					    cheats_nemesisAlwaysCorrect: `玄骸密码总是正确`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierGrineer: `怒气倍率(Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHenchmenKillsMultiplierCorpus: `怒气倍率(Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisAntivirusGainMultiplier: `杀毒进度(科腐者)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierGrineer: `密码解密进度(Grineer)`,
 | 
				
			||||||
 | 
					    cheats_nemesisHintProgressMultiplierCorpus: `密码解密进度(Corpus)`,
 | 
				
			||||||
 | 
					    cheats_nemesisWeaponFusionMultiplier: `效价融合倍率(玄骸武器)`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank: `额外玄骸等级`,
 | 
				
			||||||
 | 
					    cheats_nemesisGainExtraRank_information: `猜错密码时玄骸可能会获得额外的等级, 最多为设置里的数. 设置为0禁用`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill: `额外玄骸武器`,
 | 
				
			||||||
 | 
					    cheats_nemesisExtraWeaponOnKill_information: `击杀玄骸额外奖励随机的武器, 元素加成与原武器相同, 一同发放到铸造厂. 击杀科腐者会奖励额外倍数的代币. 设置为0禁用`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `世界状态配置`,
 | 
					    worldState: `世界状态配置`,
 | 
				
			||||||
    worldState_creditBoost: `现金加成`,
 | 
					    worldState_creditBoost: `现金加成`,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	
Don't do this. The
inventoryis available, you can use far smarter projections.