forked from OpenWF/SpaceNinjaServer
Compare commits
8 Commits
32c95b6715
...
a31e293a6e
| Author | SHA1 | Date | |
|---|---|---|---|
| a31e293a6e | |||
| de9dfb3d71 | |||
| fc38f818dd | |||
| e76f08db89 | |||
| 7bcb5f21ce | |||
| 3641d63f6f | |||
| 71c4835a69 | |||
| 86a63ace41 |
@ -11,7 +11,6 @@
|
|||||||
"administratorNames": [],
|
"administratorNames": [],
|
||||||
"autoCreateAccount": true,
|
"autoCreateAccount": true,
|
||||||
"skipTutorial": false,
|
"skipTutorial": false,
|
||||||
"unlockAllSkins": false,
|
|
||||||
"fullyStockedVendors": false,
|
"fullyStockedVendors": false,
|
||||||
"skipClanKeyCrafting": false,
|
"skipClanKeyCrafting": false,
|
||||||
"spoofMasteryRank": -1,
|
"spoofMasteryRank": -1,
|
||||||
|
|||||||
@ -11,7 +11,11 @@ export const getVoidProjectionRewardsController: RequestHandler = async (req, re
|
|||||||
|
|
||||||
if (data.ParticipantInfo.QualifiesForReward && !data.ParticipantInfo.HaveRewardResponse) {
|
if (data.ParticipantInfo.QualifiesForReward && !data.ParticipantInfo.HaveRewardResponse) {
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId);
|
||||||
await crackRelic(inventory, data.ParticipantInfo);
|
const reward = await crackRelic(inventory, data.ParticipantInfo);
|
||||||
|
if (!inventory.MissionRelicRewards || inventory.MissionRelicRewards.length >= data.CurrentWave) {
|
||||||
|
inventory.MissionRelicRewards = [];
|
||||||
|
}
|
||||||
|
inventory.MissionRelicRewards.push({ ItemType: reward.type, ItemCount: reward.itemCount });
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -334,16 +334,39 @@ export const getInventoryResponse = async (
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.unlockAllSkins) {
|
const skinLookupTable: Record<number, string> = {};
|
||||||
const missingWeaponSkins = new Set(Object.keys(ExportCustoms));
|
for (const key of Object.keys(ExportCustoms)) {
|
||||||
inventoryResponse.WeaponSkins.forEach(x => missingWeaponSkins.delete(x.ItemType));
|
skinLookupTable[catBreadHash(key)] = key;
|
||||||
for (const uniqueName of missingWeaponSkins) {
|
}
|
||||||
inventoryResponse.WeaponSkins.push({
|
|
||||||
ItemId: {
|
for (const key of equipmentKeys) {
|
||||||
$oid: "ca70ca70ca70ca70" + catBreadHash(uniqueName).toString(16).padStart(8, "0")
|
if (key in inventoryResponse) {
|
||||||
},
|
for (const equipment of inventoryResponse[key]) {
|
||||||
ItemType: uniqueName
|
for (const config of equipment.Configs) {
|
||||||
});
|
if (config.Skins) {
|
||||||
|
for (let i = 0; i < config.Skins.length; i++) {
|
||||||
|
const skinId: string = config.Skins[i];
|
||||||
|
if (skinId.substring(0, 16) === "ca70ca70ca70ca70") {
|
||||||
|
const skinItemType = skinLookupTable[parseInt(skinId.substring(16), 16)];
|
||||||
|
const inventoryItem = inventoryResponse.WeaponSkins.find(
|
||||||
|
x => x.ItemType == skinItemType
|
||||||
|
);
|
||||||
|
|
||||||
|
if (inventoryItem) {
|
||||||
|
config.Skins[i] = inventoryItem.ItemId.$oid;
|
||||||
|
} else {
|
||||||
|
config.Skins[i] = skinItemType;
|
||||||
|
if (!ExportCustoms[skinItemType].alwaysAvailable) {
|
||||||
|
logger.warn(
|
||||||
|
`Get ${skinItemType} or you may loose your appearance on ${equipment.ItemType}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -149,7 +149,10 @@ export const nemesisController: RequestHandler = async (req, res) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inventory.Nemesis!.HenchmenKilled += antivirusGain;
|
const antivirusGainMultiplier = (
|
||||||
|
await getInventory(account._id.toString(), "nemesisAntivirusGainMultiplier")
|
||||||
|
).nemesisAntivirusGainMultiplier;
|
||||||
|
inventory.Nemesis!.HenchmenKilled += antivirusGain * (antivirusGainMultiplier ?? 1);
|
||||||
if (inventory.Nemesis!.HenchmenKilled >= 100) {
|
if (inventory.Nemesis!.HenchmenKilled >= 100) {
|
||||||
inventory.Nemesis!.HenchmenKilled = 100;
|
inventory.Nemesis!.HenchmenKilled = 100;
|
||||||
|
|
||||||
|
|||||||
@ -77,6 +77,9 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
requiredFields.add("CrewShipSalvagedWeaponSkins");
|
requiredFields.add("CrewShipSalvagedWeaponSkins");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (payload.Items.WeaponSkins) {
|
||||||
|
requiredFields.add("WeaponSkins");
|
||||||
|
}
|
||||||
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
|
const inventory = await getInventory(accountId, Array.from(requiredFields).join(" "));
|
||||||
|
|
||||||
// Give currency
|
// Give currency
|
||||||
@ -302,6 +305,11 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
addFusionTreasures(inventory, [parseFusionTreasure(sellItem.String, sellItem.Count * -1)]);
|
addFusionTreasures(inventory, [parseFusionTreasure(sellItem.String, sellItem.Count * -1)]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (payload.Items.WeaponSkins) {
|
||||||
|
payload.Items.WeaponSkins.forEach(sellItem => {
|
||||||
|
inventory.WeaponSkins.pull({ _id: sellItem.String });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
res.json({
|
res.json({
|
||||||
@ -335,6 +343,7 @@ interface ISellRequest {
|
|||||||
CrewShipWeapons?: ISellItem[];
|
CrewShipWeapons?: ISellItem[];
|
||||||
CrewShipWeaponSkins?: ISellItem[];
|
CrewShipWeaponSkins?: ISellItem[];
|
||||||
FusionTreasures?: ISellItem[];
|
FusionTreasures?: ISellItem[];
|
||||||
|
WeaponSkins?: ISellItem[];
|
||||||
};
|
};
|
||||||
SellPrice: number;
|
SellPrice: number;
|
||||||
SellCurrency:
|
SellCurrency:
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "../../services/inventoryService.ts";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { hasAccessToDojo, getGuildForRequestEx, hasGuildPermission } from "../../services/guildService.ts";
|
import { getGuildForRequestEx, hasGuildPermission } from "../../services/guildService.ts";
|
||||||
import { GuildPermission } from "../../types/guildTypes.ts";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { ITypeCount } from "../../types/commonTypes.ts";
|
import type { ITypeCount } from "../../types/commonTypes.ts";
|
||||||
|
|
||||||
export const addVaultDecoRecipeController: RequestHandler = async (req, res) => {
|
export const addVaultDecoRecipeController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as ITypeCount[];
|
const requests = req.body as ITypeCount[];
|
||||||
const inventory = await getInventory(accountId, "LevelKeys GuildId");
|
const inventory = await getInventory(accountId, "GuildId");
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Architect))) {
|
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Architect))) {
|
||||||
res.status(400).send("-1").end();
|
res.status(400).send("-1").end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,36 +0,0 @@
|
|||||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
|
||||||
import { getInventory } from "../../services/inventoryService.ts";
|
|
||||||
import type { RequestHandler } from "express";
|
|
||||||
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
|
|
||||||
|
|
||||||
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();
|
|
||||||
broadcastInventoryUpdate(req);
|
|
||||||
};
|
|
||||||
@ -66,6 +66,7 @@ interface ItemLists {
|
|||||||
VaultDecoRecipes: ListedItem[];
|
VaultDecoRecipes: ListedItem[];
|
||||||
FlavourItems: ListedItem[];
|
FlavourItems: ListedItem[];
|
||||||
ShipDecorations: ListedItem[];
|
ShipDecorations: ListedItem[];
|
||||||
|
WeaponSkins: ListedItem[];
|
||||||
//circuitGameModes: ListedItem[];
|
//circuitGameModes: ListedItem[];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +108,8 @@ const getItemListsController: RequestHandler = (req, response) => {
|
|||||||
TechProjects: [],
|
TechProjects: [],
|
||||||
VaultDecoRecipes: [],
|
VaultDecoRecipes: [],
|
||||||
FlavourItems: [],
|
FlavourItems: [],
|
||||||
ShipDecorations: []
|
ShipDecorations: [],
|
||||||
|
WeaponSkins: []
|
||||||
/*circuitGameModes: [
|
/*circuitGameModes: [
|
||||||
{
|
{
|
||||||
uniqueName: "Survival",
|
uniqueName: "Survival",
|
||||||
@ -298,10 +300,18 @@ const getItemListsController: RequestHandler = (req, response) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (const [uniqueName, item] of Object.entries(ExportCustoms)) {
|
for (const [uniqueName, item] of Object.entries(ExportCustoms)) {
|
||||||
res.miscitems.push({
|
if (
|
||||||
uniqueName: uniqueName,
|
item.productCategory == "WeaponSkins" &&
|
||||||
name: getString(item.name, lang)
|
!uniqueName.startsWith("/Lotus/Types/Game/Lotus") && // Base Items
|
||||||
});
|
!uniqueName.endsWith("ProjectileSkin") && // UnrealTournament ProjectileSkins
|
||||||
|
!uniqueName.endsWith("Coat") // Frost Prime stuff
|
||||||
|
) {
|
||||||
|
res.WeaponSkins.push({
|
||||||
|
uniqueName: uniqueName,
|
||||||
|
name: getString(item.name, lang),
|
||||||
|
alwaysAvailable: item.alwaysAvailable
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
|
for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
|
||||||
|
|||||||
@ -3,12 +3,19 @@ import { getAccountIdForRequest } from "../../services/loginService.ts";
|
|||||||
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
||||||
import type { IAccountCheats } from "../../types/inventoryTypes/inventoryTypes.ts";
|
import type { IAccountCheats } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
import { logger } from "../../utils/logger.ts";
|
||||||
|
|
||||||
export const setAccountCheatController: RequestHandler = async (req, res) => {
|
export const setAccountCheatController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const payload = req.body as ISetAccountCheatRequest;
|
const payload = req.body as ISetAccountCheatRequest;
|
||||||
const inventory = await getInventory(accountId, payload.key);
|
const inventory = await getInventory(accountId, payload.key);
|
||||||
inventory[payload.key] = payload.value;
|
|
||||||
|
if (payload.value == undefined) {
|
||||||
|
logger.warn(`Aborting setting ${payload.key} as undefined!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
inventory[payload.key] = payload.value as never;
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
res.end();
|
res.end();
|
||||||
if (["infiniteCredits", "infinitePlatinum", "infiniteEndo", "infiniteRegalAya"].indexOf(payload.key) != -1) {
|
if (["infiniteCredits", "infinitePlatinum", "infiniteEndo", "infiniteRegalAya"].indexOf(payload.key) != -1) {
|
||||||
@ -18,5 +25,5 @@ export const setAccountCheatController: RequestHandler = async (req, res) => {
|
|||||||
|
|
||||||
interface ISetAccountCheatRequest {
|
interface ISetAccountCheatRequest {
|
||||||
key: keyof IAccountCheats;
|
key: keyof IAccountCheats;
|
||||||
value: boolean;
|
value: IAccountCheats[keyof IAccountCheats];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,44 +1,19 @@
|
|||||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "../../services/inventoryService.ts";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportBoosters } from "warframe-public-export-plus";
|
import type { IBooster } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
|
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
|
||||||
|
|
||||||
const I32_MAX = 0x7fffffff;
|
|
||||||
|
|
||||||
export const setBoosterController: RequestHandler = async (req, res) => {
|
export const setBoosterController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as { ItemType: string; ExpiryDate: number }[];
|
const requests = req.body as IBooster[];
|
||||||
const inventory = await getInventory(accountId, "Boosters");
|
const inventory = await getInventory(accountId, "Boosters");
|
||||||
const boosters = inventory.Boosters;
|
for (const request of requests) {
|
||||||
if (
|
const index = inventory.Boosters.findIndex(item => item.ItemType === request.ItemType);
|
||||||
requests.some(request => {
|
if (index !== -1) {
|
||||||
if (typeof request.ItemType !== "string") return true;
|
inventory.Boosters[index].ExpiryDate = request.ExpiryDate;
|
||||||
if (Object.entries(ExportBoosters).find(([_, item]) => item.typeName === request.ItemType) === undefined)
|
|
||||||
return true;
|
|
||||||
if (typeof request.ExpiryDate !== "number") return true;
|
|
||||||
if (request.ExpiryDate < 0 || request.ExpiryDate > I32_MAX) return true;
|
|
||||||
return false;
|
|
||||||
})
|
|
||||||
) {
|
|
||||||
res.status(400).send("Invalid ItemType provided.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const now = Math.trunc(Date.now() / 1000);
|
|
||||||
for (const { ItemType, ExpiryDate } of requests) {
|
|
||||||
if (ExpiryDate <= now) {
|
|
||||||
// remove expired boosters
|
|
||||||
const index = boosters.findIndex(item => item.ItemType === ItemType);
|
|
||||||
if (index !== -1) {
|
|
||||||
boosters.splice(index, 1);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
const boosterItem = boosters.find(item => item.ItemType === ItemType);
|
inventory.Boosters.push(request);
|
||||||
if (boosterItem) {
|
|
||||||
boosterItem.ExpiryDate = ExpiryDate;
|
|
||||||
} else {
|
|
||||||
boosters.push({ ItemType, ExpiryDate });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { GuildMember } from "../../models/guildModel.ts";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getGuildForRequestEx, hasAccessToDojo } from "../../services/guildService.ts";
|
import { getGuildForRequestEx } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "../../services/inventoryService.ts";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IGuildCheats } from "../../types/guildTypes.ts";
|
import type { IGuildCheats } from "../../types/guildTypes.ts";
|
||||||
@ -8,12 +8,12 @@ import type { RequestHandler } from "express";
|
|||||||
export const setGuildCheatController: RequestHandler = async (req, res) => {
|
export const setGuildCheatController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const payload = req.body as ISetGuildCheatRequest;
|
const payload = req.body as ISetGuildCheatRequest;
|
||||||
const inventory = await getInventory(accountId, `${payload.key} GuildId LevelKeys`);
|
const inventory = await getInventory(accountId, `GuildId`);
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
const member = await GuildMember.findOne({ accountId: accountId, guildId: guild._id });
|
const member = await GuildMember.findOne({ accountId: accountId, guildId: guild._id });
|
||||||
|
|
||||||
if (member) {
|
if (member) {
|
||||||
if (!hasAccessToDojo(inventory) || member.rank > 1) {
|
if (member.rank > 1) {
|
||||||
res.end();
|
res.end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
27
src/controllers/custom/setInvigorationController.ts
Normal file
27
src/controllers/custom/setInvigorationController.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
|
||||||
|
|
||||||
|
export const setInvigorationController: RequestHandler = async (req, res) => {
|
||||||
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
const request = req.body as ISetInvigorationRequest;
|
||||||
|
const inventory = await getInventory(accountId, "Suits");
|
||||||
|
const suit = inventory.Suits.id(request.oid);
|
||||||
|
if (suit) {
|
||||||
|
const hasUpgrades = request.DefensiveUpgrade && request.OffensiveUpgrade && request.UpgradesExpiry;
|
||||||
|
suit.DefensiveUpgrade = hasUpgrades ? request.DefensiveUpgrade : undefined;
|
||||||
|
suit.OffensiveUpgrade = hasUpgrades ? request.OffensiveUpgrade : undefined;
|
||||||
|
suit.UpgradesExpiry = hasUpgrades ? new Date(request.UpgradesExpiry) : undefined;
|
||||||
|
await inventory.save();
|
||||||
|
broadcastInventoryUpdate(req);
|
||||||
|
}
|
||||||
|
res.end();
|
||||||
|
};
|
||||||
|
|
||||||
|
interface ISetInvigorationRequest {
|
||||||
|
oid: string;
|
||||||
|
DefensiveUpgrade: string;
|
||||||
|
OffensiveUpgrade: string;
|
||||||
|
UpgradesExpiry: number;
|
||||||
|
}
|
||||||
@ -2,7 +2,6 @@ import { getAccountIdForRequest } from "../../services/loginService.ts";
|
|||||||
import { getInventory } from "../../services/inventoryService.ts";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import {
|
import {
|
||||||
hasAccessToDojo,
|
|
||||||
getGuildForRequestEx,
|
getGuildForRequestEx,
|
||||||
setGuildTechLogState,
|
setGuildTechLogState,
|
||||||
processFundedGuildTechProject,
|
processFundedGuildTechProject,
|
||||||
@ -19,9 +18,9 @@ import { GuildMember } from "../../models/guildModel.ts";
|
|||||||
export const addTechProjectController: RequestHandler = async (req, res) => {
|
export const addTechProjectController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as ITechProjectRequest[];
|
const requests = req.body as ITechProjectRequest[];
|
||||||
const inventory = await getInventory(accountId, "LevelKeys GuildId");
|
const inventory = await getInventory(accountId, "GuildId");
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
||||||
res.status(400).send("-1").end();
|
res.status(400).send("-1").end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -54,9 +53,9 @@ export const addTechProjectController: RequestHandler = async (req, res) => {
|
|||||||
export const removeTechProjectController: RequestHandler = async (req, res) => {
|
export const removeTechProjectController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as ITechProjectRequest[];
|
const requests = req.body as ITechProjectRequest[];
|
||||||
const inventory = await getInventory(accountId, "LevelKeys GuildId");
|
const inventory = await getInventory(accountId, "GuildId");
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
||||||
res.status(400).send("-1").end();
|
res.status(400).send("-1").end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -74,13 +73,13 @@ export const removeTechProjectController: RequestHandler = async (req, res) => {
|
|||||||
export const fundTechProjectController: RequestHandler = async (req, res) => {
|
export const fundTechProjectController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as ITechProjectRequest[];
|
const requests = req.body as ITechProjectRequest[];
|
||||||
const inventory = await getInventory(accountId, "LevelKeys GuildId");
|
const inventory = await getInventory(accountId, "GuildId");
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
const guildMember = (await GuildMember.findOne(
|
const guildMember = (await GuildMember.findOne(
|
||||||
{ accountId, guildId: guild._id },
|
{ accountId, guildId: guild._id },
|
||||||
"RegularCreditsContributed MiscItemsContributed"
|
"RegularCreditsContributed MiscItemsContributed"
|
||||||
))!;
|
))!;
|
||||||
if (!hasAccessToDojo(inventory)) {
|
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
||||||
res.status(400).send("-1").end();
|
res.status(400).send("-1").end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -105,9 +104,9 @@ export const fundTechProjectController: RequestHandler = async (req, res) => {
|
|||||||
export const completeTechProjectsController: RequestHandler = async (req, res) => {
|
export const completeTechProjectsController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const requests = req.body as ITechProjectRequest[];
|
const requests = req.body as ITechProjectRequest[];
|
||||||
const inventory = await getInventory(accountId, "LevelKeys GuildId");
|
const inventory = await getInventory(accountId, "GuildId");
|
||||||
const guild = await getGuildForRequestEx(req, inventory);
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
if (!hasAccessToDojo(inventory)) {
|
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Tech))) {
|
||||||
res.status(400).send("-1").end();
|
res.status(400).send("-1").end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,6 +54,9 @@ export const crackRelic = async (
|
|||||||
(await handleStoreItemAcquisition(reward.type, inventory, reward.itemCount)).InventoryChanges
|
(await handleStoreItemAcquisition(reward.type, inventory, reward.itemCount)).InventoryChanges
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Client has picked its own reward (for lack of choice)
|
||||||
|
participant.ChosenRewardOwner = participant.AccountId;
|
||||||
|
|
||||||
return reward;
|
return reward;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1462,11 +1462,20 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|||||||
flawlessRelicsAlwaysGiveSilverReward: Boolean,
|
flawlessRelicsAlwaysGiveSilverReward: Boolean,
|
||||||
radiantRelicsAlwaysGiveGoldReward: Boolean,
|
radiantRelicsAlwaysGiveGoldReward: Boolean,
|
||||||
disableDailyTribute: Boolean,
|
disableDailyTribute: Boolean,
|
||||||
|
nemesisHenchmenKillsMultiplierGrineer: Number,
|
||||||
|
nemesisHenchmenKillsMultiplierCorpus: Number,
|
||||||
|
nemesisAntivirusGainMultiplier: Number,
|
||||||
|
nemesisHintProgressMultiplierGrineer: Number,
|
||||||
|
nemesisHintProgressMultiplierCorpus: Number,
|
||||||
|
nemesisExtraWeapon: Number,
|
||||||
|
|
||||||
SubscribedToEmails: { type: Number, default: 0 },
|
SubscribedToEmails: { type: Number, default: 0 },
|
||||||
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
||||||
RewardSeed: BigInt,
|
RewardSeed: BigInt,
|
||||||
|
|
||||||
|
// Temporary data so we can show all relic rewards from an endless mission at EOM
|
||||||
|
MissionRelicRewards: { type: [typeCountSchema], default: undefined },
|
||||||
|
|
||||||
//Credit
|
//Credit
|
||||||
RegularCredits: { type: Number, default: 0 },
|
RegularCredits: { type: Number, default: 0 },
|
||||||
//Platinum
|
//Platinum
|
||||||
@ -1835,6 +1844,7 @@ inventorySchema.set("toJSON", {
|
|||||||
delete returnedObject._id;
|
delete returnedObject._id;
|
||||||
delete returnedObject.__v;
|
delete returnedObject.__v;
|
||||||
delete returnedObject.accountOwnerId;
|
delete returnedObject.accountOwnerId;
|
||||||
|
delete returnedObject.MissionRelicRewards;
|
||||||
|
|
||||||
const inventoryDatabase = returnedObject as Partial<IInventoryDatabase>;
|
const inventoryDatabase = returnedObject as Partial<IInventoryDatabase>;
|
||||||
const inventoryResponse = returnedObject as IInventoryClient;
|
const inventoryResponse = returnedObject as IInventoryClient;
|
||||||
|
|||||||
@ -43,7 +43,7 @@ import { setBoosterController } from "../controllers/custom/setBoosterController
|
|||||||
import { updateFingerprintController } from "../controllers/custom/updateFingerprintController.ts";
|
import { updateFingerprintController } from "../controllers/custom/updateFingerprintController.ts";
|
||||||
import { unlockLevelCapController } from "../controllers/custom/unlockLevelCapController.ts";
|
import { unlockLevelCapController } from "../controllers/custom/unlockLevelCapController.ts";
|
||||||
import { changeModularPartsController } from "../controllers/custom/changeModularPartsController.ts";
|
import { changeModularPartsController } from "../controllers/custom/changeModularPartsController.ts";
|
||||||
import { editSuitInvigorationUpgradeController } from "../controllers/custom/editSuitInvigorationUpgradeController.ts";
|
import { setInvigorationController } from "../controllers/custom/setInvigorationController.ts";
|
||||||
import { setAccountCheatController } from "../controllers/custom/setAccountCheatController.ts";
|
import { setAccountCheatController } from "../controllers/custom/setAccountCheatController.ts";
|
||||||
import { setGuildCheatController } from "../controllers/custom/setGuildCheatController.ts";
|
import { setGuildCheatController } from "../controllers/custom/setGuildCheatController.ts";
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ customRouter.post("/setBooster", setBoosterController);
|
|||||||
customRouter.post("/updateFingerprint", updateFingerprintController);
|
customRouter.post("/updateFingerprint", updateFingerprintController);
|
||||||
customRouter.post("/unlockLevelCap", unlockLevelCapController);
|
customRouter.post("/unlockLevelCap", unlockLevelCapController);
|
||||||
customRouter.post("/changeModularParts", changeModularPartsController);
|
customRouter.post("/changeModularParts", changeModularPartsController);
|
||||||
customRouter.post("/editSuitInvigorationUpgrade", editSuitInvigorationUpgradeController);
|
customRouter.post("/setInvigoration", setInvigorationController);
|
||||||
customRouter.post("/setAccountCheat", setAccountCheatController);
|
customRouter.post("/setAccountCheat", setAccountCheatController);
|
||||||
customRouter.post("/setGuildCheat", setGuildCheatController);
|
customRouter.post("/setGuildCheat", setGuildCheatController);
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,6 @@ export interface IConfig {
|
|||||||
administratorNames?: string[];
|
administratorNames?: string[];
|
||||||
autoCreateAccount?: boolean;
|
autoCreateAccount?: boolean;
|
||||||
skipTutorial?: boolean;
|
skipTutorial?: boolean;
|
||||||
unlockAllSkins?: boolean;
|
|
||||||
fullyStockedVendors?: boolean;
|
fullyStockedVendors?: boolean;
|
||||||
skipClanKeyCrafting?: boolean;
|
skipClanKeyCrafting?: boolean;
|
||||||
spoofMasteryRank?: number;
|
spoofMasteryRank?: number;
|
||||||
@ -128,7 +127,8 @@ export const configRemovedOptionsKeys = [
|
|||||||
"fastClanAscension",
|
"fastClanAscension",
|
||||||
"unlockAllFlavourItems",
|
"unlockAllFlavourItems",
|
||||||
"unlockAllShipDecorations",
|
"unlockAllShipDecorations",
|
||||||
"unlockAllDecoRecipes"
|
"unlockAllDecoRecipes",
|
||||||
|
"unlockAllSkins"
|
||||||
];
|
];
|
||||||
|
|
||||||
export const configPath = path.join(repoDir, args.configPath ?? "config.json");
|
export const configPath = path.join(repoDir, args.configPath ?? "config.json");
|
||||||
|
|||||||
@ -210,10 +210,29 @@ export const addMissionInventoryUpdates = async (
|
|||||||
inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
|
inventory.NemesisAbandonedRewards = inventoryUpdates.RewardInfo.NemesisAbandonedRewards;
|
||||||
}
|
}
|
||||||
if (inventoryUpdates.RewardInfo.NemesisHenchmenKills && inventory.Nemesis) {
|
if (inventoryUpdates.RewardInfo.NemesisHenchmenKills && inventory.Nemesis) {
|
||||||
inventory.Nemesis.HenchmenKilled += inventoryUpdates.RewardInfo.NemesisHenchmenKills;
|
let HenchmenKilledMultiplier = 1;
|
||||||
|
switch (inventory.Nemesis.Faction) {
|
||||||
|
case "FC_GRINEER":
|
||||||
|
HenchmenKilledMultiplier = inventory.nemesisHenchmenKillsMultiplierGrineer ?? 1;
|
||||||
|
break;
|
||||||
|
case "FC_CORPUS":
|
||||||
|
HenchmenKilledMultiplier = inventory.nemesisHenchmenKillsMultiplierCorpus ?? 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inventory.Nemesis.HenchmenKilled +=
|
||||||
|
inventoryUpdates.RewardInfo.NemesisHenchmenKills * HenchmenKilledMultiplier;
|
||||||
}
|
}
|
||||||
if (inventoryUpdates.RewardInfo.NemesisHintProgress && inventory.Nemesis) {
|
if (inventoryUpdates.RewardInfo.NemesisHintProgress && inventory.Nemesis) {
|
||||||
inventory.Nemesis.HintProgress += inventoryUpdates.RewardInfo.NemesisHintProgress;
|
let HintProgressMultiplier = 1;
|
||||||
|
switch (inventory.Nemesis.Faction) {
|
||||||
|
case "FC_GRINEER":
|
||||||
|
HintProgressMultiplier = inventory.nemesisHintProgressMultiplierGrineer ?? 1;
|
||||||
|
break;
|
||||||
|
case "FC_CORPUS":
|
||||||
|
HintProgressMultiplier = inventory.nemesisHintProgressMultiplierCorpus ?? 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inventory.Nemesis.HintProgress += inventoryUpdates.RewardInfo.NemesisHintProgress * HintProgressMultiplier;
|
||||||
if (inventory.Nemesis.Faction != "FC_INFESTATION" && inventory.Nemesis.Hints.length != 3) {
|
if (inventory.Nemesis.Faction != "FC_INFESTATION" && inventory.Nemesis.Hints.length != 3) {
|
||||||
const progressNeeded = [35, 60, 100][inventory.Nemesis.Hints.length];
|
const progressNeeded = [35, 60, 100][inventory.Nemesis.Hints.length];
|
||||||
if (inventory.Nemesis.HintProgress >= progressNeeded) {
|
if (inventory.Nemesis.HintProgress >= progressNeeded) {
|
||||||
@ -819,6 +838,8 @@ export const addMissionInventoryUpdates = async (
|
|||||||
const att: string[] = [];
|
const att: string[] = [];
|
||||||
let countedAtt: ITypeCount[] | undefined;
|
let countedAtt: ITypeCount[] | undefined;
|
||||||
|
|
||||||
|
const extraWeaponCheat = inventory.nemesisExtraWeapon ?? 0; // 0 means no extra weapon and token
|
||||||
|
|
||||||
if (value.killed) {
|
if (value.killed) {
|
||||||
if (
|
if (
|
||||||
value.weaponLoc &&
|
value.weaponLoc &&
|
||||||
@ -827,6 +848,20 @@ export const addMissionInventoryUpdates = async (
|
|||||||
const weaponType = manifest.weapons[inventory.Nemesis.WeaponIdx];
|
const weaponType = manifest.weapons[inventory.Nemesis.WeaponIdx];
|
||||||
giveNemesisWeaponRecipe(inventory, weaponType, value.nemesisName, value.weaponLoc, profile);
|
giveNemesisWeaponRecipe(inventory, weaponType, value.nemesisName, value.weaponLoc, profile);
|
||||||
att.push(weaponType);
|
att.push(weaponType);
|
||||||
|
if (extraWeaponCheat >= 1) {
|
||||||
|
for (let i = 0; i < extraWeaponCheat; i++) {
|
||||||
|
const randomIndex = Math.floor(Math.random() * manifest.weapons.length);
|
||||||
|
const randomWeapon = manifest.weapons[randomIndex];
|
||||||
|
giveNemesisWeaponRecipe(
|
||||||
|
inventory,
|
||||||
|
randomWeapon,
|
||||||
|
value.nemesisName,
|
||||||
|
undefined,
|
||||||
|
profile
|
||||||
|
);
|
||||||
|
att.push(randomWeapon);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//if (value.petLoc) {
|
//if (value.petLoc) {
|
||||||
if (profile.petHead) {
|
if (profile.petHead) {
|
||||||
@ -870,7 +905,7 @@ export const addMissionInventoryUpdates = async (
|
|||||||
countedAtt = [
|
countedAtt = [
|
||||||
{
|
{
|
||||||
ItemType: "/Lotus/Types/Items/MiscItems/CodaWeaponBucks",
|
ItemType: "/Lotus/Types/Items/MiscItems/CodaWeaponBucks",
|
||||||
ItemCount: getKillTokenRewardCount(inventory.Nemesis.fp)
|
ItemCount: getKillTokenRewardCount(inventory.Nemesis.fp) * (extraWeaponCheat + 1)
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
addMiscItems(inventory, countedAtt);
|
addMiscItems(inventory, countedAtt);
|
||||||
@ -1299,13 +1334,21 @@ export const addMissionRewards = async (
|
|||||||
rngRewardCredits: inventoryChanges.RegularCredits ?? 0
|
rngRewardCredits: inventoryChanges.RegularCredits ?? 0
|
||||||
});
|
});
|
||||||
|
|
||||||
if (
|
if (voidTearWave && voidTearWave.Participants[0].QualifiesForReward) {
|
||||||
voidTearWave &&
|
if (!voidTearWave.Participants[0].HaveRewardResponse) {
|
||||||
voidTearWave.Participants[0].QualifiesForReward &&
|
// non-endless fissure; giving reward now
|
||||||
!voidTearWave.Participants[0].HaveRewardResponse
|
const reward = await crackRelic(inventory, voidTearWave.Participants[0], inventoryChanges);
|
||||||
) {
|
MissionRewards.push({ StoreItem: reward.type, ItemCount: reward.itemCount });
|
||||||
const reward = await crackRelic(inventory, voidTearWave.Participants[0], inventoryChanges);
|
} else if (inventory.MissionRelicRewards) {
|
||||||
MissionRewards.push({ StoreItem: reward.type, ItemCount: reward.itemCount });
|
// endless fissure; already gave reward(s) but should still show in EOM screen
|
||||||
|
for (const reward of inventory.MissionRelicRewards) {
|
||||||
|
MissionRewards.push({
|
||||||
|
StoreItem: reward.ItemType,
|
||||||
|
ItemCount: reward.ItemCount
|
||||||
|
});
|
||||||
|
}
|
||||||
|
inventory.MissionRelicRewards = undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strippedItems) {
|
if (strippedItems) {
|
||||||
@ -1400,7 +1443,9 @@ export const addMissionRewards = async (
|
|||||||
|
|
||||||
if (inventory.Nemesis.Faction == "FC_INFESTATION") {
|
if (inventory.Nemesis.Faction == "FC_INFESTATION") {
|
||||||
inventory.Nemesis.MissionCount += 1;
|
inventory.Nemesis.MissionCount += 1;
|
||||||
inventory.Nemesis.HenchmenKilled = Math.min(inventory.Nemesis.HenchmenKilled + 5, 95); // 5 progress per mission until 95
|
let antivirusGain = 5;
|
||||||
|
antivirusGain *= inventory.nemesisAntivirusGainMultiplier ?? 1;
|
||||||
|
inventory.Nemesis.HenchmenKilled = Math.min(inventory.Nemesis.HenchmenKilled + antivirusGain, 95); // 5 progress per mission until 95
|
||||||
|
|
||||||
inventoryChanges.Nemesis.MissionCount ??= 0;
|
inventoryChanges.Nemesis.MissionCount ??= 0;
|
||||||
inventoryChanges.Nemesis.MissionCount += 1;
|
inventoryChanges.Nemesis.MissionCount += 1;
|
||||||
|
|||||||
@ -139,22 +139,16 @@ export const handleInventoryItemConfigChange = async (
|
|||||||
case "WeaponSkins": {
|
case "WeaponSkins": {
|
||||||
const itemEntries = equipment as IItemEntry;
|
const itemEntries = equipment as IItemEntry;
|
||||||
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
|
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
|
||||||
if (itemId.startsWith("ca70ca70ca70ca70")) {
|
const inventoryItem = inventory.WeaponSkins.id(itemId);
|
||||||
logger.warn(
|
if (!inventoryItem) {
|
||||||
`unlockAllSkins does not work with favoriting items because you don't actually own it`
|
logger.warn(`inventory item WeaponSkins not found with id ${itemId}`);
|
||||||
);
|
continue;
|
||||||
} else {
|
}
|
||||||
const inventoryItem = inventory.WeaponSkins.id(itemId);
|
if ("Favorite" in itemConfigEntries) {
|
||||||
if (!inventoryItem) {
|
inventoryItem.Favorite = itemConfigEntries.Favorite;
|
||||||
logger.warn(`inventory item WeaponSkins not found with id ${itemId}`);
|
}
|
||||||
continue;
|
if ("IsNew" in itemConfigEntries) {
|
||||||
}
|
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
||||||
if ("Favorite" in itemConfigEntries) {
|
|
||||||
inventoryItem.Favorite = itemConfigEntries.Favorite;
|
|
||||||
}
|
|
||||||
if ("IsNew" in itemConfigEntries) {
|
|
||||||
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -55,6 +55,12 @@ export interface IAccountCheats {
|
|||||||
flawlessRelicsAlwaysGiveSilverReward?: boolean;
|
flawlessRelicsAlwaysGiveSilverReward?: boolean;
|
||||||
radiantRelicsAlwaysGiveGoldReward?: boolean;
|
radiantRelicsAlwaysGiveGoldReward?: boolean;
|
||||||
disableDailyTribute?: boolean;
|
disableDailyTribute?: boolean;
|
||||||
|
nemesisHenchmenKillsMultiplierGrineer?: number;
|
||||||
|
nemesisHenchmenKillsMultiplierCorpus?: number;
|
||||||
|
nemesisAntivirusGainMultiplier?: number;
|
||||||
|
nemesisHintProgressMultiplierGrineer?: number;
|
||||||
|
nemesisHintProgressMultiplierCorpus?: number;
|
||||||
|
nemesisExtraWeapon?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IInventoryDatabase
|
export interface IInventoryDatabase
|
||||||
@ -141,6 +147,7 @@ export interface IInventoryDatabase
|
|||||||
LastInventorySync?: Types.ObjectId;
|
LastInventorySync?: Types.ObjectId;
|
||||||
EndlessXP?: IEndlessXpProgressDatabase[];
|
EndlessXP?: IEndlessXpProgressDatabase[];
|
||||||
PersonalGoalProgress?: IGoalProgressDatabase[];
|
PersonalGoalProgress?: IGoalProgressDatabase[];
|
||||||
|
MissionRelicRewards?: ITypeCount[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IQuestKeyDatabase {
|
export interface IQuestKeyDatabase {
|
||||||
|
|||||||
@ -476,9 +476,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="card" style="height: 400px;">
|
<div class="card" style="height: 400px;">
|
||||||
<h5 class="card-header" data-loc="inventory_Boosters"></h5>
|
<h5 class="card-header" data-loc="inventory_boosters"></h5>
|
||||||
<div class="card-body d-flex flex-column">
|
<div class="card-body d-flex flex-column">
|
||||||
<form class="input-group mb-3" onsubmit="doAcquireBoosters();return false;">
|
<form class="input-group mb-3" onsubmit="doAcquireBooster();return false;">
|
||||||
<input class="form-control" id="acquire-type-Boosters" list="datalist-Boosters" />
|
<input class="form-control" id="acquire-type-Boosters" list="datalist-Boosters" />
|
||||||
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
|
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
|
||||||
</form>
|
</form>
|
||||||
@ -526,6 +526,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row g-3 mb-3">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="card" style="height: 400px;">
|
||||||
|
<h5 class="card-header" data-loc="inventory_weaponSkins"></h5>
|
||||||
|
<div class="card-body d-flex flex-column">
|
||||||
|
<form class="input-group mb-3" onsubmit="doAcquireEquipment('WeaponSkins');return false;">
|
||||||
|
<input class="form-control" id="acquire-type-WeaponSkins" list="datalist-WeaponSkins" />
|
||||||
|
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
|
||||||
|
</form>
|
||||||
|
<div class="overflow-auto">
|
||||||
|
<table class="table table-hover w-100">
|
||||||
|
<tbody id="WeaponSkins-list"></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h5 class="card-header" data-loc="general_bulkActions"></h5>
|
<h5 class="card-header" data-loc="general_bulkActions"></h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@ -538,6 +556,7 @@
|
|||||||
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['FlavourItems']);" data-loc="inventory_bulkAddFlavourItems"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['FlavourItems']);" data-loc="inventory_bulkAddFlavourItems"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['ShipDecorations']);" data-loc="inventory_bulkAddShipDecorations"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['ShipDecorations']);" data-loc="inventory_bulkAddShipDecorations"></button>
|
||||||
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['WeaponSkins']);" data-loc="inventory_bulkAddWeaponSkins"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(addMissingEvolutionProgress);" data-loc="inventory_bulkAddEvolutionProgress"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEvolutionProgress);" data-loc="inventory_bulkAddEvolutionProgress"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-2 d-flex flex-wrap gap-2">
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
@ -719,12 +738,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="edit-suit-invigorations-card" class="card mb-3 d-none">
|
<div id="edit-suit-invigorations-card" class="card mb-3 d-none">
|
||||||
<h5 class="card-header" data-loc="detailedView_suitInvigorationLabel"></h5>
|
<h5 class="card-header" data-loc="detailedView_invigorationLabel"></h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<form onsubmit="submitSuitInvigorationUpgrade(event)">
|
<form onsubmit="submitInvigoration(event)">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="invigoration-offensive" class="form-label" data-loc="invigorations_offensiveLabel"></label>
|
<label for="invigoration-offensive" class="form-label" data-loc="detailedView_invigorationOffensiveLabel"></label>
|
||||||
<select class="form-select" id="dv-invigoration-offensive">
|
<select class="form-select" id="invigoration-offensive">
|
||||||
<option value="" data-loc="general_none"></option>
|
<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/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/OffensiveInvigorationPowerRange" data-loc="invigorations_offensive_AbilityRange"></option>
|
||||||
@ -737,10 +756,9 @@
|
|||||||
<option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeCritChance" data-loc="invigorations_offensive_MeleeCritChance"></option>
|
<option value="/Lotus/Upgrades/Invigorations/Offensive/OffensiveInvigorationMeleeCritChance" data-loc="invigorations_offensive_MeleeCritChance"></option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="invigoration-defensive" class="form-label" data-loc="invigorations_defensiveLabel"></label>
|
<label for="invigoration-defensive" class="form-label" data-loc="detailedView_invigorationUtilityLabel"></label>
|
||||||
<select class="form-select" id="dv-invigoration-defensive">
|
<select class="form-select" id="invigoration-defensive">
|
||||||
<option value="" data-loc="general_none"></option>
|
<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/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/UtilityInvigorationMovementSpeed" data-loc="invigorations_utility_SprintSpeed"></option>
|
||||||
@ -755,15 +773,13 @@
|
|||||||
<option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergyRegen" data-loc="invigorations_utility_EnergyRegen"></option>
|
<option value="/Lotus/Upgrades/Invigorations/Utility/UtilityInvigorationEnergyRegen" data-loc="invigorations_utility_EnergyRegen"></option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="invigoration-expiry" class="form-label" data-loc="invigorations_expiryLabel"></label>
|
<label for="invigoration-expiry" class="form-label" data-loc="detailedView_invigorationExpiryLabel"></label>
|
||||||
<input type="datetime-local" class="form-control" id="dv-invigoration-expiry" />
|
<input type="datetime-local" class="form-control" max="2038-01-19T03:14" id="invigoration-expiry" onblur="this.value=new Date(this.value)>new Date(this.max)?new Date(this.max).toISOString().slice(0,16):this.value"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<button type="submit" class="btn btn-primary" data-loc="general_setButton"></button>
|
<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>
|
<button type="button" class="btn btn-danger" onclick="setInvigoration()" data-loc="code_remove"></button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -1018,6 +1034,48 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" />
|
<input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" />
|
||||||
<label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label>
|
<label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label>
|
||||||
</div>
|
</div>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisHenchmenKillsMultiplierGrineer" data-loc="cheats_nemesisHenchmenKillsMultiplierGrineer"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisHenchmenKillsMultiplierGrineer" type="number" min="0" max="65535" data-default="1" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisHenchmenKillsMultiplierCorpus" data-loc="cheats_nemesisHenchmenKillsMultiplierCorpus"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisHenchmenKillsMultiplierCorpus" type="number" min="0" max="65535" data-default="1" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisAntivirusGainMultiplier" data-loc="cheats_nemesisAntivirusGainMultiplier"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisAntivirusGainMultiplier" type="number" min="0" max="65535" data-default="1" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisHintProgressMultiplierGrineer" data-loc="cheats_nemesisHintProgressMultiplierGrineer"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisHintProgressMultiplierGrineer" type="number" min="0" max="65535" data-default="1" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisHintProgressMultiplierCorpus" data-loc="cheats_nemesisHintProgressMultiplierCorpus"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisHintProgressMultiplierCorpus" type="number" min="0" max="65535" data-default="1" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<form class="form-group mt-2">
|
||||||
|
<label class="form-label" for="nemesisExtraWeapon" data-loc="cheats_nemesisExtraWeapon"></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input class="form-control" id="nemesisExtraWeapon" type="number" min="0" max="65535" data-default="0" />
|
||||||
|
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
<div class="mt-2 mb-2 d-flex flex-wrap gap-2">
|
<div class="mt-2 mb-2 d-flex flex-wrap gap-2">
|
||||||
<button class="btn btn-primary" onclick="debounce(doUnlockAllShipFeatures);" data-loc="cheats_unlockAllShipFeatures"></button>
|
<button class="btn btn-primary" onclick="debounce(doUnlockAllShipFeatures);" data-loc="cheats_unlockAllShipFeatures"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(unlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
|
<button class="btn btn-primary" onclick="debounce(unlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
|
||||||
@ -1036,7 +1094,7 @@
|
|||||||
<label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
|
<label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<select class="form-control" id="changeSyndicate"></select>
|
<select class="form-control" id="changeSyndicate"></select>
|
||||||
<button class="btn btn-primary" type="submit" data-loc="cheats_changeButton"></button>
|
<button class="btn btn-secondary" type="submit" data-loc="cheats_changeButton"></button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -1054,10 +1112,6 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="skipTutorial" />
|
<input class="form-check-input" type="checkbox" id="skipTutorial" />
|
||||||
<label class="form-check-label" for="skipTutorial" data-loc="cheats_skipTutorial"></label>
|
<label class="form-check-label" for="skipTutorial" data-loc="cheats_skipTutorial"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="unlockAllSkins" />
|
|
||||||
<label class="form-check-label" for="unlockAllSkins" data-loc="cheats_unlockAllSkins"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="fullyStockedVendors" />
|
<input class="form-check-input" type="checkbox" id="fullyStockedVendors" />
|
||||||
<label class="form-check-label" for="fullyStockedVendors" data-loc="cheats_fullyStockedVendors"></label>
|
<label class="form-check-label" for="fullyStockedVendors" data-loc="cheats_fullyStockedVendors"></label>
|
||||||
@ -1456,6 +1510,7 @@
|
|||||||
<datalist id="datalist-VaultDecoRecipes"></datalist>
|
<datalist id="datalist-VaultDecoRecipes"></datalist>
|
||||||
<datalist id="datalist-FlavourItems"></datalist>
|
<datalist id="datalist-FlavourItems"></datalist>
|
||||||
<datalist id="datalist-ShipDecorations"></datalist>
|
<datalist id="datalist-ShipDecorations"></datalist>
|
||||||
|
<datalist id="datalist-WeaponSkins"></datalist>
|
||||||
<datalist id="datalist-circuitGameModes">
|
<datalist id="datalist-circuitGameModes">
|
||||||
<option>Survival</option>
|
<option>Survival</option>
|
||||||
<option>VoidFlood</option>
|
<option>VoidFlood</option>
|
||||||
|
|||||||
@ -599,6 +599,46 @@ function fetchItemList() {
|
|||||||
}
|
}
|
||||||
itemMap[item.uniqueName] = { ...item, type };
|
itemMap[item.uniqueName] = { ...item, type };
|
||||||
});
|
});
|
||||||
|
} else if (type == "WeaponSkins") {
|
||||||
|
let beardNumber = 1;
|
||||||
|
let cutNumber = 13;
|
||||||
|
let adultHeadNumber = 1;
|
||||||
|
let headNumber = 1;
|
||||||
|
items.forEach(item => {
|
||||||
|
if (item.name == "") {
|
||||||
|
if (item.uniqueName.includes("/Beards/")) {
|
||||||
|
item.name = loc("code_drifterBeardName")
|
||||||
|
.split("|INDEX|")
|
||||||
|
.join(beardNumber.toString().padStart(3, "0"));
|
||||||
|
beardNumber++;
|
||||||
|
} else if (item.uniqueName.includes("/Hair/")) {
|
||||||
|
item.name = loc("code_cutName")
|
||||||
|
.split("|INDEX|")
|
||||||
|
.join(cutNumber.toString().padStart(3, "0"));
|
||||||
|
cutNumber++;
|
||||||
|
if (cutNumber == 19) cutNumber = 21;
|
||||||
|
} else if (item.uniqueName.includes("/Heads/Adult")) {
|
||||||
|
item.name = loc("code_drifterFaceName")
|
||||||
|
.split("|INDEX|")
|
||||||
|
.join(adultHeadNumber.toString().padStart(3, "0"));
|
||||||
|
adultHeadNumber++;
|
||||||
|
} else if (item.uniqueName.includes("/Heads/")) {
|
||||||
|
item.name = loc("code_operatorFaceName")
|
||||||
|
.split("|INDEX|")
|
||||||
|
.join(headNumber.toString().padStart(3, "0"));
|
||||||
|
headNumber++;
|
||||||
|
} else {
|
||||||
|
item.name = item.uniqueName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!item.alwaysAvailable) {
|
||||||
|
const option = document.createElement("option");
|
||||||
|
option.setAttribute("data-key", item.uniqueName);
|
||||||
|
option.value = item.name;
|
||||||
|
document.getElementById("datalist-" + type).appendChild(option);
|
||||||
|
}
|
||||||
|
itemMap[item.uniqueName] = { ...item, type };
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
const nameToItems = {};
|
const nameToItems = {};
|
||||||
items.forEach(item => {
|
items.forEach(item => {
|
||||||
@ -1007,6 +1047,67 @@ function updateInventory() {
|
|||||||
document.getElementById("EvolutionProgress-list").appendChild(tr);
|
document.getElementById("EvolutionProgress-list").appendChild(tr);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById("Boosters-list").innerHTML = "";
|
||||||
|
data.Boosters.forEach(item => {
|
||||||
|
if (item.ExpiryDate < Math.floor(Date.now() / 1000)) {
|
||||||
|
// Booster has expired, skip it
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const tr = document.createElement("tr");
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
td.classList = "text-end text-nowrap";
|
||||||
|
{
|
||||||
|
const form = document.createElement("form");
|
||||||
|
form.style.display = "inline-block";
|
||||||
|
form.onsubmit = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const maxDate = new Date(input.max);
|
||||||
|
const selectedDate = new Date(input.value);
|
||||||
|
if (selectedDate > maxDate) {
|
||||||
|
input.value = maxDate.toISOString().slice(0, 16);
|
||||||
|
}
|
||||||
|
doChangeBoosterExpiry(item.ItemType, input);
|
||||||
|
};
|
||||||
|
|
||||||
|
const input = document.createElement("input");
|
||||||
|
input.type = "datetime-local";
|
||||||
|
input.classList = "form-control form-control-sm";
|
||||||
|
input.value = formatDatetime("%Y-%m-%d %H:%M:%s", item.ExpiryDate * 1000);
|
||||||
|
input.max = "2038-01-19T03:14";
|
||||||
|
input.onblur = function () {
|
||||||
|
const maxDate = new Date(input.max);
|
||||||
|
const selectedDate = new Date(input.value);
|
||||||
|
if (selectedDate > maxDate) {
|
||||||
|
input.value = maxDate.toISOString().slice(0, 16);
|
||||||
|
}
|
||||||
|
doChangeBoosterExpiry(item.ItemType, input);
|
||||||
|
};
|
||||||
|
|
||||||
|
form.appendChild(input);
|
||||||
|
td.appendChild(form);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.onclick = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
setBooster(item.ItemType, 0);
|
||||||
|
};
|
||||||
|
a.title = loc("code_remove");
|
||||||
|
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
|
||||||
|
td.appendChild(a);
|
||||||
|
}
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
document.getElementById("Boosters-list").appendChild(tr);
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById("FlavourItems-list").innerHTML = "";
|
document.getElementById("FlavourItems-list").innerHTML = "";
|
||||||
data.FlavourItems.forEach(item => {
|
data.FlavourItems.forEach(item => {
|
||||||
const datalist = document.getElementById("datalist-FlavourItems");
|
const datalist = document.getElementById("datalist-FlavourItems");
|
||||||
@ -1047,6 +1148,44 @@ function updateInventory() {
|
|||||||
document.getElementById("FlavourItems-list").appendChild(tr);
|
document.getElementById("FlavourItems-list").appendChild(tr);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById("WeaponSkins-list").innerHTML = "";
|
||||||
|
data.WeaponSkins.forEach(item => {
|
||||||
|
if (item.ItemId.$oid.startsWith("ca70ca70ca70ca70")) return;
|
||||||
|
const datalist = document.getElementById("datalist-WeaponSkins");
|
||||||
|
const optionToRemove = datalist.querySelector(`option[data-key="${item.ItemType}"]`);
|
||||||
|
if (optionToRemove) {
|
||||||
|
datalist.removeChild(optionToRemove);
|
||||||
|
}
|
||||||
|
const tr = document.createElement("tr");
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
const name = itemMap[item.ItemType]?.name?.trim();
|
||||||
|
td.textContent = name || item.ItemType;
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
td.classList = "text-end text-nowrap";
|
||||||
|
{
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.onclick = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
document.getElementById("WeaponSkins-list").removeChild(tr);
|
||||||
|
reAddToItemList(itemMap, "WeaponSkins", item.ItemType);
|
||||||
|
disposeOfGear("WeaponSkins", item.ItemId.$oid);
|
||||||
|
};
|
||||||
|
a.title = loc("code_remove");
|
||||||
|
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
|
||||||
|
td.appendChild(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("WeaponSkins-list").appendChild(tr);
|
||||||
|
});
|
||||||
|
|
||||||
const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
|
const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
|
||||||
const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
|
const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
|
||||||
|
|
||||||
@ -1452,12 +1591,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 } =
|
document.getElementById("edit-suit-invigorations-card").classList.remove("d-none");
|
||||||
suitInvigorationUpgradeData(item);
|
document.getElementById("invigoration-offensive").value = item.OffensiveUpgrade || "";
|
||||||
document.getElementById("dv-invigoration-offensive").value = OffensiveUpgrade;
|
document.getElementById("invigoration-defensive").value = item.DefensiveUpgrade || "";
|
||||||
document.getElementById("dv-invigoration-defensive").value = DefensiveUpgrade;
|
document.getElementById("invigoration-expiry").value =
|
||||||
document.getElementById("dv-invigoration-expiry").value = UpgradesExpiry;
|
formatDatetime("%Y-%m-%d %H:%M", Number(item.UpgradesExpiry?.$date.$numberLong)) || "";
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
document.getElementById("loadout-card").classList.remove("d-none");
|
document.getElementById("loadout-card").classList.remove("d-none");
|
||||||
@ -1619,63 +1759,6 @@ function updateInventory() {
|
|||||||
}
|
}
|
||||||
document.getElementById("changeSyndicate").value = data.SupportedSyndicate ?? "";
|
document.getElementById("changeSyndicate").value = data.SupportedSyndicate ?? "";
|
||||||
|
|
||||||
document.getElementById("Boosters-list").innerHTML = "";
|
|
||||||
const now = Math.floor(Date.now() / 1000);
|
|
||||||
data.Boosters.forEach(({ ItemType, ExpiryDate }) => {
|
|
||||||
if (ExpiryDate < now) {
|
|
||||||
// Booster has expired, skip it
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const tr = document.createElement("tr");
|
|
||||||
{
|
|
||||||
const td = document.createElement("td");
|
|
||||||
td.textContent = itemMap[ItemType]?.name ?? ItemType;
|
|
||||||
tr.appendChild(td);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
const td = document.createElement("td");
|
|
||||||
td.classList = "text-end text-nowrap";
|
|
||||||
const timeString = formatDatetime("%Y-%m-%d %H:%M:%s", ExpiryDate * 1000);
|
|
||||||
const inlineForm = document.createElement("form");
|
|
||||||
const input = document.createElement("input");
|
|
||||||
|
|
||||||
inlineForm.style.display = "inline-block";
|
|
||||||
inlineForm.onsubmit = function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
doChangeBoosterExpiry(ItemType, input);
|
|
||||||
};
|
|
||||||
input.type = "datetime-local";
|
|
||||||
input.classList.add("form-control");
|
|
||||||
input.classList.add("form-control-sm");
|
|
||||||
input.value = timeString;
|
|
||||||
let changed = false;
|
|
||||||
input.onchange = function () {
|
|
||||||
changed = true;
|
|
||||||
};
|
|
||||||
input.onblur = function () {
|
|
||||||
if (changed) {
|
|
||||||
doChangeBoosterExpiry(ItemType, input);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
inlineForm.appendChild(input);
|
|
||||||
|
|
||||||
td.appendChild(inlineForm);
|
|
||||||
|
|
||||||
const removeButton = document.createElement("a");
|
|
||||||
removeButton.title = loc("code_remove");
|
|
||||||
removeButton.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
|
|
||||||
removeButton.href = "#";
|
|
||||||
removeButton.onclick = function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
setBooster(ItemType, 0);
|
|
||||||
};
|
|
||||||
td.appendChild(removeButton);
|
|
||||||
|
|
||||||
tr.appendChild(td);
|
|
||||||
}
|
|
||||||
document.getElementById("Boosters-list").appendChild(tr);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (single.getCurrentPath().startsWith("/webui/guildView")) {
|
if (single.getCurrentPath().startsWith("/webui/guildView")) {
|
||||||
const guildReq = $.get("/custom/getGuild?guildId=" + window.guildId);
|
const guildReq = $.get("/custom/getGuild?guildId=" + window.guildId);
|
||||||
guildReq.done(guildData => {
|
guildReq.done(guildData => {
|
||||||
@ -1986,34 +2069,12 @@ function updateInventory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const elm of accountCheats) {
|
for (const elm of accountCheats) {
|
||||||
elm.checked = !!data[elm.id];
|
if (elm.type === "checkbox") {
|
||||||
}
|
elm.checked = !!data[elm.id];
|
||||||
});
|
} else if (elm.type === "number") {
|
||||||
});
|
elm.value = data[elm.id] !== undefined ? data[elm.id] : elm.getAttribute("data-default") || "";
|
||||||
}
|
|
||||||
|
|
||||||
function addVaultDecoRecipe() {
|
|
||||||
const uniqueName = getKey(document.getElementById("acquire-type-VaultDecoRecipes"));
|
|
||||||
if (!guildId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!uniqueName) {
|
|
||||||
$("acquire-type-VaultDecoRecipes").addClass("is-invalid").focus();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
revalidateAuthz().then(() => {
|
|
||||||
const req = $.post({
|
|
||||||
url: "/custom/addVaultDecoRecipe?" + window.authz + "&guildId=" + window.guildId,
|
|
||||||
contentType: "application/json",
|
|
||||||
data: JSON.stringify([
|
|
||||||
{
|
|
||||||
ItemType: uniqueName,
|
|
||||||
ItemCount: 1
|
|
||||||
}
|
}
|
||||||
])
|
}
|
||||||
});
|
|
||||||
req.done(() => {
|
|
||||||
updateInventory();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -3229,6 +3290,41 @@ document.querySelectorAll("#account-cheats input[type=checkbox]").forEach(elm =>
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll("#account-cheats .input-group").forEach(grp => {
|
||||||
|
const input = grp.querySelector("input");
|
||||||
|
const select = grp.querySelector("select");
|
||||||
|
const btn = grp.querySelector("button");
|
||||||
|
if (input) {
|
||||||
|
input.oninput = input.onchange = function () {
|
||||||
|
btn.classList.remove("btn-secondary");
|
||||||
|
btn.classList.add("btn-primary");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (select) {
|
||||||
|
select.oninput = select.onchange = function () {
|
||||||
|
btn.classList.remove("btn-secondary");
|
||||||
|
btn.classList.add("btn-primary");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
btn.onclick = function () {
|
||||||
|
btn.classList.remove("btn-primary");
|
||||||
|
btn.classList.add("btn-secondary");
|
||||||
|
const input = btn.closest(".input-group").querySelector('input[type="number"]');
|
||||||
|
if (!input) return;
|
||||||
|
revalidateAuthz().then(() => {
|
||||||
|
const value = input.value;
|
||||||
|
$.post({
|
||||||
|
url: "/custom/setAccountCheat?" + window.authz,
|
||||||
|
contentType: "application/json",
|
||||||
|
data: JSON.stringify({
|
||||||
|
key: input.id,
|
||||||
|
value: parseInt(value)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
document.querySelectorAll("#guild-cheats input[type=checkbox]").forEach(elm => {
|
document.querySelectorAll("#guild-cheats input[type=checkbox]").forEach(elm => {
|
||||||
elm.onchange = function () {
|
elm.onchange = function () {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz().then(() => {
|
||||||
@ -3467,9 +3563,9 @@ function doBulkQuestUpdate(operation) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function toast(text) {
|
function toast(text, type = "primary") {
|
||||||
const toast = document.createElement("div");
|
const toast = document.createElement("div");
|
||||||
toast.className = "toast align-items-center text-bg-primary border-0";
|
toast.className = `toast align-items-center text-bg-${type} border-0`;
|
||||||
const div = document.createElement("div");
|
const div = document.createElement("div");
|
||||||
div.className = "d-flex";
|
div.className = "d-flex";
|
||||||
const body = document.createElement("div");
|
const body = document.createElement("div");
|
||||||
@ -3542,7 +3638,7 @@ function handleModularSelection(category) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function setBooster(ItemType, ExpiryDate, callback) {
|
function setBooster(ItemType, ExpiryDate) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz().then(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/setBooster?" + window.authz,
|
url: "/custom/setBooster?" + window.authz,
|
||||||
@ -3555,33 +3651,27 @@ function setBooster(ItemType, ExpiryDate, callback) {
|
|||||||
])
|
])
|
||||||
}).done(function () {
|
}).done(function () {
|
||||||
updateInventory();
|
updateInventory();
|
||||||
if (callback) callback();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function doAcquireBoosters() {
|
function doAcquireBooster() {
|
||||||
const uniqueName = getKey(document.getElementById("acquire-type-Boosters"));
|
const uniqueName = getKey(document.getElementById("acquire-type-Boosters"));
|
||||||
if (!uniqueName) {
|
if (!uniqueName) {
|
||||||
$("#acquire-type-Boosters").addClass("is-invalid").focus();
|
$("#acquire-type-Boosters").addClass("is-invalid").focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const ExpiryDate = Date.now() / 1000 + 3 * 24 * 60 * 60; // default 3 days
|
setBooster(uniqueName, Math.floor(Date.now() / 1000 + 3 * 24 * 60 * 60));
|
||||||
setBooster(uniqueName, ExpiryDate, () => {
|
document.getElementById("acquire-type-Boosters").value = "";
|
||||||
$("#acquire-type-Boosters").val("");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function doChangeBoosterExpiry(ItemType, ExpiryDateInput) {
|
function doChangeBoosterExpiry(ItemType, ExpiryDateInput) {
|
||||||
console.log("Changing booster expiry for", ItemType, "to", ExpiryDateInput.value);
|
const ExpiryDate = Math.floor(new Date(ExpiryDateInput.value).getTime() / 1000);
|
||||||
// cast local datetime string to unix timestamp
|
|
||||||
const ExpiryDate = Math.trunc(new Date(ExpiryDateInput.value).getTime() / 1000);
|
|
||||||
if (isNaN(ExpiryDate)) {
|
if (isNaN(ExpiryDate)) {
|
||||||
ExpiryDateInput.addClass("is-invalid").focus();
|
ExpiryDateInput.addClass("is-invalid").focus();
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
setBooster(ItemType, ExpiryDate);
|
setBooster(ItemType, ExpiryDate);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatDatetime(fmt, date) {
|
function formatDatetime(fmt, date) {
|
||||||
@ -4027,73 +4117,31 @@ 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) {
|
function submitInvigoration(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const oid = new URLSearchParams(window.location.search).get("itemId");
|
const OffensiveUpgrade = document.getElementById("invigoration-offensive").value;
|
||||||
const offensiveUpgrade = document.getElementById("dv-invigoration-offensive").value;
|
const DefensiveUpgrade = document.getElementById("invigoration-defensive").value;
|
||||||
const defensiveUpgrade = document.getElementById("dv-invigoration-defensive").value;
|
const expiry = document.getElementById("invigoration-expiry").value;
|
||||||
const expiry = document.getElementById("dv-invigoration-expiry").value;
|
|
||||||
|
|
||||||
if (!offensiveUpgrade || !defensiveUpgrade) {
|
if (!OffensiveUpgrade || !DefensiveUpgrade) {
|
||||||
alert(loc("code_requiredInvigorationUpgrade"));
|
toast(loc("code_requiredInvigorationUpgrade"), "warning");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = {
|
setInvigoration({
|
||||||
OffensiveUpgrade: offensiveUpgrade,
|
OffensiveUpgrade,
|
||||||
DefensiveUpgrade: defensiveUpgrade
|
DefensiveUpgrade,
|
||||||
};
|
UpgradesExpiry: expiry ? new Date(expiry).getTime() : Date.now() + 7 * 24 * 60 * 60 * 1000
|
||||||
|
});
|
||||||
if (expiry) {
|
|
||||||
data.UpgradesExpiry = new Date(expiry).getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
editSuitInvigorationUpgrade(oid, data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearSuitInvigorationUpgrades() {
|
function setInvigoration(data) {
|
||||||
editSuitInvigorationUpgrade(new URLSearchParams(window.location.search).get("itemId"), null);
|
const oid = new URLSearchParams(window.location.search).get("itemId");
|
||||||
}
|
|
||||||
|
|
||||||
async function editSuitInvigorationUpgrade(oid, data) {
|
|
||||||
/* data?: {
|
|
||||||
DefensiveUpgrade: string;
|
|
||||||
OffensiveUpgrade: string;
|
|
||||||
UpgradesExpiry?: number;
|
|
||||||
}*/
|
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/editSuitInvigorationUpgrade?" + window.authz,
|
url: "/custom/setInvigoration?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
data: JSON.stringify({ oid, data })
|
data: JSON.stringify({ oid, ...data })
|
||||||
}).done(function () {
|
}).done(function () {
|
||||||
updateInventory();
|
updateInventory();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -75,8 +75,12 @@ dict = {
|
|||||||
code_funded: `[UNTRANSLATED] Funded`,
|
code_funded: `[UNTRANSLATED] Funded`,
|
||||||
code_replays: `[UNTRANSLATED] Replays`,
|
code_replays: `[UNTRANSLATED] Replays`,
|
||||||
code_stalker: `Stalker`,
|
code_stalker: `Stalker`,
|
||||||
|
code_cutName: `Frisur: |INDEX|`,
|
||||||
|
code_drifterBeardName: `Drifter-Bart: |INDEX|`,
|
||||||
|
code_drifterFaceName: `Drifter-Gesicht: |INDEX|`,
|
||||||
|
code_operatorFaceName: `Operator-Gesicht: |INDEX|`,
|
||||||
code_succChange: `Erfolgreich geändert.`,
|
code_succChange: `Erfolgreich geändert.`,
|
||||||
code_requiredInvigorationUpgrade: `Du musst sowohl ein offensives & defensives Upgrade auswählen.`,
|
code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility 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`,
|
||||||
@ -109,9 +113,10 @@ dict = {
|
|||||||
inventory_moaPets: `Moas`,
|
inventory_moaPets: `Moas`,
|
||||||
inventory_kubrowPets: `Bestien`,
|
inventory_kubrowPets: `Bestien`,
|
||||||
inventory_evolutionProgress: `Incarnon-Entwicklungsfortschritte`,
|
inventory_evolutionProgress: `Incarnon-Entwicklungsfortschritte`,
|
||||||
inventory_Boosters: `Booster`,
|
inventory_boosters: `Booster`,
|
||||||
inventory_flavourItems: `<abbr title="Animationssets, Glyphen, Farbpaletten usw.">Sammlerstücke</abbr>`,
|
inventory_flavourItems: `<abbr title="Animationssets, Glyphen, Farbpaletten usw.">Sammlerstücke</abbr>`,
|
||||||
inventory_shipDecorations: `Schiffsdekorationen`,
|
inventory_shipDecorations: `Schiffsdekorationen`,
|
||||||
|
inventory_weaponSkins: `Skins`,
|
||||||
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`,
|
||||||
@ -121,6 +126,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
||||||
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
||||||
inventory_bulkAddEvolutionProgress: `Fehlende Incarnon-Entwicklungsfortschritte hinzufügen`,
|
inventory_bulkAddEvolutionProgress: `Fehlende Incarnon-Entwicklungsfortschritte hinzufügen`,
|
||||||
|
inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `Alle Warframes auf Max. Rang`,
|
inventory_bulkRankUpSuits: `Alle Warframes auf Max. Rang`,
|
||||||
inventory_bulkRankUpWeapons: `Alle Waffen auf Max. Rang`,
|
inventory_bulkRankUpWeapons: `Alle Waffen auf Max. Rang`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Alle Archwings auf Max. Rang`,
|
inventory_bulkRankUpSpaceSuits: `Alle Archwings auf Max. Rang`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `Valenz-Bonus`,
|
detailedView_valenceBonusLabel: `Valenz-Bonus`,
|
||||||
detailedView_valenceBonusDescription: `Du kannst den Valenz-Bonus deiner Waffe festlegen oder entfernen.`,
|
detailedView_valenceBonusDescription: `Du kannst den Valenz-Bonus deiner Waffe festlegen oder entfernen.`,
|
||||||
detailedView_modularPartsLabel: `Modulare Teile ändern`,
|
detailedView_modularPartsLabel: `Modulare Teile ändern`,
|
||||||
detailedView_suitInvigorationLabel: `Warframe-Kräftigung`,
|
detailedView_invigorationLabel: `Kräftigung`,
|
||||||
detailedView_loadoutLabel: `Loadouts`,
|
detailedView_loadoutLabel: `Loadouts`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% Fähigkeitsstärke`,
|
invigorations_offensive_AbilityStrength: `+200% Fähigkeitsstärke`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 Sprung-Zurücksetzungen`,
|
invigorations_utility_Jumps: `+5 Sprung-Zurücksetzungen`,
|
||||||
invigorations_utility_EnergyRegen: `+2 Energieregeneration pro Sekunde`,
|
invigorations_utility_EnergyRegen: `+2 Energieregeneration pro Sekunde`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Offensives Upgrade`,
|
detailedView_invigorationOffensiveLabel: `Offensives Upgrade`,
|
||||||
invigorations_defensiveLabel: `Defensives Upgrade`,
|
detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
|
||||||
invigorations_expiryLabel: `Upgrades Ablaufdatum (optional)`,
|
detailedView_invigorationExpiryLabel: `[UNTRANSLATED] Invigoration Expiry (optional)`,
|
||||||
|
|
||||||
abilityOverride_label: `Fähigkeitsüberschreibung`,
|
abilityOverride_label: `Fähigkeitsüberschreibung`,
|
||||||
abilityOverride_onSlot: `auf Slot`,
|
abilityOverride_onSlot: `auf Slot`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
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`,
|
||||||
cheats_unlockAllSkins: `Alle Skins freischalten`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Alle Photora-Szenen freischalten`,
|
cheats_unlockAllCapturaScenes: `Alle Photora-Szenen freischalten`,
|
||||||
cheats_universalPolarityEverywhere: `Universelle Polarität überall`,
|
cheats_universalPolarityEverywhere: `Universelle Polarität überall`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Orokin Reaktor & Beschleuniger überall`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Orokin Reaktor & Beschleuniger überall`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `Ändern`,
|
cheats_changeButton: `Ändern`,
|
||||||
cheats_markAllAsRead: `Posteingang als gelesen markieren`,
|
cheats_markAllAsRead: `Posteingang als gelesen markieren`,
|
||||||
cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
|
cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `Weltstatus`,
|
worldState: `Weltstatus`,
|
||||||
worldState_creditBoost: `Event Booster: Credit`,
|
worldState_creditBoost: `Event Booster: Credit`,
|
||||||
|
|||||||
@ -74,8 +74,12 @@ dict = {
|
|||||||
code_funded: `Funded`,
|
code_funded: `Funded`,
|
||||||
code_replays: `Replays`,
|
code_replays: `Replays`,
|
||||||
code_stalker: `Stalker`,
|
code_stalker: `Stalker`,
|
||||||
|
code_cutName: `Cut |INDEX|`,
|
||||||
|
code_drifterBeardName: `Drifter Beard |INDEX|`,
|
||||||
|
code_drifterFaceName: `Drifter Visage |INDEX|`,
|
||||||
|
code_operatorFaceName: `Operator Visage |INDEX|`,
|
||||||
code_succChange: `Successfully changed.`,
|
code_succChange: `Successfully changed.`,
|
||||||
code_requiredInvigorationUpgrade: `You must select both an offensive & defensive upgrade.`,
|
code_requiredInvigorationUpgrade: `You must select both an offensive & utility 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`,
|
||||||
@ -108,9 +112,10 @@ dict = {
|
|||||||
inventory_moaPets: `Moas`,
|
inventory_moaPets: `Moas`,
|
||||||
inventory_kubrowPets: `Beasts`,
|
inventory_kubrowPets: `Beasts`,
|
||||||
inventory_evolutionProgress: `Incarnon Evolution Progress`,
|
inventory_evolutionProgress: `Incarnon Evolution Progress`,
|
||||||
inventory_Boosters: `Boosters`,
|
inventory_boosters: `Boosters`,
|
||||||
inventory_flavourItems: `<abbr title="Animation Sets, Glyphs, Palettes, etc.">Flavour Items</abbr>`,
|
inventory_flavourItems: `<abbr title="Animation Sets, Glyphs, Palettes, etc.">Flavour Items</abbr>`,
|
||||||
inventory_shipDecorations: `Ship Decorations`,
|
inventory_shipDecorations: `Ship Decorations`,
|
||||||
|
inventory_weaponSkins: `Skins`,
|
||||||
inventory_bulkAddSuits: `Add Missing Warframes`,
|
inventory_bulkAddSuits: `Add Missing Warframes`,
|
||||||
inventory_bulkAddWeapons: `Add Missing Weapons`,
|
inventory_bulkAddWeapons: `Add Missing Weapons`,
|
||||||
inventory_bulkAddSpaceSuits: `Add Missing Archwings`,
|
inventory_bulkAddSpaceSuits: `Add Missing Archwings`,
|
||||||
@ -120,6 +125,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `Add Missing Flavour Items`,
|
inventory_bulkAddFlavourItems: `Add Missing Flavour Items`,
|
||||||
inventory_bulkAddShipDecorations: `Add Missing Ship Decorations`,
|
inventory_bulkAddShipDecorations: `Add Missing Ship Decorations`,
|
||||||
inventory_bulkAddEvolutionProgress: `Add Missing Incarnon Evolution Progress`,
|
inventory_bulkAddEvolutionProgress: `Add Missing Incarnon Evolution Progress`,
|
||||||
|
inventory_bulkAddWeaponSkins: `Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `Max Rank All Warframes`,
|
inventory_bulkRankUpSuits: `Max Rank All Warframes`,
|
||||||
inventory_bulkRankUpWeapons: `Max Rank All Weapons`,
|
inventory_bulkRankUpWeapons: `Max Rank All Weapons`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Max Rank All Archwings`,
|
inventory_bulkRankUpSpaceSuits: `Max Rank All Archwings`,
|
||||||
@ -146,7 +152,7 @@ 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`,
|
detailedView_invigorationLabel: `Invigoration`,
|
||||||
detailedView_loadoutLabel: `Loadouts`,
|
detailedView_loadoutLabel: `Loadouts`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% Ability Strength`,
|
invigorations_offensive_AbilityStrength: `+200% Ability Strength`,
|
||||||
@ -171,9 +177,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 Jump Resets`,
|
invigorations_utility_Jumps: `+5 Jump Resets`,
|
||||||
invigorations_utility_EnergyRegen: `+2 Energy Regen/s`,
|
invigorations_utility_EnergyRegen: `+2 Energy Regen/s`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Offensive Upgrade`,
|
detailedView_invigorationOffensiveLabel: `Offensive Upgrade`,
|
||||||
invigorations_defensiveLabel: `Defensive Upgrade`,
|
detailedView_invigorationUtilityLabel: `Utility Upgrade`,
|
||||||
invigorations_expiryLabel: `Upgrades Expiry (optional)`,
|
detailedView_invigorationExpiryLabel: `Invigoration Expiry (optional)`,
|
||||||
|
|
||||||
abilityOverride_label: `Ability Override`,
|
abilityOverride_label: `Ability Override`,
|
||||||
abilityOverride_onSlot: `on slot`,
|
abilityOverride_onSlot: `on slot`,
|
||||||
@ -208,7 +214,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `Don't Subtract Void Traces`,
|
cheats_dontSubtractVoidTraces: `Don't Subtract Void Traces`,
|
||||||
cheats_dontSubtractConsumables: `Don't Subtract Consumables`,
|
cheats_dontSubtractConsumables: `Don't Subtract Consumables`,
|
||||||
cheats_unlockAllShipFeatures: `Unlock All Ship Features`,
|
cheats_unlockAllShipFeatures: `Unlock All Ship Features`,
|
||||||
cheats_unlockAllSkins: `Unlock All Skins`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Unlock All Captura Scenes`,
|
cheats_unlockAllCapturaScenes: `Unlock All Captura Scenes`,
|
||||||
cheats_universalPolarityEverywhere: `Universal Polarity Everywhere`,
|
cheats_universalPolarityEverywhere: `Universal Polarity Everywhere`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Potatoes Everywhere`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Potatoes Everywhere`,
|
||||||
@ -256,6 +261,12 @@ dict = {
|
|||||||
cheats_changeButton: `Change`,
|
cheats_changeButton: `Change`,
|
||||||
cheats_markAllAsRead: `Mark Inbox As Read`,
|
cheats_markAllAsRead: `Mark Inbox As Read`,
|
||||||
cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`,
|
cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `World State`,
|
worldState: `World State`,
|
||||||
worldState_creditBoost: `Credit Boost`,
|
worldState_creditBoost: `Credit Boost`,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
// Spanish translation by hxedcl
|
// Spanish translation by hxedcl
|
||||||
dict = {
|
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_inventoryUpdateNoteGameWs: `[UNTRANSLATED] Note: You may need to reopen any menu you are on for changes to be reflected.`,
|
general_inventoryUpdateNoteGameWs: `Nota: Puede que necesites reabrir cualquier menú en el que te encuentres para que los cambios se reflejen.`,
|
||||||
general_addButton: `Agregar`,
|
general_addButton: `Agregar`,
|
||||||
general_setButton: `Establecer`,
|
general_setButton: `Establecer`,
|
||||||
general_none: `Ninguno`,
|
general_none: `Ninguno`,
|
||||||
@ -32,8 +32,8 @@ dict = {
|
|||||||
code_renamePrompt: `Escribe tu nuevo nombre personalizado:`,
|
code_renamePrompt: `Escribe tu nuevo nombre personalizado:`,
|
||||||
code_remove: `Quitar`,
|
code_remove: `Quitar`,
|
||||||
code_addItemsConfirm: `¿Estás seguro de que deseas agregar |COUNT| objetos a tu cuenta?`,
|
code_addItemsConfirm: `¿Estás seguro de que deseas agregar |COUNT| objetos a tu cuenta?`,
|
||||||
code_addTechProjectsConfirm: `[UNTRANSLATED] Are you sure you want to add |COUNT| research to your clan?`,
|
code_addTechProjectsConfirm: `¿Estás seguro de que quieres añadir |COUNT| proyectos de investigación a tu clan?`,
|
||||||
code_addDecoRecipesConfirm: `[UNTRANSLATED] Are you sure you want to add |COUNT| deco recipes to your clan?`,
|
code_addDecoRecipesConfirm: `¿Estás seguro de que quieres añadir |COUNT| planos de decoración a tu clan?`,
|
||||||
code_succRankUp: `Ascenso exitoso.`,
|
code_succRankUp: `Ascenso exitoso.`,
|
||||||
code_noEquipmentToRankUp: `No hay equipo para ascender.`,
|
code_noEquipmentToRankUp: `No hay equipo para ascender.`,
|
||||||
code_succAdded: `Agregado exitosamente.`,
|
code_succAdded: `Agregado exitosamente.`,
|
||||||
@ -45,7 +45,7 @@ dict = {
|
|||||||
code_rank: `Rango`,
|
code_rank: `Rango`,
|
||||||
code_rankUp: `Subir de rango`,
|
code_rankUp: `Subir de rango`,
|
||||||
code_rankDown: `Bajar de rango`,
|
code_rankDown: `Bajar de rango`,
|
||||||
code_unlockLevelCap: `[UNTRANSLATED] Unlock level cap`,
|
code_unlockLevelCap: `Desbloquear level cap`,
|
||||||
code_count: `Cantidad`,
|
code_count: `Cantidad`,
|
||||||
code_focusAllUnlocked: `Todas las escuelas de enfoque ya están desbloqueadas.`,
|
code_focusAllUnlocked: `Todas las escuelas de enfoque ya están desbloqueadas.`,
|
||||||
code_focusUnlocked: `¡Desbloqueadas |COUNT| nuevas escuelas de enfoque! Se necesita una actualización del inventario para reflejar los cambios en el juego. Visitar la navegación debería ser la forma más sencilla de activarlo.`,
|
code_focusUnlocked: `¡Desbloqueadas |COUNT| nuevas escuelas de enfoque! Se necesita una actualización del inventario para reflejar los cambios en el juego. Visitar la navegación debería ser la forma más sencilla de activarlo.`,
|
||||||
@ -65,18 +65,22 @@ dict = {
|
|||||||
code_completed: `Completada`,
|
code_completed: `Completada`,
|
||||||
code_active: `Activa`,
|
code_active: `Activa`,
|
||||||
code_pigment: `Pigmento`,
|
code_pigment: `Pigmento`,
|
||||||
code_controller: `[UNTRANSLATED] Controller cursor`,
|
code_controller: `Cursor de Mando`,
|
||||||
code_mouseLine: `[UNTRANSLATED] Line cursor`,
|
code_mouseLine: `Cursor de línea`,
|
||||||
code_mouse: `[UNTRANSLATED] Cursor`,
|
code_mouse: `Cursor`,
|
||||||
code_itemColorPalette: `Paleta de colores |ITEM|`,
|
code_itemColorPalette: `Paleta de colores |ITEM|`,
|
||||||
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_fund: `[UNTRANSLATED] Fund`,
|
code_fund: `Financiar`,
|
||||||
code_funded: `[UNTRANSLATED] Funded`,
|
code_funded: `Financiado`,
|
||||||
code_replays: `[UNTRANSLATED] Replays`,
|
code_replays: `Repeticiones`,
|
||||||
code_stalker: `Stalker`,
|
code_stalker: `Stalker`,
|
||||||
|
code_cutName: `[UNTRANSLATED] Cut |INDEX|`,
|
||||||
|
code_drifterBeardName: `Barba del Viajero: |INDEX|`,
|
||||||
|
code_drifterFaceName: `Rostro del Viajero |INDEX|`,
|
||||||
|
code_operatorFaceName: `Rostro del operador |INDEX|`,
|
||||||
code_succChange: `Cambiado correctamente`,
|
code_succChange: `Cambiado correctamente`,
|
||||||
code_requiredInvigorationUpgrade: `Debes seleccionar una mejora ofensiva y una defensiva.`,
|
code_requiredInvigorationUpgrade: `Debes seleccionar una mejora ofensiva y una mejora de utilidad.`,
|
||||||
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`,
|
||||||
@ -109,18 +113,20 @@ dict = {
|
|||||||
inventory_moaPets: `Moas`,
|
inventory_moaPets: `Moas`,
|
||||||
inventory_kubrowPets: `Bestias`,
|
inventory_kubrowPets: `Bestias`,
|
||||||
inventory_evolutionProgress: `Progreso de evolución Incarnon`,
|
inventory_evolutionProgress: `Progreso de evolución Incarnon`,
|
||||||
inventory_Boosters: `Potenciadores`,
|
inventory_boosters: `Potenciadores`,
|
||||||
inventory_flavourItems: `<abbr title="Conjuntos de animaciones, glifos, paletas, etc.">Ítems estéticos</abbr>`,
|
inventory_flavourItems: `<abbr title="Conjuntos de animaciones, glifos, paletas, etc.">Ítems estéticos</abbr>`,
|
||||||
inventory_shipDecorations: `Decoraciones de nave`,
|
inventory_shipDecorations: `Decoraciones de nave`,
|
||||||
|
inventory_weaponSkins: `Diseños`,
|
||||||
inventory_bulkAddSuits: `Agregar Warframes faltantes`,
|
inventory_bulkAddSuits: `Agregar Warframes faltantes`,
|
||||||
inventory_bulkAddWeapons: `Agregar armas faltantes`,
|
inventory_bulkAddWeapons: `Agregar armas faltantes`,
|
||||||
inventory_bulkAddSpaceSuits: `Agregar Archwings faltantes`,
|
inventory_bulkAddSpaceSuits: `Agregar Archwings faltantes`,
|
||||||
inventory_bulkAddSpaceWeapons: `Agregar armas Archwing faltantes`,
|
inventory_bulkAddSpaceWeapons: `Agregar armas Archwing faltantes`,
|
||||||
inventory_bulkAddSentinels: `Agregar centinelas faltantes`,
|
inventory_bulkAddSentinels: `Agregar centinelas faltantes`,
|
||||||
inventory_bulkAddSentinelWeapons: `Agregar armas de centinela faltantes`,
|
inventory_bulkAddSentinelWeapons: `Agregar armas de centinela faltantes`,
|
||||||
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
inventory_bulkAddFlavourItems: `Añadir items estéticos faltantes`,
|
||||||
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
inventory_bulkAddShipDecorations: `Añadir decoraciones de Nave Faltantes`,
|
||||||
inventory_bulkAddEvolutionProgress: `Completar el progreso de evolución Incarnon faltante`,
|
inventory_bulkAddEvolutionProgress: `Completar el progreso de evolución Incarnon faltante`,
|
||||||
|
inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `Maximizar rango de todos los Warframes`,
|
inventory_bulkRankUpSuits: `Maximizar rango de todos los Warframes`,
|
||||||
inventory_bulkRankUpWeapons: `Maximizar rango de todas las armas`,
|
inventory_bulkRankUpWeapons: `Maximizar rango de todas las armas`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Maximizar rango de todos los Archwings`,
|
inventory_bulkRankUpSpaceSuits: `Maximizar rango de todos los Archwings`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `Bonus de Valéncia`,
|
detailedView_valenceBonusLabel: `Bonus de Valéncia`,
|
||||||
detailedView_valenceBonusDescription: `Puedes establecer o quitar el bonus de valencia de tu arma.`,
|
detailedView_valenceBonusDescription: `Puedes establecer o quitar el bonus de valencia de tu arma.`,
|
||||||
detailedView_modularPartsLabel: `Cambiar partes modulares`,
|
detailedView_modularPartsLabel: `Cambiar partes modulares`,
|
||||||
detailedView_suitInvigorationLabel: `Vigorización de Warframe`,
|
detailedView_invigorationLabel: `Fortalecimiento`,
|
||||||
detailedView_loadoutLabel: `Equipamientos`,
|
detailedView_loadoutLabel: `Equipamientos`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% Fuerza de Habilidad`,
|
invigorations_offensive_AbilityStrength: `+200% Fuerza de Habilidad`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 Restablecimientos de Salto`,
|
invigorations_utility_Jumps: `+5 Restablecimientos de Salto`,
|
||||||
invigorations_utility_EnergyRegen: `+2 Regeneración de Energía/s`,
|
invigorations_utility_EnergyRegen: `+2 Regeneración de Energía/s`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Mejora Ofensiva`,
|
detailedView_invigorationOffensiveLabel: `Mejora Ofensiva`,
|
||||||
invigorations_defensiveLabel: `Mejora Defensiva`,
|
detailedView_invigorationUtilityLabel: `Mejora de Utilidad`,
|
||||||
invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`,
|
detailedView_invigorationExpiryLabel: `Caducidad del Fortalecimiento (opcional)`,
|
||||||
|
|
||||||
abilityOverride_label: `Intercambio de Habilidad`,
|
abilityOverride_label: `Intercambio de Habilidad`,
|
||||||
abilityOverride_onSlot: `en el espacio`,
|
abilityOverride_onSlot: `en el espacio`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `No descontar vestigios del Vacío`,
|
cheats_dontSubtractVoidTraces: `No descontar vestigios del Vacío`,
|
||||||
cheats_dontSubtractConsumables: `No restar consumibles`,
|
cheats_dontSubtractConsumables: `No restar consumibles`,
|
||||||
cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`,
|
cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`,
|
||||||
cheats_unlockAllSkins: `Desbloquear todas las skins`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Desbloquear todas las escenas de Captura`,
|
cheats_unlockAllCapturaScenes: `Desbloquear todas las escenas de Captura`,
|
||||||
cheats_universalPolarityEverywhere: `Polaridad universal en todas partes`,
|
cheats_universalPolarityEverywhere: `Polaridad universal en todas partes`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Patatas en todas partes`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Patatas en todas partes`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `Cambiar`,
|
cheats_changeButton: `Cambiar`,
|
||||||
cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
|
cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
|
||||||
cheats_finishInvasionsInOneMission: `Finaliza Invasión en una mision`,
|
cheats_finishInvasionsInOneMission: `Finaliza Invasión en una mision`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `Estado del mundo`,
|
worldState: `Estado del mundo`,
|
||||||
worldState_creditBoost: `Potenciador de Créditos`,
|
worldState_creditBoost: `Potenciador de Créditos`,
|
||||||
@ -401,9 +412,9 @@ dict = {
|
|||||||
theme_dark: `Tema Oscuro`,
|
theme_dark: `Tema Oscuro`,
|
||||||
theme_light: `Tema Claro`,
|
theme_light: `Tema Claro`,
|
||||||
|
|
||||||
guildView_cheats: `[UNTRANSLATED] Clan Cheats`,
|
guildView_cheats: `Trucos de Clan`,
|
||||||
guildView_techProjects: `Investigación`,
|
guildView_techProjects: `Investigación`,
|
||||||
guildView_vaultDecoRecipes: `[UNTRANSLATED] Dojo Deco Recipes`,
|
guildView_vaultDecoRecipes: `Planos de Decoración de Dojo`,
|
||||||
guildView_alliance: `Alianza`,
|
guildView_alliance: `Alianza`,
|
||||||
guildView_members: `Miembros`,
|
guildView_members: `Miembros`,
|
||||||
guildView_pending: `Pendiente`,
|
guildView_pending: `Pendiente`,
|
||||||
@ -423,11 +434,11 @@ dict = {
|
|||||||
guildView_rank_soldier: `Soldado`,
|
guildView_rank_soldier: `Soldado`,
|
||||||
guildView_rank_utility: `Utilitario`,
|
guildView_rank_utility: `Utilitario`,
|
||||||
guildView_rank_warlord: `Señor de la guerra`,
|
guildView_rank_warlord: `Señor de la guerra`,
|
||||||
guildView_currency_owned: `[UNTRANSLATED] |COUNT| in Vault.`,
|
guildView_currency_owned: `|COUNT| en la Bóveda.`,
|
||||||
guildView_bulkAddTechProjects: `[UNTRANSLATED] Add Missing Research`,
|
guildView_bulkAddTechProjects: `Añadir proyectos de Investigación Faltantes`,
|
||||||
guildView_bulkAddVaultDecoRecipes: `[UNTRANSLATED] Add Missing Dojo Deco Recipes`,
|
guildView_bulkAddVaultDecoRecipes: `Añadir planos de Decoración de Dojo Faltantes`,
|
||||||
guildView_bulkFundTechProjects: `[UNTRANSLATED] Fund All Research`,
|
guildView_bulkFundTechProjects: `Financiar toda la Investigación`,
|
||||||
guildView_bulkCompleteTechProjects: `[UNTRANSLATED] Complete All Research`,
|
guildView_bulkCompleteTechProjects: `Completar toda la Investigación`,
|
||||||
guildView_promote: `Promover`,
|
guildView_promote: `Promover`,
|
||||||
guildView_demote: `Degradar`,
|
guildView_demote: `Degradar`,
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,12 @@ dict = {
|
|||||||
code_funded: `Complété`,
|
code_funded: `Complété`,
|
||||||
code_replays: `[UNTRANSLATED] Replays`,
|
code_replays: `[UNTRANSLATED] Replays`,
|
||||||
code_stalker: `Stalker`,
|
code_stalker: `Stalker`,
|
||||||
|
code_cutName: `[UNTRANSLATED] Cut |INDEX|`,
|
||||||
|
code_drifterBeardName: `Barbe du Voyageur |INDEX|`,
|
||||||
|
code_drifterFaceName: `Visage du Voyageur |INDEX|`,
|
||||||
|
code_operatorFaceName: `Visage de l'Opérateur |INDEX|`,
|
||||||
code_succChange: `Changement effectué.`,
|
code_succChange: `Changement effectué.`,
|
||||||
code_requiredInvigorationUpgrade: `Augmentation offensive et défensive requises.`,
|
code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility 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`,
|
||||||
@ -109,9 +113,10 @@ dict = {
|
|||||||
inventory_moaPets: `Moas`,
|
inventory_moaPets: `Moas`,
|
||||||
inventory_kubrowPets: `Bêtes`,
|
inventory_kubrowPets: `Bêtes`,
|
||||||
inventory_evolutionProgress: `Progrès de l'évolution Incarnon`,
|
inventory_evolutionProgress: `Progrès de l'évolution Incarnon`,
|
||||||
inventory_Boosters: `Boosters`,
|
inventory_boosters: `Boosters`,
|
||||||
inventory_flavourItems: `[UNTRANSLATED] <abbr title="Animation Sets, Glyphs, Palettes, etc.">Flavour Items</abbr>`,
|
inventory_flavourItems: `[UNTRANSLATED] <abbr title="Animation Sets, Glyphs, Palettes, etc.">Flavour Items</abbr>`,
|
||||||
inventory_shipDecorations: `Décorations du vaisseau`,
|
inventory_shipDecorations: `Décorations du vaisseau`,
|
||||||
|
inventory_weaponSkins: `Aspects`,
|
||||||
inventory_bulkAddSuits: `Ajouter les Warframes manquantes`,
|
inventory_bulkAddSuits: `Ajouter les Warframes manquantes`,
|
||||||
inventory_bulkAddWeapons: `Ajouter les armes manquantes`,
|
inventory_bulkAddWeapons: `Ajouter les armes manquantes`,
|
||||||
inventory_bulkAddSpaceSuits: `Ajouter les Archwings manquants`,
|
inventory_bulkAddSpaceSuits: `Ajouter les Archwings manquants`,
|
||||||
@ -121,6 +126,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
||||||
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
||||||
inventory_bulkAddEvolutionProgress: `Ajouter les évolutions Incarnon manquantes`,
|
inventory_bulkAddEvolutionProgress: `Ajouter les évolutions Incarnon manquantes`,
|
||||||
|
inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `Toutes les Warframes au rang max`,
|
inventory_bulkRankUpSuits: `Toutes les Warframes au rang max`,
|
||||||
inventory_bulkRankUpWeapons: `Toutes les armes au rang max`,
|
inventory_bulkRankUpWeapons: `Toutes les armes au rang max`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Tous les Archwings au rang max`,
|
inventory_bulkRankUpSpaceSuits: `Tous les Archwings au rang max`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `Bonus de Valence`,
|
detailedView_valenceBonusLabel: `Bonus de Valence`,
|
||||||
detailedView_valenceBonusDescription: `Définir le Bonus Valence de l'arme.`,
|
detailedView_valenceBonusDescription: `Définir le Bonus Valence de l'arme.`,
|
||||||
detailedView_modularPartsLabel: `Changer l'équipement modulaire`,
|
detailedView_modularPartsLabel: `Changer l'équipement modulaire`,
|
||||||
detailedView_suitInvigorationLabel: `Invigoration de Warframe`,
|
detailedView_invigorationLabel: `Dynamisation`,
|
||||||
detailedView_loadoutLabel: `Équipements`,
|
detailedView_loadoutLabel: `Équipements`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% de puissance de pouvoir`,
|
invigorations_offensive_AbilityStrength: `+200% de puissance de pouvoir`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 réinitialisations de saut`,
|
invigorations_utility_Jumps: `+5 réinitialisations de saut`,
|
||||||
invigorations_utility_EnergyRegen: `+2 d'énergie régénérés/s`,
|
invigorations_utility_EnergyRegen: `+2 d'énergie régénérés/s`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Amélioration offensive`,
|
detailedView_invigorationOffensiveLabel: `Amélioration offensive`,
|
||||||
invigorations_defensiveLabel: `Amélioration défensive`,
|
detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
|
||||||
invigorations_expiryLabel: `Expiration de l'invigoration (optionnel)`,
|
detailedView_invigorationExpiryLabel: `[UNTRANSLATED] Invigoration Expiry (optional)`,
|
||||||
|
|
||||||
abilityOverride_label: `Remplacement de pouvoir`,
|
abilityOverride_label: `Remplacement de pouvoir`,
|
||||||
abilityOverride_onSlot: `Sur l'emplacement`,
|
abilityOverride_onSlot: `Sur l'emplacement`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `Ne pas consommer de Void Traces`,
|
cheats_dontSubtractVoidTraces: `Ne pas consommer de Void Traces`,
|
||||||
cheats_dontSubtractConsumables: `Ne pas retirer de consommables`,
|
cheats_dontSubtractConsumables: `Ne pas retirer de consommables`,
|
||||||
cheats_unlockAllShipFeatures: `Débloquer tous les segments du vaisseau`,
|
cheats_unlockAllShipFeatures: `Débloquer tous les segments du vaisseau`,
|
||||||
cheats_unlockAllSkins: `Débloquer tous les skins`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Débloquer toutes les scènes captura`,
|
cheats_unlockAllCapturaScenes: `Débloquer toutes les scènes captura`,
|
||||||
cheats_universalPolarityEverywhere: `Polarités universelles partout`,
|
cheats_universalPolarityEverywhere: `Polarités universelles partout`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Réacteurs et Catalyseurs partout`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Réacteurs et Catalyseurs partout`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `Changer`,
|
cheats_changeButton: `Changer`,
|
||||||
cheats_markAllAsRead: `Marquer la boîte de réception comme lue`,
|
cheats_markAllAsRead: `Marquer la boîte de réception comme lue`,
|
||||||
cheats_finishInvasionsInOneMission: `Compléter les invasions en une mission.`,
|
cheats_finishInvasionsInOneMission: `Compléter les invasions en une mission.`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `Carte Solaire`,
|
worldState: `Carte Solaire`,
|
||||||
worldState_creditBoost: `Booster de Crédit`,
|
worldState_creditBoost: `Booster de Crédit`,
|
||||||
|
|||||||
@ -75,6 +75,10 @@ dict = {
|
|||||||
code_funded: `Профинансировано`,
|
code_funded: `Профинансировано`,
|
||||||
code_replays: `Повторов`,
|
code_replays: `Повторов`,
|
||||||
code_stalker: `Сталкер`,
|
code_stalker: `Сталкер`,
|
||||||
|
code_cutName: `Причёска: |INDEX|`,
|
||||||
|
code_drifterBeardName: `Борода скитальца: |INDEX|`,
|
||||||
|
code_drifterFaceName: `Внешность скитальца: |INDEX|`,
|
||||||
|
code_operatorFaceName: `Внешность оператора: |INDEX|`,
|
||||||
code_succChange: `Успешно изменено.`,
|
code_succChange: `Успешно изменено.`,
|
||||||
code_requiredInvigorationUpgrade: `Вы должны выбрать как атакующее, так и вспомогательное улучшение.`,
|
code_requiredInvigorationUpgrade: `Вы должны выбрать как атакующее, так и вспомогательное улучшение.`,
|
||||||
login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
|
login_description: `Войдите, используя учетные данные OpenWF (те же, что и в игре при подключении к этому серверу).`,
|
||||||
@ -109,9 +113,10 @@ dict = {
|
|||||||
inventory_moaPets: `МОА`,
|
inventory_moaPets: `МОА`,
|
||||||
inventory_kubrowPets: `Звери`,
|
inventory_kubrowPets: `Звери`,
|
||||||
inventory_evolutionProgress: `Прогресс эволюции Инкарнонов`,
|
inventory_evolutionProgress: `Прогресс эволюции Инкарнонов`,
|
||||||
inventory_Boosters: `Бустеры`,
|
inventory_boosters: `Бустеры`,
|
||||||
inventory_flavourItems: `<abbr title="Наборы анимаций, глифы, палитры и т. д.">Уникальные предметы</abbr>`,
|
inventory_flavourItems: `<abbr title="Наборы анимаций, глифы, палитры и т. д.">Уникальные предметы</abbr>`,
|
||||||
inventory_shipDecorations: `Украшения корабля`,
|
inventory_shipDecorations: `Украшения корабля`,
|
||||||
|
inventory_weaponSkins: `Скины`,
|
||||||
inventory_bulkAddSuits: `Добавить отсутствующие Варфреймы`,
|
inventory_bulkAddSuits: `Добавить отсутствующие Варфреймы`,
|
||||||
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
|
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
|
||||||
inventory_bulkAddSpaceSuits: `Добавить отсутствующие Арчвинги`,
|
inventory_bulkAddSpaceSuits: `Добавить отсутствующие Арчвинги`,
|
||||||
@ -121,6 +126,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `Добавить отсутствующие уникальные предметы`,
|
inventory_bulkAddFlavourItems: `Добавить отсутствующие уникальные предметы`,
|
||||||
inventory_bulkAddShipDecorations: `Добавить отсутствующие украшения корабля`,
|
inventory_bulkAddShipDecorations: `Добавить отсутствующие украшения корабля`,
|
||||||
inventory_bulkAddEvolutionProgress: `Добавить отсутствующий прогресс эволюции Инкарнонов`,
|
inventory_bulkAddEvolutionProgress: `Добавить отсутствующий прогресс эволюции Инкарнонов`,
|
||||||
|
inventory_bulkAddWeaponSkins: `Добавить отсутствующие скины`,
|
||||||
inventory_bulkRankUpSuits: `Макс. ранг всех Варфреймов`,
|
inventory_bulkRankUpSuits: `Макс. ранг всех Варфреймов`,
|
||||||
inventory_bulkRankUpWeapons: `Макс. ранг всего оружия`,
|
inventory_bulkRankUpWeapons: `Макс. ранг всего оружия`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Макс. ранг всех Арчвингов`,
|
inventory_bulkRankUpSpaceSuits: `Макс. ранг всех Арчвингов`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `Бонус Валентности`,
|
detailedView_valenceBonusLabel: `Бонус Валентности`,
|
||||||
detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус Валентности с вашего оружия.`,
|
detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус Валентности с вашего оружия.`,
|
||||||
detailedView_modularPartsLabel: `Изменить модульные части`,
|
detailedView_modularPartsLabel: `Изменить модульные части`,
|
||||||
detailedView_suitInvigorationLabel: `Воодушевление Варфрейма`,
|
detailedView_invigorationLabel: `Воодушевление`,
|
||||||
detailedView_loadoutLabel: `Конфигурации`,
|
detailedView_loadoutLabel: `Конфигурации`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% к силе способностей.`,
|
invigorations_offensive_AbilityStrength: `+200% к силе способностей.`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 сбросов прыжка.`,
|
invigorations_utility_Jumps: `+5 сбросов прыжка.`,
|
||||||
invigorations_utility_EnergyRegen: `+2 к регенерации энергии в секунду.`,
|
invigorations_utility_EnergyRegen: `+2 к регенерации энергии в секунду.`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Атакующее улучшение`,
|
detailedView_invigorationOffensiveLabel: `Атакующее улучшение`,
|
||||||
invigorations_defensiveLabel: `Вспомогательное улучшение`,
|
detailedView_invigorationUtilityLabel: `Вспомогательное улучшение`,
|
||||||
invigorations_expiryLabel: `Срок действия Воодушевления (необязательно)`,
|
detailedView_invigorationExpiryLabel: `Срок действия Воодушевления (необязательно)`,
|
||||||
|
|
||||||
abilityOverride_label: `Переопределение способности`,
|
abilityOverride_label: `Переопределение способности`,
|
||||||
abilityOverride_onSlot: `в ячейке`,
|
abilityOverride_onSlot: `в ячейке`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `Не вычитать количество Отголосков Бездны`,
|
cheats_dontSubtractVoidTraces: `Не вычитать количество Отголосков Бездны`,
|
||||||
cheats_dontSubtractConsumables: `Не вычитать количество расходников`,
|
cheats_dontSubtractConsumables: `Не вычитать количество расходников`,
|
||||||
cheats_unlockAllShipFeatures: `Разблокировать все функции корабля`,
|
cheats_unlockAllShipFeatures: `Разблокировать все функции корабля`,
|
||||||
cheats_unlockAllSkins: `Разблокировать все скины`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Разблокировать все сцены Каптуры`,
|
cheats_unlockAllCapturaScenes: `Разблокировать все сцены Каптуры`,
|
||||||
cheats_universalPolarityEverywhere: `Универсальная полярность везде`,
|
cheats_universalPolarityEverywhere: `Универсальная полярность везде`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Реакторы/Катализаторы орокин везде`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Реакторы/Катализаторы орокин везде`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `Изменить`,
|
cheats_changeButton: `Изменить`,
|
||||||
cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
|
cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
|
||||||
cheats_finishInvasionsInOneMission: `Завершать вторжение за одну миссию`,
|
cheats_finishInvasionsInOneMission: `Завершать вторжение за одну миссию`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `Состояние мира`,
|
worldState: `Состояние мира`,
|
||||||
worldState_creditBoost: `Глобальный бустер Кредитов`,
|
worldState_creditBoost: `Глобальный бустер Кредитов`,
|
||||||
|
|||||||
@ -75,6 +75,10 @@ dict = {
|
|||||||
code_funded: `Профінансовано`,
|
code_funded: `Профінансовано`,
|
||||||
code_replays: `Повтори`,
|
code_replays: `Повтори`,
|
||||||
code_stalker: `Сталкер`,
|
code_stalker: `Сталкер`,
|
||||||
|
code_cutName: `Зачіска: |INDEX|`,
|
||||||
|
code_drifterBeardName: `Борода мандрівника: |INDEX|`,
|
||||||
|
code_drifterFaceName: `Зовнішність мандрівника: |INDEX|`,
|
||||||
|
code_operatorFaceName: `Зовнішність оператора: |INDEX|`,
|
||||||
code_succChange: `Успішно змінено.`,
|
code_succChange: `Успішно змінено.`,
|
||||||
code_requiredInvigorationUpgrade: `Ви повинні вибрати як атакуюче, так і допоміжне вдосконалення.`,
|
code_requiredInvigorationUpgrade: `Ви повинні вибрати як атакуюче, так і допоміжне вдосконалення.`,
|
||||||
login_description: `Увійдіть, використовуючи облікові дані OpenWF (ті ж, що й у грі при підключенні до цього серверу).`,
|
login_description: `Увійдіть, використовуючи облікові дані OpenWF (ті ж, що й у грі при підключенні до цього серверу).`,
|
||||||
@ -109,9 +113,10 @@ dict = {
|
|||||||
inventory_moaPets: `МОА`,
|
inventory_moaPets: `МОА`,
|
||||||
inventory_kubrowPets: `Тварини`,
|
inventory_kubrowPets: `Тварини`,
|
||||||
inventory_evolutionProgress: `Прогрес еволюції Інкарнонів`,
|
inventory_evolutionProgress: `Прогрес еволюції Інкарнонів`,
|
||||||
inventory_Boosters: `Посилення`,
|
inventory_boosters: `Посилення`,
|
||||||
inventory_flavourItems: `<abbr title="Набори анімацій, гліфи, палітри і т. д.">Унікальні предмети</abbr>`,
|
inventory_flavourItems: `<abbr title="Набори анімацій, гліфи, палітри і т. д.">Унікальні предмети</abbr>`,
|
||||||
inventory_shipDecorations: `Прикраси судна`,
|
inventory_shipDecorations: `Прикраси судна`,
|
||||||
|
inventory_weaponSkins: `Вигляди`,
|
||||||
inventory_bulkAddSuits: `Додати відсутні Ворфрейми`,
|
inventory_bulkAddSuits: `Додати відсутні Ворфрейми`,
|
||||||
inventory_bulkAddWeapons: `Додати відсутню зброю`,
|
inventory_bulkAddWeapons: `Додати відсутню зброю`,
|
||||||
inventory_bulkAddSpaceSuits: `Додати відсутні Арквінґи`,
|
inventory_bulkAddSpaceSuits: `Додати відсутні Арквінґи`,
|
||||||
@ -121,6 +126,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `Додати відсутні унікальні предмети`,
|
inventory_bulkAddFlavourItems: `Додати відсутні унікальні предмети`,
|
||||||
inventory_bulkAddShipDecorations: `Додати відсутні оздоби корабля`,
|
inventory_bulkAddShipDecorations: `Додати відсутні оздоби корабля`,
|
||||||
inventory_bulkAddEvolutionProgress: `Додати відсутній прогрес еволюції Інкарнонів`,
|
inventory_bulkAddEvolutionProgress: `Додати відсутній прогрес еволюції Інкарнонів`,
|
||||||
|
inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `Макс. рівень всіх Ворфреймів`,
|
inventory_bulkRankUpSuits: `Макс. рівень всіх Ворфреймів`,
|
||||||
inventory_bulkRankUpWeapons: `Макс. рівень всієї зброї`,
|
inventory_bulkRankUpWeapons: `Макс. рівень всієї зброї`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Макс. рівень всіх Арквінґів`,
|
inventory_bulkRankUpSpaceSuits: `Макс. рівень всіх Арквінґів`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `Ознака Валентності`,
|
detailedView_valenceBonusLabel: `Ознака Валентності`,
|
||||||
detailedView_valenceBonusDescription: `Ви можете встановити або прибрати ознаку Валентності з вашої зброї.`,
|
detailedView_valenceBonusDescription: `Ви можете встановити або прибрати ознаку Валентності з вашої зброї.`,
|
||||||
detailedView_modularPartsLabel: `Змінити модульні частини`,
|
detailedView_modularPartsLabel: `Змінити модульні частини`,
|
||||||
detailedView_suitInvigorationLabel: `Зміцнення Ворфрейма`,
|
detailedView_invigorationLabel: `Зміцнення`,
|
||||||
detailedView_loadoutLabel: `Конфігурації`,
|
detailedView_loadoutLabel: `Конфігурації`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200% до потужності здібностей.`,
|
invigorations_offensive_AbilityStrength: `+200% до потужності здібностей.`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5 Оновлень стрибків.`,
|
invigorations_utility_Jumps: `+5 Оновлень стрибків.`,
|
||||||
invigorations_utility_EnergyRegen: `+2 до відновлення енергії на секунду.`,
|
invigorations_utility_EnergyRegen: `+2 до відновлення енергії на секунду.`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `Атакуюче вдосконалення`,
|
detailedView_invigorationOffensiveLabel: `Атакуюче вдосконалення`,
|
||||||
invigorations_defensiveLabel: `Допоміжне вдосконалення`,
|
detailedView_invigorationUtilityLabel: `Допоміжне вдосконалення`,
|
||||||
invigorations_expiryLabel: `Термін дії Зміцнення (необов'язково)`,
|
detailedView_invigorationExpiryLabel: `Термін дії Зміцнення (необов'язково)`,
|
||||||
|
|
||||||
abilityOverride_label: `Перевизначення здібностей`,
|
abilityOverride_label: `Перевизначення здібностей`,
|
||||||
abilityOverride_onSlot: `у комірці`,
|
abilityOverride_onSlot: `у комірці`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `Не вираховувати кількість Відлуння`,
|
cheats_dontSubtractVoidTraces: `Не вираховувати кількість Відлуння`,
|
||||||
cheats_dontSubtractConsumables: `Не вираховувати кількість витратних матеріалів`,
|
cheats_dontSubtractConsumables: `Не вираховувати кількість витратних матеріалів`,
|
||||||
cheats_unlockAllShipFeatures: `Розблокувати всі функції судна`,
|
cheats_unlockAllShipFeatures: `Розблокувати всі функції судна`,
|
||||||
cheats_unlockAllSkins: `Розблокувати всі скіни`,
|
|
||||||
cheats_unlockAllCapturaScenes: `Розблокувати всі сцени Світлописця`,
|
cheats_unlockAllCapturaScenes: `Розблокувати всі сцени Світлописця`,
|
||||||
cheats_universalPolarityEverywhere: `Будь-яка полярність скрізь`,
|
cheats_universalPolarityEverywhere: `Будь-яка полярність скрізь`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Орокінські Реактори/Каталізатори скрізь`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `Орокінські Реактори/Каталізатори скрізь`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `Змінити`,
|
cheats_changeButton: `Змінити`,
|
||||||
cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
|
cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
|
||||||
cheats_finishInvasionsInOneMission: `Завершувати вторгнення за одну місію`,
|
cheats_finishInvasionsInOneMission: `Завершувати вторгнення за одну місію`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
|
||||||
|
|
||||||
worldState: `Стан світу`,
|
worldState: `Стан світу`,
|
||||||
worldState_creditBoost: `Глобальне посилення Кредитів`,
|
worldState_creditBoost: `Глобальне посилення Кредитів`,
|
||||||
|
|||||||
@ -75,8 +75,12 @@ dict = {
|
|||||||
code_funded: `[UNTRANSLATED] Funded`,
|
code_funded: `[UNTRANSLATED] Funded`,
|
||||||
code_replays: `[UNTRANSLATED] Replays`,
|
code_replays: `[UNTRANSLATED] Replays`,
|
||||||
code_stalker: `追猎者`,
|
code_stalker: `追猎者`,
|
||||||
|
code_cutName: `[UNTRANSLATED] Cut |INDEX|`,
|
||||||
|
code_drifterBeardName: `漂泊者胡须 |INDEX|`,
|
||||||
|
code_drifterFaceName: `漂泊者面部 |INDEX|`,
|
||||||
|
code_operatorFaceName: `指挥官面部 |INDEX|`,
|
||||||
code_succChange: `更改成功`,
|
code_succChange: `更改成功`,
|
||||||
code_requiredInvigorationUpgrade: `您必须同时选择一个进攻型和一个功能型活化属性.`,
|
code_requiredInvigorationUpgrade: `[UNTRANSLATED] You must select both an offensive & utility upgrade.`,
|
||||||
login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)`,
|
login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)`,
|
||||||
login_emailLabel: `电子邮箱`,
|
login_emailLabel: `电子邮箱`,
|
||||||
login_passwordLabel: `密码`,
|
login_passwordLabel: `密码`,
|
||||||
@ -109,9 +113,10 @@ dict = {
|
|||||||
inventory_moaPets: `恐鸟`,
|
inventory_moaPets: `恐鸟`,
|
||||||
inventory_kubrowPets: `动物同伴`,
|
inventory_kubrowPets: `动物同伴`,
|
||||||
inventory_evolutionProgress: `灵化之源进度`,
|
inventory_evolutionProgress: `灵化之源进度`,
|
||||||
inventory_Boosters: `加成器`,
|
inventory_boosters: `加成器`,
|
||||||
inventory_flavourItems: `<abbr title="动作表情、浮印、调色板等">装饰物品</abbr>`,
|
inventory_flavourItems: `<abbr title="动作表情、浮印、调色板等">装饰物品</abbr>`,
|
||||||
inventory_shipDecorations: `飞船装饰`,
|
inventory_shipDecorations: `飞船装饰`,
|
||||||
|
inventory_weaponSkins: `外观`,
|
||||||
inventory_bulkAddSuits: `添加缺失战甲`,
|
inventory_bulkAddSuits: `添加缺失战甲`,
|
||||||
inventory_bulkAddWeapons: `添加缺失武器`,
|
inventory_bulkAddWeapons: `添加缺失武器`,
|
||||||
inventory_bulkAddSpaceSuits: `添加缺失载具`,
|
inventory_bulkAddSpaceSuits: `添加缺失载具`,
|
||||||
@ -121,6 +126,7 @@ dict = {
|
|||||||
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
inventory_bulkAddFlavourItems: `[UNTRANSLATED] Add Missing Flavour Items`,
|
||||||
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
inventory_bulkAddShipDecorations: `[UNTRANSLATED] Add Missing Ship Decorations`,
|
||||||
inventory_bulkAddEvolutionProgress: `添加缺失的灵化之源进度`,
|
inventory_bulkAddEvolutionProgress: `添加缺失的灵化之源进度`,
|
||||||
|
inventory_bulkAddWeaponSkins: `[UNTRANSLATED] Add Missing Skins`,
|
||||||
inventory_bulkRankUpSuits: `所有战甲升满级`,
|
inventory_bulkRankUpSuits: `所有战甲升满级`,
|
||||||
inventory_bulkRankUpWeapons: `所有武器升满级`,
|
inventory_bulkRankUpWeapons: `所有武器升满级`,
|
||||||
inventory_bulkRankUpSpaceSuits: `所有载具升满级`,
|
inventory_bulkRankUpSpaceSuits: `所有载具升满级`,
|
||||||
@ -147,7 +153,7 @@ dict = {
|
|||||||
detailedView_valenceBonusLabel: `效价加成`,
|
detailedView_valenceBonusLabel: `效价加成`,
|
||||||
detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
|
detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`,
|
||||||
detailedView_modularPartsLabel: `更换部件`,
|
detailedView_modularPartsLabel: `更换部件`,
|
||||||
detailedView_suitInvigorationLabel: `编辑战甲活化属性`,
|
detailedView_invigorationLabel: `活化`,
|
||||||
detailedView_loadoutLabel: `配置`,
|
detailedView_loadoutLabel: `配置`,
|
||||||
|
|
||||||
invigorations_offensive_AbilityStrength: `+200%技能强度`,
|
invigorations_offensive_AbilityStrength: `+200%技能强度`,
|
||||||
@ -172,9 +178,9 @@ dict = {
|
|||||||
invigorations_utility_Jumps: `+5跳跃次数`,
|
invigorations_utility_Jumps: `+5跳跃次数`,
|
||||||
invigorations_utility_EnergyRegen: `+2/秒能量恢复`,
|
invigorations_utility_EnergyRegen: `+2/秒能量恢复`,
|
||||||
|
|
||||||
invigorations_offensiveLabel: `进攻型属性`,
|
detailedView_invigorationOffensiveLabel: `进攻型属性`,
|
||||||
invigorations_defensiveLabel: `功能型属性`,
|
detailedView_invigorationUtilityLabel: `[UNTRANSLATED] Utility Upgrade`,
|
||||||
invigorations_expiryLabel: `活化时效(可选)`,
|
detailedView_invigorationExpiryLabel: `活化时效(可选)`,
|
||||||
|
|
||||||
abilityOverride_label: `技能替换`,
|
abilityOverride_label: `技能替换`,
|
||||||
abilityOverride_onSlot: `槽位`,
|
abilityOverride_onSlot: `槽位`,
|
||||||
@ -209,7 +215,6 @@ dict = {
|
|||||||
cheats_dontSubtractVoidTraces: `虚空光体无消耗`,
|
cheats_dontSubtractVoidTraces: `虚空光体无消耗`,
|
||||||
cheats_dontSubtractConsumables: `消耗物品使用时无损耗`,
|
cheats_dontSubtractConsumables: `消耗物品使用时无损耗`,
|
||||||
cheats_unlockAllShipFeatures: `解锁所有飞船功能`,
|
cheats_unlockAllShipFeatures: `解锁所有飞船功能`,
|
||||||
cheats_unlockAllSkins: `解锁所有外观`,
|
|
||||||
cheats_unlockAllCapturaScenes: `解锁所有Captura场景`,
|
cheats_unlockAllCapturaScenes: `解锁所有Captura场景`,
|
||||||
cheats_universalPolarityEverywhere: `全局万用极性`,
|
cheats_universalPolarityEverywhere: `全局万用极性`,
|
||||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `全物品自带Orokin反应堆`,
|
cheats_unlockDoubleCapacityPotatoesEverywhere: `全物品自带Orokin反应堆`,
|
||||||
@ -257,6 +262,12 @@ dict = {
|
|||||||
cheats_changeButton: `更改`,
|
cheats_changeButton: `更改`,
|
||||||
cheats_markAllAsRead: `收件箱全部标记为已读`,
|
cheats_markAllAsRead: `收件箱全部标记为已读`,
|
||||||
cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`,
|
cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierGrineer: `玄骸怒气倍率 (Grineer)`,
|
||||||
|
cheats_nemesisHenchmenKillsMultiplierCorpus: `玄骸怒气倍率 (Corpus)`,
|
||||||
|
cheats_nemesisAntivirusGainMultiplier: `杀毒进度倍率 (科腐者)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierGrineer: `解密进度倍率 (Grineer)`,
|
||||||
|
cheats_nemesisHintProgressMultiplierCorpus: `解密进度倍率 (Corpus)`,
|
||||||
|
cheats_nemesisExtraWeapon: `额外玄骸武器/代币 (0为禁用)`,
|
||||||
|
|
||||||
worldState: `世界状态配置`,
|
worldState: `世界状态配置`,
|
||||||
worldState_creditBoost: `现金加成`,
|
worldState_creditBoost: `现金加成`,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user