Compare commits

...

6 Commits

Author SHA1 Message Date
Jānis
225cd83cea
change database name to not conflict with latest version 2024-12-09 20:06:11 +02:00
Jānis
e824087034 w.i.p mods 2024-09-07 23:32:59 +03:00
Jānis
fd2027b071 fix lint 2024-09-06 02:16:27 +03:00
Jānis
0af98bc6c2 feat: mission rewards & more
fixes mission rewards, item xp, tutorial
2024-09-06 02:02:26 +03:00
Jānis
3403d496b4 fix lint 2024-09-03 20:21:09 +03:00
Jānis
58b1cfc30f init 2024-09-03 17:23:42 +03:00
44 changed files with 1226 additions and 1209 deletions

View File

@ -1,5 +1,5 @@
{ {
"mongodbUrl": "mongodb://127.0.0.1:27017/openWF", "mongodbUrl": "mongodb://127.0.0.1:27017/openWF_2013",
"logger": { "logger": {
"files": true, "files": true,
"level": "trace", "level": "trace",

View File

@ -15,12 +15,32 @@ import { statsRouter } from "@/src/routes/stats";
import { webuiRouter } from "@/src/routes/webui"; import { webuiRouter } from "@/src/routes/webui";
import { connectDatabase } from "@/src/services/mongoService"; import { connectDatabase } from "@/src/services/mongoService";
import { registerLogFileCreationListener } from "@/src/utils/logger"; import { registerLogFileCreationListener } from "@/src/utils/logger";
import * as zlib from "zlib";
void registerLogFileCreationListener(); void registerLogFileCreationListener();
void connectDatabase(); void connectDatabase();
const app = express(); const app = express();
app.use(function (req, _res, next) {
const buffer: Buffer[] = [];
req.on("data", function (chunk: Buffer) {
if (chunk !== undefined && chunk.length > 2 && chunk[0] == 0x1f && chunk[1] == 0x8b) {
buffer.push(Buffer.from(chunk));
}
});
req.on("end", function () {
zlib.gunzip(Buffer.concat(buffer), function (_err, dezipped) {
if (typeof dezipped != "undefined") {
req.body = dezipped.toString("utf-8");
}
next();
});
});
});
app.use(bodyParser.raw()); app.use(bodyParser.raw());
app.use(express.json()); app.use(express.json());
app.use(bodyParser.text()); app.use(bodyParser.text());

View File

@ -21,11 +21,11 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const pendingRecipe = inventory.PendingRecipes.find( const pendingRecipe = inventory.PendingRecipes.find(
recipe => recipe._id?.toString() === claimCompletedRecipeRequest.RecipeIds[0].$oid recipe => recipe._id?.toString() === claimCompletedRecipeRequest.RecipeIds[0].$id
); );
if (!pendingRecipe) { if (!pendingRecipe) {
logger.error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`); logger.error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$id}`);
throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`); throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$id}`);
} }
//check recipe is indeed ready to be completed //check recipe is indeed ready to be completed

View File

@ -16,8 +16,6 @@ export const getCreditsController: RequestHandler = async (req, res) => {
if (config.infiniteResources) { if (config.infiniteResources) {
res.json({ res.json({
RegularCredits: 999999999, RegularCredits: 999999999,
TradesRemaining: 999999999,
PremiumCreditsFree: 999999999,
PremiumCredits: 999999999 PremiumCredits: 999999999
}); });
return; return;
@ -26,8 +24,6 @@ export const getCreditsController: RequestHandler = async (req, res) => {
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
res.json({ res.json({
RegularCredits: inventory.RegularCredits, RegularCredits: inventory.RegularCredits,
TradesRemaining: inventory.TradesRemaining,
PremiumCreditsFree: inventory.PremiumCreditsFree,
PremiumCredits: inventory.PremiumCredits PremiumCredits: inventory.PremiumCredits
}); });
}; };

View File

@ -1,73 +1,6 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import { Guild } from "@/src/models/guildModel";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { toOid } from "@/src/helpers/inventoryHelpers";
// eslint-disable-next-line @typescript-eslint/no-misused-promises const getGuildController: RequestHandler = (_, res) => {
const getGuildController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await Inventory.findOne({ accountOwnerId: accountId });
if (!inventory) {
res.status(400).json({ error: "inventory was undefined" });
return;
}
if (inventory.GuildId) {
const guild = await Guild.findOne({ _id: inventory.GuildId });
if (guild) {
res.json({
_id: toOid(guild._id),
Name: guild.Name,
Members: [
{
_id: { $oid: req.query.accountId },
Rank: 0,
Status: 0
}
],
Ranks: [
{
Name: "/Lotus/Language/Game/Rank_Creator",
Permissions: 16351
},
{
Name: "/Lotus/Language/Game/Rank_Warlord",
Permissions: 14303
},
{
Name: "/Lotus/Language/Game/Rank_General",
Permissions: 4318
},
{
Name: "/Lotus/Language/Game/Rank_Officer",
Permissions: 4314
},
{
Name: "/Lotus/Language/Game/Rank_Leader",
Permissions: 4106
},
{
Name: "/Lotus/Language/Game/Rank_Sage",
Permissions: 4304
},
{
Name: "/Lotus/Language/Game/Rank_Soldier",
Permissions: 4098
},
{
Name: "/Lotus/Language/Game/Rank_Initiate",
Permissions: 4096
},
{
Name: "/Lotus/Language/Game/Rank_Utility",
Permissions: 4096
}
],
Tier: 1
});
return;
}
}
res.json({}); res.json({});
}; };

View File

@ -28,7 +28,7 @@ export const getGuildDojoController: RequestHandler = async (req, res) => {
} }
const dojo: IDojoClient = { const dojo: IDojoClient = {
_id: { $oid: guildId }, _id: { $id: guildId },
Name: guild.Name, Name: guild.Name,
Tier: 1, Tier: 1,
FixedContributions: true, FixedContributions: true,

View File

@ -0,0 +1,14 @@
import { getAccountIdForRequest } from "@/src/services/loginService";
import { RequestHandler } from "express";
import { getInventory } from "@/src/services/inventoryService";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const giveStartingGearController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
inventory.ReceivedStartingGear = true;
console.log(req.query);
await inventory.save();
res.status(200);
};

View File

@ -12,7 +12,7 @@ const hostSessionController: RequestHandler = async (req, res) => {
const session = createNewSession(hostSessionRequest, accountId); const session = createNewSession(hostSessionRequest, accountId);
logger.debug(`New Session Created`, { session }); logger.debug(`New Session Created`, { session });
res.json({ sessionId: { $oid: session.sessionId }, rewardSeed: 99999999 }); res.json({ sessionId: { $id: session.sessionId }, rewardSeed: 99999999 });
}; };
export { hostSessionController }; export { hostSessionController };

View File

@ -12,7 +12,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
// shard installation // shard installation
const request = getJSONfromString(String(req.body)) as IShardInstallRequest; const request = getJSONfromString(String(req.body)) as IShardInstallRequest;
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!; const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$id)!;
if (!suit.ArchonCrystalUpgrades || suit.ArchonCrystalUpgrades.length != 5) { if (!suit.ArchonCrystalUpgrades || suit.ArchonCrystalUpgrades.length != 5) {
suit.ArchonCrystalUpgrades = [{}, {}, {}, {}, {}]; suit.ArchonCrystalUpgrades = [{}, {}, {}, {}, {}];
} }

View File

@ -3,12 +3,8 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { toInventoryResponse } from "@/src/helpers/inventoryHelpers";
import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import { config } from "@/src/services/configService"; import { config } from "@/src/services/configService";
import allDialogue from "@/static/fixed_responses/allDialogue.json"; import { IInventoryDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
import allMissions from "@/static/fixed_responses/allMissions.json"; //import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
import { IInventoryDatabase, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
import { IPolarity, ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { ExportCustoms, ExportFlavour, ExportKeys, ExportResources } from "warframe-public-export-plus";
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
const inventoryController: RequestHandler = async (request, response) => { const inventoryController: RequestHandler = async (request, response) => {
@ -20,9 +16,7 @@ const inventoryController: RequestHandler = async (request, response) => {
return; return;
} }
const inventory = await Inventory.findOne({ accountOwnerId: accountId }) const inventory = await Inventory.findOne({ accountOwnerId: accountId });
.populate<{ LoadOutPresets: ILoadoutDatabase }>("LoadOutPresets")
.populate<{ Ships: IShipInventory }>("Ships", "-ShipInteriorColors");
if (!inventory) { if (!inventory) {
response.status(400).json({ error: "inventory was undefined" }); response.status(400).json({ error: "inventory was undefined" });
@ -37,83 +31,37 @@ const inventoryController: RequestHandler = async (request, response) => {
if (config.infiniteResources) { if (config.infiniteResources) {
inventoryResponse.RegularCredits = 999999999; inventoryResponse.RegularCredits = 999999999;
inventoryResponse.TradesRemaining = 999999999;
inventoryResponse.PremiumCreditsFree = 999999999;
inventoryResponse.PremiumCredits = 999999999; inventoryResponse.PremiumCredits = 999999999;
} }
if (config.skipAllDialogue) { // if (config.unlockAllMissions) {
inventoryResponse.TauntHistory = [ // //inventoryResponse.Missions = allMissions;
{ // //inventoryResponse.NodeIntrosCompleted.push("TeshinHardModeUnlocked");
node: "TreasureTutorial", // }
state: "TS_COMPLETED"
}
];
for (const str of allDialogue) {
addString(inventoryResponse.NodeIntrosCompleted, str);
}
}
if (config.unlockAllMissions) { // if (config.unlockAllMissions) {
inventoryResponse.Missions = allMissions; // //inventoryResponse.Missions = allMissions;
addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked"); // //addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked");
} // }
if (config.unlockAllQuests) { // if (config.unlockAllFlavourItems) {
for (const [k, v] of Object.entries(ExportKeys)) { // inventoryResponse.FlavourItems = [];
if ("chainStages" in v) { // for (const uniqueName in ExportFlavour) {
if (!inventoryResponse.QuestKeys.find(quest => quest.ItemType == k)) { // inventoryResponse.FlavourItems.push({ ItemType: uniqueName });
inventoryResponse.QuestKeys.push({ ItemType: k }); // }
} // }
}
}
}
if (config.completeAllQuests) {
for (const quest of inventoryResponse.QuestKeys) {
quest.Completed = true;
quest.Progress = [
{
c: 0,
i: false,
m: false,
b: []
}
];
}
inventoryResponse.ArchwingEnabled = true; // if (config.unlockAllSkins) {
// inventoryResponse.WeaponSkins = [];
// Skip "Watch The Maker" // for (const uniqueName in ExportCustoms) {
addString(inventoryResponse.NodeIntrosCompleted, "/Lotus/Levels/Cinematics/NewWarIntro/NewWarStageTwo.level"); // inventoryResponse.WeaponSkins.push({
} // ItemId: {
// $id: "000000000000000000000000"
if (config.unlockAllShipDecorations) { // },
inventoryResponse.ShipDecorations = []; // ItemType: uniqueName
for (const [uniqueName, item] of Object.entries(ExportResources)) { // });
if (item.productCategory == "ShipDecorations") { // }
inventoryResponse.ShipDecorations.push({ ItemType: uniqueName, ItemCount: 1 }); // }
}
}
}
if (config.unlockAllFlavourItems) {
inventoryResponse.FlavourItems = [];
for (const uniqueName in ExportFlavour) {
inventoryResponse.FlavourItems.push({ ItemType: uniqueName });
}
}
if (config.unlockAllSkins) {
inventoryResponse.WeaponSkins = [];
for (const uniqueName in ExportCustoms) {
inventoryResponse.WeaponSkins.push({
ItemId: {
$oid: "000000000000000000000000"
},
ItemType: uniqueName
});
}
}
if (typeof config.spoofMasteryRank === "number" && config.spoofMasteryRank >= 0) { if (typeof config.spoofMasteryRank === "number" && config.spoofMasteryRank >= 0) {
inventoryResponse.PlayerLevel = config.spoofMasteryRank; inventoryResponse.PlayerLevel = config.spoofMasteryRank;
@ -130,34 +78,18 @@ const inventoryController: RequestHandler = async (request, response) => {
} }
} }
if (config.universalPolarityEverywhere) {
const Polarity: IPolarity[] = [];
for (let i = 0; i != 10; ++i) {
Polarity.push({
Slot: i,
Value: ArtifactPolarity.Any
});
}
for (const key of equipmentKeys) {
if (key in inventoryResponse) {
for (const equipment of inventoryResponse[key]) {
equipment.Polarity = Polarity;
}
}
}
}
// Fix for #380 // Fix for #380
inventoryResponse.NextRefill = { $date: { $numberLong: "9999999999999" } }; inventoryResponse.NextRefill = { $date: { $numberLong: "9999999999999" } };
response.json(inventoryResponse); response.json(inventoryResponse);
}; };
/*
const addString = (arr: string[], str: string): void => { const addString = (arr: string[], str: string): void => {
if (!arr.find(x => x == str)) { if (!arr.find(x => x == str)) {
arr.push(str); arr.push(str);
} }
}; };*/
const getExpRequiredForMr = (rank: number): number => { const getExpRequiredForMr = (rank: number): number => {
if (rank <= 30) { if (rank <= 30) {

View File

@ -7,7 +7,7 @@ const joinSessionController: RequestHandler = (_req, res) => {
logger.debug(`JoinSession Request`, { reqBody }); logger.debug(`JoinSession Request`, { reqBody });
const req = JSON.parse(String(_req.body)); const req = JSON.parse(String(_req.body));
const session = getSessionByID(req.sessionIds[0] as string); const session = getSessionByID(req.sessionIds[0] as string);
res.json({ rewardSeed: session?.rewardSeed, sessionId: { $oid: session?.sessionId } }); res.json({ rewardSeed: session?.rewardSeed, sessionId: { $id: session?.sessionId } });
}; };
export { joinSessionController }; export { joinSessionController };

View File

@ -8,7 +8,6 @@ import { toLoginRequest } from "@/src/helpers/loginHelpers";
import { Account } from "@/src/models/loginModel"; import { Account } from "@/src/models/loginModel";
import { createAccount, isCorrectPassword } from "@/src/services/loginService"; import { createAccount, isCorrectPassword } from "@/src/services/loginService";
import { ILoginResponse } from "@/src/types/loginTypes"; import { ILoginResponse } from "@/src/types/loginTypes";
import { DTLS, groups, HUB, platformCDNs } from "@/static/fixed_responses/login_static";
import { logger } from "@/src/utils/logger"; import { logger } from "@/src/utils/logger";
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
@ -17,7 +16,7 @@ const loginController: RequestHandler = async (request, response) => {
const body = JSON.parse(request.body); // parse octet stream of json data to json object const body = JSON.parse(request.body); // parse octet stream of json data to json object
const loginRequest = toLoginRequest(body); const loginRequest = toLoginRequest(body);
const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } const account = await Account.findOne({ email: loginRequest.email });
const nonce = Math.round(Math.random() * Number.MAX_SAFE_INTEGER); const nonce = Math.round(Math.random() * Number.MAX_SAFE_INTEGER);
if (!account && config.autoCreateAccount && loginRequest.ClientType != "webui") { if (!account && config.autoCreateAccount && loginRequest.ClientType != "webui") {
@ -26,12 +25,6 @@ const loginController: RequestHandler = async (request, response) => {
email: loginRequest.email, email: loginRequest.email,
password: loginRequest.password, password: loginRequest.password,
DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")), DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")),
CountryCode: loginRequest.lang.toUpperCase(),
ClientType: loginRequest.ClientType,
CrossPlatformAllowed: true,
ForceLogoutVersion: 0,
ConsentNeeded: false,
TrackedSettings: [],
Nonce: nonce Nonce: nonce
}); });
logger.debug("created new account"); logger.debug("created new account");
@ -39,14 +32,9 @@ const loginController: RequestHandler = async (request, response) => {
const { email, password, ...databaseAccount } = newAccount; const { email, password, ...databaseAccount } = newAccount;
const newLoginResponse: ILoginResponse = { const newLoginResponse: ILoginResponse = {
...databaseAccount, ...databaseAccount,
Groups: groups,
platformCDNs: platformCDNs,
NRS: [config.myAddress],
DTLS: DTLS,
IRC: config.myIrcAddresses ?? [config.myAddress],
HUB: HUB,
BuildLabel: buildConfig.buildLabel, BuildLabel: buildConfig.buildLabel,
MatchmakingBuildId: buildConfig.matchmakingBuildId NatHash: "0",
SteamId: "0"
}; };
response.json(newLoginResponse); response.json(newLoginResponse);
@ -67,22 +55,15 @@ const loginController: RequestHandler = async (request, response) => {
if (account.Nonce == 0 || loginRequest.ClientType != "webui") { if (account.Nonce == 0 || loginRequest.ClientType != "webui") {
account.Nonce = nonce; account.Nonce = nonce;
} }
if (loginRequest.ClientType != "webui") {
account.CountryCode = loginRequest.lang.toUpperCase();
}
await account.save(); await account.save();
const { email, password, ...databaseAccount } = account.toJSON(); const { email, password, ...databaseAccount } = account.toJSON();
const newLoginResponse: ILoginResponse = { const newLoginResponse: ILoginResponse = {
...databaseAccount, ...databaseAccount,
Groups: groups,
platformCDNs: platformCDNs,
NRS: [config.myAddress],
DTLS: DTLS,
IRC: config.myIrcAddresses ?? [config.myAddress],
HUB: HUB,
BuildLabel: buildConfig.buildLabel, BuildLabel: buildConfig.buildLabel,
MatchmakingBuildId: buildConfig.matchmakingBuildId NatHash: "0",
SteamId: "0"
}; };
response.json(newLoginResponse); response.json(newLoginResponse);

View File

@ -57,8 +57,10 @@ const missionInventoryUpdateController: RequestHandler = async (req, res): Promi
const { InventoryChanges, MissionRewards } = getRewards(lootInventory); const { InventoryChanges, MissionRewards } = getRewards(lootInventory);
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits, FusionPoints } = const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits } = combineRewardAndLootInventory(
combineRewardAndLootInventory(InventoryChanges, lootInventory); InventoryChanges,
lootInventory
);
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const InventoryJson = JSON.stringify(await missionInventoryUpdate(combinedInventoryChanges, accountId)); const InventoryJson = JSON.stringify(await missionInventoryUpdate(combinedInventoryChanges, accountId));
@ -68,8 +70,7 @@ const missionInventoryUpdateController: RequestHandler = async (req, res): Promi
InventoryChanges, InventoryChanges,
TotalCredits, TotalCredits,
CreditsBonus, CreditsBonus,
MissionCredits, MissionCredits
FusionPoints
}); });
} catch (err) { } catch (err) {
console.error("Error parsing JSON data:", err); console.error("Error parsing JSON data:", err);

View File

@ -17,7 +17,7 @@ export const startDojoRecipeController: RequestHandler = async (req, res) => {
_id: new Types.ObjectId(), _id: new Types.ObjectId(),
pf: request.PlacedComponent.pf, pf: request.PlacedComponent.pf,
ppf: request.PlacedComponent.ppf, ppf: request.PlacedComponent.ppf,
pi: new Types.ObjectId(request.PlacedComponent.pi!.$oid), pi: new Types.ObjectId(request.PlacedComponent.pi!.$id),
op: request.PlacedComponent.op, op: request.PlacedComponent.op,
pp: request.PlacedComponent.pp, pp: request.PlacedComponent.pp,
CompletionTime: new Date(Date.now()) // TOOD: Omit this field & handle the "Collecting Materials" state. CompletionTime: new Date(Date.now()) // TOOD: Omit this field & handle the "Collecting Materials" state.

View File

@ -2,21 +2,18 @@ import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory } from "@/src/services/inventoryService"; import { getInventory } from "@/src/services/inventoryService";
import { ITaunt } from "@/src/types/inventoryTypes/inventoryTypes"; import { ITaunt } from "@/src/types/inventoryTypes/inventoryTypes";
import { logger } from "@/src/utils/logger";
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
export const tauntHistoryController: RequestHandler = async (req, res) => { export const tauntHistoryController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
if (req.body !== undefined) {
const clientTaunt = JSON.parse(String(req.body)) as ITaunt; const clientTaunt = JSON.parse(String(req.body)) as ITaunt;
logger.debug(`updating taunt ${clientTaunt.node} to state ${clientTaunt.state}`);
inventory.TauntHistory ??= []; inventory.TauntHistory ??= [];
const taunt = inventory.TauntHistory.find(x => x.node == clientTaunt.node);
if (taunt) {
taunt.state = clientTaunt.state;
} else {
inventory.TauntHistory.push(clientTaunt); inventory.TauntHistory.push(clientTaunt);
}
await inventory.save(); await inventory.save();
res.end(); res.end();
} else {
res.json({});
}
}; };

