Compare commits
9 Commits
26ba2a4855
...
7fcac021a5
Author | SHA1 | Date | |
---|---|---|---|
7fcac021a5 | |||
100aefcee4 | |||
409c089d11 | |||
8c32dc2670 | |||
a67f99b665 | |||
756a01d270 | |||
efc7467a99 | |||
99e1a66da8 | |||
370f8c1008 |
@ -17,7 +17,7 @@ import { getDefaultUpgrades } from "@/src/services/itemDataService";
|
|||||||
import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
|
import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
|
||||||
import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||||
import { getRandomInt } from "@/src/services/rngService";
|
import { getRandomInt } from "@/src/services/rngService";
|
||||||
import { ExportSentinels, IDefaultUpgrade } from "warframe-public-export-plus";
|
import { ExportSentinels, ExportWeapons, IDefaultUpgrade } from "warframe-public-export-plus";
|
||||||
import { Status } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { Status } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
|
|
||||||
interface IModularCraftRequest {
|
interface IModularCraftRequest {
|
||||||
@ -138,6 +138,18 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
|
|||||||
} else {
|
} else {
|
||||||
defaultUpgrades = getDefaultUpgrades(data.Parts);
|
defaultUpgrades = getDefaultUpgrades(data.Parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (category == "MoaPets") {
|
||||||
|
const weapon = ExportSentinels[data.WeaponType].defaultWeapon;
|
||||||
|
if (weapon) {
|
||||||
|
const category = ExportWeapons[weapon].productCategory;
|
||||||
|
addEquipment(inventory, category, weapon, undefined, inventoryChanges);
|
||||||
|
combineInventoryChanges(
|
||||||
|
inventoryChanges,
|
||||||
|
occupySlot(inventory, productCategoryToInventoryBin(category)!, !!data.isWebUi)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
defaultOverwrites.Configs = applyDefaultUpgrades(inventory, defaultUpgrades);
|
defaultOverwrites.Configs = applyDefaultUpgrades(inventory, defaultUpgrades);
|
||||||
addEquipment(inventory, category, data.WeaponType, data.Parts, inventoryChanges, defaultOverwrites);
|
addEquipment(inventory, category, data.WeaponType, data.Parts, inventoryChanges, defaultOverwrites);
|
||||||
combineInventoryChanges(
|
combineInventoryChanges(
|
||||||
|
@ -45,7 +45,7 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
if (payload.Items.SpaceGuns || payload.Items.SpaceMelee) {
|
if (payload.Items.SpaceGuns || payload.Items.SpaceMelee) {
|
||||||
requiredFields.add(InventorySlot.SPACEWEAPONS);
|
requiredFields.add(InventorySlot.SPACEWEAPONS);
|
||||||
}
|
}
|
||||||
if (payload.Items.Sentinels || payload.Items.SentinelWeapons) {
|
if (payload.Items.Sentinels || payload.Items.SentinelWeapons || payload.Items.MoaPets) {
|
||||||
requiredFields.add(InventorySlot.SENTINELS);
|
requiredFields.add(InventorySlot.SENTINELS);
|
||||||
}
|
}
|
||||||
if (payload.Items.OperatorAmps) {
|
if (payload.Items.OperatorAmps) {
|
||||||
@ -148,6 +148,12 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
freeUpSlot(inventory, InventorySlot.SENTINELS);
|
freeUpSlot(inventory, InventorySlot.SENTINELS);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (payload.Items.MoaPets) {
|
||||||
|
payload.Items.MoaPets.forEach(sellItem => {
|
||||||
|
inventory.MoaPets.pull({ _id: sellItem.String });
|
||||||
|
freeUpSlot(inventory, InventorySlot.SENTINELS);
|
||||||
|
});
|
||||||
|
}
|
||||||
if (payload.Items.OperatorAmps) {
|
if (payload.Items.OperatorAmps) {
|
||||||
payload.Items.OperatorAmps.forEach(sellItem => {
|
payload.Items.OperatorAmps.forEach(sellItem => {
|
||||||
inventory.OperatorAmps.pull({ _id: sellItem.String });
|
inventory.OperatorAmps.pull({ _id: sellItem.String });
|
||||||
@ -281,6 +287,7 @@ interface ISellRequest {
|
|||||||
SpaceMelee?: ISellItem[];
|
SpaceMelee?: ISellItem[];
|
||||||
Sentinels?: ISellItem[];
|
Sentinels?: ISellItem[];
|
||||||
SentinelWeapons?: ISellItem[];
|
SentinelWeapons?: ISellItem[];
|
||||||
|
MoaPets?: ISellItem[];
|
||||||
OperatorAmps?: ISellItem[];
|
OperatorAmps?: ISellItem[];
|
||||||
Hoverboards?: ISellItem[];
|
Hoverboards?: ISellItem[];
|
||||||
Drones?: ISellItem[];
|
Drones?: ISellItem[];
|
||||||
|
@ -6,6 +6,9 @@ import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
|||||||
import { addMiscItems, combineInventoryChanges, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { addMiscItems, combineInventoryChanges, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
import { isStoreItem, toStoreItem } from "@/src/services/itemDataService";
|
import { isStoreItem, toStoreItem } from "@/src/services/itemDataService";
|
||||||
|
import { logger } from "@/src/utils/logger";
|
||||||
|
|
||||||
|
const nightwaveCredsItemType = ExportNightwave.rewards[ExportNightwave.rewards.length - 1].uniqueName;
|
||||||
|
|
||||||
export const syndicateSacrificeController: RequestHandler = async (request, response) => {
|
export const syndicateSacrificeController: RequestHandler = async (request, response) => {
|
||||||
const accountId = await getAccountIdForRequest(request);
|
const accountId = await getAccountIdForRequest(request);
|
||||||
@ -74,10 +77,14 @@ export const syndicateSacrificeController: RequestHandler = async (request, resp
|
|||||||
if (!isStoreItem(rewardType)) {
|
if (!isStoreItem(rewardType)) {
|
||||||
rewardType = toStoreItem(rewardType);
|
rewardType = toStoreItem(rewardType);
|
||||||
}
|
}
|
||||||
combineInventoryChanges(
|
const rewardInventoryChanges = (await handleStoreItemAcquisition(rewardType, inventory, reward.itemCount))
|
||||||
res.InventoryChanges,
|
.InventoryChanges;
|
||||||
(await handleStoreItemAcquisition(rewardType, inventory, reward.itemCount)).InventoryChanges
|
if (Object.keys(rewardInventoryChanges).length == 0) {
|
||||||
);
|
logger.debug(`nightwave rank up reward did not seem to get added, giving 50 creds instead`);
|
||||||
|
rewardInventoryChanges.MiscItems = [{ ItemType: nightwaveCredsItemType, ItemCount: 50 }];
|
||||||
|
addMiscItems(inventory, rewardInventoryChanges.MiscItems);
|
||||||
|
}
|
||||||
|
combineInventoryChanges(res.InventoryChanges, rewardInventoryChanges);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import {
|
|||||||
TRelicQuality
|
TRelicQuality
|
||||||
} from "warframe-public-export-plus";
|
} from "warframe-public-export-plus";
|
||||||
import archonCrystalUpgrades from "@/static/fixed_responses/webuiArchonCrystalUpgrades.json";
|
import archonCrystalUpgrades from "@/static/fixed_responses/webuiArchonCrystalUpgrades.json";
|
||||||
|
import allIncarnons from "@/static/fixed_responses/allIncarnonList.json";
|
||||||
|
|
||||||
interface ListedItem {
|
interface ListedItem {
|
||||||
uniqueName: string;
|
uniqueName: string;
|
||||||
@ -32,6 +33,29 @@ interface ListedItem {
|
|||||||
parazon?: boolean;
|
parazon?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ItemLists {
|
||||||
|
archonCrystalUpgrades: Record<string, string>;
|
||||||
|
uniqueLevelCaps: Record<string, number>;
|
||||||
|
Suits: ListedItem[];
|
||||||
|
LongGuns: ListedItem[];
|
||||||
|
Melee: ListedItem[];
|
||||||
|
ModularParts: ListedItem[];
|
||||||
|
Pistols: ListedItem[];
|
||||||
|
Sentinels: ListedItem[];
|
||||||
|
SentinelWeapons: ListedItem[];
|
||||||
|
SpaceGuns: ListedItem[];
|
||||||
|
SpaceMelee: ListedItem[];
|
||||||
|
SpaceSuits: ListedItem[];
|
||||||
|
MechSuits: ListedItem[];
|
||||||
|
miscitems: ListedItem[];
|
||||||
|
Syndicates: ListedItem[];
|
||||||
|
OperatorAmps: ListedItem[];
|
||||||
|
QuestKeys: ListedItem[];
|
||||||
|
KubrowPets: ListedItem[];
|
||||||
|
EvolutionProgress: ListedItem[];
|
||||||
|
mods: ListedItem[];
|
||||||
|
}
|
||||||
|
|
||||||
const relicQualitySuffixes: Record<TRelicQuality, string> = {
|
const relicQualitySuffixes: Record<TRelicQuality, string> = {
|
||||||
VPQ_BRONZE: "",
|
VPQ_BRONZE: "",
|
||||||
VPQ_SILVER: " [Flawless]",
|
VPQ_SILVER: " [Flawless]",
|
||||||
@ -41,23 +65,28 @@ const relicQualitySuffixes: Record<TRelicQuality, string> = {
|
|||||||
|
|
||||||
const getItemListsController: RequestHandler = (req, response) => {
|
const getItemListsController: RequestHandler = (req, response) => {
|
||||||
const lang = getDict(typeof req.query.lang == "string" ? req.query.lang : "en");
|
const lang = getDict(typeof req.query.lang == "string" ? req.query.lang : "en");
|
||||||
const res: Record<string, ListedItem[]> = {};
|
const res: ItemLists = {
|
||||||
res.Suits = [];
|
archonCrystalUpgrades,
|
||||||
res.LongGuns = [];
|
uniqueLevelCaps: ExportMisc.uniqueLevelCaps,
|
||||||
res.Melee = [];
|
Suits: [],
|
||||||
res.ModularParts = [];
|
LongGuns: [],
|
||||||
res.Pistols = [];
|
Melee: [],
|
||||||
res.Sentinels = [];
|
ModularParts: [],
|
||||||
res.SentinelWeapons = [];
|
Pistols: [],
|
||||||
res.SpaceGuns = [];
|
Sentinels: [],
|
||||||
res.SpaceMelee = [];
|
SentinelWeapons: [],
|
||||||
res.SpaceSuits = [];
|
SpaceGuns: [],
|
||||||
res.MechSuits = [];
|
SpaceMelee: [],
|
||||||
res.miscitems = [];
|
SpaceSuits: [],
|
||||||
res.Syndicates = [];
|
MechSuits: [],
|
||||||
res.OperatorAmps = [];
|
miscitems: [],
|
||||||
res.QuestKeys = [];
|
Syndicates: [],
|
||||||
res.KubrowPets = [];
|
OperatorAmps: [],
|
||||||
|
QuestKeys: [],
|
||||||
|
KubrowPets: [],
|
||||||
|
EvolutionProgress: [],
|
||||||
|
mods: []
|
||||||
|
};
|
||||||
for (const [uniqueName, item] of Object.entries(ExportWarframes)) {
|
for (const [uniqueName, item] of Object.entries(ExportWarframes)) {
|
||||||
res[item.productCategory].push({
|
res[item.productCategory].push({
|
||||||
uniqueName,
|
uniqueName,
|
||||||
@ -66,7 +95,7 @@ const getItemListsController: RequestHandler = (req, response) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (const [uniqueName, item] of Object.entries(ExportSentinels)) {
|
for (const [uniqueName, item] of Object.entries(ExportSentinels)) {
|
||||||
if (item.productCategory != "SpecialItems") {
|
if (item.productCategory == "Sentinels" || item.productCategory == "KubrowPets") {
|
||||||
res[item.productCategory].push({
|
res[item.productCategory].push({
|
||||||
uniqueName,
|
uniqueName,
|
||||||
name: getString(item.name, lang),
|
name: getString(item.name, lang),
|
||||||
@ -200,7 +229,6 @@ const getItemListsController: RequestHandler = (req, response) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
res.mods = [];
|
|
||||||
for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
|
for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) {
|
||||||
const mod: ListedItem = {
|
const mod: ListedItem = {
|
||||||
uniqueName,
|
uniqueName,
|
||||||
@ -258,12 +286,14 @@ const getItemListsController: RequestHandler = (req, response) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (const uniqueName of allIncarnons) {
|
||||||
|
res.EvolutionProgress.push({
|
||||||
|
uniqueName,
|
||||||
|
name: getString(getItemName(uniqueName) || "", lang)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
response.json({
|
response.json(res);
|
||||||
archonCrystalUpgrades,
|
|
||||||
uniqueLevelCaps: ExportMisc.uniqueLevelCaps,
|
|
||||||
...res
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export { getItemListsController };
|
export { getItemListsController };
|
||||||
|
33
src/controllers/custom/setEvolutionProgressController.ts
Normal file
33
src/controllers/custom/setEvolutionProgressController.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
|
export const setEvolutionProgressController: RequestHandler = async (req, res) => {
|
||||||
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
const inventory = await getInventory(accountId);
|
||||||
|
const payload = req.body as ISetEvolutionProgressRequest;
|
||||||
|
|
||||||
|
inventory.EvolutionProgress ??= [];
|
||||||
|
payload.forEach(element => {
|
||||||
|
const entry = inventory.EvolutionProgress!.find(entry => entry.ItemType === element.ItemType);
|
||||||
|
|
||||||
|
if (entry) {
|
||||||
|
entry.Progress = 0;
|
||||||
|
entry.Rank = element.Rank;
|
||||||
|
} else {
|
||||||
|
inventory.EvolutionProgress!.push({
|
||||||
|
Progress: 0,
|
||||||
|
Rank: element.Rank,
|
||||||
|
ItemType: element.ItemType
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await inventory.save();
|
||||||
|
res.end();
|
||||||
|
};
|
||||||
|
|
||||||
|
type ISetEvolutionProgressRequest = {
|
||||||
|
ItemType: string;
|
||||||
|
Rank: number;
|
||||||
|
}[];
|
@ -17,10 +17,11 @@ import { addCurrencyController } from "@/src/controllers/custom/addCurrencyContr
|
|||||||
import { addItemsController } from "@/src/controllers/custom/addItemsController";
|
import { addItemsController } from "@/src/controllers/custom/addItemsController";
|
||||||
import { addXpController } from "@/src/controllers/custom/addXpController";
|
import { addXpController } from "@/src/controllers/custom/addXpController";
|
||||||
import { importController } from "@/src/controllers/custom/importController";
|
import { importController } from "@/src/controllers/custom/importController";
|
||||||
|
import { manageQuestsController } from "@/src/controllers/custom/manageQuestsController";
|
||||||
|
import { setEvolutionProgressController } from "@/src/controllers/custom/setEvolutionProgressController";
|
||||||
|
|
||||||
import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
|
import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
|
||||||
import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
|
import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
|
||||||
import { manageQuestsController } from "@/src/controllers/custom/manageQuestsController";
|
|
||||||
|
|
||||||
const customRouter = express.Router();
|
const customRouter = express.Router();
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ customRouter.post("/addItems", addItemsController);
|
|||||||
customRouter.post("/addXp", addXpController);
|
customRouter.post("/addXp", addXpController);
|
||||||
customRouter.post("/import", importController);
|
customRouter.post("/import", importController);
|
||||||
customRouter.post("/manageQuests", manageQuestsController);
|
customRouter.post("/manageQuests", manageQuestsController);
|
||||||
|
customRouter.post("/setEvolutionProgress", setEvolutionProgressController);
|
||||||
|
|
||||||
customRouter.get("/config", getConfigDataController);
|
customRouter.get("/config", getConfigDataController);
|
||||||
customRouter.post("/config", updateConfigDataController);
|
customRouter.post("/config", updateConfigDataController);
|
||||||
|
@ -105,6 +105,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
|
|||||||
Members: members,
|
Members: members,
|
||||||
Ranks: guild.Ranks,
|
Ranks: guild.Ranks,
|
||||||
Tier: guild.Tier,
|
Tier: guild.Tier,
|
||||||
|
Emblem: guild.Emblem,
|
||||||
Vault: getGuildVault(guild),
|
Vault: getGuildVault(guild),
|
||||||
ActiveDojoColorResearch: guild.ActiveDojoColorResearch,
|
ActiveDojoColorResearch: guild.ActiveDojoColorResearch,
|
||||||
Class: guild.Class,
|
Class: guild.Class,
|
||||||
|
@ -1236,12 +1236,16 @@ export const addSkin = (
|
|||||||
typeName: string,
|
typeName: string,
|
||||||
inventoryChanges: IInventoryChanges = {}
|
inventoryChanges: IInventoryChanges = {}
|
||||||
): IInventoryChanges => {
|
): IInventoryChanges => {
|
||||||
const index = inventory.WeaponSkins.push({ ItemType: typeName, IsNew: true }) - 1;
|
if (inventory.WeaponSkins.find(x => x.ItemType == typeName)) {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
logger.debug(`refusing to add WeaponSkin ${typeName} because account already owns it`);
|
||||||
inventoryChanges.WeaponSkins ??= [];
|
} else {
|
||||||
(inventoryChanges.WeaponSkins as IWeaponSkinClient[]).push(
|
const index = inventory.WeaponSkins.push({ ItemType: typeName, IsNew: true }) - 1;
|
||||||
inventory.WeaponSkins[index].toJSON<IWeaponSkinClient>()
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||||
);
|
inventoryChanges.WeaponSkins ??= [];
|
||||||
|
(inventoryChanges.WeaponSkins as IWeaponSkinClient[]).push(
|
||||||
|
inventory.WeaponSkins[index].toJSON<IWeaponSkinClient>()
|
||||||
|
);
|
||||||
|
}
|
||||||
return inventoryChanges;
|
return inventoryChanges;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -225,7 +225,8 @@ const pushSortieIfRelevant = (worldState: IWorldState, day: number): void => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const rng = new CRng(day);
|
const seed = new CRng(day).randomInt(0, 0xffff);
|
||||||
|
const rng = new CRng(seed);
|
||||||
|
|
||||||
const boss = rng.randomElement(sortieBosses);
|
const boss = rng.randomElement(sortieBosses);
|
||||||
|
|
||||||
@ -354,7 +355,7 @@ const pushSortieIfRelevant = (worldState: IWorldState, day: number): void => {
|
|||||||
Activation: { $date: { $numberLong: dayStart.toString() } },
|
Activation: { $date: { $numberLong: dayStart.toString() } },
|
||||||
Expiry: { $date: { $numberLong: dayEnd.toString() } },
|
Expiry: { $date: { $numberLong: dayEnd.toString() } },
|
||||||
Reward: "/Lotus/Types/Game/MissionDecks/SortieRewards",
|
Reward: "/Lotus/Types/Game/MissionDecks/SortieRewards",
|
||||||
Seed: day,
|
Seed: seed,
|
||||||
Boss: boss,
|
Boss: boss,
|
||||||
Variants: selectedNodes
|
Variants: selectedNodes
|
||||||
});
|
});
|
||||||
@ -374,7 +375,7 @@ const dailyChallenges = Object.keys(ExportNightwave.challenges).filter(x =>
|
|||||||
const getSeasonDailyChallenge = (day: number): ISeasonChallenge => {
|
const getSeasonDailyChallenge = (day: number): ISeasonChallenge => {
|
||||||
const dayStart = EPOCH + day * 86400000;
|
const dayStart = EPOCH + day * 86400000;
|
||||||
const dayEnd = EPOCH + (day + 3) * 86400000;
|
const dayEnd = EPOCH + (day + 3) * 86400000;
|
||||||
const rng = new CRng(day);
|
const rng = new CRng(new CRng(day).randomInt(0, 0xffff));
|
||||||
return {
|
return {
|
||||||
_id: { $oid: "67e1b5ca9d00cb47" + day.toString().padStart(8, "0") },
|
_id: { $oid: "67e1b5ca9d00cb47" + day.toString().padStart(8, "0") },
|
||||||
Daily: true,
|
Daily: true,
|
||||||
@ -394,7 +395,7 @@ const getSeasonWeeklyChallenge = (week: number, id: number): ISeasonChallenge =>
|
|||||||
const weekStart = EPOCH + week * 604800000;
|
const weekStart = EPOCH + week * 604800000;
|
||||||
const weekEnd = weekStart + 604800000;
|
const weekEnd = weekStart + 604800000;
|
||||||
const challengeId = week * 7 + id;
|
const challengeId = week * 7 + id;
|
||||||
const rng = new CRng(challengeId);
|
const rng = new CRng(new CRng(challengeId).randomInt(0, 0xffff));
|
||||||
return {
|
return {
|
||||||
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
|
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
|
||||||
Activation: { $date: { $numberLong: weekStart.toString() } },
|
Activation: { $date: { $numberLong: weekStart.toString() } },
|
||||||
@ -411,7 +412,7 @@ const getSeasonWeeklyHardChallenge = (week: number, id: number): ISeasonChalleng
|
|||||||
const weekStart = EPOCH + week * 604800000;
|
const weekStart = EPOCH + week * 604800000;
|
||||||
const weekEnd = weekStart + 604800000;
|
const weekEnd = weekStart + 604800000;
|
||||||
const challengeId = week * 7 + id;
|
const challengeId = week * 7 + id;
|
||||||
const rng = new CRng(challengeId);
|
const rng = new CRng(new CRng(challengeId).randomInt(0, 0xffff));
|
||||||
return {
|
return {
|
||||||
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
|
_id: { $oid: "67e1bb2d9d00cb47" + challengeId.toString().padStart(8, "0") },
|
||||||
Activation: { $date: { $numberLong: weekStart.toString() } },
|
Activation: { $date: { $numberLong: weekStart.toString() } },
|
||||||
@ -476,7 +477,7 @@ const getCalendarSeason = (week: number): ICalendarSeason => {
|
|||||||
//logger.debug(`birthday on day ${day}`);
|
//logger.debug(`birthday on day ${day}`);
|
||||||
eventDays.push({ day, events: [] }); // This is how CET_PLOT looks in worldState as of around 38.5.0
|
eventDays.push({ day, events: [] }); // This is how CET_PLOT looks in worldState as of around 38.5.0
|
||||||
}
|
}
|
||||||
const rng = new CRng(week);
|
const rng = new CRng(new CRng(week).randomInt(0, 0xffff));
|
||||||
const challenges = [
|
const challenges = [
|
||||||
"/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesEasy",
|
"/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesEasy",
|
||||||
"/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesMedium",
|
"/Lotus/Types/Challenges/Calendar1999/CalendarKillEnemiesMedium",
|
||||||
@ -710,7 +711,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Elite Sanctuary Onslaught cycling every week
|
// Elite Sanctuary Onslaught cycling every week
|
||||||
worldState.NodeOverrides.find(x => x.Node == "SolNode802")!.Seed = week; // unfaithful
|
worldState.NodeOverrides.find(x => x.Node == "SolNode802")!.Seed = new CRng(week).randomInt(0, 0xffff);
|
||||||
|
|
||||||
// Holdfast, Cavia, & Hex bounties cycling every 2.5 hours; unfaithful implementation
|
// Holdfast, Cavia, & Hex bounties cycling every 2.5 hours; unfaithful implementation
|
||||||
let bountyCycle = Math.trunc(Date.now() / 9000000);
|
let bountyCycle = Math.trunc(Date.now() / 9000000);
|
||||||
@ -749,14 +750,16 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
|
|
||||||
// TODO: xpAmounts need to be calculated based on the jobType somehow?
|
// TODO: xpAmounts need to be calculated based on the jobType somehow?
|
||||||
|
|
||||||
|
const seed = new CRng(bountyCycle).randomInt(0, 0xffff);
|
||||||
|
|
||||||
{
|
{
|
||||||
const rng = new CRng(bountyCycle);
|
const rng = new CRng(seed);
|
||||||
worldState.SyndicateMissions.push({
|
worldState.SyndicateMissions.push({
|
||||||
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000008" },
|
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000008" },
|
||||||
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
||||||
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
||||||
Tag: "CetusSyndicate",
|
Tag: "CetusSyndicate",
|
||||||
Seed: bountyCycle,
|
Seed: seed,
|
||||||
Nodes: [],
|
Nodes: [],
|
||||||
Jobs: [
|
Jobs: [
|
||||||
{
|
{
|
||||||
@ -820,13 +823,13 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const rng = new CRng(bountyCycle);
|
const rng = new CRng(seed);
|
||||||
worldState.SyndicateMissions.push({
|
worldState.SyndicateMissions.push({
|
||||||
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000025" },
|
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000025" },
|
||||||
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
||||||
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
||||||
Tag: "SolarisSyndicate",
|
Tag: "SolarisSyndicate",
|
||||||
Seed: bountyCycle,
|
Seed: seed,
|
||||||
Nodes: [],
|
Nodes: [],
|
||||||
Jobs: [
|
Jobs: [
|
||||||
{
|
{
|
||||||
@ -890,13 +893,13 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const rng = new CRng(bountyCycle);
|
const rng = new CRng(seed);
|
||||||
worldState.SyndicateMissions.push({
|
worldState.SyndicateMissions.push({
|
||||||
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000002" },
|
_id: { $oid: Math.trunc(bountyCycleStart / 1000).toString(16) + "0000000000000002" },
|
||||||
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
Activation: { $date: { $numberLong: bountyCycleStart.toString(10) } },
|
||||||
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
Expiry: { $date: { $numberLong: bountyCycleEnd.toString(10) } },
|
||||||
Tag: "EntratiSyndicate",
|
Tag: "EntratiSyndicate",
|
||||||
Seed: bountyCycle,
|
Seed: seed,
|
||||||
Nodes: [],
|
Nodes: [],
|
||||||
Jobs: [
|
Jobs: [
|
||||||
{
|
{
|
||||||
@ -1119,7 +1122,8 @@ export const getLiteSortie = (week: number): ILiteSortie => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const rng = new CRng(week);
|
const seed = new CRng(week).randomInt(0, 0xffff);
|
||||||
|
const rng = new CRng(seed);
|
||||||
const firstNodeIndex = rng.randomInt(0, nodes.length - 1);
|
const firstNodeIndex = rng.randomInt(0, nodes.length - 1);
|
||||||
const firstNode = nodes[firstNodeIndex];
|
const firstNode = nodes[firstNodeIndex];
|
||||||
nodes.splice(firstNodeIndex, 1);
|
nodes.splice(firstNodeIndex, 1);
|
||||||
@ -1133,7 +1137,7 @@ export const getLiteSortie = (week: number): ILiteSortie => {
|
|||||||
Activation: { $date: { $numberLong: weekStart.toString() } },
|
Activation: { $date: { $numberLong: weekStart.toString() } },
|
||||||
Expiry: { $date: { $numberLong: weekEnd.toString() } },
|
Expiry: { $date: { $numberLong: weekEnd.toString() } },
|
||||||
Reward: "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards",
|
Reward: "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards",
|
||||||
Seed: week,
|
Seed: seed,
|
||||||
Boss: boss,
|
Boss: boss,
|
||||||
Missions: [
|
Missions: [
|
||||||
{
|
{
|
||||||
|
@ -11,6 +11,7 @@ export interface IGuildClient {
|
|||||||
Members: IGuildMemberClient[];
|
Members: IGuildMemberClient[];
|
||||||
Ranks: IGuildRank[];
|
Ranks: IGuildRank[];
|
||||||
Tier: number;
|
Tier: number;
|
||||||
|
Emblem?: boolean;
|
||||||
Vault: IGuildVault;
|
Vault: IGuildVault;
|
||||||
ActiveDojoColorResearch: string;
|
ActiveDojoColorResearch: string;
|
||||||
Class: number;
|
Class: number;
|
||||||
|
49
static/fixed_responses/allIncarnonList.json
Normal file
49
static/fixed_responses/allIncarnonList.json
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
[
|
||||||
|
"/Lotus/Weapons/ClanTech/Bio/BioWeapon",
|
||||||
|
"/Lotus/Weapons/ClanTech/Energy/EnergyRifle",
|
||||||
|
"/Lotus/Weapons/Corpus/Pistols/CorpusMinigun/CorpusMinigun",
|
||||||
|
"/Lotus/Weapons/Corpus/Pistols/CrpHandRL/CorpusHandRocketLauncher",
|
||||||
|
"/Lotus/Weapons/Grineer/LongGuns/GrineerSawbladeGun/SawBladeGun",
|
||||||
|
"/Lotus/Weapons/Grineer/Melee/GrineerTylAxeAndBoar/RegorAxeShield",
|
||||||
|
"/Lotus/Weapons/Grineer/Pistols/HeatGun/GrnHeatGun",
|
||||||
|
"/Lotus/Weapons/Infested/Pistols/InfVomitGun/InfVomitGunWep",
|
||||||
|
"/Lotus/Weapons/Syndicates/CephalonSuda/Pistols/CSDroidArray",
|
||||||
|
"/Lotus/Weapons/Tenno/Bows/HuntingBow",
|
||||||
|
"/Lotus/Weapons/Tenno/Bows/StalkerBow",
|
||||||
|
"/Lotus/Weapons/Tenno/LongGuns/TnoLeverAction/TnoLeverActionRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Axe/DualInfestedAxesWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Dagger/CeramicDagger",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Fist/Fist",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Hammer/IceHammer/IceHammer",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/LongSword/LongSword",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Maces/PaladinMace/PaladinMaceWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Scythe/StalkerScytheWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Scythe/ParisScythe/ParisScythe",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Staff/Staff",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Swords/CutlassAndPoignard/TennoCutlass",
|
||||||
|
"/Lotus/Weapons/Tenno/Melee/Swords/TennoSai/TennoSais",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/AutoPistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/BurstPistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/HandShotGun",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/HeavyPistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/Pistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistol/RevolverPistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Pistols/ConclaveLeverPistol/ConclaveLeverPistol",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/BoltoRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/BurstRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/HeavyRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/Rifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/SemiAutoRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Rifle/TennoAR",
|
||||||
|
"/Lotus/Weapons/Tenno/Shotgun/FullAutoShotgun",
|
||||||
|
"/Lotus/Weapons/Tenno/Shotgun/Shotgun",
|
||||||
|
"/Lotus/Weapons/Tenno/ThrowingWeapons/Kunai",
|
||||||
|
"/Lotus/Weapons/Tenno/ThrowingWeapons/StalkerKunai",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/LongGuns/PumpShotgun/ZarimanPumpShotgun",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/LongGuns/SemiAutoRifle/ZarimanSemiAutoRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Melee/Dagger/ZarimanDaggerWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Melee/Tonfas/ZarimanTonfaWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Pistols/HeavyPistol/ZarimanHeavyPistol",
|
||||||
|
"/Lotus/Weapons/Thanotech/EntFistIncarnon/EntFistIncarnon",
|
||||||
|
"/Lotus/Weapons/Thanotech/EntratiWristGun/EntratiWristGunWeapon"
|
||||||
|
]
|
@ -401,6 +401,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="card mb-3" style="height: 400px;">
|
||||||
|
<h5 class="card-header" data-loc="inventory_evolutionProgress"></h5>
|
||||||
|
<div class="card-body overflow-auto">
|
||||||
|
<form class="input-group mb-3" onsubmit="doAcquireEvolution();return false;">
|
||||||
|
<input class="form-control" id="acquire-type-EvolutionProgress" list="datalist-EvolutionProgress" />
|
||||||
|
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
|
||||||
|
</form>
|
||||||
|
<table class="table table-hover w-100">
|
||||||
|
<tbody id="EvolutionProgress-list"></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<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">
|
||||||
@ -411,6 +427,7 @@
|
|||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
|
<button class="btn btn-primary" onclick="addMissingEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
|
<button class="btn btn-primary" onclick="addMissingEquipment(['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
<button class="btn btn-primary" onclick="addMissingEquipment(['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
||||||
|
<button class="btn btn-primary" onclick="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">
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
|
<button class="btn btn-success" onclick="maxRankAllEquipment(['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
|
||||||
@ -419,6 +436,7 @@
|
|||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
|
<button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
|
<button class="btn btn-success" onclick="maxRankAllEquipment(['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
||||||
|
<button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -733,6 +751,7 @@
|
|||||||
</datalist>
|
</datalist>
|
||||||
<datalist id="datalist-archonCrystalUpgrades"></datalist>
|
<datalist id="datalist-archonCrystalUpgrades"></datalist>
|
||||||
<datalist id="datalist-OperatorAmps"></datalist>
|
<datalist id="datalist-OperatorAmps"></datalist>
|
||||||
|
<datalist id="datalist-EvolutionProgress"></datalist>
|
||||||
<datalist id="datalist-ModularParts"></datalist>
|
<datalist id="datalist-ModularParts"></datalist>
|
||||||
<datalist id="datalist-ModularParts-HB_DECK"></datalist>
|
<datalist id="datalist-ModularParts-HB_DECK"></datalist>
|
||||||
<datalist id="datalist-ModularParts-HB_ENGINE"></datalist>
|
<datalist id="datalist-ModularParts-HB_ENGINE"></datalist>
|
||||||
|
@ -183,6 +183,16 @@ const webUiModularWeapons = [
|
|||||||
"/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit"
|
"/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const permanentEvolutionWeapons = new Set([
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/LongGuns/PumpShotgun/ZarimanPumpShotgun",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/LongGuns/SemiAutoRifle/ZarimanSemiAutoRifle",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Melee/Dagger/ZarimanDaggerWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Melee/Tonfas/ZarimanTonfaWeapon",
|
||||||
|
"/Lotus/Weapons/Tenno/Zariman/Pistols/HeavyPistol/ZarimanHeavyPistol",
|
||||||
|
"/Lotus/Weapons/Thanotech/EntFistIncarnon/EntFistIncarnon",
|
||||||
|
"/Lotus/Weapons/Thanotech/EntratiWristGun/EntratiWristGunWeapon"
|
||||||
|
]);
|
||||||
|
|
||||||
let uniqueLevelCaps = {};
|
let uniqueLevelCaps = {};
|
||||||
function fetchItemList() {
|
function fetchItemList() {
|
||||||
window.itemListPromise = new Promise(resolve => {
|
window.itemListPromise = new Promise(resolve => {
|
||||||
@ -563,6 +573,82 @@ function updateInventory() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById("EvolutionProgress-list").innerHTML = "";
|
||||||
|
data.EvolutionProgress.forEach(item => {
|
||||||
|
const datalist = document.getElementById("datalist-EvolutionProgress");
|
||||||
|
const optionToRemove = datalist.querySelector(`option[data-key="${item.ItemType}"]`);
|
||||||
|
if (optionToRemove) {
|
||||||
|
datalist.removeChild(optionToRemove);
|
||||||
|
}
|
||||||
|
const tr = document.createElement("tr");
|
||||||
|
tr.setAttribute("data-item-type", item.ItemType);
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
|
||||||
|
if (item.Rank != null) {
|
||||||
|
td.textContent += " | " + loc("code_rank") + ": [" + item.Rank + "/5]";
|
||||||
|
}
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
const td = document.createElement("td");
|
||||||
|
td.classList = "text-end text-nowrap";
|
||||||
|
if (item.Rank < 5) {
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.onclick = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
setEvolutionProgress([{ ItemType: item.ItemType, Rank: 5 }]);
|
||||||
|
};
|
||||||
|
a.title = loc("code_maxRank");
|
||||||
|
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
|
||||||
|
|
||||||
|
td.appendChild(a);
|
||||||
|
}
|
||||||
|
if ((permanentEvolutionWeapons.has(item.ItemType) && item.Rank > 0) || item.Rank > 1) {
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.onclick = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank - 1 }]);
|
||||||
|
};
|
||||||
|
a.title = loc("code_rankDown");
|
||||||
|
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`;
|
||||||
|
|
||||||
|
td.appendChild(a);
|
||||||
|
}
|
||||||
|
if (item.Rank < 5) {
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.onclick = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
setEvolutionProgress([{ ItemType: item.ItemType, Rank: item.Rank + 1 }]);
|
||||||
|
};
|
||||||
|
a.title = loc("code_rankUp");
|
||||||
|
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"/></svg>`;
|
||||||
|
|
||||||
|
td.appendChild(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("EvolutionProgress-list").appendChild(tr);
|
||||||
|
});
|
||||||
|
|
||||||
|
const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
|
||||||
|
const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
|
||||||
|
const giveAllQEvolutionProgress = document.querySelector(
|
||||||
|
'button[onclick*="addMissingEvolutionProgress()"]'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (datalistEvolutionProgress.length === 0) {
|
||||||
|
formEvolutionProgress.classList.add("disabled");
|
||||||
|
formEvolutionProgress.querySelector("input").disabled = true;
|
||||||
|
formEvolutionProgress.querySelector("button").disabled = true;
|
||||||
|
giveAllQEvolutionProgress.disabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Populate quests route
|
// Populate quests route
|
||||||
document.getElementById("QuestKeys-list").innerHTML = "";
|
document.getElementById("QuestKeys-list").innerHTML = "";
|
||||||
data.QuestKeys.forEach(item => {
|
data.QuestKeys.forEach(item => {
|
||||||
@ -674,18 +760,18 @@ function updateInventory() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const datalistQuestKeys = document.querySelectorAll("#datalist-QuestKeys option");
|
const datalistQuestKeys = document.querySelectorAll("#datalist-QuestKeys option");
|
||||||
const form = document.querySelector("form[onsubmit*=\"doAcquireEquipment('QuestKeys')\"]");
|
const formQuestKeys = document.querySelector("form[onsubmit*=\"doAcquireEquipment('QuestKeys')\"]");
|
||||||
const giveAllQuestButton = document.querySelector("button[onclick*=\"doBulkQuestUpdate('giveAll')\"]");
|
const giveAllQuestButton = document.querySelector("button[onclick*=\"doBulkQuestUpdate('giveAll')\"]");
|
||||||
|
|
||||||
if (datalistQuestKeys.length === 0) {
|
if (datalistQuestKeys.length === 0) {
|
||||||
form.classList.add("disabled");
|
formQuestKeys.classList.add("disabled");
|
||||||
form.querySelector("input").disabled = true;
|
formQuestKeys.querySelector("input").disabled = true;
|
||||||
form.querySelector("button").disabled = true;
|
formQuestKeys.querySelector("button").disabled = true;
|
||||||
giveAllQuestButton.disabled = true;
|
giveAllQuestButton.disabled = true;
|
||||||
} else {
|
} else {
|
||||||
form.classList.remove("disabled");
|
formQuestKeys.classList.remove("disabled");
|
||||||
form.querySelector("input").disabled = false;
|
formQuestKeys.querySelector("input").disabled = false;
|
||||||
form.querySelector("button").disabled = false;
|
formQuestKeys.querySelector("button").disabled = false;
|
||||||
giveAllQuestButton.disabled = false;
|
giveAllQuestButton.disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1080,6 +1166,16 @@ function doAcquireModularEquipment(category, WeaponType) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function doAcquireEvolution() {
|
||||||
|
const uniqueName = getKey(document.getElementById("acquire-type-EvolutionProgress"));
|
||||||
|
if (!uniqueName) {
|
||||||
|
$("#acquire-type-EvolutionProgress").addClass("is-invalid").focus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setEvolutionProgress([{ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 }]);
|
||||||
|
}
|
||||||
|
|
||||||
$("input[list]").on("input", function () {
|
$("input[list]").on("input", function () {
|
||||||
$(this).removeClass("is-invalid");
|
$(this).removeClass("is-invalid");
|
||||||
});
|
});
|
||||||
@ -1117,6 +1213,40 @@ function addMissingEquipment(categories) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addMissingEvolutionProgress() {
|
||||||
|
const requests = [];
|
||||||
|
document.querySelectorAll("#datalist-EvolutionProgress option").forEach(elm => {
|
||||||
|
const uniqueName = elm.getAttribute("data-key");
|
||||||
|
requests.push({ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 });
|
||||||
|
});
|
||||||
|
if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
|
||||||
|
setEvolutionProgress(requests);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function maxRankAllEvolutions() {
|
||||||
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
|
|
||||||
|
req.done(data => {
|
||||||
|
const requests = [];
|
||||||
|
|
||||||
|
data.EvolutionProgress.forEach(item => {
|
||||||
|
if (item.Rank < 5) {
|
||||||
|
requests.push({
|
||||||
|
ItemType: item.ItemType,
|
||||||
|
Rank: 5
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (Object.keys(requests).length > 0) {
|
||||||
|
return setEvolutionProgress(requests);
|
||||||
|
}
|
||||||
|
|
||||||
|
toast(loc("code_noEquipmentToRankUp"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function maxRankAllEquipment(categories) {
|
function maxRankAllEquipment(categories) {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
|
|
||||||
@ -1304,6 +1434,19 @@ function maturePet(oid, revert) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setEvolutionProgress(requests) {
|
||||||
|
revalidateAuthz(() => {
|
||||||
|
const req = $.post({
|
||||||
|
url: "/custom/setEvolutionProgress?" + window.authz,
|
||||||
|
contentType: "application/json",
|
||||||
|
data: JSON.stringify(requests)
|
||||||
|
});
|
||||||
|
req.done(() => {
|
||||||
|
updateInventory();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function doAcquireMiscItems() {
|
function doAcquireMiscItems() {
|
||||||
const uniqueName = getKey(document.getElementById("miscitem-type"));
|
const uniqueName = getKey(document.getElementById("miscitem-type"));
|
||||||
if (!uniqueName) {
|
if (!uniqueName) {
|
||||||
|
@ -34,6 +34,8 @@ dict = {
|
|||||||
code_rerollsNumber: `Anzahl der Umrollversuche`,
|
code_rerollsNumber: `Anzahl der Umrollversuche`,
|
||||||
code_viewStats: `Statistiken anzeigen`,
|
code_viewStats: `Statistiken anzeigen`,
|
||||||
code_rank: `Rang`,
|
code_rank: `Rang`,
|
||||||
|
code_rankUp: `[UNTRANSLATED] Rank up`,
|
||||||
|
code_rankDown: `[UNTRANSLATED] Rank down`,
|
||||||
code_count: `Anzahl`,
|
code_count: `Anzahl`,
|
||||||
code_focusAllUnlocked: `Alle Fokus-Schulen sind bereits freigeschaltet.`,
|
code_focusAllUnlocked: `Alle Fokus-Schulen sind bereits freigeschaltet.`,
|
||||||
code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`,
|
code_focusUnlocked: `|COUNT| neue Fokus-Schulen freigeschaltet! Ein Inventar-Update wird benötigt, damit die Änderungen im Spiel sichtbar werden. Die Sternenkarte zu besuchen, sollte der einfachste Weg sein, dies auszulösen.`,
|
||||||
@ -84,18 +86,21 @@ dict = {
|
|||||||
inventory_hoverboards: `K-Drives`,
|
inventory_hoverboards: `K-Drives`,
|
||||||
inventory_moaPets: `Moa`,
|
inventory_moaPets: `Moa`,
|
||||||
inventory_kubrowPets: `Bestien`,
|
inventory_kubrowPets: `Bestien`,
|
||||||
|
inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkAddSpaceWeapons: `Fehlende Archwing-Waffen hinzufügen`,
|
inventory_bulkAddSpaceWeapons: `Fehlende Archwing-Waffen hinzufügen`,
|
||||||
inventory_bulkAddSentinels: `Fehlende Wächter hinzufügen`,
|
inventory_bulkAddSentinels: `Fehlende Wächter hinzufügen`,
|
||||||
inventory_bulkAddSentinelWeapons: `Fehlende Wächter-Waffen hinzufügen`,
|
inventory_bulkAddSentinelWeapons: `Fehlende Wächter-Waffen hinzufügen`,
|
||||||
|
inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `Alle Archwing-Waffen auf Max. Rang`,
|
inventory_bulkRankUpSpaceWeapons: `Alle Archwing-Waffen auf Max. Rang`,
|
||||||
inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
|
inventory_bulkRankUpSentinels: `Alle Wächter auf Max. Rang`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
|
inventory_bulkRankUpSentinelWeapons: `Alle Wächter-Waffen auf Max. Rang`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
|
||||||
|
|
||||||
quests_list: `Quests`,
|
quests_list: `Quests`,
|
||||||
quests_completeAll: `Alle Quests abschließen`,
|
quests_completeAll: `Alle Quests abschließen`,
|
||||||
|
@ -33,6 +33,8 @@ dict = {
|
|||||||
code_rerollsNumber: `Number of rerolls`,
|
code_rerollsNumber: `Number of rerolls`,
|
||||||
code_viewStats: `View Stats`,
|
code_viewStats: `View Stats`,
|
||||||
code_rank: `Rank`,
|
code_rank: `Rank`,
|
||||||
|
code_rankUp: `Rank up`,
|
||||||
|
code_rankDown: `Rank down`,
|
||||||
code_count: `Count`,
|
code_count: `Count`,
|
||||||
code_focusAllUnlocked: `All focus schools are already unlocked.`,
|
code_focusAllUnlocked: `All focus schools are already unlocked.`,
|
||||||
code_focusUnlocked: `Unlocked |COUNT| new focus schools! An inventory update will be needed for the changes to be reflected in-game. Visiting the navigation should be the easiest way to trigger that.`,
|
code_focusUnlocked: `Unlocked |COUNT| new focus schools! An inventory update will be needed for the changes to be reflected in-game. Visiting the navigation should be the easiest way to trigger that.`,
|
||||||
@ -83,18 +85,21 @@ dict = {
|
|||||||
inventory_hoverboards: `K-Drives`,
|
inventory_hoverboards: `K-Drives`,
|
||||||
inventory_moaPets: `Moa`,
|
inventory_moaPets: `Moa`,
|
||||||
inventory_kubrowPets: `Beasts`,
|
inventory_kubrowPets: `Beasts`,
|
||||||
|
inventory_evolutionProgress: `Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkAddSpaceWeapons: `Add Missing Archwing Weapons`,
|
inventory_bulkAddSpaceWeapons: `Add Missing Archwing Weapons`,
|
||||||
inventory_bulkAddSentinels: `Add Missing Sentinels`,
|
inventory_bulkAddSentinels: `Add Missing Sentinels`,
|
||||||
inventory_bulkAddSentinelWeapons: `Add Missing Sentinel Weapons`,
|
inventory_bulkAddSentinelWeapons: `Add Missing Sentinel Weapons`,
|
||||||
|
inventory_bulkAddEvolutionProgress: `Add Missing Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `Max Rank All Archwing Weapons`,
|
inventory_bulkRankUpSpaceWeapons: `Max Rank All Archwing Weapons`,
|
||||||
inventory_bulkRankUpSentinels: `Max Rank All Sentinels`,
|
inventory_bulkRankUpSentinels: `Max Rank All Sentinels`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `Max Rank All Sentinel Weapons`,
|
inventory_bulkRankUpSentinelWeapons: `Max Rank All Sentinel Weapons`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `Max Rank All Incarnon Evolution Progress`,
|
||||||
|
|
||||||
quests_list: `Quests`,
|
quests_list: `Quests`,
|
||||||
quests_completeAll: `Complete All Quests`,
|
quests_completeAll: `Complete All Quests`,
|
||||||
|
@ -34,6 +34,8 @@ dict = {
|
|||||||
code_rerollsNumber: `Cantidad de reintentos`,
|
code_rerollsNumber: `Cantidad de reintentos`,
|
||||||
code_viewStats: `Ver estadísticas`,
|
code_viewStats: `Ver estadísticas`,
|
||||||
code_rank: `Rango`,
|
code_rank: `Rango`,
|
||||||
|
code_rankUp: `[UNTRANSLATED] Rank up`,
|
||||||
|
code_rankDown: `[UNTRANSLATED] Rank down`,
|
||||||
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.`,
|
||||||
@ -84,18 +86,21 @@ dict = {
|
|||||||
inventory_hoverboards: `K-Drives`,
|
inventory_hoverboards: `K-Drives`,
|
||||||
inventory_moaPets: `Moa`,
|
inventory_moaPets: `Moa`,
|
||||||
inventory_kubrowPets: `Bestias`,
|
inventory_kubrowPets: `Bestias`,
|
||||||
|
inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
|
||||||
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_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `Maximizar rango de todas las armas Archwing`,
|
inventory_bulkRankUpSpaceWeapons: `Maximizar rango de todas las armas Archwing`,
|
||||||
inventory_bulkRankUpSentinels: `Maximizar rango de todos los centinelas`,
|
inventory_bulkRankUpSentinels: `Maximizar rango de todos los centinelas`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `Maximizar rango de todas las armas de centinela`,
|
inventory_bulkRankUpSentinelWeapons: `Maximizar rango de todas las armas de centinela`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
|
||||||
|
|
||||||
quests_list: `Misiones`,
|
quests_list: `Misiones`,
|
||||||
quests_completeAll: `Completar todas las misiones`,
|
quests_completeAll: `Completar todas las misiones`,
|
||||||
|
@ -34,6 +34,8 @@ dict = {
|
|||||||
code_rerollsNumber: `Nombre de rerolls`,
|
code_rerollsNumber: `Nombre de rerolls`,
|
||||||
code_viewStats: `Voir les stats`,
|
code_viewStats: `Voir les stats`,
|
||||||
code_rank: `Rang`,
|
code_rank: `Rang`,
|
||||||
|
code_rankUp: `[UNTRANSLATED] Rank up`,
|
||||||
|
code_rankDown: `[UNTRANSLATED] Rank down`,
|
||||||
code_count: `Quantité`,
|
code_count: `Quantité`,
|
||||||
code_focusAllUnlocked: `Les écoles de Focus sont déjà déverrouillées.`,
|
code_focusAllUnlocked: `Les écoles de Focus sont déjà déverrouillées.`,
|
||||||
code_focusUnlocked: `|COUNT| écoles de Focus déverrouillées ! Synchronisation de l'inventaire nécessaire.`,
|
code_focusUnlocked: `|COUNT| écoles de Focus déverrouillées ! Synchronisation de l'inventaire nécessaire.`,
|
||||||
@ -84,18 +86,21 @@ dict = {
|
|||||||
inventory_hoverboards: `K-Drives`,
|
inventory_hoverboards: `K-Drives`,
|
||||||
inventory_moaPets: `Moa`,
|
inventory_moaPets: `Moa`,
|
||||||
inventory_kubrowPets: `Bêtes`,
|
inventory_kubrowPets: `Bêtes`,
|
||||||
|
inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
|
||||||
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`,
|
||||||
inventory_bulkAddSpaceWeapons: `Ajouter les armes d'Archwing manquantes`,
|
inventory_bulkAddSpaceWeapons: `Ajouter les armes d'Archwing manquantes`,
|
||||||
inventory_bulkAddSentinels: `Ajouter les Sentinelles manquantes`,
|
inventory_bulkAddSentinels: `Ajouter les Sentinelles manquantes`,
|
||||||
inventory_bulkAddSentinelWeapons: `Ajouter les armes de Sentinelles manquantes`,
|
inventory_bulkAddSentinelWeapons: `Ajouter les armes de Sentinelles manquantes`,
|
||||||
|
inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
|
||||||
inventory_bulkRankUpSuits: `Toutes les Warframes rang max`,
|
inventory_bulkRankUpSuits: `Toutes les Warframes rang max`,
|
||||||
inventory_bulkRankUpWeapons: `Toutes les armes rang max`,
|
inventory_bulkRankUpWeapons: `Toutes les armes rang max`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Tous les Archwings rang max`,
|
inventory_bulkRankUpSpaceSuits: `Tous les Archwings rang max`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `Toutes les armes d'Archwing rang max`,
|
inventory_bulkRankUpSpaceWeapons: `Toutes les armes d'Archwing rang max`,
|
||||||
inventory_bulkRankUpSentinels: `Toutes les Sentinelles rang max`,
|
inventory_bulkRankUpSentinels: `Toutes les Sentinelles rang max`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `Toutes les armes de Sentinelles rang max`,
|
inventory_bulkRankUpSentinelWeapons: `Toutes les armes de Sentinelles rang max`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
|
||||||
|
|
||||||
quests_list: `Quêtes`,
|
quests_list: `Quêtes`,
|
||||||
quests_completeAll: `Compléter toutes les quêtes`,
|
quests_completeAll: `Compléter toutes les quêtes`,
|
||||||
|
@ -34,6 +34,8 @@ dict = {
|
|||||||
code_rerollsNumber: `Количество циклов`,
|
code_rerollsNumber: `Количество циклов`,
|
||||||
code_viewStats: `Просмотр характеристики`,
|
code_viewStats: `Просмотр характеристики`,
|
||||||
code_rank: `Ранг`,
|
code_rank: `Ранг`,
|
||||||
|
code_rankUp: `Повысить Ранг`,
|
||||||
|
code_rankDown: `Понизить Ранг`,
|
||||||
code_count: `Количество`,
|
code_count: `Количество`,
|
||||||
code_focusAllUnlocked: `Все школы фокуса уже разблокированы.`,
|
code_focusAllUnlocked: `Все школы фокуса уже разблокированы.`,
|
||||||
code_focusUnlocked: `Разблокировано |COUNT| новых школ фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`,
|
code_focusUnlocked: `Разблокировано |COUNT| новых школ фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`,
|
||||||
@ -84,18 +86,21 @@ dict = {
|
|||||||
inventory_hoverboards: `К-Драйвы`,
|
inventory_hoverboards: `К-Драйвы`,
|
||||||
inventory_moaPets: `МОА`,
|
inventory_moaPets: `МОА`,
|
||||||
inventory_kubrowPets: `Звери`,
|
inventory_kubrowPets: `Звери`,
|
||||||
|
inventory_evolutionProgress: `Прогресс эволюции Инкарнонов`,
|
||||||
inventory_bulkAddSuits: `Добавить отсутствующие варфреймы`,
|
inventory_bulkAddSuits: `Добавить отсутствующие варфреймы`,
|
||||||
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
|
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
|
||||||
inventory_bulkAddSpaceSuits: `Добавить отсутствующие арчвинги`,
|
inventory_bulkAddSpaceSuits: `Добавить отсутствующие арчвинги`,
|
||||||
inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие арчвингов`,
|
inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие арчвингов`,
|
||||||
inventory_bulkAddSentinels: `Добавить отсутствующих стражей`,
|
inventory_bulkAddSentinels: `Добавить отсутствующих стражей`,
|
||||||
inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие стражей`,
|
inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие стражей`,
|
||||||
|
inventory_bulkAddEvolutionProgress: `Добавить отсуствующий прогресс эволюции Инкарнонов`,
|
||||||
inventory_bulkRankUpSuits: `Максимальный ранг всех варфреймов`,
|
inventory_bulkRankUpSuits: `Максимальный ранг всех варфреймов`,
|
||||||
inventory_bulkRankUpWeapons: `Максимальный ранг всего оружия`,
|
inventory_bulkRankUpWeapons: `Максимальный ранг всего оружия`,
|
||||||
inventory_bulkRankUpSpaceSuits: `Максимальный ранг всех арчвингов`,
|
inventory_bulkRankUpSpaceSuits: `Максимальный ранг всех арчвингов`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `Максимальный ранг всего оружия арчвингов`,
|
inventory_bulkRankUpSpaceWeapons: `Максимальный ранг всего оружия арчвингов`,
|
||||||
inventory_bulkRankUpSentinels: `Максимальный ранг всех стражей`,
|
inventory_bulkRankUpSentinels: `Максимальный ранг всех стражей`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `Максимальный ранг всего оружия стражей`,
|
inventory_bulkRankUpSentinelWeapons: `Максимальный ранг всего оружия стражей`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `Максимальный ранг всех эволюций Инкарнонов`,
|
||||||
|
|
||||||
quests_list: `Квесты`,
|
quests_list: `Квесты`,
|
||||||
quests_completeAll: `Завершить все квесты`,
|
quests_completeAll: `Завершить все квесты`,
|
||||||
|
@ -34,6 +34,8 @@ dict = {
|
|||||||
code_rerollsNumber: `洗卡次数`,
|
code_rerollsNumber: `洗卡次数`,
|
||||||
code_viewStats: `查看属性`,
|
code_viewStats: `查看属性`,
|
||||||
code_rank: `等级`,
|
code_rank: `等级`,
|
||||||
|
code_rankUp: `[UNTRANSLATED] Rank up`,
|
||||||
|
code_rankDown: `[UNTRANSLATED] Rank down`,
|
||||||
code_count: `数量`,
|
code_count: `数量`,
|
||||||
code_focusAllUnlocked: `所有专精学派均已解锁。`,
|
code_focusAllUnlocked: `所有专精学派均已解锁。`,
|
||||||
code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新。`,
|
code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新。`,
|
||||||
@ -84,18 +86,21 @@ dict = {
|
|||||||
inventory_hoverboards: `K式悬浮板`,
|
inventory_hoverboards: `K式悬浮板`,
|
||||||
inventory_moaPets: `恐鸟`,
|
inventory_moaPets: `恐鸟`,
|
||||||
inventory_kubrowPets: `[UNTRANSLATED] Beasts`,
|
inventory_kubrowPets: `[UNTRANSLATED] Beasts`,
|
||||||
|
inventory_evolutionProgress: `[UNTRANSLATED] Incarnon Evolution Progress`,
|
||||||
inventory_bulkAddSuits: `添加缺失战甲`,
|
inventory_bulkAddSuits: `添加缺失战甲`,
|
||||||
inventory_bulkAddWeapons: `添加缺失武器`,
|
inventory_bulkAddWeapons: `添加缺失武器`,
|
||||||
inventory_bulkAddSpaceSuits: `添加缺失Archwing`,
|
inventory_bulkAddSpaceSuits: `添加缺失Archwing`,
|
||||||
inventory_bulkAddSpaceWeapons: `添加缺失Archwing武器`,
|
inventory_bulkAddSpaceWeapons: `添加缺失Archwing武器`,
|
||||||
inventory_bulkAddSentinels: `添加缺失守护`,
|
inventory_bulkAddSentinels: `添加缺失守护`,
|
||||||
inventory_bulkAddSentinelWeapons: `添加缺失守护武器`,
|
inventory_bulkAddSentinelWeapons: `添加缺失守护武器`,
|
||||||
|
inventory_bulkAddEvolutionProgress: `[UNTRANSLATED] Add Missing Incarnon Evolution Progress`,
|
||||||
inventory_bulkRankUpSuits: `所有战甲升满级`,
|
inventory_bulkRankUpSuits: `所有战甲升满级`,
|
||||||
inventory_bulkRankUpWeapons: `所有武器升满级`,
|
inventory_bulkRankUpWeapons: `所有武器升满级`,
|
||||||
inventory_bulkRankUpSpaceSuits: `所有Archwing升满级`,
|
inventory_bulkRankUpSpaceSuits: `所有Archwing升满级`,
|
||||||
inventory_bulkRankUpSpaceWeapons: `所有Archwing武器升满级`,
|
inventory_bulkRankUpSpaceWeapons: `所有Archwing武器升满级`,
|
||||||
inventory_bulkRankUpSentinels: `所有守护升满级`,
|
inventory_bulkRankUpSentinels: `所有守护升满级`,
|
||||||
inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`,
|
inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`,
|
||||||
|
inventory_bulkRankUpEvolutionProgress: `[UNTRANSLATED] Max Rank All Incarnon Evolution Progress`,
|
||||||
|
|
||||||
quests_list: `任务`,
|
quests_list: `任务`,
|
||||||
quests_completeAll: `完成所有任务`,
|
quests_completeAll: `完成所有任务`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user