Compare commits

...

12 Commits

Author SHA1 Message Date
64b43fcccf chore(webui): fixing a mess in the translations (#2498)
Re #2494 (only fixes the strings, **NOT** the weapon issue)

- The invigoration stuff now mentions the numbers, percentages of buffs
- Improved some misleading strings (e.g. "Movement Speed", when it was in fact just "Sprint Speed" instead)
- Improved some inconsistencies in some key names (some weren't like other, similar existing ones)
- Got rid of duplicate "None" string & re-used it properly + re-used existing strings to newly added buttons, instead of using unnecessary extra added strings (more consistent to use existing strings, aside that they are shorter, less lines and less work overall for everyone involved)

If I should change anything, lemme know.

Reviewed-on: OpenWF/SpaceNinjaServer#2498
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-15 20:59:59 -07:00
e407262cf8 fix: don't send baro message ahead of his visit (#2497)
Closes #2495

Reviewed-on: OpenWF/SpaceNinjaServer#2497
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-15 20:59:49 -07:00
00e57c43df fix: charge correct amount of void traces for upgrading to radiant (#2492)
Closes #2490

Reviewed-on: OpenWF/SpaceNinjaServer#2492
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-15 20:59:39 -07:00
2ab9f39507 chore(webui): update Chinese translation (#2493)
Reviewed-on: OpenWF/SpaceNinjaServer#2493
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-15 02:37:43 -07:00
b60723ef54 feat(webui): edit suit invigorations (#2478)
Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: OpenWF/SpaceNinjaServer#2478
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: nyaoouo <nyaoouo@noreply.localhost>
Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>
2025-07-14 20:33:37 -07:00
b3bf291d10 chore: send event messages for boosters (#2487)
Closes #2464

Reviewed-on: OpenWF/SpaceNinjaServer#2487
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-14 20:24:17 -07:00
db86e2d265 chore(webui): update translations (#2489)
- Updated German translation with all new strings
- Added the rest of the missing Chinese translation contributors (only the ones who did actually translate, that is)

Reviewed-on: OpenWF/SpaceNinjaServer#2489
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-14 20:23:56 -07:00
f6cb8414c1 chore(webui): refresh inventory when crafting/buying/gilding kitguns (#2486)
Reviewed-on: OpenWF/SpaceNinjaServer#2486
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-13 21:08:34 -07:00
ba3df4bdbc fix: don't give mastery xp for SpecialItems except for venari (#2484)
Closes #2482

Reviewed-on: OpenWF/SpaceNinjaServer#2484
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-13 21:08:23 -07:00
8feb3a5b3c feat: give kaithe summon at riding level 9 (#2483)
Closes #2480

Reviewed-on: OpenWF/SpaceNinjaServer#2483
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-13 21:08:14 -07:00
66f3d65d77 fix(webui): none syndicate (#2477)
Closes #2475

Reviewed-on: OpenWF/SpaceNinjaServer#2477
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-12 21:20:08 -07:00
b18f06087b chore(webui): update to Spanish translation (#2481)
Reviewed-on: OpenWF/SpaceNinjaServer#2481
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-07-12 21:19:50 -07:00
19 changed files with 639 additions and 203 deletions

View File

@ -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 });
}; };

View File

@ -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 });
}; };

View File

@ -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)}`);
} }

View File

@ -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();

View File

@ -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] => {

View File

@ -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();
};

View File

@ -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) {

View File

@ -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);

View File

@ -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(() => {});
} }
}; };

View File

@ -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;

View File

@ -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
}); });
}
} }
} }

View File

@ -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">

View File

@ -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();
});
}

View File

@ -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: ``
}; };

View File

@ -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`,

View File

@ -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`,

View File

@ -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`,

View File

@ -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`,

View File

@ -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|%伤害`,