forked from OpenWF/SpaceNinjaServer
		
	Compare commits
	
		
			12 Commits
		
	
	
		
			987b5b98ff
			...
			64b43fcccf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 64b43fcccf | |||
| e407262cf8 | |||
| 00e57c43df | |||
| 2ab9f39507 | |||
| b60723ef54 | |||
| b3bf291d10 | |||
| db86e2d265 | |||
| f6cb8414c1 | |||
| ba3df4bdbc | |||
| 8feb3a5b3c | |||
| 66f3d65d77 | |||
| b18f06087b | 
@ -1,5 +1,6 @@
 | 
				
			|||||||
import { RequestHandler } from "express";
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { sendWsBroadcastTo } from "@/src/services/wsService";
 | 
				
			||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
					import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
 | 
					import { addMiscItems, getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
					import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
				
			||||||
@ -73,4 +74,5 @@ export const gildWeaponController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
        InventoryChanges: inventoryChanges,
 | 
					        InventoryChanges: inventoryChanges,
 | 
				
			||||||
        AffiliationMods: affiliationMods
 | 
					        AffiliationMods: affiliationMods
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    sendWsBroadcastTo(accountId, { update_inventory: true });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
import { RequestHandler } from "express";
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { sendWsBroadcastTo } from "@/src/services/wsService";
 | 
				
			||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
					import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    getInventory,
 | 
					    getInventory,
 | 
				
			||||||
@ -194,4 +195,5 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
 | 
				
			|||||||
            MiscItems: miscItemChanges
 | 
					            MiscItems: miscItemChanges
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    sendWsBroadcastTo(accountId, { update_inventory: true });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -15,6 +15,7 @@ import {
 | 
				
			|||||||
} from "@/src/services/inventoryService";
 | 
					} from "@/src/services/inventoryService";
 | 
				
			||||||
import { getDefaultUpgrades } from "@/src/services/itemDataService";
 | 
					import { getDefaultUpgrades } from "@/src/services/itemDataService";
 | 
				
			||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { sendWsBroadcastTo } from "@/src/services/wsService";
 | 
				
			||||||
import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
 | 
					import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
 | 
				
			||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
					import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
				
			||||||
import { EquipmentFeatures } from "@/src/types/equipmentTypes";
 | 
					import { EquipmentFeatures } from "@/src/types/equipmentTypes";
 | 
				
			||||||