View File

@ -1,14 +1,9 @@
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { getInventory } from "@/src/services/inventoryService"; import { getInventory } from "@/src/services/inventoryService";
import { IMongoDate } from "@/src/types/commonTypes"; import { IMongoDate } from "@/src/types/commonTypes";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { unixTimesInMs } from "@/src/constants/timeConstants"; import { unixTimesInMs } from "@/src/constants/timeConstants";
interface ITrainingResultsRequest {
numLevelsGained: number;
}
interface ITrainingResultsResponse { interface ITrainingResultsResponse {
NewTrainingDate: IMongoDate; NewTrainingDate: IMongoDate;
NewLevel: number; NewLevel: number;
@ -18,14 +13,12 @@ interface ITrainingResultsResponse {
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
const trainingResultController: RequestHandler = async (req, res): Promise<void> => { const trainingResultController: RequestHandler = async (req, res): Promise<void> => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
const numLevelsGained = parseInt(req.query.numLevelsGained as string);
const trainingResults = getJSONfromString(String(req.body)) as ITrainingResultsRequest;
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
console.log(req.query);
inventory.TrainingDate = new Date(Date.now() + unixTimesInMs.day); inventory.TrainingDate = new Date(Date.now() + unixTimesInMs.day);
if (trainingResults.numLevelsGained == 1) { if (numLevelsGained == 1) {
inventory.PlayerLevel += 1; inventory.PlayerLevel += 1;
} }
@ -35,7 +28,7 @@ const trainingResultController: RequestHandler = async (req, res): Promise<void>
NewTrainingDate: { NewTrainingDate: {
$date: { $numberLong: changedinventory.TrainingDate.getTime().toString() } $date: { $numberLong: changedinventory.TrainingDate.getTime().toString() }
}, },
NewLevel: trainingResults.numLevelsGained == 1 ? changedinventory.PlayerLevel : inventory.PlayerLevel, NewLevel: numLevelsGained == 1 ? changedinventory.PlayerLevel : inventory.PlayerLevel,
InventoryChanges: [] InventoryChanges: []
} satisfies ITrainingResultsResponse); } satisfies ITrainingResultsResponse);
}; };

View File

@ -0,0 +1,156 @@
import { getAccountIdForRequest } from "@/src/services/loginService";
import { RequestHandler } from "express";
import { missionInventoryUpdate } from "@/src/services/inventoryService";
import { combineRewardAndLootInventory } from "@/src/services/missionInventoryUpdateService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const updateInventoryController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const lootInventory = getJSONfromString(req.body as string) as IMissionInventoryUpdateRequest;
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits } = combineRewardAndLootInventory(
lootInventory,
lootInventory
);
await missionInventoryUpdate(combinedInventoryChanges, accountId);
res.json({
// InventoryJson, // this part will reset game data and missions will be locked
combinedInventoryChanges,
TotalCredits,
CreditsBonus,
MissionCredits
});
};
/*
{
"LongGuns" : [
{
"ItemType" : "",
"ItemId" : {
"$id" : ""
},
"XP" : 882,
"UpgradeVer" : 0,
"UnlockLevel" : 0,
"ExtraCapacity" : 4,
"ExtraRemaining" : 4
}
],
"Pistols" : [
{
"ItemType" : "",
"ItemId" : {
"$id" : ""
},
"XP" : 0,
"UpgradeVer" : 0,
"UnlockLevel" : 0,
"ExtraCapacity" : 4,
"ExtraRemaining" : 4
}
],
"Suits" : [
{
"ItemType" : "",
"ItemId" : {
"$id" : ""
},
"XP" : 982,
"UpgradeVer" : 101,
"UnlockLevel" : 0,
"ExtraCapacity" : 4,
"ExtraRemaining" : 4
}
],
"Melee" : [
{
"ItemType" : "",
"ItemId" : {
"$id" : ""
},
"XP" : 0,
"UpgradeVer" : 0,
"UnlockLevel" : 0,
"ExtraCapacity" : 4,
"ExtraRemaining" : 4
}
],
"WeaponSkins" : [],
"Upgrades" : [],
"Boosters" : [],
"Robotics" : [],
"Consumables" : [],
"FlavourItems" : [],
"MiscItems" : [],
"Cards" : [],
"Recipes" : [],
"XPInfo" : [],
"Sentinels" : [],
"SentinelWeapons" : [],
"SuitBin" : {
"Slots" : 0,
"Extra" : 0
},
"WeaponBin" : {
"Slots" : 0,
"Extra" : 0
},
"MiscBin" : {
"Slots" : 0,
"Extra" : 0
},
"SentinelBin" : {
"Slots" : 0,
"Extra" : 0
},
"RegularCredits" : 1304,
"PremiumCredits" : 0,
"PlayerXP" : 784,
"AdditionalPlayerXP" : 0,
"Rating" : 15,
"PlayerLevel" : 0,
"TrainingDate" : {
"sec" : "",
"usec" : ""
},
"AliveTime" : 193.78572,
"Missions" : {
"Tag" : "SolNode103",
"Completes" : 1,
"BestRating" : 0.2
},
"AssignedMissions" : [],
"CompletedAlerts" : [],
"DeathMarks" : [],
"MissionReport" : {
"HostId" : "",
"MishStartTime" : "1725359860",
"MishName" : "SolNode103",
"PlayerReport" : {
"ReporterId" : "",
"FullReport" : true,
"PlayerMishInfos" : [
{
"Pid" : "",
"Creds" : 304,
"CredBonus" : 1000,
"Xp" : 784,
"XpBonus" : 0,
"SuitXpBonus" : 590,
"PistolXpBonus" : 0,
"RfileXpBonus" : 490,
"MeleeXpBonus" : 0,
"SentnlXPBonus" : 0,
"SentnlWepXpBonus" : 0,
"Rating" : 0.2,
"Upgrades" : []
}
]
}
}
}
*/

View File

@ -1,149 +1,34 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { IUpgradesRequest } from "@/src/types/requestTypes"; import { IUpgradesRequest } from "@/src/types/requestTypes";
import {
ArtifactPolarity,
IEquipmentDatabase,
EquipmentFeatures
} from "@/src/types/inventoryTypes/commonInventoryTypes";
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getInventory } from "@/src/services/inventoryService";
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
export const upgradesController: RequestHandler = async (req, res) => { export const upgradesController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
const payload = JSON.parse(String(req.body)) as IUpgradesRequest; const payload = JSON.parse(String(req.body)) as IUpgradesRequest;
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const InventoryChanges: any = {}; console.log(req.body);
for (const operation of payload.Operations) { for (const item of payload.UpgradesToAttach) {
if ( for (const upgrade of inventory.Upgrades) {
operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/ModSlotUnlocker" || if (upgrade._id?.toString() == item.ItemId.$id) {
operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker" upgrade.UpgradeFingerprint = item.UpgradeFingerprint;
) { upgrade.Slot = item.Slot;
await updateCurrency(10, true, accountId); upgrade.ParentId = payload.Weapon.ItemId;
} else { }
addMiscItems(inventory, [ }
{
ItemType: operation.UpgradeRequirement,
ItemCount: -1
} satisfies IMiscItem
]);
} }
switch (operation.UpgradeRequirement) { for (const item of payload.UpgradesToDetach) {
case "/Lotus/Types/Items/MiscItems/OrokinReactor": for (const upgrade of inventory.Upgrades) {
case "/Lotus/Types/Items/MiscItems/OrokinCatalyst": if (upgrade._id?.toString() == item.ItemId.$id) {
for (const item of inventory[payload.ItemCategory]) { upgrade.UpgradeFingerprint = undefined;
if (item._id.toString() == payload.ItemId.$oid) { upgrade.Slot = undefined;
item.Features ??= 0; upgrade.ParentId = undefined;
item.Features |= EquipmentFeatures.DOUBLE_CAPACITY;
break;
} }
} }
break;
case "/Lotus/Types/Items/MiscItems/UtilityUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker":
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0;
item.Features |= EquipmentFeatures.UTILITY_SLOT;
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/HeavyWeaponCatalyst":
console.assert(payload.ItemCategory == "SpaceGuns");
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0;
item.Features |= EquipmentFeatures.GRAVIMAG_INSTALLED;
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponMeleeArcaneUnlocker":
case "/Lotus/Types/Items/MiscItems/WeaponAmpArcaneUnlocker":
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.Features ??= 0;
item.Features |= EquipmentFeatures.ARCANE_SLOT;
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/Forma":
case "/Lotus/Types/Items/MiscItems/FormaUmbra":
case "/Lotus/Types/Items/MiscItems/FormaAura":
case "/Lotus/Types/Items/MiscItems/FormaStance":
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.XP = 0;
setSlotPolarity(item, operation.PolarizeSlot, operation.PolarizeValue);
item.Polarized ??= 0;
item.Polarized += 1;
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/ModSlotUnlocker":
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.ModSlotPurchases ??= 0;
item.ModSlotPurchases += 1;
InventoryChanges[payload.ItemCategory] = {
ItemId: {
$oid: payload.ItemId.$oid
},
ModSlotPurchases: item.ModSlotPurchases
};
break;
}
}
break;
case "/Lotus/Types/Items/MiscItems/CustomizationSlotUnlocker":
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
item.CustomizationSlotPurchases ??= 0;
item.CustomizationSlotPurchases += 1;
InventoryChanges[payload.ItemCategory] = {
ItemId: {
$oid: payload.ItemId.$oid
},
CustomizationSlotPurchases: item.CustomizationSlotPurchases
};
break;
}
}
break;
case "":
console.assert(operation.OperationType == "UOT_SWAP_POLARITY");
for (const item of inventory[payload.ItemCategory]) {
if (item._id.toString() == payload.ItemId.$oid) {
for (let i = 0; i != operation.PolarityRemap.length; ++i) {
if (operation.PolarityRemap[i].Slot != i) {
setSlotPolarity(item, i, operation.PolarityRemap[i].Value);
}
}
break;
}
}
break;
default:
throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement);
}
} }
await inventory.save(); await inventory.save();
res.json({ InventoryChanges }); res.json({});
};
const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: ArtifactPolarity): void => {
item.Polarity ??= [];
const entry = item.Polarity.find(entry => entry.Slot == slot);
if (entry) {
entry.Value = polarity;
} else {
item.Polarity.push({ Slot: slot, Value: polarity });
}
}; };

View File

