From bd4ea5c94440304768883cae8169315ea15774f8 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Thu, 1 Jun 2023 19:10:48 +0200 Subject: [PATCH 01/13] 2 spaces tab, prettier command --- .prettierrc | 2 +- config.json | 10 +- package.json | 71 +- .../api/checkDailyMissionBonusController.ts | 20 +- src/controllers/api/dronesController.ts | 10 +- src/controllers/api/findSessionsController.ts | 18 +- src/controllers/api/getAllianceController.ts | 2 +- src/controllers/api/getFriendsController.ts | 16 +- .../api/getIgnoredUsersController.ts | 20 +- .../api/getNewRewardSeedController.ts | 2 +- src/controllers/api/getShipController.ts | 2 +- src/controllers/api/hostSessionController.ts | 2 +- src/controllers/api/inboxController.ts | 2 +- src/controllers/api/inventoryController.ts | 8 +- src/controllers/api/loginController.ts | 114 +- src/controllers/api/loginRewardsController.ts | 2 +- .../api/marketRecommendationsController.ts | 20 +- .../marketSearchRecommendationsController.ts | 2 +- src/controllers/api/purchaseController.ts | 2 +- .../api/setActiveQuestController.ts | 2 +- src/controllers/api/surveysController.ts | 16 +- .../api/updateChallengeProgressController.ts | 2 +- src/controllers/api/viewController.ts | 2 +- .../custom/createAccountController.ts | 8 +- .../dynamic/aggregateSessionsController.ts | 2 +- .../dynamic/worldStateController.ts | 8 +- src/controllers/misc/steamPacksController.ts | 2 +- src/helpers/customHelpers.ts | 72 +- src/helpers/general.ts | 54 +- src/helpers/loginHelpers.ts | 52 +- src/index.ts | 6 +- src/middleware/middleware.ts | 14 +- src/models/loginModel.ts | 44 +- src/models/t.ts | 2 +- src/routes/cache.ts | 14 +- src/services/loginService.ts | 22 +- src/services/mongoService.ts | 14 +- src/types/customTypes.ts | 8 +- src/types/loginTypes.ts | 62 +- static/fixed_responses/getShip.json | 44 +- static/fixed_responses/inbox.json | 40 +- static/fixed_responses/inventory.json | 258 +- static/fixed_responses/loginRewards.json | 14 +- static/fixed_responses/login_static.ts | 32 +- static/fixed_responses/purchase.json | 22 +- static/fixed_responses/worldState.json | 5016 ++++++++--------- tsconfig.json | 204 +- 47 files changed, 3170 insertions(+), 3191 deletions(-) diff --git a/.prettierrc b/.prettierrc index dc84f98c..2f852aef 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "tabWidth": 4, + "tabWidth": 2, "useTabs": false, "endOfLine": "auto", "trailingComma": "none", diff --git a/config.json b/config.json index d0c662ae..82335457 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,7 @@ { - "autoCreateAccount": true, - "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", - "matchmakingBuildId": "4920386201513015989", - "version": "33.0.14", - "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==" + "autoCreateAccount": true, + "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", + "matchmakingBuildId": "4920386201513015989", + "version": "33.0.14", + "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==" } diff --git a/package.json b/package.json index b0088221..1c994e08 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,38 @@ { - "name": "wf-emulator", - "version": "0.1.0", - "description": "WF Emulator", - "main": "index.ts", - "scripts": { - "start": "node build/index.js", - "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts", - "build": "tsc", - "lint": "eslint --ext .ts ." - }, - "license": "GNU", - "dependencies": { - "dotenv": "^16.0.3", - "express": "^5.0.0-beta.1", - "mongoose": "^7.1.1" - }, - "devDependencies": { - "@tsconfig/node20": "^1.0.0", - "@types/body-parser": "^1.19.2", - "@types/express": "^4.17.17", - "@types/morgan": "^1.9.4", - "@typescript-eslint/eslint-plugin": "^5.59.2", - "@typescript-eslint/parser": "^5.59.2", - "eslint": "^8.40.0", - "eslint-plugin-prettier": "^4.2.1", - "morgan": "^1.10.0", - "prettier": "^2.8.8", - "ts-node-dev": "^2.0.0", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">=18.15.0", - "npm": ">=9.5.0" - } + "name": "wf-emulator", + "version": "0.1.0", + "description": "WF Emulator", + "main": "index.ts", + "scripts": { + "start": "node build/index.js", + "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts", + "build": "tsc", + "lint": "eslint --ext .ts .", + "pretty": "prettier --write \"./**/*.{js,jsx,ts,tsx,json}\"" + }, + "license": "GNU", + "dependencies": { + "dotenv": "^16.0.3", + "express": "^5.0.0-beta.1", + "mongoose": "^7.1.1" + }, + "devDependencies": { + "@tsconfig/node20": "^1.0.0", + "@types/body-parser": "^1.19.2", + "@types/express": "^4.17.17", + "@types/morgan": "^1.9.4", + "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/parser": "^5.59.2", + "eslint": "^8.40.0", + "eslint-plugin-prettier": "^4.2.1", + "morgan": "^1.10.0", + "prettier": "^2.8.8", + "ts-node-dev": "^2.0.0", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">=18.15.0", + "npm": ">=9.5.0" + } } diff --git a/src/controllers/api/checkDailyMissionBonusController.ts b/src/controllers/api/checkDailyMissionBonusController.ts index 97b838fe..a128a606 100644 --- a/src/controllers/api/checkDailyMissionBonusController.ts +++ b/src/controllers/api/checkDailyMissionBonusController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const checkDailyMissionBonusController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x44, 0x61, 0x69, 0x6c, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, - 0x31, 0x2d, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x56, 0x50, 0x57, 0x69, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, - 0x3a, 0x31, 0x0a - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x44, 0x61, 0x69, 0x6c, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, 0x31, + 0x2d, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x56, 0x50, 0x57, 0x69, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, 0x31, + 0x0a + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { checkDailyMissionBonusController }; diff --git a/src/controllers/api/dronesController.ts b/src/controllers/api/dronesController.ts index 7a55e00e..2bc67e66 100644 --- a/src/controllers/api/dronesController.ts +++ b/src/controllers/api/dronesController.ts @@ -1,11 +1,11 @@ import { RequestHandler } from "express"; const dronesController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end(Buffer.from([0x7b, 0x7d, 0x0a])); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": "3" + }); + res.end(Buffer.from([0x7b, 0x7d, 0x0a])); }; export { dronesController }; diff --git a/src/controllers/api/findSessionsController.ts b/src/controllers/api/findSessionsController.ts index f749f00a..8f9b2265 100644 --- a/src/controllers/api/findSessionsController.ts +++ b/src/controllers/api/findSessionsController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const findSessionsController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d - ]); + const data = Buffer.from([ + 0x7b, 0x22, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d + ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { findSessionsController }; diff --git a/src/controllers/api/getAllianceController.ts b/src/controllers/api/getAllianceController.ts index 391dae5f..27fe17de 100644 --- a/src/controllers/api/getAllianceController.ts +++ b/src/controllers/api/getAllianceController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const getAllianceController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { getAllianceController }; diff --git a/src/controllers/api/getFriendsController.ts b/src/controllers/api/getFriendsController.ts index 9fb65fa1..3a173477 100644 --- a/src/controllers/api/getFriendsController.ts +++ b/src/controllers/api/getFriendsController.ts @@ -1,12 +1,12 @@ import { Request, Response } from "express"; export default (_request: Request, response: Response) => { - response.writeHead(200, { - //Connection: "keep-alive", - //"Content-Encoding": "gzip", - "Content-Type": "text/html", - // charset: "UTF - 8", - "Content-Length": "3" - }); - response.end(Buffer.from([0x7b, 0x7d, 0x0a])); + response.writeHead(200, { + //Connection: "keep-alive", + //"Content-Encoding": "gzip", + "Content-Type": "text/html", + // charset: "UTF - 8", + "Content-Length": "3" + }); + response.end(Buffer.from([0x7b, 0x7d, 0x0a])); }; diff --git a/src/controllers/api/getIgnoredUsersController.ts b/src/controllers/api/getIgnoredUsersController.ts index 97127fba..dfeedb54 100644 --- a/src/controllers/api/getIgnoredUsersController.ts +++ b/src/controllers/api/getIgnoredUsersController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const getIgnoredUsersController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end( - Buffer.from([ - 0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32, - 0x34, 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d - ]) - ); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": "3" + }); + res.end( + Buffer.from([ + 0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32, 0x34, + 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d + ]) + ); }; export { getIgnoredUsersController }; diff --git a/src/controllers/api/getNewRewardSeedController.ts b/src/controllers/api/getNewRewardSeedController.ts index 851b9d4e..a5c89069 100644 --- a/src/controllers/api/getNewRewardSeedController.ts +++ b/src/controllers/api/getNewRewardSeedController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const getNewRewardSeedController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { getNewRewardSeedController }; diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 82f598fe..68328ee0 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import getShip from "@/static/fixed_responses/getShip.json"; const getShipController: RequestHandler = (_req, res) => { - res.json(getShip); + res.json(getShip); }; export { getShipController }; diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index 812332cf..40e220e9 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const hostSessionController: RequestHandler = (_req, res) => { - res.json({ sessionId: { $oid: "64777916e794cfc5abdd69ea" }, rewardSeed: -1492798783199571432 }); + res.json({ sessionId: { $oid: "64777916e794cfc5abdd69ea" }, rewardSeed: -1492798783199571432 }); }; export { hostSessionController }; diff --git a/src/controllers/api/inboxController.ts b/src/controllers/api/inboxController.ts index cbd2af06..d5aa4f93 100644 --- a/src/controllers/api/inboxController.ts +++ b/src/controllers/api/inboxController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import inbox from "@/static/fixed_responses/inbox.json"; const inboxController: RequestHandler = (_req, res) => { - res.json(inbox); + res.json(inbox); }; export { inboxController }; diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 1341db4b..e744e2ca 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -2,10 +2,10 @@ import inventory from "@/static/fixed_responses/inventory.json"; import { Request, RequestHandler, Response } from "express"; const inventorController: RequestHandler = (request: Request, response: Response) => { - console.log(request.query); - const accountId = request.query.accountId; - console.log(accountId); - response.json(inventory); + console.log(request.query); + const accountId = request.query.accountId; + console.log(accountId); + response.json(inventory); }; export default inventorController; diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 80f71d5f..e932759a 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -11,62 +11,32 @@ import { DTLS, groups, HUB, IRC, Nonce, NRS, platformCDNs } from "@/static/fixed // eslint-disable-next-line @typescript-eslint/no-misused-promises const loginController: RequestHandler = async (request, response) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument - const body = JSON.parse(request.body); // parse octet stream of json data to json object - const loginRequest = toLoginRequest(body); - // console.log(body); - //console.log(String.fromCharCode.apiRouterly(null, req.body)); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument + const body = JSON.parse(request.body); // parse octet stream of json data to json object + const loginRequest = toLoginRequest(body); + // console.log(body); + //console.log(String.fromCharCode.apiRouterly(null, req.body)); - const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } - console.log("findone", account); + const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } + console.log("findone", account); - if (!account && config.autoCreateAccount) { - try { - const newAccount = await createAccount({ - email: loginRequest.email, - password: loginRequest.password, - DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")), - CountryCode: loginRequest.lang.toUpperCase(), - ClientType: loginRequest.ClientType, - CrossPlatformAllowed: true, - ForceLogoutVersion: 0, - ConsentNeeded: false, - TrackedSettings: [] - }); - console.log("CREATED ACCOUNT", newAccount); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { email, password, ...databaseAccount } = newAccount; - const newLoginResponse: ILoginResponse = { - ...databaseAccount, - Groups: groups, - platformCDNs: platformCDNs, - Nonce: Nonce, - NRS: NRS, - DTLS: DTLS, - IRC: IRC, - HUB: HUB, - BuildLabel: config.buildLabel, - MatchmakingBuildId: config.matchmakingBuildId - }; - - console.log(newLoginResponse); - response.json(newLoginResponse); - return; - } catch (error: unknown) { - if (error instanceof Error) { - throw new Error("error creating account"); - } - } - } - - //email not found or incorrect password - if (!account || !isCorrectPassword(loginRequest.password, account.password)) { - response.status(400).json({ error: "incorrect login data" }); - return; - } - - const { email, password, ...databaseAccount } = account.toJSON(); - const newLoginResponse: ILoginResponse = { + if (!account && config.autoCreateAccount) { + try { + const newAccount = await createAccount({ + email: loginRequest.email, + password: loginRequest.password, + DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")), + CountryCode: loginRequest.lang.toUpperCase(), + ClientType: loginRequest.ClientType, + CrossPlatformAllowed: true, + ForceLogoutVersion: 0, + ConsentNeeded: false, + TrackedSettings: [] + }); + console.log("CREATED ACCOUNT", newAccount); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { email, password, ...databaseAccount } = newAccount; + const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, platformCDNs: platformCDNs, @@ -77,10 +47,40 @@ const loginController: RequestHandler = async (request, response) => { HUB: HUB, BuildLabel: config.buildLabel, MatchmakingBuildId: config.matchmakingBuildId - }; + }; - console.log("login response", newLoginResponse); - response.json(newLoginResponse); + console.log(newLoginResponse); + response.json(newLoginResponse); + return; + } catch (error: unknown) { + if (error instanceof Error) { + throw new Error("error creating account"); + } + } + } + + //email not found or incorrect password + if (!account || !isCorrectPassword(loginRequest.password, account.password)) { + response.status(400).json({ error: "incorrect login data" }); + return; + } + + const { email, password, ...databaseAccount } = account.toJSON(); + const newLoginResponse: ILoginResponse = { + ...databaseAccount, + Groups: groups, + platformCDNs: platformCDNs, + Nonce: Nonce, + NRS: NRS, + DTLS: DTLS, + IRC: IRC, + HUB: HUB, + BuildLabel: config.buildLabel, + MatchmakingBuildId: config.matchmakingBuildId + }; + + console.log("login response", newLoginResponse); + response.json(newLoginResponse); }; export { loginController }; diff --git a/src/controllers/api/loginRewardsController.ts b/src/controllers/api/loginRewardsController.ts index fd4b40c4..2cd90af0 100644 --- a/src/controllers/api/loginRewardsController.ts +++ b/src/controllers/api/loginRewardsController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import loginRewards from "@/static/fixed_responses/loginRewards.json"; const loginRewardsController: RequestHandler = (_req, res) => { - res.json(loginRewards); + res.json(loginRewards); }; export { loginRewardsController }; diff --git a/src/controllers/api/marketRecommendationsController.ts b/src/controllers/api/marketRecommendationsController.ts index 8acfa89e..47824796 100644 --- a/src/controllers/api/marketRecommendationsController.ts +++ b/src/controllers/api/marketRecommendationsController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const marketRecommendationsController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, - 0x3a, 0x5b, 0x5d, 0x2c, 0x22, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x7d - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x7b, 0x22, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, 0x3a, 0x5b, + 0x5d, 0x2c, 0x22, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x7d + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { marketRecommendationsController }; diff --git a/src/controllers/api/marketSearchRecommendationsController.ts b/src/controllers/api/marketSearchRecommendationsController.ts index bc99897b..992737b6 100644 --- a/src/controllers/api/marketSearchRecommendationsController.ts +++ b/src/controllers/api/marketSearchRecommendationsController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const marketSearchRecommendationsController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { marketSearchRecommendationsController }; diff --git a/src/controllers/api/purchaseController.ts b/src/controllers/api/purchaseController.ts index 78c5fee9..f03933eb 100644 --- a/src/controllers/api/purchaseController.ts +++ b/src/controllers/api/purchaseController.ts @@ -2,5 +2,5 @@ import purchase from "@/static/fixed_responses/purchase.json"; import { Request, Response } from "express"; export default (_req: Request, res: Response): void => { - res.json(purchase); + res.json(purchase); }; diff --git a/src/controllers/api/setActiveQuestController.ts b/src/controllers/api/setActiveQuestController.ts index a8f06a25..57e9e631 100644 --- a/src/controllers/api/setActiveQuestController.ts +++ b/src/controllers/api/setActiveQuestController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const setActiveQuestController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { setActiveQuestController }; diff --git a/src/controllers/api/surveysController.ts b/src/controllers/api/surveysController.ts index 2a593e47..b69641be 100644 --- a/src/controllers/api/surveysController.ts +++ b/src/controllers/api/surveysController.ts @@ -1,14 +1,14 @@ import { RequestHandler } from "express"; const surveysController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x7b, 0x22, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { surveysController }; diff --git a/src/controllers/api/updateChallengeProgressController.ts b/src/controllers/api/updateChallengeProgressController.ts index b822d818..80c0ecf3 100644 --- a/src/controllers/api/updateChallengeProgressController.ts +++ b/src/controllers/api/updateChallengeProgressController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const updateChallengeProgressController: RequestHandler = (_request, response) => { - response.sendStatus(200); + response.sendStatus(200); }; export { updateChallengeProgressController }; diff --git a/src/controllers/api/viewController.ts b/src/controllers/api/viewController.ts index e63d3b1a..fa0ea1a4 100644 --- a/src/controllers/api/viewController.ts +++ b/src/controllers/api/viewController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import view from "@/static/fixed_responses/view.json"; const viewController: RequestHandler = (_req, res) => { - res.json(view); + res.json(view); }; export { viewController }; diff --git a/src/controllers/custom/createAccountController.ts b/src/controllers/custom/createAccountController.ts index 148e0220..ce41fd79 100644 --- a/src/controllers/custom/createAccountController.ts +++ b/src/controllers/custom/createAccountController.ts @@ -4,12 +4,12 @@ import { createAccount } from "@/src/services/loginService"; import { RequestHandler } from "express"; const createAccountController: RequestHandler = async (req, res) => { - const createAccountData = toCreateAccount(req.body); - const databaseAccount = toDatabaseAccount(createAccountData); + const createAccountData = toCreateAccount(req.body); + const databaseAccount = toDatabaseAccount(createAccountData); - const account = await createAccount(databaseAccount); + const account = await createAccount(databaseAccount); - res.json(account); + res.json(account); }; export { createAccountController }; diff --git a/src/controllers/dynamic/aggregateSessionsController.ts b/src/controllers/dynamic/aggregateSessionsController.ts index e3c1659b..1efbb921 100644 --- a/src/controllers/dynamic/aggregateSessionsController.ts +++ b/src/controllers/dynamic/aggregateSessionsController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const aggregateSessionsController: RequestHandler = (_req, res) => { - res.json({}); + res.json({}); }; export { aggregateSessionsController }; diff --git a/src/controllers/dynamic/worldStateController.ts b/src/controllers/dynamic/worldStateController.ts index 474cb442..a3cf0926 100644 --- a/src/controllers/dynamic/worldStateController.ts +++ b/src/controllers/dynamic/worldStateController.ts @@ -3,10 +3,10 @@ import config from "@/config.json"; import worldState from "@/static/fixed_responses/worldState.json"; const worldStateController: RequestHandler = (_req, res) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - worldState.WorldSeed = config.worldSeed; - worldState.BuildLabel = config.buildLabel; - res.json(worldState); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + worldState.WorldSeed = config.worldSeed; + worldState.BuildLabel = config.buildLabel; + res.json(worldState); }; export { worldStateController }; diff --git a/src/controllers/misc/steamPacksController.ts b/src/controllers/misc/steamPacksController.ts index f0885786..f3f7d317 100644 --- a/src/controllers/misc/steamPacksController.ts +++ b/src/controllers/misc/steamPacksController.ts @@ -1,6 +1,6 @@ import { RequestHandler } from "express"; const steamPacksController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { steamPacksController }; diff --git a/src/helpers/customHelpers.ts b/src/helpers/customHelpers.ts index d203f2d1..3cbd9ccb 100644 --- a/src/helpers/customHelpers.ts +++ b/src/helpers/customHelpers.ts @@ -4,52 +4,52 @@ import { IDatabaseAccount } from "../types/loginTypes"; import { isString, parseEmail, parseString } from "./general"; const getWhirlpoolHash = (rawPassword: string): string => { - const whirlpool = crypto.createHash("whirlpool"); - const data = whirlpool.update(rawPassword, "utf8"); - const hash = data.digest("hex"); - return hash; + const whirlpool = crypto.createHash("whirlpool"); + const data = whirlpool.update(rawPassword, "utf8"); + const hash = data.digest("hex"); + return hash; }; const parsePassword = (passwordCandidate: unknown): string => { - // a different function could be called that checks whether the password has a certain shape - if (!isString(passwordCandidate)) { - throw new Error("incorrect password format"); - } - return passwordCandidate; + // a different function could be called that checks whether the password has a certain shape + if (!isString(passwordCandidate)) { + throw new Error("incorrect password format"); + } + return passwordCandidate; }; const toAccountCreation = (accountCreation: unknown): IAccountCreation => { - if (!accountCreation || typeof accountCreation !== "object") { - throw new Error("incorrect or missing account creation data"); - } + if (!accountCreation || typeof accountCreation !== "object") { + throw new Error("incorrect or missing account creation data"); + } - if ( - "email" in accountCreation && - "password" in accountCreation && - "DisplayName" in accountCreation && - "CountryCode" in accountCreation - ) { - const rawPassword = parsePassword(accountCreation.password); - console.log("email", accountCreation.email); - return { - email: parseEmail(accountCreation.email), - password: getWhirlpoolHash(rawPassword), - CountryCode: parseString(accountCreation.CountryCode), - DisplayName: parseString(accountCreation.DisplayName) - }; - } - throw new Error("incorrect account creation data: incorrect properties"); + if ( + "email" in accountCreation && + "password" in accountCreation && + "DisplayName" in accountCreation && + "CountryCode" in accountCreation + ) { + const rawPassword = parsePassword(accountCreation.password); + console.log("email", accountCreation.email); + return { + email: parseEmail(accountCreation.email), + password: getWhirlpoolHash(rawPassword), + CountryCode: parseString(accountCreation.CountryCode), + DisplayName: parseString(accountCreation.DisplayName) + }; + } + throw new Error("incorrect account creation data: incorrect properties"); }; const toDatabaseAccount = (createAccount: IAccountCreation): IDatabaseAccount => { - return { - ...createAccount, - ClientType: "", - ConsentNeeded: false, - CrossPlatformAllowed: true, - ForceLogoutVersion: 0, - TrackedSettings: [] - } satisfies IDatabaseAccount; + return { + ...createAccount, + ClientType: "", + ConsentNeeded: false, + CrossPlatformAllowed: true, + ForceLogoutVersion: 0, + TrackedSettings: [] + } satisfies IDatabaseAccount; }; export { toDatabaseAccount, toAccountCreation as toCreateAccount }; diff --git a/src/helpers/general.ts b/src/helpers/general.ts index 8aa19a1a..21fbff1d 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -1,58 +1,58 @@ const isString = (text: unknown): text is string => { - return typeof text === "string" || text instanceof String; + return typeof text === "string" || text instanceof String; }; const parseString = (data: unknown): string => { - if (!isString(data)) { - throw new Error("data is not a string"); - } + if (!isString(data)) { + throw new Error("data is not a string"); + } - return data; + return data; }; const isNumber = (number: unknown): number is number => { - return typeof number === "number" && !isNaN(number); + return typeof number === "number" && !isNaN(number); }; const parseNumber = (data: unknown): number => { - if (!isNumber(data)) { - throw new Error("data is not a number"); - } + if (!isNumber(data)) { + throw new Error("data is not a number"); + } - return Number(data); + return Number(data); }; const isDate = (date: string) => { - if (!Date.parse(date)) { - throw new Error("invalid date"); - } - return date; + if (!Date.parse(date)) { + throw new Error("invalid date"); + } + return date; }; const parseDateNumber = (date: unknown): string => { - if (!isString(date) || !isDate(date)) { - throw new Error("date could not be parsed"); - } + if (!isString(date) || !isDate(date)) { + throw new Error("date could not be parsed"); + } - return date; + return date; }; const parseEmail = (email: unknown): string => { - if (!isString(email)) { - throw new Error("incorrect email"); - } - return email; + if (!isString(email)) { + throw new Error("incorrect email"); + } + return email; }; const isBoolean = (booleanCandidate: unknown): booleanCandidate is boolean => { - return typeof booleanCandidate === "boolean"; + return typeof booleanCandidate === "boolean"; }; const parseBoolean = (booleanCandidate: unknown): boolean => { - if (!isBoolean(booleanCandidate)) { - throw new Error("argument was not a boolean"); - } - return booleanCandidate; + if (!isBoolean(booleanCandidate)) { + throw new Error("argument was not a boolean"); + } + return booleanCandidate; }; export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail }; diff --git a/src/helpers/loginHelpers.ts b/src/helpers/loginHelpers.ts index b77b3560..96712bfb 100644 --- a/src/helpers/loginHelpers.ts +++ b/src/helpers/loginHelpers.ts @@ -2,34 +2,34 @@ import { ILoginRequest } from "../types/loginTypes"; import { parseEmail, parseNumber, parseString } from "./general"; const toLoginRequest = (loginRequest: unknown): ILoginRequest => { - if (!loginRequest || typeof loginRequest !== "object") { - throw new Error("incorrect or missing login request data"); - } + if (!loginRequest || typeof loginRequest !== "object") { + throw new Error("incorrect or missing login request data"); + } - // TODO: function that checks whether every field of interface is in object - if ( - "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 { - email: parseEmail(loginRequest.email), - 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) - }; - } + // TODO: function that checks whether every field of interface is in object + if ( + "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 { + email: parseEmail(loginRequest.email), + 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) + }; + } - throw new Error("incorrect login request"); + throw new Error("incorrect login request"); }; export { toLoginRequest }; diff --git a/src/index.ts b/src/index.ts index 689fa854..b232bc1d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,9 +6,9 @@ import { app } from "./app"; //const bodyParser = require("body-parser"); const options = { - key: fs.readFileSync("static/certs/key.pem"), - cert: fs.readFileSync("static/certs/cert.pem"), - passphrase: "123456" + key: fs.readFileSync("static/certs/key.pem"), + cert: fs.readFileSync("static/certs/cert.pem"), + passphrase: "123456" }; // const server = http.createServer(app).listen(80); diff --git a/src/middleware/middleware.ts b/src/middleware/middleware.ts index 1653864a..2eab0d34 100644 --- a/src/middleware/middleware.ts +++ b/src/middleware/middleware.ts @@ -1,16 +1,16 @@ import { NextFunction, Request, Response } from "express"; const unknownEndpointHandler = (request: Request, response: Response) => { - console.error("[ERROR] Unknown Endpoint", request.url); - response.status(404).json({ error: "endpoint was not found" }); + console.error("[ERROR] Unknown Endpoint", request.url); + response.status(404).json({ error: "endpoint was not found" }); }; const requestLogger = (request: Request, _response: Response, next: NextFunction) => { - console.log("Method:", request.method); - console.log("Path: ", request.path); - console.log("Body: ", request.body); - console.log("---"); - next(); + console.log("Method:", request.method); + console.log("Path: ", request.path); + console.log("Body: ", request.body); + console.log("---"); + next(); }; export { unknownEndpointHandler, requestLogger }; diff --git a/src/models/loginModel.ts b/src/models/loginModel.ts index 232bcba0..6f0196d3 100644 --- a/src/models/loginModel.ts +++ b/src/models/loginModel.ts @@ -2,8 +2,8 @@ import { model, Schema, SchemaOptions } from "mongoose"; import { IDatabaseAccountDocument } from "../types/loginTypes"; const opts = { - toJSON: { virtuals: true }, - toObject: { virtuals: true } + toJSON: { virtuals: true }, + toObject: { virtuals: true } } satisfies SchemaOptions; // { @@ -21,29 +21,29 @@ const opts = { // } const databaseAccountSchema = new Schema( - { - email: { type: String, required: true, unique: true }, - password: { type: String, required: true }, - DisplayName: { type: String, required: true }, - CountryCode: { type: String, 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: [] } - }, - opts + { + email: { type: String, required: true, unique: true }, + password: { type: String, required: true }, + DisplayName: { type: String, required: true }, + CountryCode: { type: String, 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: [] } + }, + opts ); databaseAccountSchema.set("toJSON", { - transform(_document, returnedObject) { - //returnedObject.id = returnedObject._id.toString(); - delete returnedObject._id; - delete returnedObject.__v; - }, - virtuals: true + transform(_document, returnedObject) { + //returnedObject.id = returnedObject._id.toString(); + delete returnedObject._id; + delete returnedObject.__v; + }, + virtuals: true }); //databaseAccountSchema.set(""); diff --git a/src/models/t.ts b/src/models/t.ts index c59908c1..882ff5aa 100644 --- a/src/models/t.ts +++ b/src/models/t.ts @@ -1,7 +1,7 @@ import mongoose from "mongoose"; const accountSchema = new mongoose.Schema({ - data: JSON + data: JSON }); // personSchema.set("toJSON", { diff --git a/src/routes/cache.ts b/src/routes/cache.ts index bb69a6db..e3a6ee83 100644 --- a/src/routes/cache.ts +++ b/src/routes/cache.ts @@ -4,19 +4,19 @@ import config from "@/config.json"; const cacheRouter = express.Router(); cacheRouter.get("/B.Cache.Dx11.bin.*", (_req, res) => { - //console.log("asd", path.join(__dirname, "../data")); - res.sendFile("static/data/B.Cache.Dx11_33.0.6.bin", { root: "./" }); + //console.log("asd", path.join(__dirname, "../data")); + res.sendFile("static/data/B.Cache.Dx11_33.0.6.bin", { root: "./" }); }); cacheRouter.get("/B.Cache.Windows_en.bin*", (_req, res) => { - //console.log("asd", path.join(__dirname, "../data")); - res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" }); + //console.log("asd", path.join(__dirname, "../data")); + res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" }); }); cacheRouter.get(/^\/origin\/([a-zA-Z0-9]+)\/H\.Cache\.bin.*$/, (_req, res) => { - // console.log("asd", path.join(__dirname, "../data")); - // console.log("asd", __dirname); - res.sendFile(`static/data/H.Cache_${config.version}.bin`, { root: "./" }); + // console.log("asd", path.join(__dirname, "../data")); + // console.log("asd", __dirname); + res.sendFile(`static/data/H.Cache_${config.version}.bin`, { root: "./" }); }); export { cacheRouter }; diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 1c992b4c..90b8de97 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -2,21 +2,21 @@ import { Account } from "../models/loginModel"; import { IDatabaseAccount } from "../types/loginTypes"; const isCorrectPassword = (requestPassword: string, databasePassword: string): boolean => { - return requestPassword === databasePassword; + return requestPassword === databasePassword; }; const createAccount = async (accountData: IDatabaseAccount) => { - console.log("test", accountData); - const account = new Account(accountData); - try { - await account.save(); - return account.toJSON(); - } catch (error) { - if (error instanceof Error) { - throw new Error(error.message); - } - throw new Error("error creating account that is not of instance Error"); + console.log("test", accountData); + const account = new Account(accountData); + try { + await account.save(); + return account.toJSON(); + } catch (error) { + if (error instanceof Error) { + throw new Error(error.message); } + throw new Error("error creating account that is not of instance Error"); + } }; export { isCorrectPassword, createAccount }; diff --git a/src/services/mongoService.ts b/src/services/mongoService.ts index 9defba3a..6187d0b5 100644 --- a/src/services/mongoService.ts +++ b/src/services/mongoService.ts @@ -10,14 +10,14 @@ if (!url) throw new Error("MONGODB_URL not found"); console.log("connecting to MongoDB URL:", url); const connectDatabase = async () => { - try { - await mongoose.connect(url); - console.log("connected to MongoDB"); - } catch (error: unknown) { - if (error instanceof Error) { - console.error("error connecting to MongoDB", error.message); - } + try { + await mongoose.connect(url); + console.log("connected to MongoDB"); + } catch (error: unknown) { + if (error instanceof Error) { + console.error("error connecting to MongoDB", error.message); } + } }; export { connectDatabase }; diff --git a/src/types/customTypes.ts b/src/types/customTypes.ts index 01c77950..8ce0e660 100644 --- a/src/types/customTypes.ts +++ b/src/types/customTypes.ts @@ -1,6 +1,6 @@ export interface IAccountCreation { - email: string; - password: string; - DisplayName: string; - CountryCode: string; + email: string; + password: string; + DisplayName: string; + CountryCode: string; } diff --git a/src/types/loginTypes.ts b/src/types/loginTypes.ts index 1d53de43..fd6e64c6 100644 --- a/src/types/loginTypes.ts +++ b/src/types/loginTypes.ts @@ -1,46 +1,46 @@ export interface ILoginResponse extends Omit { - Groups: IGroup[]; - Nonce: number; - BuildLabel: string; - MatchmakingBuildId: string; - platformCDNs: string[]; - NRS: string[]; - DTLS: number; - IRC: string[]; - HUB: string; + Groups: IGroup[]; + Nonce: number; + BuildLabel: string; + MatchmakingBuildId: string; + platformCDNs: string[]; + NRS: string[]; + DTLS: number; + IRC: string[]; + HUB: string; } //includes virtual id export interface IDatabaseAccountDocument extends IDatabaseAccount { - id: string; + id: string; } export interface IGroup { - experiment: string; - experimentGroup: string; + experiment: string; + experimentGroup: string; } export interface IDatabaseAccount { - email: string; - password: string; - DisplayName: string; - CountryCode: string; - ClientType: string; - CrossPlatformAllowed: boolean; - ForceLogoutVersion: number; - AmazonAuthToken?: string; - AmazonRefreshToken?: string; - ConsentNeeded: boolean; - TrackedSettings: string[]; + email: string; + password: string; + DisplayName: string; + CountryCode: string; + ClientType: string; + CrossPlatformAllowed: boolean; + ForceLogoutVersion: number; + AmazonAuthToken?: string; + AmazonRefreshToken?: string; + ConsentNeeded: boolean; + TrackedSettings: string[]; } export interface ILoginRequest { - email: string; - password: string; - time: number; - s: string; - lang: string; - date: number; - ClientType: string; - PS: string; + email: string; + password: string; + time: number; + s: string; + lang: string; + date: number; + ClientType: string; + PS: string; } diff --git a/static/fixed_responses/getShip.json b/static/fixed_responses/getShip.json index 4e0de41f..f15c1be8 100644 --- a/static/fixed_responses/getShip.json +++ b/static/fixed_responses/getShip.json @@ -1,24 +1,24 @@ { - "ShipOwnerId": "removed", - "Ship": { - "Rooms": [ - { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, - { "Name": "BridgeRoom", "MaxCapacity": 1600 }, - { "Name": "LisetRoom", "MaxCapacity": 1000 }, - { "Name": "OperatorChamberRoom", "MaxCapacity": 1600 }, - { "Name": "OutsideRoom", "MaxCapacity": 1600 }, - { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } - ], - "ContentUrlSignature": "removed" - }, - "Apartment": { - "Rooms": [ - { "Name": "ElevatorLanding", "MaxCapacity": 1600 }, - { "Name": "ApartmentRoomA", "MaxCapacity": 1000 }, - { "Name": "ApartmentRoomB", "MaxCapacity": 1600 }, - { "Name": "ApartmentRoomC", "MaxCapacity": 1600 }, - { "Name": "DuviriHallway", "MaxCapacity": 1600 } - ], - "FavouriteLoadouts": [] - } + "ShipOwnerId": "removed", + "Ship": { + "Rooms": [ + { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, + { "Name": "BridgeRoom", "MaxCapacity": 1600 }, + { "Name": "LisetRoom", "MaxCapacity": 1000 }, + { "Name": "OperatorChamberRoom", "MaxCapacity": 1600 }, + { "Name": "OutsideRoom", "MaxCapacity": 1600 }, + { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } + ], + "ContentUrlSignature": "removed" + }, + "Apartment": { + "Rooms": [ + { "Name": "ElevatorLanding", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomA", "MaxCapacity": 1000 }, + { "Name": "ApartmentRoomB", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomC", "MaxCapacity": 1600 }, + { "Name": "DuviriHallway", "MaxCapacity": 1600 } + ], + "FavouriteLoadouts": [] + } } diff --git a/static/fixed_responses/inbox.json b/static/fixed_responses/inbox.json index a55108d4..a43fd2b1 100644 --- a/static/fixed_responses/inbox.json +++ b/static/fixed_responses/inbox.json @@ -1,24 +1,24 @@ { - "Inbox": [ + "Inbox": [ + { + "sndr": "/Lotus/Language/Bosses/Ordis", + "msg": "/Lotus/Language/Inbox/ThankYouFreeMultipleContent", + "countedAtt": [ { - "sndr": "/Lotus/Language/Bosses/Ordis", - "msg": "/Lotus/Language/Inbox/ThankYouFreeMultipleContent", - "countedAtt": [ - { - "ItemType": "/Lotus/Upgrades/Skins/Promo/Twitch/OgrisTwitchSkin", - "ItemCount": 1 - }, - { - "ItemType": "/Lotus/Weapons/ClanTech/Chemical/RocketLauncher", - "ItemCount": 1 - } - ], - "sub": "/Lotus/Language/Inbox/ThankYouFreeMultipleSubject", - "icon": "/Lotus/Interface/Icons/Npcs/Ordis.png", - "highPriority": true, - "messageId": "removed", - "date": { "$date": { "$numberLong": "removed" } }, - "r": true + "ItemType": "/Lotus/Upgrades/Skins/Promo/Twitch/OgrisTwitchSkin", + "ItemCount": 1 + }, + { + "ItemType": "/Lotus/Weapons/ClanTech/Chemical/RocketLauncher", + "ItemCount": 1 } - ] + ], + "sub": "/Lotus/Language/Inbox/ThankYouFreeMultipleSubject", + "icon": "/Lotus/Interface/Icons/Npcs/Ordis.png", + "highPriority": true, + "messageId": "removed", + "date": { "$date": { "$numberLong": "removed" } }, + "r": true + } + ] } diff --git a/static/fixed_responses/inventory.json b/static/fixed_responses/inventory.json index 74f9d43a..e19ac090 100644 --- a/static/fixed_responses/inventory.json +++ b/static/fixed_responses/inventory.json @@ -1,131 +1,131 @@ { - "SubscribedToEmails": 0, - "Created": { "$date": { "$numberLong": "removed" } }, - "SubscribedToEmailsPersonalized": 0, - "RewardSeed": -123123123123123, - "CrewMemberBin": { "Slots": 3 }, - "CrewShipSalvageBin": { "Slots": 8 }, - "DrifterMelee": [ - { - "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", - "ItemId": { "$oid": "removed" } - } - ], - "FusionPoints": 0, - "MechBin": { "Slots": 4 }, - "OperatorAmpBin": { "Slots": 8 }, - "PveBonusLoadoutBin": { "Slots": 0 }, - "PvpBonusLoadoutBin": { "Slots": 0 }, - "RandomModBin": { "Slots": 15 }, - "RegularCredits": 0, - "SentinelBin": { "Slots": 10 }, - "SpaceSuitBin": { "Slots": 4 }, - "SpaceWeaponBin": { "Slots": 4 }, - "SuitBin": { "Slots": 2 }, - "WeaponBin": { "Slots": 8 }, - "LastInventorySync": { "$oid": "removed" }, - "NextRefill": { "$date": { "$numberLong": "removed" } }, - "ActiveLandscapeTraps": [], - "ChallengeProgress": [], - "CrewMembers": [], - "CrewShips": [], - "CrewShipHarnesses": [], - "CrewShipSalvagedWeapons": [], - "CrewShipSalvagedWeaponSkins": [], - "CrewShipWeapons": [], - "CrewShipWeaponSkins": [], - "DataKnives": [], - "DrifterGuns": [], - "Drones": [], - "Horses": [], - "Hoverboards": [], - "KubrowPets": [], - "KubrowPetEggs": [], - "KubrowPetPrints": [], - "LongGuns": [], - "MechSuits": [], - "Melee": [], - "MoaPets": [], - "OperatorAmps": [], - "OperatorLoadOuts": [], - "AdultOperatorLoadOuts": [], - "KahlLoadOuts": [], - "PendingRecipes": [], - "PersonalGoalProgress": [], - "PersonalTechProjects": [], - "Pistols": [], - "QualifyingInvasions": [], - "RepVotes": [], - "Scoops": [], - "Sentinels": [], - "SentinelWeapons": [], - "Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "123123" } }], - "SpaceGuns": [], - "SpaceMelee": [], - "SpaceSuits": [], - "SpecialItems": [], - "StepSequencers": [], - "Suits": [], - "Upgrades": [], - "WeaponSkins": [], - "Boosters": [], - "Consumables": [], - "EmailItems": [], - "FlavourItems": [], - "FocusUpgrades": [], - "FusionTreasures": [], - "LeagueTickets": [], - "LevelKeys": [], - "LoreFragmentScans": [], - "MiscItems": [], - "PendingSpectreLoadouts": [], - "Quests": [], - "QuestKeys": [], - "RawUpgrades": [], - "Recipes": [], - "Robotics": [], - "ShipDecorations": [], - "SpectreLoadouts": [], - "XPInfo": [], - "CrewShipAmmo": [], - "CrewShipRawSalvage": [], - "EvolutionProgress": [], - "Missions": [], - "TauntHistory": [], - "CompletedSyndicates": [], - "UsedDailyDeals": [], - "DailyAffiliation": 16000, - "DailyAffiliationPvp": 16000, - "DailyAffiliationLibrary": 16000, - "DailyAffiliationCetus": 16000, - "DailyAffiliationQuills": 16000, - "DailyAffiliationSolaris": 16000, - "DailyAffiliationVentkids": 16000, - "DailyAffiliationVox": 16000, - "DailyAffiliationEntrati": 16000, - "DailyAffiliationNecraloid": 16000, - "DailyAffiliationZariman": 16000, - "DailyAffiliationKahl": 16000, - "DailyFocus": 250000, - "GiftsRemaining": 8, - "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 - }, - "DuviriInfo": { "Seed": 123123123123123123, "NumCompletions": 0 }, - "TradesRemaining": 0, - "HasContributedToDojo": false, - "HasResetAccount": false, - "PendingCoupon": { - "Expiry": { "$date": { "$numberLong": "0" } }, - "Discount": 0 - }, - "PremiumCreditsFree": 0, - "ReceivedStartingGear": true, - "StoryModeChoice": "WARFRAME" + "SubscribedToEmails": 0, + "Created": { "$date": { "$numberLong": "removed" } }, + "SubscribedToEmailsPersonalized": 0, + "RewardSeed": -123123123123123, + "CrewMemberBin": { "Slots": 3 }, + "CrewShipSalvageBin": { "Slots": 8 }, + "DrifterMelee": [ + { + "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", + "ItemId": { "$oid": "removed" } + } + ], + "FusionPoints": 0, + "MechBin": { "Slots": 4 }, + "OperatorAmpBin": { "Slots": 8 }, + "PveBonusLoadoutBin": { "Slots": 0 }, + "PvpBonusLoadoutBin": { "Slots": 0 }, + "RandomModBin": { "Slots": 15 }, + "RegularCredits": 0, + "SentinelBin": { "Slots": 10 }, + "SpaceSuitBin": { "Slots": 4 }, + "SpaceWeaponBin": { "Slots": 4 }, + "SuitBin": { "Slots": 2 }, + "WeaponBin": { "Slots": 8 }, + "LastInventorySync": { "$oid": "removed" }, + "NextRefill": { "$date": { "$numberLong": "removed" } }, + "ActiveLandscapeTraps": [], + "ChallengeProgress": [], + "CrewMembers": [], + "CrewShips": [], + "CrewShipHarnesses": [], + "CrewShipSalvagedWeapons": [], + "CrewShipSalvagedWeaponSkins": [], + "CrewShipWeapons": [], + "CrewShipWeaponSkins": [], + "DataKnives": [], + "DrifterGuns": [], + "Drones": [], + "Horses": [], + "Hoverboards": [], + "KubrowPets": [], + "KubrowPetEggs": [], + "KubrowPetPrints": [], + "LongGuns": [], + "MechSuits": [], + "Melee": [], + "MoaPets": [], + "OperatorAmps": [], + "OperatorLoadOuts": [], + "AdultOperatorLoadOuts": [], + "KahlLoadOuts": [], + "PendingRecipes": [], + "PersonalGoalProgress": [], + "PersonalTechProjects": [], + "Pistols": [], + "QualifyingInvasions": [], + "RepVotes": [], + "Scoops": [], + "Sentinels": [], + "SentinelWeapons": [], + "Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "123123" } }], + "SpaceGuns": [], + "SpaceMelee": [], + "SpaceSuits": [], + "SpecialItems": [], + "StepSequencers": [], + "Suits": [], + "Upgrades": [], + "WeaponSkins": [], + "Boosters": [], + "Consumables": [], + "EmailItems": [], + "FlavourItems": [], + "FocusUpgrades": [], + "FusionTreasures": [], + "LeagueTickets": [], + "LevelKeys": [], + "LoreFragmentScans": [], + "MiscItems": [], + "PendingSpectreLoadouts": [], + "Quests": [], + "QuestKeys": [], + "RawUpgrades": [], + "Recipes": [], + "Robotics": [], + "ShipDecorations": [], + "SpectreLoadouts": [], + "XPInfo": [], + "CrewShipAmmo": [], + "CrewShipRawSalvage": [], + "EvolutionProgress": [], + "Missions": [], + "TauntHistory": [], + "CompletedSyndicates": [], + "UsedDailyDeals": [], + "DailyAffiliation": 16000, + "DailyAffiliationPvp": 16000, + "DailyAffiliationLibrary": 16000, + "DailyAffiliationCetus": 16000, + "DailyAffiliationQuills": 16000, + "DailyAffiliationSolaris": 16000, + "DailyAffiliationVentkids": 16000, + "DailyAffiliationVox": 16000, + "DailyAffiliationEntrati": 16000, + "DailyAffiliationNecraloid": 16000, + "DailyAffiliationZariman": 16000, + "DailyAffiliationKahl": 16000, + "DailyFocus": 250000, + "GiftsRemaining": 8, + "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 + }, + "DuviriInfo": { "Seed": 123123123123123123, "NumCompletions": 0 }, + "TradesRemaining": 0, + "HasContributedToDojo": false, + "HasResetAccount": false, + "PendingCoupon": { + "Expiry": { "$date": { "$numberLong": "0" } }, + "Discount": 0 + }, + "PremiumCreditsFree": 0, + "ReceivedStartingGear": true, + "StoryModeChoice": "WARFRAME" } diff --git a/static/fixed_responses/loginRewards.json b/static/fixed_responses/loginRewards.json index 0ebbf5dc..b6632556 100644 --- a/static/fixed_responses/loginRewards.json +++ b/static/fixed_responses/loginRewards.json @@ -1,9 +1,9 @@ { - "DailyTributeInfo": { - "IsMilestoneDay": false, - "IsChooseRewardSet": true, - "LoginDays": 1337, - "NextMilestoneReward": "", - "NextMilestoneDay": 50 - } + "DailyTributeInfo": { + "IsMilestoneDay": false, + "IsChooseRewardSet": true, + "LoginDays": 1337, + "NextMilestoneReward": "", + "NextMilestoneDay": 50 + } } diff --git a/static/fixed_responses/login_static.ts b/static/fixed_responses/login_static.ts index 8319186a..3b1f3de0 100644 --- a/static/fixed_responses/login_static.ts +++ b/static/fixed_responses/login_static.ts @@ -1,25 +1,25 @@ import { IGroup } from "@/src/types/loginTypes"; export const groups: IGroup[] = [ - { - experiment: "InitiatePage", - experimentGroup: "initiate_page_no_video" - }, - { experiment: "ChatQAChannel", experimentGroup: "control" }, - { - experiment: "MarketSearchRecommendations", - experimentGroup: "premium_credit_purchases_14_days" - }, - { experiment: "SurveyLocation", experimentGroup: "EXIT" }, - { experiment: "GamesightAB", experimentGroup: "a" } + { + experiment: "InitiatePage", + experimentGroup: "initiate_page_no_video" + }, + { experiment: "ChatQAChannel", experimentGroup: "control" }, + { + experiment: "MarketSearchRecommendations", + experimentGroup: "premium_credit_purchases_14_days" + }, + { experiment: "SurveyLocation", experimentGroup: "EXIT" }, + { experiment: "GamesightAB", experimentGroup: "a" } ]; export const platformCDNs = [ - "https://content.warframe.com/", - "https://content-xb1.warframe.com/", - "https://content-ps4.warframe.com/", - "https://content-swi.warframe.com/", - "https://content-mob.warframe.com/" + "https://content.warframe.com/", + "https://content-xb1.warframe.com/", + "https://content-ps4.warframe.com/", + "https://content-swi.warframe.com/", + "https://content-mob.warframe.com/" ]; export const Nonce = 1231231233; diff --git a/static/fixed_responses/purchase.json b/static/fixed_responses/purchase.json index 12e2b20f..e9c27715 100644 --- a/static/fixed_responses/purchase.json +++ b/static/fixed_responses/purchase.json @@ -1,13 +1,13 @@ { - "InventoryChanges": { - "WeaponBin": { "count": 1, "platinum": 0, "Slots": -1 }, - "Suits": [ - { - "ItemType": "/Lotus/Powersuits/Ninja/Ninja", - "Configs": [], - "ItemId": { "$oid": "123123123123" } - } - ], - "RegularCredits": -25000 - } + "InventoryChanges": { + "WeaponBin": { "count": 1, "platinum": 0, "Slots": -1 }, + "Suits": [ + { + "ItemType": "/Lotus/Powersuits/Ninja/Ninja", + "Configs": [], + "ItemId": { "$oid": "123123123123" } + } + ], + "RegularCredits": -25000 + } } diff --git a/static/fixed_responses/worldState.json b/static/fixed_responses/worldState.json index cbca668d..9c673471 100644 --- a/static/fixed_responses/worldState.json +++ b/static/fixed_responses/worldState.json @@ -1,2530 +1,2508 @@ { - "WorldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", - "Version": 10, - "MobileVersion": "4.15.13.1", - "BuildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", - "Time": 1685550327, - "Events": [ - { - "_id": { "$oid": "62d31b87106360aa5703954d" }, - "Messages": [ - { "LanguageCode": "en", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "fr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "it", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "de", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "es", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "pt", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ru", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "pl", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "uk", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "tr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ja", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "zh", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ko", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "tc", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" } - ], - "Prop": "https://discord.com/invite/playwarframe", - "Date": { "$date": { "$numberLong": "1658002200000" } }, - "Icon": "/Lotus/Interface/Icons/DiscordIconNoBacker.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62dff6238607d6b5d80876f5" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Une ressource indispensable, le Wiki FR Warframe !" }], - "Prop": "https://warframe.fandom.com/fr/wiki/Wiki_Warframe", - "Date": { "$date": { "$numberLong": "1658844600000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.f54c43d80f7da00887a7c41471884c84.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62e4112cb40d7d395d0b880f" }, - "Messages": [{ "LanguageCode": "tr", "Message": "Warframe Türkiye Discord - Takas Odası Kanalları!" }], - "Prop": "https://forums.warframe.com/topic/1318162-warframe-t%C3%BCrkiye-discorduna-takas-kanallar%C4%B1-eklendi/", - "Date": { "$date": { "$numberLong": "1659113580000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.2515eac966b9f03c6eabf9b7e434d684.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62ff8739293d0365d3046528" }, - "Messages": [ - { "LanguageCode": "fr", "Message": "[Guide] Que faire après avoir terminé \"Le Trophée de Vor\"" } - ], - "Prop": "https://forums.warframe.com/topic/1315672-guide-que-faire-apr%C3%A8s-avoir-termin%C3%A9-le-troph%C3%A9e-de-vor/", - "Date": { "$date": { "$numberLong": "1660913400000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0bd16bb52c55ec09ca1168becb87b030.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6319fa5321a116ecd1017614" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32: Veilbreaker - szczegóły po polsku" }], - "Prop": "https://forums.warframe.com/topic/1321154-aktualizacja-32-veilbreaker/", - "Date": { "$date": { "$numberLong": "1662646740000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/76a29b4bf3e094861c3d36ef31b34b3e.png", - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "633b073816cec9695a056a84" }, - "Messages": [{ "LanguageCode": "pl", "Message": "PRZEGLĄD DEVSTREAM 164" }], - "Prop": "https://forums.warframe.com/topic/1326595-przegl%C4%85d-devstream-164/", - "Date": { "$date": { "$numberLong": "1664812800000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "63456893365cb9c9a309e104" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Wprowadzenie do Polowania na Archona" }], - "Prop": "https://forums.warframe.com/topic/1327682-wprowadzenie-do-polowania-na-archona/", - "Date": { "$date": { "$numberLong": "1665493080000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", - "Priority": true, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "634d7f2f5c1c0e405d05254f" }, - "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Intro aux Chasses aux Archontes" }], - "Prop": "https://forums.warframe.com/topic/1328159-guide-introduction-aux-chasses-aux-archontes/", - "Date": { "$date": { "$numberLong": "1666023180000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "63878183da0783f1c00ffc85" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32.2: Żer na Lua - Notki po polsku!" }], - "Prop": "https://forums.warframe.com/topic/1332240-aktualizacja-322-%C5%BCer-na-lua/", - "Date": { "$date": { "$numberLong": "1669824840000" } }, - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "63a23acc1336bb81640a63dd" }, - "Messages": [], - "Prop": "", - "Date": { "$date": { "$numberLong": "1671576240000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "63c84f910ee5a50a18071a24" }, - "Messages": [{ "LanguageCode": "tr", "Message": "Sentient Rehberi" }], - "Prop": "https://forums.warframe.com/topic/1337858-sentient-rehberi/", - "Date": { "$date": { "$numberLong": "1674071820000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64120cec5ca90487bf075d73" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Hildryn Prime Access is now available!" }, - { "LanguageCode": "fr", "Message": "Le Prime Access Hildryn Prime est maintenant disponible !" }, - { "LanguageCode": "it", "Message": "L'Accesso Hildryn Prime è ora disponibile!" }, - { "LanguageCode": "de", "Message": "Hildryn Prime Access ist jetzt verfügbar!" }, - { "LanguageCode": "es", "Message": "¡Prime Access de Hildryn ya está disponible!" }, - { "LanguageCode": "pt", "Message": "O Prime Access da Hildryn Prime já está disponível!" }, - { "LanguageCode": "ru", "Message": "Доступ Хильдрин Прайм уже открыт!" }, - { "LanguageCode": "pl", "Message": "Hildryn Prime Access już dostępny!" }, - { "LanguageCode": "uk", "Message": "Гільдрина-прайм уже доступна!" }, - { "LanguageCode": "tr", "Message": "Hildryn Prime Access şimdi sizlerle!" }, - { "LanguageCode": "ja", "Message": "Hildryn Prime Accessが登場!" }, - { "LanguageCode": "zh", "Message": "Hildryn Prime Access 现已登场!" }, - { "LanguageCode": "ko", "Message": "힐드린 프라임 액세스를 지금 만나보세요!" }, - { "LanguageCode": "tc", "Message": "Hildryn Prime Access 現已登場!" } - ], - "Prop": "https://www.warframe.com/news/hildryn-prime-access?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-03-HildrynPrimeAccessIGNLaunch", - "Date": { "$date": { "$numberLong": "1678904400000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8260dab07e051d35bcef1a2a82c22965_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64134e23bf2682c23b0214ad" }, - "Messages": [{ "LanguageCode": "es", "Message": "Programas de terceros y tú" }], - "Prop": "https://forums.warframe.com/topic/1343097-programas-de-terceros-y-t%C3%BA/", - "Date": { "$date": { "$numberLong": "1678986720000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "642ca76911f9a53a5006bac6" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Créez votre masque du Paradoxe Duviri !" }], - "Prop": "https://forums.warframe.com/topic/1344657-cr%C3%A9ez-votre-propre-masque-du-paradoxe-duviri/", - "Date": { "$date": { "$numberLong": "1680648000000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/c28ced01aaf966b9222f4a6ed5a7a7fd_1600x900.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6444153668778753e30ed2d4" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Duviri et au-delà, dernières infos" }], - "Prop": "https://forums.warframe.com/topic/1345726-duviri-et-au-del%C3%A0-derni%C3%A8res-infos/", - "Date": { "$date": { "$numberLong": "1682183340000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_04/FuVYV0aWcAAc60t.jpg.0e90f5d9af010ecaa5b9467aaf7333c3.jpg", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64493dd93b9ce09dd509b136" }, - "Messages": [{ "LanguageCode": "ja", "Message": "「デュヴィリ・パラドックス」パッチノート" }], - "Prop": "https://bit.ly/3AxYiNW", - "Date": { "$date": { "$numberLong": "1682521440000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64493fde2b02c323ce07ec73" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 33: Paradoks Duviri" }], - "Prop": "https://forums.warframe.com/topic/1345996-aktualizacja-33-paradoks-duviri/", - "Date": { "$date": { "$numberLong": "1682521920000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "64494dc72c44d78bab079685" }, - "Messages": [{ "LanguageCode": "ko", "Message": "업데이트 33: 두비리의 역설" }], - "Prop": "", - "Links": [ - { - "LanguageCode": "ko", - "Link": "https://forums.warframe.com/topic/1346037-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-33-%EB%91%90%EB%B9%84%EB%A6%AC%EC%9D%98-%EC%97%AD%EC%84%A4/" - } - ], - "Date": { "$date": { "$numberLong": "1682525580000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64495365aca4975f2408f5c3" }, - "Messages": [{ "LanguageCode": "es", "Message": "Actualización 33: La Paradoja de Duviri" }], - "Prop": "https://forums.warframe.com/topic/1346059-actualizaci%C3%B3n-33-la-paradoja-de-duviri/", - "Date": { "$date": { "$numberLong": "1682527020000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64517606c429f4f85d0f069d" }, - "Messages": [{ "LanguageCode": "ja", "Message": "Nora's Mix Vol. 3 終了日 + Nightwaveの今後について" }], - "Prop": "https://bit.ly/3AJu8HT", - "Date": { "$date": { "$numberLong": "1683060000000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2021_01/Wiki-background.thumb.jpg.f568775e1b4eab008c7c6d3802c942aa.jpg", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6453f7bf20df842a150d8316" }, - "Messages": [{ "LanguageCode": "en", "Message": "Have your Dojo featured on the Star Chart!" }], - "Prop": "https://forums.warframe.com/topic/1349495-star-chart-dojo-showcase-spring-2023/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Spring-dojo-contest", - "Date": { "$date": { "$numberLong": "1683224460000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6453fc4380fb13ff9a072376" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Now Available: Nova Prime and Trinity Prime" }, - { "LanguageCode": "fr", "Message": "Maintenant disponible : Nova Prime et Trinity Prime" }, - { "LanguageCode": "it", "Message": "Ora Disponibili: Nova Prime e Trinity Prime" }, - { "LanguageCode": "de", "Message": "Jetzt erhältlich: Nova Prime und Trinity Prime" }, - { "LanguageCode": "es", "Message": "Disponible ya: Nova Prime y Trinity Prime" }, - { "LanguageCode": "pt", "Message": "Já Disponível: Nova Prime e Trinity Prime" }, - { "LanguageCode": "ru", "Message": "Уже доступны: Нова Прайм и Тринити Прайм" }, - { "LanguageCode": "pl", "Message": "Już dostępne: Nova Prime i Trinity Prime" }, - { "LanguageCode": "uk", "Message": "Уже доступні: Нова-прайм і Трініті-прайм\t" }, - { "LanguageCode": "tr", "Message": "Şimdi Sizlerle: Nova Prime ve Trinity Prime" }, - { "LanguageCode": "ja", "Message": "Nova PrimeとTrinity Primeをゲットしよう" }, - { "LanguageCode": "zh", "Message": "现已登场:Nova Prime 和 Trinity Prime" }, - { "LanguageCode": "ko", "Message": "지금 바로 구매 가능: 노바 프라임 및 트리니티 프라임" }, - { "LanguageCode": "tc", "Message": "現已登場:Nova Prime 以及 Trinity Prime" } - ], - "Prop": "https://www.warframe.com/prime-resurgence?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-PrimeResurgenceNovaTrinity-Launch", - "Date": { "$date": { "$numberLong": "1683222960000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685937600000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/3dde851b071ff5295e58f24d68b43760_800x450.png", - "Priority": false, - "MobileOnly": false, - "HideEndDateModifier": true - }, - { - "_id": { "$oid": "646646aad048b740ec04753c" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Refer a Friend Program Changes" }, - { "LanguageCode": "fr", "Message": "Modification du programme de parrainage" }, - { "LanguageCode": "it", "Message": "Cambiamenti al Programma Riferisci un Amico" }, - { "LanguageCode": "de", "Message": "Programmaktualisierung für 'Freunde rekrutieren'" }, - { "LanguageCode": "es", "Message": "Cambios en el programa \"Refiere a un amigo\"" }, - { "LanguageCode": "pt", "Message": "Mudanças no Programa de Indicação de Amigos" }, - { "LanguageCode": "pl", "Message": "Zmiany programu \"Zaproś Znajomego\"" }, - { "LanguageCode": "uk", "Message": "Зміни в програмі «Запросіть друга»" }, - { "LanguageCode": "tr", "Message": "Arkadaş Daveti Referans Programı Değişiklikleri" }, - { "LanguageCode": "ja", "Message": "お友達紹介プログラム更新" }, - { "LanguageCode": "zh", "Message": "「邀请好友计划」更新" }, - { "LanguageCode": "ko", "Message": "친구 초대 프로그램의 변화" } - ], - "Prop": "https://www.warframe.com/referral", - "Date": { "$date": { "$numberLong": "1684421760000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684393200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/fe49a80950256bf393fa2aa0b9303a_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6466726e06ca85f0e202e343" }, - "Messages": [ - { "LanguageCode": "en", "Message": "TennoCon 2023 Digital Pack Now Available" }, - { "LanguageCode": "fr", "Message": "Le Pack Digital TennoCon 2023 est maintenant disponible" }, - { "LanguageCode": "it", "Message": "Il Pacchetto Digitale TennoCon 2023 è Ora Disponibile" }, - { "LanguageCode": "de", "Message": "TennoCon 2023 Digital Paket ist jetzt verfügbar" }, - { "LanguageCode": "es", "Message": "El Paquete Digital de TennoCon 2023 ya está disponible" }, - { "LanguageCode": "pt", "Message": "O Pacote Digital da TennoCon 2023 já está disponível" }, - { "LanguageCode": "ru", "Message": "Цифровой набор TennoCon-2023 уже доступен" }, - { "LanguageCode": "pl", "Message": "Pakiet Cyfrowy TennoCon 2023 już dostępny" }, - { "LanguageCode": "uk", "Message": "Цифровий набір «Теннокон 2023» уже доступний" }, - { "LanguageCode": "tr", "Message": "TennoCon 2023 Dijital Paketi Şimdi Sizlerle" }, - { "LanguageCode": "ja", "Message": "TennoCon 2023 デジタルパック発売開始" }, - { "LanguageCode": "zh", "Message": "TennoCon 2023 虚拟礼包现已登场" }, - { "LanguageCode": "ko", "Message": "텐노콘 2023 디지털 팩을 지금 만나보세요" }, - { "LanguageCode": "tc", "Message": "TennoCon 2023 數位組合包現已登場" } - ], - "Prop": "", - "Links": [ - { "LanguageCode": "en", "Link": "https://www.warframe.com/tennocon" }, - { "LanguageCode": "fr", "Link": "https://www.warframe.com/fr/tennocon" }, - { "LanguageCode": "it", "Link": "https://www.warframe.com/it/tennocon" }, - { "LanguageCode": "de", "Link": "https://www.warframe.com/de/tennocon" }, - { "LanguageCode": "es", "Link": "https://www.warframe.com/es/tennocon" }, - { "LanguageCode": "pt", "Link": "https://www.warframe.com/pt-br/tennocon" }, - { "LanguageCode": "ru", "Link": "https://www.warframe.com/ru/tennocon" }, - { "LanguageCode": "pl", "Link": "https://www.warframe.com/pl/tennocon" }, - { "LanguageCode": "uk", "Link": "https://www.warframe.com/uk/tennocon" }, - { "LanguageCode": "tr", "Link": "https://www.warframe.com/tr/tennocon" }, - { "LanguageCode": "ja", "Link": "https://www.warframe.com/ja/tennocon" }, - { "LanguageCode": "zh", "Link": "https://www.warframe.com/zh-hans/tennocon" }, - { "LanguageCode": "ko", "Link": "https://www.warframe.com/ko/tennocon" }, - { "LanguageCode": "tc", "Link": "https://www.warframe.com/zh-hant/tennocon" } - ], - "Date": { "$date": { "$numberLong": "1684432080000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684404000000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/images/tennocon/2023/digital-pack-banner-2x.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64668cd31137f75bf70d0e09" }, - "Messages": [ - { "LanguageCode": "en", "Message": "May in Warframe Roundup" }, - { "LanguageCode": "fr", "Message": "Tour d'horizon du mois de mai dans Warframe" }, - { "LanguageCode": "it", "Message": "Maggio in Warframe: Riepilogo" }, - { "LanguageCode": "de", "Message": "Mai-Zusammenfassung für Warframe" }, - { "LanguageCode": "es", "Message": "Mayo en Warframe: Resumen" }, - { "LanguageCode": "pt", "Message": "Resumo do mês de maio no Warframe" }, - { "LanguageCode": "pl", "Message": "Maj w Warframe" }, - { "LanguageCode": "uk", "Message": "Травнева добірка у Warframe" }, - { "LanguageCode": "tr", "Message": "Mayıs Ayı Warframe Özeti" }, - { "LanguageCode": "ja", "Message": "5月の『Warframe』振り返り" }, - { "LanguageCode": "zh", "Message": "《Warframe》的五月摘要" }, - { "LanguageCode": "ko", "Message": "5월의 워프레임 요약" }, - { "LanguageCode": "tc", "Message": "Warframe 5 月份總結" } - ], - "Prop": "https://www.warframe.com/news/may-in-warframe-roundup?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-MayWarframeRoundup", - "Date": { "$date": { "$numberLong": "1684440240000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684440000000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/8f08145f560b43a4cafadc7bb9c5748_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64677ce96fba686c8a06bd24" }, - "Messages": [ - { - "LanguageCode": "en", - "Message": "May 25 Charity Stream: Warframe x Covenant House! Click To Learn More. 6 p.m. EST " - } - ], - "Prop": "https://wrfr.me/chmm23", - "Date": { "$date": { "$numberLong": "1684503360000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6467baa3db8bd174db0b163b" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Pre-order 10 Year Anniversary Merch!" }, - { - "LanguageCode": "fr", - "Message": "Précommandez la Collection de produits dérivés du 10e Anniversaire !" - }, - { "LanguageCode": "it", "Message": "Preordina il Merch per il 10° Anniversario!" }, - { "LanguageCode": "de", "Message": "Bestellt die Merch-Kollektion zum 10. Jubiläum vor!" }, - { "LanguageCode": "es", "Message": "¡Reserva los productos del 10° aniversario!" }, - { "LanguageCode": "pt", "Message": "Faça a pré-encomenda de Produtos do Aniversário de 10 anos!" }, - { "LanguageCode": "pl", "Message": "Zamów w przedsprzedaży gadżety na 10-lecie!" }, - { "LanguageCode": "tr", "Message": "10. Yıl Dönümü Ürünleri için ön siparişini ver!" }, - { "LanguageCode": "ja", "Message": "Warframe 10周年記念グッズを予約購入!" }, - { "LanguageCode": "zh", "Message": "预购十周年纪念周边商品!" }, - { "LanguageCode": "ko", "Message": "10주년 기념 굿즈를 예약 주문하세요!" }, - { "LanguageCode": "tc", "Message": "預購 10 週年紀念周邊商品!" } - ], - "Prop": "https://store.warframe.com/products/10-year-anniversary-collection?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Merch-10year-Collection", - "Date": { "$date": { "$numberLong": "1684519320000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684519200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/81f0ccac0ee2cdfb628a64f9f72d2166_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "646e55122b97d301df08b65a" }, - "Messages": [{ "LanguageCode": "ja", "Message": "Devstream 第171回のお知らせ" }], - "Prop": "https://bit.ly/426QXR5", - "Date": { "$date": { "$numberLong": "1684952280000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/4e0d4b80256c0b05a5a9643664799beb.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "646e5cc6af17a161c20d79a4" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Nora’s Mix Vol. 4 has begun" }, - { "LanguageCode": "fr", "Message": "Le Mix de Nora Vol. 4 est disponible" }, - { "LanguageCode": "it", "Message": "Mix di Nora Vol. 4 è iniziato" }, - { "LanguageCode": "de", "Message": "Noras Mix - Vol. 4 hat begonnen" }, - { "LanguageCode": "es", "Message": "Comenzó el Mix de Nora Vol. 4" }, - { "LanguageCode": "pt", "Message": "O Mix da Nora Vol. 4 começou" }, - { "LanguageCode": "ru", "Message": "Микс Норы: Диск 4 уже в начался" }, - { "LanguageCode": "pl", "Message": "Składanka Nory cz. 4 już dostępna" }, - { "LanguageCode": "uk", "Message": "Вибірка Нори 4 уже в грі" }, - { "LanguageCode": "tr", "Message": "Nora'nın Derlemesi - 4. Seri şimdi sizlerle" }, - { "LanguageCode": "ja", "Message": "Nora's Mix Vol.4 開催!" }, - { "LanguageCode": "zh", "Message": "《Nora 的混选 Vol. 4》现已开始!" }, - { "LanguageCode": "ko", "Message": "노라의 믹스 Vol. 4가 시작되었습니다" }, - { "LanguageCode": "tc", "Message": "Nora 合輯 VI 已登場" } - ], - "Prop": "https://www.warframe.com/news/noras-mix-vol-4?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-NightwaveVol4Launch", - "Date": { "$date": { "$numberLong": "1684953960000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684951200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/42721390b8812fe65296ce5eee7d862_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "646e6a4cf16914573401c77b" }, - "Messages": [ - { "LanguageCode": "tr", "Message": "Nora’nın Derlemesi - 3. Seri Tamamlandı + 4. Seri Sizlerle!" } - ], - "Prop": "https://forums.warframe.com/topic/1354223-nora%E2%80%99n%C4%B1n-derlemesi-seri-3-tamamland%C4%B1-seri-4-24-may%C4%B1s%E2%80%99ta-sizlerle/", - "Date": { "$date": { "$numberLong": "1684957500000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "646fbefdeaa2199bc406b117" }, - "Messages": [ - { "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.11 + Revisión 33.0.12" } - ], - "Prop": "https://forums.warframe.com/topic/1354406-la-paradoja-de-duviri-revisi%C3%B3n-33011-revisi%C3%B3n-33012/", - "Date": { "$date": { "$numberLong": "1685044920000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6471f7ad49b3f286420543a4" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Résumé Devstream #171 : version FR" }], - "Prop": "https://forums.warframe.com/topic/1354587-r%C3%A9sum%C3%A9-devstream-171-version-fr/", - "Date": { "$date": { "$numberLong": "1685190540000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.3fa3bb18a3cd29a7ee623ec88bf72429.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6475055203028af6f5076925" }, - "Messages": [{ "LanguageCode": "en", "Message": "The Duviri Paradox: Hotfix 33.0.14" }], - "Prop": "https://www.warframe.com/updates/pc/33-0-14", - "Date": { "$date": { "$numberLong": "1685387100000" } }, - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "64751514ef6fa74efd0b624e" }, - "Messages": [ - { "LanguageCode": "en", "Message": " PSA: Hotfix pause until The 7 Crimes of Kullervo Update" } - ], - "Prop": "https://forums.warframe.com/topic/1355007-psa-hotfixing-paused-until-the-7-crimes-of-kullervo/", - "Date": { "$date": { "$numberLong": "1685394600000" } }, - "Priority": true, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "647516f0fefde43d790ad0ed" }, - "Messages": [{ "LanguageCode": "en", "Message": "Coming Soon: Prime Time #352!" }], - "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", - "Date": { "$date": { "$numberLong": "1685395080000" } }, - "EventStartDate": { "$date": { "$numberLong": "1685656800000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685664000000" } }, - "EventLiveUrl": "https://www.twitch.tv/warframe/", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6475175603028af6f50769e3" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Twitch Drops: Community Stream Schedule May 29 to June 2!" } - ], - "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", - "Date": { "$date": { "$numberLong": "1685395200000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6475ddac402fe7be5c0f0efb" }, - "Messages": [{ "LanguageCode": "ja", "Message": "5月29日~6月2日の配信スケジュール" }], - "Prop": "https://bit.ly/43eU1f4", - "Date": { "$date": { "$numberLong": "1685446020000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "647624dc351728a45207bd67" }, - "Messages": [{ "LanguageCode": "es", "Message": "Twitch Drops: Programa de streams de la comunidad" }], - "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", - "Date": { "$date": { "$numberLong": "1685464200000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6476250bedcc8797810215de" }, - "Messages": [ - { "LanguageCode": "es", "Message": "¡Emisión Tenno con sorteo de Hildryn Prime Access + Twitch Drop!" } - ], - "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", - "Date": { "$date": { "$numberLong": "1685464260000" } }, - "EventStartDate": { "$date": { "$numberLong": "1685559600000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685563200000" } }, - "EventLiveUrl": "https://www.twitch.tv/warframeinternational", - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/1c2a55a07ef0fcf121b6b4633b92c060.jpg", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "647632c88f764656130e1824" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Streams : 29 mai - 2 juin" }], - "Prop": "https://forums.warframe.com/topic/1355110-streams-communautaires-29-mai-2-juin/", - "Date": { "$date": { "$numberLong": "1685467800000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64764bd4931e7ae47f0d1a60" }, - "Messages": [ - { "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.13 + Revisión 33.0.14" } - ], - "Prop": "https://forums.warframe.com/topic/1355129-la-paradoja-de-duviri-revisi%C3%B3n-33013-revisi%C3%B3n-33014/", - "Date": { "$date": { "$numberLong": "1685474220000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - } - ], - "Goals": [ - { - "_id": { "$oid": "5c7cb0d00000000000000000" }, - "Activation": { "$date": { "$numberLong": "1684512000000" } }, - "Expiry": { "$date": { "$numberLong": "1685721600000" } }, - "Node": "SolNode129", - "ScoreVar": "FissuresClosed", - "ScoreLocTag": "/Lotus/Language/G1Quests/HeatFissuresEventScore", - "Count": 24, - "HealthPct": 0.24, - "Regions": [1], - "Desc": "/Lotus/Language/G1Quests/HeatFissuresEventName", - "ToolTip": "/Lotus/Language/G1Quests/HeatFissuresEventDesc", - "OptionalInMission": true, - "Tag": "HeatFissure", - "UpgradeIds": [{ "$oid": "64667809d9c6963e382d9546" }, { "$oid": "64667809d9c6963e382d9547" }], - "Personal": true, - "Community": true, - "Goal": 100, - "Reward": { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Weapons/Corpus/LongGuns/CrpBFG/Vandal/VandalCrpBFG"], - "countedItems": [] - }, - "InterimGoals": [5, 25, 50, 75], - "InterimRewards": [ - { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Upgrades/Skins/Clan/OrbBadgeItem"], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": [ - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Shotgun/ShotgunMedicMod", - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Rifle/SerratedRushMod" - ], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": [ - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Pistol/MultishotDodgeMod", - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Melee/CritDamageChargeSpeedMod" - ], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Upgrades/Skins/Sigils/OrbSigil"], - "countedItems": [] - } - ] - }, - { - "_id": { "$oid": "64663a0c0483e3f5b70ff0b2" }, - "Activation": { "$date": { "$numberLong": "1684508400000" } }, - "Expiry": { "$date": { "$numberLong": "1685717940000" } }, - "Count": 0, - "Goal": 1, - "Success": 0, - "Personal": true, - "ClampNodeScores": true, - "Node": "EventNode27", - "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2018D", - "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", - "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", - "Tag": "Anniversary2018TacAlert", - "Reward": { - "items": [ - "/Lotus/StoreItems/Upgrades/Skins/Scarves/DexScarf", - "/Lotus/StoreItems/Types/Game/CatbrowPet/CatbrowGeneticSignature" - ] - } - }, - { - "_id": { "$oid": "64663a3c866d9fe65c012364" }, - "Activation": { "$date": { "$numberLong": "1684508400000" } }, - "Expiry": { "$date": { "$numberLong": "1685717940000" } }, - "Count": 0, - "Goal": 1, - "Success": 0, - "Personal": true, - "ClampNodeScores": true, - "Node": "EventNode24", - "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2023k", - "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", - "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", - "Tag": "Anniversary2018TacAlert", - "Reward": { - "items": [ - "/Lotus/StoreItems/Upgrades/Skins/Wisp/DexWispSkin", - "/Lotus/StoreItems/Types/StoreItems/SlotItems/TwoSentinelSlotItem" - ] - } - } - ], - "Alerts": [], - "Sorties": [ - { - "_id": { "$oid": "64776b7eba82e08c76d6cb9b" }, - "Activation": { "$date": { "$numberLong": "1685548800000" } }, - "Expiry": { "$date": { "$numberLong": "1685635200000" } }, - "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", - "Seed": 28971, - "Boss": "SORTIE_BOSS_ALAD", - "ExtraDrops": [], - "Variants": [ - { - "missionType": "MT_MOBILE_DEFENSE", - "modifierType": "SORTIE_MODIFIER_HAZARD_RADIATION", - "node": "SolNode53", - "tileset": "CorpusGasCityTileset" - }, - { - "missionType": "MT_RESCUE", - "modifierType": "SORTIE_MODIFIER_IMPACT", - "node": "SolNode107", - "tileset": "CorpusOutpostTileset" - }, - { - "missionType": "MT_EXTERMINATION", - "modifierType": "SORTIE_MODIFIER_LOW_ENERGY", - "node": "SolNode304", - "tileset": "OrokinMoonTilesetCorpus" - } - ], - "Twitter": true - } - ], - "LiteSorties": [ - { - "_id": { "$oid": "6473e77dfff198b17e47812d" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", - "Seed": 62757, - "Boss": "SORTIE_BOSS_AMAR", - "Missions": [ - { "missionType": "MT_MOBILE_DEFENSE", "node": "SolNode30" }, - { "missionType": "MT_EXCAVATE", "node": "SolNode11" }, - { "missionType": "MT_ASSASSINATION", "node": "SolNode99" } - ] - } - ], - "SyndicateMissions": [ - { - "_id": { "$oid": "64775ff00000000000000002" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "EntratiSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [5, 5, 5] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierCTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 15, - "maxEnemyLevel": 25, - "xpAmounts": [11, 11, 11] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierBTableARewards", - "masteryReq": 5, - "minEnemyLevel": 25, - "maxEnemyLevel": 30, - "endless": true, - "bonusXpMultiplier": 0.15000001, - "xpAmounts": [14, 14, 14] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierDTableARewards", - "masteryReq": 2, - "minEnemyLevel": 30, - "maxEnemyLevel": 40, - "xpAmounts": [19, 19, 19, 29] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", - "masteryReq": 3, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [20, 20, 20, 20, 39] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [25, 25, 25, 25, 50] - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierATableCRewards", - "masteryReq": 5, - "minEnemyLevel": 30, - "maxEnemyLevel": 40, - "xpAmounts": [2, 2, 2, 4], - "locationTag": "ChamberB", - "isVault": true - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierBTableCRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 50, - "xpAmounts": [4, 4, 4, 5], - "locationTag": "ChamberA", - "isVault": true - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierCTableCRewards", - "masteryReq": 5, - "minEnemyLevel": 50, - "maxEnemyLevel": 60, - "xpAmounts": [5, 5, 5, 7], - "locationTag": "ChamberC", - "isVault": true - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000022" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "SolarisSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobRecovery", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [350, 350, 350] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobExterminate", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierBTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 10, - "maxEnemyLevel": 30, - "xpAmounts": [680, 680, 680] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierCTableBRewards", - "masteryReq": 2, - "minEnemyLevel": 20, - "maxEnemyLevel": 40, - "xpAmounts": [610, 610, 610, 890] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobRecovery", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierDTableBRewards", - "masteryReq": 3, - "minEnemyLevel": 30, - "maxEnemyLevel": 50, - "xpAmounts": [580, 580, 580, 580, 1140] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [680, 680, 680, 680, 1340] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobExcavation", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [840, 840, 840, 840, 1660] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobExterminate", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", - "masteryReq": 0, - "minEnemyLevel": 50, - "maxEnemyLevel": 70, - "xpAmounts": [760, 760, 760, 760, 1500] - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000007" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "CetusSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [420, 420, 420] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 10, - "maxEnemyLevel": 30, - "xpAmounts": [690, 690, 690] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTableBRewards", - "masteryReq": 2, - "minEnemyLevel": 20, - "maxEnemyLevel": 40, - "xpAmounts": [590, 590, 590, 870] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountySab", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTableBRewards", - "masteryReq": 3, - "minEnemyLevel": 30, - "maxEnemyLevel": 50, - "xpAmounts": [550, 550, 550, 550, 1080] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [690, 690, 690, 690, 1350] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [840, 840, 840, 840, 1660] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", - "masteryReq": 0, - "minEnemyLevel": 50, - "maxEnemyLevel": 70, - "xpAmounts": [830, 830, 830, 830, 1640] - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000026" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "ZarimanSyndicate", - "Seed": 20831, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4de" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "ArbitersSyndicate", - "Seed": 28971, - "Nodes": ["SolNode36", "SolNode123", "SolNode225", "SolNode709", "SolNode137", "SolNode195", "SolNode81"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4df" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "CephalonSudaSyndicate", - "Seed": 25969, - "Nodes": ["SolNode79", "SolNode41", "SettlementNode1", "SolNode132", "SolNode166", "SolNode72", "SolNode23"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e0" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "NecraloidSyndicate", - "Seed": 81067, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e1" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "EventSyndicate", - "Seed": 28897, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e2" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "KahlSyndicate", - "Seed": 92441, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e4" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "QuillsSyndicate", - "Seed": 61214, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e3" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "NewLokaSyndicate", - "Seed": 21393, - "Nodes": ["SolNode68", "SolNode2", "SolNode82", "SolNode217", "SolNode409", "SolNode139", "SolNode75"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e5" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "PerrinSyndicate", - "Seed": 72469, - "Nodes": ["SolNode39", "SolNode12", "SolNode146", "SolNode101", "SolNode121", "SolNode408", "SolNode96"] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e6" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegion2Syndicate", - "Seed": 13526, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ea" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission4Syndicate", - "Seed": 20328, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4eb" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission5Syndicate", - "Seed": 87241, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ec" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission6Syndicate", - "Seed": 54438, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e7" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegion3Syndicate", - "Seed": 20666, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e9" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission3Syndicate", - "Seed": 7709, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e8" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission2Syndicate", - "Seed": 33027, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ee" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission8Syndicate", - "Seed": 21780, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ef" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermissionSyndicate", - "Seed": 95381, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ed" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission7Syndicate", - "Seed": 53091, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f0" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionSyndicate", - "Seed": 60623, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f1" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RedVeilSyndicate", - "Seed": 78309, - "Nodes": [ - "SolNode15", - "SolNode106", - "SettlementNode3", - "SolNode224", - "SolNode401", - "SolNode76", - "SolNode62" - ] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f3" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "VoxSyndicate", - "Seed": 52842, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f2" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "VentKidsSyndicate", - "Seed": 49149, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f4" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "SteelMeridianSyndicate", - "Seed": 9289, - "Nodes": ["SolNode130", "SolNode61", "SolNode30", "SolNode10", "SolNode102", "SolNode64", "SolNode50"] - } - ], - "ActiveMissions": [ - { - "_id": { "$oid": "64775c05cab187e046c3d277" }, - "Region": 12, - "Seed": 94704, - "Activation": { "$date": { "$numberLong": "1685543941731" } }, - "Expiry": { "$date": { "$numberLong": "1685550975969" } }, - "Node": "SolNode184", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT4", - "Hard": true - }, - { - "_id": { "$oid": "647761698afaf76e50461fc8" }, - "Region": 19, - "Seed": 58268, - "Activation": { "$date": { "$numberLong": "1685545321337" } }, - "Expiry": { "$date": { "$numberLong": "1685551434577" } }, - "Node": "SolNode746", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT5", - "Hard": true - }, - { - "_id": { "$oid": "6477630df698f676b0b32282" }, - "Region": 15, - "Seed": 70123, - "Activation": { "$date": { "$numberLong": "1685545741655" } }, - "Expiry": { "$date": { "$numberLong": "1685550886528" } }, - "Node": "SolNode412", - "MissionType": "MT_TERRITORY", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "6477630df698f676b0b32283" }, - "Region": 9, - "Seed": 15094, - "Activation": { "$date": { "$numberLong": "1685545741655" } }, - "Expiry": { "$date": { "$numberLong": "1685550459337" } }, - "Node": "SolNode56", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "647764ed12544a97c96618a5" }, - "Region": 15, - "Seed": 66090, - "Activation": { "$date": { "$numberLong": "1685546221415" } }, - "Expiry": { "$date": { "$numberLong": "1685553063549" } }, - "Node": "SolNode405", - "MissionType": "MT_SURVIVAL", - "Modifier": "VoidT3", - "Hard": true - }, - { - "_id": { "$oid": "647764ed12544a97c96618a6" }, - "Region": 13, - "Seed": 19703, - "Activation": { "$date": { "$numberLong": "1685546221415" } }, - "Expiry": { "$date": { "$numberLong": "1685550448683" } }, - "Node": "SolNode216", - "MissionType": "MT_EXCAVATE", - "Modifier": "VoidT3", - "Hard": true - }, - { - "_id": { "$oid": "64776565dc85a669dae19b38" }, - "Region": 3, - "Seed": 90150, - "Activation": { "$date": { "$numberLong": "1685546341763" } }, - "Expiry": { "$date": { "$numberLong": "1685552506487" } }, - "Node": "SolNode89", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "64776565dc85a669dae19b39" }, - "Region": 2, - "Seed": 11253, - "Activation": { "$date": { "$numberLong": "1685546341763" } }, - "Expiry": { "$date": { "$numberLong": "1685550810452" } }, - "Node": "SolNode128", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08dfe" }, - "Region": 5, - "Seed": 67983, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685553220288" } }, - "Node": "SolNode97", - "MissionType": "MT_INTEL", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08dff" }, - "Region": 10, - "Seed": 74682, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685551010303" } }, - "Node": "SolNode135", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08e00" }, - "Region": 6, - "Seed": 15538, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685551799194" } }, - "Node": "SolNode18", - "MissionType": "MT_TERRITORY", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776ec5752b9bd0c871fa7c" }, - "Region": 4, - "Seed": 47626, - "Activation": { "$date": { "$numberLong": "1685548741727" } }, - "Expiry": { "$date": { "$numberLong": "1685553411719" } }, - "Node": "SolNode36", - "MissionType": "MT_RESCUE", - "Modifier": "VoidT1" - }, - { - "_id": { "$oid": "647770a68bb595254a64c26e" }, - "Region": 7, - "Seed": 86090, - "Activation": { "$date": { "$numberLong": "1685549222143" } }, - "Expiry": { "$date": { "$numberLong": "1685556263692" } }, - "Node": "SolNode122", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT3" - }, - { - "_id": { "$oid": "647770a68bb595254a64c26f" }, - "Region": 13, - "Seed": 39703, - "Activation": { "$date": { "$numberLong": "1685549222143" } }, - "Expiry": { "$date": { "$numberLong": "1685553504151" } }, - "Node": "SolNode212", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT3" - }, - { - "_id": { "$oid": "6477720ec9dd724c888eff5b" }, - "Region": 19, - "Seed": 2767, - "Activation": { "$date": { "$numberLong": "1685549582078" } }, - "Expiry": { "$date": { "$numberLong": "1685554300277" } }, - "Node": "SolNode744", - "MissionType": "MT_SURVIVAL", - "Modifier": "VoidT5" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7c" }, - "Region": 10, - "Seed": 84581, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685554027918" } }, - "Node": "SolNode149", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT2" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7d" }, - "Region": 16, - "Seed": 50951, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685553961019" } }, - "Node": "SettlementNode12", - "MissionType": "MT_RESCUE", - "Modifier": "VoidT2" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7e" }, - "Region": 5, - "Seed": 37897, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685556218772" } }, - "Node": "SolNode73", - "MissionType": "MT_CAPTURE", - "Modifier": "VoidT2" - } - ], - "GlobalUpgrades": [], - "FlashSales": [ - { - "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", - "StartDate": { "$date": { "$numberLong": "1654560000000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", - "StartDate": { "$date": { "$numberLong": "1661173200000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "StartDate": { "$date": { "$numberLong": "1662422400000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", - "StartDate": { "$date": { "$numberLong": "1667347200000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": true, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 5, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 80, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 195, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/XakuLotusDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 85, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 430, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VorunaVoidshellSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 90, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 90, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/MesaVoltDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 95, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 260, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/Items/MiscItems/OrokinCatalyst", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 105, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 20, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Powersuits/Werewolf/Werewolf", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 100, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 325, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/FormaPack", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 110, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 35, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Effects/NarmerEvolvingEphemeraA", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 115, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 80, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Saryn/SarynLunarNewYearSkin", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 120, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 165, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", - "StartDate": { "$date": { "$numberLong": "1678838400000" } }, - "EndDate": { "$date": { "$numberLong": "1693494000000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 1, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", - "StartDate": { "$date": { "$numberLong": "1678838400000" } }, - "EndDate": { "$date": { "$numberLong": "1693440000000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 2, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1683828000000" } }, - "EndDate": { "$date": { "$numberLong": "1687110900000" } }, - "DefaultPremium": 1, - "DefaulRegular": 0, - "LocalizedItemName": "FREE WITH PRIME GAMING" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1683828000000" } }, - "EndDate": { "$date": { "$numberLong": "1687110900000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": true, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1684432800000" } }, - "EndDate": { "$date": { "$numberLong": "1693504800000" } } - } - ], - "InGameMarket": { - "LandingPage": { - "Categories": [ - { - "CategoryName": "POPULAR", - "Name": "/Lotus/Language/Menu/StorePopular", - "Icon": "popular", - "Items": [ - "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", - "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", - "/Lotus/Types/StoreItems/Packages/WarframeBundles/WolfFrameBundle", - "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", - "/Lotus/Types/StoreItems/Packages/ProtovyreCosmeticsBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/EmberDeluxeIISkinBundle", - "/Lotus/Types/StoreItems/Packages/RailjackVoidrigBundle", - "/Lotus/StoreItems/Powersuits/Werewolf/Werewolf", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", - "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", - "/Lotus/Types/StoreItems/Packages/FormaPack", - "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst" - ] - }, - { - "CategoryName": "DUVIRI_PARADOX", - "Name": "/Lotus/Language/Store/Store_DuviriParadox", - "Icon": "duviriparadox", - "AddToMenu": true, - "Items": [ - "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/BaruukDeluxeSkinBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/WispDeluxeSkinBundle", - "/Lotus/Types/StoreItems/Packages/VoidAdornmentIVBundle", - "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", - "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitArabicBundle", - "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", - "/Lotus/StoreItems/Upgrades/Skins/Duviri/DuviriSwordTowerShieldSkin", - "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitOutfit1ABundle", - "/Lotus/StoreItems/Weapons/Tenno/Bows/DaxDuviriAsymetricalBow/DaxDuviriAsymmetricalLongBowPlayerWeapon", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAetigo", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundlePsyacus", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAccessories", - "/Lotus/Types/StoreItems/Packages/Tattoo/TattooBundleDuviri", - "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" - ] - }, - { - "CategoryName": "TENNOGEN", - "Name": "/Lotus/Language/Menu/Store_Tennogen", - "Icon": "tennogen", - "Items": [ - "/Lotus/StoreItems/Upgrades/Skins/Runner/SWGaussNitrolystSkin", - "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWRetrorolystSyandana", - "/Lotus/StoreItems/Upgrades/Skins/BrokenFrame/SWXakuDeatheaSkin", - "/Lotus/StoreItems/Upgrades/Skins/Sentient/SWCalibanScionHelmet", - "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWAlocanaSyandana", - "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" - ] - }, - { - "CategoryName": "DUVIRI_CHOICES", - "Name": "/Lotus/Language/Store/Store_DuviriChoices", - "Icon": "duvirichoices", - "AddToMenu": true, - "Items": [] - }, - { - "CategoryName": "PREMIUM_BUNDLES", - "Name": "/Lotus/Language/Store/Store_PremiumBundles", - "Icon": "premiumbundles", - "Items": [ - "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", - "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", - "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", - "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB" - ] - }, - { - "CategoryName": "WISH_LIST", - "Name": "/Lotus/Language/Menu/Store_Wishlist", - "Icon": "wishlist", - "Items": [] - } - ] - } + "WorldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", + "Version": 10, + "MobileVersion": "4.15.13.1", + "BuildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", + "Time": 1685550327, + "Events": [ + { + "_id": { "$oid": "62d31b87106360aa5703954d" }, + "Messages": [ + { "LanguageCode": "en", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "fr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "it", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "de", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "es", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "pt", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ru", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "pl", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "uk", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "tr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ja", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "zh", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ko", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "tc", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" } + ], + "Prop": "https://discord.com/invite/playwarframe", + "Date": { "$date": { "$numberLong": "1658002200000" } }, + "Icon": "/Lotus/Interface/Icons/DiscordIconNoBacker.png", + "Priority": false, + "MobileOnly": false, + "Community": true }, - "Invasions": [ + { + "_id": { "$oid": "62dff6238607d6b5d80876f5" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Une ressource indispensable, le Wiki FR Warframe !" }], + "Prop": "https://warframe.fandom.com/fr/wiki/Wiki_Warframe", + "Date": { "$date": { "$numberLong": "1658844600000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.f54c43d80f7da00887a7c41471884c84.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "62e4112cb40d7d395d0b880f" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Warframe Türkiye Discord - Takas Odası Kanalları!" }], + "Prop": "https://forums.warframe.com/topic/1318162-warframe-t%C3%BCrkiye-discorduna-takas-kanallar%C4%B1-eklendi/", + "Date": { "$date": { "$numberLong": "1659113580000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.2515eac966b9f03c6eabf9b7e434d684.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "62ff8739293d0365d3046528" }, + "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Que faire après avoir terminé \"Le Trophée de Vor\"" }], + "Prop": "https://forums.warframe.com/topic/1315672-guide-que-faire-apr%C3%A8s-avoir-termin%C3%A9-le-troph%C3%A9e-de-vor/", + "Date": { "$date": { "$numberLong": "1660913400000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0bd16bb52c55ec09ca1168becb87b030.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6319fa5321a116ecd1017614" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32: Veilbreaker - szczegóły po polsku" }], + "Prop": "https://forums.warframe.com/topic/1321154-aktualizacja-32-veilbreaker/", + "Date": { "$date": { "$numberLong": "1662646740000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/76a29b4bf3e094861c3d36ef31b34b3e.png", + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "633b073816cec9695a056a84" }, + "Messages": [{ "LanguageCode": "pl", "Message": "PRZEGLĄD DEVSTREAM 164" }], + "Prop": "https://forums.warframe.com/topic/1326595-przegl%C4%85d-devstream-164/", + "Date": { "$date": { "$numberLong": "1664812800000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "63456893365cb9c9a309e104" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Wprowadzenie do Polowania na Archona" }], + "Prop": "https://forums.warframe.com/topic/1327682-wprowadzenie-do-polowania-na-archona/", + "Date": { "$date": { "$numberLong": "1665493080000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", + "Priority": true, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "634d7f2f5c1c0e405d05254f" }, + "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Intro aux Chasses aux Archontes" }], + "Prop": "https://forums.warframe.com/topic/1328159-guide-introduction-aux-chasses-aux-archontes/", + "Date": { "$date": { "$numberLong": "1666023180000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "63878183da0783f1c00ffc85" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32.2: Żer na Lua - Notki po polsku!" }], + "Prop": "https://forums.warframe.com/topic/1332240-aktualizacja-322-%C5%BCer-na-lua/", + "Date": { "$date": { "$numberLong": "1669824840000" } }, + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "63a23acc1336bb81640a63dd" }, + "Messages": [], + "Prop": "", + "Date": { "$date": { "$numberLong": "1671576240000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "63c84f910ee5a50a18071a24" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Sentient Rehberi" }], + "Prop": "https://forums.warframe.com/topic/1337858-sentient-rehberi/", + "Date": { "$date": { "$numberLong": "1674071820000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64120cec5ca90487bf075d73" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Hildryn Prime Access is now available!" }, + { "LanguageCode": "fr", "Message": "Le Prime Access Hildryn Prime est maintenant disponible !" }, + { "LanguageCode": "it", "Message": "L'Accesso Hildryn Prime è ora disponibile!" }, + { "LanguageCode": "de", "Message": "Hildryn Prime Access ist jetzt verfügbar!" }, + { "LanguageCode": "es", "Message": "¡Prime Access de Hildryn ya está disponible!" }, + { "LanguageCode": "pt", "Message": "O Prime Access da Hildryn Prime já está disponível!" }, + { "LanguageCode": "ru", "Message": "Доступ Хильдрин Прайм уже открыт!" }, + { "LanguageCode": "pl", "Message": "Hildryn Prime Access już dostępny!" }, + { "LanguageCode": "uk", "Message": "Гільдрина-прайм уже доступна!" }, + { "LanguageCode": "tr", "Message": "Hildryn Prime Access şimdi sizlerle!" }, + { "LanguageCode": "ja", "Message": "Hildryn Prime Accessが登場!" }, + { "LanguageCode": "zh", "Message": "Hildryn Prime Access 现已登场!" }, + { "LanguageCode": "ko", "Message": "힐드린 프라임 액세스를 지금 만나보세요!" }, + { "LanguageCode": "tc", "Message": "Hildryn Prime Access 現已登場!" } + ], + "Prop": "https://www.warframe.com/news/hildryn-prime-access?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-03-HildrynPrimeAccessIGNLaunch", + "Date": { "$date": { "$numberLong": "1678904400000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8260dab07e051d35bcef1a2a82c22965_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64134e23bf2682c23b0214ad" }, + "Messages": [{ "LanguageCode": "es", "Message": "Programas de terceros y tú" }], + "Prop": "https://forums.warframe.com/topic/1343097-programas-de-terceros-y-t%C3%BA/", + "Date": { "$date": { "$numberLong": "1678986720000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "642ca76911f9a53a5006bac6" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Créez votre masque du Paradoxe Duviri !" }], + "Prop": "https://forums.warframe.com/topic/1344657-cr%C3%A9ez-votre-propre-masque-du-paradoxe-duviri/", + "Date": { "$date": { "$numberLong": "1680648000000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/c28ced01aaf966b9222f4a6ed5a7a7fd_1600x900.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6444153668778753e30ed2d4" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Duviri et au-delà, dernières infos" }], + "Prop": "https://forums.warframe.com/topic/1345726-duviri-et-au-del%C3%A0-derni%C3%A8res-infos/", + "Date": { "$date": { "$numberLong": "1682183340000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_04/FuVYV0aWcAAc60t.jpg.0e90f5d9af010ecaa5b9467aaf7333c3.jpg", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64493dd93b9ce09dd509b136" }, + "Messages": [{ "LanguageCode": "ja", "Message": "「デュヴィリ・パラドックス」パッチノート" }], + "Prop": "https://bit.ly/3AxYiNW", + "Date": { "$date": { "$numberLong": "1682521440000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64493fde2b02c323ce07ec73" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 33: Paradoks Duviri" }], + "Prop": "https://forums.warframe.com/topic/1345996-aktualizacja-33-paradoks-duviri/", + "Date": { "$date": { "$numberLong": "1682521920000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "64494dc72c44d78bab079685" }, + "Messages": [{ "LanguageCode": "ko", "Message": "업데이트 33: 두비리의 역설" }], + "Prop": "", + "Links": [ { - "_id": { "$oid": "6471a5c11c84d8991785ccc1" }, - "Faction": "FC_GRINEER", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode4", - "Count": -35500, - "Goal": 43000, - "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "646e00f1d08856975bb476fe" }, - "AttackerReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] - }, - "AttackerMissionInfo": { "seed": 573551, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 810078, "faction": "FC_GRINEER" }, - "Activation": { "$date": { "$numberLong": "1685170489276" } } - }, - { - "_id": { "$oid": "64729729ea6b289e0f440b37" }, - "Faction": "FC_CORPUS", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode177", - "Count": -40065, - "Goal": 40000, - "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "646fdcb95a219384bdbbd5f1" }, - "AttackerReward": { - "countedItems": [ - { "ItemType": "/Lotus/Types/Recipes/Weapons/SnipetronVandalBlueprint", "ItemCount": 1 } - ] - }, - "AttackerMissionInfo": { "seed": 181914, "faction": "FC_GRINEER" }, - "DefenderReward": { - "countedItems": [ - { "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/GrineerCombatKnifeHilt", "ItemCount": 1 } - ] - }, - "DefenderMissionInfo": { "seed": 197505, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1685232025336" } } - }, - { - "_id": { "$oid": "64764c611959704d82e095f8" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode127", - "Count": -19265, - "Goal": 30000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", - "Completed": false, - "ChainID": { "$oid": "647612f5b75e9d02362f0c6c" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 995781, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 978707, "faction": "FC_INFESTATION", "missionReward": [] }, - "Activation": { "$date": { "$numberLong": "1685474401909" } } - }, - { - "_id": { "$oid": "6476ba8aca0663ae5a22b6bb" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode68", - "Count": -33274, - "Goal": 33000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "6476ba8aca0663ae5a22b6bb" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 512950, "faction": "FC_GRINEER" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 160228, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685508708793" } } - }, - { - "_id": { "$oid": "647730e50ecf58593d735cb0" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode107", - "Count": -17526, - "Goal": 36000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 640989, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 53442, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685537906204" } } - }, - { - "_id": { "$oid": "64775e991d3a1c5c0a181494" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode66", - "Count": -1218, - "Goal": 45000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 563164, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 203755, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685544601696" } } - }, - { - "_id": { "$oid": "64775e991d3a1c5c0a181495" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode22", - "Count": -1490, - "Goal": 36000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 933714, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 693132, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685544601696" } } + "LanguageCode": "ko", + "Link": "https://forums.warframe.com/topic/1346037-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-33-%EB%91%90%EB%B9%84%EB%A6%AC%EC%9D%98-%EC%97%AD%EC%84%A4/" } - ], - "HubEvents": [], - "NodeOverrides": [ - { "_id": { "$oid": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true }, - { "_id": { "$oid": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true }, - { "_id": { "$oid": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true }, - { "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9507716 }, + ], + "Date": { "$date": { "$numberLong": "1682525580000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64495365aca4975f2408f5c3" }, + "Messages": [{ "LanguageCode": "es", "Message": "Actualización 33: La Paradoja de Duviri" }], + "Prop": "https://forums.warframe.com/topic/1346059-actualizaci%C3%B3n-33-la-paradoja-de-duviri/", + "Date": { "$date": { "$numberLong": "1682527020000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64517606c429f4f85d0f069d" }, + "Messages": [{ "LanguageCode": "ja", "Message": "Nora's Mix Vol. 3 終了日 + Nightwaveの今後について" }], + "Prop": "https://bit.ly/3AJu8HT", + "Date": { "$date": { "$numberLong": "1683060000000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2021_01/Wiki-background.thumb.jpg.f568775e1b4eab008c7c6d3802c942aa.jpg", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6453f7bf20df842a150d8316" }, + "Messages": [{ "LanguageCode": "en", "Message": "Have your Dojo featured on the Star Chart!" }], + "Prop": "https://forums.warframe.com/topic/1349495-star-chart-dojo-showcase-spring-2023/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Spring-dojo-contest", + "Date": { "$date": { "$numberLong": "1683224460000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6453fc4380fb13ff9a072376" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Now Available: Nova Prime and Trinity Prime" }, + { "LanguageCode": "fr", "Message": "Maintenant disponible : Nova Prime et Trinity Prime" }, + { "LanguageCode": "it", "Message": "Ora Disponibili: Nova Prime e Trinity Prime" }, + { "LanguageCode": "de", "Message": "Jetzt erhältlich: Nova Prime und Trinity Prime" }, + { "LanguageCode": "es", "Message": "Disponible ya: Nova Prime y Trinity Prime" }, + { "LanguageCode": "pt", "Message": "Já Disponível: Nova Prime e Trinity Prime" }, + { "LanguageCode": "ru", "Message": "Уже доступны: Нова Прайм и Тринити Прайм" }, + { "LanguageCode": "pl", "Message": "Już dostępne: Nova Prime i Trinity Prime" }, + { "LanguageCode": "uk", "Message": "Уже доступні: Нова-прайм і Трініті-прайм\t" }, + { "LanguageCode": "tr", "Message": "Şimdi Sizlerle: Nova Prime ve Trinity Prime" }, + { "LanguageCode": "ja", "Message": "Nova PrimeとTrinity Primeをゲットしよう" }, + { "LanguageCode": "zh", "Message": "现已登场:Nova Prime 和 Trinity Prime" }, + { "LanguageCode": "ko", "Message": "지금 바로 구매 가능: 노바 프라임 및 트리니티 프라임" }, + { "LanguageCode": "tc", "Message": "現已登場:Nova Prime 以及 Trinity Prime" } + ], + "Prop": "https://www.warframe.com/prime-resurgence?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-PrimeResurgenceNovaTrinity-Launch", + "Date": { "$date": { "$numberLong": "1683222960000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685937600000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/3dde851b071ff5295e58f24d68b43760_800x450.png", + "Priority": false, + "MobileOnly": false, + "HideEndDateModifier": true + }, + { + "_id": { "$oid": "646646aad048b740ec04753c" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Refer a Friend Program Changes" }, + { "LanguageCode": "fr", "Message": "Modification du programme de parrainage" }, + { "LanguageCode": "it", "Message": "Cambiamenti al Programma Riferisci un Amico" }, + { "LanguageCode": "de", "Message": "Programmaktualisierung für 'Freunde rekrutieren'" }, + { "LanguageCode": "es", "Message": "Cambios en el programa \"Refiere a un amigo\"" }, + { "LanguageCode": "pt", "Message": "Mudanças no Programa de Indicação de Amigos" }, + { "LanguageCode": "pl", "Message": "Zmiany programu \"Zaproś Znajomego\"" }, + { "LanguageCode": "uk", "Message": "Зміни в програмі «Запросіть друга»" }, + { "LanguageCode": "tr", "Message": "Arkadaş Daveti Referans Programı Değişiklikleri" }, + { "LanguageCode": "ja", "Message": "お友達紹介プログラム更新" }, + { "LanguageCode": "zh", "Message": "「邀请好友计划」更新" }, + { "LanguageCode": "ko", "Message": "친구 초대 프로그램의 변화" } + ], + "Prop": "https://www.warframe.com/referral", + "Date": { "$date": { "$numberLong": "1684421760000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684393200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/fe49a80950256bf393fa2aa0b9303a_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6466726e06ca85f0e202e343" }, + "Messages": [ + { "LanguageCode": "en", "Message": "TennoCon 2023 Digital Pack Now Available" }, + { "LanguageCode": "fr", "Message": "Le Pack Digital TennoCon 2023 est maintenant disponible" }, + { "LanguageCode": "it", "Message": "Il Pacchetto Digitale TennoCon 2023 è Ora Disponibile" }, + { "LanguageCode": "de", "Message": "TennoCon 2023 Digital Paket ist jetzt verfügbar" }, + { "LanguageCode": "es", "Message": "El Paquete Digital de TennoCon 2023 ya está disponible" }, + { "LanguageCode": "pt", "Message": "O Pacote Digital da TennoCon 2023 já está disponível" }, + { "LanguageCode": "ru", "Message": "Цифровой набор TennoCon-2023 уже доступен" }, + { "LanguageCode": "pl", "Message": "Pakiet Cyfrowy TennoCon 2023 już dostępny" }, + { "LanguageCode": "uk", "Message": "Цифровий набір «Теннокон 2023» уже доступний" }, + { "LanguageCode": "tr", "Message": "TennoCon 2023 Dijital Paketi Şimdi Sizlerle" }, + { "LanguageCode": "ja", "Message": "TennoCon 2023 デジタルパック発売開始" }, + { "LanguageCode": "zh", "Message": "TennoCon 2023 虚拟礼包现已登场" }, + { "LanguageCode": "ko", "Message": "텐노콘 2023 디지털 팩을 지금 만나보세요" }, + { "LanguageCode": "tc", "Message": "TennoCon 2023 數位組合包現已登場" } + ], + "Prop": "", + "Links": [ + { "LanguageCode": "en", "Link": "https://www.warframe.com/tennocon" }, + { "LanguageCode": "fr", "Link": "https://www.warframe.com/fr/tennocon" }, + { "LanguageCode": "it", "Link": "https://www.warframe.com/it/tennocon" }, + { "LanguageCode": "de", "Link": "https://www.warframe.com/de/tennocon" }, + { "LanguageCode": "es", "Link": "https://www.warframe.com/es/tennocon" }, + { "LanguageCode": "pt", "Link": "https://www.warframe.com/pt-br/tennocon" }, + { "LanguageCode": "ru", "Link": "https://www.warframe.com/ru/tennocon" }, + { "LanguageCode": "pl", "Link": "https://www.warframe.com/pl/tennocon" }, + { "LanguageCode": "uk", "Link": "https://www.warframe.com/uk/tennocon" }, + { "LanguageCode": "tr", "Link": "https://www.warframe.com/tr/tennocon" }, + { "LanguageCode": "ja", "Link": "https://www.warframe.com/ja/tennocon" }, + { "LanguageCode": "zh", "Link": "https://www.warframe.com/zh-hans/tennocon" }, + { "LanguageCode": "ko", "Link": "https://www.warframe.com/ko/tennocon" }, + { "LanguageCode": "tc", "Link": "https://www.warframe.com/zh-hant/tennocon" } + ], + "Date": { "$date": { "$numberLong": "1684432080000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684404000000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/images/tennocon/2023/digital-pack-banner-2x.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64668cd31137f75bf70d0e09" }, + "Messages": [ + { "LanguageCode": "en", "Message": "May in Warframe Roundup" }, + { "LanguageCode": "fr", "Message": "Tour d'horizon du mois de mai dans Warframe" }, + { "LanguageCode": "it", "Message": "Maggio in Warframe: Riepilogo" }, + { "LanguageCode": "de", "Message": "Mai-Zusammenfassung für Warframe" }, + { "LanguageCode": "es", "Message": "Mayo en Warframe: Resumen" }, + { "LanguageCode": "pt", "Message": "Resumo do mês de maio no Warframe" }, + { "LanguageCode": "pl", "Message": "Maj w Warframe" }, + { "LanguageCode": "uk", "Message": "Травнева добірка у Warframe" }, + { "LanguageCode": "tr", "Message": "Mayıs Ayı Warframe Özeti" }, + { "LanguageCode": "ja", "Message": "5月の『Warframe』振り返り" }, + { "LanguageCode": "zh", "Message": "《Warframe》的五月摘要" }, + { "LanguageCode": "ko", "Message": "5월의 워프레임 요약" }, + { "LanguageCode": "tc", "Message": "Warframe 5 月份總結" } + ], + "Prop": "https://www.warframe.com/news/may-in-warframe-roundup?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-MayWarframeRoundup", + "Date": { "$date": { "$numberLong": "1684440240000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684440000000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/8f08145f560b43a4cafadc7bb9c5748_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64677ce96fba686c8a06bd24" }, + "Messages": [ { - "_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, - "Node": "EarthHUB", - "Hide": false, - "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB", - "Activation": { "$date": { "$numberLong": "1535646600000" } } - }, - { - "_id": { "$oid": "5d24d1f674491d51f8d44473" }, - "Node": "MercuryHUB", - "Hide": true, - "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", - "Activation": { "$date": { "$numberLong": "1563030000000" } } - }, - { - "_id": { "$oid": "5c7cb0d00000000000000000" }, - "Activation": { "$date": { "$numberLong": "1684512000000" } }, - "Expiry": { "$date": { "$numberLong": "1685721600000" } }, - "Node": "SolNode129", - "Faction": "FC_CORPUS", - "CustomNpcEncounters": ["/Lotus/Types/Gameplay/Venus/Encounters/Heists/ExploiterHeistFissure"] + "LanguageCode": "en", + "Message": "May 25 Charity Stream: Warframe x Covenant House! Click To Learn More. 6 p.m. EST " } - ], - "VoidTraders": [ + ], + "Prop": "https://wrfr.me/chmm23", + "Date": { "$date": { "$numberLong": "1684503360000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6467baa3db8bd174db0b163b" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Pre-order 10 Year Anniversary Merch!" }, { - "_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, - "Activation": { "$date": { "$numberLong": "1685710800000" } }, - "Expiry": { "$date": { "$numberLong": "1685883600000" } }, - "Id": "5d1e07a0a38e4a4fdd7cefca", - "Character": "Baro'Ki Teel", - "Node": "SaturnHUB" + "LanguageCode": "fr", + "Message": "Précommandez la Collection de produits dérivés du 10e Anniversaire !" + }, + { "LanguageCode": "it", "Message": "Preordina il Merch per il 10° Anniversario!" }, + { "LanguageCode": "de", "Message": "Bestellt die Merch-Kollektion zum 10. Jubiläum vor!" }, + { "LanguageCode": "es", "Message": "¡Reserva los productos del 10° aniversario!" }, + { "LanguageCode": "pt", "Message": "Faça a pré-encomenda de Produtos do Aniversário de 10 anos!" }, + { "LanguageCode": "pl", "Message": "Zamów w przedsprzedaży gadżety na 10-lecie!" }, + { "LanguageCode": "tr", "Message": "10. Yıl Dönümü Ürünleri için ön siparişini ver!" }, + { "LanguageCode": "ja", "Message": "Warframe 10周年記念グッズを予約購入!" }, + { "LanguageCode": "zh", "Message": "预购十周年纪念周边商品!" }, + { "LanguageCode": "ko", "Message": "10주년 기념 굿즈를 예약 주문하세요!" }, + { "LanguageCode": "tc", "Message": "預購 10 週年紀念周邊商品!" } + ], + "Prop": "https://store.warframe.com/products/10-year-anniversary-collection?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Merch-10year-Collection", + "Date": { "$date": { "$numberLong": "1684519320000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684519200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/81f0ccac0ee2cdfb628a64f9f72d2166_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "646e55122b97d301df08b65a" }, + "Messages": [{ "LanguageCode": "ja", "Message": "Devstream 第171回のお知らせ" }], + "Prop": "https://bit.ly/426QXR5", + "Date": { "$date": { "$numberLong": "1684952280000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/4e0d4b80256c0b05a5a9643664799beb.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "646e5cc6af17a161c20d79a4" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Nora’s Mix Vol. 4 has begun" }, + { "LanguageCode": "fr", "Message": "Le Mix de Nora Vol. 4 est disponible" }, + { "LanguageCode": "it", "Message": "Mix di Nora Vol. 4 è iniziato" }, + { "LanguageCode": "de", "Message": "Noras Mix - Vol. 4 hat begonnen" }, + { "LanguageCode": "es", "Message": "Comenzó el Mix de Nora Vol. 4" }, + { "LanguageCode": "pt", "Message": "O Mix da Nora Vol. 4 começou" }, + { "LanguageCode": "ru", "Message": "Микс Норы: Диск 4 уже в начался" }, + { "LanguageCode": "pl", "Message": "Składanka Nory cz. 4 już dostępna" }, + { "LanguageCode": "uk", "Message": "Вибірка Нори 4 уже в грі" }, + { "LanguageCode": "tr", "Message": "Nora'nın Derlemesi - 4. Seri şimdi sizlerle" }, + { "LanguageCode": "ja", "Message": "Nora's Mix Vol.4 開催!" }, + { "LanguageCode": "zh", "Message": "《Nora 的混选 Vol. 4》现已开始!" }, + { "LanguageCode": "ko", "Message": "노라의 믹스 Vol. 4가 시작되었습니다" }, + { "LanguageCode": "tc", "Message": "Nora 合輯 VI 已登場" } + ], + "Prop": "https://www.warframe.com/news/noras-mix-vol-4?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-NightwaveVol4Launch", + "Date": { "$date": { "$numberLong": "1684953960000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684951200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/42721390b8812fe65296ce5eee7d862_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "646e6a4cf16914573401c77b" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Nora’nın Derlemesi - 3. Seri Tamamlandı + 4. Seri Sizlerle!" }], + "Prop": "https://forums.warframe.com/topic/1354223-nora%E2%80%99n%C4%B1n-derlemesi-seri-3-tamamland%C4%B1-seri-4-24-may%C4%B1s%E2%80%99ta-sizlerle/", + "Date": { "$date": { "$numberLong": "1684957500000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "646fbefdeaa2199bc406b117" }, + "Messages": [{ "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.11 + Revisión 33.0.12" }], + "Prop": "https://forums.warframe.com/topic/1354406-la-paradoja-de-duviri-revisi%C3%B3n-33011-revisi%C3%B3n-33012/", + "Date": { "$date": { "$numberLong": "1685044920000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6471f7ad49b3f286420543a4" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Résumé Devstream #171 : version FR" }], + "Prop": "https://forums.warframe.com/topic/1354587-r%C3%A9sum%C3%A9-devstream-171-version-fr/", + "Date": { "$date": { "$numberLong": "1685190540000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.3fa3bb18a3cd29a7ee623ec88bf72429.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6475055203028af6f5076925" }, + "Messages": [{ "LanguageCode": "en", "Message": "The Duviri Paradox: Hotfix 33.0.14" }], + "Prop": "https://www.warframe.com/updates/pc/33-0-14", + "Date": { "$date": { "$numberLong": "1685387100000" } }, + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "64751514ef6fa74efd0b624e" }, + "Messages": [{ "LanguageCode": "en", "Message": " PSA: Hotfix pause until The 7 Crimes of Kullervo Update" }], + "Prop": "https://forums.warframe.com/topic/1355007-psa-hotfixing-paused-until-the-7-crimes-of-kullervo/", + "Date": { "$date": { "$numberLong": "1685394600000" } }, + "Priority": true, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "647516f0fefde43d790ad0ed" }, + "Messages": [{ "LanguageCode": "en", "Message": "Coming Soon: Prime Time #352!" }], + "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", + "Date": { "$date": { "$numberLong": "1685395080000" } }, + "EventStartDate": { "$date": { "$numberLong": "1685656800000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685664000000" } }, + "EventLiveUrl": "https://www.twitch.tv/warframe/", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6475175603028af6f50769e3" }, + "Messages": [{ "LanguageCode": "en", "Message": "Twitch Drops: Community Stream Schedule May 29 to June 2!" }], + "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", + "Date": { "$date": { "$numberLong": "1685395200000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6475ddac402fe7be5c0f0efb" }, + "Messages": [{ "LanguageCode": "ja", "Message": "5月29日~6月2日の配信スケジュール" }], + "Prop": "https://bit.ly/43eU1f4", + "Date": { "$date": { "$numberLong": "1685446020000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "647624dc351728a45207bd67" }, + "Messages": [{ "LanguageCode": "es", "Message": "Twitch Drops: Programa de streams de la comunidad" }], + "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", + "Date": { "$date": { "$numberLong": "1685464200000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6476250bedcc8797810215de" }, + "Messages": [ + { "LanguageCode": "es", "Message": "¡Emisión Tenno con sorteo de Hildryn Prime Access + Twitch Drop!" } + ], + "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", + "Date": { "$date": { "$numberLong": "1685464260000" } }, + "EventStartDate": { "$date": { "$numberLong": "1685559600000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685563200000" } }, + "EventLiveUrl": "https://www.twitch.tv/warframeinternational", + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/1c2a55a07ef0fcf121b6b4633b92c060.jpg", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "647632c88f764656130e1824" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Streams : 29 mai - 2 juin" }], + "Prop": "https://forums.warframe.com/topic/1355110-streams-communautaires-29-mai-2-juin/", + "Date": { "$date": { "$numberLong": "1685467800000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64764bd4931e7ae47f0d1a60" }, + "Messages": [{ "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.13 + Revisión 33.0.14" }], + "Prop": "https://forums.warframe.com/topic/1355129-la-paradoja-de-duviri-revisi%C3%B3n-33013-revisi%C3%B3n-33014/", + "Date": { "$date": { "$numberLong": "1685474220000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + } + ], + "Goals": [ + { + "_id": { "$oid": "5c7cb0d00000000000000000" }, + "Activation": { "$date": { "$numberLong": "1684512000000" } }, + "Expiry": { "$date": { "$numberLong": "1685721600000" } }, + "Node": "SolNode129", + "ScoreVar": "FissuresClosed", + "ScoreLocTag": "/Lotus/Language/G1Quests/HeatFissuresEventScore", + "Count": 24, + "HealthPct": 0.24, + "Regions": [1], + "Desc": "/Lotus/Language/G1Quests/HeatFissuresEventName", + "ToolTip": "/Lotus/Language/G1Quests/HeatFissuresEventDesc", + "OptionalInMission": true, + "Tag": "HeatFissure", + "UpgradeIds": [{ "$oid": "64667809d9c6963e382d9546" }, { "$oid": "64667809d9c6963e382d9547" }], + "Personal": true, + "Community": true, + "Goal": 100, + "Reward": { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Weapons/Corpus/LongGuns/CrpBFG/Vandal/VandalCrpBFG"], + "countedItems": [] + }, + "InterimGoals": [5, 25, 50, 75], + "InterimRewards": [ + { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Upgrades/Skins/Clan/OrbBadgeItem"], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Shotgun/ShotgunMedicMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Rifle/SerratedRushMod" + ], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Pistol/MultishotDodgeMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Melee/CritDamageChargeSpeedMod" + ], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Upgrades/Skins/Sigils/OrbSigil"], + "countedItems": [] } - ], - "PrimeVaultTraders": [ - { - "_id": { "$oid": "631f8c4ac36af423770eaa97" }, - "Activation": { "$date": { "$numberLong": "1683223200000" } }, - "Completed": false, - "InitialStartDate": { "$date": { "$numberLong": "1662738144266" } }, - "Node": "TradeHUB1", - "Manifest": [ - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaTrinityPrimeDualPack", - "PrimePrice": 10 - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack", - "PrimePrice": 10, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTrinityPrimeSinglePack", - "PrimePrice": 6 - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaPrimeSinglePack", - "PrimePrice": 6 - }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Paladin/PaladinPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeOberonCape", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/SurakaPrimeDangle", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeSilvaAegis/PrimeSilvaAegis", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSybaris/PrimeSybarisRifle", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Necro/NekrosPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/UruPrimeScarf", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAcanthusPrimeArmorSet", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeTigris/PrimeTigris", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/PrimeGalatine/PrimeGalatine", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { "ItemType": "/Lotus/StoreItems/Powersuits/Trinity/TrinityPrime", "PrimePrice": 3 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVKavasaPrimeKubrowArmor", - "PrimePrice": 2 - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/ScrollingPrimeMeleeDangle", - "PrimePrice": 1 - }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeDualKamas/PrimeDualKamas", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Powersuits/AntiMatter/NovaPrime", "PrimePrice": 3 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEdoPrimeArmorSet", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrimeAccessSigilFive", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSoma/PrimeSomaRifle", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeVasto/PrimeVastoPistol", "PrimePrice": 2 }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/OberonPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NekrosPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NovaPrimeBobbleHead", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TrinityPrimeBobbleHead", "PrimePrice": 1 }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultBBronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultBBronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - } - ], - "Expiry": { "$date": { "$numberLong": "1685718000000" } }, - "EvergreenManifest": [ - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/DualDagger/FangPrimeDagger", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeLex/PrimeLex", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/ShipScenes/PrimeLisetFiligreeScene", "PrimePrice": 1 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAviaPrimeArmorSet", "PrimePrice": 2 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVayasPrimeAccessories", - "PrimePrice": 2 - }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/TwitchPrimeMeleeDangle", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeAviaSyandana", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeTwitchScarf", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/TwitchPrimeScarf", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/TwitchPrimeSigil", "PrimePrice": 1 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNecraloidBundle", - "RegularPrice": 10 - }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Liset/LisetSkinTwitchPrime", "RegularPrice": 10 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/InfMembraneCape", "RegularPrice": 10 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/PrimeBucks", "RegularPrice": 1 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoidTraceBundle", "RegularPrice": 1 } - ], - "ScheduleInfo": [ - { - "Expiry": { "$date": { "$numberLong": "1667498400000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1669921200000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVValkyrSarynPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1672945200000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1668711600000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack" - }, - { - "Expiry": { "$date": { "$numberLong": "1675364400000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1671130800000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1677783600000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1674154800000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAtlasVaubanPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1680804000000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1676473200000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1683223200000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1679594400000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagRhinoPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1685718000000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1682013600000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1688666400000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1684433100000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1691085600000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1691085600000" } } - } - ] - } - ], - "VoidStorms": [ - { - "_id": { "$oid": "64775c416894d083a29b8872" }, - "Node": "CrewBattleNode511", - "Activation": { "$date": { "$numberLong": "1685546401825" } }, - "Expiry": { "$date": { "$numberLong": "1685551801825" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "64775c416894d083a29b8871" }, - "Node": "CrewBattleNode509", - "Activation": { "$date": { "$numberLong": "1685546401821" } }, - "Expiry": { "$date": { "$numberLong": "1685551801821" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "64775c416894d083a29b8874" }, - "Node": "CrewBattleNode521", - "Activation": { "$date": { "$numberLong": "1685546401829" } }, - "Expiry": { "$date": { "$numberLong": "1685551801829" } }, - "ActiveMissionTier": "VoidT3" - }, - { - "_id": { "$oid": "64775c416894d083a29b8873" }, - "Node": "CrewBattleNode530", - "Activation": { "$date": { "$numberLong": "1685546401827" } }, - "Expiry": { "$date": { "$numberLong": "1685551801827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "64775c416894d083a29b8876" }, - "Node": "CrewBattleNode543", - "Activation": { "$date": { "$numberLong": "1685546401834" } }, - "Expiry": { "$date": { "$numberLong": "1685551801834" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "64775c416894d083a29b8875" }, - "Node": "CrewBattleNode527", - "Activation": { "$date": { "$numberLong": "1685546401832" } }, - "Expiry": { "$date": { "$numberLong": "1685551801832" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3db" }, - "Node": "CrewBattleNode519", - "Activation": { "$date": { "$numberLong": "1685550001821" } }, - "Expiry": { "$date": { "$numberLong": "1685555401821" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3de" }, - "Node": "CrewBattleNode524", - "Activation": { "$date": { "$numberLong": "1685550001829" } }, - "Expiry": { "$date": { "$numberLong": "1685555401829" } }, - "ActiveMissionTier": "VoidT3" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3dd" }, - "Node": "CrewBattleNode535", - "Activation": { "$date": { "$numberLong": "1685550001827" } }, - "Expiry": { "$date": { "$numberLong": "1685555401827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3dc" }, - "Node": "CrewBattleNode503", - "Activation": { "$date": { "$numberLong": "1685550001825" } }, - "Expiry": { "$date": { "$numberLong": "1685555401825" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3e0" }, - "Node": "CrewBattleNode542", - "Activation": { "$date": { "$numberLong": "1685550001834" } }, - "Expiry": { "$date": { "$numberLong": "1685555401834" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3df" }, - "Node": "CrewBattleNode536", - "Activation": { "$date": { "$numberLong": "1685550001832" } }, - "Expiry": { "$date": { "$numberLong": "1685555401832" } }, - "ActiveMissionTier": "VoidT4" - } - ], - "PrimeAccessAvailability": { "State": "PRIME1" }, - "PrimeVaultAvailabilities": [false, false, false, false, false], - "PrimeTokenAvailability": true, - "DailyDeals": [ - { - "StoreItem": "/Lotus/StoreItems/Upgrades/Focus/AttackLensGreater", - "Activation": { "$date": { "$numberLong": "1685480400000" } }, - "Expiry": { "$date": { "$numberLong": "1685574000000" } }, - "Discount": 20, - "OriginalPrice": 40, - "SalePrice": 32, - "AmountTotal": 125, - "AmountSold": 125 - } - ], - "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, - "PVPChallengeInstances": [ - { - "_id": { "$oid": "6470fd0132c7efc24f00caf0" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf1" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 20 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf2" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 10 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf3" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 0 }], - "isGenerated": true, - "PVPMode": "PVPMODE_NONE", - "subChallenges": [ - { "$oid": "6470fd0132c7efc24f00caf0" }, - { "$oid": "6470fd0132c7efc24f00caf1" }, - { "$oid": "6470fd0132c7efc24f00caf2" } - ], - "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfb8" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 4 }], - "isGenerated": true, - "PVPMode": "PVPMODE_CAPTURETHEFLAG", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfb9" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_CAPTURETHEFLAG", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbc" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 2 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbb" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 2 }], - "isGenerated": true, - "PVPMode": "PVPMODE_TEAMDEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfba" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_TEAMDEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbf" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsMEDIUM", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbd" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbe" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - } - ], - "PersistentEnemies": [], - "PVPAlternativeModes": [], - "PVPActiveTournaments": [], - "ProjectPct": [55.93717913052773, 90.86309625235785, 0], - "ConstructionProjects": [], - "TwitchPromos": [], - "ExperimentRecommended": [], - "EndlessXpChoices": [ - { "Category": "EXC_NORMAL", "Choices": ["Hydroid", "Mirage", "Limbo"] }, - { "Category": "EXC_HARD", "Choices": ["Zylok", "Sibear", "Dread", "Despair", "Hate"] } - ], - "ForceLogoutVersion": 0, - "FeaturedGuilds": [ - { - "_id": { "$oid": "5303c4bd06c56f4168b5fed9" }, - "Name": "Miau after Tomorrow", - "Tier": 1, - "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, - "Emblem": true - }, - { - "_id": { "$oid": "56ab8b2407c56fd145c91aa5" }, - "Name": "Slayers of Darkness", - "Tier": 2, - "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, - "Emblem": true - }, - { - "_id": { "$oid": "57ed05cb08c56ffd67386105" }, - "Name": "Nazaryk", - "Tier": 3, - "AllianceId": { "$oid": "5fdcf602fc5cef2d337800e0" }, - "Emblem": true - }, - { "_id": { "$oid": "570f9bda08c56f0887fb6db5" }, "Name": "GentleManz", "Tier": 4, "Emblem": true }, - { - "_id": { "$oid": "56d8b39408c56fd89a1799ec" }, - "Name": "Phantom Vanguard", - "Tier": 5, - "AllianceId": { "$oid": "55e270f706c56f2e2f0bb7d6" }, - "Emblem": true - }, - { - "_id": { "$oid": "54e44a5006c56f7eab0d5aa9" }, - "Name": "Violet Church", - "Tier": 3, - "AllianceId": { "$oid": "56c44d0b08c56f5c367b4665" }, - "Emblem": true - } - ], - "SeasonInfo": { - "Activation": { "$date": { "$numberLong": "1684951200000" } }, - "Expiry": { "$date": { "$numberLong": "1702857600000" } }, - "AffiliationTag": "RadioLegionIntermission8Syndicate", - "Season": 10, - "Phase": 0, - "Params": "", - "ActiveChallenges": [ - { - "_id": { "$oid": "001100020000000000000022" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685577600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithElectricity" - }, - { - "_id": { "$oid": "001100020000000000000023" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685404800000" } }, - "Expiry": { "$date": { "$numberLong": "1685664000000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTransmuteMods" - }, - { - "_id": { "$oid": "001100020000000000000024" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685491200000" } }, - "Expiry": { "$date": { "$numberLong": "1685750400000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailySolveCiphers" - }, - { - "_id": { "$oid": "001100020000000000000015" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteRescue" - }, - { - "_id": { "$oid": "001100020000000000000016" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteKuva" - }, - { - "_id": { "$oid": "001100020000000000000017" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyKillEximus" - }, - { - "_id": { "$oid": "001100020000000000000018" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPerfectAnimalCapture" - }, - { - "_id": { "$oid": "001100020000000000000019" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyUnlockRelics" - }, - { - "_id": { "$oid": "001100020000000000000020" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardKillEnemies" - }, - { - "_id": { "$oid": "001100020000000000000021" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardFastCapture" - } + ] + }, + { + "_id": { "$oid": "64663a0c0483e3f5b70ff0b2" }, + "Activation": { "$date": { "$numberLong": "1684508400000" } }, + "Expiry": { "$date": { "$numberLong": "1685717940000" } }, + "Count": 0, + "Goal": 1, + "Success": 0, + "Personal": true, + "ClampNodeScores": true, + "Node": "EventNode27", + "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2018D", + "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", + "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", + "Tag": "Anniversary2018TacAlert", + "Reward": { + "items": [ + "/Lotus/StoreItems/Upgrades/Skins/Scarves/DexScarf", + "/Lotus/StoreItems/Types/Game/CatbrowPet/CatbrowGeneticSignature" ] + } }, - "Tmp": "{\"sfn\":555}" + { + "_id": { "$oid": "64663a3c866d9fe65c012364" }, + "Activation": { "$date": { "$numberLong": "1684508400000" } }, + "Expiry": { "$date": { "$numberLong": "1685717940000" } }, + "Count": 0, + "Goal": 1, + "Success": 0, + "Personal": true, + "ClampNodeScores": true, + "Node": "EventNode24", + "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2023k", + "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", + "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", + "Tag": "Anniversary2018TacAlert", + "Reward": { + "items": [ + "/Lotus/StoreItems/Upgrades/Skins/Wisp/DexWispSkin", + "/Lotus/StoreItems/Types/StoreItems/SlotItems/TwoSentinelSlotItem" + ] + } + } + ], + "Alerts": [], + "Sorties": [ + { + "_id": { "$oid": "64776b7eba82e08c76d6cb9b" }, + "Activation": { "$date": { "$numberLong": "1685548800000" } }, + "Expiry": { "$date": { "$numberLong": "1685635200000" } }, + "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", + "Seed": 28971, + "Boss": "SORTIE_BOSS_ALAD", + "ExtraDrops": [], + "Variants": [ + { + "missionType": "MT_MOBILE_DEFENSE", + "modifierType": "SORTIE_MODIFIER_HAZARD_RADIATION", + "node": "SolNode53", + "tileset": "CorpusGasCityTileset" + }, + { + "missionType": "MT_RESCUE", + "modifierType": "SORTIE_MODIFIER_IMPACT", + "node": "SolNode107", + "tileset": "CorpusOutpostTileset" + }, + { + "missionType": "MT_EXTERMINATION", + "modifierType": "SORTIE_MODIFIER_LOW_ENERGY", + "node": "SolNode304", + "tileset": "OrokinMoonTilesetCorpus" + } + ], + "Twitter": true + } + ], + "LiteSorties": [ + { + "_id": { "$oid": "6473e77dfff198b17e47812d" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", + "Seed": 62757, + "Boss": "SORTIE_BOSS_AMAR", + "Missions": [ + { "missionType": "MT_MOBILE_DEFENSE", "node": "SolNode30" }, + { "missionType": "MT_EXCAVATE", "node": "SolNode11" }, + { "missionType": "MT_ASSASSINATION", "node": "SolNode99" } + ] + } + ], + "SyndicateMissions": [ + { + "_id": { "$oid": "64775ff00000000000000002" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "EntratiSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [5, 5, 5] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierCTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 15, + "maxEnemyLevel": 25, + "xpAmounts": [11, 11, 11] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierBTableARewards", + "masteryReq": 5, + "minEnemyLevel": 25, + "maxEnemyLevel": 30, + "endless": true, + "bonusXpMultiplier": 0.15000001, + "xpAmounts": [14, 14, 14] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierDTableARewards", + "masteryReq": 2, + "minEnemyLevel": 30, + "maxEnemyLevel": 40, + "xpAmounts": [19, 19, 19, 29] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", + "masteryReq": 3, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [20, 20, 20, 20, 39] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [25, 25, 25, 25, 50] + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierATableCRewards", + "masteryReq": 5, + "minEnemyLevel": 30, + "maxEnemyLevel": 40, + "xpAmounts": [2, 2, 2, 4], + "locationTag": "ChamberB", + "isVault": true + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierBTableCRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 50, + "xpAmounts": [4, 4, 4, 5], + "locationTag": "ChamberA", + "isVault": true + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierCTableCRewards", + "masteryReq": 5, + "minEnemyLevel": 50, + "maxEnemyLevel": 60, + "xpAmounts": [5, 5, 5, 7], + "locationTag": "ChamberC", + "isVault": true + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000022" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "SolarisSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobRecovery", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [350, 350, 350] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobExterminate", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierBTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 10, + "maxEnemyLevel": 30, + "xpAmounts": [680, 680, 680] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierCTableBRewards", + "masteryReq": 2, + "minEnemyLevel": 20, + "maxEnemyLevel": 40, + "xpAmounts": [610, 610, 610, 890] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobRecovery", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierDTableBRewards", + "masteryReq": 3, + "minEnemyLevel": 30, + "maxEnemyLevel": 50, + "xpAmounts": [580, 580, 580, 580, 1140] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [680, 680, 680, 680, 1340] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobExcavation", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [840, 840, 840, 840, 1660] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobExterminate", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", + "masteryReq": 0, + "minEnemyLevel": 50, + "maxEnemyLevel": 70, + "xpAmounts": [760, 760, 760, 760, 1500] + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000007" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "CetusSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [420, 420, 420] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 10, + "maxEnemyLevel": 30, + "xpAmounts": [690, 690, 690] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTableBRewards", + "masteryReq": 2, + "minEnemyLevel": 20, + "maxEnemyLevel": 40, + "xpAmounts": [590, 590, 590, 870] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountySab", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTableBRewards", + "masteryReq": 3, + "minEnemyLevel": 30, + "maxEnemyLevel": 50, + "xpAmounts": [550, 550, 550, 550, 1080] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [690, 690, 690, 690, 1350] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [840, 840, 840, 840, 1660] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", + "masteryReq": 0, + "minEnemyLevel": 50, + "maxEnemyLevel": 70, + "xpAmounts": [830, 830, 830, 830, 1640] + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000026" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "ZarimanSyndicate", + "Seed": 20831, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4de" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "ArbitersSyndicate", + "Seed": 28971, + "Nodes": ["SolNode36", "SolNode123", "SolNode225", "SolNode709", "SolNode137", "SolNode195", "SolNode81"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4df" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "CephalonSudaSyndicate", + "Seed": 25969, + "Nodes": ["SolNode79", "SolNode41", "SettlementNode1", "SolNode132", "SolNode166", "SolNode72", "SolNode23"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e0" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "NecraloidSyndicate", + "Seed": 81067, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e1" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "EventSyndicate", + "Seed": 28897, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e2" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "KahlSyndicate", + "Seed": 92441, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e4" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "QuillsSyndicate", + "Seed": 61214, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e3" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "NewLokaSyndicate", + "Seed": 21393, + "Nodes": ["SolNode68", "SolNode2", "SolNode82", "SolNode217", "SolNode409", "SolNode139", "SolNode75"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e5" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "PerrinSyndicate", + "Seed": 72469, + "Nodes": ["SolNode39", "SolNode12", "SolNode146", "SolNode101", "SolNode121", "SolNode408", "SolNode96"] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e6" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegion2Syndicate", + "Seed": 13526, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ea" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission4Syndicate", + "Seed": 20328, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4eb" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission5Syndicate", + "Seed": 87241, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ec" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission6Syndicate", + "Seed": 54438, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e7" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegion3Syndicate", + "Seed": 20666, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e9" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission3Syndicate", + "Seed": 7709, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e8" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission2Syndicate", + "Seed": 33027, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ee" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission8Syndicate", + "Seed": 21780, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ef" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermissionSyndicate", + "Seed": 95381, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ed" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission7Syndicate", + "Seed": 53091, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f0" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionSyndicate", + "Seed": 60623, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f1" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RedVeilSyndicate", + "Seed": 78309, + "Nodes": ["SolNode15", "SolNode106", "SettlementNode3", "SolNode224", "SolNode401", "SolNode76", "SolNode62"] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f3" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "VoxSyndicate", + "Seed": 52842, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f2" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "VentKidsSyndicate", + "Seed": 49149, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f4" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "SteelMeridianSyndicate", + "Seed": 9289, + "Nodes": ["SolNode130", "SolNode61", "SolNode30", "SolNode10", "SolNode102", "SolNode64", "SolNode50"] + } + ], + "ActiveMissions": [ + { + "_id": { "$oid": "64775c05cab187e046c3d277" }, + "Region": 12, + "Seed": 94704, + "Activation": { "$date": { "$numberLong": "1685543941731" } }, + "Expiry": { "$date": { "$numberLong": "1685550975969" } }, + "Node": "SolNode184", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT4", + "Hard": true + }, + { + "_id": { "$oid": "647761698afaf76e50461fc8" }, + "Region": 19, + "Seed": 58268, + "Activation": { "$date": { "$numberLong": "1685545321337" } }, + "Expiry": { "$date": { "$numberLong": "1685551434577" } }, + "Node": "SolNode746", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT5", + "Hard": true + }, + { + "_id": { "$oid": "6477630df698f676b0b32282" }, + "Region": 15, + "Seed": 70123, + "Activation": { "$date": { "$numberLong": "1685545741655" } }, + "Expiry": { "$date": { "$numberLong": "1685550886528" } }, + "Node": "SolNode412", + "MissionType": "MT_TERRITORY", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "6477630df698f676b0b32283" }, + "Region": 9, + "Seed": 15094, + "Activation": { "$date": { "$numberLong": "1685545741655" } }, + "Expiry": { "$date": { "$numberLong": "1685550459337" } }, + "Node": "SolNode56", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "647764ed12544a97c96618a5" }, + "Region": 15, + "Seed": 66090, + "Activation": { "$date": { "$numberLong": "1685546221415" } }, + "Expiry": { "$date": { "$numberLong": "1685553063549" } }, + "Node": "SolNode405", + "MissionType": "MT_SURVIVAL", + "Modifier": "VoidT3", + "Hard": true + }, + { + "_id": { "$oid": "647764ed12544a97c96618a6" }, + "Region": 13, + "Seed": 19703, + "Activation": { "$date": { "$numberLong": "1685546221415" } }, + "Expiry": { "$date": { "$numberLong": "1685550448683" } }, + "Node": "SolNode216", + "MissionType": "MT_EXCAVATE", + "Modifier": "VoidT3", + "Hard": true + }, + { + "_id": { "$oid": "64776565dc85a669dae19b38" }, + "Region": 3, + "Seed": 90150, + "Activation": { "$date": { "$numberLong": "1685546341763" } }, + "Expiry": { "$date": { "$numberLong": "1685552506487" } }, + "Node": "SolNode89", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "64776565dc85a669dae19b39" }, + "Region": 2, + "Seed": 11253, + "Activation": { "$date": { "$numberLong": "1685546341763" } }, + "Expiry": { "$date": { "$numberLong": "1685550810452" } }, + "Node": "SolNode128", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08dfe" }, + "Region": 5, + "Seed": 67983, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685553220288" } }, + "Node": "SolNode97", + "MissionType": "MT_INTEL", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08dff" }, + "Region": 10, + "Seed": 74682, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685551010303" } }, + "Node": "SolNode135", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08e00" }, + "Region": 6, + "Seed": 15538, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685551799194" } }, + "Node": "SolNode18", + "MissionType": "MT_TERRITORY", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776ec5752b9bd0c871fa7c" }, + "Region": 4, + "Seed": 47626, + "Activation": { "$date": { "$numberLong": "1685548741727" } }, + "Expiry": { "$date": { "$numberLong": "1685553411719" } }, + "Node": "SolNode36", + "MissionType": "MT_RESCUE", + "Modifier": "VoidT1" + }, + { + "_id": { "$oid": "647770a68bb595254a64c26e" }, + "Region": 7, + "Seed": 86090, + "Activation": { "$date": { "$numberLong": "1685549222143" } }, + "Expiry": { "$date": { "$numberLong": "1685556263692" } }, + "Node": "SolNode122", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "647770a68bb595254a64c26f" }, + "Region": 13, + "Seed": 39703, + "Activation": { "$date": { "$numberLong": "1685549222143" } }, + "Expiry": { "$date": { "$numberLong": "1685553504151" } }, + "Node": "SolNode212", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "6477720ec9dd724c888eff5b" }, + "Region": 19, + "Seed": 2767, + "Activation": { "$date": { "$numberLong": "1685549582078" } }, + "Expiry": { "$date": { "$numberLong": "1685554300277" } }, + "Node": "SolNode744", + "MissionType": "MT_SURVIVAL", + "Modifier": "VoidT5" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7c" }, + "Region": 10, + "Seed": 84581, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685554027918" } }, + "Node": "SolNode149", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7d" }, + "Region": 16, + "Seed": 50951, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685553961019" } }, + "Node": "SettlementNode12", + "MissionType": "MT_RESCUE", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7e" }, + "Region": 5, + "Seed": 37897, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685556218772" } }, + "Node": "SolNode73", + "MissionType": "MT_CAPTURE", + "Modifier": "VoidT2" + } + ], + "GlobalUpgrades": [], + "FlashSales": [ + { + "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", + "StartDate": { "$date": { "$numberLong": "1654560000000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", + "StartDate": { "$date": { "$numberLong": "1661173200000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", + "StartDate": { "$date": { "$numberLong": "1662422400000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", + "StartDate": { "$date": { "$numberLong": "1667347200000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": true, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 5, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 80, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 195, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/XakuLotusDeluxeSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 85, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 430, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/VorunaVoidshellSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 90, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 90, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/MesaVoltDeluxeSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 95, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 260, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/Items/MiscItems/OrokinCatalyst", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 105, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 20, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Powersuits/Werewolf/Werewolf", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 100, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 325, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/FormaPack", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 110, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 35, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Upgrades/Skins/Effects/NarmerEvolvingEphemeraA", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 115, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 80, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Upgrades/Skins/Saryn/SarynLunarNewYearSkin", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 120, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 165, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", + "StartDate": { "$date": { "$numberLong": "1678838400000" } }, + "EndDate": { "$date": { "$numberLong": "1693494000000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 1, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", + "StartDate": { "$date": { "$numberLong": "1678838400000" } }, + "EndDate": { "$date": { "$numberLong": "1693440000000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 2, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": false, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1683828000000" } }, + "EndDate": { "$date": { "$numberLong": "1687110900000" } }, + "DefaultPremium": 1, + "DefaulRegular": 0, + "LocalizedItemName": "FREE WITH PRIME GAMING" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": false, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1683828000000" } }, + "EndDate": { "$date": { "$numberLong": "1687110900000" } } + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": true, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1684432800000" } }, + "EndDate": { "$date": { "$numberLong": "1693504800000" } } + } + ], + "InGameMarket": { + "LandingPage": { + "Categories": [ + { + "CategoryName": "POPULAR", + "Name": "/Lotus/Language/Menu/StorePopular", + "Icon": "popular", + "Items": [ + "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", + "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", + "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", + "/Lotus/Types/StoreItems/Packages/WarframeBundles/WolfFrameBundle", + "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", + "/Lotus/Types/StoreItems/Packages/ProtovyreCosmeticsBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/EmberDeluxeIISkinBundle", + "/Lotus/Types/StoreItems/Packages/RailjackVoidrigBundle", + "/Lotus/StoreItems/Powersuits/Werewolf/Werewolf", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", + "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", + "/Lotus/Types/StoreItems/Packages/FormaPack", + "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst" + ] + }, + { + "CategoryName": "DUVIRI_PARADOX", + "Name": "/Lotus/Language/Store/Store_DuviriParadox", + "Icon": "duviriparadox", + "AddToMenu": true, + "Items": [ + "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/BaruukDeluxeSkinBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/WispDeluxeSkinBundle", + "/Lotus/Types/StoreItems/Packages/VoidAdornmentIVBundle", + "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", + "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitArabicBundle", + "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", + "/Lotus/StoreItems/Upgrades/Skins/Duviri/DuviriSwordTowerShieldSkin", + "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitOutfit1ABundle", + "/Lotus/StoreItems/Weapons/Tenno/Bows/DaxDuviriAsymetricalBow/DaxDuviriAsymmetricalLongBowPlayerWeapon", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAetigo", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundlePsyacus", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAccessories", + "/Lotus/Types/StoreItems/Packages/Tattoo/TattooBundleDuviri", + "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" + ] + }, + { + "CategoryName": "TENNOGEN", + "Name": "/Lotus/Language/Menu/Store_Tennogen", + "Icon": "tennogen", + "Items": [ + "/Lotus/StoreItems/Upgrades/Skins/Runner/SWGaussNitrolystSkin", + "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWRetrorolystSyandana", + "/Lotus/StoreItems/Upgrades/Skins/BrokenFrame/SWXakuDeatheaSkin", + "/Lotus/StoreItems/Upgrades/Skins/Sentient/SWCalibanScionHelmet", + "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWAlocanaSyandana", + "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" + ] + }, + { + "CategoryName": "DUVIRI_CHOICES", + "Name": "/Lotus/Language/Store/Store_DuviriChoices", + "Icon": "duvirichoices", + "AddToMenu": true, + "Items": [] + }, + { + "CategoryName": "PREMIUM_BUNDLES", + "Name": "/Lotus/Language/Store/Store_PremiumBundles", + "Icon": "premiumbundles", + "Items": [ + "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", + "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", + "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", + "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", + "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB" + ] + }, + { + "CategoryName": "WISH_LIST", + "Name": "/Lotus/Language/Menu/Store_Wishlist", + "Icon": "wishlist", + "Items": [] + } + ] + } + }, + "Invasions": [ + { + "_id": { "$oid": "6471a5c11c84d8991785ccc1" }, + "Faction": "FC_GRINEER", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode4", + "Count": -35500, + "Goal": 43000, + "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "646e00f1d08856975bb476fe" }, + "AttackerReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] + }, + "AttackerMissionInfo": { "seed": 573551, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 810078, "faction": "FC_GRINEER" }, + "Activation": { "$date": { "$numberLong": "1685170489276" } } + }, + { + "_id": { "$oid": "64729729ea6b289e0f440b37" }, + "Faction": "FC_CORPUS", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode177", + "Count": -40065, + "Goal": 40000, + "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", + "Completed": true, + "ChainID": { "$oid": "646fdcb95a219384bdbbd5f1" }, + "AttackerReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/SnipetronVandalBlueprint", "ItemCount": 1 }] + }, + "AttackerMissionInfo": { "seed": 181914, "faction": "FC_GRINEER" }, + "DefenderReward": { + "countedItems": [ + { "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/GrineerCombatKnifeHilt", "ItemCount": 1 } + ] + }, + "DefenderMissionInfo": { "seed": 197505, "faction": "FC_CORPUS" }, + "Activation": { "$date": { "$numberLong": "1685232025336" } } + }, + { + "_id": { "$oid": "64764c611959704d82e095f8" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode127", + "Count": -19265, + "Goal": 30000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", + "Completed": false, + "ChainID": { "$oid": "647612f5b75e9d02362f0c6c" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 995781, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 978707, "faction": "FC_INFESTATION", "missionReward": [] }, + "Activation": { "$date": { "$numberLong": "1685474401909" } } + }, + { + "_id": { "$oid": "6476ba8aca0663ae5a22b6bb" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode68", + "Count": -33274, + "Goal": 33000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": true, + "ChainID": { "$oid": "6476ba8aca0663ae5a22b6bb" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 512950, "faction": "FC_GRINEER" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 160228, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685508708793" } } + }, + { + "_id": { "$oid": "647730e50ecf58593d735cb0" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode107", + "Count": -17526, + "Goal": 36000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 640989, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 53442, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685537906204" } } + }, + { + "_id": { "$oid": "64775e991d3a1c5c0a181494" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode66", + "Count": -1218, + "Goal": 45000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 563164, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 203755, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685544601696" } } + }, + { + "_id": { "$oid": "64775e991d3a1c5c0a181495" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode22", + "Count": -1490, + "Goal": 36000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 933714, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 693132, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685544601696" } } + } + ], + "HubEvents": [], + "NodeOverrides": [ + { "_id": { "$oid": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true }, + { "_id": { "$oid": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true }, + { "_id": { "$oid": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true }, + { "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9507716 }, + { + "_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, + "Node": "EarthHUB", + "Hide": false, + "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB", + "Activation": { "$date": { "$numberLong": "1535646600000" } } + }, + { + "_id": { "$oid": "5d24d1f674491d51f8d44473" }, + "Node": "MercuryHUB", + "Hide": true, + "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", + "Activation": { "$date": { "$numberLong": "1563030000000" } } + }, + { + "_id": { "$oid": "5c7cb0d00000000000000000" }, + "Activation": { "$date": { "$numberLong": "1684512000000" } }, + "Expiry": { "$date": { "$numberLong": "1685721600000" } }, + "Node": "SolNode129", + "Faction": "FC_CORPUS", + "CustomNpcEncounters": ["/Lotus/Types/Gameplay/Venus/Encounters/Heists/ExploiterHeistFissure"] + } + ], + "VoidTraders": [ + { + "_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, + "Activation": { "$date": { "$numberLong": "1685710800000" } }, + "Expiry": { "$date": { "$numberLong": "1685883600000" } }, + "Id": "5d1e07a0a38e4a4fdd7cefca", + "Character": "Baro'Ki Teel", + "Node": "SaturnHUB" + } + ], + "PrimeVaultTraders": [ + { + "_id": { "$oid": "631f8c4ac36af423770eaa97" }, + "Activation": { "$date": { "$numberLong": "1683223200000" } }, + "Completed": false, + "InitialStartDate": { "$date": { "$numberLong": "1662738144266" } }, + "Node": "TradeHUB1", + "Manifest": [ + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaTrinityPrimeDualPack", + "PrimePrice": 10 + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack", + "PrimePrice": 10, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack", + "PrimePrice": 6, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosPrimeSinglePack", + "PrimePrice": 6, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTrinityPrimeSinglePack", + "PrimePrice": 6 + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaPrimeSinglePack", + "PrimePrice": 6 + }, + { + "ItemType": "/Lotus/StoreItems/Powersuits/Paladin/PaladinPrime", + "PrimePrice": 3, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeOberonCape", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/SurakaPrimeDangle", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeSilvaAegis/PrimeSilvaAegis", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSybaris/PrimeSybarisRifle", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Powersuits/Necro/NekrosPrime", + "PrimePrice": 3, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/UruPrimeScarf", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAcanthusPrimeArmorSet", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeTigris/PrimeTigris", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/PrimeGalatine/PrimeGalatine", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { "ItemType": "/Lotus/StoreItems/Powersuits/Trinity/TrinityPrime", "PrimePrice": 3 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVKavasaPrimeKubrowArmor", + "PrimePrice": 2 + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/ScrollingPrimeMeleeDangle", + "PrimePrice": 1 + }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeDualKamas/PrimeDualKamas", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/AntiMatter/NovaPrime", "PrimePrice": 3 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEdoPrimeArmorSet", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrimeAccessSigilFive", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSoma/PrimeSomaRifle", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeVasto/PrimeVastoPistol", "PrimePrice": 2 }, + { + "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/OberonPrimeBobbleHead", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NekrosPrimeBobbleHead", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NovaPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TrinityPrimeBobbleHead", "PrimePrice": 1 }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultBBronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultBBronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + } + ], + "Expiry": { "$date": { "$numberLong": "1685718000000" } }, + "EvergreenManifest": [ + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/DualDagger/FangPrimeDagger", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeLex/PrimeLex", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/ShipScenes/PrimeLisetFiligreeScene", "PrimePrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAviaPrimeArmorSet", "PrimePrice": 2 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVayasPrimeAccessories", + "PrimePrice": 2 + }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/TwitchPrimeMeleeDangle", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeAviaSyandana", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeTwitchScarf", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/TwitchPrimeScarf", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/TwitchPrimeSigil", "PrimePrice": 1 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNecraloidBundle", + "RegularPrice": 10 + }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Liset/LisetSkinTwitchPrime", "RegularPrice": 10 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/InfMembraneCape", "RegularPrice": 10 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/PrimeBucks", "RegularPrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoidTraceBundle", "RegularPrice": 1 } + ], + "ScheduleInfo": [ + { + "Expiry": { "$date": { "$numberLong": "1667498400000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1669921200000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVValkyrSarynPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1672945200000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1668711600000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack" + }, + { + "Expiry": { "$date": { "$numberLong": "1675364400000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1671130800000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1677783600000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1674154800000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAtlasVaubanPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1680804000000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1676473200000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1683223200000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1679594400000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagRhinoPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1685718000000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1682013600000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1688666400000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1684433100000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1691085600000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1691085600000" } } + } + ] + } + ], + "VoidStorms": [ + { + "_id": { "$oid": "64775c416894d083a29b8872" }, + "Node": "CrewBattleNode511", + "Activation": { "$date": { "$numberLong": "1685546401825" } }, + "Expiry": { "$date": { "$numberLong": "1685551801825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "64775c416894d083a29b8871" }, + "Node": "CrewBattleNode509", + "Activation": { "$date": { "$numberLong": "1685546401821" } }, + "Expiry": { "$date": { "$numberLong": "1685551801821" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "64775c416894d083a29b8874" }, + "Node": "CrewBattleNode521", + "Activation": { "$date": { "$numberLong": "1685546401829" } }, + "Expiry": { "$date": { "$numberLong": "1685551801829" } }, + "ActiveMissionTier": "VoidT3" + }, + { + "_id": { "$oid": "64775c416894d083a29b8873" }, + "Node": "CrewBattleNode530", + "Activation": { "$date": { "$numberLong": "1685546401827" } }, + "Expiry": { "$date": { "$numberLong": "1685551801827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "64775c416894d083a29b8876" }, + "Node": "CrewBattleNode543", + "Activation": { "$date": { "$numberLong": "1685546401834" } }, + "Expiry": { "$date": { "$numberLong": "1685551801834" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "64775c416894d083a29b8875" }, + "Node": "CrewBattleNode527", + "Activation": { "$date": { "$numberLong": "1685546401832" } }, + "Expiry": { "$date": { "$numberLong": "1685551801832" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3db" }, + "Node": "CrewBattleNode519", + "Activation": { "$date": { "$numberLong": "1685550001821" } }, + "Expiry": { "$date": { "$numberLong": "1685555401821" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3de" }, + "Node": "CrewBattleNode524", + "Activation": { "$date": { "$numberLong": "1685550001829" } }, + "Expiry": { "$date": { "$numberLong": "1685555401829" } }, + "ActiveMissionTier": "VoidT3" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3dd" }, + "Node": "CrewBattleNode535", + "Activation": { "$date": { "$numberLong": "1685550001827" } }, + "Expiry": { "$date": { "$numberLong": "1685555401827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3dc" }, + "Node": "CrewBattleNode503", + "Activation": { "$date": { "$numberLong": "1685550001825" } }, + "Expiry": { "$date": { "$numberLong": "1685555401825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3e0" }, + "Node": "CrewBattleNode542", + "Activation": { "$date": { "$numberLong": "1685550001834" } }, + "Expiry": { "$date": { "$numberLong": "1685555401834" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3df" }, + "Node": "CrewBattleNode536", + "Activation": { "$date": { "$numberLong": "1685550001832" } }, + "Expiry": { "$date": { "$numberLong": "1685555401832" } }, + "ActiveMissionTier": "VoidT4" + } + ], + "PrimeAccessAvailability": { "State": "PRIME1" }, + "PrimeVaultAvailabilities": [false, false, false, false, false], + "PrimeTokenAvailability": true, + "DailyDeals": [ + { + "StoreItem": "/Lotus/StoreItems/Upgrades/Focus/AttackLensGreater", + "Activation": { "$date": { "$numberLong": "1685480400000" } }, + "Expiry": { "$date": { "$numberLong": "1685574000000" } }, + "Discount": 20, + "OriginalPrice": 40, + "SalePrice": 32, + "AmountTotal": 125, + "AmountSold": 125 + } + ], + "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, + "PVPChallengeInstances": [ + { + "_id": { "$oid": "6470fd0132c7efc24f00caf0" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf1" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 20 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf2" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 10 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf3" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 0 }], + "isGenerated": true, + "PVPMode": "PVPMODE_NONE", + "subChallenges": [ + { "$oid": "6470fd0132c7efc24f00caf0" }, + { "$oid": "6470fd0132c7efc24f00caf1" }, + { "$oid": "6470fd0132c7efc24f00caf2" } + ], + "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfb8" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 4 }], + "isGenerated": true, + "PVPMode": "PVPMODE_CAPTURETHEFLAG", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfb9" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_CAPTURETHEFLAG", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbc" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 2 }], + "isGenerated": true, + "PVPMode": "PVPMODE_DEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbb" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 2 }], + "isGenerated": true, + "PVPMode": "PVPMODE_TEAMDEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfba" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_TEAMDEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbf" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsMEDIUM", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbd" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_DEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbe" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + } + ], + "PersistentEnemies": [], + "PVPAlternativeModes": [], + "PVPActiveTournaments": [], + "ProjectPct": [55.93717913052773, 90.86309625235785, 0], + "ConstructionProjects": [], + "TwitchPromos": [], + "ExperimentRecommended": [], + "EndlessXpChoices": [ + { "Category": "EXC_NORMAL", "Choices": ["Hydroid", "Mirage", "Limbo"] }, + { "Category": "EXC_HARD", "Choices": ["Zylok", "Sibear", "Dread", "Despair", "Hate"] } + ], + "ForceLogoutVersion": 0, + "FeaturedGuilds": [ + { + "_id": { "$oid": "5303c4bd06c56f4168b5fed9" }, + "Name": "Miau after Tomorrow", + "Tier": 1, + "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, + "Emblem": true + }, + { + "_id": { "$oid": "56ab8b2407c56fd145c91aa5" }, + "Name": "Slayers of Darkness", + "Tier": 2, + "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, + "Emblem": true + }, + { + "_id": { "$oid": "57ed05cb08c56ffd67386105" }, + "Name": "Nazaryk", + "Tier": 3, + "AllianceId": { "$oid": "5fdcf602fc5cef2d337800e0" }, + "Emblem": true + }, + { "_id": { "$oid": "570f9bda08c56f0887fb6db5" }, "Name": "GentleManz", "Tier": 4, "Emblem": true }, + { + "_id": { "$oid": "56d8b39408c56fd89a1799ec" }, + "Name": "Phantom Vanguard", + "Tier": 5, + "AllianceId": { "$oid": "55e270f706c56f2e2f0bb7d6" }, + "Emblem": true + }, + { + "_id": { "$oid": "54e44a5006c56f7eab0d5aa9" }, + "Name": "Violet Church", + "Tier": 3, + "AllianceId": { "$oid": "56c44d0b08c56f5c367b4665" }, + "Emblem": true + } + ], + "SeasonInfo": { + "Activation": { "$date": { "$numberLong": "1684951200000" } }, + "Expiry": { "$date": { "$numberLong": "1702857600000" } }, + "AffiliationTag": "RadioLegionIntermission8Syndicate", + "Season": 10, + "Phase": 0, + "Params": "", + "ActiveChallenges": [ + { + "_id": { "$oid": "001100020000000000000022" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685577600000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithElectricity" + }, + { + "_id": { "$oid": "001100020000000000000023" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685404800000" } }, + "Expiry": { "$date": { "$numberLong": "1685664000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTransmuteMods" + }, + { + "_id": { "$oid": "001100020000000000000024" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685491200000" } }, + "Expiry": { "$date": { "$numberLong": "1685750400000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailySolveCiphers" + }, + { + "_id": { "$oid": "001100020000000000000015" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteRescue" + }, + { + "_id": { "$oid": "001100020000000000000016" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteKuva" + }, + { + "_id": { "$oid": "001100020000000000000017" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyKillEximus" + }, + { + "_id": { "$oid": "001100020000000000000018" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPerfectAnimalCapture" + }, + { + "_id": { "$oid": "001100020000000000000019" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyUnlockRelics" + }, + { + "_id": { "$oid": "001100020000000000000020" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardKillEnemies" + }, + { + "_id": { "$oid": "001100020000000000000021" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardFastCapture" + } + ] + }, + "Tmp": "{\"sfn\":555}" } diff --git a/tsconfig.json b/tsconfig.json index 58fa269b..a75f01a3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,113 +1,113 @@ { - "extends": "@tsconfig/node20/tsconfig.json", - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ + "extends": "@tsconfig/node20/tsconfig.json", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - //"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": ["es2023"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + /* Language and Environment */ + //"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": ["es2023"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - /* Modules */ - //"module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - "resolveJsonModule": true /* Enable importing .json files. */, - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* Modules */ + //"module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + "resolveJsonModule": true /* Enable importing .json files. */, + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./build/" /* Specify an output folder for all emitted files. */, - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build/" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - //"noUnusedLocals": true /* Enable error reporting when local variables aren't read. */, - "noUnusedParameters": true /* Raise an error when a function parameter isn't read. */, - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, - "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + //"noUnusedLocals": true /* Enable error reporting when local variables aren't read. */, + "noUnusedParameters": true /* Raise an error when a function parameter isn't read. */, + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, + "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "paths": { - "@/*": ["./*"] - } + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "paths": { + "@/*": ["./*"] } + } } -- 2.47.2 From 96f945267a5a5dec2b4dec642fd26a82383ebf30 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Fri, 2 Jun 2023 04:11:07 +0200 Subject: [PATCH 02/13] Revert "2 spaces tab, prettier command" This reverts commit bd4ea5c94440304768883cae8169315ea15774f8. --- .prettierrc | 2 +- config.json | 10 +- package.json | 71 +- .../api/checkDailyMissionBonusController.ts | 20 +- src/controllers/api/dronesController.ts | 10 +- src/controllers/api/findSessionsController.ts | 18 +- src/controllers/api/getAllianceController.ts | 2 +- src/controllers/api/getFriendsController.ts | 16 +- .../api/getIgnoredUsersController.ts | 20 +- .../api/getNewRewardSeedController.ts | 2 +- src/controllers/api/getShipController.ts | 2 +- src/controllers/api/hostSessionController.ts | 2 +- src/controllers/api/inboxController.ts | 2 +- src/controllers/api/inventoryController.ts | 8 +- src/controllers/api/loginController.ts | 114 +- src/controllers/api/loginRewardsController.ts | 2 +- .../api/marketRecommendationsController.ts | 20 +- .../marketSearchRecommendationsController.ts | 2 +- src/controllers/api/purchaseController.ts | 2 +- .../api/setActiveQuestController.ts | 2 +- src/controllers/api/surveysController.ts | 16 +- .../api/updateChallengeProgressController.ts | 2 +- src/controllers/api/viewController.ts | 2 +- .../custom/createAccountController.ts | 8 +- .../dynamic/aggregateSessionsController.ts | 2 +- .../dynamic/worldStateController.ts | 8 +- src/controllers/misc/steamPacksController.ts | 2 +- src/helpers/customHelpers.ts | 72 +- src/helpers/general.ts | 54 +- src/helpers/loginHelpers.ts | 52 +- src/index.ts | 6 +- src/middleware/middleware.ts | 14 +- src/models/loginModel.ts | 44 +- src/models/t.ts | 2 +- src/routes/cache.ts | 14 +- src/services/loginService.ts | 22 +- src/services/mongoService.ts | 14 +- src/types/customTypes.ts | 8 +- src/types/loginTypes.ts | 62 +- static/fixed_responses/getShip.json | 44 +- static/fixed_responses/inbox.json | 40 +- static/fixed_responses/inventory.json | 258 +- static/fixed_responses/loginRewards.json | 14 +- static/fixed_responses/login_static.ts | 32 +- static/fixed_responses/purchase.json | 22 +- static/fixed_responses/worldState.json | 5016 +++++++++-------- tsconfig.json | 204 +- 47 files changed, 3191 insertions(+), 3170 deletions(-) diff --git a/.prettierrc b/.prettierrc index 2f852aef..dc84f98c 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "tabWidth": 2, + "tabWidth": 4, "useTabs": false, "endOfLine": "auto", "trailingComma": "none", diff --git a/config.json b/config.json index 82335457..d0c662ae 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,7 @@ { - "autoCreateAccount": true, - "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", - "matchmakingBuildId": "4920386201513015989", - "version": "33.0.14", - "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==" + "autoCreateAccount": true, + "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", + "matchmakingBuildId": "4920386201513015989", + "version": "33.0.14", + "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==" } diff --git a/package.json b/package.json index 1c994e08..b0088221 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,37 @@ { - "name": "wf-emulator", - "version": "0.1.0", - "description": "WF Emulator", - "main": "index.ts", - "scripts": { - "start": "node build/index.js", - "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts", - "build": "tsc", - "lint": "eslint --ext .ts .", - "pretty": "prettier --write \"./**/*.{js,jsx,ts,tsx,json}\"" - }, - "license": "GNU", - "dependencies": { - "dotenv": "^16.0.3", - "express": "^5.0.0-beta.1", - "mongoose": "^7.1.1" - }, - "devDependencies": { - "@tsconfig/node20": "^1.0.0", - "@types/body-parser": "^1.19.2", - "@types/express": "^4.17.17", - "@types/morgan": "^1.9.4", - "@typescript-eslint/eslint-plugin": "^5.59.2", - "@typescript-eslint/parser": "^5.59.2", - "eslint": "^8.40.0", - "eslint-plugin-prettier": "^4.2.1", - "morgan": "^1.10.0", - "prettier": "^2.8.8", - "ts-node-dev": "^2.0.0", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">=18.15.0", - "npm": ">=9.5.0" - } + "name": "wf-emulator", + "version": "0.1.0", + "description": "WF Emulator", + "main": "index.ts", + "scripts": { + "start": "node build/index.js", + "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts", + "build": "tsc", + "lint": "eslint --ext .ts ." + }, + "license": "GNU", + "dependencies": { + "dotenv": "^16.0.3", + "express": "^5.0.0-beta.1", + "mongoose": "^7.1.1" + }, + "devDependencies": { + "@tsconfig/node20": "^1.0.0", + "@types/body-parser": "^1.19.2", + "@types/express": "^4.17.17", + "@types/morgan": "^1.9.4", + "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/parser": "^5.59.2", + "eslint": "^8.40.0", + "eslint-plugin-prettier": "^4.2.1", + "morgan": "^1.10.0", + "prettier": "^2.8.8", + "ts-node-dev": "^2.0.0", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">=18.15.0", + "npm": ">=9.5.0" + } } diff --git a/src/controllers/api/checkDailyMissionBonusController.ts b/src/controllers/api/checkDailyMissionBonusController.ts index a128a606..97b838fe 100644 --- a/src/controllers/api/checkDailyMissionBonusController.ts +++ b/src/controllers/api/checkDailyMissionBonusController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const checkDailyMissionBonusController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x44, 0x61, 0x69, 0x6c, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, 0x31, - 0x2d, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x56, 0x50, 0x57, 0x69, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, 0x31, - 0x0a - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x44, 0x61, 0x69, 0x6c, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a, + 0x31, 0x2d, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x56, 0x50, 0x57, 0x69, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, + 0x3a, 0x31, 0x0a + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { checkDailyMissionBonusController }; diff --git a/src/controllers/api/dronesController.ts b/src/controllers/api/dronesController.ts index 2bc67e66..7a55e00e 100644 --- a/src/controllers/api/dronesController.ts +++ b/src/controllers/api/dronesController.ts @@ -1,11 +1,11 @@ import { RequestHandler } from "express"; const dronesController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end(Buffer.from([0x7b, 0x7d, 0x0a])); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": "3" + }); + res.end(Buffer.from([0x7b, 0x7d, 0x0a])); }; export { dronesController }; diff --git a/src/controllers/api/findSessionsController.ts b/src/controllers/api/findSessionsController.ts index 8f9b2265..f749f00a 100644 --- a/src/controllers/api/findSessionsController.ts +++ b/src/controllers/api/findSessionsController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const findSessionsController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d - ]); + const data = Buffer.from([ + 0x7b, 0x22, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d + ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { findSessionsController }; diff --git a/src/controllers/api/getAllianceController.ts b/src/controllers/api/getAllianceController.ts index 27fe17de..391dae5f 100644 --- a/src/controllers/api/getAllianceController.ts +++ b/src/controllers/api/getAllianceController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const getAllianceController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { getAllianceController }; diff --git a/src/controllers/api/getFriendsController.ts b/src/controllers/api/getFriendsController.ts index 3a173477..9fb65fa1 100644 --- a/src/controllers/api/getFriendsController.ts +++ b/src/controllers/api/getFriendsController.ts @@ -1,12 +1,12 @@ import { Request, Response } from "express"; export default (_request: Request, response: Response) => { - response.writeHead(200, { - //Connection: "keep-alive", - //"Content-Encoding": "gzip", - "Content-Type": "text/html", - // charset: "UTF - 8", - "Content-Length": "3" - }); - response.end(Buffer.from([0x7b, 0x7d, 0x0a])); + response.writeHead(200, { + //Connection: "keep-alive", + //"Content-Encoding": "gzip", + "Content-Type": "text/html", + // charset: "UTF - 8", + "Content-Length": "3" + }); + response.end(Buffer.from([0x7b, 0x7d, 0x0a])); }; diff --git a/src/controllers/api/getIgnoredUsersController.ts b/src/controllers/api/getIgnoredUsersController.ts index dfeedb54..97127fba 100644 --- a/src/controllers/api/getIgnoredUsersController.ts +++ b/src/controllers/api/getIgnoredUsersController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const getIgnoredUsersController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end( - Buffer.from([ - 0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32, 0x34, - 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d - ]) - ); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": "3" + }); + res.end( + Buffer.from([ + 0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32, + 0x34, 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d + ]) + ); }; export { getIgnoredUsersController }; diff --git a/src/controllers/api/getNewRewardSeedController.ts b/src/controllers/api/getNewRewardSeedController.ts index a5c89069..851b9d4e 100644 --- a/src/controllers/api/getNewRewardSeedController.ts +++ b/src/controllers/api/getNewRewardSeedController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const getNewRewardSeedController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { getNewRewardSeedController }; diff --git a/src/controllers/api/getShipController.ts b/src/controllers/api/getShipController.ts index 68328ee0..82f598fe 100644 --- a/src/controllers/api/getShipController.ts +++ b/src/controllers/api/getShipController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import getShip from "@/static/fixed_responses/getShip.json"; const getShipController: RequestHandler = (_req, res) => { - res.json(getShip); + res.json(getShip); }; export { getShipController }; diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index 40e220e9..812332cf 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const hostSessionController: RequestHandler = (_req, res) => { - res.json({ sessionId: { $oid: "64777916e794cfc5abdd69ea" }, rewardSeed: -1492798783199571432 }); + res.json({ sessionId: { $oid: "64777916e794cfc5abdd69ea" }, rewardSeed: -1492798783199571432 }); }; export { hostSessionController }; diff --git a/src/controllers/api/inboxController.ts b/src/controllers/api/inboxController.ts index d5aa4f93..cbd2af06 100644 --- a/src/controllers/api/inboxController.ts +++ b/src/controllers/api/inboxController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import inbox from "@/static/fixed_responses/inbox.json"; const inboxController: RequestHandler = (_req, res) => { - res.json(inbox); + res.json(inbox); }; export { inboxController }; diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index e744e2ca..1341db4b 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -2,10 +2,10 @@ import inventory from "@/static/fixed_responses/inventory.json"; import { Request, RequestHandler, Response } from "express"; const inventorController: RequestHandler = (request: Request, response: Response) => { - console.log(request.query); - const accountId = request.query.accountId; - console.log(accountId); - response.json(inventory); + console.log(request.query); + const accountId = request.query.accountId; + console.log(accountId); + response.json(inventory); }; export default inventorController; diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index e932759a..80f71d5f 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -11,32 +11,62 @@ import { DTLS, groups, HUB, IRC, Nonce, NRS, platformCDNs } from "@/static/fixed // eslint-disable-next-line @typescript-eslint/no-misused-promises const loginController: RequestHandler = async (request, response) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument - const body = JSON.parse(request.body); // parse octet stream of json data to json object - const loginRequest = toLoginRequest(body); - // console.log(body); - //console.log(String.fromCharCode.apiRouterly(null, req.body)); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument + const body = JSON.parse(request.body); // parse octet stream of json data to json object + const loginRequest = toLoginRequest(body); + // console.log(body); + //console.log(String.fromCharCode.apiRouterly(null, req.body)); - const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } - console.log("findone", account); + const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } + console.log("findone", account); - if (!account && config.autoCreateAccount) { - try { - const newAccount = await createAccount({ - email: loginRequest.email, - password: loginRequest.password, - DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")), - CountryCode: loginRequest.lang.toUpperCase(), - ClientType: loginRequest.ClientType, - CrossPlatformAllowed: true, - ForceLogoutVersion: 0, - ConsentNeeded: false, - TrackedSettings: [] - }); - console.log("CREATED ACCOUNT", newAccount); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { email, password, ...databaseAccount } = newAccount; - const newLoginResponse: ILoginResponse = { + if (!account && config.autoCreateAccount) { + try { + const newAccount = await createAccount({ + email: loginRequest.email, + password: loginRequest.password, + DisplayName: loginRequest.email.substring(0, loginRequest.email.indexOf("@")), + CountryCode: loginRequest.lang.toUpperCase(), + ClientType: loginRequest.ClientType, + CrossPlatformAllowed: true, + ForceLogoutVersion: 0, + ConsentNeeded: false, + TrackedSettings: [] + }); + console.log("CREATED ACCOUNT", newAccount); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { email, password, ...databaseAccount } = newAccount; + const newLoginResponse: ILoginResponse = { + ...databaseAccount, + Groups: groups, + platformCDNs: platformCDNs, + Nonce: Nonce, + NRS: NRS, + DTLS: DTLS, + IRC: IRC, + HUB: HUB, + BuildLabel: config.buildLabel, + MatchmakingBuildId: config.matchmakingBuildId + }; + + console.log(newLoginResponse); + response.json(newLoginResponse); + return; + } catch (error: unknown) { + if (error instanceof Error) { + throw new Error("error creating account"); + } + } + } + + //email not found or incorrect password + if (!account || !isCorrectPassword(loginRequest.password, account.password)) { + response.status(400).json({ error: "incorrect login data" }); + return; + } + + const { email, password, ...databaseAccount } = account.toJSON(); + const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, platformCDNs: platformCDNs, @@ -47,40 +77,10 @@ const loginController: RequestHandler = async (request, response) => { HUB: HUB, BuildLabel: config.buildLabel, MatchmakingBuildId: config.matchmakingBuildId - }; + }; - console.log(newLoginResponse); - response.json(newLoginResponse); - return; - } catch (error: unknown) { - if (error instanceof Error) { - throw new Error("error creating account"); - } - } - } - - //email not found or incorrect password - if (!account || !isCorrectPassword(loginRequest.password, account.password)) { - response.status(400).json({ error: "incorrect login data" }); - return; - } - - const { email, password, ...databaseAccount } = account.toJSON(); - const newLoginResponse: ILoginResponse = { - ...databaseAccount, - Groups: groups, - platformCDNs: platformCDNs, - Nonce: Nonce, - NRS: NRS, - DTLS: DTLS, - IRC: IRC, - HUB: HUB, - BuildLabel: config.buildLabel, - MatchmakingBuildId: config.matchmakingBuildId - }; - - console.log("login response", newLoginResponse); - response.json(newLoginResponse); + console.log("login response", newLoginResponse); + response.json(newLoginResponse); }; export { loginController }; diff --git a/src/controllers/api/loginRewardsController.ts b/src/controllers/api/loginRewardsController.ts index 2cd90af0..fd4b40c4 100644 --- a/src/controllers/api/loginRewardsController.ts +++ b/src/controllers/api/loginRewardsController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import loginRewards from "@/static/fixed_responses/loginRewards.json"; const loginRewardsController: RequestHandler = (_req, res) => { - res.json(loginRewards); + res.json(loginRewards); }; export { loginRewardsController }; diff --git a/src/controllers/api/marketRecommendationsController.ts b/src/controllers/api/marketRecommendationsController.ts index 47824796..8acfa89e 100644 --- a/src/controllers/api/marketRecommendationsController.ts +++ b/src/controllers/api/marketRecommendationsController.ts @@ -1,16 +1,16 @@ import { RequestHandler } from "express"; const marketRecommendationsController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, 0x3a, 0x5b, - 0x5d, 0x2c, 0x22, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x7d - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x7b, 0x22, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x22, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, + 0x3a, 0x5b, 0x5d, 0x2c, 0x22, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x7d + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { marketRecommendationsController }; diff --git a/src/controllers/api/marketSearchRecommendationsController.ts b/src/controllers/api/marketSearchRecommendationsController.ts index 992737b6..bc99897b 100644 --- a/src/controllers/api/marketSearchRecommendationsController.ts +++ b/src/controllers/api/marketSearchRecommendationsController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const marketSearchRecommendationsController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { marketSearchRecommendationsController }; diff --git a/src/controllers/api/purchaseController.ts b/src/controllers/api/purchaseController.ts index f03933eb..78c5fee9 100644 --- a/src/controllers/api/purchaseController.ts +++ b/src/controllers/api/purchaseController.ts @@ -2,5 +2,5 @@ import purchase from "@/static/fixed_responses/purchase.json"; import { Request, Response } from "express"; export default (_req: Request, res: Response): void => { - res.json(purchase); + res.json(purchase); }; diff --git a/src/controllers/api/setActiveQuestController.ts b/src/controllers/api/setActiveQuestController.ts index 57e9e631..a8f06a25 100644 --- a/src/controllers/api/setActiveQuestController.ts +++ b/src/controllers/api/setActiveQuestController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const setActiveQuestController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { setActiveQuestController }; diff --git a/src/controllers/api/surveysController.ts b/src/controllers/api/surveysController.ts index b69641be..2a593e47 100644 --- a/src/controllers/api/surveysController.ts +++ b/src/controllers/api/surveysController.ts @@ -1,14 +1,14 @@ import { RequestHandler } from "express"; const surveysController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d - ]); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + const data = Buffer.from([ + 0x7b, 0x22, 0x53, 0x75, 0x72, 0x76, 0x65, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d + ]); + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": data.length + }); + res.end(data); }; export { surveysController }; diff --git a/src/controllers/api/updateChallengeProgressController.ts b/src/controllers/api/updateChallengeProgressController.ts index 80c0ecf3..b822d818 100644 --- a/src/controllers/api/updateChallengeProgressController.ts +++ b/src/controllers/api/updateChallengeProgressController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const updateChallengeProgressController: RequestHandler = (_request, response) => { - response.sendStatus(200); + response.sendStatus(200); }; export { updateChallengeProgressController }; diff --git a/src/controllers/api/viewController.ts b/src/controllers/api/viewController.ts index fa0ea1a4..e63d3b1a 100644 --- a/src/controllers/api/viewController.ts +++ b/src/controllers/api/viewController.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import view from "@/static/fixed_responses/view.json"; const viewController: RequestHandler = (_req, res) => { - res.json(view); + res.json(view); }; export { viewController }; diff --git a/src/controllers/custom/createAccountController.ts b/src/controllers/custom/createAccountController.ts index ce41fd79..148e0220 100644 --- a/src/controllers/custom/createAccountController.ts +++ b/src/controllers/custom/createAccountController.ts @@ -4,12 +4,12 @@ import { createAccount } from "@/src/services/loginService"; import { RequestHandler } from "express"; const createAccountController: RequestHandler = async (req, res) => { - const createAccountData = toCreateAccount(req.body); - const databaseAccount = toDatabaseAccount(createAccountData); + const createAccountData = toCreateAccount(req.body); + const databaseAccount = toDatabaseAccount(createAccountData); - const account = await createAccount(databaseAccount); + const account = await createAccount(databaseAccount); - res.json(account); + res.json(account); }; export { createAccountController }; diff --git a/src/controllers/dynamic/aggregateSessionsController.ts b/src/controllers/dynamic/aggregateSessionsController.ts index 1efbb921..e3c1659b 100644 --- a/src/controllers/dynamic/aggregateSessionsController.ts +++ b/src/controllers/dynamic/aggregateSessionsController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const aggregateSessionsController: RequestHandler = (_req, res) => { - res.json({}); + res.json({}); }; export { aggregateSessionsController }; diff --git a/src/controllers/dynamic/worldStateController.ts b/src/controllers/dynamic/worldStateController.ts index a3cf0926..474cb442 100644 --- a/src/controllers/dynamic/worldStateController.ts +++ b/src/controllers/dynamic/worldStateController.ts @@ -3,10 +3,10 @@ import config from "@/config.json"; import worldState from "@/static/fixed_responses/worldState.json"; const worldStateController: RequestHandler = (_req, res) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - worldState.WorldSeed = config.worldSeed; - worldState.BuildLabel = config.buildLabel; - res.json(worldState); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + worldState.WorldSeed = config.worldSeed; + worldState.BuildLabel = config.buildLabel; + res.json(worldState); }; export { worldStateController }; diff --git a/src/controllers/misc/steamPacksController.ts b/src/controllers/misc/steamPacksController.ts index f3f7d317..f0885786 100644 --- a/src/controllers/misc/steamPacksController.ts +++ b/src/controllers/misc/steamPacksController.ts @@ -1,6 +1,6 @@ import { RequestHandler } from "express"; const steamPacksController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.sendStatus(200); }; export { steamPacksController }; diff --git a/src/helpers/customHelpers.ts b/src/helpers/customHelpers.ts index 3cbd9ccb..d203f2d1 100644 --- a/src/helpers/customHelpers.ts +++ b/src/helpers/customHelpers.ts @@ -4,52 +4,52 @@ import { IDatabaseAccount } from "../types/loginTypes"; import { isString, parseEmail, parseString } from "./general"; const getWhirlpoolHash = (rawPassword: string): string => { - const whirlpool = crypto.createHash("whirlpool"); - const data = whirlpool.update(rawPassword, "utf8"); - const hash = data.digest("hex"); - return hash; + const whirlpool = crypto.createHash("whirlpool"); + const data = whirlpool.update(rawPassword, "utf8"); + const hash = data.digest("hex"); + return hash; }; const parsePassword = (passwordCandidate: unknown): string => { - // a different function could be called that checks whether the password has a certain shape - if (!isString(passwordCandidate)) { - throw new Error("incorrect password format"); - } - return passwordCandidate; + // a different function could be called that checks whether the password has a certain shape + if (!isString(passwordCandidate)) { + throw new Error("incorrect password format"); + } + return passwordCandidate; }; const toAccountCreation = (accountCreation: unknown): IAccountCreation => { - if (!accountCreation || typeof accountCreation !== "object") { - throw new Error("incorrect or missing account creation data"); - } + if (!accountCreation || typeof accountCreation !== "object") { + throw new Error("incorrect or missing account creation data"); + } - if ( - "email" in accountCreation && - "password" in accountCreation && - "DisplayName" in accountCreation && - "CountryCode" in accountCreation - ) { - const rawPassword = parsePassword(accountCreation.password); - console.log("email", accountCreation.email); - return { - email: parseEmail(accountCreation.email), - password: getWhirlpoolHash(rawPassword), - CountryCode: parseString(accountCreation.CountryCode), - DisplayName: parseString(accountCreation.DisplayName) - }; - } - throw new Error("incorrect account creation data: incorrect properties"); + if ( + "email" in accountCreation && + "password" in accountCreation && + "DisplayName" in accountCreation && + "CountryCode" in accountCreation + ) { + const rawPassword = parsePassword(accountCreation.password); + console.log("email", accountCreation.email); + return { + email: parseEmail(accountCreation.email), + password: getWhirlpoolHash(rawPassword), + CountryCode: parseString(accountCreation.CountryCode), + DisplayName: parseString(accountCreation.DisplayName) + }; + } + throw new Error("incorrect account creation data: incorrect properties"); }; const toDatabaseAccount = (createAccount: IAccountCreation): IDatabaseAccount => { - return { - ...createAccount, - ClientType: "", - ConsentNeeded: false, - CrossPlatformAllowed: true, - ForceLogoutVersion: 0, - TrackedSettings: [] - } satisfies IDatabaseAccount; + return { + ...createAccount, + ClientType: "", + ConsentNeeded: false, + CrossPlatformAllowed: true, + ForceLogoutVersion: 0, + TrackedSettings: [] + } satisfies IDatabaseAccount; }; export { toDatabaseAccount, toAccountCreation as toCreateAccount }; diff --git a/src/helpers/general.ts b/src/helpers/general.ts index 21fbff1d..8aa19a1a 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -1,58 +1,58 @@ const isString = (text: unknown): text is string => { - return typeof text === "string" || text instanceof String; + return typeof text === "string" || text instanceof String; }; const parseString = (data: unknown): string => { - if (!isString(data)) { - throw new Error("data is not a string"); - } + if (!isString(data)) { + throw new Error("data is not a string"); + } - return data; + return data; }; const isNumber = (number: unknown): number is number => { - return typeof number === "number" && !isNaN(number); + return typeof number === "number" && !isNaN(number); }; const parseNumber = (data: unknown): number => { - if (!isNumber(data)) { - throw new Error("data is not a number"); - } + if (!isNumber(data)) { + throw new Error("data is not a number"); + } - return Number(data); + return Number(data); }; const isDate = (date: string) => { - if (!Date.parse(date)) { - throw new Error("invalid date"); - } - return date; + if (!Date.parse(date)) { + throw new Error("invalid date"); + } + return date; }; const parseDateNumber = (date: unknown): string => { - if (!isString(date) || !isDate(date)) { - throw new Error("date could not be parsed"); - } + if (!isString(date) || !isDate(date)) { + throw new Error("date could not be parsed"); + } - return date; + return date; }; const parseEmail = (email: unknown): string => { - if (!isString(email)) { - throw new Error("incorrect email"); - } - return email; + if (!isString(email)) { + throw new Error("incorrect email"); + } + return email; }; const isBoolean = (booleanCandidate: unknown): booleanCandidate is boolean => { - return typeof booleanCandidate === "boolean"; + return typeof booleanCandidate === "boolean"; }; const parseBoolean = (booleanCandidate: unknown): boolean => { - if (!isBoolean(booleanCandidate)) { - throw new Error("argument was not a boolean"); - } - return booleanCandidate; + if (!isBoolean(booleanCandidate)) { + throw new Error("argument was not a boolean"); + } + return booleanCandidate; }; export { isString, isNumber, parseString, parseNumber, parseDateNumber, parseBoolean, parseEmail }; diff --git a/src/helpers/loginHelpers.ts b/src/helpers/loginHelpers.ts index 96712bfb..b77b3560 100644 --- a/src/helpers/loginHelpers.ts +++ b/src/helpers/loginHelpers.ts @@ -2,34 +2,34 @@ import { ILoginRequest } from "../types/loginTypes"; import { parseEmail, parseNumber, parseString } from "./general"; const toLoginRequest = (loginRequest: unknown): ILoginRequest => { - if (!loginRequest || typeof loginRequest !== "object") { - throw new Error("incorrect or missing login request data"); - } + if (!loginRequest || typeof loginRequest !== "object") { + throw new Error("incorrect or missing login request data"); + } - // TODO: function that checks whether every field of interface is in object - if ( - "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 { - email: parseEmail(loginRequest.email), - 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) - }; - } + // TODO: function that checks whether every field of interface is in object + if ( + "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 { + email: parseEmail(loginRequest.email), + 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) + }; + } - throw new Error("incorrect login request"); + throw new Error("incorrect login request"); }; export { toLoginRequest }; diff --git a/src/index.ts b/src/index.ts index b232bc1d..689fa854 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,9 +6,9 @@ import { app } from "./app"; //const bodyParser = require("body-parser"); const options = { - key: fs.readFileSync("static/certs/key.pem"), - cert: fs.readFileSync("static/certs/cert.pem"), - passphrase: "123456" + key: fs.readFileSync("static/certs/key.pem"), + cert: fs.readFileSync("static/certs/cert.pem"), + passphrase: "123456" }; // const server = http.createServer(app).listen(80); diff --git a/src/middleware/middleware.ts b/src/middleware/middleware.ts index 2eab0d34..1653864a 100644 --- a/src/middleware/middleware.ts +++ b/src/middleware/middleware.ts @@ -1,16 +1,16 @@ import { NextFunction, Request, Response } from "express"; const unknownEndpointHandler = (request: Request, response: Response) => { - console.error("[ERROR] Unknown Endpoint", request.url); - response.status(404).json({ error: "endpoint was not found" }); + console.error("[ERROR] Unknown Endpoint", request.url); + response.status(404).json({ error: "endpoint was not found" }); }; const requestLogger = (request: Request, _response: Response, next: NextFunction) => { - console.log("Method:", request.method); - console.log("Path: ", request.path); - console.log("Body: ", request.body); - console.log("---"); - next(); + console.log("Method:", request.method); + console.log("Path: ", request.path); + console.log("Body: ", request.body); + console.log("---"); + next(); }; export { unknownEndpointHandler, requestLogger }; diff --git a/src/models/loginModel.ts b/src/models/loginModel.ts index 6f0196d3..232bcba0 100644 --- a/src/models/loginModel.ts +++ b/src/models/loginModel.ts @@ -2,8 +2,8 @@ import { model, Schema, SchemaOptions } from "mongoose"; import { IDatabaseAccountDocument } from "../types/loginTypes"; const opts = { - toJSON: { virtuals: true }, - toObject: { virtuals: true } + toJSON: { virtuals: true }, + toObject: { virtuals: true } } satisfies SchemaOptions; // { @@ -21,29 +21,29 @@ const opts = { // } const databaseAccountSchema = new Schema( - { - email: { type: String, required: true, unique: true }, - password: { type: String, required: true }, - DisplayName: { type: String, required: true }, - CountryCode: { type: String, 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: [] } - }, - opts + { + email: { type: String, required: true, unique: true }, + password: { type: String, required: true }, + DisplayName: { type: String, required: true }, + CountryCode: { type: String, 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: [] } + }, + opts ); databaseAccountSchema.set("toJSON", { - transform(_document, returnedObject) { - //returnedObject.id = returnedObject._id.toString(); - delete returnedObject._id; - delete returnedObject.__v; - }, - virtuals: true + transform(_document, returnedObject) { + //returnedObject.id = returnedObject._id.toString(); + delete returnedObject._id; + delete returnedObject.__v; + }, + virtuals: true }); //databaseAccountSchema.set(""); diff --git a/src/models/t.ts b/src/models/t.ts index 882ff5aa..c59908c1 100644 --- a/src/models/t.ts +++ b/src/models/t.ts @@ -1,7 +1,7 @@ import mongoose from "mongoose"; const accountSchema = new mongoose.Schema({ - data: JSON + data: JSON }); // personSchema.set("toJSON", { diff --git a/src/routes/cache.ts b/src/routes/cache.ts index e3a6ee83..bb69a6db 100644 --- a/src/routes/cache.ts +++ b/src/routes/cache.ts @@ -4,19 +4,19 @@ import config from "@/config.json"; const cacheRouter = express.Router(); cacheRouter.get("/B.Cache.Dx11.bin.*", (_req, res) => { - //console.log("asd", path.join(__dirname, "../data")); - res.sendFile("static/data/B.Cache.Dx11_33.0.6.bin", { root: "./" }); + //console.log("asd", path.join(__dirname, "../data")); + res.sendFile("static/data/B.Cache.Dx11_33.0.6.bin", { root: "./" }); }); cacheRouter.get("/B.Cache.Windows_en.bin*", (_req, res) => { - //console.log("asd", path.join(__dirname, "../data")); - res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" }); + //console.log("asd", path.join(__dirname, "../data")); + res.sendFile("static/data/B.Cache.Windows_en_33.0.10.bin", { root: "./" }); }); cacheRouter.get(/^\/origin\/([a-zA-Z0-9]+)\/H\.Cache\.bin.*$/, (_req, res) => { - // console.log("asd", path.join(__dirname, "../data")); - // console.log("asd", __dirname); - res.sendFile(`static/data/H.Cache_${config.version}.bin`, { root: "./" }); + // console.log("asd", path.join(__dirname, "../data")); + // console.log("asd", __dirname); + res.sendFile(`static/data/H.Cache_${config.version}.bin`, { root: "./" }); }); export { cacheRouter }; diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 90b8de97..1c992b4c 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -2,21 +2,21 @@ import { Account } from "../models/loginModel"; import { IDatabaseAccount } from "../types/loginTypes"; const isCorrectPassword = (requestPassword: string, databasePassword: string): boolean => { - return requestPassword === databasePassword; + return requestPassword === databasePassword; }; const createAccount = async (accountData: IDatabaseAccount) => { - console.log("test", accountData); - const account = new Account(accountData); - try { - await account.save(); - return account.toJSON(); - } catch (error) { - if (error instanceof Error) { - throw new Error(error.message); + console.log("test", accountData); + const account = new Account(accountData); + try { + await account.save(); + return account.toJSON(); + } catch (error) { + if (error instanceof Error) { + throw new Error(error.message); + } + throw new Error("error creating account that is not of instance Error"); } - throw new Error("error creating account that is not of instance Error"); - } }; export { isCorrectPassword, createAccount }; diff --git a/src/services/mongoService.ts b/src/services/mongoService.ts index 6187d0b5..9defba3a 100644 --- a/src/services/mongoService.ts +++ b/src/services/mongoService.ts @@ -10,14 +10,14 @@ if (!url) throw new Error("MONGODB_URL not found"); console.log("connecting to MongoDB URL:", url); const connectDatabase = async () => { - try { - await mongoose.connect(url); - console.log("connected to MongoDB"); - } catch (error: unknown) { - if (error instanceof Error) { - console.error("error connecting to MongoDB", error.message); + try { + await mongoose.connect(url); + console.log("connected to MongoDB"); + } catch (error: unknown) { + if (error instanceof Error) { + console.error("error connecting to MongoDB", error.message); + } } - } }; export { connectDatabase }; diff --git a/src/types/customTypes.ts b/src/types/customTypes.ts index 8ce0e660..01c77950 100644 --- a/src/types/customTypes.ts +++ b/src/types/customTypes.ts @@ -1,6 +1,6 @@ export interface IAccountCreation { - email: string; - password: string; - DisplayName: string; - CountryCode: string; + email: string; + password: string; + DisplayName: string; + CountryCode: string; } diff --git a/src/types/loginTypes.ts b/src/types/loginTypes.ts index fd6e64c6..1d53de43 100644 --- a/src/types/loginTypes.ts +++ b/src/types/loginTypes.ts @@ -1,46 +1,46 @@ export interface ILoginResponse extends Omit { - Groups: IGroup[]; - Nonce: number; - BuildLabel: string; - MatchmakingBuildId: string; - platformCDNs: string[]; - NRS: string[]; - DTLS: number; - IRC: string[]; - HUB: string; + Groups: IGroup[]; + Nonce: number; + BuildLabel: string; + MatchmakingBuildId: string; + platformCDNs: string[]; + NRS: string[]; + DTLS: number; + IRC: string[]; + HUB: string; } //includes virtual id export interface IDatabaseAccountDocument extends IDatabaseAccount { - id: string; + id: string; } export interface IGroup { - experiment: string; - experimentGroup: string; + experiment: string; + experimentGroup: string; } export interface IDatabaseAccount { - email: string; - password: string; - DisplayName: string; - CountryCode: string; - ClientType: string; - CrossPlatformAllowed: boolean; - ForceLogoutVersion: number; - AmazonAuthToken?: string; - AmazonRefreshToken?: string; - ConsentNeeded: boolean; - TrackedSettings: string[]; + email: string; + password: string; + DisplayName: string; + CountryCode: string; + ClientType: string; + CrossPlatformAllowed: boolean; + ForceLogoutVersion: number; + AmazonAuthToken?: string; + AmazonRefreshToken?: string; + ConsentNeeded: boolean; + TrackedSettings: string[]; } export interface ILoginRequest { - email: string; - password: string; - time: number; - s: string; - lang: string; - date: number; - ClientType: string; - PS: string; + email: string; + password: string; + time: number; + s: string; + lang: string; + date: number; + ClientType: string; + PS: string; } diff --git a/static/fixed_responses/getShip.json b/static/fixed_responses/getShip.json index f15c1be8..4e0de41f 100644 --- a/static/fixed_responses/getShip.json +++ b/static/fixed_responses/getShip.json @@ -1,24 +1,24 @@ { - "ShipOwnerId": "removed", - "Ship": { - "Rooms": [ - { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, - { "Name": "BridgeRoom", "MaxCapacity": 1600 }, - { "Name": "LisetRoom", "MaxCapacity": 1000 }, - { "Name": "OperatorChamberRoom", "MaxCapacity": 1600 }, - { "Name": "OutsideRoom", "MaxCapacity": 1600 }, - { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } - ], - "ContentUrlSignature": "removed" - }, - "Apartment": { - "Rooms": [ - { "Name": "ElevatorLanding", "MaxCapacity": 1600 }, - { "Name": "ApartmentRoomA", "MaxCapacity": 1000 }, - { "Name": "ApartmentRoomB", "MaxCapacity": 1600 }, - { "Name": "ApartmentRoomC", "MaxCapacity": 1600 }, - { "Name": "DuviriHallway", "MaxCapacity": 1600 } - ], - "FavouriteLoadouts": [] - } + "ShipOwnerId": "removed", + "Ship": { + "Rooms": [ + { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, + { "Name": "BridgeRoom", "MaxCapacity": 1600 }, + { "Name": "LisetRoom", "MaxCapacity": 1000 }, + { "Name": "OperatorChamberRoom", "MaxCapacity": 1600 }, + { "Name": "OutsideRoom", "MaxCapacity": 1600 }, + { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } + ], + "ContentUrlSignature": "removed" + }, + "Apartment": { + "Rooms": [ + { "Name": "ElevatorLanding", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomA", "MaxCapacity": 1000 }, + { "Name": "ApartmentRoomB", "MaxCapacity": 1600 }, + { "Name": "ApartmentRoomC", "MaxCapacity": 1600 }, + { "Name": "DuviriHallway", "MaxCapacity": 1600 } + ], + "FavouriteLoadouts": [] + } } diff --git a/static/fixed_responses/inbox.json b/static/fixed_responses/inbox.json index a43fd2b1..a55108d4 100644 --- a/static/fixed_responses/inbox.json +++ b/static/fixed_responses/inbox.json @@ -1,24 +1,24 @@ { - "Inbox": [ - { - "sndr": "/Lotus/Language/Bosses/Ordis", - "msg": "/Lotus/Language/Inbox/ThankYouFreeMultipleContent", - "countedAtt": [ + "Inbox": [ { - "ItemType": "/Lotus/Upgrades/Skins/Promo/Twitch/OgrisTwitchSkin", - "ItemCount": 1 - }, - { - "ItemType": "/Lotus/Weapons/ClanTech/Chemical/RocketLauncher", - "ItemCount": 1 + "sndr": "/Lotus/Language/Bosses/Ordis", + "msg": "/Lotus/Language/Inbox/ThankYouFreeMultipleContent", + "countedAtt": [ + { + "ItemType": "/Lotus/Upgrades/Skins/Promo/Twitch/OgrisTwitchSkin", + "ItemCount": 1 + }, + { + "ItemType": "/Lotus/Weapons/ClanTech/Chemical/RocketLauncher", + "ItemCount": 1 + } + ], + "sub": "/Lotus/Language/Inbox/ThankYouFreeMultipleSubject", + "icon": "/Lotus/Interface/Icons/Npcs/Ordis.png", + "highPriority": true, + "messageId": "removed", + "date": { "$date": { "$numberLong": "removed" } }, + "r": true } - ], - "sub": "/Lotus/Language/Inbox/ThankYouFreeMultipleSubject", - "icon": "/Lotus/Interface/Icons/Npcs/Ordis.png", - "highPriority": true, - "messageId": "removed", - "date": { "$date": { "$numberLong": "removed" } }, - "r": true - } - ] + ] } diff --git a/static/fixed_responses/inventory.json b/static/fixed_responses/inventory.json index e19ac090..74f9d43a 100644 --- a/static/fixed_responses/inventory.json +++ b/static/fixed_responses/inventory.json @@ -1,131 +1,131 @@ { - "SubscribedToEmails": 0, - "Created": { "$date": { "$numberLong": "removed" } }, - "SubscribedToEmailsPersonalized": 0, - "RewardSeed": -123123123123123, - "CrewMemberBin": { "Slots": 3 }, - "CrewShipSalvageBin": { "Slots": 8 }, - "DrifterMelee": [ - { - "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", - "ItemId": { "$oid": "removed" } - } - ], - "FusionPoints": 0, - "MechBin": { "Slots": 4 }, - "OperatorAmpBin": { "Slots": 8 }, - "PveBonusLoadoutBin": { "Slots": 0 }, - "PvpBonusLoadoutBin": { "Slots": 0 }, - "RandomModBin": { "Slots": 15 }, - "RegularCredits": 0, - "SentinelBin": { "Slots": 10 }, - "SpaceSuitBin": { "Slots": 4 }, - "SpaceWeaponBin": { "Slots": 4 }, - "SuitBin": { "Slots": 2 }, - "WeaponBin": { "Slots": 8 }, - "LastInventorySync": { "$oid": "removed" }, - "NextRefill": { "$date": { "$numberLong": "removed" } }, - "ActiveLandscapeTraps": [], - "ChallengeProgress": [], - "CrewMembers": [], - "CrewShips": [], - "CrewShipHarnesses": [], - "CrewShipSalvagedWeapons": [], - "CrewShipSalvagedWeaponSkins": [], - "CrewShipWeapons": [], - "CrewShipWeaponSkins": [], - "DataKnives": [], - "DrifterGuns": [], - "Drones": [], - "Horses": [], - "Hoverboards": [], - "KubrowPets": [], - "KubrowPetEggs": [], - "KubrowPetPrints": [], - "LongGuns": [], - "MechSuits": [], - "Melee": [], - "MoaPets": [], - "OperatorAmps": [], - "OperatorLoadOuts": [], - "AdultOperatorLoadOuts": [], - "KahlLoadOuts": [], - "PendingRecipes": [], - "PersonalGoalProgress": [], - "PersonalTechProjects": [], - "Pistols": [], - "QualifyingInvasions": [], - "RepVotes": [], - "Scoops": [], - "Sentinels": [], - "SentinelWeapons": [], - "Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "123123" } }], - "SpaceGuns": [], - "SpaceMelee": [], - "SpaceSuits": [], - "SpecialItems": [], - "StepSequencers": [], - "Suits": [], - "Upgrades": [], - "WeaponSkins": [], - "Boosters": [], - "Consumables": [], - "EmailItems": [], - "FlavourItems": [], - "FocusUpgrades": [], - "FusionTreasures": [], - "LeagueTickets": [], - "LevelKeys": [], - "LoreFragmentScans": [], - "MiscItems": [], - "PendingSpectreLoadouts": [], - "Quests": [], - "QuestKeys": [], - "RawUpgrades": [], - "Recipes": [], - "Robotics": [], - "ShipDecorations": [], - "SpectreLoadouts": [], - "XPInfo": [], - "CrewShipAmmo": [], - "CrewShipRawSalvage": [], - "EvolutionProgress": [], - "Missions": [], - "TauntHistory": [], - "CompletedSyndicates": [], - "UsedDailyDeals": [], - "DailyAffiliation": 16000, - "DailyAffiliationPvp": 16000, - "DailyAffiliationLibrary": 16000, - "DailyAffiliationCetus": 16000, - "DailyAffiliationQuills": 16000, - "DailyAffiliationSolaris": 16000, - "DailyAffiliationVentkids": 16000, - "DailyAffiliationVox": 16000, - "DailyAffiliationEntrati": 16000, - "DailyAffiliationNecraloid": 16000, - "DailyAffiliationZariman": 16000, - "DailyAffiliationKahl": 16000, - "DailyFocus": 250000, - "GiftsRemaining": 8, - "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 - }, - "DuviriInfo": { "Seed": 123123123123123123, "NumCompletions": 0 }, - "TradesRemaining": 0, - "HasContributedToDojo": false, - "HasResetAccount": false, - "PendingCoupon": { - "Expiry": { "$date": { "$numberLong": "0" } }, - "Discount": 0 - }, - "PremiumCreditsFree": 0, - "ReceivedStartingGear": true, - "StoryModeChoice": "WARFRAME" + "SubscribedToEmails": 0, + "Created": { "$date": { "$numberLong": "removed" } }, + "SubscribedToEmailsPersonalized": 0, + "RewardSeed": -123123123123123, + "CrewMemberBin": { "Slots": 3 }, + "CrewShipSalvageBin": { "Slots": 8 }, + "DrifterMelee": [ + { + "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", + "ItemId": { "$oid": "removed" } + } + ], + "FusionPoints": 0, + "MechBin": { "Slots": 4 }, + "OperatorAmpBin": { "Slots": 8 }, + "PveBonusLoadoutBin": { "Slots": 0 }, + "PvpBonusLoadoutBin": { "Slots": 0 }, + "RandomModBin": { "Slots": 15 }, + "RegularCredits": 0, + "SentinelBin": { "Slots": 10 }, + "SpaceSuitBin": { "Slots": 4 }, + "SpaceWeaponBin": { "Slots": 4 }, + "SuitBin": { "Slots": 2 }, + "WeaponBin": { "Slots": 8 }, + "LastInventorySync": { "$oid": "removed" }, + "NextRefill": { "$date": { "$numberLong": "removed" } }, + "ActiveLandscapeTraps": [], + "ChallengeProgress": [], + "CrewMembers": [], + "CrewShips": [], + "CrewShipHarnesses": [], + "CrewShipSalvagedWeapons": [], + "CrewShipSalvagedWeaponSkins": [], + "CrewShipWeapons": [], + "CrewShipWeaponSkins": [], + "DataKnives": [], + "DrifterGuns": [], + "Drones": [], + "Horses": [], + "Hoverboards": [], + "KubrowPets": [], + "KubrowPetEggs": [], + "KubrowPetPrints": [], + "LongGuns": [], + "MechSuits": [], + "Melee": [], + "MoaPets": [], + "OperatorAmps": [], + "OperatorLoadOuts": [], + "AdultOperatorLoadOuts": [], + "KahlLoadOuts": [], + "PendingRecipes": [], + "PersonalGoalProgress": [], + "PersonalTechProjects": [], + "Pistols": [], + "QualifyingInvasions": [], + "RepVotes": [], + "Scoops": [], + "Sentinels": [], + "SentinelWeapons": [], + "Ships": [{ "ItemType": "/Lotus/Types/Items/Ships/DefaultShip", "ItemId": { "$oid": "123123" } }], + "SpaceGuns": [], + "SpaceMelee": [], + "SpaceSuits": [], + "SpecialItems": [], + "StepSequencers": [], + "Suits": [], + "Upgrades": [], + "WeaponSkins": [], + "Boosters": [], + "Consumables": [], + "EmailItems": [], + "FlavourItems": [], + "FocusUpgrades": [], + "FusionTreasures": [], + "LeagueTickets": [], + "LevelKeys": [], + "LoreFragmentScans": [], + "MiscItems": [], + "PendingSpectreLoadouts": [], + "Quests": [], + "QuestKeys": [], + "RawUpgrades": [], + "Recipes": [], + "Robotics": [], + "ShipDecorations": [], + "SpectreLoadouts": [], + "XPInfo": [], + "CrewShipAmmo": [], + "CrewShipRawSalvage": [], + "EvolutionProgress": [], + "Missions": [], + "TauntHistory": [], + "CompletedSyndicates": [], + "UsedDailyDeals": [], + "DailyAffiliation": 16000, + "DailyAffiliationPvp": 16000, + "DailyAffiliationLibrary": 16000, + "DailyAffiliationCetus": 16000, + "DailyAffiliationQuills": 16000, + "DailyAffiliationSolaris": 16000, + "DailyAffiliationVentkids": 16000, + "DailyAffiliationVox": 16000, + "DailyAffiliationEntrati": 16000, + "DailyAffiliationNecraloid": 16000, + "DailyAffiliationZariman": 16000, + "DailyAffiliationKahl": 16000, + "DailyFocus": 250000, + "GiftsRemaining": 8, + "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 + }, + "DuviriInfo": { "Seed": 123123123123123123, "NumCompletions": 0 }, + "TradesRemaining": 0, + "HasContributedToDojo": false, + "HasResetAccount": false, + "PendingCoupon": { + "Expiry": { "$date": { "$numberLong": "0" } }, + "Discount": 0 + }, + "PremiumCreditsFree": 0, + "ReceivedStartingGear": true, + "StoryModeChoice": "WARFRAME" } diff --git a/static/fixed_responses/loginRewards.json b/static/fixed_responses/loginRewards.json index b6632556..0ebbf5dc 100644 --- a/static/fixed_responses/loginRewards.json +++ b/static/fixed_responses/loginRewards.json @@ -1,9 +1,9 @@ { - "DailyTributeInfo": { - "IsMilestoneDay": false, - "IsChooseRewardSet": true, - "LoginDays": 1337, - "NextMilestoneReward": "", - "NextMilestoneDay": 50 - } + "DailyTributeInfo": { + "IsMilestoneDay": false, + "IsChooseRewardSet": true, + "LoginDays": 1337, + "NextMilestoneReward": "", + "NextMilestoneDay": 50 + } } diff --git a/static/fixed_responses/login_static.ts b/static/fixed_responses/login_static.ts index 3b1f3de0..8319186a 100644 --- a/static/fixed_responses/login_static.ts +++ b/static/fixed_responses/login_static.ts @@ -1,25 +1,25 @@ import { IGroup } from "@/src/types/loginTypes"; export const groups: IGroup[] = [ - { - experiment: "InitiatePage", - experimentGroup: "initiate_page_no_video" - }, - { experiment: "ChatQAChannel", experimentGroup: "control" }, - { - experiment: "MarketSearchRecommendations", - experimentGroup: "premium_credit_purchases_14_days" - }, - { experiment: "SurveyLocation", experimentGroup: "EXIT" }, - { experiment: "GamesightAB", experimentGroup: "a" } + { + experiment: "InitiatePage", + experimentGroup: "initiate_page_no_video" + }, + { experiment: "ChatQAChannel", experimentGroup: "control" }, + { + experiment: "MarketSearchRecommendations", + experimentGroup: "premium_credit_purchases_14_days" + }, + { experiment: "SurveyLocation", experimentGroup: "EXIT" }, + { experiment: "GamesightAB", experimentGroup: "a" } ]; export const platformCDNs = [ - "https://content.warframe.com/", - "https://content-xb1.warframe.com/", - "https://content-ps4.warframe.com/", - "https://content-swi.warframe.com/", - "https://content-mob.warframe.com/" + "https://content.warframe.com/", + "https://content-xb1.warframe.com/", + "https://content-ps4.warframe.com/", + "https://content-swi.warframe.com/", + "https://content-mob.warframe.com/" ]; export const Nonce = 1231231233; diff --git a/static/fixed_responses/purchase.json b/static/fixed_responses/purchase.json index e9c27715..12e2b20f 100644 --- a/static/fixed_responses/purchase.json +++ b/static/fixed_responses/purchase.json @@ -1,13 +1,13 @@ { - "InventoryChanges": { - "WeaponBin": { "count": 1, "platinum": 0, "Slots": -1 }, - "Suits": [ - { - "ItemType": "/Lotus/Powersuits/Ninja/Ninja", - "Configs": [], - "ItemId": { "$oid": "123123123123" } - } - ], - "RegularCredits": -25000 - } + "InventoryChanges": { + "WeaponBin": { "count": 1, "platinum": 0, "Slots": -1 }, + "Suits": [ + { + "ItemType": "/Lotus/Powersuits/Ninja/Ninja", + "Configs": [], + "ItemId": { "$oid": "123123123123" } + } + ], + "RegularCredits": -25000 + } } diff --git a/static/fixed_responses/worldState.json b/static/fixed_responses/worldState.json index 9c673471..cbca668d 100644 --- a/static/fixed_responses/worldState.json +++ b/static/fixed_responses/worldState.json @@ -1,2508 +1,2530 @@ { - "WorldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", - "Version": 10, - "MobileVersion": "4.15.13.1", - "BuildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", - "Time": 1685550327, - "Events": [ - { - "_id": { "$oid": "62d31b87106360aa5703954d" }, - "Messages": [ - { "LanguageCode": "en", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "fr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "it", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "de", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "es", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "pt", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ru", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "pl", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "uk", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "tr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ja", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "zh", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "ko", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, - { "LanguageCode": "tc", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" } - ], - "Prop": "https://discord.com/invite/playwarframe", - "Date": { "$date": { "$numberLong": "1658002200000" } }, - "Icon": "/Lotus/Interface/Icons/DiscordIconNoBacker.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62dff6238607d6b5d80876f5" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Une ressource indispensable, le Wiki FR Warframe !" }], - "Prop": "https://warframe.fandom.com/fr/wiki/Wiki_Warframe", - "Date": { "$date": { "$numberLong": "1658844600000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.f54c43d80f7da00887a7c41471884c84.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62e4112cb40d7d395d0b880f" }, - "Messages": [{ "LanguageCode": "tr", "Message": "Warframe Türkiye Discord - Takas Odası Kanalları!" }], - "Prop": "https://forums.warframe.com/topic/1318162-warframe-t%C3%BCrkiye-discorduna-takas-kanallar%C4%B1-eklendi/", - "Date": { "$date": { "$numberLong": "1659113580000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.2515eac966b9f03c6eabf9b7e434d684.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "62ff8739293d0365d3046528" }, - "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Que faire après avoir terminé \"Le Trophée de Vor\"" }], - "Prop": "https://forums.warframe.com/topic/1315672-guide-que-faire-apr%C3%A8s-avoir-termin%C3%A9-le-troph%C3%A9e-de-vor/", - "Date": { "$date": { "$numberLong": "1660913400000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0bd16bb52c55ec09ca1168becb87b030.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6319fa5321a116ecd1017614" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32: Veilbreaker - szczegóły po polsku" }], - "Prop": "https://forums.warframe.com/topic/1321154-aktualizacja-32-veilbreaker/", - "Date": { "$date": { "$numberLong": "1662646740000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/76a29b4bf3e094861c3d36ef31b34b3e.png", - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "633b073816cec9695a056a84" }, - "Messages": [{ "LanguageCode": "pl", "Message": "PRZEGLĄD DEVSTREAM 164" }], - "Prop": "https://forums.warframe.com/topic/1326595-przegl%C4%85d-devstream-164/", - "Date": { "$date": { "$numberLong": "1664812800000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "63456893365cb9c9a309e104" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Wprowadzenie do Polowania na Archona" }], - "Prop": "https://forums.warframe.com/topic/1327682-wprowadzenie-do-polowania-na-archona/", - "Date": { "$date": { "$numberLong": "1665493080000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", - "Priority": true, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "634d7f2f5c1c0e405d05254f" }, - "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Intro aux Chasses aux Archontes" }], - "Prop": "https://forums.warframe.com/topic/1328159-guide-introduction-aux-chasses-aux-archontes/", - "Date": { "$date": { "$numberLong": "1666023180000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "63878183da0783f1c00ffc85" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32.2: Żer na Lua - Notki po polsku!" }], - "Prop": "https://forums.warframe.com/topic/1332240-aktualizacja-322-%C5%BCer-na-lua/", - "Date": { "$date": { "$numberLong": "1669824840000" } }, - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "63a23acc1336bb81640a63dd" }, - "Messages": [], - "Prop": "", - "Date": { "$date": { "$numberLong": "1671576240000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "63c84f910ee5a50a18071a24" }, - "Messages": [{ "LanguageCode": "tr", "Message": "Sentient Rehberi" }], - "Prop": "https://forums.warframe.com/topic/1337858-sentient-rehberi/", - "Date": { "$date": { "$numberLong": "1674071820000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64120cec5ca90487bf075d73" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Hildryn Prime Access is now available!" }, - { "LanguageCode": "fr", "Message": "Le Prime Access Hildryn Prime est maintenant disponible !" }, - { "LanguageCode": "it", "Message": "L'Accesso Hildryn Prime è ora disponibile!" }, - { "LanguageCode": "de", "Message": "Hildryn Prime Access ist jetzt verfügbar!" }, - { "LanguageCode": "es", "Message": "¡Prime Access de Hildryn ya está disponible!" }, - { "LanguageCode": "pt", "Message": "O Prime Access da Hildryn Prime já está disponível!" }, - { "LanguageCode": "ru", "Message": "Доступ Хильдрин Прайм уже открыт!" }, - { "LanguageCode": "pl", "Message": "Hildryn Prime Access już dostępny!" }, - { "LanguageCode": "uk", "Message": "Гільдрина-прайм уже доступна!" }, - { "LanguageCode": "tr", "Message": "Hildryn Prime Access şimdi sizlerle!" }, - { "LanguageCode": "ja", "Message": "Hildryn Prime Accessが登場!" }, - { "LanguageCode": "zh", "Message": "Hildryn Prime Access 现已登场!" }, - { "LanguageCode": "ko", "Message": "힐드린 프라임 액세스를 지금 만나보세요!" }, - { "LanguageCode": "tc", "Message": "Hildryn Prime Access 現已登場!" } - ], - "Prop": "https://www.warframe.com/news/hildryn-prime-access?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-03-HildrynPrimeAccessIGNLaunch", - "Date": { "$date": { "$numberLong": "1678904400000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8260dab07e051d35bcef1a2a82c22965_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64134e23bf2682c23b0214ad" }, - "Messages": [{ "LanguageCode": "es", "Message": "Programas de terceros y tú" }], - "Prop": "https://forums.warframe.com/topic/1343097-programas-de-terceros-y-t%C3%BA/", - "Date": { "$date": { "$numberLong": "1678986720000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "642ca76911f9a53a5006bac6" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Créez votre masque du Paradoxe Duviri !" }], - "Prop": "https://forums.warframe.com/topic/1344657-cr%C3%A9ez-votre-propre-masque-du-paradoxe-duviri/", - "Date": { "$date": { "$numberLong": "1680648000000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/c28ced01aaf966b9222f4a6ed5a7a7fd_1600x900.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6444153668778753e30ed2d4" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Duviri et au-delà, dernières infos" }], - "Prop": "https://forums.warframe.com/topic/1345726-duviri-et-au-del%C3%A0-derni%C3%A8res-infos/", - "Date": { "$date": { "$numberLong": "1682183340000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_04/FuVYV0aWcAAc60t.jpg.0e90f5d9af010ecaa5b9467aaf7333c3.jpg", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64493dd93b9ce09dd509b136" }, - "Messages": [{ "LanguageCode": "ja", "Message": "「デュヴィリ・パラドックス」パッチノート" }], - "Prop": "https://bit.ly/3AxYiNW", - "Date": { "$date": { "$numberLong": "1682521440000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64493fde2b02c323ce07ec73" }, - "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 33: Paradoks Duviri" }], - "Prop": "https://forums.warframe.com/topic/1345996-aktualizacja-33-paradoks-duviri/", - "Date": { "$date": { "$numberLong": "1682521920000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "64494dc72c44d78bab079685" }, - "Messages": [{ "LanguageCode": "ko", "Message": "업데이트 33: 두비리의 역설" }], - "Prop": "", - "Links": [ + "WorldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", + "Version": 10, + "MobileVersion": "4.15.13.1", + "BuildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", + "Time": 1685550327, + "Events": [ { - "LanguageCode": "ko", - "Link": "https://forums.warframe.com/topic/1346037-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-33-%EB%91%90%EB%B9%84%EB%A6%AC%EC%9D%98-%EC%97%AD%EC%84%A4/" + "_id": { "$oid": "62d31b87106360aa5703954d" }, + "Messages": [ + { "LanguageCode": "en", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "fr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "it", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "de", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "es", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "pt", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ru", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "pl", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "uk", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "tr", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ja", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "zh", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "ko", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" }, + { "LanguageCode": "tc", "Message": "/Lotus/Language/CommunityMessages/JoinDiscord" } + ], + "Prop": "https://discord.com/invite/playwarframe", + "Date": { "$date": { "$numberLong": "1658002200000" } }, + "Icon": "/Lotus/Interface/Icons/DiscordIconNoBacker.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "62dff6238607d6b5d80876f5" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Une ressource indispensable, le Wiki FR Warframe !" }], + "Prop": "https://warframe.fandom.com/fr/wiki/Wiki_Warframe", + "Date": { "$date": { "$numberLong": "1658844600000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.f54c43d80f7da00887a7c41471884c84.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "62e4112cb40d7d395d0b880f" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Warframe Türkiye Discord - Takas Odası Kanalları!" }], + "Prop": "https://forums.warframe.com/topic/1318162-warframe-t%C3%BCrkiye-discorduna-takas-kanallar%C4%B1-eklendi/", + "Date": { "$date": { "$numberLong": "1659113580000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2022_07/image.png.2515eac966b9f03c6eabf9b7e434d684.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "62ff8739293d0365d3046528" }, + "Messages": [ + { "LanguageCode": "fr", "Message": "[Guide] Que faire après avoir terminé \"Le Trophée de Vor\"" } + ], + "Prop": "https://forums.warframe.com/topic/1315672-guide-que-faire-apr%C3%A8s-avoir-termin%C3%A9-le-troph%C3%A9e-de-vor/", + "Date": { "$date": { "$numberLong": "1660913400000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0bd16bb52c55ec09ca1168becb87b030.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6319fa5321a116ecd1017614" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32: Veilbreaker - szczegóły po polsku" }], + "Prop": "https://forums.warframe.com/topic/1321154-aktualizacja-32-veilbreaker/", + "Date": { "$date": { "$numberLong": "1662646740000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/76a29b4bf3e094861c3d36ef31b34b3e.png", + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "633b073816cec9695a056a84" }, + "Messages": [{ "LanguageCode": "pl", "Message": "PRZEGLĄD DEVSTREAM 164" }], + "Prop": "https://forums.warframe.com/topic/1326595-przegl%C4%85d-devstream-164/", + "Date": { "$date": { "$numberLong": "1664812800000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "63456893365cb9c9a309e104" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Wprowadzenie do Polowania na Archona" }], + "Prop": "https://forums.warframe.com/topic/1327682-wprowadzenie-do-polowania-na-archona/", + "Date": { "$date": { "$numberLong": "1665493080000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", + "Priority": true, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "634d7f2f5c1c0e405d05254f" }, + "Messages": [{ "LanguageCode": "fr", "Message": "[Guide] Intro aux Chasses aux Archontes" }], + "Prop": "https://forums.warframe.com/topic/1328159-guide-introduction-aux-chasses-aux-archontes/", + "Date": { "$date": { "$numberLong": "1666023180000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8c34580f18d0a489c282192bfc2a810b_1600x900.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "63878183da0783f1c00ffc85" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 32.2: Żer na Lua - Notki po polsku!" }], + "Prop": "https://forums.warframe.com/topic/1332240-aktualizacja-322-%C5%BCer-na-lua/", + "Date": { "$date": { "$numberLong": "1669824840000" } }, + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "63a23acc1336bb81640a63dd" }, + "Messages": [], + "Prop": "", + "Date": { "$date": { "$numberLong": "1671576240000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "63c84f910ee5a50a18071a24" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Sentient Rehberi" }], + "Prop": "https://forums.warframe.com/topic/1337858-sentient-rehberi/", + "Date": { "$date": { "$numberLong": "1674071820000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64120cec5ca90487bf075d73" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Hildryn Prime Access is now available!" }, + { "LanguageCode": "fr", "Message": "Le Prime Access Hildryn Prime est maintenant disponible !" }, + { "LanguageCode": "it", "Message": "L'Accesso Hildryn Prime è ora disponibile!" }, + { "LanguageCode": "de", "Message": "Hildryn Prime Access ist jetzt verfügbar!" }, + { "LanguageCode": "es", "Message": "¡Prime Access de Hildryn ya está disponible!" }, + { "LanguageCode": "pt", "Message": "O Prime Access da Hildryn Prime já está disponível!" }, + { "LanguageCode": "ru", "Message": "Доступ Хильдрин Прайм уже открыт!" }, + { "LanguageCode": "pl", "Message": "Hildryn Prime Access już dostępny!" }, + { "LanguageCode": "uk", "Message": "Гільдрина-прайм уже доступна!" }, + { "LanguageCode": "tr", "Message": "Hildryn Prime Access şimdi sizlerle!" }, + { "LanguageCode": "ja", "Message": "Hildryn Prime Accessが登場!" }, + { "LanguageCode": "zh", "Message": "Hildryn Prime Access 现已登场!" }, + { "LanguageCode": "ko", "Message": "힐드린 프라임 액세스를 지금 만나보세요!" }, + { "LanguageCode": "tc", "Message": "Hildryn Prime Access 現已登場!" } + ], + "Prop": "https://www.warframe.com/news/hildryn-prime-access?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-03-HildrynPrimeAccessIGNLaunch", + "Date": { "$date": { "$numberLong": "1678904400000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/8260dab07e051d35bcef1a2a82c22965_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64134e23bf2682c23b0214ad" }, + "Messages": [{ "LanguageCode": "es", "Message": "Programas de terceros y tú" }], + "Prop": "https://forums.warframe.com/topic/1343097-programas-de-terceros-y-t%C3%BA/", + "Date": { "$date": { "$numberLong": "1678986720000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "642ca76911f9a53a5006bac6" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Créez votre masque du Paradoxe Duviri !" }], + "Prop": "https://forums.warframe.com/topic/1344657-cr%C3%A9ez-votre-propre-masque-du-paradoxe-duviri/", + "Date": { "$date": { "$numberLong": "1680648000000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/c28ced01aaf966b9222f4a6ed5a7a7fd_1600x900.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6444153668778753e30ed2d4" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Duviri et au-delà, dernières infos" }], + "Prop": "https://forums.warframe.com/topic/1345726-duviri-et-au-del%C3%A0-derni%C3%A8res-infos/", + "Date": { "$date": { "$numberLong": "1682183340000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_04/FuVYV0aWcAAc60t.jpg.0e90f5d9af010ecaa5b9467aaf7333c3.jpg", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64493dd93b9ce09dd509b136" }, + "Messages": [{ "LanguageCode": "ja", "Message": "「デュヴィリ・パラドックス」パッチノート" }], + "Prop": "https://bit.ly/3AxYiNW", + "Date": { "$date": { "$numberLong": "1682521440000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64493fde2b02c323ce07ec73" }, + "Messages": [{ "LanguageCode": "pl", "Message": "Aktualizacja 33: Paradoks Duviri" }], + "Prop": "https://forums.warframe.com/topic/1345996-aktualizacja-33-paradoks-duviri/", + "Date": { "$date": { "$numberLong": "1682521920000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/0c1fb4674583e7e29bf36784b28f3476.png", + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "64494dc72c44d78bab079685" }, + "Messages": [{ "LanguageCode": "ko", "Message": "업데이트 33: 두비리의 역설" }], + "Prop": "", + "Links": [ + { + "LanguageCode": "ko", + "Link": "https://forums.warframe.com/topic/1346037-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-33-%EB%91%90%EB%B9%84%EB%A6%AC%EC%9D%98-%EC%97%AD%EC%84%A4/" + } + ], + "Date": { "$date": { "$numberLong": "1682525580000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64495365aca4975f2408f5c3" }, + "Messages": [{ "LanguageCode": "es", "Message": "Actualización 33: La Paradoja de Duviri" }], + "Prop": "https://forums.warframe.com/topic/1346059-actualizaci%C3%B3n-33-la-paradoja-de-duviri/", + "Date": { "$date": { "$numberLong": "1682527020000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "64517606c429f4f85d0f069d" }, + "Messages": [{ "LanguageCode": "ja", "Message": "Nora's Mix Vol. 3 終了日 + Nightwaveの今後について" }], + "Prop": "https://bit.ly/3AJu8HT", + "Date": { "$date": { "$numberLong": "1683060000000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2021_01/Wiki-background.thumb.jpg.f568775e1b4eab008c7c6d3802c942aa.jpg", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6453f7bf20df842a150d8316" }, + "Messages": [{ "LanguageCode": "en", "Message": "Have your Dojo featured on the Star Chart!" }], + "Prop": "https://forums.warframe.com/topic/1349495-star-chart-dojo-showcase-spring-2023/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Spring-dojo-contest", + "Date": { "$date": { "$numberLong": "1683224460000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6453fc4380fb13ff9a072376" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Now Available: Nova Prime and Trinity Prime" }, + { "LanguageCode": "fr", "Message": "Maintenant disponible : Nova Prime et Trinity Prime" }, + { "LanguageCode": "it", "Message": "Ora Disponibili: Nova Prime e Trinity Prime" }, + { "LanguageCode": "de", "Message": "Jetzt erhältlich: Nova Prime und Trinity Prime" }, + { "LanguageCode": "es", "Message": "Disponible ya: Nova Prime y Trinity Prime" }, + { "LanguageCode": "pt", "Message": "Já Disponível: Nova Prime e Trinity Prime" }, + { "LanguageCode": "ru", "Message": "Уже доступны: Нова Прайм и Тринити Прайм" }, + { "LanguageCode": "pl", "Message": "Już dostępne: Nova Prime i Trinity Prime" }, + { "LanguageCode": "uk", "Message": "Уже доступні: Нова-прайм і Трініті-прайм\t" }, + { "LanguageCode": "tr", "Message": "Şimdi Sizlerle: Nova Prime ve Trinity Prime" }, + { "LanguageCode": "ja", "Message": "Nova PrimeとTrinity Primeをゲットしよう" }, + { "LanguageCode": "zh", "Message": "现已登场:Nova Prime 和 Trinity Prime" }, + { "LanguageCode": "ko", "Message": "지금 바로 구매 가능: 노바 프라임 및 트리니티 프라임" }, + { "LanguageCode": "tc", "Message": "現已登場:Nova Prime 以及 Trinity Prime" } + ], + "Prop": "https://www.warframe.com/prime-resurgence?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-PrimeResurgenceNovaTrinity-Launch", + "Date": { "$date": { "$numberLong": "1683222960000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685937600000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/3dde851b071ff5295e58f24d68b43760_800x450.png", + "Priority": false, + "MobileOnly": false, + "HideEndDateModifier": true + }, + { + "_id": { "$oid": "646646aad048b740ec04753c" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Refer a Friend Program Changes" }, + { "LanguageCode": "fr", "Message": "Modification du programme de parrainage" }, + { "LanguageCode": "it", "Message": "Cambiamenti al Programma Riferisci un Amico" }, + { "LanguageCode": "de", "Message": "Programmaktualisierung für 'Freunde rekrutieren'" }, + { "LanguageCode": "es", "Message": "Cambios en el programa \"Refiere a un amigo\"" }, + { "LanguageCode": "pt", "Message": "Mudanças no Programa de Indicação de Amigos" }, + { "LanguageCode": "pl", "Message": "Zmiany programu \"Zaproś Znajomego\"" }, + { "LanguageCode": "uk", "Message": "Зміни в програмі «Запросіть друга»" }, + { "LanguageCode": "tr", "Message": "Arkadaş Daveti Referans Programı Değişiklikleri" }, + { "LanguageCode": "ja", "Message": "お友達紹介プログラム更新" }, + { "LanguageCode": "zh", "Message": "「邀请好友计划」更新" }, + { "LanguageCode": "ko", "Message": "친구 초대 프로그램의 변화" } + ], + "Prop": "https://www.warframe.com/referral", + "Date": { "$date": { "$numberLong": "1684421760000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684393200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/fe49a80950256bf393fa2aa0b9303a_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6466726e06ca85f0e202e343" }, + "Messages": [ + { "LanguageCode": "en", "Message": "TennoCon 2023 Digital Pack Now Available" }, + { "LanguageCode": "fr", "Message": "Le Pack Digital TennoCon 2023 est maintenant disponible" }, + { "LanguageCode": "it", "Message": "Il Pacchetto Digitale TennoCon 2023 è Ora Disponibile" }, + { "LanguageCode": "de", "Message": "TennoCon 2023 Digital Paket ist jetzt verfügbar" }, + { "LanguageCode": "es", "Message": "El Paquete Digital de TennoCon 2023 ya está disponible" }, + { "LanguageCode": "pt", "Message": "O Pacote Digital da TennoCon 2023 já está disponível" }, + { "LanguageCode": "ru", "Message": "Цифровой набор TennoCon-2023 уже доступен" }, + { "LanguageCode": "pl", "Message": "Pakiet Cyfrowy TennoCon 2023 już dostępny" }, + { "LanguageCode": "uk", "Message": "Цифровий набір «Теннокон 2023» уже доступний" }, + { "LanguageCode": "tr", "Message": "TennoCon 2023 Dijital Paketi Şimdi Sizlerle" }, + { "LanguageCode": "ja", "Message": "TennoCon 2023 デジタルパック発売開始" }, + { "LanguageCode": "zh", "Message": "TennoCon 2023 虚拟礼包现已登场" }, + { "LanguageCode": "ko", "Message": "텐노콘 2023 디지털 팩을 지금 만나보세요" }, + { "LanguageCode": "tc", "Message": "TennoCon 2023 數位組合包現已登場" } + ], + "Prop": "", + "Links": [ + { "LanguageCode": "en", "Link": "https://www.warframe.com/tennocon" }, + { "LanguageCode": "fr", "Link": "https://www.warframe.com/fr/tennocon" }, + { "LanguageCode": "it", "Link": "https://www.warframe.com/it/tennocon" }, + { "LanguageCode": "de", "Link": "https://www.warframe.com/de/tennocon" }, + { "LanguageCode": "es", "Link": "https://www.warframe.com/es/tennocon" }, + { "LanguageCode": "pt", "Link": "https://www.warframe.com/pt-br/tennocon" }, + { "LanguageCode": "ru", "Link": "https://www.warframe.com/ru/tennocon" }, + { "LanguageCode": "pl", "Link": "https://www.warframe.com/pl/tennocon" }, + { "LanguageCode": "uk", "Link": "https://www.warframe.com/uk/tennocon" }, + { "LanguageCode": "tr", "Link": "https://www.warframe.com/tr/tennocon" }, + { "LanguageCode": "ja", "Link": "https://www.warframe.com/ja/tennocon" }, + { "LanguageCode": "zh", "Link": "https://www.warframe.com/zh-hans/tennocon" }, + { "LanguageCode": "ko", "Link": "https://www.warframe.com/ko/tennocon" }, + { "LanguageCode": "tc", "Link": "https://www.warframe.com/zh-hant/tennocon" } + ], + "Date": { "$date": { "$numberLong": "1684432080000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684404000000" } }, + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/images/tennocon/2023/digital-pack-banner-2x.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64668cd31137f75bf70d0e09" }, + "Messages": [ + { "LanguageCode": "en", "Message": "May in Warframe Roundup" }, + { "LanguageCode": "fr", "Message": "Tour d'horizon du mois de mai dans Warframe" }, + { "LanguageCode": "it", "Message": "Maggio in Warframe: Riepilogo" }, + { "LanguageCode": "de", "Message": "Mai-Zusammenfassung für Warframe" }, + { "LanguageCode": "es", "Message": "Mayo en Warframe: Resumen" }, + { "LanguageCode": "pt", "Message": "Resumo do mês de maio no Warframe" }, + { "LanguageCode": "pl", "Message": "Maj w Warframe" }, + { "LanguageCode": "uk", "Message": "Травнева добірка у Warframe" }, + { "LanguageCode": "tr", "Message": "Mayıs Ayı Warframe Özeti" }, + { "LanguageCode": "ja", "Message": "5月の『Warframe』振り返り" }, + { "LanguageCode": "zh", "Message": "《Warframe》的五月摘要" }, + { "LanguageCode": "ko", "Message": "5월의 워프레임 요약" }, + { "LanguageCode": "tc", "Message": "Warframe 5 月份總結" } + ], + "Prop": "https://www.warframe.com/news/may-in-warframe-roundup?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-MayWarframeRoundup", + "Date": { "$date": { "$numberLong": "1684440240000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684440000000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/8f08145f560b43a4cafadc7bb9c5748_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64677ce96fba686c8a06bd24" }, + "Messages": [ + { + "LanguageCode": "en", + "Message": "May 25 Charity Stream: Warframe x Covenant House! Click To Learn More. 6 p.m. EST " + } + ], + "Prop": "https://wrfr.me/chmm23", + "Date": { "$date": { "$numberLong": "1684503360000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6467baa3db8bd174db0b163b" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Pre-order 10 Year Anniversary Merch!" }, + { + "LanguageCode": "fr", + "Message": "Précommandez la Collection de produits dérivés du 10e Anniversaire !" + }, + { "LanguageCode": "it", "Message": "Preordina il Merch per il 10° Anniversario!" }, + { "LanguageCode": "de", "Message": "Bestellt die Merch-Kollektion zum 10. Jubiläum vor!" }, + { "LanguageCode": "es", "Message": "¡Reserva los productos del 10° aniversario!" }, + { "LanguageCode": "pt", "Message": "Faça a pré-encomenda de Produtos do Aniversário de 10 anos!" }, + { "LanguageCode": "pl", "Message": "Zamów w przedsprzedaży gadżety na 10-lecie!" }, + { "LanguageCode": "tr", "Message": "10. Yıl Dönümü Ürünleri için ön siparişini ver!" }, + { "LanguageCode": "ja", "Message": "Warframe 10周年記念グッズを予約購入!" }, + { "LanguageCode": "zh", "Message": "预购十周年纪念周边商品!" }, + { "LanguageCode": "ko", "Message": "10주년 기념 굿즈를 예약 주문하세요!" }, + { "LanguageCode": "tc", "Message": "預購 10 週年紀念周邊商品!" } + ], + "Prop": "https://store.warframe.com/products/10-year-anniversary-collection?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Merch-10year-Collection", + "Date": { "$date": { "$numberLong": "1684519320000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684519200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/81f0ccac0ee2cdfb628a64f9f72d2166_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "646e55122b97d301df08b65a" }, + "Messages": [{ "LanguageCode": "ja", "Message": "Devstream 第171回のお知らせ" }], + "Prop": "https://bit.ly/426QXR5", + "Date": { "$date": { "$numberLong": "1684952280000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/4e0d4b80256c0b05a5a9643664799beb.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "646e5cc6af17a161c20d79a4" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Nora’s Mix Vol. 4 has begun" }, + { "LanguageCode": "fr", "Message": "Le Mix de Nora Vol. 4 est disponible" }, + { "LanguageCode": "it", "Message": "Mix di Nora Vol. 4 è iniziato" }, + { "LanguageCode": "de", "Message": "Noras Mix - Vol. 4 hat begonnen" }, + { "LanguageCode": "es", "Message": "Comenzó el Mix de Nora Vol. 4" }, + { "LanguageCode": "pt", "Message": "O Mix da Nora Vol. 4 começou" }, + { "LanguageCode": "ru", "Message": "Микс Норы: Диск 4 уже в начался" }, + { "LanguageCode": "pl", "Message": "Składanka Nory cz. 4 już dostępna" }, + { "LanguageCode": "uk", "Message": "Вибірка Нори 4 уже в грі" }, + { "LanguageCode": "tr", "Message": "Nora'nın Derlemesi - 4. Seri şimdi sizlerle" }, + { "LanguageCode": "ja", "Message": "Nora's Mix Vol.4 開催!" }, + { "LanguageCode": "zh", "Message": "《Nora 的混选 Vol. 4》现已开始!" }, + { "LanguageCode": "ko", "Message": "노라의 믹스 Vol. 4가 시작되었습니다" }, + { "LanguageCode": "tc", "Message": "Nora 合輯 VI 已登場" } + ], + "Prop": "https://www.warframe.com/news/noras-mix-vol-4?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-NightwaveVol4Launch", + "Date": { "$date": { "$numberLong": "1684953960000" } }, + "EventStartDate": { "$date": { "$numberLong": "1684951200000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/42721390b8812fe65296ce5eee7d862_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "646e6a4cf16914573401c77b" }, + "Messages": [ + { "LanguageCode": "tr", "Message": "Nora’nın Derlemesi - 3. Seri Tamamlandı + 4. Seri Sizlerle!" } + ], + "Prop": "https://forums.warframe.com/topic/1354223-nora%E2%80%99n%C4%B1n-derlemesi-seri-3-tamamland%C4%B1-seri-4-24-may%C4%B1s%E2%80%99ta-sizlerle/", + "Date": { "$date": { "$numberLong": "1684957500000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "646fbefdeaa2199bc406b117" }, + "Messages": [ + { "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.11 + Revisión 33.0.12" } + ], + "Prop": "https://forums.warframe.com/topic/1354406-la-paradoja-de-duviri-revisi%C3%B3n-33011-revisi%C3%B3n-33012/", + "Date": { "$date": { "$numberLong": "1685044920000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6471f7ad49b3f286420543a4" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Résumé Devstream #171 : version FR" }], + "Prop": "https://forums.warframe.com/topic/1354587-r%C3%A9sum%C3%A9-devstream-171-version-fr/", + "Date": { "$date": { "$numberLong": "1685190540000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.3fa3bb18a3cd29a7ee623ec88bf72429.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6475055203028af6f5076925" }, + "Messages": [{ "LanguageCode": "en", "Message": "The Duviri Paradox: Hotfix 33.0.14" }], + "Prop": "https://www.warframe.com/updates/pc/33-0-14", + "Date": { "$date": { "$numberLong": "1685387100000" } }, + "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "64751514ef6fa74efd0b624e" }, + "Messages": [ + { "LanguageCode": "en", "Message": " PSA: Hotfix pause until The 7 Crimes of Kullervo Update" } + ], + "Prop": "https://forums.warframe.com/topic/1355007-psa-hotfixing-paused-until-the-7-crimes-of-kullervo/", + "Date": { "$date": { "$numberLong": "1685394600000" } }, + "Priority": true, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "647516f0fefde43d790ad0ed" }, + "Messages": [{ "LanguageCode": "en", "Message": "Coming Soon: Prime Time #352!" }], + "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", + "Date": { "$date": { "$numberLong": "1685395080000" } }, + "EventStartDate": { "$date": { "$numberLong": "1685656800000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685664000000" } }, + "EventLiveUrl": "https://www.twitch.tv/warframe/", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6475175603028af6f50769e3" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Twitch Drops: Community Stream Schedule May 29 to June 2!" } + ], + "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", + "Date": { "$date": { "$numberLong": "1685395200000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6475ddac402fe7be5c0f0efb" }, + "Messages": [{ "LanguageCode": "ja", "Message": "5月29日~6月2日の配信スケジュール" }], + "Prop": "https://bit.ly/43eU1f4", + "Date": { "$date": { "$numberLong": "1685446020000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "647624dc351728a45207bd67" }, + "Messages": [{ "LanguageCode": "es", "Message": "Twitch Drops: Programa de streams de la comunidad" }], + "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", + "Date": { "$date": { "$numberLong": "1685464200000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6476250bedcc8797810215de" }, + "Messages": [ + { "LanguageCode": "es", "Message": "¡Emisión Tenno con sorteo de Hildryn Prime Access + Twitch Drop!" } + ], + "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", + "Date": { "$date": { "$numberLong": "1685464260000" } }, + "EventStartDate": { "$date": { "$numberLong": "1685559600000" } }, + "EventEndDate": { "$date": { "$numberLong": "1685563200000" } }, + "EventLiveUrl": "https://www.twitch.tv/warframeinternational", + "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/1c2a55a07ef0fcf121b6b4633b92c060.jpg", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "647632c88f764656130e1824" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Streams : 29 mai - 2 juin" }], + "Prop": "https://forums.warframe.com/topic/1355110-streams-communautaires-29-mai-2-juin/", + "Date": { "$date": { "$numberLong": "1685467800000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "64764bd4931e7ae47f0d1a60" }, + "Messages": [ + { "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.13 + Revisión 33.0.14" } + ], + "Prop": "https://forums.warframe.com/topic/1355129-la-paradoja-de-duviri-revisi%C3%B3n-33013-revisi%C3%B3n-33014/", + "Date": { "$date": { "$numberLong": "1685474220000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true } - ], - "Date": { "$date": { "$numberLong": "1682525580000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64495365aca4975f2408f5c3" }, - "Messages": [{ "LanguageCode": "es", "Message": "Actualización 33: La Paradoja de Duviri" }], - "Prop": "https://forums.warframe.com/topic/1346059-actualizaci%C3%B3n-33-la-paradoja-de-duviri/", - "Date": { "$date": { "$numberLong": "1682527020000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "64517606c429f4f85d0f069d" }, - "Messages": [{ "LanguageCode": "ja", "Message": "Nora's Mix Vol. 3 終了日 + Nightwaveの今後について" }], - "Prop": "https://bit.ly/3AJu8HT", - "Date": { "$date": { "$numberLong": "1683060000000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2021_01/Wiki-background.thumb.jpg.f568775e1b4eab008c7c6d3802c942aa.jpg", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6453f7bf20df842a150d8316" }, - "Messages": [{ "LanguageCode": "en", "Message": "Have your Dojo featured on the Star Chart!" }], - "Prop": "https://forums.warframe.com/topic/1349495-star-chart-dojo-showcase-spring-2023/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Spring-dojo-contest", - "Date": { "$date": { "$numberLong": "1683224460000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6453fc4380fb13ff9a072376" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Now Available: Nova Prime and Trinity Prime" }, - { "LanguageCode": "fr", "Message": "Maintenant disponible : Nova Prime et Trinity Prime" }, - { "LanguageCode": "it", "Message": "Ora Disponibili: Nova Prime e Trinity Prime" }, - { "LanguageCode": "de", "Message": "Jetzt erhältlich: Nova Prime und Trinity Prime" }, - { "LanguageCode": "es", "Message": "Disponible ya: Nova Prime y Trinity Prime" }, - { "LanguageCode": "pt", "Message": "Já Disponível: Nova Prime e Trinity Prime" }, - { "LanguageCode": "ru", "Message": "Уже доступны: Нова Прайм и Тринити Прайм" }, - { "LanguageCode": "pl", "Message": "Już dostępne: Nova Prime i Trinity Prime" }, - { "LanguageCode": "uk", "Message": "Уже доступні: Нова-прайм і Трініті-прайм\t" }, - { "LanguageCode": "tr", "Message": "Şimdi Sizlerle: Nova Prime ve Trinity Prime" }, - { "LanguageCode": "ja", "Message": "Nova PrimeとTrinity Primeをゲットしよう" }, - { "LanguageCode": "zh", "Message": "现已登场:Nova Prime 和 Trinity Prime" }, - { "LanguageCode": "ko", "Message": "지금 바로 구매 가능: 노바 프라임 및 트리니티 프라임" }, - { "LanguageCode": "tc", "Message": "現已登場:Nova Prime 以及 Trinity Prime" } - ], - "Prop": "https://www.warframe.com/prime-resurgence?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-PrimeResurgenceNovaTrinity-Launch", - "Date": { "$date": { "$numberLong": "1683222960000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685937600000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/thumbnails/3dde851b071ff5295e58f24d68b43760_800x450.png", - "Priority": false, - "MobileOnly": false, - "HideEndDateModifier": true - }, - { - "_id": { "$oid": "646646aad048b740ec04753c" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Refer a Friend Program Changes" }, - { "LanguageCode": "fr", "Message": "Modification du programme de parrainage" }, - { "LanguageCode": "it", "Message": "Cambiamenti al Programma Riferisci un Amico" }, - { "LanguageCode": "de", "Message": "Programmaktualisierung für 'Freunde rekrutieren'" }, - { "LanguageCode": "es", "Message": "Cambios en el programa \"Refiere a un amigo\"" }, - { "LanguageCode": "pt", "Message": "Mudanças no Programa de Indicação de Amigos" }, - { "LanguageCode": "pl", "Message": "Zmiany programu \"Zaproś Znajomego\"" }, - { "LanguageCode": "uk", "Message": "Зміни в програмі «Запросіть друга»" }, - { "LanguageCode": "tr", "Message": "Arkadaş Daveti Referans Programı Değişiklikleri" }, - { "LanguageCode": "ja", "Message": "お友達紹介プログラム更新" }, - { "LanguageCode": "zh", "Message": "「邀请好友计划」更新" }, - { "LanguageCode": "ko", "Message": "친구 초대 프로그램의 변화" } - ], - "Prop": "https://www.warframe.com/referral", - "Date": { "$date": { "$numberLong": "1684421760000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684393200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/fe49a80950256bf393fa2aa0b9303a_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6466726e06ca85f0e202e343" }, - "Messages": [ - { "LanguageCode": "en", "Message": "TennoCon 2023 Digital Pack Now Available" }, - { "LanguageCode": "fr", "Message": "Le Pack Digital TennoCon 2023 est maintenant disponible" }, - { "LanguageCode": "it", "Message": "Il Pacchetto Digitale TennoCon 2023 è Ora Disponibile" }, - { "LanguageCode": "de", "Message": "TennoCon 2023 Digital Paket ist jetzt verfügbar" }, - { "LanguageCode": "es", "Message": "El Paquete Digital de TennoCon 2023 ya está disponible" }, - { "LanguageCode": "pt", "Message": "O Pacote Digital da TennoCon 2023 já está disponível" }, - { "LanguageCode": "ru", "Message": "Цифровой набор TennoCon-2023 уже доступен" }, - { "LanguageCode": "pl", "Message": "Pakiet Cyfrowy TennoCon 2023 już dostępny" }, - { "LanguageCode": "uk", "Message": "Цифровий набір «Теннокон 2023» уже доступний" }, - { "LanguageCode": "tr", "Message": "TennoCon 2023 Dijital Paketi Şimdi Sizlerle" }, - { "LanguageCode": "ja", "Message": "TennoCon 2023 デジタルパック発売開始" }, - { "LanguageCode": "zh", "Message": "TennoCon 2023 虚拟礼包现已登场" }, - { "LanguageCode": "ko", "Message": "텐노콘 2023 디지털 팩을 지금 만나보세요" }, - { "LanguageCode": "tc", "Message": "TennoCon 2023 數位組合包現已登場" } - ], - "Prop": "", - "Links": [ - { "LanguageCode": "en", "Link": "https://www.warframe.com/tennocon" }, - { "LanguageCode": "fr", "Link": "https://www.warframe.com/fr/tennocon" }, - { "LanguageCode": "it", "Link": "https://www.warframe.com/it/tennocon" }, - { "LanguageCode": "de", "Link": "https://www.warframe.com/de/tennocon" }, - { "LanguageCode": "es", "Link": "https://www.warframe.com/es/tennocon" }, - { "LanguageCode": "pt", "Link": "https://www.warframe.com/pt-br/tennocon" }, - { "LanguageCode": "ru", "Link": "https://www.warframe.com/ru/tennocon" }, - { "LanguageCode": "pl", "Link": "https://www.warframe.com/pl/tennocon" }, - { "LanguageCode": "uk", "Link": "https://www.warframe.com/uk/tennocon" }, - { "LanguageCode": "tr", "Link": "https://www.warframe.com/tr/tennocon" }, - { "LanguageCode": "ja", "Link": "https://www.warframe.com/ja/tennocon" }, - { "LanguageCode": "zh", "Link": "https://www.warframe.com/zh-hans/tennocon" }, - { "LanguageCode": "ko", "Link": "https://www.warframe.com/ko/tennocon" }, - { "LanguageCode": "tc", "Link": "https://www.warframe.com/zh-hant/tennocon" } - ], - "Date": { "$date": { "$numberLong": "1684432080000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684404000000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/images/tennocon/2023/digital-pack-banner-2x.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64668cd31137f75bf70d0e09" }, - "Messages": [ - { "LanguageCode": "en", "Message": "May in Warframe Roundup" }, - { "LanguageCode": "fr", "Message": "Tour d'horizon du mois de mai dans Warframe" }, - { "LanguageCode": "it", "Message": "Maggio in Warframe: Riepilogo" }, - { "LanguageCode": "de", "Message": "Mai-Zusammenfassung für Warframe" }, - { "LanguageCode": "es", "Message": "Mayo en Warframe: Resumen" }, - { "LanguageCode": "pt", "Message": "Resumo do mês de maio no Warframe" }, - { "LanguageCode": "pl", "Message": "Maj w Warframe" }, - { "LanguageCode": "uk", "Message": "Травнева добірка у Warframe" }, - { "LanguageCode": "tr", "Message": "Mayıs Ayı Warframe Özeti" }, - { "LanguageCode": "ja", "Message": "5月の『Warframe』振り返り" }, - { "LanguageCode": "zh", "Message": "《Warframe》的五月摘要" }, - { "LanguageCode": "ko", "Message": "5월의 워프레임 요약" }, - { "LanguageCode": "tc", "Message": "Warframe 5 月份總結" } - ], - "Prop": "https://www.warframe.com/news/may-in-warframe-roundup?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-MayWarframeRoundup", - "Date": { "$date": { "$numberLong": "1684440240000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684440000000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/8f08145f560b43a4cafadc7bb9c5748_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64677ce96fba686c8a06bd24" }, - "Messages": [ + ], + "Goals": [ { - "LanguageCode": "en", - "Message": "May 25 Charity Stream: Warframe x Covenant House! Click To Learn More. 6 p.m. EST " + "_id": { "$oid": "5c7cb0d00000000000000000" }, + "Activation": { "$date": { "$numberLong": "1684512000000" } }, + "Expiry": { "$date": { "$numberLong": "1685721600000" } }, + "Node": "SolNode129", + "ScoreVar": "FissuresClosed", + "ScoreLocTag": "/Lotus/Language/G1Quests/HeatFissuresEventScore", + "Count": 24, + "HealthPct": 0.24, + "Regions": [1], + "Desc": "/Lotus/Language/G1Quests/HeatFissuresEventName", + "ToolTip": "/Lotus/Language/G1Quests/HeatFissuresEventDesc", + "OptionalInMission": true, + "Tag": "HeatFissure", + "UpgradeIds": [{ "$oid": "64667809d9c6963e382d9546" }, { "$oid": "64667809d9c6963e382d9547" }], + "Personal": true, + "Community": true, + "Goal": 100, + "Reward": { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Weapons/Corpus/LongGuns/CrpBFG/Vandal/VandalCrpBFG"], + "countedItems": [] + }, + "InterimGoals": [5, 25, 50, 75], + "InterimRewards": [ + { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Upgrades/Skins/Clan/OrbBadgeItem"], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Shotgun/ShotgunMedicMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Rifle/SerratedRushMod" + ], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": [ + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Pistol/MultishotDodgeMod", + "/Lotus/StoreItems/Upgrades/Mods/DualSource/Melee/CritDamageChargeSpeedMod" + ], + "countedItems": [] + }, + { + "credits": 0, + "xp": 0, + "items": ["/Lotus/StoreItems/Upgrades/Skins/Sigils/OrbSigil"], + "countedItems": [] + } + ] + }, + { + "_id": { "$oid": "64663a0c0483e3f5b70ff0b2" }, + "Activation": { "$date": { "$numberLong": "1684508400000" } }, + "Expiry": { "$date": { "$numberLong": "1685717940000" } }, + "Count": 0, + "Goal": 1, + "Success": 0, + "Personal": true, + "ClampNodeScores": true, + "Node": "EventNode27", + "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2018D", + "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", + "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", + "Tag": "Anniversary2018TacAlert", + "Reward": { + "items": [ + "/Lotus/StoreItems/Upgrades/Skins/Scarves/DexScarf", + "/Lotus/StoreItems/Types/Game/CatbrowPet/CatbrowGeneticSignature" + ] + } + }, + { + "_id": { "$oid": "64663a3c866d9fe65c012364" }, + "Activation": { "$date": { "$numberLong": "1684508400000" } }, + "Expiry": { "$date": { "$numberLong": "1685717940000" } }, + "Count": 0, + "Goal": 1, + "Success": 0, + "Personal": true, + "ClampNodeScores": true, + "Node": "EventNode24", + "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2023k", + "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", + "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", + "Tag": "Anniversary2018TacAlert", + "Reward": { + "items": [ + "/Lotus/StoreItems/Upgrades/Skins/Wisp/DexWispSkin", + "/Lotus/StoreItems/Types/StoreItems/SlotItems/TwoSentinelSlotItem" + ] + } } - ], - "Prop": "https://wrfr.me/chmm23", - "Date": { "$date": { "$numberLong": "1684503360000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6467baa3db8bd174db0b163b" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Pre-order 10 Year Anniversary Merch!" }, + ], + "Alerts": [], + "Sorties": [ { - "LanguageCode": "fr", - "Message": "Précommandez la Collection de produits dérivés du 10e Anniversaire !" - }, - { "LanguageCode": "it", "Message": "Preordina il Merch per il 10° Anniversario!" }, - { "LanguageCode": "de", "Message": "Bestellt die Merch-Kollektion zum 10. Jubiläum vor!" }, - { "LanguageCode": "es", "Message": "¡Reserva los productos del 10° aniversario!" }, - { "LanguageCode": "pt", "Message": "Faça a pré-encomenda de Produtos do Aniversário de 10 anos!" }, - { "LanguageCode": "pl", "Message": "Zamów w przedsprzedaży gadżety na 10-lecie!" }, - { "LanguageCode": "tr", "Message": "10. Yıl Dönümü Ürünleri için ön siparişini ver!" }, - { "LanguageCode": "ja", "Message": "Warframe 10周年記念グッズを予約購入!" }, - { "LanguageCode": "zh", "Message": "预购十周年纪念周边商品!" }, - { "LanguageCode": "ko", "Message": "10주년 기념 굿즈를 예약 주문하세요!" }, - { "LanguageCode": "tc", "Message": "預購 10 週年紀念周邊商品!" } - ], - "Prop": "https://store.warframe.com/products/10-year-anniversary-collection?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Merch-10year-Collection", - "Date": { "$date": { "$numberLong": "1684519320000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684519200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/81f0ccac0ee2cdfb628a64f9f72d2166_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "646e55122b97d301df08b65a" }, - "Messages": [{ "LanguageCode": "ja", "Message": "Devstream 第171回のお知らせ" }], - "Prop": "https://bit.ly/426QXR5", - "Date": { "$date": { "$numberLong": "1684952280000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/4e0d4b80256c0b05a5a9643664799beb.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "646e5cc6af17a161c20d79a4" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Nora’s Mix Vol. 4 has begun" }, - { "LanguageCode": "fr", "Message": "Le Mix de Nora Vol. 4 est disponible" }, - { "LanguageCode": "it", "Message": "Mix di Nora Vol. 4 è iniziato" }, - { "LanguageCode": "de", "Message": "Noras Mix - Vol. 4 hat begonnen" }, - { "LanguageCode": "es", "Message": "Comenzó el Mix de Nora Vol. 4" }, - { "LanguageCode": "pt", "Message": "O Mix da Nora Vol. 4 começou" }, - { "LanguageCode": "ru", "Message": "Микс Норы: Диск 4 уже в начался" }, - { "LanguageCode": "pl", "Message": "Składanka Nory cz. 4 już dostępna" }, - { "LanguageCode": "uk", "Message": "Вибірка Нори 4 уже в грі" }, - { "LanguageCode": "tr", "Message": "Nora'nın Derlemesi - 4. Seri şimdi sizlerle" }, - { "LanguageCode": "ja", "Message": "Nora's Mix Vol.4 開催!" }, - { "LanguageCode": "zh", "Message": "《Nora 的混选 Vol. 4》现已开始!" }, - { "LanguageCode": "ko", "Message": "노라의 믹스 Vol. 4가 시작되었습니다" }, - { "LanguageCode": "tc", "Message": "Nora 合輯 VI 已登場" } - ], - "Prop": "https://www.warframe.com/news/noras-mix-vol-4?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-NightwaveVol4Launch", - "Date": { "$date": { "$numberLong": "1684953960000" } }, - "EventStartDate": { "$date": { "$numberLong": "1684951200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/42721390b8812fe65296ce5eee7d862_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "646e6a4cf16914573401c77b" }, - "Messages": [{ "LanguageCode": "tr", "Message": "Nora’nın Derlemesi - 3. Seri Tamamlandı + 4. Seri Sizlerle!" }], - "Prop": "https://forums.warframe.com/topic/1354223-nora%E2%80%99n%C4%B1n-derlemesi-seri-3-tamamland%C4%B1-seri-4-24-may%C4%B1s%E2%80%99ta-sizlerle/", - "Date": { "$date": { "$numberLong": "1684957500000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "646fbefdeaa2199bc406b117" }, - "Messages": [{ "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.11 + Revisión 33.0.12" }], - "Prop": "https://forums.warframe.com/topic/1354406-la-paradoja-de-duviri-revisi%C3%B3n-33011-revisi%C3%B3n-33012/", - "Date": { "$date": { "$numberLong": "1685044920000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6471f7ad49b3f286420543a4" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Résumé Devstream #171 : version FR" }], - "Prop": "https://forums.warframe.com/topic/1354587-r%C3%A9sum%C3%A9-devstream-171-version-fr/", - "Date": { "$date": { "$numberLong": "1685190540000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.3fa3bb18a3cd29a7ee623ec88bf72429.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6475055203028af6f5076925" }, - "Messages": [{ "LanguageCode": "en", "Message": "The Duviri Paradox: Hotfix 33.0.14" }], - "Prop": "https://www.warframe.com/updates/pc/33-0-14", - "Date": { "$date": { "$numberLong": "1685387100000" } }, - "Priority": true, - "MobileOnly": false - }, - { - "_id": { "$oid": "64751514ef6fa74efd0b624e" }, - "Messages": [{ "LanguageCode": "en", "Message": " PSA: Hotfix pause until The 7 Crimes of Kullervo Update" }], - "Prop": "https://forums.warframe.com/topic/1355007-psa-hotfixing-paused-until-the-7-crimes-of-kullervo/", - "Date": { "$date": { "$numberLong": "1685394600000" } }, - "Priority": true, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "647516f0fefde43d790ad0ed" }, - "Messages": [{ "LanguageCode": "en", "Message": "Coming Soon: Prime Time #352!" }], - "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", - "Date": { "$date": { "$numberLong": "1685395080000" } }, - "EventStartDate": { "$date": { "$numberLong": "1685656800000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685664000000" } }, - "EventLiveUrl": "https://www.twitch.tv/warframe/", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6475175603028af6f50769e3" }, - "Messages": [{ "LanguageCode": "en", "Message": "Twitch Drops: Community Stream Schedule May 29 to June 2!" }], - "Prop": "https://forums.warframe.com/topic/1355012-community-stream-schedule-may-29-june-2/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-05-Community-Streams-29", - "Date": { "$date": { "$numberLong": "1685395200000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6475ddac402fe7be5c0f0efb" }, - "Messages": [{ "LanguageCode": "ja", "Message": "5月29日~6月2日の配信スケジュール" }], - "Prop": "https://bit.ly/43eU1f4", - "Date": { "$date": { "$numberLong": "1685446020000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "647624dc351728a45207bd67" }, - "Messages": [{ "LanguageCode": "es", "Message": "Twitch Drops: Programa de streams de la comunidad" }], - "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", - "Date": { "$date": { "$numberLong": "1685464200000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "6476250bedcc8797810215de" }, - "Messages": [ - { "LanguageCode": "es", "Message": "¡Emisión Tenno con sorteo de Hildryn Prime Access + Twitch Drop!" } - ], - "Prop": "https://forums.warframe.com/topic/1355104-programa-de-streams-y-twitch-drops-29-de-mayo-2-de-junio/", - "Date": { "$date": { "$numberLong": "1685464260000" } }, - "EventStartDate": { "$date": { "$numberLong": "1685559600000" } }, - "EventEndDate": { "$date": { "$numberLong": "1685563200000" } }, - "EventLiveUrl": "https://www.twitch.tv/warframeinternational", - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/uploads/1c2a55a07ef0fcf121b6b4633b92c060.jpg", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "647632c88f764656130e1824" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Streams : 29 mai - 2 juin" }], - "Prop": "https://forums.warframe.com/topic/1355110-streams-communautaires-29-mai-2-juin/", - "Date": { "$date": { "$numberLong": "1685467800000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_05/image.png.eb417555a2adffbc4be60fb4548694f0.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "64764bd4931e7ae47f0d1a60" }, - "Messages": [{ "LanguageCode": "es", "Message": "La Paradoja de Duviri: Revisión 33.0.13 + Revisión 33.0.14" }], - "Prop": "https://forums.warframe.com/topic/1355129-la-paradoja-de-duviri-revisi%C3%B3n-33013-revisi%C3%B3n-33014/", - "Date": { "$date": { "$numberLong": "1685474220000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - } - ], - "Goals": [ - { - "_id": { "$oid": "5c7cb0d00000000000000000" }, - "Activation": { "$date": { "$numberLong": "1684512000000" } }, - "Expiry": { "$date": { "$numberLong": "1685721600000" } }, - "Node": "SolNode129", - "ScoreVar": "FissuresClosed", - "ScoreLocTag": "/Lotus/Language/G1Quests/HeatFissuresEventScore", - "Count": 24, - "HealthPct": 0.24, - "Regions": [1], - "Desc": "/Lotus/Language/G1Quests/HeatFissuresEventName", - "ToolTip": "/Lotus/Language/G1Quests/HeatFissuresEventDesc", - "OptionalInMission": true, - "Tag": "HeatFissure", - "UpgradeIds": [{ "$oid": "64667809d9c6963e382d9546" }, { "$oid": "64667809d9c6963e382d9547" }], - "Personal": true, - "Community": true, - "Goal": 100, - "Reward": { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Weapons/Corpus/LongGuns/CrpBFG/Vandal/VandalCrpBFG"], - "countedItems": [] - }, - "InterimGoals": [5, 25, 50, 75], - "InterimRewards": [ - { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Upgrades/Skins/Clan/OrbBadgeItem"], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": [ - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Shotgun/ShotgunMedicMod", - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Rifle/SerratedRushMod" - ], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": [ - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Pistol/MultishotDodgeMod", - "/Lotus/StoreItems/Upgrades/Mods/DualSource/Melee/CritDamageChargeSpeedMod" - ], - "countedItems": [] - }, - { - "credits": 0, - "xp": 0, - "items": ["/Lotus/StoreItems/Upgrades/Skins/Sigils/OrbSigil"], - "countedItems": [] + "_id": { "$oid": "64776b7eba82e08c76d6cb9b" }, + "Activation": { "$date": { "$numberLong": "1685548800000" } }, + "Expiry": { "$date": { "$numberLong": "1685635200000" } }, + "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", + "Seed": 28971, + "Boss": "SORTIE_BOSS_ALAD", + "ExtraDrops": [], + "Variants": [ + { + "missionType": "MT_MOBILE_DEFENSE", + "modifierType": "SORTIE_MODIFIER_HAZARD_RADIATION", + "node": "SolNode53", + "tileset": "CorpusGasCityTileset" + }, + { + "missionType": "MT_RESCUE", + "modifierType": "SORTIE_MODIFIER_IMPACT", + "node": "SolNode107", + "tileset": "CorpusOutpostTileset" + }, + { + "missionType": "MT_EXTERMINATION", + "modifierType": "SORTIE_MODIFIER_LOW_ENERGY", + "node": "SolNode304", + "tileset": "OrokinMoonTilesetCorpus" + } + ], + "Twitter": true + } + ], + "LiteSorties": [ + { + "_id": { "$oid": "6473e77dfff198b17e47812d" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", + "Seed": 62757, + "Boss": "SORTIE_BOSS_AMAR", + "Missions": [ + { "missionType": "MT_MOBILE_DEFENSE", "node": "SolNode30" }, + { "missionType": "MT_EXCAVATE", "node": "SolNode11" }, + { "missionType": "MT_ASSASSINATION", "node": "SolNode99" } + ] + } + ], + "SyndicateMissions": [ + { + "_id": { "$oid": "64775ff00000000000000002" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "EntratiSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [5, 5, 5] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierCTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 15, + "maxEnemyLevel": 25, + "xpAmounts": [11, 11, 11] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierBTableARewards", + "masteryReq": 5, + "minEnemyLevel": 25, + "maxEnemyLevel": 30, + "endless": true, + "bonusXpMultiplier": 0.15000001, + "xpAmounts": [14, 14, 14] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierDTableARewards", + "masteryReq": 2, + "minEnemyLevel": 30, + "maxEnemyLevel": 40, + "xpAmounts": [19, 19, 19, 29] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", + "masteryReq": 3, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [20, 20, 20, 20, 39] + }, + { + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty", + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [25, 25, 25, 25, 50] + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierATableCRewards", + "masteryReq": 5, + "minEnemyLevel": 30, + "maxEnemyLevel": 40, + "xpAmounts": [2, 2, 2, 4], + "locationTag": "ChamberB", + "isVault": true + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierBTableCRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 50, + "xpAmounts": [4, 4, 4, 5], + "locationTag": "ChamberA", + "isVault": true + }, + { + "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierCTableCRewards", + "masteryReq": 5, + "minEnemyLevel": 50, + "maxEnemyLevel": 60, + "xpAmounts": [5, 5, 5, 7], + "locationTag": "ChamberC", + "isVault": true + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000022" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "SolarisSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobRecovery", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [350, 350, 350] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobExterminate", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierBTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 10, + "maxEnemyLevel": 30, + "xpAmounts": [680, 680, 680] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierCTableBRewards", + "masteryReq": 2, + "minEnemyLevel": 20, + "maxEnemyLevel": 40, + "xpAmounts": [610, 610, 610, 890] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobRecovery", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierDTableBRewards", + "masteryReq": 3, + "minEnemyLevel": 30, + "maxEnemyLevel": 50, + "xpAmounts": [580, 580, 580, 580, 1140] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [680, 680, 680, 680, 1340] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobExcavation", + "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [840, 840, 840, 840, 1660] + }, + { + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobExterminate", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", + "masteryReq": 0, + "minEnemyLevel": 50, + "maxEnemyLevel": 70, + "xpAmounts": [760, 760, 760, 760, 1500] + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000007" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "CetusSyndicate", + "Seed": 20831, + "Nodes": [], + "Jobs": [ + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATableBRewards", + "masteryReq": 0, + "minEnemyLevel": 5, + "maxEnemyLevel": 15, + "xpAmounts": [420, 420, 420] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTableBRewards", + "masteryReq": 1, + "minEnemyLevel": 10, + "maxEnemyLevel": 30, + "xpAmounts": [690, 690, 690] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTableBRewards", + "masteryReq": 2, + "minEnemyLevel": 20, + "maxEnemyLevel": 40, + "xpAmounts": [590, 590, 590, 870] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountySab", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTableBRewards", + "masteryReq": 3, + "minEnemyLevel": 30, + "maxEnemyLevel": 50, + "xpAmounts": [550, 550, 550, 550, 1080] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", + "masteryReq": 5, + "minEnemyLevel": 40, + "maxEnemyLevel": 60, + "xpAmounts": [690, 690, 690, 690, 1350] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", + "masteryReq": 10, + "minEnemyLevel": 100, + "maxEnemyLevel": 100, + "xpAmounts": [840, 840, 840, 840, 1660] + }, + { + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt", + "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", + "masteryReq": 0, + "minEnemyLevel": 50, + "maxEnemyLevel": 70, + "xpAmounts": [830, 830, 830, 830, 1640] + } + ] + }, + { + "_id": { "$oid": "64775ff00000000000000026" }, + "Activation": { "$date": { "$numberLong": "1685544944674" } }, + "Expiry": { "$date": { "$numberLong": "1685553943548" } }, + "Tag": "ZarimanSyndicate", + "Seed": 20831, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4de" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "ArbitersSyndicate", + "Seed": 28971, + "Nodes": ["SolNode36", "SolNode123", "SolNode225", "SolNode709", "SolNode137", "SolNode195", "SolNode81"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4df" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "CephalonSudaSyndicate", + "Seed": 25969, + "Nodes": ["SolNode79", "SolNode41", "SettlementNode1", "SolNode132", "SolNode166", "SolNode72", "SolNode23"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e0" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "NecraloidSyndicate", + "Seed": 81067, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e1" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "EventSyndicate", + "Seed": 28897, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e2" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "KahlSyndicate", + "Seed": 92441, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e4" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "QuillsSyndicate", + "Seed": 61214, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e3" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "NewLokaSyndicate", + "Seed": 21393, + "Nodes": ["SolNode68", "SolNode2", "SolNode82", "SolNode217", "SolNode409", "SolNode139", "SolNode75"] + }, + { + "_id": { "$oid": "64776ec5e72990bfd5fea4e5" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "PerrinSyndicate", + "Seed": 72469, + "Nodes": ["SolNode39", "SolNode12", "SolNode146", "SolNode101", "SolNode121", "SolNode408", "SolNode96"] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e6" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegion2Syndicate", + "Seed": 13526, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ea" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission4Syndicate", + "Seed": 20328, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4eb" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission5Syndicate", + "Seed": 87241, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ec" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission6Syndicate", + "Seed": 54438, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e7" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegion3Syndicate", + "Seed": 20666, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e9" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission3Syndicate", + "Seed": 7709, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4e8" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission2Syndicate", + "Seed": 33027, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ee" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission8Syndicate", + "Seed": 21780, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ef" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermissionSyndicate", + "Seed": 95381, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4ed" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionIntermission7Syndicate", + "Seed": 53091, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f0" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RadioLegionSyndicate", + "Seed": 60623, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f1" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "RedVeilSyndicate", + "Seed": 78309, + "Nodes": [ + "SolNode15", + "SolNode106", + "SettlementNode3", + "SolNode224", + "SolNode401", + "SolNode76", + "SolNode62" + ] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f3" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "VoxSyndicate", + "Seed": 52842, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f2" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "VentKidsSyndicate", + "Seed": 49149, + "Nodes": [] + }, + { + "_id": { "$oid": "64776ec6e72990bfd5fea4f4" }, + "Activation": { "$date": { "$numberLong": "1685548741732" } }, + "Expiry": { "$date": { "$numberLong": "1685635140000" } }, + "Tag": "SteelMeridianSyndicate", + "Seed": 9289, + "Nodes": ["SolNode130", "SolNode61", "SolNode30", "SolNode10", "SolNode102", "SolNode64", "SolNode50"] + } + ], + "ActiveMissions": [ + { + "_id": { "$oid": "64775c05cab187e046c3d277" }, + "Region": 12, + "Seed": 94704, + "Activation": { "$date": { "$numberLong": "1685543941731" } }, + "Expiry": { "$date": { "$numberLong": "1685550975969" } }, + "Node": "SolNode184", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT4", + "Hard": true + }, + { + "_id": { "$oid": "647761698afaf76e50461fc8" }, + "Region": 19, + "Seed": 58268, + "Activation": { "$date": { "$numberLong": "1685545321337" } }, + "Expiry": { "$date": { "$numberLong": "1685551434577" } }, + "Node": "SolNode746", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT5", + "Hard": true + }, + { + "_id": { "$oid": "6477630df698f676b0b32282" }, + "Region": 15, + "Seed": 70123, + "Activation": { "$date": { "$numberLong": "1685545741655" } }, + "Expiry": { "$date": { "$numberLong": "1685550886528" } }, + "Node": "SolNode412", + "MissionType": "MT_TERRITORY", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "6477630df698f676b0b32283" }, + "Region": 9, + "Seed": 15094, + "Activation": { "$date": { "$numberLong": "1685545741655" } }, + "Expiry": { "$date": { "$numberLong": "1685550459337" } }, + "Node": "SolNode56", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "647764ed12544a97c96618a5" }, + "Region": 15, + "Seed": 66090, + "Activation": { "$date": { "$numberLong": "1685546221415" } }, + "Expiry": { "$date": { "$numberLong": "1685553063549" } }, + "Node": "SolNode405", + "MissionType": "MT_SURVIVAL", + "Modifier": "VoidT3", + "Hard": true + }, + { + "_id": { "$oid": "647764ed12544a97c96618a6" }, + "Region": 13, + "Seed": 19703, + "Activation": { "$date": { "$numberLong": "1685546221415" } }, + "Expiry": { "$date": { "$numberLong": "1685550448683" } }, + "Node": "SolNode216", + "MissionType": "MT_EXCAVATE", + "Modifier": "VoidT3", + "Hard": true + }, + { + "_id": { "$oid": "64776565dc85a669dae19b38" }, + "Region": 3, + "Seed": 90150, + "Activation": { "$date": { "$numberLong": "1685546341763" } }, + "Expiry": { "$date": { "$numberLong": "1685552506487" } }, + "Node": "SolNode89", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "64776565dc85a669dae19b39" }, + "Region": 2, + "Seed": 11253, + "Activation": { "$date": { "$numberLong": "1685546341763" } }, + "Expiry": { "$date": { "$numberLong": "1685550810452" } }, + "Node": "SolNode128", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08dfe" }, + "Region": 5, + "Seed": 67983, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685553220288" } }, + "Node": "SolNode97", + "MissionType": "MT_INTEL", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08dff" }, + "Region": 10, + "Seed": 74682, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685551010303" } }, + "Node": "SolNode135", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776655b191713293c08e00" }, + "Region": 6, + "Seed": 15538, + "Activation": { "$date": { "$numberLong": "1685546581712" } }, + "Expiry": { "$date": { "$numberLong": "1685551799194" } }, + "Node": "SolNode18", + "MissionType": "MT_TERRITORY", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "64776ec5752b9bd0c871fa7c" }, + "Region": 4, + "Seed": 47626, + "Activation": { "$date": { "$numberLong": "1685548741727" } }, + "Expiry": { "$date": { "$numberLong": "1685553411719" } }, + "Node": "SolNode36", + "MissionType": "MT_RESCUE", + "Modifier": "VoidT1" + }, + { + "_id": { "$oid": "647770a68bb595254a64c26e" }, + "Region": 7, + "Seed": 86090, + "Activation": { "$date": { "$numberLong": "1685549222143" } }, + "Expiry": { "$date": { "$numberLong": "1685556263692" } }, + "Node": "SolNode122", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "647770a68bb595254a64c26f" }, + "Region": 13, + "Seed": 39703, + "Activation": { "$date": { "$numberLong": "1685549222143" } }, + "Expiry": { "$date": { "$numberLong": "1685553504151" } }, + "Node": "SolNode212", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "6477720ec9dd724c888eff5b" }, + "Region": 19, + "Seed": 2767, + "Activation": { "$date": { "$numberLong": "1685549582078" } }, + "Expiry": { "$date": { "$numberLong": "1685554300277" } }, + "Node": "SolNode744", + "MissionType": "MT_SURVIVAL", + "Modifier": "VoidT5" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7c" }, + "Region": 10, + "Seed": 84581, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685554027918" } }, + "Node": "SolNode149", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7d" }, + "Region": 16, + "Seed": 50951, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685553961019" } }, + "Node": "SettlementNode12", + "MissionType": "MT_RESCUE", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "647772fd22c01cbb6ccb9e7e" }, + "Region": 5, + "Seed": 37897, + "Activation": { "$date": { "$numberLong": "1685549821318" } }, + "Expiry": { "$date": { "$numberLong": "1685556218772" } }, + "Node": "SolNode73", + "MissionType": "MT_CAPTURE", + "Modifier": "VoidT2" + } + ], + "GlobalUpgrades": [], + "FlashSales": [ + { + "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", + "StartDate": { "$date": { "$numberLong": "1654560000000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", + "StartDate": { "$date": { "$numberLong": "1661173200000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", + "StartDate": { "$date": { "$numberLong": "1662422400000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 999, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", + "StartDate": { "$date": { "$numberLong": "1667347200000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": true, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": true, + "VoidEclipse": false, + "BannerIndex": 5, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0 + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 80, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 195, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/XakuLotusDeluxeSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 85, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 430, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/VorunaVoidshellSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 90, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 90, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/MesaVoltDeluxeSkinBundle", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 95, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 260, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/Items/MiscItems/OrokinCatalyst", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 105, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 20, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Powersuits/Werewolf/Werewolf", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 100, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 325, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/FormaPack", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 110, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 35, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Upgrades/Skins/Effects/NarmerEvolvingEphemeraA", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 115, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 80, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Upgrades/Skins/Saryn/SarynLunarNewYearSkin", + "StartDate": { "$date": { "$numberLong": "1675036800000" } }, + "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "Featured": false, + "Popular": true, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 120, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 165, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", + "StartDate": { "$date": { "$numberLong": "1678838400000" } }, + "EndDate": { "$date": { "$numberLong": "1693494000000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 1, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", + "StartDate": { "$date": { "$numberLong": "1678838400000" } }, + "EndDate": { "$date": { "$numberLong": "1693440000000" } }, + "Featured": false, + "Popular": false, + "ShowInMarket": true, + "HideFromMarket": false, + "ShowWithRecommended": true, + "SupporterPack": false, + "VoidEclipse": false, + "BannerIndex": 2, + "Discount": 0, + "RegularOverride": 0, + "PremiumOverride": 1, + "BogoBuy": 0, + "BogoGet": 0, + "UrlOverride": "" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": false, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1683828000000" } }, + "EndDate": { "$date": { "$numberLong": "1687110900000" } }, + "DefaultPremium": 1, + "DefaulRegular": 0, + "LocalizedItemName": "FREE WITH PRIME GAMING" + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": false, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1683828000000" } }, + "EndDate": { "$date": { "$numberLong": "1687110900000" } } + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": true, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1684432800000" } }, + "EndDate": { "$date": { "$numberLong": "1693504800000" } } + } + ], + "InGameMarket": { + "LandingPage": { + "Categories": [ + { + "CategoryName": "POPULAR", + "Name": "/Lotus/Language/Menu/StorePopular", + "Icon": "popular", + "Items": [ + "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", + "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", + "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", + "/Lotus/Types/StoreItems/Packages/WarframeBundles/WolfFrameBundle", + "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", + "/Lotus/Types/StoreItems/Packages/ProtovyreCosmeticsBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/EmberDeluxeIISkinBundle", + "/Lotus/Types/StoreItems/Packages/RailjackVoidrigBundle", + "/Lotus/StoreItems/Powersuits/Werewolf/Werewolf", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", + "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", + "/Lotus/Types/StoreItems/Packages/FormaPack", + "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst" + ] + }, + { + "CategoryName": "DUVIRI_PARADOX", + "Name": "/Lotus/Language/Store/Store_DuviriParadox", + "Icon": "duviriparadox", + "AddToMenu": true, + "Items": [ + "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/BaruukDeluxeSkinBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/WispDeluxeSkinBundle", + "/Lotus/Types/StoreItems/Packages/VoidAdornmentIVBundle", + "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", + "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitArabicBundle", + "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", + "/Lotus/StoreItems/Upgrades/Skins/Duviri/DuviriSwordTowerShieldSkin", + "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitOutfit1ABundle", + "/Lotus/StoreItems/Weapons/Tenno/Bows/DaxDuviriAsymetricalBow/DaxDuviriAsymmetricalLongBowPlayerWeapon", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAetigo", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundlePsyacus", + "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAccessories", + "/Lotus/Types/StoreItems/Packages/Tattoo/TattooBundleDuviri", + "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" + ] + }, + { + "CategoryName": "TENNOGEN", + "Name": "/Lotus/Language/Menu/Store_Tennogen", + "Icon": "tennogen", + "Items": [ + "/Lotus/StoreItems/Upgrades/Skins/Runner/SWGaussNitrolystSkin", + "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWRetrorolystSyandana", + "/Lotus/StoreItems/Upgrades/Skins/BrokenFrame/SWXakuDeatheaSkin", + "/Lotus/StoreItems/Upgrades/Skins/Sentient/SWCalibanScionHelmet", + "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWAlocanaSyandana", + "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" + ] + }, + { + "CategoryName": "DUVIRI_CHOICES", + "Name": "/Lotus/Language/Store/Store_DuviriChoices", + "Icon": "duvirichoices", + "AddToMenu": true, + "Items": [] + }, + { + "CategoryName": "PREMIUM_BUNDLES", + "Name": "/Lotus/Language/Store/Store_PremiumBundles", + "Icon": "premiumbundles", + "Items": [ + "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", + "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", + "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", + "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", + "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", + "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB" + ] + }, + { + "CategoryName": "WISH_LIST", + "Name": "/Lotus/Language/Menu/Store_Wishlist", + "Icon": "wishlist", + "Items": [] + } + ] } - ] }, - { - "_id": { "$oid": "64663a0c0483e3f5b70ff0b2" }, - "Activation": { "$date": { "$numberLong": "1684508400000" } }, - "Expiry": { "$date": { "$numberLong": "1685717940000" } }, - "Count": 0, - "Goal": 1, - "Success": 0, - "Personal": true, - "ClampNodeScores": true, - "Node": "EventNode27", - "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2018D", - "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", - "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", - "Tag": "Anniversary2018TacAlert", - "Reward": { - "items": [ - "/Lotus/StoreItems/Upgrades/Skins/Scarves/DexScarf", - "/Lotus/StoreItems/Types/Game/CatbrowPet/CatbrowGeneticSignature" + "Invasions": [ + { + "_id": { "$oid": "6471a5c11c84d8991785ccc1" }, + "Faction": "FC_GRINEER", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode4", + "Count": -35500, + "Goal": 43000, + "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "646e00f1d08856975bb476fe" }, + "AttackerReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] + }, + "AttackerMissionInfo": { "seed": 573551, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 810078, "faction": "FC_GRINEER" }, + "Activation": { "$date": { "$numberLong": "1685170489276" } } + }, + { + "_id": { "$oid": "64729729ea6b289e0f440b37" }, + "Faction": "FC_CORPUS", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode177", + "Count": -40065, + "Goal": 40000, + "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", + "Completed": true, + "ChainID": { "$oid": "646fdcb95a219384bdbbd5f1" }, + "AttackerReward": { + "countedItems": [ + { "ItemType": "/Lotus/Types/Recipes/Weapons/SnipetronVandalBlueprint", "ItemCount": 1 } + ] + }, + "AttackerMissionInfo": { "seed": 181914, "faction": "FC_GRINEER" }, + "DefenderReward": { + "countedItems": [ + { "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/GrineerCombatKnifeHilt", "ItemCount": 1 } + ] + }, + "DefenderMissionInfo": { "seed": 197505, "faction": "FC_CORPUS" }, + "Activation": { "$date": { "$numberLong": "1685232025336" } } + }, + { + "_id": { "$oid": "64764c611959704d82e095f8" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode127", + "Count": -19265, + "Goal": 30000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", + "Completed": false, + "ChainID": { "$oid": "647612f5b75e9d02362f0c6c" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 995781, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 978707, "faction": "FC_INFESTATION", "missionReward": [] }, + "Activation": { "$date": { "$numberLong": "1685474401909" } } + }, + { + "_id": { "$oid": "6476ba8aca0663ae5a22b6bb" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode68", + "Count": -33274, + "Goal": 33000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": true, + "ChainID": { "$oid": "6476ba8aca0663ae5a22b6bb" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 512950, "faction": "FC_GRINEER" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 160228, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685508708793" } } + }, + { + "_id": { "$oid": "647730e50ecf58593d735cb0" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode107", + "Count": -17526, + "Goal": 36000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 640989, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 53442, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685537906204" } } + }, + { + "_id": { "$oid": "64775e991d3a1c5c0a181494" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode66", + "Count": -1218, + "Goal": 45000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 563164, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] + }, + "DefenderMissionInfo": { "seed": 203755, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685544601696" } } + }, + { + "_id": { "$oid": "64775e991d3a1c5c0a181495" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode22", + "Count": -1490, + "Goal": 36000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 933714, "faction": "FC_CORPUS" }, + "DefenderReward": { + "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] + }, + "DefenderMissionInfo": { "seed": 693132, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1685544601696" } } + } + ], + "HubEvents": [], + "NodeOverrides": [ + { "_id": { "$oid": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true }, + { "_id": { "$oid": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true }, + { "_id": { "$oid": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true }, + { "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9507716 }, + { + "_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, + "Node": "EarthHUB", + "Hide": false, + "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB", + "Activation": { "$date": { "$numberLong": "1535646600000" } } + }, + { + "_id": { "$oid": "5d24d1f674491d51f8d44473" }, + "Node": "MercuryHUB", + "Hide": true, + "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", + "Activation": { "$date": { "$numberLong": "1563030000000" } } + }, + { + "_id": { "$oid": "5c7cb0d00000000000000000" }, + "Activation": { "$date": { "$numberLong": "1684512000000" } }, + "Expiry": { "$date": { "$numberLong": "1685721600000" } }, + "Node": "SolNode129", + "Faction": "FC_CORPUS", + "CustomNpcEncounters": ["/Lotus/Types/Gameplay/Venus/Encounters/Heists/ExploiterHeistFissure"] + } + ], + "VoidTraders": [ + { + "_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, + "Activation": { "$date": { "$numberLong": "1685710800000" } }, + "Expiry": { "$date": { "$numberLong": "1685883600000" } }, + "Id": "5d1e07a0a38e4a4fdd7cefca", + "Character": "Baro'Ki Teel", + "Node": "SaturnHUB" + } + ], + "PrimeVaultTraders": [ + { + "_id": { "$oid": "631f8c4ac36af423770eaa97" }, + "Activation": { "$date": { "$numberLong": "1683223200000" } }, + "Completed": false, + "InitialStartDate": { "$date": { "$numberLong": "1662738144266" } }, + "Node": "TradeHUB1", + "Manifest": [ + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaTrinityPrimeDualPack", + "PrimePrice": 10 + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack", + "PrimePrice": 10, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack", + "PrimePrice": 6, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosPrimeSinglePack", + "PrimePrice": 6, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTrinityPrimeSinglePack", + "PrimePrice": 6 + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaPrimeSinglePack", + "PrimePrice": 6 + }, + { + "ItemType": "/Lotus/StoreItems/Powersuits/Paladin/PaladinPrime", + "PrimePrice": 3, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeOberonCape", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/SurakaPrimeDangle", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeSilvaAegis/PrimeSilvaAegis", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSybaris/PrimeSybarisRifle", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Powersuits/Necro/NekrosPrime", + "PrimePrice": 3, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/UruPrimeScarf", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAcanthusPrimeArmorSet", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeTigris/PrimeTigris", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/PrimeGalatine/PrimeGalatine", + "PrimePrice": 2, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { "ItemType": "/Lotus/StoreItems/Powersuits/Trinity/TrinityPrime", "PrimePrice": 3 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVKavasaPrimeKubrowArmor", + "PrimePrice": 2 + }, + { + "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/ScrollingPrimeMeleeDangle", + "PrimePrice": 1 + }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeDualKamas/PrimeDualKamas", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/AntiMatter/NovaPrime", "PrimePrice": 3 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEdoPrimeArmorSet", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrimeAccessSigilFive", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSoma/PrimeSomaRifle", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeVasto/PrimeVastoPistol", "PrimePrice": 2 }, + { + "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/OberonPrimeBobbleHead", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NekrosPrimeBobbleHead", + "PrimePrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NovaPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TrinityPrimeBobbleHead", "PrimePrice": 1 }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultBBronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultBBronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionOberonNekrosVaultABronze", + "RegularPrice": 1, + "StartDate": { "$date": { "$numberLong": "1684508400000" } }, + "EndDate": { "$date": { "$numberLong": "1685718000000" } } + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + }, + { + "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionNovaTrinityVaultABronze", + "RegularPrice": 1 + } + ], + "Expiry": { "$date": { "$numberLong": "1685718000000" } }, + "EvergreenManifest": [ + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/DualDagger/FangPrimeDagger", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeLex/PrimeLex", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/ShipScenes/PrimeLisetFiligreeScene", "PrimePrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAviaPrimeArmorSet", "PrimePrice": 2 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVayasPrimeAccessories", + "PrimePrice": 2 + }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/TwitchPrimeMeleeDangle", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeAviaSyandana", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeTwitchScarf", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/TwitchPrimeScarf", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/TwitchPrimeSigil", "PrimePrice": 1 }, + { + "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNecraloidBundle", + "RegularPrice": 10 + }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Liset/LisetSkinTwitchPrime", "RegularPrice": 10 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/InfMembraneCape", "RegularPrice": 10 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/PrimeBucks", "RegularPrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoidTraceBundle", "RegularPrice": 1 } + ], + "ScheduleInfo": [ + { + "Expiry": { "$date": { "$numberLong": "1667498400000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1669921200000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVValkyrSarynPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1672945200000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1668711600000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack" + }, + { + "Expiry": { "$date": { "$numberLong": "1675364400000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1671130800000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1677783600000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1674154800000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAtlasVaubanPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1680804000000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1676473200000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1683223200000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1679594400000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagRhinoPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1685718000000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1682013600000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1688666400000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1684433100000" } }, + "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack" + }, + { + "Expiry": { "$date": { "$numberLong": "1691085600000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1691085600000" } } + } + ] + } + ], + "VoidStorms": [ + { + "_id": { "$oid": "64775c416894d083a29b8872" }, + "Node": "CrewBattleNode511", + "Activation": { "$date": { "$numberLong": "1685546401825" } }, + "Expiry": { "$date": { "$numberLong": "1685551801825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "64775c416894d083a29b8871" }, + "Node": "CrewBattleNode509", + "Activation": { "$date": { "$numberLong": "1685546401821" } }, + "Expiry": { "$date": { "$numberLong": "1685551801821" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "64775c416894d083a29b8874" }, + "Node": "CrewBattleNode521", + "Activation": { "$date": { "$numberLong": "1685546401829" } }, + "Expiry": { "$date": { "$numberLong": "1685551801829" } }, + "ActiveMissionTier": "VoidT3" + }, + { + "_id": { "$oid": "64775c416894d083a29b8873" }, + "Node": "CrewBattleNode530", + "Activation": { "$date": { "$numberLong": "1685546401827" } }, + "Expiry": { "$date": { "$numberLong": "1685551801827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "64775c416894d083a29b8876" }, + "Node": "CrewBattleNode543", + "Activation": { "$date": { "$numberLong": "1685546401834" } }, + "Expiry": { "$date": { "$numberLong": "1685551801834" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "64775c416894d083a29b8875" }, + "Node": "CrewBattleNode527", + "Activation": { "$date": { "$numberLong": "1685546401832" } }, + "Expiry": { "$date": { "$numberLong": "1685551801832" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3db" }, + "Node": "CrewBattleNode519", + "Activation": { "$date": { "$numberLong": "1685550001821" } }, + "Expiry": { "$date": { "$numberLong": "1685555401821" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3de" }, + "Node": "CrewBattleNode524", + "Activation": { "$date": { "$numberLong": "1685550001829" } }, + "Expiry": { "$date": { "$numberLong": "1685555401829" } }, + "ActiveMissionTier": "VoidT3" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3dd" }, + "Node": "CrewBattleNode535", + "Activation": { "$date": { "$numberLong": "1685550001827" } }, + "Expiry": { "$date": { "$numberLong": "1685555401827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3dc" }, + "Node": "CrewBattleNode503", + "Activation": { "$date": { "$numberLong": "1685550001825" } }, + "Expiry": { "$date": { "$numberLong": "1685555401825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3e0" }, + "Node": "CrewBattleNode542", + "Activation": { "$date": { "$numberLong": "1685550001834" } }, + "Expiry": { "$date": { "$numberLong": "1685555401834" } }, + "ActiveMissionTier": "VoidT4" + }, + { + "_id": { "$oid": "647765a1dcb87be34e0ce3df" }, + "Node": "CrewBattleNode536", + "Activation": { "$date": { "$numberLong": "1685550001832" } }, + "Expiry": { "$date": { "$numberLong": "1685555401832" } }, + "ActiveMissionTier": "VoidT4" + } + ], + "PrimeAccessAvailability": { "State": "PRIME1" }, + "PrimeVaultAvailabilities": [false, false, false, false, false], + "PrimeTokenAvailability": true, + "DailyDeals": [ + { + "StoreItem": "/Lotus/StoreItems/Upgrades/Focus/AttackLensGreater", + "Activation": { "$date": { "$numberLong": "1685480400000" } }, + "Expiry": { "$date": { "$numberLong": "1685574000000" } }, + "Discount": 20, + "OriginalPrice": 40, + "SalePrice": 32, + "AmountTotal": 125, + "AmountSold": 125 + } + ], + "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, + "PVPChallengeInstances": [ + { + "_id": { "$oid": "6470fd0132c7efc24f00caf0" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf1" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 20 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf2" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 10 }], + "isGenerated": true, + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" + }, + { + "_id": { "$oid": "6470fd0132c7efc24f00caf3" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", + "startDate": { "$date": { "$numberLong": "1685126401676" } }, + "endDate": { "$date": { "$numberLong": "1685731201676" } }, + "params": [{ "n": "ScriptParamValue", "v": 0 }], + "isGenerated": true, + "PVPMode": "PVPMODE_NONE", + "subChallenges": [ + { "$oid": "6470fd0132c7efc24f00caf0" }, + { "$oid": "6470fd0132c7efc24f00caf1" }, + { "$oid": "6470fd0132c7efc24f00caf2" } + ], + "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfb8" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 4 }], + "isGenerated": true, + "PVPMode": "PVPMODE_CAPTURETHEFLAG", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfb9" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_CAPTURETHEFLAG", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbc" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 2 }], + "isGenerated": true, + "PVPMode": "PVPMODE_DEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbb" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 2 }], + "isGenerated": true, + "PVPMode": "PVPMODE_TEAMDEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfba" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_TEAMDEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbf" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsMEDIUM", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbd" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingEASY", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_DEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6477498105719ffc9780dfbe" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsHARD", + "startDate": { "$date": { "$numberLong": "1685539201381" } }, + "endDate": { "$date": { "$numberLong": "1685625601381" } }, + "params": [{ "n": "ScriptParamValue", "v": 6 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + } + ], + "PersistentEnemies": [], + "PVPAlternativeModes": [], + "PVPActiveTournaments": [], + "ProjectPct": [55.93717913052773, 90.86309625235785, 0], + "ConstructionProjects": [], + "TwitchPromos": [], + "ExperimentRecommended": [], + "EndlessXpChoices": [ + { "Category": "EXC_NORMAL", "Choices": ["Hydroid", "Mirage", "Limbo"] }, + { "Category": "EXC_HARD", "Choices": ["Zylok", "Sibear", "Dread", "Despair", "Hate"] } + ], + "ForceLogoutVersion": 0, + "FeaturedGuilds": [ + { + "_id": { "$oid": "5303c4bd06c56f4168b5fed9" }, + "Name": "Miau after Tomorrow", + "Tier": 1, + "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, + "Emblem": true + }, + { + "_id": { "$oid": "56ab8b2407c56fd145c91aa5" }, + "Name": "Slayers of Darkness", + "Tier": 2, + "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, + "Emblem": true + }, + { + "_id": { "$oid": "57ed05cb08c56ffd67386105" }, + "Name": "Nazaryk", + "Tier": 3, + "AllianceId": { "$oid": "5fdcf602fc5cef2d337800e0" }, + "Emblem": true + }, + { "_id": { "$oid": "570f9bda08c56f0887fb6db5" }, "Name": "GentleManz", "Tier": 4, "Emblem": true }, + { + "_id": { "$oid": "56d8b39408c56fd89a1799ec" }, + "Name": "Phantom Vanguard", + "Tier": 5, + "AllianceId": { "$oid": "55e270f706c56f2e2f0bb7d6" }, + "Emblem": true + }, + { + "_id": { "$oid": "54e44a5006c56f7eab0d5aa9" }, + "Name": "Violet Church", + "Tier": 3, + "AllianceId": { "$oid": "56c44d0b08c56f5c367b4665" }, + "Emblem": true + } + ], + "SeasonInfo": { + "Activation": { "$date": { "$numberLong": "1684951200000" } }, + "Expiry": { "$date": { "$numberLong": "1702857600000" } }, + "AffiliationTag": "RadioLegionIntermission8Syndicate", + "Season": 10, + "Phase": 0, + "Params": "", + "ActiveChallenges": [ + { + "_id": { "$oid": "001100020000000000000022" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685577600000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithElectricity" + }, + { + "_id": { "$oid": "001100020000000000000023" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685404800000" } }, + "Expiry": { "$date": { "$numberLong": "1685664000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTransmuteMods" + }, + { + "_id": { "$oid": "001100020000000000000024" }, + "Daily": true, + "Activation": { "$date": { "$numberLong": "1685491200000" } }, + "Expiry": { "$date": { "$numberLong": "1685750400000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailySolveCiphers" + }, + { + "_id": { "$oid": "001100020000000000000015" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteRescue" + }, + { + "_id": { "$oid": "001100020000000000000016" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteKuva" + }, + { + "_id": { "$oid": "001100020000000000000017" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyKillEximus" + }, + { + "_id": { "$oid": "001100020000000000000018" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPerfectAnimalCapture" + }, + { + "_id": { "$oid": "001100020000000000000019" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyUnlockRelics" + }, + { + "_id": { "$oid": "001100020000000000000020" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardKillEnemies" + }, + { + "_id": { "$oid": "001100020000000000000021" }, + "Activation": { "$date": { "$numberLong": "1685318400000" } }, + "Expiry": { "$date": { "$numberLong": "1685923200000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardFastCapture" + } ] - } }, - { - "_id": { "$oid": "64663a3c866d9fe65c012364" }, - "Activation": { "$date": { "$numberLong": "1684508400000" } }, - "Expiry": { "$date": { "$numberLong": "1685717940000" } }, - "Count": 0, - "Goal": 1, - "Success": 0, - "Personal": true, - "ClampNodeScores": true, - "Node": "EventNode24", - "MissionKeyName": "/Lotus/Types/Keys/TacAlertKeyAnniversary2023k", - "Desc": "/Lotus/Language/G1Quests/Anniversary2017MissionTitle", - "Icon": "/Lotus/Interface/Icons/Player/GlyphLotus10Anniversary.png", - "Tag": "Anniversary2018TacAlert", - "Reward": { - "items": [ - "/Lotus/StoreItems/Upgrades/Skins/Wisp/DexWispSkin", - "/Lotus/StoreItems/Types/StoreItems/SlotItems/TwoSentinelSlotItem" - ] - } - } - ], - "Alerts": [], - "Sorties": [ - { - "_id": { "$oid": "64776b7eba82e08c76d6cb9b" }, - "Activation": { "$date": { "$numberLong": "1685548800000" } }, - "Expiry": { "$date": { "$numberLong": "1685635200000" } }, - "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", - "Seed": 28971, - "Boss": "SORTIE_BOSS_ALAD", - "ExtraDrops": [], - "Variants": [ - { - "missionType": "MT_MOBILE_DEFENSE", - "modifierType": "SORTIE_MODIFIER_HAZARD_RADIATION", - "node": "SolNode53", - "tileset": "CorpusGasCityTileset" - }, - { - "missionType": "MT_RESCUE", - "modifierType": "SORTIE_MODIFIER_IMPACT", - "node": "SolNode107", - "tileset": "CorpusOutpostTileset" - }, - { - "missionType": "MT_EXTERMINATION", - "modifierType": "SORTIE_MODIFIER_LOW_ENERGY", - "node": "SolNode304", - "tileset": "OrokinMoonTilesetCorpus" - } - ], - "Twitter": true - } - ], - "LiteSorties": [ - { - "_id": { "$oid": "6473e77dfff198b17e47812d" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", - "Seed": 62757, - "Boss": "SORTIE_BOSS_AMAR", - "Missions": [ - { "missionType": "MT_MOBILE_DEFENSE", "node": "SolNode30" }, - { "missionType": "MT_EXCAVATE", "node": "SolNode11" }, - { "missionType": "MT_ASSASSINATION", "node": "SolNode99" } - ] - } - ], - "SyndicateMissions": [ - { - "_id": { "$oid": "64775ff00000000000000002" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "EntratiSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [5, 5, 5] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierCTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 15, - "maxEnemyLevel": 25, - "xpAmounts": [11, 11, 11] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierBTableARewards", - "masteryReq": 5, - "minEnemyLevel": 25, - "maxEnemyLevel": 30, - "endless": true, - "bonusXpMultiplier": 0.15000001, - "xpAmounts": [14, 14, 14] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierDTableARewards", - "masteryReq": 2, - "minEnemyLevel": 30, - "maxEnemyLevel": 40, - "xpAmounts": [19, 19, 19, 29] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", - "masteryReq": 3, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [20, 20, 20, 20, 39] - }, - { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [25, 25, 25, 25, 50] - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierATableCRewards", - "masteryReq": 5, - "minEnemyLevel": 30, - "maxEnemyLevel": 40, - "xpAmounts": [2, 2, 2, 4], - "locationTag": "ChamberB", - "isVault": true - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierBTableCRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 50, - "xpAmounts": [4, 4, 4, 5], - "locationTag": "ChamberA", - "isVault": true - }, - { - "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/VaultBountyTierCTableCRewards", - "masteryReq": 5, - "minEnemyLevel": 50, - "maxEnemyLevel": 60, - "xpAmounts": [5, 5, 5, 7], - "locationTag": "ChamberC", - "isVault": true - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000022" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "SolarisSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobRecovery", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [350, 350, 350] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobExterminate", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierBTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 10, - "maxEnemyLevel": 30, - "xpAmounts": [680, 680, 680] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierCTableBRewards", - "masteryReq": 2, - "minEnemyLevel": 20, - "maxEnemyLevel": 40, - "xpAmounts": [610, 610, 610, 890] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobRecovery", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierDTableBRewards", - "masteryReq": 3, - "minEnemyLevel": 30, - "maxEnemyLevel": 50, - "xpAmounts": [580, 580, 580, 580, 1140] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [680, 680, 680, 680, 1340] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusArtifactJobExcavation", - "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableBRewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [840, 840, 840, 840, 1660] - }, - { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/Narmer/NarmerVenusCullJobExterminate", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", - "masteryReq": 0, - "minEnemyLevel": 50, - "maxEnemyLevel": 70, - "xpAmounts": [760, 760, 760, 760, 1500] - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000007" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "CetusSyndicate", - "Seed": 20831, - "Nodes": [], - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATableBRewards", - "masteryReq": 0, - "minEnemyLevel": 5, - "maxEnemyLevel": 15, - "xpAmounts": [420, 420, 420] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTableBRewards", - "masteryReq": 1, - "minEnemyLevel": 10, - "maxEnemyLevel": 30, - "xpAmounts": [690, 690, 690] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTableBRewards", - "masteryReq": 2, - "minEnemyLevel": 20, - "maxEnemyLevel": 40, - "xpAmounts": [590, 590, 590, 870] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountySab", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTableBRewards", - "masteryReq": 3, - "minEnemyLevel": 30, - "maxEnemyLevel": 50, - "xpAmounts": [550, 550, 550, 550, 1080] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", - "masteryReq": 5, - "minEnemyLevel": 40, - "maxEnemyLevel": 60, - "xpAmounts": [690, 690, 690, 690, 1350] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableBRewards", - "masteryReq": 10, - "minEnemyLevel": 100, - "maxEnemyLevel": 100, - "xpAmounts": [840, 840, 840, 840, 1660] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableBRewards", - "masteryReq": 0, - "minEnemyLevel": 50, - "maxEnemyLevel": 70, - "xpAmounts": [830, 830, 830, 830, 1640] - } - ] - }, - { - "_id": { "$oid": "64775ff00000000000000026" }, - "Activation": { "$date": { "$numberLong": "1685544944674" } }, - "Expiry": { "$date": { "$numberLong": "1685553943548" } }, - "Tag": "ZarimanSyndicate", - "Seed": 20831, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4de" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "ArbitersSyndicate", - "Seed": 28971, - "Nodes": ["SolNode36", "SolNode123", "SolNode225", "SolNode709", "SolNode137", "SolNode195", "SolNode81"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4df" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "CephalonSudaSyndicate", - "Seed": 25969, - "Nodes": ["SolNode79", "SolNode41", "SettlementNode1", "SolNode132", "SolNode166", "SolNode72", "SolNode23"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e0" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "NecraloidSyndicate", - "Seed": 81067, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e1" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "EventSyndicate", - "Seed": 28897, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e2" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "KahlSyndicate", - "Seed": 92441, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e4" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "QuillsSyndicate", - "Seed": 61214, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e3" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "NewLokaSyndicate", - "Seed": 21393, - "Nodes": ["SolNode68", "SolNode2", "SolNode82", "SolNode217", "SolNode409", "SolNode139", "SolNode75"] - }, - { - "_id": { "$oid": "64776ec5e72990bfd5fea4e5" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "PerrinSyndicate", - "Seed": 72469, - "Nodes": ["SolNode39", "SolNode12", "SolNode146", "SolNode101", "SolNode121", "SolNode408", "SolNode96"] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e6" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegion2Syndicate", - "Seed": 13526, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ea" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission4Syndicate", - "Seed": 20328, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4eb" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission5Syndicate", - "Seed": 87241, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ec" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission6Syndicate", - "Seed": 54438, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e7" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegion3Syndicate", - "Seed": 20666, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e9" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission3Syndicate", - "Seed": 7709, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4e8" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission2Syndicate", - "Seed": 33027, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ee" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission8Syndicate", - "Seed": 21780, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ef" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermissionSyndicate", - "Seed": 95381, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4ed" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionIntermission7Syndicate", - "Seed": 53091, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f0" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RadioLegionSyndicate", - "Seed": 60623, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f1" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "RedVeilSyndicate", - "Seed": 78309, - "Nodes": ["SolNode15", "SolNode106", "SettlementNode3", "SolNode224", "SolNode401", "SolNode76", "SolNode62"] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f3" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "VoxSyndicate", - "Seed": 52842, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f2" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "VentKidsSyndicate", - "Seed": 49149, - "Nodes": [] - }, - { - "_id": { "$oid": "64776ec6e72990bfd5fea4f4" }, - "Activation": { "$date": { "$numberLong": "1685548741732" } }, - "Expiry": { "$date": { "$numberLong": "1685635140000" } }, - "Tag": "SteelMeridianSyndicate", - "Seed": 9289, - "Nodes": ["SolNode130", "SolNode61", "SolNode30", "SolNode10", "SolNode102", "SolNode64", "SolNode50"] - } - ], - "ActiveMissions": [ - { - "_id": { "$oid": "64775c05cab187e046c3d277" }, - "Region": 12, - "Seed": 94704, - "Activation": { "$date": { "$numberLong": "1685543941731" } }, - "Expiry": { "$date": { "$numberLong": "1685550975969" } }, - "Node": "SolNode184", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT4", - "Hard": true - }, - { - "_id": { "$oid": "647761698afaf76e50461fc8" }, - "Region": 19, - "Seed": 58268, - "Activation": { "$date": { "$numberLong": "1685545321337" } }, - "Expiry": { "$date": { "$numberLong": "1685551434577" } }, - "Node": "SolNode746", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT5", - "Hard": true - }, - { - "_id": { "$oid": "6477630df698f676b0b32282" }, - "Region": 15, - "Seed": 70123, - "Activation": { "$date": { "$numberLong": "1685545741655" } }, - "Expiry": { "$date": { "$numberLong": "1685550886528" } }, - "Node": "SolNode412", - "MissionType": "MT_TERRITORY", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "6477630df698f676b0b32283" }, - "Region": 9, - "Seed": 15094, - "Activation": { "$date": { "$numberLong": "1685545741655" } }, - "Expiry": { "$date": { "$numberLong": "1685550459337" } }, - "Node": "SolNode56", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "647764ed12544a97c96618a5" }, - "Region": 15, - "Seed": 66090, - "Activation": { "$date": { "$numberLong": "1685546221415" } }, - "Expiry": { "$date": { "$numberLong": "1685553063549" } }, - "Node": "SolNode405", - "MissionType": "MT_SURVIVAL", - "Modifier": "VoidT3", - "Hard": true - }, - { - "_id": { "$oid": "647764ed12544a97c96618a6" }, - "Region": 13, - "Seed": 19703, - "Activation": { "$date": { "$numberLong": "1685546221415" } }, - "Expiry": { "$date": { "$numberLong": "1685550448683" } }, - "Node": "SolNode216", - "MissionType": "MT_EXCAVATE", - "Modifier": "VoidT3", - "Hard": true - }, - { - "_id": { "$oid": "64776565dc85a669dae19b38" }, - "Region": 3, - "Seed": 90150, - "Activation": { "$date": { "$numberLong": "1685546341763" } }, - "Expiry": { "$date": { "$numberLong": "1685552506487" } }, - "Node": "SolNode89", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "64776565dc85a669dae19b39" }, - "Region": 2, - "Seed": 11253, - "Activation": { "$date": { "$numberLong": "1685546341763" } }, - "Expiry": { "$date": { "$numberLong": "1685550810452" } }, - "Node": "SolNode128", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08dfe" }, - "Region": 5, - "Seed": 67983, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685553220288" } }, - "Node": "SolNode97", - "MissionType": "MT_INTEL", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08dff" }, - "Region": 10, - "Seed": 74682, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685551010303" } }, - "Node": "SolNode135", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776655b191713293c08e00" }, - "Region": 6, - "Seed": 15538, - "Activation": { "$date": { "$numberLong": "1685546581712" } }, - "Expiry": { "$date": { "$numberLong": "1685551799194" } }, - "Node": "SolNode18", - "MissionType": "MT_TERRITORY", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "64776ec5752b9bd0c871fa7c" }, - "Region": 4, - "Seed": 47626, - "Activation": { "$date": { "$numberLong": "1685548741727" } }, - "Expiry": { "$date": { "$numberLong": "1685553411719" } }, - "Node": "SolNode36", - "MissionType": "MT_RESCUE", - "Modifier": "VoidT1" - }, - { - "_id": { "$oid": "647770a68bb595254a64c26e" }, - "Region": 7, - "Seed": 86090, - "Activation": { "$date": { "$numberLong": "1685549222143" } }, - "Expiry": { "$date": { "$numberLong": "1685556263692" } }, - "Node": "SolNode122", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT3" - }, - { - "_id": { "$oid": "647770a68bb595254a64c26f" }, - "Region": 13, - "Seed": 39703, - "Activation": { "$date": { "$numberLong": "1685549222143" } }, - "Expiry": { "$date": { "$numberLong": "1685553504151" } }, - "Node": "SolNode212", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT3" - }, - { - "_id": { "$oid": "6477720ec9dd724c888eff5b" }, - "Region": 19, - "Seed": 2767, - "Activation": { "$date": { "$numberLong": "1685549582078" } }, - "Expiry": { "$date": { "$numberLong": "1685554300277" } }, - "Node": "SolNode744", - "MissionType": "MT_SURVIVAL", - "Modifier": "VoidT5" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7c" }, - "Region": 10, - "Seed": 84581, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685554027918" } }, - "Node": "SolNode149", - "MissionType": "MT_DEFENSE", - "Modifier": "VoidT2" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7d" }, - "Region": 16, - "Seed": 50951, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685553961019" } }, - "Node": "SettlementNode12", - "MissionType": "MT_RESCUE", - "Modifier": "VoidT2" - }, - { - "_id": { "$oid": "647772fd22c01cbb6ccb9e7e" }, - "Region": 5, - "Seed": 37897, - "Activation": { "$date": { "$numberLong": "1685549821318" } }, - "Expiry": { "$date": { "$numberLong": "1685556218772" } }, - "Node": "SolNode73", - "MissionType": "MT_CAPTURE", - "Modifier": "VoidT2" - } - ], - "GlobalUpgrades": [], - "FlashSales": [ - { - "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", - "StartDate": { "$date": { "$numberLong": "1654560000000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", - "StartDate": { "$date": { "$numberLong": "1661173200000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "StartDate": { "$date": { "$numberLong": "1662422400000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 999, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", - "StartDate": { "$date": { "$numberLong": "1667347200000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": true, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": true, - "VoidEclipse": false, - "BannerIndex": 5, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 80, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 195, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/XakuLotusDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 85, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 430, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VorunaVoidshellSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 90, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 90, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/MesaVoltDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 95, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 260, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/Items/MiscItems/OrokinCatalyst", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 105, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 20, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Powersuits/Werewolf/Werewolf", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 100, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 325, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/FormaPack", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 110, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 35, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Effects/NarmerEvolvingEphemeraA", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 115, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 80, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Saryn/SarynLunarNewYearSkin", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "Featured": false, - "Popular": true, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 120, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 165, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", - "StartDate": { "$date": { "$numberLong": "1678838400000" } }, - "EndDate": { "$date": { "$numberLong": "1693494000000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 1, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", - "StartDate": { "$date": { "$numberLong": "1678838400000" } }, - "EndDate": { "$date": { "$numberLong": "1693440000000" } }, - "Featured": false, - "Popular": false, - "ShowInMarket": true, - "HideFromMarket": false, - "ShowWithRecommended": true, - "SupporterPack": false, - "VoidEclipse": false, - "BannerIndex": 2, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1683828000000" } }, - "EndDate": { "$date": { "$numberLong": "1687110900000" } }, - "DefaultPremium": 1, - "DefaulRegular": 0, - "LocalizedItemName": "FREE WITH PRIME GAMING" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1683828000000" } }, - "EndDate": { "$date": { "$numberLong": "1687110900000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": true, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 1, - "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1684432800000" } }, - "EndDate": { "$date": { "$numberLong": "1693504800000" } } - } - ], - "InGameMarket": { - "LandingPage": { - "Categories": [ - { - "CategoryName": "POPULAR", - "Name": "/Lotus/Language/Menu/StorePopular", - "Icon": "popular", - "Items": [ - "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItem", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeUdyatIridosSyandanaStoreItemNoLogo", - "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", - "/Lotus/Types/StoreItems/Packages/WarframeBundles/WolfFrameBundle", - "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", - "/Lotus/Types/StoreItems/Packages/ProtovyreCosmeticsBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/EmberDeluxeIISkinBundle", - "/Lotus/Types/StoreItems/Packages/RailjackVoidrigBundle", - "/Lotus/StoreItems/Powersuits/Werewolf/Werewolf", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", - "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", - "/Lotus/Types/StoreItems/Packages/FormaPack", - "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst" - ] - }, - { - "CategoryName": "DUVIRI_PARADOX", - "Name": "/Lotus/Language/Store/Store_DuviriParadox", - "Icon": "duviriparadox", - "AddToMenu": true, - "Items": [ - "/Lotus/Types/StoreItems/Packages/RoyalSteedBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/BaruukDeluxeSkinBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/WispDeluxeSkinBundle", - "/Lotus/Types/StoreItems/Packages/VoidAdornmentIVBundle", - "/Lotus/Types/StoreItems/Packages/DuviriBundleFabledWarrior", - "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitArabicBundle", - "/Lotus/Types/StoreItems/Packages/DuviriWeaponsBundle", - "/Lotus/StoreItems/Upgrades/Skins/Duviri/DuviriSwordTowerShieldSkin", - "/Lotus/Types/StoreItems/Packages/AdultOperatorSuitOutfit1ABundle", - "/Lotus/StoreItems/Weapons/Tenno/Bows/DaxDuviriAsymetricalBow/DaxDuviriAsymmetricalLongBowPlayerWeapon", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAetigo", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundlePsyacus", - "/Lotus/Types/StoreItems/Packages/DuviriHorseBundleAccessories", - "/Lotus/Types/StoreItems/Packages/Tattoo/TattooBundleDuviri", - "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" - ] - }, - { - "CategoryName": "TENNOGEN", - "Name": "/Lotus/Language/Menu/Store_Tennogen", - "Icon": "tennogen", - "Items": [ - "/Lotus/StoreItems/Upgrades/Skins/Runner/SWGaussNitrolystSkin", - "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWRetrorolystSyandana", - "/Lotus/StoreItems/Upgrades/Skins/BrokenFrame/SWXakuDeatheaSkin", - "/Lotus/StoreItems/Upgrades/Skins/Sentient/SWCalibanScionHelmet", - "/Lotus/StoreItems/Upgrades/Skins/Scarves/SWAlocanaSyandana", - "/Lotus/StoreItems/Upgrades/Skins/Operator/Accessories/SWKatixEarAcc" - ] - }, - { - "CategoryName": "DUVIRI_CHOICES", - "Name": "/Lotus/Language/Store/Store_DuviriChoices", - "Icon": "duvirichoices", - "AddToMenu": true, - "Items": [] - }, - { - "CategoryName": "PREMIUM_BUNDLES", - "Name": "/Lotus/Language/Store/Store_PremiumBundles", - "Icon": "premiumbundles", - "Items": [ - "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", - "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", - "/Lotus/Types/StoreItems/Packages/Tennocon2023StoreItem", - "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", - "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB" - ] - }, - { - "CategoryName": "WISH_LIST", - "Name": "/Lotus/Language/Menu/Store_Wishlist", - "Icon": "wishlist", - "Items": [] - } - ] - } - }, - "Invasions": [ - { - "_id": { "$oid": "6471a5c11c84d8991785ccc1" }, - "Faction": "FC_GRINEER", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode4", - "Count": -35500, - "Goal": 43000, - "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "646e00f1d08856975bb476fe" }, - "AttackerReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] - }, - "AttackerMissionInfo": { "seed": 573551, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 810078, "faction": "FC_GRINEER" }, - "Activation": { "$date": { "$numberLong": "1685170489276" } } - }, - { - "_id": { "$oid": "64729729ea6b289e0f440b37" }, - "Faction": "FC_CORPUS", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode177", - "Count": -40065, - "Goal": 40000, - "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "646fdcb95a219384bdbbd5f1" }, - "AttackerReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/SnipetronVandalBlueprint", "ItemCount": 1 }] - }, - "AttackerMissionInfo": { "seed": 181914, "faction": "FC_GRINEER" }, - "DefenderReward": { - "countedItems": [ - { "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/GrineerCombatKnifeHilt", "ItemCount": 1 } - ] - }, - "DefenderMissionInfo": { "seed": 197505, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1685232025336" } } - }, - { - "_id": { "$oid": "64764c611959704d82e095f8" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode127", - "Count": -19265, - "Goal": 30000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", - "Completed": false, - "ChainID": { "$oid": "647612f5b75e9d02362f0c6c" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 995781, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 978707, "faction": "FC_INFESTATION", "missionReward": [] }, - "Activation": { "$date": { "$numberLong": "1685474401909" } } - }, - { - "_id": { "$oid": "6476ba8aca0663ae5a22b6bb" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode68", - "Count": -33274, - "Goal": 33000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "6476ba8aca0663ae5a22b6bb" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 512950, "faction": "FC_GRINEER" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 160228, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685508708793" } } - }, - { - "_id": { "$oid": "647730e50ecf58593d735cb0" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode107", - "Count": -17526, - "Goal": 36000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 640989, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 53442, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685537906204" } } - }, - { - "_id": { "$oid": "64775e991d3a1c5c0a181494" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode66", - "Count": -1218, - "Goal": 45000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 563164, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] - }, - "DefenderMissionInfo": { "seed": 203755, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685544601696" } } - }, - { - "_id": { "$oid": "64775e991d3a1c5c0a181495" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode22", - "Count": -1490, - "Goal": 36000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "647730e50ecf58593d735cb0" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 933714, "faction": "FC_CORPUS" }, - "DefenderReward": { - "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] - }, - "DefenderMissionInfo": { "seed": 693132, "faction": "FC_INFESTATION" }, - "Activation": { "$date": { "$numberLong": "1685544601696" } } - } - ], - "HubEvents": [], - "NodeOverrides": [ - { "_id": { "$oid": "549b18e9b029cef5991d6aec" }, "Node": "EuropaHUB", "Hide": true }, - { "_id": { "$oid": "54a1737aeb658f6cbccf70ff" }, "Node": "ErisHUB", "Hide": true }, - { "_id": { "$oid": "54a736ddec12f80bd6e9e326" }, "Node": "VenusHUB", "Hide": true }, - { "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9507716 }, - { - "_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, - "Node": "EarthHUB", - "Hide": false, - "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubTwoB", - "Activation": { "$date": { "$numberLong": "1535646600000" } } - }, - { - "_id": { "$oid": "5d24d1f674491d51f8d44473" }, - "Node": "MercuryHUB", - "Hide": true, - "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", - "Activation": { "$date": { "$numberLong": "1563030000000" } } - }, - { - "_id": { "$oid": "5c7cb0d00000000000000000" }, - "Activation": { "$date": { "$numberLong": "1684512000000" } }, - "Expiry": { "$date": { "$numberLong": "1685721600000" } }, - "Node": "SolNode129", - "Faction": "FC_CORPUS", - "CustomNpcEncounters": ["/Lotus/Types/Gameplay/Venus/Encounters/Heists/ExploiterHeistFissure"] - } - ], - "VoidTraders": [ - { - "_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, - "Activation": { "$date": { "$numberLong": "1685710800000" } }, - "Expiry": { "$date": { "$numberLong": "1685883600000" } }, - "Id": "5d1e07a0a38e4a4fdd7cefca", - "Character": "Baro'Ki Teel", - "Node": "SaturnHUB" - } - ], - "PrimeVaultTraders": [ - { - "_id": { "$oid": "631f8c4ac36af423770eaa97" }, - "Activation": { "$date": { "$numberLong": "1683223200000" } }, - "Completed": false, - "InitialStartDate": { "$date": { "$numberLong": "1662738144266" } }, - "Node": "TradeHUB1", - "Manifest": [ - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaTrinityPrimeDualPack", - "PrimePrice": 10 - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack", - "PrimePrice": 10, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTrinityPrimeSinglePack", - "PrimePrice": 6 - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaPrimeSinglePack", - "PrimePrice": 6 - }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Paladin/PaladinPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeOberonCape", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/SurakaPrimeDangle", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeSilvaAegis/PrimeSilvaAegis", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSybaris/PrimeSybarisRifle", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Necro/NekrosPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/UruPrimeScarf", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAcanthusPrimeArmorSet", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeTigris/PrimeTigris", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/PrimeGalatine/PrimeGalatine", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { "ItemType": "/Lotus/StoreItems/Powersuits/Trinity/TrinityPrime", "PrimePrice": 3 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVKavasaPrimeKubrowArmor", - "PrimePrice": 2 - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/ScrollingPrimeMeleeDangle", - "PrimePrice": 1 - }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/PrimeDualKamas/PrimeDualKamas", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Powersuits/AntiMatter/NovaPrime", "PrimePrice": 3 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEdoPrimeArmorSet", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrimeAccessSigilFive", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSoma/PrimeSomaRifle", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeVasto/PrimeVastoPistol", "PrimePrice": 2 }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/OberonPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NekrosPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NovaPrimeBobbleHead", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TrinityPrimeBobbleHead", "PrimePrice": 1 }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionOberonNekrosVaultBBronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionOberonNekrosVaultBBronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionOberonNekrosVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1684508400000" } }, - "EndDate": { "$date": { "$numberLong": "1685718000000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionNovaTrinityVaultABronze", - "RegularPrice": 1 - } - ], - "Expiry": { "$date": { "$numberLong": "1685718000000" } }, - "EvergreenManifest": [ - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/DualDagger/FangPrimeDagger", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeLex/PrimeLex", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/ShipScenes/PrimeLisetFiligreeScene", "PrimePrice": 1 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAviaPrimeArmorSet", "PrimePrice": 2 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVayasPrimeAccessories", - "PrimePrice": 2 - }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/TwitchPrimeMeleeDangle", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeAviaSyandana", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeTwitchScarf", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/TwitchPrimeScarf", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/TwitchPrimeSigil", "PrimePrice": 1 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNecraloidBundle", - "RegularPrice": 10 - }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Liset/LisetSkinTwitchPrime", "RegularPrice": 10 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/InfMembraneCape", "RegularPrice": 10 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/MiscItems/PrimeBucks", "RegularPrice": 1 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoidTraceBundle", "RegularPrice": 1 } - ], - "ScheduleInfo": [ - { - "Expiry": { "$date": { "$numberLong": "1667498400000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEquinoxWukongPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1669921200000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVValkyrSarynPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1672945200000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1668711600000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOberonPrimeSinglePack" - }, - { - "Expiry": { "$date": { "$numberLong": "1675364400000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1671130800000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1677783600000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1674154800000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVAtlasVaubanPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1680804000000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1676473200000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1683223200000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1679594400000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagRhinoPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1685718000000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1682013600000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNekrosOberonPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1688666400000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1684433100000" } }, - "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVInarosAshPrimeDualPack" - }, - { - "Expiry": { "$date": { "$numberLong": "1691085600000" } }, - "PreviewHiddenUntil": { "$date": { "$numberLong": "1691085600000" } } - } - ] - } - ], - "VoidStorms": [ - { - "_id": { "$oid": "64775c416894d083a29b8872" }, - "Node": "CrewBattleNode511", - "Activation": { "$date": { "$numberLong": "1685546401825" } }, - "Expiry": { "$date": { "$numberLong": "1685551801825" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "64775c416894d083a29b8871" }, - "Node": "CrewBattleNode509", - "Activation": { "$date": { "$numberLong": "1685546401821" } }, - "Expiry": { "$date": { "$numberLong": "1685551801821" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "64775c416894d083a29b8874" }, - "Node": "CrewBattleNode521", - "Activation": { "$date": { "$numberLong": "1685546401829" } }, - "Expiry": { "$date": { "$numberLong": "1685551801829" } }, - "ActiveMissionTier": "VoidT3" - }, - { - "_id": { "$oid": "64775c416894d083a29b8873" }, - "Node": "CrewBattleNode530", - "Activation": { "$date": { "$numberLong": "1685546401827" } }, - "Expiry": { "$date": { "$numberLong": "1685551801827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "64775c416894d083a29b8876" }, - "Node": "CrewBattleNode543", - "Activation": { "$date": { "$numberLong": "1685546401834" } }, - "Expiry": { "$date": { "$numberLong": "1685551801834" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "64775c416894d083a29b8875" }, - "Node": "CrewBattleNode527", - "Activation": { "$date": { "$numberLong": "1685546401832" } }, - "Expiry": { "$date": { "$numberLong": "1685551801832" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3db" }, - "Node": "CrewBattleNode519", - "Activation": { "$date": { "$numberLong": "1685550001821" } }, - "Expiry": { "$date": { "$numberLong": "1685555401821" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3de" }, - "Node": "CrewBattleNode524", - "Activation": { "$date": { "$numberLong": "1685550001829" } }, - "Expiry": { "$date": { "$numberLong": "1685555401829" } }, - "ActiveMissionTier": "VoidT3" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3dd" }, - "Node": "CrewBattleNode535", - "Activation": { "$date": { "$numberLong": "1685550001827" } }, - "Expiry": { "$date": { "$numberLong": "1685555401827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3dc" }, - "Node": "CrewBattleNode503", - "Activation": { "$date": { "$numberLong": "1685550001825" } }, - "Expiry": { "$date": { "$numberLong": "1685555401825" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3e0" }, - "Node": "CrewBattleNode542", - "Activation": { "$date": { "$numberLong": "1685550001834" } }, - "Expiry": { "$date": { "$numberLong": "1685555401834" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "647765a1dcb87be34e0ce3df" }, - "Node": "CrewBattleNode536", - "Activation": { "$date": { "$numberLong": "1685550001832" } }, - "Expiry": { "$date": { "$numberLong": "1685555401832" } }, - "ActiveMissionTier": "VoidT4" - } - ], - "PrimeAccessAvailability": { "State": "PRIME1" }, - "PrimeVaultAvailabilities": [false, false, false, false, false], - "PrimeTokenAvailability": true, - "DailyDeals": [ - { - "StoreItem": "/Lotus/StoreItems/Upgrades/Focus/AttackLensGreater", - "Activation": { "$date": { "$numberLong": "1685480400000" } }, - "Expiry": { "$date": { "$numberLong": "1685574000000" } }, - "Discount": 20, - "OriginalPrice": 40, - "SalePrice": 32, - "AmountTotal": 125, - "AmountSold": 125 - } - ], - "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, - "PVPChallengeInstances": [ - { - "_id": { "$oid": "6470fd0132c7efc24f00caf0" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf1" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 20 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf2" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 10 }], - "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" - }, - { - "_id": { "$oid": "6470fd0132c7efc24f00caf3" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", - "startDate": { "$date": { "$numberLong": "1685126401676" } }, - "endDate": { "$date": { "$numberLong": "1685731201676" } }, - "params": [{ "n": "ScriptParamValue", "v": 0 }], - "isGenerated": true, - "PVPMode": "PVPMODE_NONE", - "subChallenges": [ - { "$oid": "6470fd0132c7efc24f00caf0" }, - { "$oid": "6470fd0132c7efc24f00caf1" }, - { "$oid": "6470fd0132c7efc24f00caf2" } - ], - "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfb8" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 4 }], - "isGenerated": true, - "PVPMode": "PVPMODE_CAPTURETHEFLAG", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfb9" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_CAPTURETHEFLAG", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbc" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 2 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbb" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 2 }], - "isGenerated": true, - "PVPMode": "PVPMODE_TEAMDEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfba" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_TEAMDEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbf" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsMEDIUM", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbd" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingEASY", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 1 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6477498105719ffc9780dfbe" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsHARD", - "startDate": { "$date": { "$numberLong": "1685539201381" } }, - "endDate": { "$date": { "$numberLong": "1685625601381" } }, - "params": [{ "n": "ScriptParamValue", "v": 6 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - } - ], - "PersistentEnemies": [], - "PVPAlternativeModes": [], - "PVPActiveTournaments": [], - "ProjectPct": [55.93717913052773, 90.86309625235785, 0], - "ConstructionProjects": [], - "TwitchPromos": [], - "ExperimentRecommended": [], - "EndlessXpChoices": [ - { "Category": "EXC_NORMAL", "Choices": ["Hydroid", "Mirage", "Limbo"] }, - { "Category": "EXC_HARD", "Choices": ["Zylok", "Sibear", "Dread", "Despair", "Hate"] } - ], - "ForceLogoutVersion": 0, - "FeaturedGuilds": [ - { - "_id": { "$oid": "5303c4bd06c56f4168b5fed9" }, - "Name": "Miau after Tomorrow", - "Tier": 1, - "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, - "Emblem": true - }, - { - "_id": { "$oid": "56ab8b2407c56fd145c91aa5" }, - "Name": "Slayers of Darkness", - "Tier": 2, - "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, - "Emblem": true - }, - { - "_id": { "$oid": "57ed05cb08c56ffd67386105" }, - "Name": "Nazaryk", - "Tier": 3, - "AllianceId": { "$oid": "5fdcf602fc5cef2d337800e0" }, - "Emblem": true - }, - { "_id": { "$oid": "570f9bda08c56f0887fb6db5" }, "Name": "GentleManz", "Tier": 4, "Emblem": true }, - { - "_id": { "$oid": "56d8b39408c56fd89a1799ec" }, - "Name": "Phantom Vanguard", - "Tier": 5, - "AllianceId": { "$oid": "55e270f706c56f2e2f0bb7d6" }, - "Emblem": true - }, - { - "_id": { "$oid": "54e44a5006c56f7eab0d5aa9" }, - "Name": "Violet Church", - "Tier": 3, - "AllianceId": { "$oid": "56c44d0b08c56f5c367b4665" }, - "Emblem": true - } - ], - "SeasonInfo": { - "Activation": { "$date": { "$numberLong": "1684951200000" } }, - "Expiry": { "$date": { "$numberLong": "1702857600000" } }, - "AffiliationTag": "RadioLegionIntermission8Syndicate", - "Season": 10, - "Phase": 0, - "Params": "", - "ActiveChallenges": [ - { - "_id": { "$oid": "001100020000000000000022" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685577600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithElectricity" - }, - { - "_id": { "$oid": "001100020000000000000023" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685404800000" } }, - "Expiry": { "$date": { "$numberLong": "1685664000000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyTransmuteMods" - }, - { - "_id": { "$oid": "001100020000000000000024" }, - "Daily": true, - "Activation": { "$date": { "$numberLong": "1685491200000" } }, - "Expiry": { "$date": { "$numberLong": "1685750400000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailySolveCiphers" - }, - { - "_id": { "$oid": "001100020000000000000015" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteRescue" - }, - { - "_id": { "$oid": "001100020000000000000016" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyCompleteKuva" - }, - { - "_id": { "$oid": "001100020000000000000017" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyKillEximus" - }, - { - "_id": { "$oid": "001100020000000000000018" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPerfectAnimalCapture" - }, - { - "_id": { "$oid": "001100020000000000000019" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyUnlockRelics" - }, - { - "_id": { "$oid": "001100020000000000000020" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardKillEnemies" - }, - { - "_id": { "$oid": "001100020000000000000021" }, - "Activation": { "$date": { "$numberLong": "1685318400000" } }, - "Expiry": { "$date": { "$numberLong": "1685923200000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardFastCapture" - } - ] - }, - "Tmp": "{\"sfn\":555}" + "Tmp": "{\"sfn\":555}" } diff --git a/tsconfig.json b/tsconfig.json index a75f01a3..58fa269b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,113 +1,113 @@ { - "extends": "@tsconfig/node20/tsconfig.json", - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ + "extends": "@tsconfig/node20/tsconfig.json", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - //"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": ["es2023"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + /* Language and Environment */ + //"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": ["es2023"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - /* Modules */ - //"module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - "resolveJsonModule": true /* Enable importing .json files. */, - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* Modules */ + //"module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + "resolveJsonModule": true /* Enable importing .json files. */, + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./build/" /* Specify an output folder for all emitted files. */, - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build/" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - //"noUnusedLocals": true /* Enable error reporting when local variables aren't read. */, - "noUnusedParameters": true /* Raise an error when a function parameter isn't read. */, - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, - "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + //"noUnusedLocals": true /* Enable error reporting when local variables aren't read. */, + "noUnusedParameters": true /* Raise an error when a function parameter isn't read. */, + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + "noImplicitReturns": true /* Enable error reporting for codepaths that do not explicitly return in a function. */, + "noFallthroughCasesInSwitch": true /* Enable error reporting for fallthrough cases in switch statements. */, + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "paths": { - "@/*": ["./*"] + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "paths": { + "@/*": ["./*"] + } } - } } -- 2.47.2 From c933fc19c5ca06f5b3e357814cdd89bbc4297bb2 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:15:27 +0200 Subject: [PATCH 03/13] Inventory Infrastructure and Example for Suits --- config.json | 12 +- .../api/deleteSessionController.ts | 2 +- src/controllers/api/inventoryController.ts | 25 +- src/controllers/api/loginController.ts | 8 +- src/helpers/inventoryHelpers.ts | 9 + src/models/inventoryModel.ts | 258 ++++ src/services/inventoryService.ts | 25 + src/services/loginService.ts | 3 +- src/types/inventoryTypes.ts | 1232 +++++++++++++++++ static/fixed_responses/getShip.json | 12 +- static/fixed_responses/new_inventory.json | 121 ++ .../postTutorialInventory.json | 145 ++ 12 files changed, 1833 insertions(+), 19 deletions(-) create mode 100644 src/helpers/inventoryHelpers.ts create mode 100644 src/models/inventoryModel.ts create mode 100644 src/services/inventoryService.ts create mode 100644 src/types/inventoryTypes.ts create mode 100644 static/fixed_responses/new_inventory.json create mode 100644 static/fixed_responses/postTutorialInventory.json diff --git a/config.json b/config.json index d0c662ae..5d15dcf4 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,9 @@ { - "autoCreateAccount": true, - "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", - "matchmakingBuildId": "4920386201513015989", - "version": "33.0.14", - "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==" + "autoCreateAccount": true, + "buildLabel": "2023.05.25.13.39/oZkc-RIme5c1CCltUfg2gQ", + "matchmakingBuildId": "4920386201513015989", + "version": "33.0.14", + "worldSeed": "GWvLyHiw7/Qr/60056xmAmDrn0Y9et2S3BYlLSkLDNBMtumSr3KxWV8He5Jz72yYq3tsY+cd53QeTf+bb54+llGTbYiQF+64BtiLWMVhWP1IUaP4SxWHXojlpQC13op/udHI1whc+8zrxEzzZmv/QlpvigAAbjBDtwu97Df0vgn+YrOKi4G3OhgIkTRocAAzD1P/BGbT8gaKE01H8rXl3+Gq6jCA1O1v800SL6DwKOgMsXVvWp7g2n/tPxJe/j9bmu4XFG0bSa5y5hikLKxvntA/5ut+iogv4MyMBe+TydVxjPqNbkKnby5l4KAL+3inpuPraeg4jcNMt0AwKG8NIQ==", + "skipStoryModeChoice": true, + "skipTutorial": true } diff --git a/src/controllers/api/deleteSessionController.ts b/src/controllers/api/deleteSessionController.ts index ba062e88..a1dd4167 100644 --- a/src/controllers/api/deleteSessionController.ts +++ b/src/controllers/api/deleteSessionController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const deleteSessionController: RequestHandler = (_req, res) => { - res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 }); + res.sendStatus(200); }; export { deleteSessionController }; diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 47ba5d25..6327aa25 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -1,11 +1,28 @@ -import inventory from "@/static/fixed_responses/inventory.json"; +/* eslint-disable @typescript-eslint/no-misused-promises */ +import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; +import { Inventory } from "@/src/models/inventoryModel"; import { Request, RequestHandler, Response } from "express"; -const inventoryController: RequestHandler = (request: Request, response: Response) => { - console.log(request.query); +const inventoryController: RequestHandler = async (request: Request, response: Response) => { const accountId = request.query.accountId; + + if (!accountId) { + response.status(400).json({ error: "accountId was not provided" }); + return; + } console.log(accountId); - response.json(inventory); + + const inventory = await Inventory.findOne({ accountOwnerId: accountId }); // has the accountOwnerId field to find a corresponding inventory + const inventoryJSON = inventory?.toJSON(); + + if (!inventoryJSON) { + response.status(400).json({ error: "inventory was undefined" }); + return; + } + + const inventoreResponse = toInventoryResponse(inventoryJSON); // remove the accountOwnerId for the response + + response.json(inventoreResponse); }; export { inventoryController }; diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index efaa750a..7819df06 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -13,11 +13,8 @@ const loginController: RequestHandler = async (request, response) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument const body = JSON.parse(request.body); // parse octet stream of json data to json object const loginRequest = toLoginRequest(body); - // console.log(body); - //console.log(String.fromCharCode.apiRouterly(null, req.body)); const account = await Account.findOne({ email: loginRequest.email }); //{ _id: 0, __v: 0 } - console.log("findone", account); if (!account && config.autoCreateAccount) { try { @@ -32,7 +29,8 @@ const loginController: RequestHandler = async (request, response) => { ConsentNeeded: false, TrackedSettings: [] }); - console.log("CREATED ACCOUNT", newAccount); + console.log("creating new account"); + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { email, password, ...databaseAccount } = newAccount; const newLoginResponse: ILoginResponse = { ...databaseAccount, @@ -47,7 +45,6 @@ const loginController: RequestHandler = async (request, response) => { MatchmakingBuildId: config.matchmakingBuildId }; - console.log(newLoginResponse); response.json(newLoginResponse); return; } catch (error: unknown) { @@ -77,7 +74,6 @@ const loginController: RequestHandler = async (request, response) => { MatchmakingBuildId: config.matchmakingBuildId }; - console.log("login response", newLoginResponse); response.json(newLoginResponse); }; diff --git a/src/helpers/inventoryHelpers.ts b/src/helpers/inventoryHelpers.ts new file mode 100644 index 00000000..ca0d0e5c --- /dev/null +++ b/src/helpers/inventoryHelpers.ts @@ -0,0 +1,9 @@ +import { IInventoryDatabase, IInventoryResponse } from "../types/inventoryTypes"; + +const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInventoryResponse => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { accountOwnerId, ...inventoreResponse } = inventoryDatabase; + return inventoreResponse; +}; + +export { toInventoryResponse }; diff --git a/src/models/inventoryModel.ts b/src/models/inventoryModel.ts new file mode 100644 index 00000000..bdc2065d --- /dev/null +++ b/src/models/inventoryModel.ts @@ -0,0 +1,258 @@ +import { Document, Schema, model } from "mongoose"; +import { IInventoryDatabase, IInventoryResponse, ISuitDatabase, ISuitDocument, Oid } from "../types/inventoryTypes"; + +const polaritySchema = new Schema({ + Slot: Number, + Value: String +}); + +const abilityOverrideSchema = new Schema({ + Ability: String, + Index: Number +}); + +const colorSchema = new Schema({ + t0: Number, + t1: Number, + t2: Number, + t3: Number, + en: Number, + e1: Number, + m0: Number, + m1: Number +}); + +const suitConfigSchema = new Schema({ + Skins: [String], + pricol: colorSchema, + attcol: colorSchema, + eyecol: colorSchema, + sigcol: colorSchema, + Upgrades: [String], + Songs: [ + { + m: String, + b: String, + p: String, + s: String + } + ], + Name: String, + AbilityOverride: abilityOverrideSchema, + PvpUpgrades: [String], + ugly: Boolean +}); + +suitConfigSchema.set("toJSON", { + transform(_document, returnedObject) { + delete returnedObject._id; + delete returnedObject.__v; + } +}); + +const suitSchema = new Schema({ + ItemType: String, + Configs: [suitConfigSchema], + UpgradeVer: Number, + XP: Number, + InfestationDate: Date, + Features: Number, + Polarity: [polaritySchema], + Polarized: Number, + ModSlotPurchases: Number, + FocusLens: String, + UnlockLevel: Number +}); + +suitSchema.set("toJSON", { + transform(_document, returnedObject: ISuitDocument) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call + returnedObject.ItemId = { $oid: returnedObject._id.toString() } satisfies Oid; + delete returnedObject._id; + delete returnedObject.__v; + } +}); + +const inventorySchema = new Schema({ + accountOwnerId: Schema.Types.ObjectId, + SubscribedToEmails: Number, + Created: Schema.Types.Mixed, + RewardSeed: Number, + RegularCredits: Number, + PremiumCredits: Number, + PremiumCreditsFree: Number, + FusionPoints: Number, + SuitBin: Schema.Types.Mixed, + WeaponBin: Schema.Types.Mixed, + SentinelBin: Schema.Types.Mixed, + SpaceSuitBin: Schema.Types.Mixed, + SpaceWeaponBin: Schema.Types.Mixed, + PvpBonusLoadoutBin: Schema.Types.Mixed, + PveBonusLoadoutBin: Schema.Types.Mixed, + RandomModBin: Schema.Types.Mixed, + TradesRemaining: Number, + DailyAffiliation: Number, + DailyAffiliationPvp: Number, + DailyAffiliationLibrary: Number, + DailyFocus: Number, + GiftsRemaining: Number, + HandlerPoints: Number, + MiscItems: [Schema.Types.Mixed], + ChallengesFixVersion: Number, + ChallengeProgress: [Schema.Types.Mixed], + RawUpgrades: [Schema.Types.Mixed], + ReceivedStartingGear: Boolean, + Suits: [suitSchema], + LongGuns: [Schema.Types.Mixed], + Pistols: [Schema.Types.Mixed], + Melee: [Schema.Types.Mixed], + Ships: [Schema.Types.Mixed], + QuestKeys: [Schema.Types.Mixed], + FlavourItems: [Schema.Types.Mixed], + Scoops: [Schema.Types.Mixed], + TrainingRetriesLeft: Number, + LoadOutPresets: Schema.Types.Mixed, + CurrentLoadOutIds: [Schema.Types.Mixed], + Missions: [Schema.Types.Mixed], + RandomUpgradesIdentified: Number, + LastRegionPlayed: String, + XPInfo: [Schema.Types.Mixed], + Recipes: [Schema.Types.Mixed], + WeaponSkins: [Schema.Types.Mixed], + PendingRecipes: [Schema.Types.Mixed], + TrainingDate: Schema.Types.Mixed, + PlayerLevel: Number, + Upgrades: [Schema.Types.Mixed], + EquippedGear: [String], + DeathMarks: [String], + FusionTreasures: [Schema.Types.Mixed], + WebFlags: Schema.Types.Mixed, + CompletedAlerts: [String], + Consumables: [Schema.Types.Mixed], + LevelKeys: [Schema.Types.Mixed], + TauntHistory: [Schema.Types.Mixed], + StoryModeChoice: String, + PeriodicMissionCompletions: [Schema.Types.Mixed], + KubrowPetEggs: [Schema.Types.Mixed], + LoreFragmentScans: [Schema.Types.Mixed], + EquippedEmotes: [String], + PendingTrades: [Schema.Types.Mixed], + Boosters: [Schema.Types.Mixed], + ActiveDojoColorResearch: String, + SentientSpawnChanceBoosters: Schema.Types.Mixed, + Affiliations: [Schema.Types.Mixed], + QualifyingInvasions: [Schema.Types.Mixed], + FactionScores: [Number], + SpaceSuits: [Schema.Types.Mixed], + SpaceMelee: [Schema.Types.Mixed], + SpaceGuns: [Schema.Types.Mixed], + ArchwingEnabled: Boolean, + PendingSpectreLoadouts: [Schema.Types.Mixed], + SpectreLoadouts: [Schema.Types.Mixed], + SentinelWeapons: [Schema.Types.Mixed], + Sentinels: [Schema.Types.Mixed], + EmailItems: [Schema.Types.Mixed], + CompletedSyndicates: [String], + FocusXP: Schema.Types.Mixed, + Wishlist: [String], + Alignment: Schema.Types.Mixed, + CompletedSorties: [String], + LastSortieReward: [Schema.Types.Mixed], + Drones: [Schema.Types.Mixed], + StepSequencers: [Schema.Types.Mixed], + ActiveAvatarImageType: String, + KubrowPets: [Schema.Types.Mixed], + ShipDecorations: [Schema.Types.Mixed], + OperatorAmpBin: Schema.Types.Mixed, + DailyAffiliationCetus: Number, + DailyAffiliationQuills: Number, + DiscoveredMarkers: [Schema.Types.Mixed], + CompletedJobs: [Schema.Types.Mixed], + FocusAbility: String, + FocusUpgrades: [Schema.Types.Mixed], + OperatorAmps: [Schema.Types.Mixed], + HasContributedToDojo: Boolean, + HWIDProtectEnabled: Boolean, + KubrowPetPrints: [Schema.Types.Mixed], + AlignmentReplay: Schema.Types.Mixed, + PersonalGoalProgress: [Schema.Types.Mixed], + DailyAffiliationSolaris: Number, + SpecialItems: [Schema.Types.Mixed], + ThemeStyle: String, + ThemeBackground: String, + ThemeSounds: String, + BountyScore: Number, + ChallengeInstanceStates: [Schema.Types.Mixed], + LoginMilestoneRewards: [String], + OperatorLoadOuts: [Schema.Types.Mixed], + DailyAffiliationVentkids: Number, + DailyAffiliationVox: Number, + RecentVendorPurchases: [Schema.Types.Mixed], + Hoverboards: [Schema.Types.Mixed], + NodeIntrosCompleted: [String], + CompletedJobChains: [Schema.Types.Mixed], + SeasonChallengeHistory: [Schema.Types.Mixed], + MoaPets: [Schema.Types.Mixed], + EquippedInstrument: String, + InvasionChainProgress: [Schema.Types.Mixed], + DataKnives: [Schema.Types.Mixed], + NemesisHistory: [Schema.Types.Mixed], + LastNemesisAllySpawnTime: Schema.Types.Mixed, + Settings: Schema.Types.Mixed, + PersonalTechProjects: [Schema.Types.Mixed], + CrewShips: [Schema.Types.Mixed], + CrewShipSalvageBin: Schema.Types.Mixed, + PlayerSkills: Schema.Types.Mixed, + CrewShipAmmo: [Schema.Types.Mixed], + CrewShipSalvagedWeaponSkins: [Schema.Types.Mixed], + CrewShipWeapons: [Schema.Types.Mixed], + CrewShipSalvagedWeapons: [Schema.Types.Mixed], + CrewShipWeaponSkins: [Schema.Types.Mixed], + TradeBannedUntil: Schema.Types.Mixed, + PlayedParkourTutorial: Boolean, + SubscribedToEmailsPersonalized: Number, + MechBin: Schema.Types.Mixed, + DailyAffiliationEntrati: Number, + DailyAffiliationNecraloid: Number, + MechSuits: [Schema.Types.Mixed], + InfestedFoundry: Schema.Types.Mixed, + BlessingCooldown: Schema.Types.Mixed, + CrewMemberBin: Schema.Types.Mixed, + CrewShipHarnesses: [Schema.Types.Mixed], + CrewShipRawSalvage: [Schema.Types.Mixed], + CrewMembers: [Schema.Types.Mixed], + AdultOperatorLoadOuts: [Schema.Types.Mixed], + LotusCustomization: Schema.Types.Mixed, + UseAdultOperatorLoadout: Boolean, + DailyAffiliationZariman: Number, + NemesisAbandonedRewards: [String], + DailyAffiliationKahl: Number, + LastInventorySync: Schema.Types.Mixed, + NextRefill: Schema.Types.Mixed, + ActiveLandscapeTraps: [Schema.Types.Mixed], + EvolutionProgress: [Schema.Types.Mixed], + RepVotes: [Schema.Types.Mixed], + LeagueTickets: [Schema.Types.Mixed], + Quests: [Schema.Types.Mixed], + Robotics: [Schema.Types.Mixed], + UsedDailyDeals: [Schema.Types.Mixed], + LibraryPersonalProgress: [Schema.Types.Mixed], + CollectibleSeries: [Schema.Types.Mixed], + LibraryAvailableDailyTaskInfo: Schema.Types.Mixed, + HasResetAccount: Boolean, + PendingCoupon: Schema.Types.Mixed, + Harvestable: Boolean, + DeathSquadable: Boolean +}); + +inventorySchema.set("toJSON", { + transform(_document, returnedObject: ISuitDocument) { + delete returnedObject._id; + delete returnedObject.__v; + } +}); + +const Suit = model("Suit", suitSchema); +const Inventory = model("Inventory", inventorySchema); + +export { Inventory, Suit }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts new file mode 100644 index 00000000..ce38d5b2 --- /dev/null +++ b/src/services/inventoryService.ts @@ -0,0 +1,25 @@ +import { Inventory } from "../models/inventoryModel"; +import new_inventory from "@/static/fixed_responses/new_inventory.json"; +import config from "@/config.json"; +import { Types } from "mongoose"; + +const createInventory = async (accountOwnerId: Types.ObjectId) => { + try { + const inventory = new Inventory({ ...new_inventory, accountOwnerId: accountOwnerId }); + if (config.skipStoryModeChoice) { + inventory.StoryModeChoice = "WARFRAME"; + } + if (config.skipTutorial) { + inventory.PlayedParkourTutorial = true; + inventory.ReceivedStartingGear = true; + } + await inventory.save(); + } catch (error) { + if (error instanceof Error) { + throw new Error(`error creating inventory" ${error.message}`); + } + throw new Error("error creating inventory that is not of instance Error"); + } +}; + +export { createInventory }; diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 8e5d1da2..c110d491 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -1,4 +1,5 @@ import { Account } from "@/src/models/loginModel"; +import { createInventory } from "@/src/services/inventoryService"; import { IDatabaseAccount } from "@/src/types/loginTypes"; const isCorrectPassword = (requestPassword: string, databasePassword: string): boolean => { @@ -6,10 +7,10 @@ const isCorrectPassword = (requestPassword: string, databasePassword: string): b }; const createAccount = async (accountData: IDatabaseAccount) => { - console.log("test", accountData); const account = new Account(accountData); try { await account.save(); + await createInventory(account._id); return account.toJSON(); } catch (error) { if (error instanceof Error) { diff --git a/src/types/inventoryTypes.ts b/src/types/inventoryTypes.ts new file mode 100644 index 00000000..70bac7ce --- /dev/null +++ b/src/types/inventoryTypes.ts @@ -0,0 +1,1232 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { Document, Types } from "mongoose"; + +export interface IInventoryDatabase extends IInventoryResponse { + accountOwnerId: Types.ObjectId; +} + +export interface IInventoryResponse { + SubscribedToEmails: number; + Created: Date; + RewardSeed: number; + RegularCredits: number; + PremiumCredits: number; + PremiumCreditsFree: number; + FusionPoints: number; + SuitBin: CrewShipSalvageBinClass; + WeaponBin: CrewShipSalvageBinClass; + SentinelBin: CrewShipSalvageBinClass; + SpaceSuitBin: CrewShipSalvageBinClass; + SpaceWeaponBin: CrewShipSalvageBinClass; + PvpBonusLoadoutBin: CrewMemberBinClass; + PveBonusLoadoutBin: CrewShipSalvageBinClass; + RandomModBin: CrewShipSalvageBinClass; + TradesRemaining: number; + DailyAffiliation: number; + DailyAffiliationPvp: number; + DailyAffiliationLibrary: number; + DailyFocus: number; + GiftsRemaining: number; + HandlerPoints: number; + MiscItems: Consumable[]; + ChallengesFixVersion: number; + ChallengeProgress: ChallengeProgress[]; + RawUpgrades: RawUpgrade[]; + ReceivedStartingGear: boolean; + Suits: ISuitDatabase[]; + LongGuns: LongGun[]; + Pistols: LongGun[]; + Melee: Melee[]; + Ships: Ship[]; + QuestKeys: QuestKey[]; + FlavourItems: FlavourItem[]; + Scoops: Scoop[]; + TrainingRetriesLeft: number; + LoadOutPresets: LoadOutPresets; + CurrentLoadOutIds: Array; + Missions: Mission[]; + RandomUpgradesIdentified: number; + LastRegionPlayed: string; + XPInfo: EmailItem[]; + Recipes: Consumable[]; + WeaponSkins: WeaponSkin[]; + PendingRecipes: PendingRecipe[]; + TrainingDate: Date; + PlayerLevel: number; + Upgrades: CrewShipSalvagedWeaponSkin[]; + EquippedGear: string[]; + DeathMarks: string[]; + FusionTreasures: FusionTreasure[]; + WebFlags: WebFlags; + CompletedAlerts: string[]; + Consumables: Consumable[]; + LevelKeys: Consumable[]; + TauntHistory: TauntHistory[]; + StoryModeChoice: string; + PeriodicMissionCompletions: PeriodicMissionCompletion[]; + KubrowPetEggs: KubrowPetEgg[]; + LoreFragmentScans: LoreFragmentScan[]; + EquippedEmotes: string[]; + PendingTrades: PendingTrade[]; + Boosters: Booster[]; + ActiveDojoColorResearch: string; + SentientSpawnChanceBoosters: SentientSpawnChanceBoosters; + Affiliations: Affiliation[]; + QualifyingInvasions: any[]; + FactionScores: number[]; + SpaceSuits: Space[]; + SpaceMelee: Space[]; + SpaceGuns: SpaceGun[]; + ArchwingEnabled: boolean; + PendingSpectreLoadouts: any[]; + SpectreLoadouts: SpectreLoadout[]; + SentinelWeapons: SentinelWeapon[]; + Sentinels: Sentinel[]; + EmailItems: EmailItem[]; + CompletedSyndicates: string[]; + FocusXP: FocusXP; + Wishlist: string[]; + Alignment: Alignment; + CompletedSorties: string[]; + LastSortieReward: LastSortieReward[]; + Drones: Drone[]; + StepSequencers: StepSequencer[]; + ActiveAvatarImageType: string; + KubrowPets: KubrowPet[]; + ShipDecorations: Consumable[]; + OperatorAmpBin: CrewShipSalvageBinClass; + DailyAffiliationCetus: number; + DailyAffiliationQuills: number; + DiscoveredMarkers: DiscoveredMarker[]; + CompletedJobs: CompletedJob[]; + FocusAbility: string; + FocusUpgrades: FocusUpgrade[]; + OperatorAmps: OperatorAmp[]; + HasContributedToDojo: boolean; + HWIDProtectEnabled: boolean; + KubrowPetPrints: KubrowPetPrint[]; + AlignmentReplay: Alignment; + PersonalGoalProgress: PersonalGoalProgress[]; + DailyAffiliationSolaris: number; + SpecialItems: SpecialItem[]; + ThemeStyle: string; + ThemeBackground: string; + ThemeSounds: string; + BountyScore: number; + ChallengeInstanceStates: ChallengeInstanceState[]; + LoginMilestoneRewards: string[]; + OperatorLoadOuts: OperatorLoadOut[]; + DailyAffiliationVentkids: number; + DailyAffiliationVox: number; + RecentVendorPurchases: Array; + Hoverboards: Hoverboard[]; + NodeIntrosCompleted: string[]; + CompletedJobChains: CompletedJobChain[]; + SeasonChallengeHistory: SeasonChallengeHistory[]; + MoaPets: MoaPet[]; + EquippedInstrument: string; + InvasionChainProgress: InvasionChainProgress[]; + DataKnives: DataKnife[]; + NemesisHistory: NemesisHistory[]; + LastNemesisAllySpawnTime: Date; + Settings: Settings; + PersonalTechProjects: PersonalTechProject[]; + CrewShips: CrewShip[]; + CrewShipSalvageBin: CrewShipSalvageBinClass; + PlayerSkills: PlayerSkills; + CrewShipAmmo: Consumable[]; + CrewShipSalvagedWeaponSkins: CrewShipSalvagedWeaponSkin[]; + CrewShipWeapons: CrewShipWeapon[]; + CrewShipSalvagedWeapons: CrewShipWeapon[]; + CrewShipWeaponSkins: CrewShipSalvagedWeaponSkin[]; + TradeBannedUntil: Date; + PlayedParkourTutorial: boolean; + SubscribedToEmailsPersonalized: number; + MechBin: CrewMemberBinClass; + DailyAffiliationEntrati: number; + DailyAffiliationNecraloid: number; + MechSuits: MechSuit[]; + InfestedFoundry: InfestedFoundry; + BlessingCooldown: Date; + CrewMemberBin: CrewMemberBinClass; + CrewShipHarnesses: CrewShipHarness[]; + CrewShipRawSalvage: Consumable[]; + CrewMembers: CrewMember[]; + AdultOperatorLoadOuts: AdultOperatorLoadOut[]; + LotusCustomization: LotusCustomization; + UseAdultOperatorLoadout: boolean; + DailyAffiliationZariman: number; + NemesisAbandonedRewards: string[]; + DailyAffiliationKahl: number; + LastInventorySync: Oid; + NextRefill: Date; + ActiveLandscapeTraps: any[]; + EvolutionProgress: any[]; + RepVotes: any[]; + LeagueTickets: any[]; + Quests: any[]; + Robotics: any[]; + UsedDailyDeals: any[]; + LibraryPersonalProgress: LibraryPersonalProgress[]; + CollectibleSeries: CollectibleSery[]; + LibraryAvailableDailyTaskInfo: LibraryAvailableDailyTaskInfo; + HasResetAccount: boolean; + PendingCoupon: PendingCoupon; + Harvestable: boolean; + DeathSquadable: boolean; +} + +export interface AdultOperatorLoadOut { + Skins: string[]; + attcol: Color; + eyecol: Color; + facial: Color; + pricol: Color; + Upgrades?: string[]; + ItemId: Oid; +} + +export interface Oid { + $oid: string; +} + +export interface Color { + t0?: number; + t1?: number; + t2?: number; + t3?: number; + en?: number; + e1?: number; + m0?: number; + m1?: number; +} + +export interface Affiliation { + Initiated?: boolean; + Standing: number; + Title?: number; + FreeFavorsEarned?: number[]; + FreeFavorsUsed?: number[]; + Tag: string; +} + +export interface Alignment { + Wisdom: number; + Alignment: number; +} + +export interface Date { + $date: { $numberLong: string }; +} + +export interface Booster { + ExpiryDate: number; + ItemType: string; +} + +export interface ChallengeInstanceState { + id: Oid; + Progress: number; + params: Param[]; + IsRewardCollected: boolean; +} + +export interface Param { + n: string; + v: string; +} + +export interface ChallengeProgress { + Progress: number; + Name: string; + Completed?: string[]; +} + +export interface CollectibleSery { + CollectibleType: string; + Count: number; + Tracking: string; + ReqScans: number; + IncentiveStates: IncentiveState[]; +} + +export interface IncentiveState { + threshold: number; + complete: boolean; + sent: boolean; +} + +export interface CompletedJobChain { + LocationTag: string; + Jobs: string[]; +} + +export interface CompletedJob { + JobId: string; + StageCompletions: number[]; +} + +export interface Consumable { + ItemCount: number; + ItemType: string; +} + +export interface CrewMemberBinClass { + Slots: number; +} + +export interface CrewMember { + ItemType: string; + NemesisFingerprint: number; + Seed: number; + HireDate: Date; + AssignedRole: number; + SkillEfficiency: SkillEfficiency; + WeaponConfigIdx: number; + WeaponId: Oid; + XP: number; + PowersuitType: string; + Configs: CrewMemberConfig[]; + SecondInCommand: boolean; + ItemId: Oid; +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CrewMemberConfig {} + +export interface SkillEfficiency { + PILOTING: Combat; + GUNNERY: Combat; + ENGINEERING: Combat; + COMBAT: Combat; + SURVIVABILITY: Combat; +} + +export interface Combat { + Assigned: number; +} + +export interface CrewShipHarness { + ItemType: string; + Configs: CrewShipHarnessConfig[]; + Features: number; + UpgradeVer: number; + XP: number; + Polarity: Polarity[]; + Polarized: number; + ItemId: Oid; +} + +export interface CrewShipHarnessConfig { + Upgrades?: string[]; +} + +export interface Polarity { + Slot: number; + Value: FocusSchool; +} + +export enum FocusSchool { + ApAny = "AP_ANY", + ApAttack = "AP_ATTACK", + ApDefense = "AP_DEFENSE", + ApPower = "AP_POWER", + ApPrecept = "AP_PRECEPT", + ApTactic = "AP_TACTIC", + ApUmbra = "AP_UMBRA", + ApUniversal = "AP_UNIVERSAL", + ApWard = "AP_WARD" +} + +export interface CrewShipSalvageBinClass { + Extra: number; + Slots: number; +} + +export interface CrewShipSalvagedWeaponSkin { + ItemType: string; + UpgradeFingerprint?: string; + ItemId: Oid; +} + +export interface CrewShipWeapon { + ItemType: string; + UpgradeType?: string; + UpgradeFingerprint?: string; + Configs?: CrewShipHarnessConfig[]; + UpgradeVer?: number; + ItemId: Oid; +} + +export interface CrewShip { + ItemType: string; + Configs: CrewShipConfig[]; + Weapon: Weapon; + Customization: Customization; + ItemName: string; + RailjackImage: FlavourItem; + CrewMembers: CrewMembers; + ItemId: Oid; +} + +export interface CrewShipConfig { + Skins?: string[]; + pricol?: Color; +} + +export interface CrewMembers { + SLOT_A: Slot; + SLOT_B: Slot; + SLOT_C: Slot; +} + +export interface Slot { + ItemId: Oid; +} + +export interface Customization { + CrewshipInterior: Terior; +} + +export interface Terior { + SkinFlavourItem: string; + Colors: Color; + ShipAttachments?: ShipAttachments; +} + +export interface ShipAttachments { + HOOD_ORNAMENT: string; +} + +export interface FlavourItem { + ItemType: string; +} + +export interface Weapon { + PILOT: Pilot; + PORT_GUNS: PortGuns; +} + +export interface Pilot { + PRIMARY_A: L; + SECONDARY_A: L; +} + +export interface L { + ItemId?: Oid; + mod?: number; + cus?: number; + ItemType?: string; + hide?: boolean; +} + +export interface PortGuns { + PRIMARY_A: L; +} + +export interface DataKnife { + ItemType: string; + XP: number; + Configs: DataKnifeConfig[]; + UpgradeVer: number; + ItemId: Oid; +} + +export interface DataKnifeConfig { + Upgrades?: string[]; + pricol?: Color; + Skins: string[]; + attcol?: Color; + sigcol?: Color; +} + +export interface DiscoveredMarker { + tag: string; + discoveryState: number[]; +} + +export interface Drone { + ItemType: string; + CurrentHP: number; + ItemId: Oid; + RepairStart?: Date; +} + +export interface EmailItem { + ItemType: string; + XP: number; +} + +export interface FocusUpgrade { + ItemType: string; + Level?: number; + IsUniversal?: boolean; +} + +export interface FocusXP { + AP_POWER: number; + AP_TACTIC: number; + AP_DEFENSE: number; + AP_ATTACK: number; + AP_WARD: number; +} + +export interface FusionTreasure { + ItemCount: number; + ItemType: string; + Sockets: number; +} + +export interface Hoverboard { + ItemType: string; + Configs: HoverboardConfig[]; + ModularParts: string[]; + ItemName?: string; + Polarity?: Polarity[]; + UpgradeVer: number; + XP: number; + Features: number; + ItemId: Oid; +} + +export interface HoverboardConfig { + Upgrades?: string[]; + Skins?: PurpleSkin[]; + pricol?: Color; + sigcol?: Sigcol; + attcol?: Color; +} + +export enum PurpleSkin { + Empty = "", + The5Be4Af71A38E4A9306040E15 = "5be4af71a38e4a9306040e15", + The5C930Ac3A38E4A24Bc3Ad5De = "5c930ac3a38e4a24bc3ad5de", + The5C9C6F9857904A7A3B25656B = "5c9c6f9857904a7a3b25656b", + The5Dd8A8E3A38E4A321A45E6A0 = "5dd8a8e3a38e4a321a45e6a0" +} + +export interface Sigcol { + t3: number; +} + +export interface InfestedFoundry { + Name: string; + Resources: Resource[]; + Slots: number; + XP: number; + ConsumedSuits: ConsumedSuit[]; + InvigorationIndex: number; + InvigorationSuitOfferings: string[]; + InvigorationsApplied: number; +} + +export interface ConsumedSuit { + s: string; + c?: Color; +} + +export interface Resource { + ItemType: string; + Count: number; +} + +export interface InvasionChainProgress { + id: Oid; + count: number; +} + +export interface KubrowPetEgg { + ItemType: KubrowPetEggItemType; + ExpirationDate: Date; + ItemId: Oid; +} + +export enum KubrowPetEggItemType { + LotusTypesGameKubrowPetEggsKubrowEgg = "/Lotus/Types/Game/KubrowPet/Eggs/KubrowEgg" +} + +export interface KubrowPetPrint { + ItemType: KubrowPetPrintItemType; + Name: string; + IsMale: boolean; + Size: number; + DominantTraits: Traits; + RecessiveTraits: Traits; + ItemId: Oid; + InheritedModularParts?: any[]; +} + +export interface Traits { + BaseColor: string; + SecondaryColor: string; + TertiaryColor: string; + AccentColor: string; + EyeColor: string; + FurPattern: string; + Personality: string; + BodyType: string; + Head?: string; + Tail?: Tail; +} + +export enum Tail { + Empty = "", + LotusTypesGameCatbrowPetTailsCatbrowTailA = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailA", + LotusTypesGameCatbrowPetTailsCatbrowTailB = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailB", + LotusTypesGameCatbrowPetTailsCatbrowTailC = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailC", + LotusTypesGameCatbrowPetTailsCatbrowTailD = "/Lotus/Types/Game/CatbrowPet/Tails/CatbrowTailD" +} + +export enum KubrowPetPrintItemType { + LotusTypesGameKubrowPetImprintedTraitPrint = "/Lotus/Types/Game/KubrowPet/ImprintedTraitPrint" +} + +export interface KubrowPet { + ItemType: string; + Configs: KubrowPetConfig[]; + UpgradeVer: number; + Details: Details; + XP?: number; + Polarized?: number; + Polarity?: Polarity[]; + Features?: number; + InfestationDate?: Date; + InfestationDays?: number; + InfestationType?: string; + ItemId: Oid; + ModularParts?: string[]; +} + +export interface KubrowPetConfig { + Skins?: string[]; + pricol?: Color; + attcol?: Color; + Upgrades?: string[]; +} + +export interface Details { + Name: string; + IsPuppy: boolean; + HasCollar: boolean; + PrintsRemaining: number; + Status: Status; + HatchDate: Date; + DominantTraits: Traits; + RecessiveTraits: Traits; + IsMale: boolean; + Size: number; +} + +export enum Status { + StatusAvailable = "STATUS_AVAILABLE", + StatusStasis = "STATUS_STASIS" +} + +export interface LastSortieReward { + SortieId: Oid; + StoreItem: string; + Manifest: string; +} + +export interface LibraryAvailableDailyTaskInfo { + EnemyTypes: string[]; + EnemyLocTag: string; + EnemyIcon: string; + ScansRequired: number; + RewardStoreItem: string; + RewardQuantity: number; + RewardStanding: number; +} + +export interface LibraryPersonalProgress { + TargetType: string; + Scans: number; + Completed: boolean; +} + +export interface LoadOutPresets { + NORMAL: Normal[]; + NORMAL_PVP: Archwing[]; + LUNARO: Lunaro[]; + ARCHWING: Archwing[]; + SENTINEL: Archwing[]; + OPERATOR: Archwing[]; + GEAR: Gear[]; + KDRIVE: Kdrive[]; + DATAKNIFE: Archwing[]; + MECH: Mech[]; + OPERATOR_ADULT: Archwing[]; +} + +export interface Archwing { + PresetIcon: string; + Favorite: boolean; + n?: string; + s: L; + l?: L; + m?: L; + ItemId: Oid; + p?: L; +} + +export interface Gear { + n: string; + s: L; + p: L; + l: L; + m: L; + ItemId: Oid; +} + +export interface Kdrive { + PresetIcon: string; + Favorite: boolean; + s: L; + ItemId: Oid; +} + +export interface Lunaro { + n: string; + s: L; + m: L; + ItemId: Oid; +} + +export interface Mech { + PresetIcon: string; + Favorite: boolean; + s: L; + h: L; + a: L; + ItemId: Oid; +} + +export interface Normal { + FocusSchool: FocusSchool; + PresetIcon: string; + Favorite: boolean; + n: string; + s: L; + p: L; + l: L; + m: L; + h: L; + a?: L; + ItemId: Oid; +} + +export interface LongGun { + ItemType: string; + Configs: LongGunConfig[]; + UpgradeVer?: number; + XP?: number; + Features?: number; + ItemId: Oid; + Polarized?: number; + Polarity?: Polarity[]; + FocusLens?: string; + ModSlotPurchases?: number; + UpgradeType?: UpgradeType; + UpgradeFingerprint?: string; + ItemName?: string; + ModularParts?: string[]; + UnlockLevel?: number; +} + +export interface LongGunConfig { + Upgrades?: string[]; + Skins?: string[]; + pricol?: Color; + attcol?: Color; + PvpUpgrades?: string[]; + Name?: string; +} + +export enum UpgradeType { + LotusWeaponsGrineerKuvaLichUpgradesInnateDamageRandomMod = "/Lotus/Weapons/Grineer/KuvaLich/Upgrades/InnateDamageRandomMod" +} + +export interface LoreFragmentScan { + Progress: number; + Region?: string; + ItemType: string; +} + +export interface LotusCustomization { + Upgrades: any[]; + PvpUpgrades: any[]; + Skins: string[]; + pricol: Color; + attcol: any[]; + sigcol: any[]; + eyecol: any[]; + facial: any[]; + Songs: any[]; + Persona: string; +} + +export interface MechSuit { + ItemType: string; + Configs: DataKnifeConfig[]; + Features: number; + UpgradeVer: number; + XP: number; + Polarity: Polarity[]; + Polarized: number; + ItemId: Oid; +} + +export interface Melee { + ItemType: string; + Configs: MeleeConfig[]; + UpgradeVer?: number; + XP?: number; + Features?: number; + Polarity?: Polarity[]; + Polarized?: number; + ModSlotPurchases?: number; + ItemId: Oid; + FocusLens?: string; + ModularParts?: string[]; + ItemName?: string; + UpgradeType?: UpgradeType; + UpgradeFingerprint?: string; + UnlockLevel?: number; +} + +export interface MeleeConfig { + Skins?: string[]; + pricol?: Color; + Upgrades?: string[]; + attcol?: Color; + eyecol?: OperatorLoadOutSigcol; + Name?: string; + PvpUpgrades?: string[]; +} + +export interface OperatorLoadOutSigcol { + t0?: number; + t1?: number; + en?: number; +} + +export interface Mission { + Completes: number; + Tier?: number; + Tag: string; + RewardsCooldownTime?: Date; +} + +export interface MoaPet { + ItemType: string; + Configs: KubrowPetConfig[]; + UpgradeVer: number; + ModularParts: string[]; + XP?: number; + Features?: number; + ItemName: string; + Polarity?: Polarity[]; + ItemId: Oid; +} + +export interface NemesisHistory { + fp: number; + manifest: Manifest; + KillingSuit: string; + killingDamageType: number; + ShoulderHelmet: string; + AgentIdx: number; + BirthNode: BirthNode; + Rank: number; + k: boolean; + d: Date; + GuessHistory?: number[]; + currentGuess?: number; + Traded?: boolean; + PrevOwners?: number; + SecondInCommand?: boolean; + Faction?: string; + Weakened?: boolean; +} + +export enum BirthNode { + SolNode181 = "SolNode181", + SolNode4 = "SolNode4", + SolNode70 = "SolNode70", + SolNode76 = "SolNode76" +} + +export enum Manifest { + LotusTypesEnemiesCorpusLawyersLawyerManifest = "/Lotus/Types/Enemies/Corpus/Lawyers/LawyerManifest", + LotusTypesGameNemesisKuvaLichKuvaLichManifest = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifest", + LotusTypesGameNemesisKuvaLichKuvaLichManifestVersionThree = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifestVersionThree", + LotusTypesGameNemesisKuvaLichKuvaLichManifestVersionTwo = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifestVersionTwo" +} + +export interface OperatorAmp { + ItemType: string; + Configs: KubrowPetConfig[]; + ModularParts?: string[]; + XP?: number; + UpgradeVer?: number; + ItemName?: string; + Features?: number; + ItemId: Oid; +} + +export interface OperatorLoadOut { + Skins: string[]; + pricol?: Color; + attcol?: Color; + eyecol: Color; + facial?: Color; + sigcol?: OperatorLoadOutSigcol; + OperatorAmp?: Oid; + Upgrades?: string[]; + AbilityOverride: AbilityOverride; + ItemId: Oid; +} + +export interface AbilityOverride { + Ability: string; + Index: number; +} + +export interface PendingCoupon { + Expiry: Date; + Discount: number; +} + +export interface PendingRecipe { + ItemType: string; + CompletionDate: Date; + ItemId: Oid; +} + +export interface PendingTrade { + State: number; + SelfReady: boolean; + BuddyReady: boolean; + Giving?: Giving; + Revision: number; + Getting: Getting; + ItemId: Oid; + ClanTax?: number; +} + +export interface Getting { + RandomUpgrades?: RandomUpgrade[]; + _SlotOrderInfo: GettingSlotOrderInfo[]; + PremiumCredits?: number; +} + +export interface RandomUpgrade { + UpgradeFingerprint: UpgradeFingerprint; + ItemType: string; + ItemId: Oid; +} + +export interface UpgradeFingerprint { + compat: string; + lim: number; + lvlReq: number; + pol: FocusSchool; + buffs: Buff[]; + curses: Buff[]; +} + +export interface Buff { + Tag: string; + Value: number; +} + +export enum GettingSlotOrderInfo { + Empty = "", + LotusUpgradesModsRandomizedPlayerMeleeWeaponRandomModRare0 = "/Lotus/Upgrades/Mods/Randomized/PlayerMeleeWeaponRandomModRare:0", + P = "P" +} + +export interface Giving { + RawUpgrades: Consumable[]; + _SlotOrderInfo: GivingSlotOrderInfo[]; +} + +export enum GivingSlotOrderInfo { + Empty = "", + LotusTypesSentinelsSentinelPreceptsItemVacum = "/Lotus/Types/Sentinels/SentinelPrecepts/ItemVacum", + LotusUpgradesModsPistolDualStatElectEventPistolMod = "/Lotus/Upgrades/Mods/Pistol/DualStat/ElectEventPistolMod" +} + +export interface PeriodicMissionCompletion { + date: Date; + tag: string; + count?: number; +} + +export interface PersonalGoalProgress { + Count: number; + Tag: string; + Best?: number; + _id: Oid; + ReceivedClanReward0?: boolean; + ReceivedClanReward1?: boolean; +} + +export interface PersonalTechProject { + State: number; + ReqCredits: number; + ItemType: string; + ReqItems: Consumable[]; + CompletionDate?: Date; + ItemId: Oid; + ProductCategory?: string; + CategoryItemId?: Oid; + HasContributions?: boolean; +} + +export interface PlayerSkills { + LPP_SPACE: number; + LPS_GUNNERY: number; + LPS_PILOTING: number; + LPS_ENGINEERING: number; + LPS_TACTICAL: number; + LPS_COMMAND: number; +} + +export interface QuestKey { + Progress: Progress[]; + unlock: boolean; + Completed: boolean; + ItemType: string; + CompletionDate?: Date; +} + +export interface Progress { + c: number; + i: boolean; + m: boolean; + b?: any[]; +} + +export interface RawUpgrade { + ItemCount: number; + LastAdded: Oid; + ItemType: string; +} + +export interface Scoop { + ItemType: string; + Configs: ScoopConfig[]; + UpgradeVer: number; + ItemId: Oid; +} + +export interface ScoopConfig { + pricol?: Color; +} + +export interface SeasonChallengeHistory { + challenge: string; + id: string; +} + +export interface SentientSpawnChanceBoosters { + numOceanMissionsCompleted: number; +} + +export interface SentinelWeapon { + ItemType: string; + Configs: SentinelWeaponConfig[]; + UpgradeVer?: number; + XP?: number; + ItemId: Oid; + Features?: number; + Polarity?: Polarity[]; + Polarized?: number; +} + +export interface SentinelWeaponConfig { + Skins?: FluffySkin[]; + Upgrades?: string[]; +} + +export enum FluffySkin { + Empty = "", + LotusUpgradesSkinsHolsterCustomizationsGlaiveInPlace = "/Lotus/Upgrades/Skins/HolsterCustomizations/GlaiveInPlace", + LotusUpgradesSkinsHolsterCustomizationsPistolHipsR = "/Lotus/Upgrades/Skins/HolsterCustomizations/PistolHipsR", + LotusUpgradesSkinsHolsterCustomizationsRifleUpperBack = "/Lotus/Upgrades/Skins/HolsterCustomizations/RifleUpperBack" +} + +export interface Sentinel { + ItemType: string; + Configs: KubrowPetConfig[]; + UpgradeVer: number; + XP: number; + Features?: number; + Polarity?: Polarity[]; + Polarized?: number; + ItemId: Oid; +} + +export interface Settings { + FriendInvRestriction: string; + GiftMode: string; + GuildInvRestriction: string; + ShowFriendInvNotifications: boolean; + TradingRulesConfirmed: boolean; +} + +export interface Ship { + ItemType: string; + ShipExterior: Terior; + AirSupportPower: string; + ItemId: Oid; +} + +export interface SpaceGun { + ItemType: string; + Configs: SpaceGunConfig[]; + XP?: number; + UpgradeVer?: number; + ItemId: Oid; + Features?: number; + Polarized?: number; + Polarity?: Polarity[]; + UpgradeType?: UpgradeType; + UpgradeFingerprint?: string; + ItemName?: string; +} + +export interface SpaceGunConfig { + Skins?: string[]; + pricol?: Color; + Upgrades?: string[]; +} + +export interface Space { + ItemType: string; + Configs: KubrowPetConfig[]; + XP: number; + UpgradeVer: number; + ItemId: Oid; + Features?: number; +} + +export interface SpecialItem { + ItemType: string; + Configs: SpecialItemConfig[]; + XP?: number; + UpgradeVer?: number; + Features: number; + ItemId: Oid; + Polarized?: number; + Polarity?: Polarity[]; + ModSlotPurchases?: number; +} + +export interface SpecialItemConfig { + Upgrades?: string[]; + pricol?: Color; + Skins?: string[]; + attcol?: Color; + eyecol?: PurpleCol; + sigcol?: PurpleCol; + Name?: string; +} + +export interface PurpleCol { + en: number; +} + +export interface SpectreLoadout { + LongGuns: string; + Melee: string; + Pistols: string; + PistolsFeatures: number; + PistolsModularParts: string[]; + Suits: string; + ItemType: string; +} + +export interface StepSequencer { + NotePacks: NotePacks; + FingerPrint: string; + Name: string; + ItemId: Oid; +} + +export interface NotePacks { + MELODY: string; + BASS: string; + PERCUSSION: string; +} + +export interface ISuitDocument extends ISuitDatabase, Document {} + +export interface ISuitResponse extends ISuitDatabase { + ItemId: Oid; +} + +export interface ISuitDatabase { + ItemType: string; + Configs: SuitConfig[]; + UpgradeVer?: number; + XP?: number; + InfestationDate?: Date; + Features?: number; + Polarity?: Polarity[]; + Polarized?: number; + ModSlotPurchases?: number; + ItemId: Oid; + FocusLens?: string; + UnlockLevel?: number; +} + +export interface SuitConfig { + Skins?: string[]; + pricol?: Color; + attcol?: Color; + eyecol?: Color; + sigcol?: Color; + Upgrades?: string[]; + Songs?: Song[]; + Name?: string; + AbilityOverride?: AbilityOverride; + PvpUpgrades?: string[]; + ugly?: boolean; +} + +export interface Song { + m?: string; + b?: string; + p?: string; + s: string; +} + +export interface TauntHistory { + node: string; + state: string; +} + +export interface WeaponSkin { + ItemType: string; + ItemId: Oid; +} + +export interface WebFlags { + activeBuyPlat: number; + noShow2FA: boolean; + Tennocon2018Digital: boolean; + VisitPrimeAccess: Date; + VisitTennocon2019: Date; + enteredSC2019: Date; + VisitPrimeVault: Date; + VisitBuyPlatinum: Date; + ClickedSku_640_Page__en_buyplatinum: Date; + ClickedSku_640_Page__buyplatinum: Date; + VisitStarterPack: Date; + Tennocon2020Digital: boolean; + Anniversary2021: boolean; + HitDownloadBtn: Date; +} diff --git a/static/fixed_responses/getShip.json b/static/fixed_responses/getShip.json index f15c1be8..c9b83d1c 100644 --- a/static/fixed_responses/getShip.json +++ b/static/fixed_responses/getShip.json @@ -1,5 +1,5 @@ { - "ShipOwnerId": "removed", + "ShipOwnerId": "647bce8a1caba352f90b6a09", "Ship": { "Rooms": [ { "Name": "AlchemyRoom", "MaxCapacity": 1600 }, @@ -9,7 +9,15 @@ { "Name": "OutsideRoom", "MaxCapacity": 1600 }, { "Name": "PersonalQuartersRoom", "MaxCapacity": 1600 } ], - "ContentUrlSignature": "removed" + "ContentUrlSignature": "removed", + "Features": [ + "/Lotus/Types/Items/ShipFeatureItems/EarthNavigationFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/SocialMenuFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/ModsFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/FoundryFeatureItem", + "/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem" + ] }, "Apartment": { "Rooms": [ diff --git a/static/fixed_responses/new_inventory.json b/static/fixed_responses/new_inventory.json new file mode 100644 index 00000000..8c112a7a --- /dev/null +++ b/static/fixed_responses/new_inventory.json @@ -0,0 +1,121 @@ +{ + "SubscribedToEmails": 0, + "Created": { "$date": { "$numberLong": "1685829131" } }, + "SubscribedToEmailsPersonalized": 0, + "RewardSeed": -5604904486637265640, + "CrewMemberBin": { "Slots": 3 }, + "CrewShipSalvageBin": { "Slots": 8 }, + "DrifterMelee": [{ "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemId": { "$oid": "647bb619e15fa43f0ee4b1b1" } }], + "FusionPoints": 0, + "MechBin": { "Slots": 4 }, + "OperatorAmpBin": { "Slots": 8 }, + "PveBonusLoadoutBin": { "Slots": 0 }, + "PvpBonusLoadoutBin": { "Slots": 0 }, + "RandomModBin": { "Slots": 15 }, + "RegularCredits": 0, + "SentinelBin": { "Slots": 10 }, + "SpaceSuitBin": { "Slots": 4 }, + "SpaceWeaponBin": { "Slots": 4 }, + "SuitBin": { "Slots": 2 }, + "WeaponBin": { "Slots": 8 }, + "LastInventorySync": { "$oid": "647bb5d79f963c9d24668257" }, + "NextRefill": { "$date": { "$numberLong": "1685829131" } }, + "ActiveLandscapeTraps": [], + "ChallengeProgress": [], + "CrewMembers": [], + "CrewShips": [], + "CrewShipHarnesses": [], + "CrewShipSalvagedWeapons": [], + "CrewShipSalvagedWeaponSkins": [], + "CrewShipWeapons": [], + "CrewShipWeaponSkins": [], + "DataKnives": [], + "DrifterGuns": [], + "Drones": [], + "Horses": [], + "Hoverboards": [], + "KubrowPets": [], + "KubrowPetEggs": [], + "KubrowPetPrints": [], + "LongGuns": [], + "MechSuits": [], + "Melee": [], + "MoaPets": [], + "OperatorAmps": [], + "OperatorLoadOuts": [], + "AdultOperatorLoadOuts": [], + "KahlLoadOuts": [], + "PendingRecipes": [], + "PersonalGoalProgress": [], + "PersonalTechProjects": [], + "Pistols": [], + "QualifyingInvasions": [], + "RepVotes": [], + "Scoops": [], + "Sentinels": [], + "SentinelWeapons": [], + "Ships": [], + "SpaceGuns": [], + "SpaceMelee": [], + "SpaceSuits": [], + "SpecialItems": [], + "StepSequencers": [], + "Suits": [], + "Upgrades": [], + "WeaponSkins": [], + "Boosters": [], + "Consumables": [], + "EmailItems": [], + "FlavourItems": [], + "FocusUpgrades": [], + "FusionTreasures": [], + "LeagueTickets": [], + "LevelKeys": [], + "LoreFragmentScans": [], + "MiscItems": [], + "PendingSpectreLoadouts": [], + "Quests": [], + "QuestKeys": [], + "RawUpgrades": [], + "Recipes": [], + "Robotics": [], + "ShipDecorations": [], + "SpectreLoadouts": [], + "XPInfo": [], + "CrewShipAmmo": [], + "CrewShipRawSalvage": [], + "EvolutionProgress": [], + "Missions": [], + "TauntHistory": [], + "CompletedSyndicates": [], + "UsedDailyDeals": [], + "DailyAffiliation": 16000, + "DailyAffiliationPvp": 16000, + "DailyAffiliationLibrary": 16000, + "DailyAffiliationCetus": 16000, + "DailyAffiliationQuills": 16000, + "DailyAffiliationSolaris": 16000, + "DailyAffiliationVentkids": 16000, + "DailyAffiliationVox": 16000, + "DailyAffiliationEntrati": 16000, + "DailyAffiliationNecraloid": 16000, + "DailyAffiliationZariman": 16000, + "DailyAffiliationKahl": 16000, + "DailyFocus": 250000, + "GiftsRemaining": 8, + "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 + }, + "DuviriInfo": { "Seed": 5898912197983600352, "NumCompletions": 0 }, + "TradesRemaining": 0, + "HasContributedToDojo": false, + "HasResetAccount": false, + "PendingCoupon": { "Expiry": { "$date": { "$numberLong": "0" } }, "Discount": 0 }, + "PremiumCreditsFree": 0 +} diff --git a/static/fixed_responses/postTutorialInventory.json b/static/fixed_responses/postTutorialInventory.json new file mode 100644 index 00000000..1c2d8721 --- /dev/null +++ b/static/fixed_responses/postTutorialInventory.json @@ -0,0 +1,145 @@ +{ + "SubscribedToEmails": 0, + "Created": { "$date": { "$numberLong": "1685829131" } }, + "SubscribedToEmailsPersonalized": 0, + "RewardSeed": -5604904486637265640, + "CrewMemberBin": { "Slots": 3 }, + "CrewShipSalvageBin": { "Slots": 8 }, + "DrifterMelee": [{ "ItemType": "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords", "ItemId": { "$oid": "647bd268c547fe5b2909e715" } }], + "FusionPoints": 0, + "MechBin": { "Slots": 4 }, + "OperatorAmpBin": { "Slots": 8 }, + "PveBonusLoadoutBin": { "Slots": 0 }, + "PvpBonusLoadoutBin": { "Slots": 0 }, + "RandomModBin": { "Slots": 15 }, + "RegularCredits": 3000, + "SentinelBin": { "Slots": 10 }, + "SpaceSuitBin": { "Slots": 4 }, + "SpaceWeaponBin": { "Slots": 4 }, + "SuitBin": { "Slots": 1 }, + "WeaponBin": { "Slots": 5 }, + "DailyAffiliation": 16000, + "DailyAffiliationCetus": 16000, + "DailyAffiliationEntrati": 16000, + "DailyAffiliationKahl": 16000, + "DailyAffiliationLibrary": 16000, + "DailyAffiliationNecraloid": 16000, + "DailyAffiliationPvp": 16000, + "DailyAffiliationQuills": 16000, + "DailyAffiliationSolaris": 16000, + "DailyAffiliationVentkids": 16000, + "DailyAffiliationVox": 16000, + "DailyAffiliationZariman": 16000, + "DailyFocus": 250000, + "DuviriInfo": { "Seed": 5898912197983600352, "NumCompletions": 0 }, + "GiftsRemaining": 8, + "TradesRemaining": 0, + "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": [ + { "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": [], + "Hoverboards": [], + "KubrowPets": [], + "KubrowPetEggs": [], + "KubrowPetPrints": [], + "MechSuits": [], + "MoaPets": [], + "OperatorAmps": [], + "OperatorLoadOuts": [], + "AdultOperatorLoadOuts": [], + "KahlLoadOuts": [], + "PendingRecipes": [], + "PersonalGoalProgress": [], + "PersonalTechProjects": [], + "QualifyingInvasions": [], + "RepVotes": [], + "Sentinels": [], + "SentinelWeapons": [], + "SpaceGuns": [], + "SpaceMelee": [], + "SpaceSuits": [], + "SpecialItems": [], + "StepSequencers": [], + "Upgrades": [], + "Boosters": [], + "EmailItems": [], + "FocusUpgrades": [], + "FusionTreasures": [], + "LeagueTickets": [], + "LevelKeys": [], + "LoreFragmentScans": [], + "MiscItems": [], + "PendingSpectreLoadouts": [], + "Quests": [], + "Robotics": [], + "ShipDecorations": [], + "SpectreLoadouts": [], + "XPInfo": [], + "CrewShipAmmo": [], + "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, + "PendingCoupon": { "Expiry": { "$date": { "$numberLong": "0" } }, "Discount": 0 }, + "PremiumCredits": 50 +} -- 2.47.2 From 099600e79fabe2cc5eaf98aaa11fdc84ddce280b Mon Sep 17 00:00:00 2001 From: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:18:33 +0200 Subject: [PATCH 04/13] Delete dronesController.ts --- src/controllers/api/dronesController.ts | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/controllers/api/dronesController.ts diff --git a/src/controllers/api/dronesController.ts b/src/controllers/api/dronesController.ts deleted file mode 100644 index 7a55e00e..00000000 --- a/src/controllers/api/dronesController.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { RequestHandler } from "express"; - -const dronesController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end(Buffer.from([0x7b, 0x7d, 0x0a])); -}; - -export { dronesController }; -- 2.47.2 From 0e198a7c3aa8d4d37034645ed4d47d6ef15955bd Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:19:21 +0200 Subject: [PATCH 05/13] Revert "Delete dronesController.ts" This reverts commit 099600e79fabe2cc5eaf98aaa11fdc84ddce280b. --- src/controllers/api/dronesController.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/controllers/api/dronesController.ts diff --git a/src/controllers/api/dronesController.ts b/src/controllers/api/dronesController.ts new file mode 100644 index 00000000..7a55e00e --- /dev/null +++ b/src/controllers/api/dronesController.ts @@ -0,0 +1,11 @@ +import { RequestHandler } from "express"; + +const dronesController: RequestHandler = (_req, res) => { + res.writeHead(200, { + "Content-Type": "text/html", + "Content-Length": "3" + }); + res.end(Buffer.from([0x7b, 0x7d, 0x0a])); +}; + +export { dronesController }; -- 2.47.2 From d3b12ef836c0634bf71ed8710f9500b2458f9c19 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:20:25 +0200 Subject: [PATCH 06/13] stash --- src/controllers/api/dronesController.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/controllers/api/dronesController.ts b/src/controllers/api/dronesController.ts index 7a55e00e..bff5086c 100644 --- a/src/controllers/api/dronesController.ts +++ b/src/controllers/api/dronesController.ts @@ -1,11 +1,7 @@ import { RequestHandler } from "express"; const dronesController: RequestHandler = (_req, res) => { - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": "3" - }); - res.end(Buffer.from([0x7b, 0x7d, 0x0a])); + res.json({}); }; export { dronesController }; -- 2.47.2 From 2c1261b3c41428fa1a9d96d050ad368e6581782a Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:28:55 +0200 Subject: [PATCH 07/13] git sucks --- src/controllers/api/getNewRewardSeedController.ts | 2 +- src/controllers/api/hostSessionController.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/api/getNewRewardSeedController.ts b/src/controllers/api/getNewRewardSeedController.ts index 851b9d4e..d700ac5d 100644 --- a/src/controllers/api/getNewRewardSeedController.ts +++ b/src/controllers/api/getNewRewardSeedController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const getNewRewardSeedController: RequestHandler = (_req, res) => { - res.sendStatus(200); + res.json({ rewardSeed: 5867309943877621023 }); }; export { getNewRewardSeedController }; diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index 812332cf..78d4f395 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; const hostSessionController: RequestHandler = (_req, res) => { - res.json({ sessionId: { $oid: "64777916e794cfc5abdd69ea" }, rewardSeed: -1492798783199571432 }); + res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 }); }; export { hostSessionController }; -- 2.47.2 From a4cd721a6a5c02fc4c69ddbd3439093a97347556 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:32:35 +0200 Subject: [PATCH 08/13] hopefully we good now --- src/controllers/api/findSessionsController.ts | 11 ++--------- src/controllers/api/hostSessionController.ts | 2 ++ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/findSessionsController.ts b/src/controllers/api/findSessionsController.ts index f749f00a..32b1cf33 100644 --- a/src/controllers/api/findSessionsController.ts +++ b/src/controllers/api/findSessionsController.ts @@ -1,16 +1,9 @@ import { RequestHandler } from "express"; const findSessionsController: RequestHandler = (_req, res) => { - const data = Buffer.from([ - 0x7b, 0x22, 0x71, 0x75, 0x65, 0x72, 0x79, 0x49, 0x64, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d - ]); + console.log("FindSession Request:", JSON.parse(_req.body)); - res.writeHead(200, { - "Content-Type": "text/html", - "Content-Length": data.length - }); - res.end(data); + res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 }); }; export { findSessionsController }; diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index 78d4f395..bbeb8eb7 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -1,6 +1,8 @@ import { RequestHandler } from "express"; const hostSessionController: RequestHandler = (_req, res) => { + console.log("HostSession Request:", JSON.parse(_req.body)); + res.json({ sessionId: { $oid: "64768f104722f795300c9fc0" }, rewardSeed: 5867309943877621023 }); }; -- 2.47.2 From c929a56d2b0a916654cc138287b217bd6682b153 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:37:33 +0200 Subject: [PATCH 09/13] hit thumbs up and subscribe --- src/controllers/dynamic/aggregateSessionsController.ts | 3 ++- src/services/inventoryService.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/dynamic/aggregateSessionsController.ts b/src/controllers/dynamic/aggregateSessionsController.ts index e3c1659b..a12c8d40 100644 --- a/src/controllers/dynamic/aggregateSessionsController.ts +++ b/src/controllers/dynamic/aggregateSessionsController.ts @@ -1,7 +1,8 @@ import { RequestHandler } from "express"; +import aggregateSessions from "@/static/fixed_responses/aggregateSessions.json"; const aggregateSessionsController: RequestHandler = (_req, res) => { - res.json({}); + res.json(aggregateSessions); }; export { aggregateSessionsController }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ce38d5b2..060aa5ff 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1,5 +1,5 @@ import { Inventory } from "../models/inventoryModel"; -import new_inventory from "@/static/fixed_responses/new_inventory.json"; +import new_inventory from "@/static/fixed_responses/postTutorialInventory.json"; import config from "@/config.json"; import { Types } from "mongoose"; -- 2.47.2 From 2d312a97a3b234b4444e24ef86816cc9ca2a0a71 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:42:25 +0200 Subject: [PATCH 10/13] suggestions --- src/helpers/inventoryHelpers.ts | 2 +- src/services/inventoryService.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/inventoryHelpers.ts b/src/helpers/inventoryHelpers.ts index ca0d0e5c..7879c007 100644 --- a/src/helpers/inventoryHelpers.ts +++ b/src/helpers/inventoryHelpers.ts @@ -1,4 +1,4 @@ -import { IInventoryDatabase, IInventoryResponse } from "../types/inventoryTypes"; +import { IInventoryDatabase, IInventoryResponse } from "@/src/types/inventoryTypes"; const toInventoryResponse = (inventoryDatabase: IInventoryDatabase): IInventoryResponse => { // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 060aa5ff..36f49d06 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1,4 +1,4 @@ -import { Inventory } from "../models/inventoryModel"; +import { Inventory } from "@/src/models/inventoryModel"; import new_inventory from "@/static/fixed_responses/postTutorialInventory.json"; import config from "@/config.json"; import { Types } from "mongoose"; -- 2.47.2 From dd8438cf26c84ce3586449104d4682d8872463ec Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:47:09 +0200 Subject: [PATCH 11/13] 1 --- src/controllers/api/inventoryController.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 6327aa25..2eb2e5b4 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -13,13 +13,14 @@ const inventoryController: RequestHandler = async (request: Request, response: R console.log(accountId); const inventory = await Inventory.findOne({ accountOwnerId: accountId }); // has the accountOwnerId field to find a corresponding inventory - const inventoryJSON = inventory?.toJSON(); - if (!inventoryJSON) { + if (!inventory) { response.status(400).json({ error: "inventory was undefined" }); return; } + const inventoryJSON = inventory.toJSON(); + const inventoreResponse = toInventoryResponse(inventoryJSON); // remove the accountOwnerId for the response response.json(inventoreResponse); -- 2.47.2 From c4fcc3651b04c6b1d2d1f1920967e521d7f4468b Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:49:15 +0200 Subject: [PATCH 12/13] 2 --- .eslintrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index dc83cd5b..9c2b88f9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,7 +11,6 @@ "node": true }, "rules": { - "@typescript-eslint/no-misused-promises": "off", "prettier/prettier": "error", "@typescript-eslint/semi": ["error"], "@typescript-eslint/explicit-function-return-type": "off", -- 2.47.2 From cc7e97d53d07bb5dfa6d3c5f12e4ab5aee3920e5 Mon Sep 17 00:00:00 2001 From: Ordis <134585663+OrdisPrime@users.noreply.github.com> Date: Sun, 4 Jun 2023 02:58:40 +0200 Subject: [PATCH 13/13] 3 --- src/controllers/api/inventoryController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 2eb2e5b4..c7ad069c 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -12,7 +12,7 @@ const inventoryController: RequestHandler = async (request: Request, response: R } console.log(accountId); - const inventory = await Inventory.findOne({ accountOwnerId: accountId }); // has the accountOwnerId field to find a corresponding inventory + const inventory = await Inventory.findOne({ accountOwnerId: accountId }); if (!inventory) { response.status(400).json({ error: "inventory was undefined" }); @@ -21,7 +21,7 @@ const inventoryController: RequestHandler = async (request: Request, response: R const inventoryJSON = inventory.toJSON(); - const inventoreResponse = toInventoryResponse(inventoryJSON); // remove the accountOwnerId for the response + const inventoreResponse = toInventoryResponse(inventoryJSON); response.json(inventoreResponse); }; -- 2.47.2