@ -68,6 +69,7 @@ export const modularWeaponSaleController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
        res.json({
 | 
					        res.json({
 | 
				
			||||||
            InventoryChanges: inventoryChanges
 | 
					            InventoryChanges: inventoryChanges
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					        sendWsBroadcastTo(accountId, { update_inventory: true });
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        throw new Error(`unknown modularWeaponSale op: ${String(req.query.op)}`);
 | 
					        throw new Error(`unknown modularWeaponSale op: ${String(req.query.op)}`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -16,15 +16,28 @@ export const playerSkillsController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
    inventory.PlayerSkills[request.Skill as keyof IPlayerSkills]++;
 | 
					    inventory.PlayerSkills[request.Skill as keyof IPlayerSkills]++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const inventoryChanges: IInventoryChanges = {};
 | 
					    const inventoryChanges: IInventoryChanges = {};
 | 
				
			||||||
    if (request.Skill == "LPS_COMMAND" && inventory.PlayerSkills.LPS_COMMAND == 9) {
 | 
					    if (request.Skill == "LPS_COMMAND") {
 | 
				
			||||||
        const consumablesChanges = [
 | 
					        if (inventory.PlayerSkills.LPS_COMMAND == 9) {
 | 
				
			||||||
            {
 | 
					            const consumablesChanges = [
 | 
				
			||||||
                ItemType: "/Lotus/Types/Restoratives/Consumable/CrewmateBall",
 | 
					                {
 | 
				
			||||||
                ItemCount: 1
 | 
					                    ItemType: "/Lotus/Types/Restoratives/Consumable/CrewmateBall",
 | 
				
			||||||
            }
 | 
					                    ItemCount: 1
 | 
				
			||||||
        ];
 | 
					                }
 | 
				
			||||||
        addConsumables(inventory, consumablesChanges);
 | 
					            ];
 | 
				
			||||||
        inventoryChanges.Consumables = consumablesChanges;
 | 
					            addConsumables(inventory, consumablesChanges);
 | 
				
			||||||
 | 
					            inventoryChanges.Consumables = consumablesChanges;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else if (request.Skill == "LPS_DRIFT_RIDING") {
 | 
				
			||||||
 | 
					        if (inventory.PlayerSkills.LPS_DRIFT_RIDING == 9) {
 | 
				
			||||||
 | 
					            const consumablesChanges = [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ItemType: "/Lotus/Types/Restoratives/ErsatzSummon",
 | 
				
			||||||
 | 
					                    ItemCount: 1
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					            addConsumables(inventory, consumablesChanges);
 | 
				
			||||||
 | 
					            inventoryChanges.Consumables = consumablesChanges;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await inventory.save();
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ export const projectionManagerController: RequestHandler = async (req, res) => {
 | 
				
			|||||||
    const [era, category, currentQuality] = parseProjection(request.projectionType);
 | 
					    const [era, category, currentQuality] = parseProjection(request.projectionType);
 | 
				
			||||||
    const upgradeCost = config.dontSubtractVoidTraces
 | 
					    const upgradeCost = config.dontSubtractVoidTraces
 | 
				
			||||||
        ? 0
 | 
					        ? 0
 | 
				
			||||||
        : (request.qualityTag - qualityKeywordToNumber[currentQuality]) * 25;
 | 
					        : qualityNumberToCost[request.qualityTag] - qualityNumberToCost[qualityKeywordToNumber[currentQuality]];
 | 
				
			||||||
    const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
 | 
					    const newProjectionType = findProjection(era, category, qualityNumberToKeyword[request.qualityTag]);
 | 
				
			||||||
    addMiscItems(inventory, [
 | 
					    addMiscItems(inventory, [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -49,6 +49,7 @@ const qualityKeywordToNumber: Record<VoidProjectionQuality, number> = {
 | 
				
			|||||||
    VPQ_GOLD: 2,
 | 
					    VPQ_GOLD: 2,
 | 
				
			||||||
    VPQ_PLATINUM: 3
 | 
					    VPQ_PLATINUM: 3
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					const qualityNumberToCost = [0, 25, 50, 100];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// e.g. "/Lotus/Types/Game/Projections/T2VoidProjectionProteaPrimeDBronze" -> ["Lith", "W5", "VPQ_BRONZE"]
 | 
					// e.g. "/Lotus/Types/Game/Projections/T2VoidProjectionProteaPrimeDBronze" -> ["Lith", "W5", "VPQ_BRONZE"]
 | 
				
			||||||
const parseProjection = (typeName: string): [string, string, VoidProjectionQuality] => {
 | 
					const parseProjection = (typeName: string): [string, string, VoidProjectionQuality] => {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
				
			||||||
 | 
					import { getInventory } from "@/src/services/inventoryService";
 | 
				
			||||||
 | 
					import { RequestHandler } from "express";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DEFAULT_UPGRADE_EXPIRY_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const editSuitInvigorationUpgradeController: RequestHandler = async (req, res) => {
 | 
				
			||||||
 | 
					    const accountId = await getAccountIdForRequest(req);
 | 
				
			||||||
 | 
					    const { oid, data } = req.body as {
 | 
				
			||||||
 | 
					        oid: string;
 | 
				
			||||||
 | 
					        data?: {
 | 
				
			||||||
 | 
					            DefensiveUpgrade: string;
 | 
				
			||||||
 | 
					            OffensiveUpgrade: string;
 | 
				
			||||||
 | 
					            UpgradesExpiry?: number;
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    const inventory = await getInventory(accountId);
 | 
				
			||||||
 | 
					    const suit = inventory.Suits.id(oid)!;
 | 
				
			||||||
 | 
					    if (data) {
 | 
				
			||||||
 | 
					        suit.DefensiveUpgrade = data.DefensiveUpgrade;
 | 
				
			||||||
 | 
					        suit.OffensiveUpgrade = data.OffensiveUpgrade;
 | 
				
			||||||
 | 
					        if (data.UpgradesExpiry) {
 | 
				
			||||||
 | 
					            suit.UpgradesExpiry = new Date(data.UpgradesExpiry);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            suit.UpgradesExpiry = new Date(Date.now() + DEFAULT_UPGRADE_EXPIRY_MS);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        suit.DefensiveUpgrade = undefined;
 | 
				
			||||||
 | 
					        suit.OffensiveUpgrade = undefined;
 | 
				
			||||||
 | 
					        suit.UpgradesExpiry = undefined;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    await inventory.save();
 | 
				
			||||||
 | 
					    res.end();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -4,8 +4,12 @@ import { typeCountSchema } from "@/src/models/inventoryModels/inventoryModel";
 | 
				
			|||||||
import { IMongoDate, IOid, ITypeCount } from "@/src/types/commonTypes";
 | 
					import { IMongoDate, IOid, ITypeCount } from "@/src/types/commonTypes";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IMessageClient
 | 
					export interface IMessageClient
 | 
				
			||||||
    extends Omit<IMessageDatabase, "_id" | "date" | "startDate" | "endDate" | "ownerId" | "attVisualOnly" | "expiry"> {
 | 
					    extends Omit<
 | 
				
			||||||
 | 
					        IMessageDatabase,
 | 
				
			||||||
 | 
					        "_id" | "globaUpgradeId" | "date" | "startDate" | "endDate" | "ownerId" | "attVisualOnly" | "expiry"
 | 
				
			||||||
 | 
					    > {
 | 
				
			||||||
    _id?: IOid;
 | 
					    _id?: IOid;
 | 
				
			||||||
 | 
					    globaUpgradeId?: IOid; // [sic]
 | 
				
			||||||
    date: IMongoDate;
 | 
					    date: IMongoDate;
 | 
				
			||||||
    startDate?: IMongoDate;
 | 
					    startDate?: IMongoDate;
 | 
				
			||||||
    endDate?: IMongoDate;
 | 
					    endDate?: IMongoDate;
 | 
				
			||||||
@ -14,6 +18,7 @@ export interface IMessageClient
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export interface IMessageDatabase extends IMessage {
 | 
					export interface IMessageDatabase extends IMessage {
 | 
				
			||||||
    ownerId: Types.ObjectId;
 | 
					    ownerId: Types.ObjectId;
 | 
				
			||||||
 | 
					    globaUpgradeId?: Types.ObjectId; // [sic]
 | 
				
			||||||
    date: Date; //created at
 | 
					    date: Date; //created at
 | 
				
			||||||
    attVisualOnly?: boolean;
 | 
					    attVisualOnly?: boolean;
 | 
				
			||||||
    _id: Types.ObjectId;
 | 
					    _id: Types.ObjectId;
 | 
				
			||||||
@ -101,6 +106,7 @@ const giftSchema = new Schema<IGift>(
 | 
				
			|||||||
const messageSchema = new Schema<IMessageDatabase>(
 | 
					const messageSchema = new Schema<IMessageDatabase>(
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ownerId: Schema.Types.ObjectId,
 | 
					        ownerId: Schema.Types.ObjectId,
 | 
				
			||||||
 | 
					        globaUpgradeId: Schema.Types.ObjectId,
 | 
				
			||||||
        sndr: String,
 | 
					        sndr: String,
 | 
				
			||||||
        msg: String,
 | 
					        msg: String,
 | 
				
			||||||
        cinematic: String,
 | 
					        cinematic: String,
 | 
				
			||||||
@ -154,6 +160,10 @@ messageSchema.set("toJSON", {
 | 
				
			|||||||
        delete returnedObject.attVisualOnly;
 | 
					        delete returnedObject.attVisualOnly;
 | 
				
			||||||
        delete returnedObject.expiry;
 | 
					        delete returnedObject.expiry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (messageDatabase.globaUpgradeId) {
 | 
				
			||||||
 | 
					            messageClient.globaUpgradeId = toOid(messageDatabase.globaUpgradeId);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        messageClient.date = toMongoDate(messageDatabase.date);
 | 
					        messageClient.date = toMongoDate(messageDatabase.date);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (messageDatabase.startDate && messageDatabase.endDate) {
 | 
					        if (messageDatabase.startDate && messageDatabase.endDate) {
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,7 @@ import { setEvolutionProgressController } from "@/src/controllers/custom/setEvol
 | 
				
			|||||||
import { setBoosterController } from "@/src/controllers/custom/setBoosterController";
 | 
					import { setBoosterController } from "@/src/controllers/custom/setBoosterController";
 | 
				
			||||||
import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController";
 | 
					import { updateFingerprintController } from "@/src/controllers/custom/updateFingerprintController";
 | 
				
			||||||
import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController";
 | 
					import { changeModularPartsController } from "@/src/controllers/custom/changeModularPartsController";
 | 
				
			||||||
 | 
					import { editSuitInvigorationUpgradeController } from "@/src/controllers/custom/editSuitInvigorationUpgradeController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
 | 
					import { getConfigController, setConfigController } from "@/src/controllers/custom/configController";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -57,6 +58,7 @@ customRouter.post("/setEvolutionProgress", setEvolutionProgressController);
 | 
				
			|||||||
customRouter.post("/setBooster", setBoosterController);
 | 
					customRouter.post("/setBooster", setBoosterController);
 | 
				
			||||||
customRouter.post("/updateFingerprint", updateFingerprintController);
 | 
					customRouter.post("/updateFingerprint", updateFingerprintController);
 | 
				
			||||||
customRouter.post("/changeModularParts", changeModularPartsController);
 | 
					customRouter.post("/changeModularParts", changeModularPartsController);
 | 
				
			||||||
 | 
					customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
customRouter.post("/getConfig", getConfigController);
 | 
					customRouter.post("/getConfig", getConfigController);
 | 
				
			||||||
customRouter.post("/setConfig", setConfigController);
 | 
					customRouter.post("/setConfig", setConfigController);
 | 
				
			||||||
 | 
				
			|||||||
@ -71,7 +71,17 @@ export const validateConfig = (): void => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const syncConfigWithDatabase = (): void => {
 | 
					export const syncConfigWithDatabase = (): void => {
 | 
				
			||||||
    // Event messages are deleted after endDate. Since we don't use beginDate/endDate and instead have config toggles, we need to delete the messages once those bools are false.
 | 
					    // Event messages are deleted after endDate. Since we don't use beginDate/endDate and instead have config toggles, we need to delete the messages once those bools are false.
 | 
				
			||||||
 | 
					    // Also, for some reason, I can't just do `Inbox.deleteMany(...)`; - it needs this whole circus.
 | 
				
			||||||
 | 
					    if (!config.worldState?.creditBoost) {
 | 
				
			||||||
 | 
					        void Inbox.deleteMany({ globaUpgradeId: "5b23106f283a555109666672" }).then(() => {});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!config.worldState?.affinityBoost) {
 | 
				
			||||||
 | 
					        void Inbox.deleteMany({ globaUpgradeId: "5b23106f283a555109666673" }).then(() => {});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!config.worldState?.resourceBoost) {
 | 
				
			||||||
 | 
					        void Inbox.deleteMany({ globaUpgradeId: "5b23106f283a555109666674" }).then(() => {});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (!config.worldState?.galleonOfGhouls) {
 | 
					    if (!config.worldState?.galleonOfGhouls) {
 | 
				
			||||||
        void Inbox.deleteMany({ goalTag: "GalleonRobbery" }).then(() => {}); // For some reason, I can't just do `Inbox.deleteMany(...)`; it needs this whole circus.
 | 
					        void Inbox.deleteMany({ goalTag: "GalleonRobbery" }).then(() => {});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -35,7 +35,7 @@ export const createNewEventMessages = async (req: Request): Promise<void> => {
 | 
				
			|||||||
    const baroIndex = Math.trunc((Date.now() - 910800000) / (unixTimesInMs.day * 14));
 | 
					    const baroIndex = Math.trunc((Date.now() - 910800000) / (unixTimesInMs.day * 14));
 | 
				
			||||||
    const baroStart = baroIndex * (unixTimesInMs.day * 14) + 910800000;
 | 
					    const baroStart = baroIndex * (unixTimesInMs.day * 14) + 910800000;
 | 
				
			||||||
    const baroActualStart = baroStart + unixTimesInMs.day * (config.baroAlwaysAvailable ? 0 : 12);
 | 
					    const baroActualStart = baroStart + unixTimesInMs.day * (config.baroAlwaysAvailable ? 0 : 12);
 | 
				
			||||||
    if (account.LatestEventMessageDate.getTime() < baroActualStart) {
 | 
					    if (Date.now() >= baroActualStart && account.LatestEventMessageDate.getTime() < baroActualStart) {
 | 
				
			||||||
        newEventMessages.push({
 | 
					        newEventMessages.push({
 | 
				
			||||||
            sndr: "/Lotus/Language/G1Quests/VoidTraderName",
 | 
					            sndr: "/Lotus/Language/G1Quests/VoidTraderName",
 | 
				
			||||||
            sub: "/Lotus/Language/CommunityMessages/VoidTraderAppearanceTitle",
 | 
					            sub: "/Lotus/Language/CommunityMessages/VoidTraderAppearanceTitle",
 | 
				
			||||||
@ -55,20 +55,77 @@ export const createNewEventMessages = async (req: Request): Promise<void> => {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // BUG: Deleting the inbox message manually means it'll just be automatically re-created. This is because we don't use startDate/endDate for these config-toggled events.
 | 
					    // BUG: Deleting the inbox message manually means it'll just be automatically re-created. This is because we don't use startDate/endDate for these config-toggled events.
 | 
				
			||||||
    if (config.worldState?.galleonOfGhouls) {
 | 
					    const promises = [];
 | 
				
			||||||
        if (!(await Inbox.exists({ ownerId: account._id, goalTag: "GalleonRobbery" }))) {
 | 
					    if (config.worldState?.creditBoost) {
 | 
				
			||||||
            newEventMessages.push({
 | 
					        promises.push(
 | 
				
			||||||
                sndr: "/Lotus/Language/Bosses/BossCouncilorVayHek",
 | 
					            (async (): Promise<void> => {
 | 
				
			||||||
                sub: "/Lotus/Language/Events/GalleonRobberyIntroMsgTitle",
 | 
					                if (!(await Inbox.exists({ ownerId: account._id, globaUpgradeId: "5b23106f283a555109666672" }))) {
 | 
				
			||||||
                msg: "/Lotus/Language/Events/GalleonRobberyIntroMsgDesc",
 | 
					                    newEventMessages.push({
 | 
				
			||||||
                icon: "/Lotus/Interface/Icons/Npcs/VayHekPortrait.png",
 | 
					                        globaUpgradeId: new Types.ObjectId("5b23106f283a555109666672"),
 | 
				
			||||||
                transmission: "/Lotus/Sounds/Dialog/GalleonOfGhouls/DGhoulsWeekOneInbox0010VayHek",
 | 
					                        sndr: "/Lotus/Language/Menu/Mailbox_WarframeSender",
 | 
				
			||||||
                att: ["/Lotus/Upgrades/Skins/Events/OgrisOldSchool"],
 | 
					                        sub: "/Lotus/Language/Items/EventDoubleCreditsName",
 | 
				
			||||||
                startDate: new Date(),
 | 
					                        msg: "/Lotus/Language/Items/EventDoubleCreditsDesc",
 | 
				
			||||||
                goalTag: "GalleonRobbery"
 | 
					                        icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
 | 
				
			||||||
            });
 | 
					                        startDate: new Date(),
 | 
				
			||||||
        }
 | 
					                        CrossPlatform: true
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (config.worldState?.affinityBoost) {
 | 
				
			||||||
 | 
					        promises.push(
 | 
				
			||||||
 | 
					            (async (): Promise<void> => {
 | 
				
			||||||
 | 
					                if (!(await Inbox.exists({ ownerId: account._id, globaUpgradeId: "5b23106f283a555109666673" }))) {
 | 
				
			||||||
 | 
					                    newEventMessages.push({
 | 
				
			||||||
 | 
					                        globaUpgradeId: new Types.ObjectId("5b23106f283a555109666673"),
 | 
				
			||||||
 | 
					                        sndr: "/Lotus/Language/Menu/Mailbox_WarframeSender",
 | 
				
			||||||
 | 
					                        sub: "/Lotus/Language/Items/EventDoubleAffinityName",
 | 
				
			||||||
 | 
					                        msg: "/Lotus/Language/Items/EventDoubleAffinityDesc",
 | 
				
			||||||
 | 
					                        icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
 | 
				
			||||||
 | 
					                        startDate: new Date(),
 | 
				
			||||||
 | 
					                        CrossPlatform: true
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config.worldState?.resourceBoost) {
 | 
				
			||||||
 | 
					        promises.push(
 | 
				
			||||||
 | 
					            (async (): Promise<void> => {
 | 
				
			||||||
 | 
					                if (!(await Inbox.exists({ ownerId: account._id, globaUpgradeId: "5b23106f283a555109666674" }))) {
 | 
				
			||||||
 | 
					                    newEventMessages.push({
 | 
				
			||||||
 | 
					                        globaUpgradeId: new Types.ObjectId("5b23106f283a555109666674"),
 | 
				
			||||||
 | 
					                        sndr: "/Lotus/Language/Menu/Mailbox_WarframeSender",
 | 
				
			||||||
 | 
					                        sub: "/Lotus/Language/Items/EventDoubleResourceName",
 | 
				
			||||||
 | 
					                        msg: "/Lotus/Language/Items/EventDoubleResourceDesc",
 | 
				
			||||||
 | 
					                        icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
 | 
				
			||||||
 | 
					                        startDate: new Date(),
 | 
				
			||||||
 | 
					                        CrossPlatform: true
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config.worldState?.galleonOfGhouls) {
 | 
				
			||||||
 | 
					        promises.push(
 | 
				
			||||||
 | 
					            (async (): Promise<void> => {
 | 
				
			||||||
 | 
					                if (!(await Inbox.exists({ ownerId: account._id, goalTag: "GalleonRobbery" }))) {
 | 
				
			||||||
 | 
					                    newEventMessages.push({
 | 
				
			||||||
 | 
					                        sndr: "/Lotus/Language/Bosses/BossCouncilorVayHek",
 | 
				
			||||||
 | 
					                        sub: "/Lotus/Language/Events/GalleonRobberyIntroMsgTitle",
 | 
				
			||||||
 | 
					                        msg: "/Lotus/Language/Events/GalleonRobberyIntroMsgDesc",
 | 
				
			||||||
 | 
					                        icon: "/Lotus/Interface/Icons/Npcs/VayHekPortrait.png",
 | 
				
			||||||
 | 
					                        transmission: "/Lotus/Sounds/Dialog/GalleonOfGhouls/DGhoulsWeekOneInbox0010VayHek",
 | 
				
			||||||
 | 
					                        att: ["/Lotus/Upgrades/Skins/Events/OgrisOldSchool"],
 | 
				
			||||||
 | 
					                        startDate: new Date(),
 | 
				
			||||||
 | 
					                        goalTag: "GalleonRobbery"
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            })()
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    await Promise.all(promises);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (newEventMessages.length === 0) {
 | 
					    if (newEventMessages.length === 0) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
				
			|||||||
@ -1662,28 +1662,34 @@ export const applyClientEquipmentUpdates = (
 | 
				
			|||||||
            item.XP ??= 0;
 | 
					            item.XP ??= 0;
 | 
				
			||||||
            item.XP += XP;
 | 
					            item.XP += XP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let xpItemType = item.ItemType;
 | 
					            if (
 | 
				
			||||||
            if (item.ModularParts) {
 | 
					                categoryName != "SpecialItems" ||
 | 
				
			||||||
                for (const part of item.ModularParts) {
 | 
					                item.ItemType == "/Lotus/Powersuits/Khora/Kavat/KhoraKavatPowerSuit" ||
 | 
				
			||||||
                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | 
					                item.ItemType == "/Lotus/Powersuits/Khora/Kavat/KhoraPrimeKavatPowerSuit"
 | 
				
			||||||
                    const partType = ExportWeapons[part]?.partType;
 | 
					            ) {
 | 
				
			||||||
                    if (partType !== undefined && xpEarningParts.indexOf(partType) != -1) {
 | 
					                let xpItemType = item.ItemType;
 | 
				
			||||||
                        xpItemType = part;
 | 
					                if (item.ModularParts) {
 | 
				
			||||||
                        break;
 | 
					                    for (const part of item.ModularParts) {
 | 
				
			||||||
 | 
					                        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | 
				
			||||||
 | 
					                        const partType = ExportWeapons[part]?.partType;
 | 
				
			||||||
 | 
					                        if (partType !== undefined && xpEarningParts.indexOf(partType) != -1) {
 | 
				
			||||||
 | 
					                            xpItemType = part;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                    logger.debug(`adding xp to ${xpItemType} for modular item ${fromOid(ItemId)} (${item.ItemType})`);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                logger.debug(`adding xp to ${xpItemType} for modular item ${fromOid(ItemId)} (${item.ItemType})`);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const xpinfoIndex = inventory.XPInfo.findIndex(x => x.ItemType == xpItemType);
 | 
					                const xpinfoIndex = inventory.XPInfo.findIndex(x => x.ItemType == xpItemType);
 | 
				
			||||||
            if (xpinfoIndex !== -1) {
 | 
					                if (xpinfoIndex !== -1) {
 | 
				
			||||||
                const xpinfo = inventory.XPInfo[xpinfoIndex];
 | 
					                    const xpinfo = inventory.XPInfo[xpinfoIndex];
 | 
				
			||||||
                xpinfo.XP += XP;
 | 
					                    xpinfo.XP += XP;
 | 
				
			||||||
            } else {
 | 
					                } else {
 | 
				
			||||||
                inventory.XPInfo.push({
 | 
					                    inventory.XPInfo.push({
 | 
				
			||||||
                    ItemType: xpItemType,
 | 
					                        ItemType: xpItemType,
 | 
				
			||||||
                    XP: XP
 | 
					                        XP: XP
 | 
				
			||||||
                });
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -478,6 +478,56 @@
 | 
				
			|||||||
                        </table>
 | 
					                        </table>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div id="edit-suit-invigorations-card" class="card mb-3 d-none">
 | 
				
			||||||
 | 
					                    <h5 class="card-header" data-loc="detailedView_suitInvigorationLabel"></h5>
 | 
				
			||||||
 | 
					                    <div class="card-body">
 | 
				
			||||||
 | 
					                        <form onsubmit="submitSuitInvigorationUpgrade(event)">
 | 
				
			||||||
 | 
					                            <div class="mb-3">
 | 
				
			||||||
 | 
					                                <label for="invigoration-offensive" class="form-label" data-loc="invigorations_offensiveLabel"></label>
 | 
				
			||||||
 | 
					                                <select class="form-select" id="dv-invigoration-offensive">
 | 
				
			||||||
 | 
					                                    <option value="" data-loc="general_none"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerStrength" data-loc="invigorations_offensive_AbilityStrength"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerRange" data-loc="invigorations_offensive_AbilityRange"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPowerDuration" data-loc="invigorations_offensive_AbilityDuration"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeDamage" data-loc="invigorations_offensive_MeleeDamage"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPrimaryDamage" data-loc="invigorations_offensive_PrimaryDamage"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationSecondaryDamage" data-loc="invigorations_offensive_SecondaryDamage"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationPrimaryCritChance" data-loc="invigorations_offensive_PrimaryCritChance"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationSecondaryCritChance" data-loc="invigorations_offensive_SecondaryCritChance"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeCritChance" data-loc="invigorations_offensive_MeleeCritChance"></option>
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            <div class="mb-3">
 | 
				
			||||||
 | 
					                                <label for="invigoration-defensive" class="form-label" data-loc="invigorations_defensiveLabel"></label>
 | 
				
			||||||
 | 
					                                <select class="form-select" id="dv-invigoration-defensive">
 | 
				
			||||||
 | 
					                                    <option value="" data-loc="general_none"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationPowerEfficiency" data-loc="invigorations_utility_AbilityEfficiency"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationMovementSpeed" data-loc="invigorations_utility_SprintSpeed"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationParkourSpeed" data-loc="invigorations_utility_ParkourVelocity"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationHealth" data-loc="invigorations_utility_HealthMax"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergy" data-loc="invigorations_utility_EnergyMax"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationStatusResistance" data-loc="invigorations_utility_StatusImmune"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationReloadSpeed" data-loc="invigorations_utility_ReloadSpeed"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationHealthRegen" data-loc="invigorations_utility_HealthRegen"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationArmor" data-loc="invigorations_utility_ArmorMax"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationJumps" data-loc="invigorations_utility_Jumps"></option>
 | 
				
			||||||
 | 
					                                    <option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergyRegen" data-loc="invigorations_utility_EnergyRegen"></option>
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            <div class="mb-3">
 | 
				
			||||||
 | 
					                                <label for="invigoration-expiry" class="form-label" data-loc="invigorations_expiryLabel"></label>
 | 
				
			||||||
 | 
					                                <input type="datetime-local" class="form-control" id="dv-invigoration-expiry" />
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            <div class="d-flex gap-2">
 | 
				
			||||||
 | 
					                                <button type="submit" class="btn btn-primary" data-loc="general_setButton"></button>
 | 
				
			||||||
 | 
					                                <button type="button" class="btn btn-danger" onclick="clearSuitInvigorationUpgrades()" data-loc="code_remove"></button>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </form>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
                <div id="modularParts-card" class="card mb-3 d-none">
 | 
					                <div id="modularParts-card" class="card mb-3 d-none">
 | 
				
			||||||
                    <h5 class="card-header" data-loc="detailedView_modularPartsLabel"></h5>
 | 
					                    <h5 class="card-header" data-loc="detailedView_modularPartsLabel"></h5>
 | 
				
			||||||
                    <div class="card-body">
 | 
					                    <div class="card-body">
 | 
				
			||||||
 | 
				
			|||||||
@ -282,7 +282,8 @@ function fetchItemList() {
 | 
				
			|||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const syndicateNone = document.createElement("option");
 | 
					            const syndicateNone = document.createElement("option");
 | 
				
			||||||
            syndicateNone.textContent = loc("cheats_none");
 | 
					            syndicateNone.value = "";
 | 
				
			||||||
 | 
					            syndicateNone.textContent = loc("general_none");
 | 
				
			||||||
            document.getElementById("changeSyndicate").innerHTML = "";
 | 
					            document.getElementById("changeSyndicate").innerHTML = "";
 | 
				
			||||||
            document.getElementById("changeSyndicate").appendChild(syndicateNone);
 | 
					            document.getElementById("changeSyndicate").appendChild(syndicateNone);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -303,8 +304,8 @@ function fetchItemList() {
 | 
				
			|||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityDurationMythic": loc("upgrade_WarframeAbilityDuration").split("|VAL|").join("15"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityDurationMythic": loc("upgrade_WarframeAbilityDuration").split("|VAL|").join("15"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityStrength": loc("upgrade_WarframeAbilityStrength").split("|VAL|").join("10"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityStrength": loc("upgrade_WarframeAbilityStrength").split("|VAL|").join("10"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityStrengthMythic": loc("upgrade_WarframeAbilityStrength").split("|VAL|").join("15"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeAbilityStrengthMythic": loc("upgrade_WarframeAbilityStrength").split("|VAL|").join("15"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeArmourMax": loc("upgrade_WarframeArmourMax").split("|VAL|").join("150"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeArmourMax": loc("upgrade_WarframeArmorMax").split("|VAL|").join("150"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeArmourMaxMythic": loc("upgrade_WarframeArmourMax").split("|VAL|").join("225"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeArmourMaxMythic": loc("upgrade_WarframeArmorMax").split("|VAL|").join("225"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeBlastProc": loc("upgrade_WarframeBlastProc").split("|VAL|").join("5"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeBlastProc": loc("upgrade_WarframeBlastProc").split("|VAL|").join("5"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeBlastProcMythic": loc("upgrade_WarframeBlastProc").split("|VAL|").join("7.5"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeBlastProcMythic": loc("upgrade_WarframeBlastProc").split("|VAL|").join("7.5"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeCastingSpeed": loc("upgrade_WarframeCastingSpeed").split("|VAL|").join("25"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeCastingSpeed": loc("upgrade_WarframeCastingSpeed").split("|VAL|").join("25"),
 | 
				
			||||||
@ -333,8 +334,8 @@ function fetchItemList() {
 | 
				
			|||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeParkourVelocityMythic": loc("upgrade_WarframeParkourVelocity").split("|VAL|").join("22.5"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeParkourVelocityMythic": loc("upgrade_WarframeParkourVelocity").split("|VAL|").join("22.5"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRadiationDamageBoost": loc("upgrade_WarframeRadiationDamageBoost").split("|VAL|").join("10"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRadiationDamageBoost": loc("upgrade_WarframeRadiationDamageBoost").split("|VAL|").join("10"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRadiationDamageBoostMythic": loc("upgrade_WarframeRadiationDamageBoost").split("|VAL|").join("15"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRadiationDamageBoostMythic": loc("upgrade_WarframeRadiationDamageBoost").split("|VAL|").join("15"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRegen": loc("upgrade_WarframeRegen").split("|VAL|").join("5"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRegen": loc("upgrade_WarframeHealthRegen").split("|VAL|").join("5"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRegenMythic": loc("upgrade_WarframeRegen").split("|VAL|").join("7.5"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeRegenMythic": loc("upgrade_WarframeHealthRegen").split("|VAL|").join("7.5"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeShieldMax": loc("upgrade_WarframeShieldMax").split("|VAL|").join("150"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeShieldMax": loc("upgrade_WarframeShieldMax").split("|VAL|").join("150"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeShieldMaxMythic": loc("upgrade_WarframeShieldMax").split("|VAL|").join("225"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeShieldMaxMythic": loc("upgrade_WarframeShieldMax").split("|VAL|").join("225"),
 | 
				
			||||||
                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeStartingEnergy": loc("upgrade_WarframeStartingEnergy").split("|VAL|").join("30"),
 | 
					                "/Lotus/Upgrades/Invigorations/ArchonCrystalUpgrades/ArchonCrystalUpgradeWarframeStartingEnergy": loc("upgrade_WarframeStartingEnergy").split("|VAL|").join("30"),
 | 
				
			||||||
@ -1230,6 +1231,13 @@ function updateInventory() {
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            document.getElementById("crystals-list").appendChild(tr);
 | 
					                            document.getElementById("crystals-list").appendChild(tr);
 | 
				
			||||||
                        });
 | 
					                        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        document.getElementById("edit-suit-invigorations-card").classList.remove("d-none");
 | 
				
			||||||
 | 
					                        const { OffensiveUpgrade, DefensiveUpgrade, UpgradesExpiry } =
 | 
				
			||||||
 | 
					                            suitInvigorationUpgradeData(item);
 | 
				
			||||||
 | 
					                        document.getElementById("dv-invigoration-offensive").value = OffensiveUpgrade;
 | 
				
			||||||
 | 
					                        document.getElementById("dv-invigoration-defensive").value = DefensiveUpgrade;
 | 
				
			||||||
 | 
					                        document.getElementById("dv-invigoration-expiry").value = UpgradesExpiry;
 | 
				
			||||||
                    } else if (["LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category)) {
 | 
					                    } else if (["LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category)) {
 | 
				
			||||||
                        document.getElementById("valenceBonus-card").classList.remove("d-none");
 | 
					                        document.getElementById("valenceBonus-card").classList.remove("d-none");
 | 
				
			||||||
                        document.getElementById("valenceBonus-innateDamage").value = "";
 | 
					                        document.getElementById("valenceBonus-innateDamage").value = "";
 | 
				
			||||||
@ -2862,3 +2870,74 @@ function handleModularPartsChange(event) {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					function suitInvigorationUpgradeData(suitData) {
 | 
				
			||||||
 | 
					    let expiryDate = "";
 | 
				
			||||||
 | 
					    if (suitData.UpgradesExpiry) {
 | 
				
			||||||
 | 
					        if (suitData.UpgradesExpiry.$date) {
 | 
				
			||||||
 | 
					            expiryDate = new Date(parseInt(suitData.UpgradesExpiry.$date.$numberLong));
 | 
				
			||||||
 | 
					        } else if (typeof suitData.UpgradesExpiry === "number") {
 | 
				
			||||||
 | 
					            expiryDate = new Date(suitData.UpgradesExpiry);
 | 
				
			||||||
 | 
					        } else if (suitData.UpgradesExpiry instanceof Date) {
 | 
				
			||||||
 | 
					            expiryDate = suitData.UpgradesExpiry;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (expiryDate && !isNaN(expiryDate.getTime())) {
 | 
				
			||||||
 | 
					            const year = expiryDate.getFullYear();
 | 
				
			||||||
 | 
					            const month = String(expiryDate.getMonth() + 1).padStart(2, "0");
 | 
				
			||||||
 | 
					            const day = String(expiryDate.getDate()).padStart(2, "0");
 | 
				
			||||||
 | 
					            const hours = String(expiryDate.getHours()).padStart(2, "0");
 | 
				
			||||||
 | 
					            const minutes = String(expiryDate.getMinutes()).padStart(2, "0");
 | 
				
			||||||
 | 
					            expiryDate = `${year}-${month}-${day}T${hours}:${minutes}`;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            expiryDate = "";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        oid: suitData.ItemId.$oid,
 | 
				
			||||||
 | 
					        OffensiveUpgrade: suitData.OffensiveUpgrade || "",
 | 
				
			||||||
 | 
					        DefensiveUpgrade: suitData.DefensiveUpgrade || "",
 | 
				
			||||||
 | 
					        UpgradesExpiry: expiryDate
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function submitSuitInvigorationUpgrade(event) {
 | 
				
			||||||
 | 
					    event.preventDefault();
 | 
				
			||||||
 | 
					    const oid = new URLSearchParams(window.location.search).get("itemId");
 | 
				
			||||||
 | 
					    const offensiveUpgrade = document.getElementById("dv-invigoration-offensive").value;
 | 
				
			||||||
 | 
					    const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value;
 | 
				
			||||||
 | 
					    const expiry = document.getElementById("dv-invigoration-expiry").value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!offensiveUpgrade || !defensiveUpgrade) {
 | 
				
			||||||
 | 
					        alert(loc("code_requiredInvigorationUpgrade"));
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const data = {
 | 
				
			||||||
 | 
					        OffensiveUpgrade: offensiveUpgrade,
 | 
				
			||||||
 | 
					        DefensiveUpgrade: defensiveUpgrade
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (expiry) {
 | 
				
			||||||
 | 
					        data.UpgradesExpiry = new Date(expiry).getTime();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    editSuitInvigorationUpgrade(oid, data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function clearSuitInvigorationUpgrades() {
 | 
				
			||||||
 | 
					    editSuitInvigorationUpgrade(new URLSearchParams(window.location.search).get("itemId"), null);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function editSuitInvigorationUpgrade(oid, data) {
 | 
				
			||||||
 | 
					    /* data?: {
 | 
				
			||||||
 | 
					            DefensiveUpgrade: string;
 | 
				
			||||||
 | 
					            OffensiveUpgrade: string;
 | 
				
			||||||
 | 
					            UpgradesExpiry?: number;
 | 
				
			||||||
 | 
					    }*/
 | 
				
			||||||
 | 
					    $.post({
 | 
				
			||||||
 | 
					        url: "/custom/editSuitInvigorationUpgrade?" + window.authz,
 | 
				
			||||||
 | 
					        contentType: "application/json",
 | 
				
			||||||
 | 
					        data: JSON.stringify({ oid, data })
 | 
				
			||||||
 | 
					    }).done(function () {
 | 
				
			||||||
 | 
					        updateInventory();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,14 @@
 | 
				
			|||||||
// German translation by Animan8000
 | 
					// German translation by Animan8000
 | 
				
			||||||
dict = {
 | 
					dict = {
 | 
				
			||||||
    general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
					    general_inventoryUpdateNote: `Hinweis: Um Änderungen im Spiel zu sehen, musst du dein Inventar neu synchronisieren, z. B. mit dem /sync Befehl des Bootstrappers, durch Besuch eines Dojo/Relais oder durch erneutes Einloggen.`,
 | 
				
			||||||
    general_addButton: `Hinzufügen`,
 | 
					    general_addButton: `Hinzufügen`,
 | 
				
			||||||
    general_setButton: `[UNTRANSLATED] Set`,
 | 
					    general_setButton: `Festlegen`,
 | 
				
			||||||
 | 
					    general_none: `Keines`,
 | 
				
			||||||
    general_bulkActions: `Massenaktionen`,
 | 
					    general_bulkActions: `Massenaktionen`,
 | 
				
			||||||
    general_loading: `[UNTRANSLATED] Loading...`,
 | 
					    general_loading: `Lädt...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    code_loginFail: `[UNTRANSLATED] Login failed. Double-check the email and password.`,
 | 
					    code_loginFail: `Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.`,
 | 
				
			||||||
    code_regFail: `[UNTRANSLATED] Registration failed. Account already exists?`,
 | 
					    code_regFail: `Registrierung fehlgeschlagen. Account existiert bereits?`,
 | 
				
			||||||
    code_changeNameConfirm: `In welchen Namen möchtest du deinen Account umbenennen?`,
 | 
					    code_changeNameConfirm: `In welchen Namen möchtest du deinen Account umbenennen?`,
 | 
				
			||||||
    code_deleteAccountConfirm: `Bist du sicher, dass du deinen Account |DISPLAYNAME| (|EMAIL|) löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.`,
 | 
					    code_deleteAccountConfirm: `Bist du sicher, dass du deinen Account |DISPLAYNAME| (|EMAIL|) löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.`,
 | 
				
			||||||
    code_archgun: `Arch-Gewehr`,
 | 
					    code_archgun: `Arch-Gewehr`,
 | 
				
			||||||
@ -45,8 +46,8 @@ dict = {
 | 
				
			|||||||
    code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`,
 | 
					    code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`,
 | 
				
			||||||
    code_addModsConfirm: `Bist du sicher, dass du |COUNT| Mods zu deinem Account hinzufügen möchtest?`,
 | 
					    code_addModsConfirm: `Bist du sicher, dass du |COUNT| Mods zu deinem Account hinzufügen möchtest?`,
 | 
				
			||||||
    code_succImport: `Erfolgreich importiert.`,
 | 
					    code_succImport: `Erfolgreich importiert.`,
 | 
				
			||||||
    code_succRelog: `[UNTRANSLATED] Done. Please note that you'll need to relog to see a difference in-game.`,
 | 
					    code_succRelog: `Fertig. Bitte beachte, dass du dich neu einloggen musst, um Änderungen im Spiel zu sehen.`,
 | 
				
			||||||
    code_nothingToDo: `[UNTRANSLATED] Done. There was nothing to do.`,
 | 
					    code_nothingToDo: `Fertig. Es gab nichts zu tun.`,
 | 
				
			||||||
    code_gild: `Veredeln`,
 | 
					    code_gild: `Veredeln`,
 | 
				
			||||||
    code_moa: `Moa`,
 | 
					    code_moa: `Moa`,
 | 
				
			||||||
    code_zanuka: `Jagdhund`,
 | 
					    code_zanuka: `Jagdhund`,
 | 
				
			||||||
@ -61,7 +62,8 @@ dict = {
 | 
				
			|||||||
    code_pigment: `Pigment`,
 | 
					    code_pigment: `Pigment`,
 | 
				
			||||||
    code_mature: `Für den Kampf auswachsen lassen`,
 | 
					    code_mature: `Für den Kampf auswachsen lassen`,
 | 
				
			||||||
    code_unmature: `Genetisches Altern zurücksetzen`,
 | 
					    code_unmature: `Genetisches Altern zurücksetzen`,
 | 
				
			||||||
    code_succChange: `[UNTRANSLATED] Successfully changed.`,
 | 
					    code_succChange: `Erfolgreich geändert.`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`,
 | 
					    login_description: `Melde dich mit deinem OpenWF-Account an (denselben Angaben wie im Spiel, wenn du dich mit diesem Server verbindest).`,
 | 
				
			||||||
    login_emailLabel: `E-Mail-Adresse`,
 | 
					    login_emailLabel: `E-Mail-Adresse`,
 | 
				
			||||||
    login_passwordLabel: `Passwort`,
 | 
					    login_passwordLabel: `Passwort`,
 | 
				
			||||||
@ -91,7 +93,7 @@ dict = {
 | 
				
			|||||||
    inventory_moaPets: `Moas`,
 | 
					    inventory_moaPets: `Moas`,
 | 
				
			||||||
    inventory_kubrowPets: `Bestien`,
 | 
					    inventory_kubrowPets: `Bestien`,
 | 
				
			||||||
    inventory_evolutionProgress: `Incarnon-Entwicklungsfortschritte`,
 | 
					    inventory_evolutionProgress: `Incarnon-Entwicklungsfortschritte`,
 | 
				
			||||||
    inventory_Boosters: `[UNTRANSLATED] Boosters`,
 | 
					    inventory_Boosters: `Booster`,
 | 
				
			||||||
    inventory_bulkAddSuits: `Fehlende Warframes hinzufügen`,
 | 
					    inventory_bulkAddSuits: `Fehlende Warframes hinzufügen`,
 | 
				
			||||||
    inventory_bulkAddWeapons: `Fehlende Waffen hinzufügen`,
 | 
					    inventory_bulkAddWeapons: `Fehlende Waffen hinzufügen`,
 | 
				
			||||||
    inventory_bulkAddSpaceSuits: `Fehlende Archwings hinzufügen`,
 | 
					    inventory_bulkAddSpaceSuits: `Fehlende Archwings hinzufügen`,
 | 
				
			||||||
@ -106,7 +108,7 @@ dict = {
 | 
				
			|||||||
    inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
 | 
					    inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
 | 
				
			||||||
    inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
 | 
					    inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
 | 
				
			||||||
    inventory_bulkRankUpEvolutionProgress: `Alle Incarnon-Entwicklungsfortschritte auf Max. Rang`,
 | 
					    inventory_bulkRankUpEvolutionProgress: `Alle Incarnon-Entwicklungsfortschritte auf Max. Rang`,
 | 
				
			||||||
    inventory_maxPlexus: `[UNTRANSLATED] Max Rank Plexus`,
 | 
					    inventory_maxPlexus: `Plexus auf Max. Rang`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    quests_list: `Quests`,
 | 
					    quests_list: `Quests`,
 | 
				
			||||||
    quests_completeAll: `Alle Quests abschließen`,
 | 
					    quests_completeAll: `Alle Quests abschließen`,
 | 
				
			||||||
@ -123,15 +125,42 @@ dict = {
 | 
				
			|||||||
    detailedView_archonShardsDescription: `Du kannst diese unbegrenzten Slots nutzen, um eine Vielzahl von Verbesserungen anzuwenden.`,
 | 
					    detailedView_archonShardsDescription: `Du kannst diese unbegrenzten Slots nutzen, um eine Vielzahl von Verbesserungen anzuwenden.`,
 | 
				
			||||||
    detailedView_archonShardsDescription2: `Hinweis: Jede Archon-Scherbe benötigt beim Laden etwas Zeit, um angewendet zu werden.`,
 | 
					    detailedView_archonShardsDescription2: `Hinweis: Jede Archon-Scherbe benötigt beim Laden etwas Zeit, um angewendet zu werden.`,
 | 
				
			||||||
    detailedView_valenceBonusLabel: `Valenz-Bonus`,
 | 
					    detailedView_valenceBonusLabel: `Valenz-Bonus`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `[UNTRANSLATED] You can set or remove the Valence Bonus from your weapon.`,
 | 
					    detailedView_valenceBonusDescription: `Du kannst den Valenz-Bonus deiner Waffe festlegen oder entfernen.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`,
 | 
					    detailedView_modularPartsLabel: `Modulare Teile ändern`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `[UNTRANSLATED] Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `[UNTRANSLATED] +200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `[UNTRANSLATED] +100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `[UNTRANSLATED] +100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `[UNTRANSLATED] +250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] +250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] +250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] +200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] +200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] +200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `[UNTRANSLATED] +75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `[UNTRANSLATED] +75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `[UNTRANSLATED] +75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `[UNTRANSLATED] +1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `[UNTRANSLATED] +200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `[UNTRANSLATED] Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `[UNTRANSLATED] +75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `[UNTRANSLATED] +25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `[UNTRANSLATED] +1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `[UNTRANSLATED] +5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `[UNTRANSLATED] +2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `Riven hinzufügen`,
 | 
					    mods_addRiven: `Riven hinzufügen`,
 | 
				
			||||||
    mods_fingerprint: `Fingerabdruck`,
 | 
					    mods_fingerprint: `Fingerabdruck`,
 | 
				
			||||||
    mods_fingerprintHelp: `Benötigst du Hilfe mit dem Fingerabdruck?`,
 | 
					    mods_fingerprintHelp: `Benötigst du Hilfe mit dem Fingerabdruck?`,
 | 
				
			||||||
    mods_rivens: `Rivens`,
 | 
					    mods_rivens: `Rivens`,
 | 
				
			||||||
    mods_mods: `Mods`,
 | 
					    mods_mods: `Mods`,
 | 
				
			||||||
    mods_addMax: `[UNTRANSLATED] Add Maxed`,
 | 
					    mods_addMax: `Max. hinzufügen`,
 | 
				
			||||||
    mods_addMissingUnrankedMods: `Fehlende Mods ohne Rang hinzufügen`,
 | 
					    mods_addMissingUnrankedMods: `Fehlende Mods ohne Rang hinzufügen`,
 | 
				
			||||||
    mods_removeUnranked: `Mods ohne Rang entfernen`,
 | 
					    mods_removeUnranked: `Mods ohne Rang entfernen`,
 | 
				
			||||||
    mods_addMissingMaxRankMods: `Fehlende Mods mit Max. Rang hinzufügen`,
 | 
					    mods_addMissingMaxRankMods: `Fehlende Mods mit Max. Rang hinzufügen`,
 | 
				
			||||||
@ -141,17 +170,17 @@ dict = {
 | 
				
			|||||||
    cheats_skipAllDialogue: `Alle Dialoge überspringen`,
 | 
					    cheats_skipAllDialogue: `Alle Dialoge überspringen`,
 | 
				
			||||||
    cheats_unlockAllScans: `Alle Scans freischalten`,
 | 
					    cheats_unlockAllScans: `Alle Scans freischalten`,
 | 
				
			||||||
    cheats_unlockAllMissions: `Alle Missionen freischalten`,
 | 
					    cheats_unlockAllMissions: `Alle Missionen freischalten`,
 | 
				
			||||||
    cheats_unlockAllMissions_ok: `[UNTRANSLATED] Success. Please note that you'll need to enter a dojo/relay or relog for the client to refresh the star chart.`,
 | 
					    cheats_unlockAllMissions_ok: `Erfolgreich. Bitte beachte, dass du ein Dojo/Relais besuchen oder dich neu einloggen musst, damit die Sternenkarte aktualisiert wird.`,
 | 
				
			||||||
    cheats_infiniteCredits: `Unendlich Credits`,
 | 
					    cheats_infiniteCredits: `Unendlich Credits`,
 | 
				
			||||||
    cheats_infinitePlatinum: `Unendlich Platinum`,
 | 
					    cheats_infinitePlatinum: `Unendlich Platinum`,
 | 
				
			||||||
    cheats_infiniteEndo: `Unendlich Endo`,
 | 
					    cheats_infiniteEndo: `Unendlich Endo`,
 | 
				
			||||||
    cheats_infiniteRegalAya: `Unendlich Reines Aya`,
 | 
					    cheats_infiniteRegalAya: `Unendlich Reines Aya`,
 | 
				
			||||||
    cheats_infiniteHelminthMaterials: `Unendlich Helminth-Materialien`,
 | 
					    cheats_infiniteHelminthMaterials: `Unendlich Helminth-Materialien`,
 | 
				
			||||||
    cheats_claimingBlueprintRefundsIngredients: `Fertige Blaupausen erstatten Ressourcen zurück`,
 | 
					    cheats_claimingBlueprintRefundsIngredients: `Fertige Blaupausen erstatten Ressourcen zurück`,
 | 
				
			||||||
    cheats_dontSubtractPurchaseCreditCost: `[UNTRANSLATED] Don't Subtract Purchase Credit Cost`,
 | 
					    cheats_dontSubtractPurchaseCreditCost: `Credits beim Kauf nicht verbrauchen`,
 | 
				
			||||||
    cheats_dontSubtractPurchasePlatinumCost: `[UNTRANSLATED] Don't Subtract Purchase Platinum Cost`,
 | 
					    cheats_dontSubtractPurchasePlatinumCost: `Platinum beim Kauf nicht verbrauchen`,
 | 
				
			||||||
    cheats_dontSubtractPurchaseItemCost: `[UNTRANSLATED] Don't Subtract Purchase Item Cost`,
 | 
					    cheats_dontSubtractPurchaseItemCost: `Gegenstände beim Kauf nicht verbrauchen`,
 | 
				
			||||||
    cheats_dontSubtractPurchaseStandingCost: `[UNTRANSLATED] Don't Subtract Purchase Standing Cost`,
 | 
					    cheats_dontSubtractPurchaseStandingCost: `Ansehen beim Kauf nicht verbrauchen`,
 | 
				
			||||||
    cheats_dontSubtractVoidTraces: `Void-Spuren nicht verbrauchen`,
 | 
					    cheats_dontSubtractVoidTraces: `Void-Spuren nicht verbrauchen`,
 | 
				
			||||||
    cheats_dontSubtractConsumables: `Verbrauchsgegenstände (Ausrüstung) nicht verbrauchen`,
 | 
					    cheats_dontSubtractConsumables: `Verbrauchsgegenstände (Ausrüstung) nicht verbrauchen`,
 | 
				
			||||||
    cheats_unlockAllShipFeatures: `Alle Schiffs-Funktionen freischalten`,
 | 
					    cheats_unlockAllShipFeatures: `Alle Schiffs-Funktionen freischalten`,
 | 
				
			||||||
@ -171,11 +200,11 @@ dict = {
 | 
				
			|||||||
    cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`,
 | 
					    cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`,
 | 
				
			||||||
    cheats_noDeathMarks: `Keine Todesmarkierungen`,
 | 
					    cheats_noDeathMarks: `Keine Todesmarkierungen`,
 | 
				
			||||||
    cheats_noKimCooldowns: `Keine Wartezeit bei KIM`,
 | 
					    cheats_noKimCooldowns: `Keine Wartezeit bei KIM`,
 | 
				
			||||||
    cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
 | 
					    cheats_fullyStockedVendors: `Händler haben volles Inventar`,
 | 
				
			||||||
    cheats_baroAlwaysAvailable: `[UNTRANSLATED] Baro Always Available`,
 | 
					    cheats_baroAlwaysAvailable: `Baro immer im Relais verfügbar`,
 | 
				
			||||||
    cheats_baroFullyStocked: `[UNTRANSLATED] Baro Fully Stocked`,
 | 
					    cheats_baroFullyStocked: `Baro hat volles Inventar`,
 | 
				
			||||||
    cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`,
 | 
					    cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`,
 | 
				
			||||||
    cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
 | 
					    cheats_unlockAllProfitTakerStages: `Alle Profiteintreiber-Phasen freischalten`,
 | 
				
			||||||
    cheats_instantFinishRivenChallenge: `Riven-Mod Herausforderung sofort abschließen`,
 | 
					    cheats_instantFinishRivenChallenge: `Riven-Mod Herausforderung sofort abschließen`,
 | 
				
			||||||
    cheats_instantResourceExtractorDrones: `Sofortige Ressourcen-Extraktor-Drohnen`,
 | 
					    cheats_instantResourceExtractorDrones: `Sofortige Ressourcen-Extraktor-Drohnen`,
 | 
				
			||||||
    cheats_noResourceExtractorDronesDamage: `Kein Schaden für Ressourcen-Extraktor-Drohnen`,
 | 
					    cheats_noResourceExtractorDronesDamage: `Kein Schaden für Ressourcen-Extraktor-Drohnen`,
 | 
				
			||||||
@ -186,129 +215,128 @@ dict = {
 | 
				
			|||||||
    cheats_noDojoResearchCosts: `Keine Dojo-Forschungskosten`,
 | 
					    cheats_noDojoResearchCosts: `Keine Dojo-Forschungskosten`,
 | 
				
			||||||
    cheats_noDojoResearchTime: `Keine Dojo-Forschungszeit`,
 | 
					    cheats_noDojoResearchTime: `Keine Dojo-Forschungszeit`,
 | 
				
			||||||
    cheats_fastClanAscension: `Schneller Clan-Aufstieg`,
 | 
					    cheats_fastClanAscension: `Schneller Clan-Aufstieg`,
 | 
				
			||||||
    cheats_missionsCanGiveAllRelics: `[UNTRANSLATED] Missions Can Give All Relics`,
 | 
					    cheats_missionsCanGiveAllRelics: `Alle Relikte als Missionsbelohnung möglich`,
 | 
				
			||||||
    cheats_exceptionalRelicsAlwaysGiveBronzeReward: `[UNTRANSLATED] Exceptional Relics Always Give Bronze Reward`,
 | 
					    cheats_exceptionalRelicsAlwaysGiveBronzeReward: `Überragende Relikte geben immer Bronze-Belohnung`,
 | 
				
			||||||
    cheats_flawlessRelicsAlwaysGiveSilverReward: `[UNTRANSLATED] Flawless Relics Always Give Silver Reward`,
 | 
					    cheats_flawlessRelicsAlwaysGiveSilverReward: `Makellose Relikte geben immer Silber-Belohnung`,
 | 
				
			||||||
    cheats_radiantRelicsAlwaysGiveGoldReward: `[UNTRANSLATED] Radiant Relics Always Give Gold Reward`,
 | 
					    cheats_radiantRelicsAlwaysGiveGoldReward: `Strahlende Relikte geben immer Gold-Belohnung`,
 | 
				
			||||||
    cheats_unlockAllSimarisResearchEntries: `[UNTRANSLATED] Unlock All Simaris Research Entries`,
 | 
					    cheats_unlockAllSimarisResearchEntries: `Alle Simaris-Forschungseinträge freischalten`,
 | 
				
			||||||
    cheats_disableDailyTribute: `[UNTRANSLATED] Disable Daily Tribute`,
 | 
					    cheats_disableDailyTribute: `Täglicher Tribut deaktivieren`,
 | 
				
			||||||
    cheats_spoofMasteryRank: `Gefälschter Meisterschaftsrang (-1 zum deaktivieren)`,
 | 
					    cheats_spoofMasteryRank: `Gefälschter Meisterschaftsrang (-1 zum deaktivieren)`,
 | 
				
			||||||
    cheats_relicRewardItemCountMultiplier: `[UNTRANSLATED] Relic Reward Item Count Multiplier`,
 | 
					    cheats_relicRewardItemCountMultiplier: `Belohnungsmultiplikator für Relikte`,
 | 
				
			||||||
    cheats_nightwaveStandingMultiplier: `[UNTRANSLATED] Nightwave Standing Multiplier`,
 | 
					    cheats_nightwaveStandingMultiplier: `Nightwave Ansehen Multiplikator`,
 | 
				
			||||||
    cheats_save: `[UNTRANSLATED] Save`,
 | 
					    cheats_save: `Speichern`,
 | 
				
			||||||
    cheats_account: `Account`,
 | 
					    cheats_account: `Account`,
 | 
				
			||||||
    cheats_unlockAllFocusSchools: `Alle Fokus-Schulen freischalten`,
 | 
					    cheats_unlockAllFocusSchools: `Alle Fokus-Schulen freischalten`,
 | 
				
			||||||
    cheats_helminthUnlockAll: `Helminth vollständig aufleveln`,
 | 
					    cheats_helminthUnlockAll: `Helminth vollständig aufleveln`,
 | 
				
			||||||
    cheats_addMissingSubsumedAbilities: `[UNTRANSLATED] Add Missing Subsumed Abilities`,
 | 
					    cheats_addMissingSubsumedAbilities: `Fehlende konsumierte Fähigkeiten hinzufügen`,
 | 
				
			||||||
    cheats_intrinsicsUnlockAll: `Alle Inhärenzen auf Max. Rang`,
 | 
					    cheats_intrinsicsUnlockAll: `Alle Inhärenzen auf Max. Rang`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `Unterstütztes Syndikat`,
 | 
					    cheats_changeSupportedSyndicate: `Unterstütztes Syndikat`,
 | 
				
			||||||
    cheats_changeButton: `Ändern`,
 | 
					    cheats_changeButton: `Ändern`,
 | 
				
			||||||
    cheats_none: `Keines`,
 | 
					    cheats_markAllAsRead: `Posteingang als gelesen markieren`,
 | 
				
			||||||
    cheats_markAllAsRead: `[UNTRANSLATED] Mark Inbox As Read`,
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `[UNTRANSLATED] World State`,
 | 
					    worldState: `Weltstatus`,
 | 
				
			||||||
    worldState_creditBoost: `[UNTRANSLATED] Credit Boost`,
 | 
					    worldState_creditBoost: `Event Booster: Credit`,
 | 
				
			||||||
    worldState_affinityBoost: `[UNTRANSLATED] Affinity Boost`,
 | 
					    worldState_affinityBoost: `Event Booster: Erfahrung`,
 | 
				
			||||||
    worldState_resourceBoost: `[UNTRANSLATED] Resource Boost`,
 | 
					    worldState_resourceBoost: `Event Booster: Ressourcen`,
 | 
				
			||||||
    worldState_starDays: `[UNTRANSLATED] Star Days`,
 | 
					    worldState_starDays: `Sternen-Tage`,
 | 
				
			||||||
    worldState_galleonOfGhouls: `[UNTRANSLATED] Galleon of Ghouls`,
 | 
					    worldState_galleonOfGhouls: `Galeone der Ghule`,
 | 
				
			||||||
    disabled: `[UNTRANSLATED] Disabled`,
 | 
					    disabled: `Deaktiviert`,
 | 
				
			||||||
    worldState_we1: `[UNTRANSLATED] Weekend 1`,
 | 
					    worldState_we1: `Wochenende 1`,
 | 
				
			||||||
    worldState_we2: `[UNTRANSLATED] Weekend 2`,
 | 
					    worldState_we2: `Wochenende 2`,
 | 
				
			||||||
    worldState_we3: `[UNTRANSLATED] Weekend 3`,
 | 
					    worldState_we3: `Wochenende 3`,
 | 
				
			||||||
    worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`,
 | 
					    worldState_eidolonOverride: `Eidolon-Überschreibung`,
 | 
				
			||||||
    worldState_day: `[UNTRANSLATED] Day`,
 | 
					    worldState_day: `Tag`,
 | 
				
			||||||
    worldState_night: `[UNTRANSLATED] Night`,
 | 
					    worldState_night: `Nacht`,
 | 
				
			||||||
    worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
 | 
					    worldState_vallisOverride: `Orbis-Tal-Überschreibung`,
 | 
				
			||||||
    worldState_warm: `[UNTRANSLATED] Warm`,
 | 
					    worldState_warm: `Warm`,
 | 
				
			||||||
    worldState_cold: `[UNTRANSLATED] Cold`,
 | 
					    worldState_cold: `Kalt`,
 | 
				
			||||||
    worldState_duviriOverride: `[UNTRANSLATED] Duviri Override`,
 | 
					    worldState_duviriOverride: `Duviri-Überschreibung`,
 | 
				
			||||||
    worldState_joy: `[UNTRANSLATED] Joy`,
 | 
					    worldState_joy: `Freude`,
 | 
				
			||||||
    worldState_anger: `[UNTRANSLATED] Anger`,
 | 
					    worldState_anger: `Wut`,
 | 
				
			||||||
    worldState_envy: `[UNTRANSLATED] Envy`,
 | 
					    worldState_envy: `Neid`,
 | 
				
			||||||
    worldState_sorrow: `[UNTRANSLATED] Sorrow`,
 | 
					    worldState_sorrow: `Trauer`,
 | 
				
			||||||
    worldState_fear: `[UNTRANSLATED] Fear`,
 | 
					    worldState_fear: `Angst`,
 | 
				
			||||||
    worldState_nightwaveOverride: `[UNTRANSLATED] Nightwave Override`,
 | 
					    worldState_nightwaveOverride: `Nightwave-Überschreibung`,
 | 
				
			||||||
    worldState_RadioLegionIntermission13Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 9`,
 | 
					    worldState_RadioLegionIntermission13Syndicate: `Noras Mix - Vol. 9`,
 | 
				
			||||||
    worldState_RadioLegionIntermission12Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 8`,
 | 
					    worldState_RadioLegionIntermission12Syndicate: `Noras Mix - Vol. 8`,
 | 
				
			||||||
    worldState_RadioLegionIntermission11Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 7`,
 | 
					    worldState_RadioLegionIntermission11Syndicate: `Noras Mix - Vol. 7`,
 | 
				
			||||||
    worldState_RadioLegionIntermission10Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 6`,
 | 
					    worldState_RadioLegionIntermission10Syndicate: `Noras Mix - Vol. 6`,
 | 
				
			||||||
    worldState_RadioLegionIntermission9Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 5`,
 | 
					    worldState_RadioLegionIntermission9Syndicate: `Noras Mix - Vol. 5`,
 | 
				
			||||||
    worldState_RadioLegionIntermission8Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 4`,
 | 
					    worldState_RadioLegionIntermission8Syndicate: `Noras Mix - Vol. 4`,
 | 
				
			||||||
    worldState_RadioLegionIntermission7Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 3`,
 | 
					    worldState_RadioLegionIntermission7Syndicate: `Noras Mix - Vol. 3`,
 | 
				
			||||||
    worldState_RadioLegionIntermission6Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 2`,
 | 
					    worldState_RadioLegionIntermission6Syndicate: `Noras Mix - Vol. 2`,
 | 
				
			||||||
    worldState_RadioLegionIntermission5Syndicate: `[UNTRANSLATED] Nora's Mix Vol. 1`,
 | 
					    worldState_RadioLegionIntermission5Syndicate: `Noras Mix - Vol. 1`,
 | 
				
			||||||
    worldState_RadioLegionIntermission4Syndicate: `[UNTRANSLATED] Nora's Choice`,
 | 
					    worldState_RadioLegionIntermission4Syndicate: `Noras Wahl`,
 | 
				
			||||||
    worldState_RadioLegionIntermission3Syndicate: `[UNTRANSLATED] Intermission III`,
 | 
					    worldState_RadioLegionIntermission3Syndicate: `Sendepause III`,
 | 
				
			||||||
    worldState_RadioLegion3Syndicate: `[UNTRANSLATED] Glassmaker`,
 | 
					    worldState_RadioLegion3Syndicate: `Der Glasmacher`,
 | 
				
			||||||
    worldState_RadioLegionIntermission2Syndicate: `[UNTRANSLATED] Intermission II`,
 | 
					    worldState_RadioLegionIntermission2Syndicate: `Sendepause II`,
 | 
				
			||||||
    worldState_RadioLegion2Syndicate: `[UNTRANSLATED] The Emissary`,
 | 
					    worldState_RadioLegion2Syndicate: `Der Botschafter`,
 | 
				
			||||||
    worldState_RadioLegionIntermissionSyndicate: `[UNTRANSLATED] Intermission I`,
 | 
					    worldState_RadioLegionIntermissionSyndicate: `Sendepause I`,
 | 
				
			||||||
    worldState_RadioLegionSyndicate: `[UNTRANSLATED] The Wolf of Saturn Six`,
 | 
					    worldState_RadioLegionSyndicate: `Der Wolf von Saturn Six`,
 | 
				
			||||||
    worldState_fissures: `[UNTRANSLATED] Fissures`,
 | 
					    worldState_fissures: `Void-Risse`,
 | 
				
			||||||
    normal: `[UNTRANSLATED] Normal`,
 | 
					    normal: `Normal`,
 | 
				
			||||||
    worldState_allAtOnceNormal: `[UNTRANSLATED] All At Once, Normal`,
 | 
					    worldState_allAtOnceNormal: `Alle gleichzeitig, Normal`,
 | 
				
			||||||
    worldState_allAtOnceSteelPath: `[UNTRANSLATED] All At Once, Steel Path`,
 | 
					    worldState_allAtOnceSteelPath: `Alle gleichzeitig, Stählerne Pfad`,
 | 
				
			||||||
    worldState_theCircuitOverride: `[UNTRANSLATED] The Circuit Override`,
 | 
					    worldState_theCircuitOverride: `Der Rundkurs-Überschreibung`,
 | 
				
			||||||
    worldState_darvoStockMultiplier: `[UNTRANSLATED] Darvo Stock Multiplier`,
 | 
					    worldState_darvoStockMultiplier: `Darvo-Vorratsmultiplikator`,
 | 
				
			||||||
    worldState_varziaFullyStocked: `[UNTRANSLATED] Varzia Fully Stocked`,
 | 
					    worldState_varziaFullyStocked: `Varzia hat volles Inventar`,
 | 
				
			||||||
    worldState_varziaOverride: `[UNTRANSLATED] Varzia Rotation Override`,
 | 
					    worldState_varziaOverride: `Varzia-Angebotsüberschreibung`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
 | 
					    import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
 | 
				
			||||||
    import_submit: `Absenden`,
 | 
					    import_submit: `Absenden`,
 | 
				
			||||||
    import_samples: `[UNTRANSLATED] Samples:`,
 | 
					    import_samples: `Beispiele:`,
 | 
				
			||||||
    import_samples_maxFocus: `[UNTRANSLATED] All Focus Schools Maxed Out`,
 | 
					    import_samples_maxFocus: `Alle Fokus-Schulen maximiert`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    upgrade_Equilibrium: `[UNTRANSLATED] +|VAL|% Energy from Health pickups, +|VAL|% Health from Energy pickups`,
 | 
					    upgrade_Equilibrium: `+|VAL|% Energie bei Gesundheitskugeln, +|VAL|% Gesundheit bei Energiekugeln`,
 | 
				
			||||||
    upgrade_MeleeCritDamage: `[UNTRANSLATED] +|VAL|% Melee Critical Damage`,
 | 
					    upgrade_MeleeCritDamage: `+|VAL|% Krit. Nahkampfschaden`,
 | 
				
			||||||
    upgrade_PrimaryStatusChance: `[UNTRANSLATED] +|VAL|% Primary Status Chance`,
 | 
					    upgrade_PrimaryStatusChance: `+|VAL|% Primärwaffen Statuschance`,
 | 
				
			||||||
    upgrade_SecondaryCritChance: `[UNTRANSLATED] +|VAL|% Secondary Critical Chance`,
 | 
					    upgrade_SecondaryCritChance: `+|VAL|% Sekundärwaffen Krit. Chance`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `[UNTRANSLATED] +|VAL|% Ability Duration`,
 | 
					    upgrade_WarframeAbilityDuration: `+|VAL|% Fähigkeitsdauer`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `[UNTRANSLATED] +|VAL|% Ability Strength`,
 | 
					    upgrade_WarframeAbilityStrength: `+|VAL|% Fähigkeitsstärke`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `[UNTRANSLATED] +|VAL| Armor`,
 | 
					    upgrade_WarframeArmorMax: `+|VAL| Rüstung`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `[UNTRANSLATED] +|VAL| Shields on kill with Blast Damage`,
 | 
					    upgrade_WarframeBlastProc: `+|VAL| Schilde beim Töten eines Gegners mit Explosionsschaden`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `[UNTRANSLATED] +|VAL|% Casting Speed`,
 | 
					    upgrade_WarframeCastingSpeed: `+|VAL|% Aktivierungsgeschwindigkeit`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Corrosion Status`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% Fähigkeitsschaden auf Gegner, die von Korrosions-Status betroffen sind`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveStack: `[UNTRANSLATED] Increase max stacks of Corrosion Status by +|VAL|`,
 | 
					    upgrade_WarframeCorrosiveStack: `Erhöhe maximale Stapelanzahl von Korrosions-Status um +|VAL|`,
 | 
				
			||||||
    upgrade_WarframeCritDamageBoost: `[UNTRANSLATED] +|VAL|% Melee Critical Damage (Doubles over 500 Energy)`,
 | 
					    upgrade_WarframeCritDamageBoost: `+|VAL|% Krit. Nahkampfschaden (verdoppelt bei über 500 Energie)`,
 | 
				
			||||||
    upgrade_WarframeElectricDamage: `[UNTRANSLATED] +|VAL1|% Primary Electricity Damage (+|VAL2|% per additional Shard)`,
 | 
					    upgrade_WarframeElectricDamage: `+|VAL1|% Primärwaffen Elektrizitätsschaden (+|VAL2|% pro zusätzlicher Scherbe)`,
 | 
				
			||||||
    upgrade_WarframeElectricDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Electricity Status`,
 | 
					    upgrade_WarframeElectricDamageBoost: `+|VAL|% Fähigkeitsschaden auf Gegner, die von Elektrizitäts-Status betroffen sind`,
 | 
				
			||||||
    upgrade_WarframeEnergyMax: `[UNTRANSLATED] +|VAL| Energy Max`,
 | 
					    upgrade_WarframeEnergyMax: `+|VAL| Max. Energie`,
 | 
				
			||||||
    upgrade_WarframeGlobeEffectEnergy: `[UNTRANSLATED] +|VAL|% Energy Orb Effectiveness`,
 | 
					    upgrade_WarframeGlobeEffectEnergy: `+|VAL|% Wirksamkeit bei Energiekugeln`,
 | 
				
			||||||
    upgrade_WarframeGlobeEffectHealth: `[UNTRANSLATED] +|VAL|% Health Orb Effectiveness`,
 | 
					    upgrade_WarframeGlobeEffectHealth: `+|VAL|% Wirksamkeit bei Gesundheitskugeln`,
 | 
				
			||||||
    upgrade_WarframeHealthMax: `[UNTRANSLATED] +|VAL| Health`,
 | 
					    upgrade_WarframeHealthMax: `+|VAL| Gesundheit`,
 | 
				
			||||||
    upgrade_WarframeHPBoostFromImpact: `[UNTRANSLATED] +|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `+|VAL1| Gesundheit beim Töten eines Gegners mit Explosionsschaden (Max. |VAL2| Gesundheit)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `[UNTRANSLATED] +|VAL|% Parkour Velocity`,
 | 
					    upgrade_WarframeParkourVelocity: `+|VAL|% Parkour-Geschwindigkeit`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Radiation Status`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `+|VAL|% Fähigkeitsschaden auf Gegner, die von Strahlungs-Status betroffen sind`,
 | 
				
			||||||
    upgrade_WarframeRegen: `[UNTRANSLATED] +|VAL| Health Regen/s`,
 | 
					    upgrade_WarframeHealthRegen: `+|VAL| Gesundheitsregeneration pro Sekunde`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `[UNTRANSLATED] +|VAL| Shield`,
 | 
					    upgrade_WarframeShieldMax: `+|VAL| Schildkapazität`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `[UNTRANSLATED] +|VAL|% Energy on Spawn`,
 | 
					    upgrade_WarframeStartingEnergy: `+|VAL|% Max. Energie beim Spawnen`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `[UNTRANSLATED] +|VAL|% Toxin Status Effect Damage`,
 | 
					    upgrade_WarframeToxinDamage: `+|VAL|% Schaden durch Gift-Statuseffekte`,
 | 
				
			||||||
    upgrade_WarframeToxinHeal: `[UNTRANSLATED] +|VAL| Health on damaging enemies with Toxin Status`,
 | 
					    upgrade_WarframeToxinHeal: `+|VAL| Gesundheit beim Schaden an Gegnern mit Gift-Status`,
 | 
				
			||||||
    upgrade_WeaponCritBoostFromHeat: `[UNTRANSLATED] +|VAL1|% Secondary Critical Chance per Heat-affected enemy killed (Max |VAL2|%)`,
 | 
					    upgrade_WeaponCritBoostFromHeat: `+|VAL1|% Sekundärwaffen Krit. Chance pro getötetem Gegner mit Hitze-Statuseffekt (Max. |VAL2|%)`,
 | 
				
			||||||
    upgrade_AvatarAbilityRange: `[UNTRANSLATED] +7.5% Ability Range`,
 | 
					    upgrade_AvatarAbilityRange: `+7.5% Fähigkeitsreichweite`,
 | 
				
			||||||
    upgrade_AvatarAbilityEfficiency: `[UNTRANSLATED] +5% Ability Efficiency`,
 | 
					    upgrade_AvatarAbilityEfficiency: `+5% Fähigkeitseffizienz`,
 | 
				
			||||||
    upgrade_AvatarEnergyRegen: `[UNTRANSLATED] +0.5 Energy Regen/s`,
 | 
					    upgrade_AvatarEnergyRegen: `+0.5 Energieregeneration pro Sekunde`,
 | 
				
			||||||
    upgrade_AvatarEnemyRadar: `[UNTRANSLATED] +5m Enemy Radar`,
 | 
					    upgrade_AvatarEnemyRadar: `+5m Feindradar`,
 | 
				
			||||||
    upgrade_AvatarLootRadar: `[UNTRANSLATED] +7m Loot Radar`,
 | 
					    upgrade_AvatarLootRadar: `+7m Beuteradar`,
 | 
				
			||||||
    upgrade_WeaponAmmoMax: `[UNTRANSLATED] +15% Ammo Max`,
 | 
					    upgrade_WeaponAmmoMax: `+15% Max. Munition`,
 | 
				
			||||||
    upgrade_EnemyArmorReductionAura: `[UNTRANSLATED] -3% Enemy Armor`,
 | 
					    upgrade_EnemyArmorReductionAura: `-3% Rüstung bei Feinden`,
 | 
				
			||||||
    upgrade_OnExecutionAmmo: `[UNTRANSLATED] +100% Primary and Secondary Magazine Refill on Mercy`,
 | 
					    upgrade_OnExecutionAmmo: `+100% Magazinfüllung für Primär- und Sekundärwaffen bei Gnadenstoß`,
 | 
				
			||||||
    upgrade_OnExecutionHealthDrop: `[UNTRANSLATED] +100% Health Orb Chance on Mercy`,
 | 
					    upgrade_OnExecutionHealthDrop: `+100% Gesundheitskugel Chance bei Gnadenstoß`,
 | 
				
			||||||
    upgrade_OnExecutionEnergyDrop: `[UNTRANSLATED] +50% Energy Orb Chance on Mercy`,
 | 
					    upgrade_OnExecutionEnergyDrop: `+50% Energiekugel Chance bei Gnadenstoß`,
 | 
				
			||||||
    upgrade_OnFailHackReset: `[UNTRANSLATED] +50% Hacking Retry Chance`,
 | 
					    upgrade_OnFailHackReset: `+50% Chance, das Hacken bei Fehlschlag zu wiederholen`,
 | 
				
			||||||
    upgrade_DamageReductionOnHack: `[UNTRANSLATED] +75% Damage Reduction while Hacking`,
 | 
					    upgrade_DamageReductionOnHack: `+75% Schadensreduktion beim Hacken`,
 | 
				
			||||||
    upgrade_OnExecutionReviveCompanion: `[UNTRANSLATED] Mercy Kills reduce Companion Recovery by 15s`,
 | 
					    upgrade_OnExecutionReviveCompanion: `Gnadenstoß-Kills verkürzen die Erholungszeit des Begleiters um 15s`,
 | 
				
			||||||
    upgrade_OnExecutionParkourSpeed: `[UNTRANSLATED] +60% Parkour Speed after a Mercy for 15s`,
 | 
					    upgrade_OnExecutionParkourSpeed: `+60% Parkour-Geschwindigkeit für 15s nach Gnadenstoß`,
 | 
				
			||||||
    upgrade_AvatarTimeLimitIncrease: `[UNTRANSLATED] +8s to Hacking`,
 | 
					    upgrade_AvatarTimeLimitIncrease: `+8s extra Zeit beim Hacken`,
 | 
				
			||||||
    upgrade_ElectrifyOnHack: `[UNTRANSLATED] Shock enemies within 20m while Hacking`,
 | 
					    upgrade_ElectrifyOnHack: `Setze beim Hacken Gegner innerhalb von 20m unter Strom`,
 | 
				
			||||||
    upgrade_OnExecutionTerrify: `[UNTRANSLATED] +50% chance for enemies within 15m to cower in fear for 8 seconds on Mercy`,
 | 
					    upgrade_OnExecutionTerrify: `+50% Chance bei Gnadenstoß, dass Feinde innerhalb von 15m vor Furcht für 8s kauern`,
 | 
				
			||||||
    upgrade_OnHackLockers: `[UNTRANSLATED] Unlock 5 lockers within 20m after Hacking`,
 | 
					    upgrade_OnHackLockers: `Schließe nach dem Hacken 5 Spinde innerhalb von 20m auf`,
 | 
				
			||||||
    upgrade_OnExecutionBlind: `[UNTRANSLATED] Blind enemies within 18m on Mercy`,
 | 
					    upgrade_OnExecutionBlind: `Blende bei einem Gnadenstoß Gegner innerhalb von 18m`,
 | 
				
			||||||
    upgrade_OnExecutionDrainPower: `[UNTRANSLATED] Next ability cast gains +50% Ability Strength on Mercy`,
 | 
					    upgrade_OnExecutionDrainPower: `Nächste Fähigkeit erhält +50% Fähigkeitsstärke nach Gnadenstoß`,
 | 
				
			||||||
    upgrade_OnHackSprintSpeed: `[UNTRANSLATED] +75% Sprint Speed for 15s after Hacking`,
 | 
					    upgrade_OnHackSprintSpeed: `+75% Sprint-Geschwindigkeit für 15s nach dem Hacken`,
 | 
				
			||||||
    upgrade_SwiftExecute: `[UNTRANSLATED] +50% Mercy Kill Speed`,
 | 
					    upgrade_SwiftExecute: `+50% Gnadenstoß-Geschwindigkeit`,
 | 
				
			||||||
    upgrade_OnHackInvis: `[UNTRANSLATED] Invisible for 15 seconds after Hacking`,
 | 
					    upgrade_OnHackInvis: `+15s Unsichtbarkeit nach dem Hacken`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    damageType_Electricity: `Elektrizität`,
 | 
					    damageType_Electricity: `Elektrizität`,
 | 
				
			||||||
    damageType_Fire: `Hitze`,
 | 
					    damageType_Fire: `Hitze`,
 | 
				
			||||||
@ -318,8 +346,8 @@ dict = {
 | 
				
			|||||||
    damageType_Poison: `Gift`,
 | 
					    damageType_Poison: `Gift`,
 | 
				
			||||||
    damageType_Radiation: `Strahlung`,
 | 
					    damageType_Radiation: `Strahlung`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    theme_dark: `[UNTRANSLATED] Dark Theme`,
 | 
					    theme_dark: `Dunkles Design`,
 | 
				
			||||||
    theme_light: `[UNTRANSLATED] Light Theme`,
 | 
					    theme_light: `Helles Design`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    prettier_sucks_ass: ``
 | 
					    prettier_sucks_ass: ``
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ dict = {
 | 
				
			|||||||
    general_inventoryUpdateNote: `Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
					    general_inventoryUpdateNote: `Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
				
			||||||
    general_addButton: `Add`,
 | 
					    general_addButton: `Add`,
 | 
				
			||||||
    general_setButton: `Set`,
 | 
					    general_setButton: `Set`,
 | 
				
			||||||
 | 
					    general_none: `None`,
 | 
				
			||||||
    general_bulkActions: `Bulk Actions`,
 | 
					    general_bulkActions: `Bulk Actions`,
 | 
				
			||||||
    general_loading: `Loading...`,
 | 
					    general_loading: `Loading...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -61,6 +62,7 @@ dict = {
 | 
				
			|||||||
    code_mature: `Mature for combat`,
 | 
					    code_mature: `Mature for combat`,
 | 
				
			||||||
    code_unmature: `Regress genetic aging`,
 | 
					    code_unmature: `Regress genetic aging`,
 | 
				
			||||||
    code_succChange: `Successfully changed.`,
 | 
					    code_succChange: `Successfully changed.`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`,
 | 
					    login_description: `Login using your OpenWF account credentials (same as in-game when connecting to this server).`,
 | 
				
			||||||
    login_emailLabel: `Email address`,
 | 
					    login_emailLabel: `Email address`,
 | 
				
			||||||
    login_passwordLabel: `Password`,
 | 
					    login_passwordLabel: `Password`,
 | 
				
			||||||
@ -124,6 +126,33 @@ dict = {
 | 
				
			|||||||
    detailedView_valenceBonusLabel: `Valence Bonus`,
 | 
					    detailedView_valenceBonusLabel: `Valence Bonus`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `You can set or remove the Valence Bonus from your weapon.`,
 | 
					    detailedView_valenceBonusDescription: `You can set or remove the Valence Bonus from your weapon.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `Change Modular Parts`,
 | 
					    detailedView_modularPartsLabel: `Change Modular Parts`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `+200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `+100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `+100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `+250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `+250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `+250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `+200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `+200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `+200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `+75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `+75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `+75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `+1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `+200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `+75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `+25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `+1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `+5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `+2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `Offensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `Defensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `Upgrades Expiry (optional)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `Add Riven`,
 | 
					    mods_addRiven: `Add Riven`,
 | 
				
			||||||
    mods_fingerprint: `Fingerprint`,
 | 
					    mods_fingerprint: `Fingerprint`,
 | 
				
			||||||
@ -202,7 +231,6 @@ dict = {
 | 
				
			|||||||
    cheats_intrinsicsUnlockAll: `Max Rank All Intrinsics`,
 | 
					    cheats_intrinsicsUnlockAll: `Max Rank All Intrinsics`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `Supported syndicate`,
 | 
					    cheats_changeSupportedSyndicate: `Supported syndicate`,
 | 
				
			||||||
    cheats_changeButton: `Change`,
 | 
					    cheats_changeButton: `Change`,
 | 
				
			||||||
    cheats_none: `None`,
 | 
					 | 
				
			||||||
    cheats_markAllAsRead: `Mark Inbox As Read`,
 | 
					    cheats_markAllAsRead: `Mark Inbox As Read`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `World State`,
 | 
					    worldState: `World State`,
 | 
				
			||||||
@ -264,7 +292,7 @@ dict = {
 | 
				
			|||||||
    upgrade_SecondaryCritChance: `+|VAL|% Secondary Critical Chance`,
 | 
					    upgrade_SecondaryCritChance: `+|VAL|% Secondary Critical Chance`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `+|VAL|% Ability Duration`,
 | 
					    upgrade_WarframeAbilityDuration: `+|VAL|% Ability Duration`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `+|VAL|% Ability Strength`,
 | 
					    upgrade_WarframeAbilityStrength: `+|VAL|% Ability Strength`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `+|VAL| Armor`,
 | 
					    upgrade_WarframeArmorMax: `+|VAL| Armor`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `+|VAL| Shields on kill with Blast Damage`,
 | 
					    upgrade_WarframeBlastProc: `+|VAL| Shields on kill with Blast Damage`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `+|VAL|% Casting Speed`,
 | 
					    upgrade_WarframeCastingSpeed: `+|VAL|% Casting Speed`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% Ability Damage on enemies affected by Corrosion Status`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% Ability Damage on enemies affected by Corrosion Status`,
 | 
				
			||||||
@ -279,7 +307,7 @@ dict = {
 | 
				
			|||||||
    upgrade_WarframeHPBoostFromImpact: `+|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `+|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `+|VAL|% Parkour Velocity`,
 | 
					    upgrade_WarframeParkourVelocity: `+|VAL|% Parkour Velocity`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `+|VAL|% Ability Damage on enemies affected by Radiation Status`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `+|VAL|% Ability Damage on enemies affected by Radiation Status`,
 | 
				
			||||||
    upgrade_WarframeRegen: `+|VAL| Health Regen/s`,
 | 
					    upgrade_WarframeHealthRegen: `+|VAL| Health Regen/s`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `+|VAL| Shield`,
 | 
					    upgrade_WarframeShieldMax: `+|VAL| Shield`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `+|VAL|% Energy on Spawn`,
 | 
					    upgrade_WarframeStartingEnergy: `+|VAL|% Energy on Spawn`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `+|VAL|% Toxin Status Effect Damage`,
 | 
					    upgrade_WarframeToxinDamage: `+|VAL|% Toxin Status Effect Damage`,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ dict = {
 | 
				
			|||||||
    general_inventoryUpdateNote: `Para ver los cambios en el juego, necesitas volver a sincronizar tu inventario, por ejemplo, usando el comando /sync del bootstrapper, visitando un dojo o repetidor, o volviendo a iniciar sesión.`,
 | 
					    general_inventoryUpdateNote: `Para ver los cambios en el juego, necesitas volver a sincronizar tu inventario, por ejemplo, usando el comando /sync del bootstrapper, visitando un dojo o repetidor, o volviendo a iniciar sesión.`,
 | 
				
			||||||
    general_addButton: `Agregar`,
 | 
					    general_addButton: `Agregar`,
 | 
				
			||||||
    general_setButton: `Establecer`,
 | 
					    general_setButton: `Establecer`,
 | 
				
			||||||
 | 
					    general_none: `Ninguno`,
 | 
				
			||||||
    general_bulkActions: `Acciones masivas`,
 | 
					    general_bulkActions: `Acciones masivas`,
 | 
				
			||||||
    general_loading: `Cargando...`,
 | 
					    general_loading: `Cargando...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -61,7 +62,8 @@ dict = {
 | 
				
			|||||||
    code_pigment: `Pigmento`,
 | 
					    code_pigment: `Pigmento`,
 | 
				
			||||||
    code_mature: `Listo para el combate`,
 | 
					    code_mature: `Listo para el combate`,
 | 
				
			||||||
    code_unmature: `Regresar el envejecimiento genético`,
 | 
					    code_unmature: `Regresar el envejecimiento genético`,
 | 
				
			||||||
    code_succChange: `[UNTRANSLATED] Successfully changed.`,
 | 
					    code_succChange: `Cambiado correctamente`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `Inicia sesión con las credenciales de tu cuenta OpenWF (las mismas que usas en el juego al conectarte a este servidor).`,
 | 
					    login_description: `Inicia sesión con las credenciales de tu cuenta OpenWF (las mismas que usas en el juego al conectarte a este servidor).`,
 | 
				
			||||||
    login_emailLabel: `Dirección de correo electrónico`,
 | 
					    login_emailLabel: `Dirección de correo electrónico`,
 | 
				
			||||||
    login_passwordLabel: `Contraseña`,
 | 
					    login_passwordLabel: `Contraseña`,
 | 
				
			||||||
@ -124,7 +126,34 @@ dict = {
 | 
				
			|||||||
    detailedView_archonShardsDescription2: `Ten en cuenta que cada fragmento de archón tarda un poco en aplicarse al cargar`,
 | 
					    detailedView_archonShardsDescription2: `Ten en cuenta que cada fragmento de archón tarda un poco en aplicarse al cargar`,
 | 
				
			||||||
    detailedView_valenceBonusLabel: `Bônus de Valência`,
 | 
					    detailedView_valenceBonusLabel: `Bônus de Valência`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `Puedes establecer o quitar el bono de valencia de tu arma.`,
 | 
					    detailedView_valenceBonusDescription: `Puedes establecer o quitar el bono de valencia de tu arma.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`,
 | 
					    detailedView_modularPartsLabel: `Cambiar partes modulares`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `[UNTRANSLATED] Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `[UNTRANSLATED] +200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `[UNTRANSLATED] +100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `[UNTRANSLATED] +100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `[UNTRANSLATED] +250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] +250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] +250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] +200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] +200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] +200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `[UNTRANSLATED] +75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `[UNTRANSLATED] +75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `[UNTRANSLATED] +75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `[UNTRANSLATED] +1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `[UNTRANSLATED] +200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `[UNTRANSLATED] Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `[UNTRANSLATED] +75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `[UNTRANSLATED] +25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `[UNTRANSLATED] +1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `[UNTRANSLATED] +5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `[UNTRANSLATED] +2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `Agregar Agrietado`,
 | 
					    mods_addRiven: `Agregar Agrietado`,
 | 
				
			||||||
    mods_fingerprint: `Huella digital`,
 | 
					    mods_fingerprint: `Huella digital`,
 | 
				
			||||||
@ -203,7 +232,6 @@ dict = {
 | 
				
			|||||||
    cheats_intrinsicsUnlockAll: `Maximizar todos los intrínsecos`,
 | 
					    cheats_intrinsicsUnlockAll: `Maximizar todos los intrínsecos`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `Sindicatos disponibles`,
 | 
					    cheats_changeSupportedSyndicate: `Sindicatos disponibles`,
 | 
				
			||||||
    cheats_changeButton: `Cambiar`,
 | 
					    cheats_changeButton: `Cambiar`,
 | 
				
			||||||
    cheats_none: `Ninguno`,
 | 
					 | 
				
			||||||
    cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
 | 
					    cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `Estado del mundo`,
 | 
					    worldState: `Estado del mundo`,
 | 
				
			||||||
@ -265,7 +293,7 @@ dict = {
 | 
				
			|||||||
    upgrade_SecondaryCritChance: `+|VAL|% de probabilidad crítica en armas secundarias`,
 | 
					    upgrade_SecondaryCritChance: `+|VAL|% de probabilidad crítica en armas secundarias`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `+|VAL|% de duración de habilidades`,
 | 
					    upgrade_WarframeAbilityDuration: `+|VAL|% de duración de habilidades`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `+|VAL|% de fuerza de habilidades`,
 | 
					    upgrade_WarframeAbilityStrength: `+|VAL|% de fuerza de habilidades`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `+|VAL| de armadura`,
 | 
					    upgrade_WarframeArmorMax: `+|VAL| de armadura`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `+|VAL| de escudos al matar con daño de explosión`,
 | 
					    upgrade_WarframeBlastProc: `+|VAL| de escudos al matar con daño de explosión`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `+|VAL|% de velocidad de lanzamiento de habilidades`,
 | 
					    upgrade_WarframeCastingSpeed: `+|VAL|% de velocidad de lanzamiento de habilidades`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado corrosivo`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado corrosivo`,
 | 
				
			||||||
@ -280,7 +308,7 @@ dict = {
 | 
				
			|||||||
    upgrade_WarframeHPBoostFromImpact: `+|VAL1| de salud al eliminar con daño explosivo (máx. |VAL2| de salud)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `+|VAL1| de salud al eliminar con daño explosivo (máx. |VAL2| de salud)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `+|VAL|% de velocidad de parkour`,
 | 
					    upgrade_WarframeParkourVelocity: `+|VAL|% de velocidad de parkour`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado radiactivo`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `+|VAL|% de daño de habilidades a enemigos con estado radiactivo`,
 | 
				
			||||||
    upgrade_WarframeRegen: `+|VAL| de regeneración de salud por segundo`,
 | 
					    upgrade_WarframeHealthRegen: `+|VAL| de regeneración de salud por segundo`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `+|VAL| de escudo`,
 | 
					    upgrade_WarframeShieldMax: `+|VAL| de escudo`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `+|VAL|% de energía al reaparecer`,
 | 
					    upgrade_WarframeStartingEnergy: `+|VAL|% de energía al reaparecer`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `+|VAL|% de daño por efecto de estado tóxico`,
 | 
					    upgrade_WarframeToxinDamage: `+|VAL|% de daño por efecto de estado tóxico`,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ dict = {
 | 
				
			|||||||
    general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
					    general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
				
			||||||
    general_addButton: `Ajouter`,
 | 
					    general_addButton: `Ajouter`,
 | 
				
			||||||
    general_setButton: `[UNTRANSLATED] Set`,
 | 
					    general_setButton: `[UNTRANSLATED] Set`,
 | 
				
			||||||
 | 
					    general_none: `Aucun`,
 | 
				
			||||||
    general_bulkActions: `Action groupée`,
 | 
					    general_bulkActions: `Action groupée`,
 | 
				
			||||||
    general_loading: `[UNTRANSLATED] Loading...`,
 | 
					    general_loading: `[UNTRANSLATED] Loading...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,6 +63,7 @@ dict = {
 | 
				
			|||||||
    code_mature: `Maturer pour le combat`,
 | 
					    code_mature: `Maturer pour le combat`,
 | 
				
			||||||
    code_unmature: `Régrésser l'âge génétique`,
 | 
					    code_unmature: `Régrésser l'âge génétique`,
 | 
				
			||||||
    code_succChange: `[UNTRANSLATED] Successfully changed.`,
 | 
					    code_succChange: `[UNTRANSLATED] Successfully changed.`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `Connexion avec les informations de connexion OpenWF.`,
 | 
					    login_description: `Connexion avec les informations de connexion OpenWF.`,
 | 
				
			||||||
    login_emailLabel: `Email`,
 | 
					    login_emailLabel: `Email`,
 | 
				
			||||||
    login_passwordLabel: `Mot de passe`,
 | 
					    login_passwordLabel: `Mot de passe`,
 | 
				
			||||||
@ -125,6 +127,33 @@ dict = {
 | 
				
			|||||||
    detailedView_valenceBonusLabel: `Bonus de Valence`,
 | 
					    detailedView_valenceBonusLabel: `Bonus de Valence`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `[UNTRANSLATED] You can set or remove the Valence Bonus from your weapon.`,
 | 
					    detailedView_valenceBonusDescription: `[UNTRANSLATED] You can set or remove the Valence Bonus from your weapon.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`,
 | 
					    detailedView_modularPartsLabel: `[UNTRANSLATED] Change Modular Parts`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `[UNTRANSLATED] Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `[UNTRANSLATED] +200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `[UNTRANSLATED] +100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `[UNTRANSLATED] +100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `[UNTRANSLATED] +250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] +250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] +250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] +200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] +200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] +200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `[UNTRANSLATED] +75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `[UNTRANSLATED] +75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `[UNTRANSLATED] +75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `[UNTRANSLATED] +1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `[UNTRANSLATED] +200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `[UNTRANSLATED] Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `[UNTRANSLATED] +75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `[UNTRANSLATED] +25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `[UNTRANSLATED] +1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `[UNTRANSLATED] +5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `[UNTRANSLATED] +2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `Ajouter un riven`,
 | 
					    mods_addRiven: `Ajouter un riven`,
 | 
				
			||||||
    mods_fingerprint: `Empreinte`,
 | 
					    mods_fingerprint: `Empreinte`,
 | 
				
			||||||
@ -203,7 +232,6 @@ dict = {
 | 
				
			|||||||
    cheats_intrinsicsUnlockAll: `Inhérences niveau max`,
 | 
					    cheats_intrinsicsUnlockAll: `Inhérences niveau max`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `Allégeance`,
 | 
					    cheats_changeSupportedSyndicate: `Allégeance`,
 | 
				
			||||||
    cheats_changeButton: `Changer`,
 | 
					    cheats_changeButton: `Changer`,
 | 
				
			||||||
    cheats_none: `Aucun`,
 | 
					 | 
				
			||||||
    cheats_markAllAsRead: `[UNTRANSLATED] Mark Inbox As Read`,
 | 
					    cheats_markAllAsRead: `[UNTRANSLATED] Mark Inbox As Read`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `[UNTRANSLATED] World State`,
 | 
					    worldState: `[UNTRANSLATED] World State`,
 | 
				
			||||||
@ -265,7 +293,7 @@ dict = {
 | 
				
			|||||||
    upgrade_SecondaryCritChance: `+|VAL|% de chance critique sur arme secondaire`,
 | 
					    upgrade_SecondaryCritChance: `+|VAL|% de chance critique sur arme secondaire`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `+|VAL|% de durée de pouvoir`,
 | 
					    upgrade_WarframeAbilityDuration: `+|VAL|% de durée de pouvoir`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `+|VAL|% de puissance de pouvoir`,
 | 
					    upgrade_WarframeAbilityStrength: `+|VAL|% de puissance de pouvoir`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `+|VAL| d'armure`,
 | 
					    upgrade_WarframeArmorMax: `+|VAL| d'armure`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `+|VAL| de boucliers sur élimination avec des dégats d'explosion`,
 | 
					    upgrade_WarframeBlastProc: `+|VAL| de boucliers sur élimination avec des dégats d'explosion`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `+|VAL|% de vitesse de lancement de pouvoir`,
 | 
					    upgrade_WarframeCastingSpeed: `+|VAL|% de vitesse de lancement de pouvoir`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de dégâts de pouvoir sur les ennemis affectés par du statut corrosif`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% de dégâts de pouvoir sur les ennemis affectés par du statut corrosif`,
 | 
				
			||||||
@ -280,7 +308,7 @@ dict = {
 | 
				
			|||||||
    upgrade_WarframeHPBoostFromImpact: `[UNTRANSLATED] +|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `[UNTRANSLATED] +|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `+|VAL|% de vélocité de parkour`,
 | 
					    upgrade_WarframeParkourVelocity: `+|VAL|% de vélocité de parkour`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `+|VAL|% de dégâts de pouvoir sur les ennemis affectés par du statut radiation`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `+|VAL|% de dégâts de pouvoir sur les ennemis affectés par du statut radiation`,
 | 
				
			||||||
    upgrade_WarframeRegen: `+|VAL| régénération de santé/s`,
 | 
					    upgrade_WarframeHealthRegen: `+|VAL| régénération de santé/s`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `+|VAL| de boucliers`,
 | 
					    upgrade_WarframeShieldMax: `+|VAL| de boucliers`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `+|VAL|% d'énergie sur apparition`,
 | 
					    upgrade_WarframeStartingEnergy: `+|VAL|% d'énergie sur apparition`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `+|VAL|% de dégâts sur le statut poison`,
 | 
					    upgrade_WarframeToxinDamage: `+|VAL|% de dégâts sur le statut poison`,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ dict = {
 | 
				
			|||||||
    general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
					    general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. using the bootstrapper's /sync command, visiting a dojo/relay, or relogging.`,
 | 
				
			||||||
    general_addButton: `Добавить`,
 | 
					    general_addButton: `Добавить`,
 | 
				
			||||||
    general_setButton: `Установить`,
 | 
					    general_setButton: `Установить`,
 | 
				
			||||||
 | 
					    general_none: `Отсутствует`,
 | 
				
			||||||
    general_bulkActions: `Массовые действия`,
 | 
					    general_bulkActions: `Массовые действия`,
 | 
				
			||||||
    general_loading: `[UNTRANSLATED] Loading...`,
 | 
					    general_loading: `[UNTRANSLATED] Loading...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,6 +63,7 @@ dict = {
 | 
				
			|||||||
    code_mature: `Подготовить к сражениям`,
 | 
					    code_mature: `Подготовить к сражениям`,
 | 
				
			||||||
    code_unmature: `Регрессия генетического старения`,
 | 
					    code_unmature: `Регрессия генетического старения`,
 | 
				
			||||||
    code_succChange: `Успешно изменено.`,
 | 
					    code_succChange: `Успешно изменено.`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
 | 
					    login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
 | 
				
			||||||
    login_emailLabel: `Адрес электронной почты`,
 | 
					    login_emailLabel: `Адрес электронной почты`,
 | 
				
			||||||
    login_passwordLabel: `Пароль`,
 | 
					    login_passwordLabel: `Пароль`,
 | 
				
			||||||
@ -125,6 +127,33 @@ dict = {
 | 
				
			|||||||
    detailedView_valenceBonusLabel: `Бонус Валентности`,
 | 
					    detailedView_valenceBonusLabel: `Бонус Валентности`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус валентности с вашего оружия.`,
 | 
					    detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус валентности с вашего оружия.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `Изменить Модульные Части`,
 | 
					    detailedView_modularPartsLabel: `Изменить Модульные Части`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `[UNTRANSLATED] Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `[UNTRANSLATED] +200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `[UNTRANSLATED] +100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `[UNTRANSLATED] +100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `[UNTRANSLATED] +250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] +250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] +250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] +200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] +200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] +200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `[UNTRANSLATED] +75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `[UNTRANSLATED] +75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `[UNTRANSLATED] +75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `[UNTRANSLATED] +1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `[UNTRANSLATED] +200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `[UNTRANSLATED] Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `[UNTRANSLATED] +75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `[UNTRANSLATED] +25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `[UNTRANSLATED] +1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `[UNTRANSLATED] +5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `[UNTRANSLATED] +2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `[UNTRANSLATED] Offensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `[UNTRANSLATED] Defensive Upgrade`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `[UNTRANSLATED] Upgrades Expiry (optional)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `Добавить Мод Разлома`,
 | 
					    mods_addRiven: `Добавить Мод Разлома`,
 | 
				
			||||||
    mods_fingerprint: `Отпечаток`,
 | 
					    mods_fingerprint: `Отпечаток`,
 | 
				
			||||||
@ -203,7 +232,6 @@ dict = {
 | 
				
			|||||||
    cheats_intrinsicsUnlockAll: `Полностью улучшить Модуляры`,
 | 
					    cheats_intrinsicsUnlockAll: `Полностью улучшить Модуляры`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `Поддерживаемый синдикат`,
 | 
					    cheats_changeSupportedSyndicate: `Поддерживаемый синдикат`,
 | 
				
			||||||
    cheats_changeButton: `Изменить`,
 | 
					    cheats_changeButton: `Изменить`,
 | 
				
			||||||
    cheats_none: `Отсутствует`,
 | 
					 | 
				
			||||||
    cheats_markAllAsRead: `[UNTRANSLATED] Mark Inbox As Read`,
 | 
					    cheats_markAllAsRead: `[UNTRANSLATED] Mark Inbox As Read`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `[UNTRANSLATED] World State`,
 | 
					    worldState: `[UNTRANSLATED] World State`,
 | 
				
			||||||
@ -265,7 +293,7 @@ dict = {
 | 
				
			|||||||
    upgrade_SecondaryCritChance: `[UNTRANSLATED] +|VAL|% Secondary Critical Chance`,
 | 
					    upgrade_SecondaryCritChance: `[UNTRANSLATED] +|VAL|% Secondary Critical Chance`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `[UNTRANSLATED] +|VAL|% Ability Duration`,
 | 
					    upgrade_WarframeAbilityDuration: `[UNTRANSLATED] +|VAL|% Ability Duration`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `[UNTRANSLATED] +|VAL|% Ability Strength`,
 | 
					    upgrade_WarframeAbilityStrength: `[UNTRANSLATED] +|VAL|% Ability Strength`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `[UNTRANSLATED] +|VAL| Armor`,
 | 
					    upgrade_WarframeArmorMax: `[UNTRANSLATED] +|VAL| Armor`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `[UNTRANSLATED] +|VAL| Shields on kill with Blast Damage`,
 | 
					    upgrade_WarframeBlastProc: `[UNTRANSLATED] +|VAL| Shields on kill with Blast Damage`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `[UNTRANSLATED] +|VAL|% Casting Speed`,
 | 
					    upgrade_WarframeCastingSpeed: `[UNTRANSLATED] +|VAL|% Casting Speed`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Corrosion Status`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Corrosion Status`,
 | 
				
			||||||
@ -280,7 +308,7 @@ dict = {
 | 
				
			|||||||
    upgrade_WarframeHPBoostFromImpact: `[UNTRANSLATED] +|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `[UNTRANSLATED] +|VAL1| Health on kill with Blast Damage (Max |VAL2| Health)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `[UNTRANSLATED] +|VAL|% Parkour Velocity`,
 | 
					    upgrade_WarframeParkourVelocity: `[UNTRANSLATED] +|VAL|% Parkour Velocity`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Radiation Status`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `[UNTRANSLATED] +|VAL|% Ability Damage on enemies affected by Radiation Status`,
 | 
				
			||||||
    upgrade_WarframeRegen: `[UNTRANSLATED] +|VAL| Health Regen/s`,
 | 
					    upgrade_WarframeHealthRegen: `[UNTRANSLATED] +|VAL| Health Regen/s`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `[UNTRANSLATED] +|VAL| Shield`,
 | 
					    upgrade_WarframeShieldMax: `[UNTRANSLATED] +|VAL| Shield`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `[UNTRANSLATED] +|VAL|% Energy on Spawn`,
 | 
					    upgrade_WarframeStartingEnergy: `[UNTRANSLATED] +|VAL|% Energy on Spawn`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `[UNTRANSLATED] +|VAL|% Toxin Status Effect Damage`,
 | 
					    upgrade_WarframeToxinDamage: `[UNTRANSLATED] +|VAL|% Toxin Status Effect Damage`,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,9 @@
 | 
				
			|||||||
// Chinese translation by meb154, bishan178 & Corvus
 | 
					// Chinese translation by meb154, bishan178, nyaoouo, qianlishun, CrazyZhang & Corvus
 | 
				
			||||||
dict = {
 | 
					dict = {
 | 
				
			||||||
    general_inventoryUpdateNote: `注意:要在游戏中查看更改,您需要重新同步库存,例如使用引导程序的 /sync 命令、访问道场/中继站或重新登录客户端.`,
 | 
					    general_inventoryUpdateNote: `注意:要在游戏中查看更改,您需要重新同步库存,例如使用引导程序的 /sync 命令、访问道场/中继站或重新登录客户端.`,
 | 
				
			||||||
    general_addButton: `添加`,
 | 
					    general_addButton: `添加`,
 | 
				
			||||||
    general_setButton: `设置`,
 | 
					    general_setButton: `设置`,
 | 
				
			||||||
 | 
					    general_none: `无`,
 | 
				
			||||||
    general_bulkActions: `批量操作`,
 | 
					    general_bulkActions: `批量操作`,
 | 
				
			||||||
    general_loading: `加载中...`,
 | 
					    general_loading: `加载中...`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,6 +63,7 @@ dict = {
 | 
				
			|||||||
    code_mature: `成长并战备`,
 | 
					    code_mature: `成长并战备`,
 | 
				
			||||||
    code_unmature: `逆转衰老基因`,
 | 
					    code_unmature: `逆转衰老基因`,
 | 
				
			||||||
    code_succChange: `更改成功.`,
 | 
					    code_succChange: `更改成功.`,
 | 
				
			||||||
 | 
					    code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & defensive upgrade.`,
 | 
				
			||||||
    login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同).`,
 | 
					    login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同).`,
 | 
				
			||||||
    login_emailLabel: `电子邮箱`,
 | 
					    login_emailLabel: `电子邮箱`,
 | 
				
			||||||
    login_passwordLabel: `密码`,
 | 
					    login_passwordLabel: `密码`,
 | 
				
			||||||
@ -125,6 +127,33 @@ dict = {
 | 
				
			|||||||
    detailedView_valenceBonusLabel: `效价加成`,
 | 
					    detailedView_valenceBonusLabel: `效价加成`,
 | 
				
			||||||
    detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
 | 
					    detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
 | 
				
			||||||
    detailedView_modularPartsLabel: `更换部件`,
 | 
					    detailedView_modularPartsLabel: `更换部件`,
 | 
				
			||||||
 | 
					    detailedView_suitInvigorationLabel: `[UNTRANSLATED] Warframe Invigoration`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityStrength: `[UNTRANSLATED] +200% Ability Strength`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityRange: `[UNTRANSLATED] +100% Ability Range`,
 | 
				
			||||||
 | 
					    invigorations_offensive_AbilityDuration: `[UNTRANSLATED] +100% Ability Duration`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeDamage: `[UNTRANSLATED] +250% Melee Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryDamage: `[UNTRANSLATED] +250% Primary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryDamage: `[UNTRANSLATED] +250% Secondary Damage`,
 | 
				
			||||||
 | 
					    invigorations_offensive_PrimaryCritChance: `[UNTRANSLATED] +200% Primary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_SecondaryCritChance: `[UNTRANSLATED] +200% Secondary Critical Chance`,
 | 
				
			||||||
 | 
					    invigorations_offensive_MeleeCritChance: `[UNTRANSLATED] +200% Melee Critical Chance`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_utility_AbilityEfficiency: `[UNTRANSLATED] +75% Ability Efficiency`,
 | 
				
			||||||
 | 
					    invigorations_utility_SprintSpeed: `[UNTRANSLATED] +75% Sprint Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_ParkourVelocity: `[UNTRANSLATED] +75% Parkour Velocity`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthMax: `[UNTRANSLATED] +1000 Health`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyMax: `[UNTRANSLATED] +200% Energy Max`,
 | 
				
			||||||
 | 
					    invigorations_utility_StatusImmune: `[UNTRANSLATED] Immune to Status Effects`,
 | 
				
			||||||
 | 
					    invigorations_utility_ReloadSpeed: `[UNTRANSLATED] +75% Reload Speed`,
 | 
				
			||||||
 | 
					    invigorations_utility_HealthRegen: `[UNTRANSLATED] +25 Health Regen/s`,
 | 
				
			||||||
 | 
					    invigorations_utility_ArmorMax: `[UNTRANSLATED] +1000 Armor`,
 | 
				
			||||||
 | 
					    invigorations_utility_Jumps: `[UNTRANSLATED] +5 Jump Resets`,
 | 
				
			||||||
 | 
					    invigorations_utility_EnergyRegen: `[UNTRANSLATED] +2 Energy Regen/s`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    invigorations_offensiveLabel: `进攻型属性`,
 | 
				
			||||||
 | 
					    invigorations_defensiveLabel: `功能型属性`,
 | 
				
			||||||
 | 
					    invigorations_expiryLabel: `活化时效(可选)`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mods_addRiven: `添加裂罅MOD`,
 | 
					    mods_addRiven: `添加裂罅MOD`,
 | 
				
			||||||
    mods_fingerprint: `印记`,
 | 
					    mods_fingerprint: `印记`,
 | 
				
			||||||
@ -203,7 +232,6 @@ dict = {
 | 
				
			|||||||
    cheats_intrinsicsUnlockAll: `所有内源之力最大等级`,
 | 
					    cheats_intrinsicsUnlockAll: `所有内源之力最大等级`,
 | 
				
			||||||
    cheats_changeSupportedSyndicate: `支持的集团`,
 | 
					    cheats_changeSupportedSyndicate: `支持的集团`,
 | 
				
			||||||
    cheats_changeButton: `更改`,
 | 
					    cheats_changeButton: `更改`,
 | 
				
			||||||
    cheats_none: `无`,
 | 
					 | 
				
			||||||
    cheats_markAllAsRead: `收件箱全部标记为已读`,
 | 
					    cheats_markAllAsRead: `收件箱全部标记为已读`,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    worldState: `世界状态配置`,
 | 
					    worldState: `世界状态配置`,
 | 
				
			||||||
@ -265,7 +293,7 @@ dict = {
 | 
				
			|||||||
    upgrade_SecondaryCritChance: `+|VAL|%次要武器暴击几率`,
 | 
					    upgrade_SecondaryCritChance: `+|VAL|%次要武器暴击几率`,
 | 
				
			||||||
    upgrade_WarframeAbilityDuration: `+|VAL|%技能持续时间`,
 | 
					    upgrade_WarframeAbilityDuration: `+|VAL|%技能持续时间`,
 | 
				
			||||||
    upgrade_WarframeAbilityStrength: `+|VAL|%技能强度`,
 | 
					    upgrade_WarframeAbilityStrength: `+|VAL|%技能强度`,
 | 
				
			||||||
    upgrade_WarframeArmourMax: `+|VAL|护甲`,
 | 
					    upgrade_WarframeArmorMax: `+|VAL|护甲`,
 | 
				
			||||||
    upgrade_WarframeBlastProc: `使用爆炸伤害击杀敌人时恢复+|VAL|护盾`,
 | 
					    upgrade_WarframeBlastProc: `使用爆炸伤害击杀敌人时恢复+|VAL|护盾`,
 | 
				
			||||||
    upgrade_WarframeCastingSpeed: `+|VAL|%施放速度`,
 | 
					    upgrade_WarframeCastingSpeed: `+|VAL|%施放速度`,
 | 
				
			||||||
    upgrade_WarframeCorrosiveDamageBoost: `对受腐蚀异常影响的敌人+|VAL|%额外技能伤害`,
 | 
					    upgrade_WarframeCorrosiveDamageBoost: `对受腐蚀异常影响的敌人+|VAL|%额外技能伤害`,
 | 
				
			||||||
@ -280,7 +308,7 @@ dict = {
 | 
				
			|||||||
    upgrade_WarframeHPBoostFromImpact: `通过爆炸伤害击杀的每个敌人可增加|VAL1|生命上限(最大|VAL2|生命上限)`,
 | 
					    upgrade_WarframeHPBoostFromImpact: `通过爆炸伤害击杀的每个敌人可增加|VAL1|生命上限(最大|VAL2|生命上限)`,
 | 
				
			||||||
    upgrade_WarframeParkourVelocity: `+|VAL|%跑酷速度`,
 | 
					    upgrade_WarframeParkourVelocity: `+|VAL|%跑酷速度`,
 | 
				
			||||||
    upgrade_WarframeRadiationDamageBoost: `对受辐射状态影响的敌人+|VAL|%技能伤害`,
 | 
					    upgrade_WarframeRadiationDamageBoost: `对受辐射状态影响的敌人+|VAL|%技能伤害`,
 | 
				
			||||||
    upgrade_WarframeRegen: `+|VAL|/秒生命再生`,
 | 
					    upgrade_WarframeHealthRegen: `+|VAL|/秒生命再生`,
 | 
				
			||||||
    upgrade_WarframeShieldMax: `+|VAL|护盾值`,
 | 
					    upgrade_WarframeShieldMax: `+|VAL|护盾值`,
 | 
				
			||||||
    upgrade_WarframeStartingEnergy: `进任务时+|VAL|%初始能量`,
 | 
					    upgrade_WarframeStartingEnergy: `进任务时+|VAL|%初始能量`,
 | 
				
			||||||
    upgrade_WarframeToxinDamage: `毒素伤害额外+|VAL|%伤害`,
 | 
					    upgrade_WarframeToxinDamage: `毒素伤害额外+|VAL|%伤害`,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user