@ -43,11 +43,6 @@ const toAccountCreation = (accountCreation: unknown): IAccountCreation => {
const toDatabaseAccount = (createAccount: IAccountCreation): IDatabaseAccount => { const toDatabaseAccount = (createAccount: IAccountCreation): IDatabaseAccount => {
return { return {
...createAccount, ...createAccount,
ClientType: "",
ConsentNeeded: false,
CrossPlatformAllowed: true,
ForceLogoutVersion: 0,
TrackedSettings: [],
Nonce: 0 Nonce: 0
} satisfies IDatabaseAccount; } satisfies IDatabaseAccount;
}; };

View File

@ -2,7 +2,7 @@ import { IOid } from "@/src/types/commonTypes";
import { IInventoryDatabase, IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes"; import { IInventoryDatabase, IInventoryResponse } from "@/src/types/inventoryTypes/inventoryTypes";
import { Types } from "mongoose"; import { Types } from "mongoose";
//TODO: this needs to be addressed: a schema's toJSON is responsible for changing Oid and Date to their corresponding Response versions __id to "ItemId":{"$oid":"6450f720bc562ebf030222d4"}, and a Date to "date":{"$date":{"$numberLong":"unix timestamp"}) //TODO: this needs to be addressed: a schema's toJSON is responsible for changing Oid and Date to their corresponding Response versions __id to "ItemId":{"$id":"6450f720bc562ebf030222d4"}, and a Date to "date":{"$date":{"$numberLong":"unix timestamp"})
export const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInventoryResponse => { export const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInventoryResponse => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const { accountOwnerId, ...inventoryResponse } = inventoryDatabase; const { accountOwnerId, ...inventoryResponse } = inventoryDatabase;
@ -10,7 +10,7 @@ export const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInv
}; };
export const toOid = (objectId: Types.ObjectId) => { export const toOid = (objectId: Types.ObjectId) => {
return { $oid: objectId.toString() } satisfies IOid; return { $id: objectId.toString() } satisfies IOid;
}; };
export const toMongoDate = (date: Date) => { export const toMongoDate = (date: Date) => {

View File

@ -1,5 +1,5 @@
import { ILoginRequest } from "@/src/types/loginTypes"; import { ILoginRequest } from "@/src/types/loginTypes";
import { parseEmail, parseNumber, parseString } from "./general"; import { parseEmail, parseString } from "./general";
const toLoginRequest = (loginRequest: unknown): ILoginRequest => { const toLoginRequest = (loginRequest: unknown): ILoginRequest => {
if (!loginRequest || typeof loginRequest !== "object") { if (!loginRequest || typeof loginRequest !== "object") {
@ -7,25 +7,10 @@ const toLoginRequest = (loginRequest: unknown): ILoginRequest => {
} }
// TODO: function that checks whether every field of interface is in object // TODO: function that checks whether every field of interface is in object
if ( if ("email" in loginRequest && "password" in loginRequest) {
"email" in loginRequest &&
"password" in loginRequest &&
"time" in loginRequest &&
"s" in loginRequest &&
"lang" in loginRequest &&
"date" in loginRequest &&
"ClientType" in loginRequest &&
"PS" in loginRequest
) {
return { return {
email: parseEmail(loginRequest.email), email: parseEmail(loginRequest.email),
password: parseString(loginRequest.password), password: parseString(loginRequest.password)
time: parseNumber(loginRequest.time),
s: parseString(loginRequest.s),
lang: parseString(loginRequest.lang),
date: parseNumber(loginRequest.date),
ClientType: parseString(loginRequest.ClientType),
PS: parseString(loginRequest.PS)
}; };
} }

View File

@ -13,30 +13,19 @@ import {
IPendingRecipe as IPendingRecipeDatabase, IPendingRecipe as IPendingRecipeDatabase,
IPendingRecipeResponse, IPendingRecipeResponse,
ITypeCount, ITypeCount,
IFocusXP,
IFocusUpgrades,
ITypeXPItem, ITypeXPItem,
IChallengeProgress, IChallengeProgress,
IStepSequencer, IStepSequencer,
IAffiliation,
INotePacks, INotePacks,
ICompletedJobChain,
ISeasonChallenge,
IPlayerSkills, IPlayerSkills,
ISettings, ISettings,
IInfestedFoundry,
IConsumedSuit,
IQuestProgress, IQuestProgress,
IQuestKeyDatabase, IQuestKeyDatabase,
IQuestKeyResponse, IQuestKeyResponse,
IFusionTreasure,
ISpectreLoadout,
IWeaponSkinDatabase, IWeaponSkinDatabase,
ITaunt,
IPeriodicMissionCompletionDatabase, IPeriodicMissionCompletionDatabase,
IPeriodicMissionCompletionResponse, IPeriodicMissionCompletionResponse,
ILoreFragmentScan, ITaunt
IEvolutionProgress
} from "../../types/inventoryTypes/inventoryTypes"; } from "../../types/inventoryTypes/inventoryTypes";
import { IOid } from "../../types/commonTypes"; import { IOid } from "../../types/commonTypes";
import { import {
@ -53,26 +42,6 @@ import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
const typeCountSchema = new Schema<ITypeCount>({ ItemType: String, ItemCount: Number }, { _id: false }); const typeCountSchema = new Schema<ITypeCount>({ ItemType: String, ItemCount: Number }, { _id: false });
const focusXPSchema = new Schema<IFocusXP>(
{
AP_POWER: Number,
AP_TACTIC: Number,
AP_DEFENSE: Number,
AP_ATTACK: Number,
AP_WARD: Number
},
{ _id: false }
);
const focusUpgradesSchema = new Schema<IFocusUpgrades>(
{
ItemType: String,
Level: Number,
IsUniversal: Boolean
},
{ _id: false }
);
const pendingRecipeSchema = new Schema<IPendingRecipeDatabase>( const pendingRecipeSchema = new Schema<IPendingRecipeDatabase>(
{ {
ItemType: String, ItemType: String,
@ -82,7 +51,7 @@ const pendingRecipeSchema = new Schema<IPendingRecipeDatabase>(
); );
pendingRecipeSchema.virtual("ItemId").get(function () { pendingRecipeSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() }; return { $id: this._id.toString() };
}); });
pendingRecipeSchema.set("toJSON", { pendingRecipeSchema.set("toJSON", {
@ -140,7 +109,7 @@ const operatorConfigSchema = new Schema<IOperatorConfigDatabase>(
); );
operatorConfigSchema.virtual("ItemId").get(function () { operatorConfigSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $id: this._id.toString() } satisfies IOid;
}); });
operatorConfigSchema.set("toJSON", { operatorConfigSchema.set("toJSON", {
@ -229,7 +198,7 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
); );
EquipmentSchema.virtual("ItemId").get(function () { EquipmentSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $id: this._id.toString() } satisfies IOid;
}); });
EquipmentSchema.set("toJSON", { EquipmentSchema.set("toJSON", {
@ -257,7 +226,7 @@ const RawUpgrades = new Schema<IRawUpgrade>(
); );
RawUpgrades.virtual("LastAdded").get(function () { RawUpgrades.virtual("LastAdded").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $id: this._id.toString() } satisfies IOid;
}); });
RawUpgrades.set("toJSON", { RawUpgrades.set("toJSON", {
@ -269,10 +238,14 @@ RawUpgrades.set("toJSON", {
}); });
//TODO: find out what this is //TODO: find out what this is
const upgradesSchema = new Schema( const upgradesSchema = new Schema<ICrewShipSalvagedWeaponSkin>(
{ {
UpgradeFingerprint: String, UpgradeFingerprint: String,
ItemType: String ItemType: String,
Slot: Number,
ParentId: {
$id: String
}
}, },
{ id: false } { id: false }
); );
@ -311,12 +284,12 @@ FlavourItemSchema.set("toJSON", {
} }
}); });
// "Mailbox": { "LastInboxId": { "$oid": "123456780000000000000000" } } // "Mailbox": { "LastInboxId": { "$id": "123456780000000000000000" } }
const MailboxSchema = new Schema<IMailbox>( const MailboxSchema = new Schema<IMailbox>(
{ {
LastInboxId: { LastInboxId: {
type: Schema.Types.ObjectId, type: Schema.Types.ObjectId,
set: (v: IMailbox["LastInboxId"]) => v.$oid.toString() set: (v: IMailbox["LastInboxId"]) => v.$id.toString()
} }
}, },
{ id: false, _id: false } { id: false, _id: false }
@ -383,7 +356,7 @@ const StepSequencersSchema = new Schema<IStepSequencer>(
); );
StepSequencersSchema.virtual("ItemId").get(function () { StepSequencersSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $id: this._id.toString() } satisfies IOid;
}); });
StepSequencersSchema.set("toJSON", { StepSequencersSchema.set("toJSON", {
@ -394,34 +367,6 @@ StepSequencersSchema.set("toJSON", {
} }
}); });
const affiliationsSchema = new Schema<IAffiliation>(
{
Initiated: Boolean,
Standing: Number,
Title: Number,
FreeFavorsEarned: { type: [Number], default: undefined },
FreeFavorsUsed: { type: [Number], default: undefined },
Tag: String
},
{ _id: false }
);
const completedJobChainsSchema = new Schema<ICompletedJobChain>(
{
LocationTag: String,
Jobs: [String]
},
{ _id: false }
);
const seasonChallengeHistorySchema = new Schema<ISeasonChallenge>(
{
challenge: String,
id: String
},
{ _id: false }
);
//TODO: check whether this is complete //TODO: check whether this is complete
const playerSkillsSchema = new Schema<IPlayerSkills>( const playerSkillsSchema = new Schema<IPlayerSkills>(
{ {
@ -449,25 +394,6 @@ const settingsSchema = new Schema<ISettings>({
TradingRulesConfirmed: Boolean TradingRulesConfirmed: Boolean
}); });
const consumedSchuitsSchema = new Schema<IConsumedSuit>({
s: String,
c: colorSchema
});
const infestedFoundrySchema = new Schema<IInfestedFoundry>(
{
Name: String,
Resources: { type: [typeCountSchema], default: undefined },
Slots: Number,
XP: Number,
ConsumedSuits: { type: [consumedSchuitsSchema], default: undefined },
InvigorationIndex: Number,
InvigorationSuitOfferings: { type: [String], default: undefined },
InvigorationsApplied: Number
},
{ _id: false }
);
const questProgressSchema = new Schema<IQuestProgress>({ const questProgressSchema = new Schema<IQuestProgress>({
c: Number, c: Number,
i: Boolean, i: Boolean,
@ -499,21 +425,6 @@ questKeysSchema.set("toJSON", {
} }
}); });
const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
{
LongGuns: String,
Melee: String,
Pistols: String,
PistolsFeatures: Number,
PistolsModularParts: [String],
Suits: String,
ItemType: String
},
{ _id: false }
);
const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>( const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
{ {
ItemType: String ItemType: String
@ -522,7 +433,7 @@ const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
); );
weaponSkinsSchema.virtual("ItemId").get(function () { weaponSkinsSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() }; return { $id: this._id.toString() };
}); });
weaponSkinsSchema.set("toJSON", { weaponSkinsSchema.set("toJSON", {
@ -533,14 +444,6 @@ weaponSkinsSchema.set("toJSON", {
} }
}); });
const tauntSchema = new Schema<ITaunt>(
{
node: String,
state: String
},
{ _id: false }
);
const periodicMissionCompletionsSchema = new Schema<IPeriodicMissionCompletionDatabase>( const periodicMissionCompletionsSchema = new Schema<IPeriodicMissionCompletionDatabase>(
{ {
date: Date, date: Date,
@ -560,20 +463,9 @@ periodicMissionCompletionsSchema.set("toJSON", {
} }
}); });
const loreFragmentScansSchema = new Schema<ILoreFragmentScan>( const tauntSchema = new Schema<ITaunt>(
{ {
Progress: Number, node: String
Region: String,
ItemType: String
},
{ _id: false }
);
const evolutionProgressSchema = new Schema<IEvolutionProgress>(
{
Progress: Number,
Rank: Number,
ItemType: String
}, },
{ _id: false } { _id: false }
); );
@ -589,61 +481,13 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
RegularCredits: Number, RegularCredits: Number,
//Platinum //Platinum
PremiumCredits: Number, PremiumCredits: Number,
//Gift Platinum(Non trade)
PremiumCreditsFree: Number,
//Endo
FusionPoints: Number,
//Slots //Slots
SuitBin: slotsBinSchema, SuitBin: slotsBinSchema,
WeaponBin: slotsBinSchema, WeaponBin: slotsBinSchema,
SentinelBin: slotsBinSchema, SentinelBin: slotsBinSchema,
SpaceSuitBin: slotsBinSchema,
SpaceWeaponBin: slotsBinSchema,
PvpBonusLoadoutBin: slotsBinSchema,
PveBonusLoadoutBin: slotsBinSchema,
RandomModBin: slotsBinSchema, RandomModBin: slotsBinSchema,
OperatorAmpBin: slotsBinSchema,
CrewShipSalvageBin: slotsBinSchema,
MechBin: slotsBinSchema, MechBin: slotsBinSchema,
CrewMemberBin: slotsBinSchema,
//How many trades do you have left
TradesRemaining: Number,
//How many Gift do you have left*(gift spends the trade)
GiftsRemaining: Number,
//Curent trade info Giving or Getting items
PendingTrades: [Schema.Types.Mixed],
//Syndicate currently being pledged to.
SupportedSyndicate: String,
//Curent Syndicates rank\exp
Affiliations: [affiliationsSchema],
//Syndicates Missions complate(Navigation->Syndicate)
CompletedSyndicates: [String],
//Daily Syndicates Exp
DailyAffiliation: Number,
DailyAffiliationPvp: Number,
DailyAffiliationLibrary: Number,
DailyAffiliationCetus: Number,
DailyAffiliationQuills: Number,
DailyAffiliationSolaris: Number,
DailyAffiliationVentkids: Number,
DailyAffiliationVox: Number,
DailyAffiliationEntrati: Number,
DailyAffiliationNecraloid: Number,
DailyAffiliationZariman: Number,
DailyAffiliationKahl: Number,
DailyAffiliationCavia: Number,
//Daily Focus limit
DailyFocus: Number,
//Focus XP per School
FocusXP: focusXPSchema,
//Curent active like Active school focuses is = "Zenurik"
FocusAbility: String,
//The treeways of the Focus school.(Active and passive Ability)
FocusUpgrades: [focusUpgradesSchema],
//Achievement //Achievement
ChallengeProgress: [challengeProgressSchema], ChallengeProgress: [challengeProgressSchema],
@ -651,8 +495,6 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//Account Item like Ferrite,Form,Kuva etc //Account Item like Ferrite,Form,Kuva etc
MiscItems: [typeCountSchema], MiscItems: [typeCountSchema],
//Non Upgrade Mods Example:I have 999 item WeaponElectricityDamageMod (only "ItemCount"+"ItemType")
RawUpgrades: [RawUpgrades],
//Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+"" //Upgrade Mods\Riven\Arcane Example:"UpgradeFingerprint"+"ItemType"+""
Upgrades: [upgradesSchema], Upgrades: [upgradesSchema],
@ -672,214 +514,65 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//Sentinel(like Helios or modular) //Sentinel(like Helios or modular)
Sentinels: [EquipmentSchema], Sentinels: [EquipmentSchema],
//Any /Sentinels/SentinelWeapons/ (like warframe weapon) //Any /Sentinels/SentinelWeapons/ (like warframe weapon)
SentinelWeapons: [EquipmentSchema], SentinelWeapons: [Schema.Types.Mixed],
//Modular Pets
MoaPets: [EquipmentSchema],
KubrowPetEggs: [Schema.Types.Mixed],
//Like PowerSuit Cat\Kubrow or etc Pets
KubrowPets: [EquipmentSchema],
//Prints Cat(3 Prints)\Kubrow(2 Prints) Pets
KubrowPetPrints: [Schema.Types.Mixed],
//Item for EquippedGear example:Scaner,LoadoutTechSummon etc //Item for EquippedGear example:Scaner,LoadoutTechSummon etc
Consumables: [typeCountSchema], Consumables: [typeCountSchema],
//Weel Emotes+Gear //Weel Emotes+Gear
EquippedEmotes: [String],
EquippedGear: [String],
//Equipped Shawzin //Equipped Shawzin
EquippedInstrument: String,
ReceivedStartingGear: Boolean, ReceivedStartingGear: Boolean,
//to use add SummonItem to Consumables+EquippedGear //Complete Mission
//Archwing need Suits+Melee+Guns
SpaceSuits: [EquipmentSchema],
SpaceMelee: [EquipmentSchema],
SpaceGuns: [EquipmentSchema],
ArchwingEnabled: Boolean,
//Mech need Suits+SpaceGuns+SpecialItem
MechSuits: [EquipmentSchema],
///Restoratives/HoverboardSummon (like Suit)
Hoverboards: [EquipmentSchema],
//Use Operator\Drifter
UseAdultOperatorLoadout: Boolean,
//Operator\Drifter Weapon
OperatorAmps: [EquipmentSchema],
//Operator
OperatorLoadOuts: [operatorConfigSchema],
//Drifter
AdultOperatorLoadOuts: [operatorConfigSchema],
DrifterMelee: [EquipmentSchema],
DrifterGuns: [EquipmentSchema],
//ErsatzHorsePowerSuit
Horses: [EquipmentSchema],
//LandingCraft like Liset
Ships: { type: [Schema.Types.ObjectId], ref: "Ships" },
// /Lotus/Types/Items/ShipDecos/
ShipDecorations: [typeCountSchema],
//RailJack Setting(Mods,Skin,Weapon,etc)
CrewShipHarnesses: [EquipmentSchema],
//Railjack/Components(https://warframe.fandom.com/wiki/Railjack/Components)
CrewShipRawSalvage: [Schema.Types.Mixed],
//Default RailJack
CrewShips: [Schema.Types.Mixed],
CrewShipAmmo: [typeCountSchema],
CrewShipWeapons: [Schema.Types.Mixed],
CrewShipWeaponSkins: [Schema.Types.Mixed],
//NPC Crew and weapon
CrewMembers: [Schema.Types.Mixed],
CrewShipSalvagedWeaponSkins: [Schema.Types.Mixed],
CrewShipSalvagedWeapons: [Schema.Types.Mixed],
//Complete Mission\Quests
Missions: [Schema.Types.Mixed], Missions: [Schema.Types.Mixed],
QuestKeys: [questKeysSchema],
//item like DojoKey or Boss missions key
LevelKeys: [Schema.Types.Mixed],
//Active quests
Quests: [Schema.Types.Mixed],
//Cosmetics like profile glyphs\Kavasa Prime Kubrow Collar\Game Theme etc //Cosmetics like profile glyphs\Kavasa Prime Kubrow Collar\Game Theme etc
FlavourItems: [FlavourItemSchema], FlavourItems: [FlavourItemSchema],
//Lunaro Weapon
Scoops: [EquipmentSchema],
//Mastery Rank*(Need item XPInfo to rank up) //Mastery Rank*(Need item XPInfo to rank up)
PlayerLevel: Number, PlayerLevel: Number,
//Item Mastery Rank exp //Item Mastery Rank exp
XPInfo: [TypeXPItemSchema], XPInfo: [TypeXPItemSchema],
//Mastery Rank next availability //Mastery Rank next availability
TrainingDate: Date, TrainingDate: Date,
//Retries rank up(3 time)
TrainingRetriesLeft: Number,
//you saw last played Region when you opened the star map
LastRegionPlayed: String,
//Blueprints for Foundry //Blueprints for Foundry
Recipes: [typeCountSchema], Recipes: [typeCountSchema],
//Crafting Blueprint(Item Name + CompletionDate) //Crafting Blueprint(Item Name + CompletionDate)
PendingRecipes: [pendingRecipeSchema], PendingRecipes: [pendingRecipeSchema],
TauntHistory: { type: [tauntSchema], default: undefined },
//Skins for Suits, Weapons etc. //Skins for Suits, Weapons etc.
WeaponSkins: [weaponSkinsSchema], WeaponSkins: [weaponSkinsSchema],
//Ayatan Item
FusionTreasures: [fusionTreasuresSchema],
//only used for Maroo apparently - { "node": "TreasureTutorial", "state": "TS_COMPLETED" }
TauntHistory: { type: [tauntSchema], default: undefined },
//noShow2FA,VisitPrimeVault etc //noShow2FA,VisitPrimeVault etc
WebFlags: Schema.Types.Mixed, WebFlags: Schema.Types.Mixed,
//Id CompletedAlerts //Id CompletedAlerts
CompletedAlerts: [String], CompletedAlerts: [String],
//Warframe\Duviri
StoryModeChoice: String,
//Alert->Kuva Siphon
PeriodicMissionCompletions: [periodicMissionCompletionsSchema],
//Codex->LoreFragment
LoreFragmentScans: [loreFragmentScansSchema],
//Resource,Credit,Affinity etc or Bless any boosters //Resource,Credit,Affinity etc or Bless any boosters
Boosters: [boosterSchema], Boosters: [boosterSchema],
BlessingCooldown: Date, // Date convert to IMongoDate
//the color your clan requests like Items/Research/DojoColors/DojoColorPlainsB
ActiveDojoColorResearch: String,
SentientSpawnChanceBoosters: Schema.Types.Mixed,
QualifyingInvasions: [Schema.Types.Mixed],
FactionScores: [Number],
//Have only Suit+Pistols+LongGuns+Melee+ItemType(BronzeSpectre,GoldSpectre,PlatinumSpectreArmy,SilverSpectreArmy)
//"/Lotus/Types/Game/SpectreArmies/BronzeSpectreArmy": "Vapor Specter Regiment",
SpectreLoadouts: [spectreLoadoutsSchema],
//If you want change Spectre Gear id
PendingSpectreLoadouts: [Schema.Types.Mixed],
//New Quest Email //New Quest Email
EmailItems: [TypeXPItemSchema], EmailItems: [TypeXPItemSchema],
//Profile->Wishlist
Wishlist: [String],
//https://warframe.fandom.com/wiki/Alignment //https://warframe.fandom.com/wiki/Alignment
//like "Alignment": { "Wisdom": 9, "Alignment": 1 }, //like "Alignment": { "Wisdom": 9, "Alignment": 1 },
Alignment: Schema.Types.Mixed, Alignment: Schema.Types.Mixed,
AlignmentReplay: Schema.Types.Mixed, AlignmentReplay: Schema.Types.Mixed,
//https://warframe.fandom.com/wiki/Sortie
CompletedSorties: [String],
LastSortieReward: [Schema.Types.Mixed],
//Resource_Drone[Uselees stuff]
Drones: [Schema.Types.Mixed],
//Active profile ico //Active profile ico
ActiveAvatarImageType: String, ActiveAvatarImageType: String,
// open location store like EidolonPlainsDiscoverable or OrbVallisCaveDiscoverable
DiscoveredMarkers: [Schema.Types.Mixed],
//Open location mission like "JobId" + "StageCompletions"
CompletedJobs: [Schema.Types.Mixed],
//Game mission\ivent score example "Tag": "WaterFight", "Best": 170, "Count": 1258,
PersonalGoalProgress: [Schema.Types.Mixed],
//Setting interface Style
ThemeStyle: String,
ThemeBackground: String,
ThemeSounds: String,
//Daily LoginRewards
LoginMilestoneRewards: [String],
//You first Dialog with NPC or use new Item //You first Dialog with NPC or use new Item
NodeIntrosCompleted: [String], NodeIntrosCompleted: [String],
//Current guild id, if applicable. //Current guild id, if applicable.
GuildId: { type: Schema.Types.ObjectId, ref: "Guild" }, GuildId: { type: Schema.Types.ObjectId, ref: "Guild" },
//https://warframe.fandom.com/wiki/Heist
//ProfitTaker(1-4) Example:"LocationTag": "EudicoHeists", "Jobs":Mission name
CompletedJobChains: [completedJobChainsSchema],
//Night Wave Challenge
SeasonChallengeHistory: [seasonChallengeHistorySchema],
//Cephalon Simaris Entries Example:"TargetType"+"Scans"(1-10)+"Completed": true|false
LibraryPersonalProgress: [Schema.Types.Mixed],
//Cephalon Simaris Daily Task
LibraryAvailableDailyTaskInfo: Schema.Types.Mixed,
//https://warframe.fandom.com/wiki/Invasion
InvasionChainProgress: [Schema.Types.Mixed],
//https://warframe.fandom.com/wiki/Parazon
DataKnives: [EquipmentSchema],
//CorpusLich or GrineerLich
NemesisAbandonedRewards: [String],
//CorpusLich\KuvaLich
NemesisHistory: [Schema.Types.Mixed],
LastNemesisAllySpawnTime: Schema.Types.Mixed,
//TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social) //TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social)
Settings: settingsSchema, Settings: settingsSchema,
//Railjack craft
//https://warframe.fandom.com/wiki/Rising_Tide
PersonalTechProjects: [Schema.Types.Mixed],
//Modulars lvl and exp(Railjack|Duviri) //Modulars lvl and exp(Railjack|Duviri)
//https://warframe.fandom.com/wiki/Intrinsics //https://warframe.fandom.com/wiki/Intrinsics
PlayerSkills: playerSkillsSchema, PlayerSkills: playerSkillsSchema,
@ -887,42 +580,14 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//TradeBannedUntil data //TradeBannedUntil data
TradeBannedUntil: Schema.Types.Mixed, TradeBannedUntil: Schema.Types.Mixed,
//https://warframe.fandom.com/wiki/Helminth
InfestedFoundry: infestedFoundrySchema,
NextRefill: Schema.Types.Mixed, // Date, convert to IMongoDate
//Purchase this new permanent skin from the Lotus customization options in Personal Quarters located in your Orbiter.
//https://warframe.fandom.com/wiki/Lotus#The_New_War
LotusCustomization: Schema.Types.Mixed,
//Progress+Rank+ItemType(ZarimanPumpShotgun)
//https://warframe.fandom.com/wiki/Incarnon
EvolutionProgress: { type: [evolutionProgressSchema], default: undefined },
//Unknown and system //Unknown and system
DuviriInfo: DuviriInfoSchema,
Mailbox: MailboxSchema, Mailbox: MailboxSchema,
KahlLoadOuts: [Schema.Types.Mixed],
HandlerPoints: Number, HandlerPoints: Number,
ChallengesFixVersion: Number, ChallengesFixVersion: Number,
PlayedParkourTutorial: Boolean, PlayedParkourTutorial: Boolean,
SubscribedToEmailsPersonalized: Number, SubscribedToEmailsPersonalized: Number,
LastInventorySync: Schema.Types.Mixed, // this should be Schema.Types.ObjectId, but older inventories may break with that. LastInventorySync: Schema.Types.Mixed,
ActiveLandscapeTraps: [Schema.Types.Mixed],
RepVotes: [Schema.Types.Mixed],
LeagueTickets: [Schema.Types.Mixed],
HasContributedToDojo: Boolean,
HWIDProtectEnabled: Boolean,
LoadOutPresets: { type: Schema.Types.ObjectId, ref: "Loadout" },
CurrentLoadOutIds: [Schema.Types.Mixed],
RandomUpgradesIdentified: Number,
BountyScore: Number,
ChallengeInstanceStates: [Schema.Types.Mixed],
RecentVendorPurchases: [Schema.Types.Mixed],
Robotics: [Schema.Types.Mixed], Robotics: [Schema.Types.Mixed],
UsedDailyDeals: [Schema.Types.Mixed],
CollectibleSeries: [Schema.Types.Mixed],
HasResetAccount: Boolean, HasResetAccount: Boolean,
//Discount Coupon //Discount Coupon

View File

@ -5,7 +5,7 @@ import { Model, Schema, Types, model } from "mongoose";
const oidSchema = new Schema<IOid>( const oidSchema = new Schema<IOid>(
{ {
$oid: String $id: String
}, },
{ {
_id: false _id: false
@ -44,7 +44,7 @@ const loadoutConfigSchema = new Schema<ILoadoutConfigDatabase>(
); );
loadoutConfigSchema.virtual("ItemId").get(function () { loadoutConfigSchema.virtual("ItemId").get(function () {
return { $oid: this._id.toString() } satisfies IOid; return { $id: this._id.toString() } satisfies IOid;
}); });
loadoutConfigSchema.set("toJSON", { loadoutConfigSchema.set("toJSON", {

View File

@ -25,15 +25,7 @@ const databaseAccountSchema = new Schema<IDatabaseAccountDocument>(
email: { type: String, required: true, unique: true }, email: { type: String, required: true, unique: true },
password: { type: String, required: true }, password: { type: String, required: true },
DisplayName: { type: String, required: true }, DisplayName: { type: String, required: true },
CountryCode: { type: String, required: true }, Nonce: { type: Number, required: true }
ClientType: { type: String },
CrossPlatformAllowed: { type: Boolean, required: true },
ForceLogoutVersion: { type: Number, required: true },
AmazonAuthToken: { type: String },
AmazonRefreshToken: { type: String },
ConsentNeeded: { type: Boolean, required: true },
TrackedSettings: { type: [String], default: [] },
Nonce: { type: Number, default: 0 }
}, },
opts opts
); );

View File

@ -64,6 +64,9 @@ import { updateChallengeProgressController } from "@/src/controllers/api/updateC
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController"; import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
import { updateThemeController } from "../controllers/api/updateThemeController"; import { updateThemeController } from "../controllers/api/updateThemeController";
import { upgradesController } from "@/src/controllers/api/upgradesController"; import { upgradesController } from "@/src/controllers/api/upgradesController";
import { worldStateController } from "../controllers/dynamic/worldStateController";
import { updateInventoryController } from "../controllers/api/updateInventoryController";
import { giveStartingGearController } from "../controllers/api/giveStartingGearController";
const apiRouter = express.Router(); const apiRouter = express.Router();
@ -99,6 +102,12 @@ apiRouter.get("/setSupportedSyndicate.php", setSupportedSyndicateController);
apiRouter.get("/surveys.php", surveysController); apiRouter.get("/surveys.php", surveysController);
apiRouter.get("/updateSession.php", updateSessionGetController); apiRouter.get("/updateSession.php", updateSessionGetController);
apiRouter.get("/getMessages.php", (_, response) => {
response.json({});
});
apiRouter.get("/trainingResult.php", trainingResultController);
apiRouter.get("/giveStartingGear.php", giveStartingGearController);
apiRouter.get("/worldState.php", worldStateController);
// post // post
apiRouter.post("/addFriendImage.php", addFriendImageController); apiRouter.post("/addFriendImage.php", addFriendImageController);
apiRouter.post("/artifacts.php", artifactsController); apiRouter.post("/artifacts.php", artifactsController);
@ -138,5 +147,6 @@ apiRouter.post("/updateNodeIntros.php", genericUpdateController);
apiRouter.post("/updateSession.php", updateSessionPostController); apiRouter.post("/updateSession.php", updateSessionPostController);
apiRouter.post("/updateTheme.php", updateThemeController); apiRouter.post("/updateTheme.php", updateThemeController);
apiRouter.post("/upgrades.php", upgradesController); apiRouter.post("/upgrades.php", upgradesController);
apiRouter.post("/updateInventory.php", updateInventoryController);
export { apiRouter }; export { apiRouter };

View File

@ -12,6 +12,10 @@ cacheRouter.get("/B.Cache.Windows_en.bin*", (_req, res) => {
res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" }); res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" });
}); });
cacheRouter.get("/H.Cache.bin!03_---------------------w", (_req, res) => {
res.sendFile(`static/data/H.Cache.bin`, { root: "./" });
});
cacheRouter.get(/^\/origin\/[a-zA-Z0-9]+\/[0-9]+\/H\.Cache\.bin.*$/, (_req, res) => { cacheRouter.get(/^\/origin\/[a-zA-Z0-9]+\/[0-9]+\/H\.Cache\.bin.*$/, (_req, res) => {
res.sendFile(`static/data/H.Cache_${buildConfig.version}.bin`, { root: "./" }); res.sendFile(`static/data/H.Cache_${buildConfig.version}.bin`, { root: "./" });
}); });

View File

@ -188,34 +188,6 @@ export const addItem = async (
} }
}; };
} }
case "Archwing": {
const spaceSuit = await addSpaceSuit(typeName, accountId);
await updateSlots(accountId, InventorySlot.SPACESUITS, 0, 1);
return {
InventoryChanges: {
SpaceSuitBin: {
count: 1,
platinum: 0,
Slots: -1
},
SpaceSuits: [spaceSuit]
}
};
}
case "EntratiMech": {
const mechSuit = await addMechSuit(typeName, accountId);
await updateSlots(accountId, InventorySlot.MECHSUITS, 0, 1);
return {
InventoryChanges: {
MechBin: {
count: 1,
platinum: 0,
Slots: -1
},
MechSuits: [mechSuit]
}
};
}
} }
break; break;
case "Weapons": case "Weapons":
@ -426,9 +398,6 @@ export const updateCurrency = async (price: number, usePremium: boolean, account
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
if (usePremium) { if (usePremium) {
if (inventory.PremiumCreditsFree > 0) {
inventory.PremiumCreditsFree -= Math.min(price, inventory.PremiumCreditsFree);
}
inventory.PremiumCredits -= price; inventory.PremiumCredits -= price;
} else { } else {
inventory.RegularCredits -= price; inventory.RegularCredits -= price;
@ -436,7 +405,7 @@ export const updateCurrency = async (price: number, usePremium: boolean, account
const modifiedPaths = inventory.modifiedPaths(); const modifiedPaths = inventory.modifiedPaths();
type currencyKeys = "RegularCredits" | "PremiumCredits" | "PremiumCreditsFree"; type currencyKeys = "RegularCredits" | "PremiumCredits";
const currencyChanges = {} as Record<currencyKeys, number>; const currencyChanges = {} as Record<currencyKeys, number>;
modifiedPaths.forEach(path => { modifiedPaths.forEach(path => {
@ -556,7 +525,7 @@ const addGearExpByCategory = (
return; return;
} }
const itemIndex = ItemId ? category.findIndex(item => item._id?.equals(ItemId.$oid)) : -1; const itemIndex = ItemId ? category.findIndex(item => item._id?.equals(ItemId.$id)) : -1;
if (itemIndex !== -1) { if (itemIndex !== -1) {
const item = category[itemIndex]; const item = category[itemIndex];
item.XP ??= 0; item.XP ??= 0;
@ -725,74 +694,21 @@ const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Comple
}; };
export const missionInventoryUpdate = async (data: IMissionInventoryUpdateRequest, accountId: string) => { export const missionInventoryUpdate = async (data: IMissionInventoryUpdateRequest, accountId: string) => {
const { const { RawUpgrades, MiscItems, RegularCredits, ChallengeProgress, Consumables, Recipes, Missions } = data;
RawUpgrades,
MiscItems,
RegularCredits,
ChallengeProgress,
FusionPoints,
Consumables,
Recipes,
Missions,
FusionTreasures
} = data;
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
// credits // credits
inventory.RegularCredits += RegularCredits || 0; inventory.RegularCredits += RegularCredits || 0;
// endo
inventory.FusionPoints += FusionPoints || 0;
// syndicate
data.AffiliationChanges?.forEach(affiliation => {
const syndicate = inventory.Affiliations.find(x => x.Tag == affiliation.Tag);
if (syndicate !== undefined) {
syndicate.Standing =
syndicate.Standing === undefined ? affiliation.Standing : syndicate.Standing + affiliation.Standing;
syndicate.Title = syndicate.Title === undefined ? affiliation.Title : syndicate.Title + affiliation.Title;
} else {
inventory.Affiliations.push({
Standing: affiliation.Standing,
Title: affiliation.Title,
Tag: affiliation.Tag,
FreeFavorsEarned: [],
FreeFavorsUsed: []
});
}
});
// Gear XP // Gear XP
equipmentKeys.forEach(key => addGearExpByCategory(inventory, data[key], key)); equipmentKeys.forEach(key => addGearExpByCategory(inventory, data[key], key));
// Incarnon Challenges
if (data.EvolutionProgress) {
for (const evoProgress of data.EvolutionProgress) {
const entry = inventory.EvolutionProgress
? inventory.EvolutionProgress.find(entry => entry.ItemType == evoProgress.ItemType)
: undefined;
if (entry) {
entry.Progress = evoProgress.Progress;
entry.Rank = evoProgress.Rank;
} else {
inventory.EvolutionProgress ??= [];
inventory.EvolutionProgress.push(evoProgress);
}
}
}
// LastRegionPlayed
if (data.LastRegionPlayed) {
inventory.LastRegionPlayed = data.LastRegionPlayed;
}
// other // other
addMods(inventory, RawUpgrades); addMods(inventory, RawUpgrades);
addMiscItems(inventory, MiscItems); addMiscItems(inventory, MiscItems);
addConsumables(inventory, Consumables); addConsumables(inventory, Consumables);
addRecipes(inventory, Recipes); addRecipes(inventory, Recipes);
addChallenges(inventory, ChallengeProgress); addChallenges(inventory, ChallengeProgress);
addFusionTreasures(inventory, FusionTreasures);
if (Missions) { if (Missions) {
addMissionComplete(inventory, Missions); addMissionComplete(inventory, Missions);
} }
@ -833,7 +749,7 @@ export const upgradeMod = async (artifactsData: IArtifactsRequest, accountId: st
parsedUpgradeFingerprint.lvl += LevelDiff; parsedUpgradeFingerprint.lvl += LevelDiff;
const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint); const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint);
let itemIndex = Upgrades.findIndex(upgrade => upgrade._id?.equals(ItemId!.$oid)); let itemIndex = Upgrades.findIndex(upgrade => upgrade._id?.equals(ItemId!.$id));
if (itemIndex !== -1) { if (itemIndex !== -1) {
Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint; Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint;
@ -858,7 +774,7 @@ export const upgradeMod = async (artifactsData: IArtifactsRequest, accountId: st
inventory.FusionPoints -= FusionPointCost; inventory.FusionPoints -= FusionPointCost;
const changedInventory = await inventory.save(); const changedInventory = await inventory.save();
const itemId = changedInventory.toJSON().Upgrades[itemIndex]?.ItemId?.$oid; const itemId = changedInventory.toJSON().Upgrades[itemIndex]?.ItemId?.$id;
if (!itemId) { if (!itemId) {
throw new Error("Item Id not found in upgradeMod"); throw new Error("Item Id not found in upgradeMod");

View File

@ -73,22 +73,8 @@ const combineRewardAndLootInventory = (
const missionCredits = lootInventory.RegularCredits || 0; const missionCredits = lootInventory.RegularCredits || 0;
const creditsBonus = rewardInventory.RegularCredits || 0; const creditsBonus = rewardInventory.RegularCredits || 0;
const totalCredits = missionCredits + creditsBonus; const totalCredits = missionCredits + creditsBonus;
let FusionPoints = rewardInventory.FusionPoints || 0;
// Discharge Endo picked up during the mission
if (lootInventory.FusionBundles) {
for (const fusionBundle of lootInventory.FusionBundles) {
if (fusionBundle.ItemType in fusionBundles) {
FusionPoints += fusionBundles[fusionBundle.ItemType] * fusionBundle.ItemCount;
} else {
logger.error(`unknown fusion bundle: ${fusionBundle.ItemType}`);
}
}
lootInventory.FusionBundles = undefined;
}
lootInventory.RegularCredits = totalCredits; lootInventory.RegularCredits = totalCredits;
lootInventory.FusionPoints = FusionPoints;
inventoryFields.forEach((field: IInventoryFieldType) => { inventoryFields.forEach((field: IInventoryFieldType) => {
if (rewardInventory[field] && !lootInventory[field]) { if (rewardInventory[field] && !lootInventory[field]) {
lootInventory[field] = []; lootInventory[field] = [];
@ -100,8 +86,7 @@ const combineRewardAndLootInventory = (
combinedInventoryChanges: lootInventory, combinedInventoryChanges: lootInventory,
TotalCredits: [totalCredits, totalCredits], TotalCredits: [totalCredits, totalCredits],
CreditsBonus: [creditsBonus, creditsBonus], CreditsBonus: [creditsBonus, creditsBonus],
MissionCredits: [missionCredits, missionCredits], MissionCredits: [missionCredits, missionCredits]
FusionPoints: FusionPoints
}; };
}; };

View File

@ -107,14 +107,7 @@ const handleStoreItemAcquisition = async (
export const slotPurchaseNameToSlotName: SlotPurchase = { export const slotPurchaseNameToSlotName: SlotPurchase = {
SuitSlotItem: { name: "SuitBin", slotsPerPurchase: 1 }, SuitSlotItem: { name: "SuitBin", slotsPerPurchase: 1 },
TwoSentinelSlotItem: { name: "SentinelBin", slotsPerPurchase: 2 }, TwoSentinelSlotItem: { name: "SentinelBin", slotsPerPurchase: 2 },
TwoWeaponSlotItem: { name: "WeaponBin", slotsPerPurchase: 2 }, TwoWeaponSlotItem: { name: "WeaponBin", slotsPerPurchase: 2 }
SpaceSuitSlotItem: { name: "SpaceSuitBin", slotsPerPurchase: 1 },
TwoSpaceWeaponSlotItem: { name: "SpaceWeaponBin", slotsPerPurchase: 2 },
MechSlotItem: { name: "MechBin", slotsPerPurchase: 1 },
TwoOperatorWeaponSlotItem: { name: "OperatorAmpBin", slotsPerPurchase: 2 },
RandomModSlotItem: { name: "RandomModBin", slotsPerPurchase: 3 },
TwoCrewShipSalvageSlotItem: { name: "CrewShipSalvageBin", slotsPerPurchase: 2 },
CrewMemberSlotItem: { name: "CrewMemberBin", slotsPerPurchase: 1 }
}; };
// // extra = everything above the base +2 slots (depending on slot type) // // extra = everything above the base +2 slots (depending on slot type)

View File

@ -34,6 +34,6 @@ export const startRecipe = async (recipeName: string, accountId: string) => {
const newInventory = await inventory.save(); const newInventory = await inventory.save();
return { return {
RecipeId: { $oid: newInventory.PendingRecipes[newInventory.PendingRecipes.length - 1]._id?.toString() } RecipeId: { $id: newInventory.PendingRecipes[newInventory.PendingRecipes.length - 1]._id?.toString() }
}; };
}; };

View File

@ -50,7 +50,7 @@ export const handleInventoryItemConfigChange = async (
if (!loadout) { if (!loadout) {
const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig; const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig;
operatorLoadout.push({ operatorLoadout.push({
_id: ItemId.$oid, _id: ItemId.$id,
...loadoutConfigItemIdRemoved ...loadoutConfigItemIdRemoved
}); });
continue; continue;
@ -89,14 +89,14 @@ export const handleInventoryItemConfigChange = async (
const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig; const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig;
const loadoutConfigDatabase: ILoadoutConfigDatabase = { const loadoutConfigDatabase: ILoadoutConfigDatabase = {
_id: new Types.ObjectId(ItemId.$oid), _id: new Types.ObjectId(ItemId.$id),
...loadoutConfigItemIdRemoved ...loadoutConfigItemIdRemoved
}; };
// if no config with this id exists, create a new one // if no config with this id exists, create a new one
if (!oldLoadoutConfig) { if (!oldLoadoutConfig) {
//save the new object id and assign it for every ffff return at the end //save the new object id and assign it for every ffff return at the end
if (ItemId.$oid === "ffffffffffffffffffffffff") { if (ItemId.$id === "ffffffffffffffffffffffff") {
if (!newLoadoutId) { if (!newLoadoutId) {
newLoadoutId = new Types.ObjectId(); newLoadoutId = new Types.ObjectId();
} }

View File

@ -1,5 +1,5 @@
export interface IOid { export interface IOid {
$oid: string; $id: string;
} }
export interface IMongoDate { export interface IMongoDate {

View File

@ -111,6 +111,7 @@ export type TSolarMapRegion =
export interface IPendingRecipeResponse extends Omit<IPendingRecipe, "CompletionDate"> { export interface IPendingRecipeResponse extends Omit<IPendingRecipe, "CompletionDate"> {
CompletionDate: IMongoDate; CompletionDate: IMongoDate;
} }
export interface IInventoryResponse { export interface IInventoryResponse {
Horses: IEquipmentDatabase[]; Horses: IEquipmentDatabase[];
DrifterMelee: IEquipmentDatabase[]; DrifterMelee: IEquipmentDatabase[];
@ -123,7 +124,6 @@ export interface IInventoryResponse {
RewardSeed: number; RewardSeed: number;
RegularCredits: number; RegularCredits: number;
PremiumCredits: number; PremiumCredits: number;
PremiumCreditsFree: number;
FusionPoints: number; FusionPoints: number;
SuitBin: ISlots; SuitBin: ISlots;
WeaponBin: ISlots; WeaponBin: ISlots;
@ -134,14 +134,6 @@ export interface IInventoryResponse {
PveBonusLoadoutBin: ISlots; PveBonusLoadoutBin: ISlots;
RandomModBin: ISlots; RandomModBin: ISlots;
MechBin: ISlots; MechBin: ISlots;
CrewMemberBin: ISlots;
OperatorAmpBin: ISlots;
CrewShipSalvageBin: ISlots;
TradesRemaining: number;
DailyAffiliation: number;
DailyAffiliationPvp: number;
DailyAffiliationLibrary: number;
DailyFocus: number;
GiftsRemaining: number; GiftsRemaining: number;
HandlerPoints: number; HandlerPoints: number;
MiscItems: IMiscItem[]; MiscItems: IMiscItem[];
@ -404,6 +396,9 @@ export interface ICrewShipSalvagedWeaponSkin {
ItemType: string; ItemType: string;
UpgradeFingerprint?: string; UpgradeFingerprint?: string;
ItemId?: IOid; ItemId?: IOid;
ParentId?: IOid;
Slot?: number;
_pid?: Types.ObjectId;
_id?: Types.ObjectId; _id?: Types.ObjectId;
} }
@ -666,9 +661,8 @@ export interface ILotusCustomization extends IItemConfig {
export interface IMission { export interface IMission {
Completes: number; Completes: number;
Tier?: number;
Tag: string; Tag: string;
RewardsCooldownTime?: IMongoDate; BestRating?: number;
} }
export interface INemesisHistory { export interface INemesisHistory {
@ -882,7 +876,6 @@ export interface INotePacks {
export interface ITaunt { export interface ITaunt {
node: string; node: string;
state: "TS_UNLOCKED" | "TS_COMPLETED";
} }
export interface IWeaponSkinDatabase { export interface IWeaponSkinDatabase {

View File

@ -1,12 +1,7 @@
export interface ILoginResponse extends Omit<IDatabaseAccountDocument, "email" | "password"> { export interface ILoginResponse extends Omit<IDatabaseAccountDocument, "email" | "password"> {
Groups: IGroup[]; BuildLabel?: string;
BuildLabel: string; NatHash?: string;
MatchmakingBuildId: string; SteamId?: string;
platformCDNs: string[];
NRS: string[];
DTLS: number;
IRC: string[];
HUB: string;
} }
// Includes virtual ID // Includes virtual ID
@ -20,27 +15,14 @@ export interface IGroup {
} }
export interface IDatabaseAccount { export interface IDatabaseAccount {
email: string; email?: string;
password: string; password: string;
DisplayName: string; DisplayName?: string;
CountryCode: string; Nonce?: number;
ClientType: string;
CrossPlatformAllowed: boolean;
ForceLogoutVersion: number;
AmazonAuthToken?: string;
AmazonRefreshToken?: string;
ConsentNeeded: boolean;
TrackedSettings: string[];
Nonce: number;
} }
export interface ILoginRequest { export interface ILoginRequest {
email: string; email: string;
password: string; password: string;
time: number; ClientType?: string;
s: string;
lang: string;
date: number;
ClientType: string;
PS: string;
} }

View File

@ -23,30 +23,9 @@ export type IBinChanges = {
Extra?: number; Extra?: number;
}; };
export type SlotPurchaseName = export type SlotPurchaseName = "SuitSlotItem" | "TwoSentinelSlotItem" | "TwoWeaponSlotItem";
| "SuitSlotItem"
| "TwoSentinelSlotItem"
| "TwoWeaponSlotItem"
| "SpaceSuitSlotItem"
| "TwoSpaceWeaponSlotItem"
| "MechSlotItem"
| "TwoOperatorWeaponSlotItem"
| "RandomModSlotItem"
| "TwoCrewShipSalvageSlotItem"
| "CrewMemberSlotItem";
export type SlotNames = export type SlotNames = "SuitBin" | "WeaponBin" | "MechBin" | "PveBonusLoadoutBin" | "SentinelBin";
| "SuitBin"
| "WeaponBin"
| "MechBin"
| "PveBonusLoadoutBin"
| "SentinelBin"
| "SpaceSuitBin"
| "SpaceWeaponBin"
| "OperatorAmpBin"
| "RandomModBin"
| "CrewShipSalvageBin"
| "CrewMemberBin";
export type SlotPurchase = { export type SlotPurchase = {
[P in SlotPurchaseName]: { name: SlotNames; slotsPerPurchase: number }; [P in SlotPurchaseName]: { name: SlotNames; slotsPerPurchase: number };

View File

@ -1,5 +1,5 @@
import { IOid } from "./commonTypes"; import { IOid } from "./commonTypes";
import { ArtifactPolarity, IPolarity, IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { import {
IBooster, IBooster,
IChallengeProgress, IChallengeProgress,
@ -99,6 +99,26 @@ export interface IUpdateGlyphRequest {
AvatarImage: string; AvatarImage: string;
} }
export interface IUpgradesRequest {
Category: TEquipmentKey;
Weapon: IWeapon;
UpgradesToAttach: IUpgradesToAttach[];
UpgradesToDetach: IUpgradesToDetach[];
Cost: number;
UpgradeReq: string;
}
export interface IWeapon {
ItemType: string;
ItemId: IOid;
XP: number;
UpgradeVer: number;
UnlockLevel: number;
ExtraCapacity: number;
ExtraRemaining: number;
}
/*
export interface IUpgradesRequest { export interface IUpgradesRequest {
ItemCategory: TEquipmentKey; ItemCategory: TEquipmentKey;
ItemId: IOid; ItemId: IOid;
@ -106,11 +126,28 @@ export interface IUpgradesRequest {
UpgradeVersion: number; UpgradeVersion: number;
Operations: IUpgradeOperation[]; Operations: IUpgradeOperation[];
} }
*/
export interface IUpgradeOperation { export interface IUpgradesToAttach {
OperationType: string; ItemType: string;
UpgradeRequirement: string; // uniqueName of item being consumed ItemId: IOid;
PolarizeSlot: number; UpgradeFingerprint: string;
PolarizeValue: ArtifactPolarity; Slot: number;
PolarityRemap: IPolarity[]; ParentId: IOid;
} }
export interface IUpgradesToDetach {
ItemType: string;
ItemId: IOid;
UpgradeFingerprint: string;
Slot: number;
ParentId: IOid;
}
// export interface IUpgradeOperation {
// OperationType: string;
// UpgradeRequirement: string; // uniqueName of item being consumed
// PolarizeSlot: number;
// PolarizeValue: ArtifactPolarity;
// PolarityRemap: IPolarity[];
// }

View File

@ -1,6 +1,6 @@
{ {
"VendorInfo": { "VendorInfo": {
"_id": { "$oid": "62695b0467e5d379750f9f75" }, "_id": { "$id": "62695b0467e5d379750f9f75" },
"TypeName": "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest", "TypeName": "/Lotus/Types/Game/VendorManifests/Zariman/ArchimedeanVendorManifest",
"ItemManifest": [ "ItemManifest": [
{ {
@ -10,7 +10,7 @@
"QuantityMultiplier": 1, "QuantityMultiplier": 1,
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "$oid": "63ed01ef4c37f93d0b797826" } "Id": { "$id": "63ed01ef4c37f93d0b797826" }
}, },
{ {
"StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/VoidPlumeBOrnament", "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/VoidPlumeBOrnament",
@ -19,7 +19,7 @@
"QuantityMultiplier": 1, "QuantityMultiplier": 1,
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "$oid": "63ed01ef4c37f93d0b797827" } "Id": { "$id": "63ed01ef4c37f93d0b797827" }
}, },
{ {
"StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva",
@ -29,7 +29,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "66664112af1177b5070ab882" } "Id": { "$id": "66664112af1177b5070ab882" }
} }
], ],
"PropertyTextHash": "DB7BF03C3FE6D0036A4DC30066A9A17E", "PropertyTextHash": "DB7BF03C3FE6D0036A4DC30066A9A17E",

View File

@ -1,7 +1,7 @@
{ {
"VendorInfo": { "VendorInfo": {
"_id": { "_id": {
"$oid": "598a090d9a4a313746fd1f24" "$id": "598a090d9a4a313746fd1f24"
}, },
"TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest", "TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest",
"ItemManifest": [ "ItemManifest": [
@ -23,7 +23,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "63ed01ef4c37f93d0b797674" "$id": "63ed01ef4c37f93d0b797674"
} }
}, },
{ {
@ -59,7 +59,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "63ed01ef4c37f93d0b797675" "$id": "63ed01ef4c37f93d0b797675"
} }
}, },
{ {
@ -95,7 +95,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "63ed01ef4c37f93d0b797676" "$id": "63ed01ef4c37f93d0b797676"
} }
}, },
{ {
@ -131,7 +131,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "63ed01ef4c37f93d0b797677" "$id": "63ed01ef4c37f93d0b797677"
} }
}, },
{ {
@ -157,7 +157,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a1" "$id": "6651291214e90115b91b50a1"
} }
}, },
{ {
@ -183,7 +183,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a2" "$id": "6651291214e90115b91b50a2"
} }
}, },
{ {
@ -209,7 +209,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a3" "$id": "6651291214e90115b91b50a3"
} }
}, },
{ {
@ -235,7 +235,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a4" "$id": "6651291214e90115b91b50a4"
} }
}, },
{ {
@ -261,7 +261,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a5" "$id": "6651291214e90115b91b50a5"
} }
}, },
{ {
@ -287,7 +287,7 @@
}, },
"AllowMultipurchase": true, "AllowMultipurchase": true,
"Id": { "Id": {
"$oid": "6651291214e90115b91b50a6" "$id": "6651291214e90115b91b50a6"
} }
} }
], ],

View File

@ -1,6 +1,6 @@
{ {
"VendorInfo": { "VendorInfo": {
"_id": { "$oid": "62a20ba667e5d3797540d831" }, "_id": { "$id": "62a20ba667e5d3797540d831" },
"TypeName": "/Lotus/Types/Game/VendorManifests/Zariman/ZarimanCommisionsManifestArchimedean", "TypeName": "/Lotus/Types/Game/VendorManifests/Zariman/ZarimanCommisionsManifestArchimedean",
"ItemManifest": [ "ItemManifest": [
{ {
@ -14,7 +14,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "6678b612aa3d8ee5c2597299" } "Id": { "$id": "6678b612aa3d8ee5c2597299" }
}, },
{ {
"StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskD", "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskD",
@ -27,7 +27,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "6678b612aa3d8ee5c259729a" } "Id": { "$id": "6678b612aa3d8ee5c259729a" }
}, },
{ {
"StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskC", "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskC",
@ -40,7 +40,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "6678b612aa3d8ee5c259729b" } "Id": { "$id": "6678b612aa3d8ee5c259729b" }
}, },
{ {
"StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskB", "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskB",
@ -53,7 +53,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "6678b612aa3d8ee5c259729c" } "Id": { "$id": "6678b612aa3d8ee5c259729c" }
}, },
{ {
"StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskA", "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Zariman/AchimedeanTaskA",
@ -66,7 +66,7 @@
"Expiry": { "$date": { "$numberLong": "9999999000000" } }, "Expiry": { "$date": { "$numberLong": "9999999000000" } },
"PurchaseQuantityLimit": 1, "PurchaseQuantityLimit": 1,
"AllowMultipurchase": false, "AllowMultipurchase": false,
"Id": { "$oid": "6678b612aa3d8ee5c259729d" } "Id": { "$id": "6678b612aa3d8ee5c259729d" }
} }
], ],
"PropertyTextHash": "F43F0ED811985EEF856970A8342EF322", "PropertyTextHash": "F43F0ED811985EEF856970A8342EF322",

View File

@ -8,7 +8,7 @@
"DrifterMelee": [ "DrifterMelee": [
{ {
"ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords",
"ItemId": { "$oid": "removed" } "ItemId": { "$id": "removed" }
} }
], ],
"FusionPoints": 0, "FusionPoints": 0,
@ -23,7 +23,7 @@
"SpaceWeaponBin": { "Slots": 4 }, "SpaceWeaponBin": { "Slots": 4 },
"SuitBin": { "Slots": 2 }, "SuitBin": { "Slots": 2 },
"WeaponBin": { "Slots": 8 }, "WeaponBin": { "Slots": 8 },
"LastInventorySync": { "$oid": "removed" }, "LastInventorySync": { "$id": "removed" },
"NextRefill": { "$date": { "$numberLong": "removed" } }, "NextRefill": { "$date": { "$numberLong": "removed" } },
"ActiveLandscapeTraps": [], "ActiveLandscapeTraps": [],
"ChallengeProgress": [], "ChallengeProgress": [],
@ -59,7 +59,7 @@
"Scoops": [], "Scoops": [],
"Sentinels": [], "Sentinels": [],
"SentinelWeapons": [], "SentinelWeapons": [],
"Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "123123" } }], "Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$id": "123123" } }],
"SpaceGuns": [], "SpaceGuns": [],
"SpaceMelee": [], "SpaceMelee": [],
"SpaceSuits": [], "SpaceSuits": [],

View File

@ -5,7 +5,7 @@
"RewardSeed": -5604904486637265640, "RewardSeed": -5604904486637265640,
"CrewMemberBin": { "Slots": 3 }, "CrewMemberBin": { "Slots": 3 },
"CrewShipSalvageBin": { "Slots": 8 }, "CrewShipSalvageBin": { "Slots": 8 },
"DrifterMelee": [{ "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemId": { "$oid": "647bb619e15fa43f0ee4b1b1" } }], "DrifterMelee": [{ "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemId": { "$id": "647bb619e15fa43f0ee4b1b1" } }],
"FusionPoints": 0, "FusionPoints": 0,
"MechBin": { "Slots": 4 }, "MechBin": { "Slots": 4 },
"OperatorAmpBin": { "Slots": 8 }, "OperatorAmpBin": { "Slots": 8 },
@ -18,7 +18,7 @@
"SpaceWeaponBin": { "Slots": 4 }, "SpaceWeaponBin": { "Slots": 4 },
"SuitBin": { "Slots": 2 }, "SuitBin": { "Slots": 2 },
"WeaponBin": { "Slots": 8 }, "WeaponBin": { "Slots": 8 },
"LastInventorySync": { "$oid": "647bb5d79f963c9d24668257" }, "LastInventorySync": { "$id": "647bb5d79f963c9d24668257" },
"NextRefill": { "$date": { "$numberLong": "1685829131" } }, "NextRefill": { "$date": { "$numberLong": "1685829131" } },
"ActiveLandscapeTraps": [], "ActiveLandscapeTraps": [],
"ChallengeProgress": [], "ChallengeProgress": [],

View File

@ -2,163 +2,736 @@
"SubscribedToEmails": 0, "SubscribedToEmails": 0,
"SubscribedToEmailsPersonalized": 0, "SubscribedToEmailsPersonalized": 0,
"RewardSeed": -5604904486637265640, "RewardSeed": -5604904486637265640,
"CrewMemberBin": { "Slots": 3 },
"CrewShipSalvageBin": { "Slots": 8 },
"DrifterMelee": [{ "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"FusionPoints": 0,
"MechBin": { "Slots": 4 },
"OperatorAmpBin": { "Slots": 8 },
"PveBonusLoadoutBin": { "Slots": 0 },
"PvpBonusLoadoutBin": { "Slots": 0 },
"RandomModBin": { "Slots": 15 },
"RegularCredits": 3000, "RegularCredits": 3000,
"SentinelBin": { "Slots": 10 }, "SentinelBin": {
"SpaceSuitBin": { "Slots": 4 }, "Slots": 10
"SpaceWeaponBin": { "Slots": 4 }, },
"SuitBin": { "Slots": 1 }, "SpaceSuitBin": {
"WeaponBin": { "Slots": 5 }, "Slots": 4
"DailyAffiliation": 16000, },
"DailyAffiliationCetus": 16000, "SpaceWeaponBin": {
"DailyAffiliationEntrati": 16000, "Slots": 4
"DailyAffiliationKahl": 16000, },
"DailyAffiliationLibrary": 16000, "SuitBin": {
"DailyAffiliationNecraloid": 16000, "Slots": 1
"DailyAffiliationPvp": 16000, },
"DailyAffiliationQuills": 16000, "WeaponBin": {
"DailyAffiliationSolaris": 16000, "Slots": 5
"DailyAffiliationVentkids": 16000, },
"DailyAffiliationVox": 16000, "Recipes": [],
"DailyAffiliationZariman": 16000, "ChallengeProgress": [
"DailyAffiliationCavia": 16000, ],
"DailyFocus": 250000, "Consumables": [
"DuviriInfo": { "Seed": 5898912197983600352, "NumCompletions": 0 }, {
"GiftsRemaining": 8, "ItemCount": 1,
"TradesRemaining": 0, "ItemType": "/Lotus/Types/Restoratives/Cipher"
"Recipes": [{ "ItemCount": 1, "ItemType": "/Lotus/Types/Recipes/Weapons/BoltonfaBlueprint" }], }
"SeasonChallengeHistory": [
{ "challenge": "SeasonDailySolveCiphers", "id": "001000220000000000000308" },
{ "challenge": "SeasonDailyVisitFeaturedDojo", "id": "001000230000000000000316" },
{ "challenge": "SeasonDailyKillEnemiesWithRadiation", "id": "001000230000000000000317" },
{ "challenge": "SeasonWeeklyCompleteSortie", "id": "001000230000000000000309" },
{ "challenge": "SeasonWeeklyVenusBounties", "id": "001000230000000000000310" },
{ "challenge": "SeasonWeeklyZarimanBountyHunter", "id": "001000230000000000000311" },
{ "challenge": "SeasonWeeklyCatchRarePlainsFish", "id": "001000230000000000000312" },
{ "challenge": "SeasonWeeklyKillArchgunEnemies", "id": "001000230000000000000313" },
{ "challenge": "SeasonWeeklyHardKillSilverGroveSpecters", "id": "001000230000000000000314" },
{ "challenge": "SeasonWeeklyHardKillRopalolyst", "id": "001000230000000000000315" }
], ],
"StoryModeChoice": "WARFRAME",
"ChallengeProgress": [{ "Progress": 2, "Name": "EMGetKills" }],
"ChallengesFixVersion": 6,
"ActiveQuest": "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain",
"Consumables": [{ "ItemCount": 1, "ItemType": "/Lotus/Types/Restoratives/LisetAutoHack" }],
"DataKnives": [{ "ItemType": "/Lotus/Weapons/Tenno/HackingDevices/TnHackingDevice/TnHackingDeviceWeapon", "XP": 450000, "ItemId": { "$oid": "647bd274f22fc794a2cd3d33" } }],
"FlavourItems": [ "FlavourItems": [
{ "ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1" },
{ "ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2" },
{ "ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3" },
{ "ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4" }
],
"LongGuns": [{ "ItemType": "/Lotus/Weapons/MK1Series/MK1Paris", "XP": 0, "Configs": [{}, {}, {}], "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"Melee": [{ "ItemType": "/Lotus/Weapons/Tenno/Melee/LongSword/LongSword", "XP": 0, "Configs": [{}, {}, {}], "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"Pistols": [{ "ItemType": "/Lotus/Weapons/MK1Series/MK1Kunai", "XP": 0, "Configs": [{}, {}, {}], "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"PlayedParkourTutorial": true,
"PremiumCreditsFree": 50,
"QuestKeys": [{ "ItemType": "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain" }],
"RawUpgrades": [{ "ItemCount": 1, "LastAdded": { "$oid": "6450f9bfe0714a4d6703f05f" }, "ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarShieldMaxMod" }],
"ReceivedStartingGear": true,
"Scoops": [{ "ItemType": "/Lotus/Weapons/Tenno/Speedball/SpeedballWeaponTest", "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"Suits": [{ "ItemType": "/Lotus/Powersuits/Volt/Volt", "XP": 0, "Configs": [{}, {}, {}], "UpgradeVer": 101, "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"TrainingRetriesLeft": 0,
"WeaponSkins": [{ "ItemType": "/Lotus/Upgrades/Skins/Volt/VoltHelmet", "ItemId": { "$oid": "647bd27cf856530b4f3bf343" } }],
"LastInventorySync": { "$oid": "647bd27cf856530b4f3bf343" },
"NextRefill": { "$date": { "$numberLong": "1685829131" } },
"ActiveLandscapeTraps": [],
"CrewMembers": [],
"CrewShips": [],
"CrewShipHarnesses": [],
"CrewShipSalvagedWeapons": [],
"CrewShipSalvagedWeaponSkins": [],
"CrewShipWeapons": [],
"CrewShipWeaponSkins": [],
"DrifterGuns": [],
"Drones": [],
"Horses": [
{ {
"ItemType": "/Lotus/Types/NeutralCreatures/ErsatzHorse/ErsatzHorsePowerSuit", "ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1"
},
{
"ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2"
},
{
"ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3"
},
{
"ItemType": "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4"
}
],
"LongGuns": [
{
"ItemType": "/Lotus/Weapons/Tenno/Bows/HuntingBow",
"XP": 1600000,
"ItemId": {
"$id": "66da4e67cf73a8d6e04e7e9a"
}
}
],
"Melee": [
{
"ItemType": "/Lotus/Weapons/Tenno/Melee/LongSword/LongSword",
"XP": 1600000,
"Configs": [ "Configs": [
{ {},
"Skins": ["", "", "/Lotus/Upgrades/Skins/Horse/ErsatzHorseTailDefault"] {},
}, {}
{ ],
"Skins": ["", "", "/Lotus/Upgrades/Skins/Horse/ErsatzHorseTailDefault"] "ItemId": {
}, "$id": "66da4e73964ed8bf9c170702"
{ }
"Skins": ["", "", "/Lotus/Upgrades/Skins/Horse/ErsatzHorseTailDefault"]
} }
], ],
"Pistols": [
{
"ItemType": "/Lotus/Weapons/Tenno/Pistol/Pistol",
"XP": 1600000,
"Configs": [
{},
{},
{}
],
"ItemId": {
"$id": "66da4e777341e52ea2e36047"
}
}
],
"RawUpgrades": [
{
"ItemCount": 1,
"LastAdded": {
"$id": "66da4e7bf2af10b3817fad4d"
},
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarShieldMaxMod"
}
],
"ReceivedStartingGear": true,
"TauntHistory": [
{
"node": "StarchartTutorial"
}
],
"Suits": [
{
"ItemType": "/Lotus/Powersuits/Saryn/Saryn",
"XP": 1600000,
"UpgradeVer": 101, "UpgradeVer": 101,
"ItemId": { "$oid": "647bd27cf856530b4f3bf343" } "ItemId": {
"$id": "66da532b09ec41258ff159b8"
}
},
{
"ItemType": "/Lotus/Powersuits/Banshee/Banshee",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e85a1060bb337f16c49"
}
},
{
"ItemType": "/Lotus/Powersuits/Ember/Ember",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e87dad87a5b6379f3af"
}
},
{
"ItemType": "/Lotus/Powersuits/Excalibur/Excalibur",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e8939f75193b2f4d1c0"
}
},
{
"ItemType": "/Lotus/Powersuits/Excalibur/ExcaliburPrime",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e8cb68236528b48024a"
}
},
{
"ItemType": "/Lotus/Powersuits/Frost/Frost",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e8ecef38f3987982819"
}
},
{
"ItemType": "/Lotus/Powersuits/Frost/FrostPrime",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e91f299b711dcdda960"
}
},
{
"ItemType": "/Lotus/Powersuits/Jade/Jade",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e96ac68c487797efd62"
}
},
{
"ItemType": "/Lotus/Powersuits/Loki/Loki",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e9a036377a144b18384"
}
},
{
"ItemType": "/Lotus/Powersuits/Mag/Mag",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4e9c87f5e8946b956e0c"
}
},
{
"ItemType": "/Lotus/Powersuits/Ninja/Ninja",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4ea00612f3c7a763cdfc"
}
},
{
"ItemType": "/Lotus/Powersuits/Rhino/Rhino",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4ea4c2339c01b20ee6e1"
}
},
{
"ItemType": "/Lotus/Powersuits/Trinity/Trinity",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4ea80785c8d085c03bdd"
}
},
{
"ItemType": "/Lotus/Powersuits/Volt/Volt",
"XP": 1600000,
"UpgradeVer": 101,
"ItemId": {
"$id": "66da4eaad4b9bee7977f22f4"
}
}
],
"WeaponSkins": [
{
"ItemType": "/Lotus/Upgrades/Skins/Volt/VoltHelmet",
"ItemId": {
"$id": "66da4eae34abc831f41f659b"
}
} }
], ],
"Hoverboards": [],
"KubrowPets": [],
"KubrowPetEggs": [],
"KubrowPetPrints": [],
"MechSuits": [],
"MoaPets": [],
"OperatorAmps": [],
"OperatorLoadOuts": [],
"AdultOperatorLoadOuts": [],
"KahlLoadOuts": [],
"PendingRecipes": [], "PendingRecipes": [],
"TrainingDate": 0, "TrainingDate": 0,
"PlayerLevel": 0, "PlayerLevel": 0,
"PersonalGoalProgress": [], "CompletedAlerts": [],
"PersonalTechProjects": [],
"QualifyingInvasions": [],
"RepVotes": [],
"Sentinels": [], "Sentinels": [],
"SentinelWeapons": [], "SentinelWeapons": [],
"SpaceGuns": [],
"SpaceMelee": [],
"SpaceSuits": [],
"SpecialItems": [], "SpecialItems": [],
"StepSequencers": [], "StepSequencers": [],
"Upgrades": [], "Upgrades": [
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponArmorPiercingDamageMod",
"ItemId": {
"$id": "66da4eb5d706a7112d4894f2"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponCritChanceMod",
"ItemId": {
"$id": "66da4eb7eef100b1f891583f"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponCritDamageMod",
"ItemId": {
"$id": "66da4ebaa75d24538a62c7a1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponElectricityDamageMod",
"ItemId": {
"$id": "66da4ebc03b11c2026261dda"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponFireDamageMod",
"ItemId": {
"$id": "66da4ebee8b2b0bbe0aa7521"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponFireRateMod",
"ItemId": {
"$id": "66da4ec11aaddcd4c7052165"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponFreezeDamageMod",
"ItemId": {
"$id": "66da4ec3a18a84596c48fd0b"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponMeleeChargeRateMod",
"ItemId": {
"$id": "66da4ec68f900c9dce77f25e"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponMeleeDamageMod",
"ItemId": {
"$id": "66da4ecacd32891e29b87040"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponMeleeHeavyDamageMod",
"ItemId": {
"$id": "66da4ecc6ecdc3addd7fbbc5"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Melee/WeaponStunChanceMod",
"ItemId": {
"$id": "66da4ed133c3092002531ea0"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponArmorPiercingDamageMod",
"ItemId": {
"$id": "66da4ed3ca0126f4e0904987"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponCritChanceMod",
"ItemId": {
"$id": "66da4ed6e4d482a2fa7f4ae6"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponCritDamageMod",
"ItemId": {
"$id": "66da4ed8f11f76e0ec55734e"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponElectricityDamageMod",
"ItemId": {
"$id": "66da4edbecd4c71b40426652"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponFireDamageMod",
"ItemId": {
"$id": "66da4eddff15a60f25f27fe3"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponFireRateMod",
"ItemId": {
"$id": "66da4edfedd2c737249f27b1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponFreezeDamageMod",
"ItemId": {
"$id": "66da4ee197751c11edbe480c"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponStunChanceMod",
"ItemId": {
"$id": "66da4ee3099f9876c3d5f230"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponAmmoMaxMod",
"ItemId": {
"$id": "66da4ee5719f74045b713f58"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponClipMaxMod",
"ItemId": {
"$id": "66da4ee8f86349fd87a0c24d"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponDamageAmountMod",
"ItemId": {
"$id": "66da4eea5c0f3babebe60c34"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponFireIterationsMod",
"ItemId": {
"$id": "66da4eed5b41fbe202fe36b4"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponPunctureDepthMod",
"ItemId": {
"$id": "66da4eefaa75316cc3ab55f9"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Pistol/WeaponReloadSpeedMod",
"ItemId": {
"$id": "66da4ef1e2a041e410a4276c"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponArmorPiercingDamageMod",
"ItemId": {
"$id": "66da4ef38b45f124a570e1f8"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponCritChanceMod",
"ItemId": {
"$id": "66da4ef6dacaaa69d2fdbd8b"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponCritDamageMod",
"ItemId": {
"$id": "66da4ef9d525b197f6f81473"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponElectricityDamageMod",
"ItemId": {
"$id": "66da4efc6fe23457bf37d021"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponFireDamageMod",
"ItemId": {
"$id": "66da4efe6401fdd0b48c6880"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponFireRateMod",
"ItemId": {
"$id": "66da4f06b7241e0e207cead3"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponFreezeDamageMod",
"ItemId": {
"$id": "66da4f0808923bd61b6c2053"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponStunChanceMod",
"ItemId": {
"$id": "66da4f0b02a680f83e14001b"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponAmmoMaxMod",
"ItemId": {
"$id": "66da4f0d6df0e0588eb4b0d1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponClipMaxMod",
"ItemId": {
"$id": "66da4f10009fdfcf69ab2ec1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponDamageAmountMod",
"ItemId": {
"$id": "66da4f147ec9bcddfc5c07ad"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponFireIterationsMod",
"ItemId": {
"$id": "66da4f17f2368e85f09a853b"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponPunctureDepthMod",
"ItemId": {
"$id": "66da4f1aae38e21d01a54857"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Rifle/WeaponReloadSpeedMod",
"ItemId": {
"$id": "66da4f1ca1256c2711fa7f05"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Sentinel/SentinelArmourMod",
"ItemId": {
"$id": "66da4f1eddde58b69f855d59"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Sentinel/SentinelHealthMaxMod",
"ItemId": {
"$id": "66da4f20956388914102602d"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Sentinel/SentinelShieldMaxMod",
"ItemId": {
"$id": "66da4f23e36bec4611cdc6a5"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Sentinel/SentinelShieldRechargeRateMod",
"ItemId": {
"$id": "66da4f26cc54a853f617560e"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponArmorPiercingDamageMod",
"ItemId": {
"$id": "66da4f28276333b2a81b2dd3"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponCritChanceMod",
"ItemId": {
"$id": "66da4f2a809873a6291f6360"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponCritDamageMod",
"ItemId": {
"$id": "66da4f2e1d8300362cd6c57c"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponElectricityDamageMod",
"ItemId": {
"$id": "66da4f30737bbae85f49943e"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponFireDamageMod",
"ItemId": {
"$id": "66da4f321702c6013aa98f3f"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponFireRateMod",
"ItemId": {
"$id": "66da4f3564da6f4896163167"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponFreezeDamageMod",
"ItemId": {
"$id": "66da4f38468122372c30f7f1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponStunChanceMod",
"ItemId": {
"$id": "66da4f38468122372c30f7f1"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponAmmoMaxMod",
"ItemId": {
"$id": "66da4f3c2571c97042d79e6d"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponClipMaxMod",
"ItemId": {
"$id": "66da4f3fcf5e3e74f2652f5e"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponDamageAmountMod",
"ItemId": {
"$id": "66da4f430649a4b84f65ce37"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponFireIterationsMod",
"ItemId": {
"$id": "66da4f45ae2b2ad6215270a0"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponPunctureDepthMod",
"ItemId": {
"$id": "66da4f4849a8970ba57019d0"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Shotgun/WeaponReloadSpeedMod",
"ItemId": {
"$id": "66da4f4b5acc3304578859bf"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarAbilityDurationMod",
"ItemId": {
"$id": "66da4f4d7ab7e4017e17955f"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarAbilityEfficiencyMod",
"ItemId": {
"$id": "66da4f4f0af01429193da436"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarAbilityRangeMod",
"ItemId": {
"$id": "66da4f51a94c498b42a03491"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarAbilityStrengthMod",
"ItemId": {
"$id": "66da4f5483fb4b98ac12b00d"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarArmourMod",
"ItemId": {
"$id": "66da4f5694b794ae96c5f470"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarEnemyRadarMod",
"ItemId": {
"$id": "66da4f59b0ecba3d09139e48"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarHealthMaxMod",
"ItemId": {
"$id": "66da4f5eb5770f99bf18d831"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarLootRadarMod",
"ItemId": {
"$id": "66da4f63bd77ab6e4842a88b"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarPowerMaxMod",
"ItemId": {
"$id": "66da4f660b3c3565fd36d4ab"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarShieldMaxMod",
"ItemId": {
"$id": "66da4f6884fc768ed81ae47a"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarShieldRechargeRateMod",
"ItemId": {
"$id": "66da4f6be96044a294480118"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarSprintSpeedMod",
"ItemId": {
"$id": "66da4f6db2ac0720a4bf2409"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarStaminaMaxMod",
"ItemId": {
"$id": "66da4f70ec6f7abf7520a356"
}
},
{
"ItemType": "/Lotus/Upgrades/Mods/Warframe/AvatarStaminaRechargeRateMod",
"ItemId": {
"$id": "66da4f738ea387a9a484294d"
}
}
],
"Boosters": [], "Boosters": [],
"EmailItems": [], "EmailItems": [],
"FocusUpgrades": [],
"FusionTreasures": [],
"LeagueTickets": [], "LeagueTickets": [],
"LevelKeys": [],
"LoreFragmentScans": [],
"MiscItems": [], "MiscItems": [],
"PendingSpectreLoadouts": [],
"Quests": [],
"Robotics": [], "Robotics": [],
"ShipDecorations": [], "XPInfo": [
"SpectreLoadouts": [], {
"XPInfo": [], "ItemType": "/Lotus/Powersuits/Saryn/Saryn",
"CrewShipAmmo": [], "XP": 1600000
"CrewShipRawSalvage": [],
"EvolutionProgress": [],
"Missions": [],
"TauntHistory": [],
"CompletedSyndicates": [],
"UsedDailyDeals": [],
"LibraryAvailableDailyTaskInfo": {
"EnemyTypes": ["/Lotus/Types/Enemies/Orokin/OrokinBladeSawmanAvatar"],
"EnemyLocTag": "/Lotus/Language/Game/OrokinBladeSawman",
"EnemyIcon": "/Lotus/Interface/Icons/Npcs/Orokin/OrokinBladeSawman.png",
"ScansRequired": 4,
"RewardStoreItem": "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/UncommonFusionBundle",
"RewardQuantity": 10,
"RewardStanding": 10000
}, },
"HasContributedToDojo": false, {
"HasResetAccount": false, "ItemType": "/Lotus/Powersuits/Banshee/Banshee",
"PendingCoupon": { "Expiry": { "$date": { "$numberLong": "0" } }, "Discount": 0 }, "XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Ember/Ember",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Excalibur/Excalibur",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Excalibur/ExcaliburPrime",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Frost/Frost",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Frost/FrostPrime",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Jade/Jade",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Loki/Loki",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Mag/Mag",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Ninja/Ninja",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Rhino/Rhino",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Trinity/Trinity",
"XP": 1600000
},
{
"ItemType": "/Lotus/Powersuits/Volt/Volt",
"XP": 1600000
},
{
"ItemType": "/Lotus/Weapons/Tenno/Bows/HuntingBow",
"XP": 1600000
},
{
"ItemType": "/Lotus/Weapons/Tenno/Melee/LongSword/LongSword",
"XP": 1600000
},
{
"ItemType": "/Lotus/Weapons/Tenno/Pistol/Pistol",
"XP": 1600000
}
],
"Missions": [
{
"Tag": "SolNode103",
"Completes": 1,
"BestRating": 0.2
}
],
"PremiumCredits": 50 "PremiumCredits": 50
} }

View File

@ -23,7 +23,7 @@
], ],
"Sorties": [ "Sorties": [
{ {
"_id": { "$oid": "663a4c7d4d932c97c0a3acd7" }, "_id": { "$id": "663a4c7d4d932c97c0a3acd7" },
"Activation": { "$date": { "$numberLong": "1715097600000" } }, "Activation": { "$date": { "$numberLong": "1715097600000" } },
"Expiry": { "$date": { "$numberLong": "1715184000000" } }, "Expiry": { "$date": { "$numberLong": "1715184000000" } },
"Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards",
@ -40,7 +40,7 @@
], ],
"LiteSorties": [ "LiteSorties": [
{ {
"_id": { "$oid": "663819fd1cec9ebe9d83a06e" }, "_id": { "$id": "663819fd1cec9ebe9d83a06e" },
"Activation": { "$date": { "$numberLong": "1714953600000" } }, "Activation": { "$date": { "$numberLong": "1714953600000" } },
"Expiry": { "$date": { "$numberLong": "1715558400000" } }, "Expiry": { "$date": { "$numberLong": "1715558400000" } },
"Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards",
@ -55,7 +55,7 @@
], ],
"SyndicateMissions": [ "SyndicateMissions": [
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48049" }, "_id": { "$id": "663a4fc5ba6f84724fa48049" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "ArbitersSyndicate", "Tag": "ArbitersSyndicate",
@ -63,7 +63,7 @@
"Nodes": ["SolNode223", "SolNode89", "SolNode146", "SolNode212", "SolNode167", "SolNode48", "SolNode78"] "Nodes": ["SolNode223", "SolNode89", "SolNode146", "SolNode212", "SolNode167", "SolNode48", "SolNode78"]
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804a" }, "_id": { "$id": "663a4fc5ba6f84724fa4804a" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "CephalonSudaSyndicate", "Tag": "CephalonSudaSyndicate",
@ -71,7 +71,7 @@
"Nodes": ["SolNode36", "SolNode59", "SettlementNode12", "SolNode61", "SolNode12", "SolNode138", "SolNode72"] "Nodes": ["SolNode36", "SolNode59", "SettlementNode12", "SolNode61", "SolNode12", "SolNode138", "SolNode72"]
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804c" }, "_id": { "$id": "663a4fc5ba6f84724fa4804c" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "EventSyndicate", "Tag": "EventSyndicate",
@ -79,7 +79,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804b" }, "_id": { "$id": "663a4fc5ba6f84724fa4804b" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "NecraloidSyndicate", "Tag": "NecraloidSyndicate",
@ -87,7 +87,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804d" }, "_id": { "$id": "663a4fc5ba6f84724fa4804d" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "KahlSyndicate", "Tag": "KahlSyndicate",
@ -95,7 +95,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804e" }, "_id": { "$id": "663a4fc5ba6f84724fa4804e" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "NewLokaSyndicate", "Tag": "NewLokaSyndicate",
@ -103,7 +103,7 @@
"Nodes": ["SolNode101", "SolNode224", "SolNode205", "SettlementNode2", "SolNode171", "SolNode188", "SolNode75"] "Nodes": ["SolNode101", "SolNode224", "SolNode205", "SettlementNode2", "SolNode171", "SolNode188", "SolNode75"]
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4804f" }, "_id": { "$id": "663a4fc5ba6f84724fa4804f" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "QuillsSyndicate", "Tag": "QuillsSyndicate",
@ -111,7 +111,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48050" }, "_id": { "$id": "663a4fc5ba6f84724fa48050" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "PerrinSyndicate", "Tag": "PerrinSyndicate",
@ -119,7 +119,7 @@
"Nodes": ["SolNode39", "SolNode14", "SolNode203", "SolNode100", "SolNode130", "SolNode64", "SettlementNode15"] "Nodes": ["SolNode39", "SolNode14", "SolNode203", "SolNode100", "SolNode130", "SolNode64", "SettlementNode15"]
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48052" }, "_id": { "$id": "663a4fc5ba6f84724fa48052" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegion3Syndicate", "Tag": "RadioLegion3Syndicate",
@ -127,7 +127,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48051" }, "_id": { "$id": "663a4fc5ba6f84724fa48051" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegion2Syndicate", "Tag": "RadioLegion2Syndicate",
@ -135,7 +135,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48053" }, "_id": { "$id": "663a4fc5ba6f84724fa48053" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission10Syndicate", "Tag": "RadioLegionIntermission10Syndicate",
@ -143,7 +143,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48057" }, "_id": { "$id": "663a4fc5ba6f84724fa48057" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission5Syndicate", "Tag": "RadioLegionIntermission5Syndicate",
@ -151,7 +151,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48055" }, "_id": { "$id": "663a4fc5ba6f84724fa48055" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission3Syndicate", "Tag": "RadioLegionIntermission3Syndicate",
@ -159,7 +159,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48056" }, "_id": { "$id": "663a4fc5ba6f84724fa48056" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission4Syndicate", "Tag": "RadioLegionIntermission4Syndicate",
@ -167,7 +167,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48054" }, "_id": { "$id": "663a4fc5ba6f84724fa48054" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission2Syndicate", "Tag": "RadioLegionIntermission2Syndicate",
@ -175,7 +175,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48058" }, "_id": { "$id": "663a4fc5ba6f84724fa48058" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission6Syndicate", "Tag": "RadioLegionIntermission6Syndicate",
@ -183,7 +183,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805c" }, "_id": { "$id": "663a4fc5ba6f84724fa4805c" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermissionSyndicate", "Tag": "RadioLegionIntermissionSyndicate",
@ -191,7 +191,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805a" }, "_id": { "$id": "663a4fc5ba6f84724fa4805a" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission8Syndicate", "Tag": "RadioLegionIntermission8Syndicate",
@ -199,7 +199,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805b" }, "_id": { "$id": "663a4fc5ba6f84724fa4805b" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission9Syndicate", "Tag": "RadioLegionIntermission9Syndicate",
@ -207,7 +207,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48059" }, "_id": { "$id": "663a4fc5ba6f84724fa48059" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionIntermission7Syndicate", "Tag": "RadioLegionIntermission7Syndicate",
@ -215,7 +215,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805d" }, "_id": { "$id": "663a4fc5ba6f84724fa4805d" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RadioLegionSyndicate", "Tag": "RadioLegionSyndicate",
@ -223,7 +223,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805f" }, "_id": { "$id": "663a4fc5ba6f84724fa4805f" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "VentKidsSyndicate", "Tag": "VentKidsSyndicate",
@ -231,7 +231,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa4805e" }, "_id": { "$id": "663a4fc5ba6f84724fa4805e" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "RedVeilSyndicate", "Tag": "RedVeilSyndicate",
@ -239,7 +239,7 @@
"Nodes": ["SolNode226", "SolNode79", "SolNode216", "SettlementNode11", "SolNode56", "SolNode41", "SolNode23"] "Nodes": ["SolNode226", "SolNode79", "SolNode216", "SettlementNode11", "SolNode56", "SolNode41", "SolNode23"]
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48060" }, "_id": { "$id": "663a4fc5ba6f84724fa48060" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "VoxSyndicate", "Tag": "VoxSyndicate",
@ -247,7 +247,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a4fc5ba6f84724fa48061" }, "_id": { "$id": "663a4fc5ba6f84724fa48061" },
"Activation": { "$date": { "$numberLong": "1715097541439" } }, "Activation": { "$date": { "$numberLong": "1715097541439" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "SteelMeridianSyndicate", "Tag": "SteelMeridianSyndicate",
@ -255,7 +255,7 @@
"Nodes": ["SolNode27", "SolNode107", "SolNode214", "SettlementNode1", "SolNode177", "SolNode141", "SolNode408"] "Nodes": ["SolNode27", "SolNode107", "SolNode214", "SettlementNode1", "SolNode177", "SolNode141", "SolNode408"]
}, },
{ {
"_id": { "$oid": "663a71c80000000000000002" }, "_id": { "$id": "663a71c80000000000000002" },
"Activation": { "$date": { "$numberLong": "1715106248403" } }, "Activation": { "$date": { "$numberLong": "1715106248403" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "EntratiSyndicate", "Tag": "EntratiSyndicate",
@ -341,7 +341,7 @@
] ]
}, },
{ {
"_id": { "$oid": "663a71c80000000000000004" }, "_id": { "$id": "663a71c80000000000000004" },
"Activation": { "$date": { "$numberLong": "1715106248403" } }, "Activation": { "$date": { "$numberLong": "1715106248403" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "EntratiLabSyndicate", "Tag": "EntratiLabSyndicate",
@ -349,7 +349,7 @@
"Nodes": [] "Nodes": []
}, },
{ {
"_id": { "$oid": "663a71c80000000000000008" }, "_id": { "$id": "663a71c80000000000000008" },
"Activation": { "$date": { "$numberLong": "1715106248403" } }, "Activation": { "$date": { "$numberLong": "1715106248403" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "CetusSyndicate", "Tag": "CetusSyndicate",
@ -415,7 +415,7 @@
] ]
}, },
{ {
"_id": { "$oid": "663a71c80000000000000025" }, "_id": { "$id": "663a71c80000000000000025" },
"Activation": { "$date": { "$numberLong": "1715106248403" } }, "Activation": { "$date": { "$numberLong": "1715106248403" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "SolarisSyndicate", "Tag": "SolarisSyndicate",
@ -481,7 +481,7 @@
] ]
}, },
{ {
"_id": { "$oid": "663a71c80000000000000029" }, "_id": { "$id": "663a71c80000000000000029" },
"Activation": { "$date": { "$numberLong": "1715106248403" } }, "Activation": { "$date": { "$numberLong": "1715106248403" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Tag": "ZarimanSyndicate", "Tag": "ZarimanSyndicate",
@ -491,7 +491,7 @@
], ],
"ActiveMissions": [ "ActiveMissions": [
{ {
"_id": { "$oid": "663a7509d93367863785932d" }, "_id": { "$id": "663a7509d93367863785932d" },
"Region": 15, "Region": 15,
"Seed": 80795, "Seed": 80795,
"Activation": { "$date": { "$numberLong": "1715107081517" } }, "Activation": { "$date": { "$numberLong": "1715107081517" } },
@ -502,7 +502,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a75f959a5964cadb39879" }, "_id": { "$id": "663a75f959a5964cadb39879" },
"Region": 19, "Region": 19,
"Seed": 32067, "Seed": 32067,
"Activation": { "$date": { "$numberLong": "1715107321237" } }, "Activation": { "$date": { "$numberLong": "1715107321237" } },
@ -513,7 +513,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a779d3e347839ff301814" }, "_id": { "$id": "663a779d3e347839ff301814" },
"Region": 7, "Region": 7,
"Seed": 51739, "Seed": 51739,
"Activation": { "$date": { "$numberLong": "1715107741454" } }, "Activation": { "$date": { "$numberLong": "1715107741454" } },
@ -523,7 +523,7 @@
"Modifier": "VoidT3" "Modifier": "VoidT3"
}, },
{ {
"_id": { "$oid": "663a77d916c199f4644ee67d" }, "_id": { "$id": "663a77d916c199f4644ee67d" },
"Region": 17, "Region": 17,
"Seed": 61179, "Seed": 61179,
"Activation": { "$date": { "$numberLong": "1715107801647" } }, "Activation": { "$date": { "$numberLong": "1715107801647" } },
@ -533,7 +533,7 @@
"Modifier": "VoidT6" "Modifier": "VoidT6"
}, },
{ {
"_id": { "$oid": "663a78c98a609b49b8410726" }, "_id": { "$id": "663a78c98a609b49b8410726" },
"Region": 3, "Region": 3,
"Seed": 9520, "Seed": 9520,
"Activation": { "$date": { "$numberLong": "1715108041501" } }, "Activation": { "$date": { "$numberLong": "1715108041501" } },
@ -544,7 +544,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a7df15eeabaac79b0a061" }, "_id": { "$id": "663a7df15eeabaac79b0a061" },
"Region": 6, "Region": 6,
"Seed": 48861, "Seed": 48861,
"Activation": { "$date": { "$numberLong": "1715109361974" } }, "Activation": { "$date": { "$numberLong": "1715109361974" } },
@ -555,7 +555,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a7df25eeabaac79b0a062" }, "_id": { "$id": "663a7df25eeabaac79b0a062" },
"Region": 5, "Region": 5,
"Seed": 13550, "Seed": 13550,
"Activation": { "$date": { "$numberLong": "1715109361974" } }, "Activation": { "$date": { "$numberLong": "1715109361974" } },
@ -566,7 +566,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a83cdec0d5181435f1324" }, "_id": { "$id": "663a83cdec0d5181435f1324" },
"Region": 19, "Region": 19,
"Seed": 39392, "Seed": 39392,
"Activation": { "$date": { "$numberLong": "1715110861506" } }, "Activation": { "$date": { "$numberLong": "1715110861506" } },
@ -576,7 +576,7 @@
"Modifier": "VoidT5" "Modifier": "VoidT5"
}, },
{ {
"_id": { "$oid": "663a83cdec0d5181435f1325" }, "_id": { "$id": "663a83cdec0d5181435f1325" },
"Region": 19, "Region": 19,
"Seed": 88668, "Seed": 88668,
"Activation": { "$date": { "$numberLong": "1715110861506" } }, "Activation": { "$date": { "$numberLong": "1715110861506" } },
@ -586,7 +586,7 @@
"Modifier": "VoidT5" "Modifier": "VoidT5"
}, },
{ {
"_id": { "$oid": "663a83cdec0d5181435f1326" }, "_id": { "$id": "663a83cdec0d5181435f1326" },
"Region": 19, "Region": 19,
"Seed": 73823, "Seed": 73823,
"Activation": { "$date": { "$numberLong": "1715110861506" } }, "Activation": { "$date": { "$numberLong": "1715110861506" } },
@ -596,7 +596,7 @@
"Modifier": "VoidT5" "Modifier": "VoidT5"
}, },
{ {
"_id": { "$oid": "663a878d23d1514873170466" }, "_id": { "$id": "663a878d23d1514873170466" },
"Region": 9, "Region": 9,
"Seed": 88696, "Seed": 88696,
"Activation": { "$date": { "$numberLong": "1715111821951" } }, "Activation": { "$date": { "$numberLong": "1715111821951" } },
@ -607,7 +607,7 @@
"Hard": true "Hard": true
}, },
{ {
"_id": { "$oid": "663a887d4903098c10992fe6" }, "_id": { "$id": "663a887d4903098c10992fe6" },
"Region": 6, "Region": 6,
"Seed": 66337, "Seed": 66337,
"Activation": { "$date": { "$numberLong": "1715112061729" } }, "Activation": { "$date": { "$numberLong": "1715112061729" } },
@ -617,7 +617,7 @@
"Modifier": "VoidT2" "Modifier": "VoidT2"
}, },
{ {
"_id": { "$oid": "663a887d4903098c10992fe7" }, "_id": { "$id": "663a887d4903098c10992fe7" },
"Region": 10, "Region": 10,
"Seed": 5135, "Seed": 5135,
"Activation": { "$date": { "$numberLong": "1715112061729" } }, "Activation": { "$date": { "$numberLong": "1715112061729" } },
@ -627,7 +627,7 @@
"Modifier": "VoidT2" "Modifier": "VoidT2"
}, },
{ {
"_id": { "$oid": "663a8931586c301b1fbe63d3" }, "_id": { "$id": "663a8931586c301b1fbe63d3" },
"Region": 15, "Region": 15,
"Seed": 32180, "Seed": 32180,
"Activation": { "$date": { "$numberLong": "1715112241196" } }, "Activation": { "$date": { "$numberLong": "1715112241196" } },
@ -637,7 +637,7 @@
"Modifier": "VoidT4" "Modifier": "VoidT4"
}, },
{ {
"_id": { "$oid": "663a8931586c301b1fbe63d4" }, "_id": { "$id": "663a8931586c301b1fbe63d4" },
"Region": 12, "Region": 12,
"Seed": 22521, "Seed": 22521,
"Activation": { "$date": { "$numberLong": "1715112241196" } }, "Activation": { "$date": { "$numberLong": "1715112241196" } },
@ -647,7 +647,7 @@
"Modifier": "VoidT4" "Modifier": "VoidT4"
}, },
{ {
"_id": { "$oid": "663a8931586c301b1fbe63d5" }, "_id": { "$id": "663a8931586c301b1fbe63d5" },
"Region": 2, "Region": 2,
"Seed": 28500, "Seed": 28500,
"Activation": { "$date": { "$numberLong": "1715112241196" } }, "Activation": { "$date": { "$numberLong": "1715112241196" } },
@ -657,7 +657,7 @@
"Modifier": "VoidT1" "Modifier": "VoidT1"
}, },
{ {
"_id": { "$oid": "663a8931586c301b1fbe63d6" }, "_id": { "$id": "663a8931586c301b1fbe63d6" },
"Region": 3, "Region": 3,
"Seed": 24747, "Seed": 24747,
"Activation": { "$date": { "$numberLong": "1715112241196" } }, "Activation": { "$date": { "$numberLong": "1715112241196" } },
@ -667,7 +667,7 @@
"Modifier": "VoidT1" "Modifier": "VoidT1"
}, },
{ {
"_id": { "$oid": "663a8931586c301b1fbe63d7" }, "_id": { "$id": "663a8931586c301b1fbe63d7" },
"Region": 17, "Region": 17,
"Seed": 63914, "Seed": 63914,
"Activation": { "$date": { "$numberLong": "1715112241196" } }, "Activation": { "$date": { "$numberLong": "1715112241196" } },
@ -679,19 +679,19 @@
} }
], ],
"NodeOverrides": [ "NodeOverrides": [
{ "_id": { "$oid": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true }, { "_id": { "$id": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true },
{ "_id": { "$oid": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true }, { "_id": { "$id": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true },
{ "_id": { "$oid": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true }, { "_id": { "$id": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true },
{ "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9969639 }, { "_id": { "$id": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9969639 },
{ {
"_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, "_id": { "$id": "5b8817c2bd4f253264d6aa91" },
"Node": "EarthHUB", "Node": "EarthHUB",
"Hide": false, "Hide": false,
"LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB", "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB",
"Activation": { "$date": { "$numberLong": "1535646600000" } } "Activation": { "$date": { "$numberLong": "1535646600000" } }
}, },
{ {
"_id": { "$oid": "5d24d1f674491d51f8d44473" }, "_id": { "$id": "5d24d1f674491d51f8d44473" },
"Node": "MercuryHUB", "Node": "MercuryHUB",
"Hide": true, "Hide": true,
"LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid",
@ -700,7 +700,7 @@
], ],
"VoidTraders": [ "VoidTraders": [
{ {
"_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, "_id": { "$id": "5d1e07a0a38e4a4fdd7cefca" },
"Activation": { "$date": { "$numberLong": "0" } }, "Activation": { "$date": { "$numberLong": "0" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Character": "Baro'Ki Teel", "Character": "Baro'Ki Teel",
@ -736,7 +736,7 @@
], ],
"PrimeVaultTraders": [ "PrimeVaultTraders": [
{ {
"_id": { "$oid": "631f8c4ac36af423770eaa97" }, "_id": { "$id": "631f8c4ac36af423770eaa97" },
"Activation": { "$date": { "$numberLong": "1712858400000" } }, "Activation": { "$date": { "$numberLong": "1712858400000" } },
"InitialStartDate": { "$date": { "$numberLong": "9999999999999" } }, "InitialStartDate": { "$date": { "$numberLong": "9999999999999" } },
"Node": "TradeHUB1", "Node": "TradeHUB1",
@ -896,42 +896,42 @@
], ],
"VoidStorms": [ "VoidStorms": [
{ {
"_id": { "$oid": "663a7581ced28e18f694b550" }, "_id": { "$id": "663a7581ced28e18f694b550" },
"Node": "CrewBattleNode519", "Node": "CrewBattleNode519",
"Activation": { "$date": { "$numberLong": "1715109601821" } }, "Activation": { "$date": { "$numberLong": "1715109601821" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"ActiveMissionTier": "VoidT1" "ActiveMissionTier": "VoidT1"
}, },
{ {
"_id": { "$oid": "663a7581ced28e18f694b551" }, "_id": { "$id": "663a7581ced28e18f694b551" },
"Node": "CrewBattleNode515", "Node": "CrewBattleNode515",
"Activation": { "$date": { "$numberLong": "1715109601825" } }, "Activation": { "$date": { "$numberLong": "1715109601825" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"ActiveMissionTier": "VoidT1" "ActiveMissionTier": "VoidT1"
}, },
{ {
"_id": { "$oid": "663a7581ced28e18f694b554" }, "_id": { "$id": "663a7581ced28e18f694b554" },
"Node": "CrewBattleNode536", "Node": "CrewBattleNode536",
"Activation": { "$date": { "$numberLong": "1715109601832" } }, "Activation": { "$date": { "$numberLong": "1715109601832" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"ActiveMissionTier": "VoidT4" "ActiveMissionTier": "VoidT4"
}, },
{ {
"_id": { "$oid": "663a7581ced28e18f694b555" }, "_id": { "$id": "663a7581ced28e18f694b555" },
"Node": "CrewBattleNode539", "Node": "CrewBattleNode539",
"Activation": { "$date": { "$numberLong": "1715109601834" } }, "Activation": { "$date": { "$numberLong": "1715109601834" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"ActiveMissionTier": "VoidT4" "ActiveMissionTier": "VoidT4"
}, },
{ {
"_id": { "$oid": "663a7581ced28e18f694b553" }, "_id": { "$id": "663a7581ced28e18f694b553" },
"Node": "CrewBattleNode521", "Node": "CrewBattleNode521",
"Activation": { "$date": { "$numberLong": "1715109601829" } }, "Activation": { "$date": { "$numberLong": "1715109601829" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"ActiveMissionTier": "VoidT3" "ActiveMissionTier": "VoidT3"
}, },
{ {
"_id": { "$oid": "663a7581ced28e18f694b552" }, "_id": { "$id": "663a7581ced28e18f694b552" },
"Node": "CrewBattleNode535", "Node": "CrewBattleNode535",
"Activation": { "$date": { "$numberLong": "1715109601827" } }, "Activation": { "$date": { "$numberLong": "1715109601827" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
@ -956,7 +956,7 @@
"LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" },
"PVPChallengeInstances": [ "PVPChallengeInstances": [
{ {
"_id": { "$oid": "6635562d036ce37f7f98e264" }, "_id": { "$id": "6635562d036ce37f7f98e264" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete",
"startDate": { "$date": { "$numberLong": "1714771501460" } }, "startDate": { "$date": { "$numberLong": "1714771501460" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -967,7 +967,7 @@
"Category": "PVPChallengeTypeCategory_WEEKLY" "Category": "PVPChallengeTypeCategory_WEEKLY"
}, },
{ {
"_id": { "$oid": "6635562d036ce37f7f98e263" }, "_id": { "$id": "6635562d036ce37f7f98e263" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins",
"startDate": { "$date": { "$numberLong": "1714771501460" } }, "startDate": { "$date": { "$numberLong": "1714771501460" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -978,7 +978,7 @@
"Category": "PVPChallengeTypeCategory_WEEKLY" "Category": "PVPChallengeTypeCategory_WEEKLY"
}, },
{ {
"_id": { "$oid": "6635562d036ce37f7f98e265" }, "_id": { "$id": "6635562d036ce37f7f98e265" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY",
"startDate": { "$date": { "$numberLong": "1714771501460" } }, "startDate": { "$date": { "$numberLong": "1714771501460" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -989,18 +989,18 @@
"Category": "PVPChallengeTypeCategory_WEEKLY" "Category": "PVPChallengeTypeCategory_WEEKLY"
}, },
{ {
"_id": { "$oid": "6635562d036ce37f7f98e266" }, "_id": { "$id": "6635562d036ce37f7f98e266" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet",
"startDate": { "$date": { "$numberLong": "1714771501460" } }, "startDate": { "$date": { "$numberLong": "1714771501460" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
"params": [{ "n": "ScriptParamValue", "v": 0 }], "params": [{ "n": "ScriptParamValue", "v": 0 }],
"isGenerated": true, "isGenerated": true,
"PVPMode": "PVPMODE_NONE", "PVPMode": "PVPMODE_NONE",
"subChallenges": [{ "$oid": "6635562d036ce37f7f98e263" }, { "$oid": "6635562d036ce37f7f98e264" }, { "$oid": "6635562d036ce37f7f98e265" }], "subChallenges": [{ "$id": "6635562d036ce37f7f98e263" }, { "$id": "6635562d036ce37f7f98e264" }, { "$id": "6635562d036ce37f7f98e265" }],
"Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75fee" }, "_id": { "$id": "6639ca6967c1192987d75fee" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1011,7 +1011,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75fed" }, "_id": { "$id": "6639ca6967c1192987d75fed" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1022,7 +1022,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75ff2" }, "_id": { "$id": "6639ca6967c1192987d75ff2" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteEASY", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteEASY",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1033,7 +1033,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75ff1" }, "_id": { "$id": "6639ca6967c1192987d75ff1" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPayback_MEDIUM", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPayback_MEDIUM",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1044,7 +1044,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75fef" }, "_id": { "$id": "6639ca6967c1192987d75fef" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDominationEASY", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDominationEASY",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1055,7 +1055,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75ff0" }, "_id": { "$id": "6639ca6967c1192987d75ff0" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileInAirHARD", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileInAirHARD",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1066,7 +1066,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75ff3" }, "_id": { "$id": "6639ca6967c1192987d75ff3" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesMEDIUM", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesMEDIUM",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1077,7 +1077,7 @@
"Category": "PVPChallengeTypeCategory_DAILY" "Category": "PVPChallengeTypeCategory_DAILY"
}, },
{ {
"_id": { "$oid": "6639ca6967c1192987d75ff4" }, "_id": { "$id": "6639ca6967c1192987d75ff4" },
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsEASY", "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsEASY",
"startDate": { "$date": { "$numberLong": "1715063401824" } }, "startDate": { "$date": { "$numberLong": "1715063401824" } },
"endDate": { "$date": { "$numberLong": "9999999999999" } }, "endDate": { "$date": { "$numberLong": "9999999999999" } },
@ -1109,64 +1109,64 @@
"Params": "", "Params": "",
"ActiveChallenges": [ "ActiveChallenges": [
{ {
"_id": { "$oid": "001300010000000000000008" }, "_id": { "$id": "001300010000000000000008" },
"Daily": true, "Daily": true,
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyFeedMeMore" "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyFeedMeMore"
}, },
{ {
"_id": { "$oid": "001300010000000000000009" }, "_id": { "$id": "001300010000000000000009" },
"Daily": true, "Daily": true,
"Activation": { "$date": { "$numberLong": "1715644800000" } }, "Activation": { "$date": { "$numberLong": "1715644800000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTwoForOne" "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTwoForOne"
}, },
{ {
"_id": { "$oid": "001300010000000000000010" }, "_id": { "$id": "001300010000000000000010" },
"Daily": true, "Daily": true,
"Activation": { "$date": { "$numberLong": "1715731200000" } }, "Activation": { "$date": { "$numberLong": "1715731200000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithFinishers" "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithFinishers"
}, },
{ {
"_id": { "$oid": "001300010000000000000001" }, "_id": { "$id": "001300010000000000000001" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentCompleteMissions" "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentCompleteMissions"
}, },
{ {
"_id": { "$oid": "001300010000000000000002" }, "_id": { "$id": "001300010000000000000002" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEximus" "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEximus"
}, },
{ {
"_id": { "$oid": "001300010000000000000003" }, "_id": { "$id": "001300010000000000000003" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEnemies" "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEnemies"
}, },
{ {
"_id": { "$oid": "001300010000000000000004" }, "_id": { "$id": "001300010000000000000004" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyOpenLockers" "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyOpenLockers"
}, },
{ {
"_id": { "$oid": "001300010000000000000005" }, "_id": { "$id": "001300010000000000000005" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyBloodthirsty" "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyBloodthirsty"
}, },
{ {
"_id": { "$oid": "001300010000000000000006" }, "_id": { "$id": "001300010000000000000006" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardEliteSanctuaryOnslaught" "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardEliteSanctuaryOnslaught"
}, },
{ {
"_id": { "$oid": "001300010000000000000007" }, "_id": { "$id": "001300010000000000000007" },
"Activation": { "$date": { "$numberLong": "1715558400000" } }, "Activation": { "$date": { "$numberLong": "1715558400000" } },
"Expiry": { "$date": { "$numberLong": "9999999999999" } }, "Expiry": { "$date": { "$numberLong": "9999999999999" } },
"Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardCompleteSortie" "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardCompleteSortie"

View File

@ -157,7 +157,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
addGearExp("Suits", item.ItemId.$oid, 1_600_000 - item.XP); addGearExp("Suits", item.ItemId.$id, 1_600_000 - item.XP);
}; };
a.title = "Make Rank 30"; a.title = "Make Rank 30";
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>`; 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>`;
@ -165,7 +165,7 @@ function updateInventory() {
} }
{ {
const a = document.createElement("a"); const a = document.createElement("a");
a.href = "/webui/powersuit/" + item.ItemId.$oid; a.href = "/webui/powersuit/" + item.ItemId.$id;
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`; a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
td.appendChild(a); td.appendChild(a);
} }
@ -176,7 +176,7 @@ function updateInventory() {
event.preventDefault(); event.preventDefault();
const name = prompt("Enter new custom name:"); const name = prompt("Enter new custom name:");
if (name !== null) { if (name !== null) {
renameGear("Suits", item.ItemId.$oid, name); renameGear("Suits", item.ItemId.$id, name);
} }
}; };
a.title = "Rename"; a.title = "Rename";
@ -188,7 +188,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
disposeOfGear("Suits", item.ItemId.$oid); disposeOfGear("Suits", item.ItemId.$id);
}; };
a.title = "Remove"; a.title = "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>`; 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>`;
@ -218,7 +218,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
addGearExp(category, item.ItemId.$oid, 800_000 - item.XP); addGearExp(category, item.ItemId.$id, 800_000 - item.XP);
}; };
a.title = "Make Rank 30"; a.title = "Make Rank 30";
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>`; 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>`;
@ -231,7 +231,7 @@ function updateInventory() {
event.preventDefault(); event.preventDefault();
const name = prompt("Enter new custom name:"); const name = prompt("Enter new custom name:");
if (name !== null) { if (name !== null) {
renameGear(category, item.ItemId.$oid, name); renameGear(category, item.ItemId.$id, name);
} }
}; };
a.title = "Rename"; a.title = "Rename";
@ -243,7 +243,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
disposeOfGear(category, item.ItemId.$oid); disposeOfGear(category, item.ItemId.$id);
}; };
a.title = "Remove"; a.title = "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>`; 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>`;
@ -298,7 +298,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
disposeOfGear("Upgrades", item.ItemId.$oid); disposeOfGear("Upgrades", item.ItemId.$id);
}; };
a.title = "Remove"; a.title = "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>`; 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>`;
@ -336,7 +336,7 @@ function updateInventory() {
a.href = "#"; a.href = "#";
a.onclick = function (event) { a.onclick = function (event) {
event.preventDefault(); event.preventDefault();
disposeOfGear("Upgrades", item.ItemId.$oid); disposeOfGear("Upgrades", item.ItemId.$id);
}; };
a.title = "Remove"; a.title = "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>`; 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>`;
@ -394,7 +394,7 @@ function updateInventory() {
// Populate powersuit route // Populate powersuit route
if (single.getCurrentPath().substr(0, 17) == "/webui/powersuit/") { if (single.getCurrentPath().substr(0, 17) == "/webui/powersuit/") {
const oid = single.getCurrentPath().substr(17); const oid = single.getCurrentPath().substr(17);
const item = data.Suits.find(x => x.ItemId.$oid == oid); const item = data.Suits.find(x => x.ItemId.$id == oid);
if (item) { if (item) {
if (item.ItemName) { if (item.ItemName) {
$("#powersuit-route h3").text(item.ItemName); $("#powersuit-route h3").text(item.ItemName);
@ -507,7 +507,7 @@ function addGearExp(category, oid, xp) {
const data = {}; const data = {};
data[category] = [ data[category] = [
{ {
ItemId: { $oid: oid }, ItemId: { $id: oid },
XP: xp XP: xp
} }
]; ];