diff --git a/.env.example b/.env.example index ed317f00..fc389f4d 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,15 @@ -MONGODB_URL='mongodb://127.0.0.1:27017/wf_emulator' -PORT=3001 +MONGODB_URL='mongodb://127.0.0.1:27017/openWF' -DATABASE_PORT=27017 +#DOCKER ONLY +DATABASE_PORT=27017 DATABASE_USERNAME=root -DATABASE_PASSWORD=root +DATABASE_PASSWORD=database +#DOCKER ONLY END + +# save logs to file +LOG_FILES=true +#possible log levels: { fatal: 0, error: 1, warn: 2, info: 3, http: 4, debug: 5, trace: 6 } +LOG_LEVEL=trace + + diff --git a/.gitignore b/.gitignore index 23c4cd81..7e1fa4a4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ yarn.lock # JetBrains/webstorm configs .idea/ + +# logs +/logs \ No newline at end of file diff --git a/config.json b/config.json index 64ad5d3c..b6f0bf82 100644 --- a/config.json +++ b/config.json @@ -1,12 +1,12 @@ { "autoCreateAccount": true, - "buildLabel": "2023.11.06.13.39/1TcsxlckBF8b8jiE4E3eQg", + "buildLabel": "2023.12.19.15.34/ccslDhWoFeu8lZi6eT+HXg", "matchmakingBuildId": "9186822613720189878", - "version": "34.0.8", - "worldSeed": "LPilWYzp4Sgk9VoUjNUeQ0St81TzYSKmtjx/yZRdT26a6C/Rd8/5q9QrTbLPD08iv1z+Byulw+0fVagfp7JB0b3uUi8G03Bq37HHFtqARTmukBuW3FYmrr5pyLhSz5woWo/HR63oUSaX6lGvnjmWLf6/5AW/QNkjgD2lDqaYIh/IumYtBon+RtlKn/np62ljsK+vlnorw2zfXA95gdvQAMeBNk/G2SMTPjlQJdlRTjVhfRuJTlywsIv+Qy4ammWGEcms3uzRnbS8KzQohiD7wpd5GW6nbjim6BOkbgaTGjz0HOix8oVoqrJJNLgwH6rcFWWvh2MuOo+ehbNfW3Z5Bg==", + "version": "35.0.4", + "worldSeed": "t8Bnmc5fxNpCmCM+xPwf/HB4EVWUN9ErRdDro1yMiEkFmzHL74Khle/apjMMYvli5MS9nu1ZAi83e2wCAa4o9uSMhgVAocPQbWIYHX/AgHPpb0kFszqpcWF20QaCRW6ebAXduGBBOvsU3h5zDCBgRPdqzd64BIYG8cD+nmpnHKPfq7HlTFQCOsq3ipHgGSZypji5oGxXdMKwDVP/uMFmiosjr8XCVnw4aTPq1MDjSBBbNlc4KIJpAokdOUokrbo+7jvbfSQvKCZiNxSEyDjxxCqwdJn3GyIk/yjpXPWmtS5GS1/R9+0DrjLs+ra3bKWeUlwRFKl4zjeyFivy/1nZkw==", "skipStoryModeChoice": true, "skipTutorial": true, "testMission": true, "testQuestKey": true, - "infinitePlatinum": false + "infiniteResources": true } diff --git a/package-lock.json b/package-lock.json index de59907c..873314d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,9 @@ "dotenv": "^16.1.3", "express": "^5.0.0-beta.1", "mongoose": "^8.0.2", - "warframe-items": "1.1260.121" + "warframe-items": "1.1260.121", + "winston": "^3.11.0", + "winston-daily-rotate-file": "^4.7.1" }, "devDependencies": { "@tsconfig/node20": "^1.0.0", @@ -42,6 +44,14 @@ "node": ">=0.10.0" } }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -54,6 +64,16 @@ "node": ">=12" } }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -426,6 +446,11 @@ "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", "dev": true }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -1043,6 +1068,11 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1248,6 +1278,15 @@ "node": ">= 6" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1263,8 +1302,38 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -1456,6 +1525,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -1842,6 +1916,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1854,6 +1933,14 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", + "dependencies": { + "moment": "^2.29.1" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1918,6 +2005,11 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2152,6 +2244,11 @@ "node": ">= 0.10" } }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2337,6 +2434,11 @@ "node": ">=12.0.0" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2371,6 +2473,27 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2507,6 +2630,14 @@ "node": ">=10" } }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, "node_modules/mongodb": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz", @@ -2698,6 +2829,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2727,6 +2866,14 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", @@ -3000,6 +3147,19 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3225,6 +3385,14 @@ } ] }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3336,6 +3504,14 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3372,6 +3548,14 @@ "memory-pager": "^1.0.2" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -3380,6 +3564,14 @@ "node": ">= 0.6" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3465,6 +3657,11 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3523,6 +3720,14 @@ "tree-kill": "cli.js" } }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ts-api-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", @@ -3740,6 +3945,11 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3802,6 +4012,68 @@ "node": ">= 8" } }, + "node_modules/winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-daily-rotate-file": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", + "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", + "dependencies": { + "file-stream-rotator": "^0.6.1", + "object-hash": "^2.0.1", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" + } + }, + "node_modules/winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 7416d812..dc945973 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.ts", "scripts": { "start": "node build/index.js", - "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts", + "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts ", "build": "tsc", "lint": "eslint --ext .ts .", "prettier": "prettier --write ." @@ -15,7 +15,9 @@ "dotenv": "^16.1.3", "express": "^5.0.0-beta.1", "mongoose": "^8.0.2", - "warframe-items": "1.1260.121" + "warframe-items": "1.1260.121", + "winston": "^3.11.0", + "winston-daily-rotate-file": "^4.7.1" }, "devDependencies": { "@tsconfig/node20": "^1.0.0", diff --git a/src/app.ts b/src/app.ts index 3ca8bfc8..bacdc926 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,20 +1,21 @@ import express from "express"; -//import { loginRouter } from "./routes/login"; -import { requestLogger, unknownEndpointHandler } from "@/src/middleware/middleware"; +import { unknownEndpointHandler } from "@/src/middleware/middleware"; +import { requestLogger } from "@/src/middleware/morgenMiddleware"; import { apiRouter } from "@/src/routes/api"; //import { testRouter } from "@/src/routes/test"; import { cacheRouter } from "@/src/routes/cache"; import bodyParser from "body-parser"; -import morgan from "morgan"; import { steamPacksController } from "@/src/controllers/misc/steamPacksController"; import { customRouter } from "@/src/routes/custom"; import { dynamicController } from "@/src/routes/dynamic"; import { statsRouter } from "@/src/routes/stats"; import { connectDatabase } from "@/src/services/mongoService"; +import { registerLogFileCreationListener } from "@/src/utils/logger"; +void registerLogFileCreationListener(); void connectDatabase(); const app = express(); @@ -22,7 +23,7 @@ const app = express(); app.use(bodyParser.raw()); app.use(express.json()); app.use(bodyParser.text()); -app.use(morgan("dev")); +app.use(requestLogger); //app.use(requestLogger); app.use("/api", apiRouter); diff --git a/src/controllers/api/findSessionsController.ts b/src/controllers/api/findSessionsController.ts index 9e4da0f5..f6983910 100644 --- a/src/controllers/api/findSessionsController.ts +++ b/src/controllers/api/findSessionsController.ts @@ -1,23 +1,26 @@ import { RequestHandler } from "express"; import { getSession } from "@/src/managers/sessionManager"; +import { logger } from "@/src/utils/logger"; +//TODO: cleanup const findSessionsController: RequestHandler = (_req, res) => { - console.log("FindSession Request:", JSON.parse(_req.body)); + const reqBody = JSON.parse(_req.body); + logger.debug("FindSession Request ", { reqBody }); let req = JSON.parse(_req.body); if (req.id != undefined) { - console.log("Found ID"); + logger.debug("Found ID"); let session = getSession(req.id); if (session) res.json({ queryId: req.queryId, Sessions: session }); else res.json({}); } else if (req.originalSessionId != undefined) { - console.log("Found OriginalSessionID"); + logger.debug("Found OriginalSessionID"); let session = getSession(req.originalSessionId); if (session) res.json({ queryId: req.queryId, Sessions: session }); else res.json({}); } else { - console.log("Found SessionRequest"); + logger.debug("Found SessionRequest"); let session = getSession(_req.body); if (session) res.json({ queryId: req.queryId, Sessions: session }); diff --git a/src/controllers/api/getCreditsController.ts b/src/controllers/api/getCreditsController.ts index a2a2ea6e..5f86de98 100644 --- a/src/controllers/api/getCreditsController.ts +++ b/src/controllers/api/getCreditsController.ts @@ -5,7 +5,7 @@ import { parseString } from "@/src/helpers/general"; // eslint-disable-next-line @typescript-eslint/no-misused-promises export const getCreditsController: RequestHandler = async (req, res) => { - if (config.infinitePlatinum) { + if (config.infiniteResources) { res.json({ RegularCredits: 999999999, TradesRemaining: 999999999, diff --git a/src/controllers/api/hostSessionController.ts b/src/controllers/api/hostSessionController.ts index c7ac7cb9..f602503e 100644 --- a/src/controllers/api/hostSessionController.ts +++ b/src/controllers/api/hostSessionController.ts @@ -1,10 +1,13 @@ import { RequestHandler } from "express"; import { createNewSession } from "@/src/managers/sessionManager"; +import { logger } from "@/src/utils/logger"; +import { ISession } from "@/src/types/session"; -const hostSessionController: RequestHandler = (_req, res) => { - console.log("HostSession Request:", JSON.parse(_req.body)); - let session = createNewSession(JSON.parse(_req.body), _req.query.accountId as string); - console.log("New Session Created: ", session); +const hostSessionController: RequestHandler = (req, res) => { + const hostSessionRequest = JSON.parse(req.body as string) as ISession; + logger.debug("HostSession Request", { hostSessionRequest }); + let session = createNewSession(hostSessionRequest, req.query.accountId as string); + logger.debug(`New Session Created`, { session }); res.json({ sessionId: { $oid: session.sessionId }, rewardSeed: 99999999 }); }; diff --git a/src/controllers/api/joinSessionController.ts b/src/controllers/api/joinSessionController.ts index 3cd6a7e0..7bf6785c 100644 --- a/src/controllers/api/joinSessionController.ts +++ b/src/controllers/api/joinSessionController.ts @@ -1,8 +1,10 @@ import { RequestHandler } from "express"; import { getSessionByID } from "@/src/managers/sessionManager"; +import { logger } from "@/src/utils/logger"; const joinSessionController: RequestHandler = (_req, res) => { - console.log("JoinSession Request:", JSON.parse(_req.body)); + const reqBody = JSON.parse(_req.body); + logger.debug(`JoinSession Request`, { reqBody }); let req = JSON.parse(_req.body); let session = getSessionByID(req.sessionIds[0]); res.json({ rewardSeed: session?.rewardSeed, sessionId: { $oid: session?.sessionId } }); diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index e488f080..3f25182b 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -8,6 +8,7 @@ import { Account } from "@/src/models/loginModel"; import { createAccount, isCorrectPassword } from "@/src/services/loginService"; import { ILoginResponse } from "@/src/types/loginTypes"; import { DTLS, groups, HUB, IRC, Nonce, NRS, platformCDNs } from "@/static/fixed_responses/login_static"; +import { logger } from "@/src/utils/logger"; // eslint-disable-next-line @typescript-eslint/no-misused-promises const loginController: RequestHandler = async (request, response) => { @@ -30,7 +31,7 @@ const loginController: RequestHandler = async (request, response) => { ConsentNeeded: false, TrackedSettings: [] }); - console.log("creating new account"); + logger.debug("created new account"); // eslint-disable-next-line @typescript-eslint/no-unused-vars const { email, password, ...databaseAccount } = newAccount; const newLoginResponse: ILoginResponse = { diff --git a/src/controllers/api/rerollRandomModController.ts b/src/controllers/api/rerollRandomModController.ts index eabffb2e..0a3bff22 100644 --- a/src/controllers/api/rerollRandomModController.ts +++ b/src/controllers/api/rerollRandomModController.ts @@ -1,7 +1,8 @@ +import { logger } from "@/src/utils/logger"; import { RequestHandler } from "express"; const rerollRandomModController: RequestHandler = (_req, res) => { - console.log("RerollRandomMod Request:", _req.body.toString("hex").replace(/(.)(.)/g, "$1$2 ")); + logger.debug("RerollRandomMod Request", { info: _req.body.toString("hex").replace(/(.)(.)/g, "$1$2 ") }); res.json({}); }; diff --git a/src/controllers/api/saveLoadout.ts b/src/controllers/api/saveLoadout.ts index 85a88a5d..7d15593a 100644 --- a/src/controllers/api/saveLoadout.ts +++ b/src/controllers/api/saveLoadout.ts @@ -3,6 +3,7 @@ import util from "util"; import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes"; import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService"; import { parseString } from "@/src/helpers/general"; +import { logger } from "@/src/utils/logger"; // eslint-disable-next-line @typescript-eslint/no-misused-promises export const saveLoadoutController: RequestHandler = async (req, res) => { @@ -24,7 +25,7 @@ export const saveLoadoutController: RequestHandler = async (req, res) => { res.status(200).end(); } catch (error: unknown) { if (error instanceof Error) { - console.log("error in saveLoadoutController", error.message); + logger.error(`error in saveLoadoutController: ${error.message}`); res.status(400).json({ error: error.message }); } else { res.status(400).json({ error: "unknown error" }); diff --git a/src/controllers/api/setBootLocationController.ts b/src/controllers/api/setBootLocationController.ts index a2e745bc..b469c349 100644 --- a/src/controllers/api/setBootLocationController.ts +++ b/src/controllers/api/setBootLocationController.ts @@ -1,6 +1,6 @@ +import { logger } from "@/src/utils/logger"; import { Request, Response } from "express"; -export const setBootLocationController = (req: Request, res: Response) => { - console.log("setBootLocationController", req.query); +export const setBootLocationController = (_req: Request, res: Response) => { res.end(); }; diff --git a/src/controllers/api/updateSessionController.ts b/src/controllers/api/updateSessionController.ts index e949d83e..c6a5f555 100644 --- a/src/controllers/api/updateSessionController.ts +++ b/src/controllers/api/updateSessionController.ts @@ -1,5 +1,6 @@ import { RequestHandler } from "express"; import { updateSession } from "@/src/managers/sessionManager"; +import { logger } from "@/src/utils/logger"; const updateSessionGetController: RequestHandler = (_req, res) => { res.json({}); diff --git a/src/helpers/general.ts b/src/helpers/general.ts index afc52fd8..23fb9df6 100644 --- a/src/helpers/general.ts +++ b/src/helpers/general.ts @@ -2,6 +2,13 @@ export const isEmptyObject = (obj: unknown): boolean => { return Boolean(obj && Object.keys(obj).length === 0 && obj.constructor === Object); }; +/* +alternative to isEmptyObject +export const isEmptyObject = (obj: object): boolean => { + return Object.keys(obj).length === 0; +}; +*/ + const isString = (text: unknown): text is string => { return typeof text === "string" || text instanceof String; }; diff --git a/src/index.ts b/src/index.ts index 689fa854..450a5be5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,7 @@ import http from "http"; import https from "https"; import fs from "node:fs"; import { app } from "./app"; +import { logger } from "./utils/logger"; //const morgan = require("morgan"); //const bodyParser = require("body-parser"); @@ -12,8 +13,8 @@ const options = { }; // const server = http.createServer(app).listen(80); -http.createServer(app).listen(80, () => console.log("server started on port 80")); -const server = https.createServer(options, app).listen(443, () => console.log("server started on port 443")); +http.createServer(app).listen(80, () => logger.info("cache server started on port 80")); +const server = https.createServer(options, app).listen(443, () => logger.info("game server started on port 443")); // server.keepAliveTimeout = 60 * 1000 + 1000; // server.headersTimeout = 60 * 1000 + 2000; diff --git a/src/managers/sessionManager.ts b/src/managers/sessionManager.ts index e6558d57..1138b310 100644 --- a/src/managers/sessionManager.ts +++ b/src/managers/sessionManager.ts @@ -1,4 +1,5 @@ import { ISession, IFindSessionRequest } from "@/src/types/session"; +import { logger } from "@/src/utils/logger"; const sessions: ISession[] = []; @@ -43,11 +44,12 @@ function getSessionByID(sessionId: string): ISession | undefined { return sessions.find(session => session.sessionId === sessionId); } +//TODO: proper typings function getSession(sessionIdOrRequest: string | IFindSessionRequest): any[] { if (typeof sessionIdOrRequest === "string") { const session = sessions.find(session => session.sessionId === sessionIdOrRequest); if (session) { - console.log("Found Sessions:", session); + logger.debug("Found Sessions:", { session }); return [ { createdBy: session.creatorId, @@ -65,7 +67,7 @@ function getSession(sessionIdOrRequest: string | IFindSessionRequest): any[] { return false; } } - console.log("Found Matching Sessions:", matchingSessions); + logger.debug("Found Matching Sessions:", { matchingSessions }); return true; }); return matchingSessions.map(session => ({ diff --git a/src/middleware/middleware.ts b/src/middleware/middleware.ts index 1653864a..92a69de7 100644 --- a/src/middleware/middleware.ts +++ b/src/middleware/middleware.ts @@ -1,16 +1,17 @@ +import { logger } from "@/src/utils/logger"; import { NextFunction, Request, Response } from "express"; const unknownEndpointHandler = (request: Request, response: Response) => { - console.error("[ERROR] Unknown Endpoint", request.url); + logger.error(`unknown endpoint ${request.method} ${request.path}`); 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(); -}; +// 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(); +// }; -export { unknownEndpointHandler, requestLogger }; +export { unknownEndpointHandler }; diff --git a/src/middleware/morgenMiddleware.ts b/src/middleware/morgenMiddleware.ts new file mode 100644 index 00000000..396f39ca --- /dev/null +++ b/src/middleware/morgenMiddleware.ts @@ -0,0 +1,6 @@ +import morgan from "morgan"; +import { logger } from "@/src/utils/logger"; + +export const requestLogger = morgan("dev", { + stream: { write: message => logger.http(message) } +}); diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index e50da9d3..f51063a1 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -16,6 +16,7 @@ import { } from "@/src/types/inventoryTypes/inventoryTypes"; import { IGenericUpdate } from "../types/genericUpdate"; import { IArtifactsRequest, IMissionInventoryUpdateRequest } from "../types/requestTypes"; +import { logger } from "@/src/utils/logger"; export const createInventory = async (accountOwnerId: Types.ObjectId, loadOutPresetId: Types.ObjectId) => { try { @@ -107,7 +108,7 @@ export const updateCurrency = async (price: number, usePremium: boolean, account currencyChanges[path as currencyKeys] = -price; }); - console.log(currencyChanges, "changes"); + logger.debug(`currency changes `, { currencyChanges }); //let changes = {} as keyof currencyKeys; diff --git a/src/services/missionInventoryUpdateService .ts b/src/services/missionInventoryUpdateService .ts index cfee223a..f815627c 100644 --- a/src/services/missionInventoryUpdateService .ts +++ b/src/services/missionInventoryUpdateService .ts @@ -3,6 +3,7 @@ import { IMissionRewardResponse, IReward, IInventoryFieldType, inventoryFields } import missionsDropTable from "@/static/json/missions-drop-table.json"; import { modNames, relicNames, miscNames, resourceNames, gearNames, blueprintNames } from "@/static/data/items"; import { IMissionInventoryUpdateRequest } from "../types/requestTypes"; +import { logger } from "@/src/utils/logger"; // need reverse engineer rewardSeed, otherwise ingame displayed rotation reward will be different than added to db or displayed on mission end const getRewards = ({ @@ -56,10 +57,10 @@ const getRewards = ({ // { chance: 7.69, name: "Health Restore (Large)", rotation: "C" }, // { chance: 7.69, name: "Vapor Specter Blueprint", rotation: "C" } // ]; - // console.log("Mission rewards:", testDrops); + // logger.debug("Mission rewards:", testDrops); // return formatRewardsToInventoryType(testDrops); - console.log("Mission rewards:", drops); + logger.debug("Mission rewards:", drops); return formatRewardsToInventoryType(drops); }; @@ -238,7 +239,7 @@ const _missionRewardsCheckAllNamings = () => { .filter(reward => !blueprintNames[reward.name]) .filter(reward => !reward.name.includes(" Endo")) .filter(reward => !reward.name.includes(" Credits Cache") && !reward.name.includes("Return: ")); - console.log(tempRewards); + logger.debug(`temp rewards`, { tempRewards }); }; // _missionRewardsCheckAllNamings(); diff --git a/src/services/mongoService.ts b/src/services/mongoService.ts index f9a6a044..0ef0c82d 100644 --- a/src/services/mongoService.ts +++ b/src/services/mongoService.ts @@ -1,3 +1,4 @@ +import { logger } from "@/src/utils/logger"; import * as dotenv from "dotenv"; import mongoose from "mongoose"; @@ -11,11 +12,11 @@ if (url === undefined) { const connectDatabase = async () => { try { - await mongoose.connect(url); - console.log("connected to MongoDB"); + await mongoose.connect(`${url}`); + logger.info("connected to MongoDB"); } catch (error: unknown) { if (error instanceof Error) { - console.error("error connecting to MongoDB", error.message); + logger.error(`error connecting to MongoDB ${error.message}`); } } }; diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index caf3375b..567239a4 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -11,6 +11,7 @@ import { updateSlots } from "@/src/services/inventoryService"; import { IPurchaseRequest, IPurchaseResponse, SlotNameToInventoryName, SlotPurchase } from "@/src/types/purchaseTypes"; +import { logger } from "@/src/utils/logger"; export const getStoreItemCategory = (storeItem: string) => { const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/"); @@ -28,10 +29,10 @@ export const getStoreItemTypesCategory = (typesItem: string) => { }; export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountId: string) => { - console.log(purchaseRequest); + logger.debug("purchase request", purchaseRequest); const storeCategory = getStoreItemCategory(purchaseRequest.PurchaseParams.StoreItem); const internalName = purchaseRequest.PurchaseParams.StoreItem.replace("/StoreItems", ""); - console.log("Store category", storeCategory); + logger.debug(`store category ${storeCategory}`); let inventoryChanges; switch (storeCategory) { @@ -47,9 +48,10 @@ export const handlePurchase = async (purchaseRequest: IPurchaseRequest, accountI case "Boosters": inventoryChanges = await handleBoostersPurchase(internalName, accountId); break; - default: - throw new Error(`unknown store category: ${storeCategory} not implemented or new`); + const errorMessage = `unknown store category: ${storeCategory} not implemented or new`; + logger.error(errorMessage); + throw new Error(errorMessage); } if (!inventoryChanges) throw new Error("purchase response was undefined"); @@ -86,32 +88,26 @@ export const slotPurchaseNameToSlotName: SlotPurchase = { // // new frame = slots -1 // // number of frames = extra - slots + 2 const handleSlotPurchase = async (slotPurchaseNameFull: string, accountId: string) => { - console.log("slot name", slotPurchaseNameFull); + logger.debug(`slot name ${slotPurchaseNameFull}`); const slotPurchaseName = parseSlotPurchaseName( slotPurchaseNameFull.substring(slotPurchaseNameFull.lastIndexOf("/") + 1) ); - console.log(slotPurchaseName, "slot purchase name"); + logger.debug(`slot purchase name ${slotPurchaseName}`); - await updateSlots( - accountId, - slotPurchaseNameToSlotName[slotPurchaseName].name, - slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase, - slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase - ); + const slotName = slotPurchaseNameToSlotName[slotPurchaseName].name; + const slotsPerPurchase = slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase; - console.log( - slotPurchaseNameToSlotName[slotPurchaseName].name, - slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase, - "slots added" - ); + await updateSlots(accountId, slotName, slotsPerPurchase, slotsPerPurchase); + + logger.debug(`added ${slotsPerPurchase} slot ${slotName}`); return { InventoryChanges: { - [slotPurchaseNameToSlotName[slotPurchaseName].name]: { + [slotName]: { count: 0, platinum: 1, - Slots: slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase, - Extra: slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase + Slots: slotsPerPurchase, + Extra: slotsPerPurchase } } }; @@ -136,7 +132,7 @@ const handlePowersuitPurchase = async (powersuitName: string, accountId: string) const mechSuit = await addMechSuit(powersuitName, accountId); await updateSlots(accountId, SlotNameToInventoryName.MECHSUIT, 0, 1); - console.log("mech suit", mechSuit); + logger.debug("mech suit", mechSuit); return { InventoryChanges: { @@ -168,7 +164,7 @@ const handlePowersuitPurchase = async (powersuitName: string, accountId: string) //TODO: change to getInventory, apply changes then save at the end const handleTypesPurchase = async (typesName: string, accountId: string) => { const typeCategory = getStoreItemTypesCategory(typesName); - console.log("type category", typeCategory); + logger.debug(`type category ${typeCategory}`); switch (typeCategory) { case "SuitCustomizations": return await handleSuitCustomizationsPurchase(typesName, accountId); diff --git a/src/services/saveLoadoutService.ts b/src/services/saveLoadoutService.ts index 59733931..e8f7bc5d 100644 --- a/src/services/saveLoadoutService.ts +++ b/src/services/saveLoadoutService.ts @@ -10,6 +10,7 @@ import { getInventory } from "@/src/services/inventoryService"; import { IOid } from "@/src/types/commonTypes"; import { Types } from "mongoose"; import { isEmptyObject } from "@/src/helpers/general"; +import { logger } from "@/src/utils/logger"; //TODO: setup default items on account creation or like originally in giveStartingItems.php @@ -38,10 +39,10 @@ export const handleInventoryItemConfigChange = async ( case "AdultOperatorLoadOuts": { const operatorConfig = equipment as IOperatorConfigEntry; const operatorLoadout = inventory[equipmentName]; - console.log("operator loadout received", equipmentName, operatorConfig); + logger.debug(`operator loadout received ${equipmentName} `, operatorConfig); // all non-empty entries are one loadout slot for (const [loadoutId, loadoutConfig] of Object.entries(operatorConfig)) { - // console.log("loadoutId", loadoutId, "loadoutconfig", loadoutConfig); + logger.debug(`loadoutId ${loadoutId} loadoutConfig`, { config: loadoutConfig }); const loadout = operatorLoadout.find(loadout => loadout._id?.toString() === loadoutId); // if no config with this id exists, create a new one @@ -58,7 +59,7 @@ export const handleInventoryItemConfigChange = async ( break; } case "LoadOuts": { - console.log("loadout received"); + logger.debug("loadout received"); const loadout = await LoadoutModel.findOne({ loadoutOwnerId: accountId }); if (!loadout) { throw new Error("loadout not found"); @@ -126,7 +127,7 @@ export const handleInventoryItemConfigChange = async ( case "DrifterMelee": case "Sentinels": case "Horses": { - console.log("general Item config saved", equipmentName, equipment); + logger.debug(`general Item config saved of type ${equipmentName}`, { config: equipment }); const itemEntries = equipment as IItemEntry; for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) { @@ -153,7 +154,7 @@ export const handleInventoryItemConfigChange = async ( break; } default: { - console.log("category not implemented", equipmentName, equipment); + logger.error(`category not implemented: ${equipmentName}`, { config: equipment }); } //case "OperatorAmps": // case "SentinelWeapons": diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index bbbf8c89..c6b5d648 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -1,4 +1,3 @@ -import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService"; import { ISuitClient } from "@/src/types/inventoryTypes/SuitTypes"; import { IFlavourItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IWeaponClient } from "@/src/types/inventoryTypes/weaponTypes"; diff --git a/src/utils/logger.ts b/src/utils/logger.ts new file mode 100644 index 00000000..c1bfbc69 --- /dev/null +++ b/src/utils/logger.ts @@ -0,0 +1,113 @@ +import { createLogger, format, transports, Logger, LeveledLogMethod, addColors } from "winston"; +import "winston-daily-rotate-file"; +import * as dotenv from "dotenv"; +import * as util from "util"; +import { isEmptyObject } from "@/src/helpers/general"; + +dotenv.config(); + +// const combineMessageAndSplat = () => { +// return { +// transform: (info: any, _opts: any) => { +// //combine message and args if any +// info.message = util.format(info.message, ...(info[Symbol.for("splat")] || [])); +// return info; +// } +// }; +// }; + +// const alwaysAddMetadata = () => { +// return { +// transform(info: any) { +// if (info[Symbol.for("splat")] === undefined) return info; +// info.meta = info[Symbol.for("splat")]; //[0].meta; +// return info; +// } +// }; +// }; + +//TODO: in production utils.inspect might be slowing down requests see utils.inspect +const consolelogFormat = format.printf(info => { + if (!isEmptyObject(info.metadata)) { + const metadataString = util.inspect(info.metadata, { + showHidden: false, + depth: null, + colors: true + }); + + return `${info.timestamp} [${info.version}] ${info.level}: ${info.message} ${metadataString}`; + } + return `${info.timestamp} [${info.version}] ${info.level}: ${info.message}`; +}); + +const fileFormat = format.combine( + format.uncolorize(), + //combineMessageAndSplat(), + format.timestamp(), + format.json() +); + +const errorLog = new transports.DailyRotateFile({ + filename: "logs/error.log", + format: fileFormat, + level: "error", + datePattern: "YYYY-MM-DD" +}); +const combinedLog = new transports.DailyRotateFile({ + filename: "logs/combined.log", + format: fileFormat, + datePattern: "YYYY-MM-DD" +}); + +const consoleLog = new transports.Console({ + format: format.combine( + format.colorize(), + format.timestamp({ format: "YYYY-MM-DDTHH:mm:ss:SSS" }), // uses local timezone + //combineMessageAndSplat(), + //alwaysAddMetadata(), + format.errors({ stack: true }), + format.align(), + format.metadata({ fillExcept: ["message", "level", "timestamp", "version"] }), + consolelogFormat + ) +}); + +const transportOptions = process.env.LOG_FILES === "true" ? [consoleLog, errorLog, combinedLog] : [consoleLog]; + +//possible log levels: { fatal: 0, error: 1, warn: 2, info: 3, http: 4, debug: 5, trace: 6 }, +const logLevels = { + levels: { + fatal: 0, + error: 1, + warn: 2, + info: 3, + http: 4, + debug: 5, + trace: 6 + }, + colors: { + fatal: "red", + error: "red", + warn: "yellow", + info: "green", + http: "green", + debug: "magenta", + trace: "cyan" + } +}; + +export const logger = createLogger({ + levels: logLevels.levels, + level: process.env.LOG_LEVEL, + defaultMeta: { version: process.env.npm_package_version }, + transports: transportOptions +}) as Logger & Record; + +addColors(logLevels.colors); + +export function registerLogFileCreationListener() { + errorLog.on("new", filename => logger.info(`Using error log file: ${filename}`)); + combinedLog.on("new", filename => logger.info(`Using combined log file: ${filename}`)); + errorLog.on("rotate", filename => logger.info(`Rotated error log file: ${filename}`)); + combinedLog.on("rotate", filename => logger.info(`Rotated combined log file: ${filename}`)); +} diff --git a/static/fixed_responses/worldState.json b/static/fixed_responses/worldState.json index bd216092..ad9092f3 100644 --- a/static/fixed_responses/worldState.json +++ b/static/fixed_responses/worldState.json @@ -1,9 +1,9 @@ { - "WorldSeed": "LPilWYzp4Sgk9VoUjNUeQ0St81TzYSKmtjx/yZRdT26a6C/Rd8/5q9QrTbLPD08iv1z+Byulw+0fVagfp7JB0b3uUi8G03Bq37HHFtqARTmukBuW3FYmrr5pyLhSz5woWo/HR63oUSaX6lGvnjmWLf6/5AW/QNkjgD2lDqaYIh/IumYtBon+RtlKn/np62ljsK+vlnorw2zfXA95gdvQAMeBNk/G2SMTPjlQJdlRTjVhfRuJTlywsIv+Qy4ammWGEcms3uzRnbS8KzQohiD7wpd5GW6nbjim6BOkbgaTGjz0HOix8oVoqrJJNLgwH6rcFWWvh2MuOo+ehbNfW3Z5Bg==", + "WorldSeed": "t8Bnmc5fxNpCmCM+xPwf/HB4EVWUN9ErRdDro1yMiEkFmzHL74Khle/apjMMYvli5MS9nu1ZAi83e2wCAa4o9uSMhgVAocPQbWIYHX/AgHPpb0kFszqpcWF20QaCRW6ebAXduGBBOvsU3h5zDCBgRPdqzd64BIYG8cD+nmpnHKPfq7HlTFQCOsq3ipHgGSZypji5oGxXdMKwDVP/uMFmiosjr8XCVnw4aTPq1MDjSBBbNlc4KIJpAokdOUokrbo+7jvbfSQvKCZiNxSEyDjxxCqwdJn3GyIk/yjpXPWmtS5GS1/R9+0DrjLs+ra3bKWeUlwRFKl4zjeyFivy/1nZkw==", "Version": 10, - "MobileVersion": "4.15.17.0", - "BuildLabel": "2023.11.06.13.39/1TcsxlckBF8b8jiE4E3eQg", - "Time": 1699800661, + "MobileVersion": "4.15.19.0", + "BuildLabel": "2023.12.19.15.34/ccslDhWoFeu8lZi6eT+HXg", + "Time": 1704555310, "Events": [ { "_id": { "$oid": "62d31b87106360aa5703954d" }, @@ -57,26 +57,6 @@ "MobileOnly": false, "Community": true }, - { - "_id": { "$oid": "652ff61922ce61c81d09480e" }, - "Messages": [{ "LanguageCode": "ja", "Message": "アップデート34:Dagathの深淵 パッチノート" }], - "Prop": "https://bit.ly/3S3XSsA", - "Date": { "$date": { "$numberLong": "1697641860000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2021_01/Wiki-background.thumb.jpg.f568775e1b4eab008c7c6d3802c942aa.jpg", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "652ff9fb6c4b32386f0875fa" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Notes de màj : Dagath" }], - "Prop": "https://forums.warframe.com/topic/1368162-les-abysses-de-dagath-mise-%C3%A0-jour-34/", - "Date": { "$date": { "$numberLong": "1697642940000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/370d04da5187b9e07b99f850bccfb270.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, { "_id": { "$oid": "652ffa87514198765c053540" }, "Messages": [{ "LanguageCode": "pl", "Message": "OTCHŁAŃ DAGATH: AKTUALIZACJA 34 - NOTKI" }], @@ -87,30 +67,6 @@ "MobileOnly": false, "Community": true }, - { - "_id": { "$oid": "652ffe7ced7a6da19c039ccf" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Abyss of Dagath Available Now" }, - { "LanguageCode": "fr", "Message": "Les Abysses de Dagath sont maintenant disponibles" }, - { "LanguageCode": "it", "Message": "Abisso di Dagath - Ora Disponibile" }, - { "LanguageCode": "de", "Message": "Abgrund von Dagath ist jetzt verfügbar" }, - { "LanguageCode": "es", "Message": "«Abismo de Dagath» ya está disponible" }, - { "LanguageCode": "pt", "Message": "O Abismo de Dagath já está disponível" }, - { "LanguageCode": "ru", "Message": "Бездна Дагаc уже доступна" }, - { "LanguageCode": "pl", "Message": "Otchłań Dagath jest już dostępna" }, - { "LanguageCode": "uk", "Message": "«Безодня Даґат» уже доступна" }, - { "LanguageCode": "tr", "Message": "Abyss of Dagath Şimdi Sizlerle" }, - { "LanguageCode": "ja", "Message": "アップデート「Dagathの深淵」が登場" }, - { "LanguageCode": "zh", "Message": "《Dagath 之深渊》现已推出" }, - { "LanguageCode": "ko", "Message": "다가스의 나락을 지금 만나보세요" }, - { "LanguageCode": "tc", "Message": "《Dagath 的深淵》現已登場" } - ], - "Prop": "https://www.warframe.com/news/abyss-of-dagath?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-10-AbyssofDagathLaunchIGN", - "Date": { "$date": { "$numberLong": "1697643780000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/901ae8af74582f796d0b744867def81e.png", - "Priority": false, - "MobileOnly": false - }, { "_id": { "$oid": "653001a6be47fe5645028add" }, "Messages": [ @@ -134,68 +90,6 @@ "Priority": false, "MobileOnly": false }, - { - "_id": { "$oid": "65300215ed7a6da19c039ec4" }, - "Messages": [{ "LanguageCode": "ko", "Message": "다가스의 나락: 업데이트 34" }], - "Prop": "", - "Links": [{ "LanguageCode": "ko", "Link": "https://forums.warframe.com/topic/1368181-%EB%8B%A4%EA%B0%80%EC%8A%A4%EC%9D%98-%EB%82%98%EB%9D%BD-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-34/" }], - "Date": { "$date": { "$numberLong": "1697644980000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "653018c12a039099d3075b8a" }, - "Messages": [{ "LanguageCode": "es", "Message": "Notas de Actualización 34: Abismo de Dagath" }], - "Prop": "https://forums.warframe.com/topic/1368242-abismo-de-dagath-actualizaci%C3%B3n-34/", - "Date": { "$date": { "$numberLong": "1697650740000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "65302a44bd9493463b0b49fe" }, - "Messages": [{ "LanguageCode": "fr", "Message": "[Bugs] Les Abysses de Dagath" }], - "Prop": "https://forums.warframe.com/topic/1368262-bugs-les-abysses-de-dagath/", - "Date": { "$date": { "$numberLong": "1697655300000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/370d04da5187b9e07b99f850bccfb270.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "65303836b3f0d70f280d629b" }, - "Messages": [ - { "LanguageCode": "en", "Message": "Listen to the Warframe Soundtracks!" }, - { "LanguageCode": "fr", "Message": "Écoutez les Bandes originales de Warframe !" }, - { "LanguageCode": "it", "Message": "Ascolta le Colonne Sonore di Warframe!" }, - { "LanguageCode": "de", "Message": "Hört euch die Warframe Soundtracks an!" }, - { "LanguageCode": "es", "Message": "¡Escucha las bandas sonoras de Warframe!" }, - { "LanguageCode": "pt", "Message": "Ouça as Trilhas Sonoras do Warframe!" }, - { "LanguageCode": "ru", "Message": "Слушайте саундтреки Warframe!" }, - { "LanguageCode": "pl", "Message": "Posłuchajcie Ścieżek dźwiękowych Warframe!" }, - { "LanguageCode": "uk", "Message": "Слухайте саундтреки Warframe!" }, - { "LanguageCode": "tr", "Message": "Warframe Oyun Müziklerini dinle!" }, - { "LanguageCode": "ja", "Message": "Warframeサウンドトラックを聴こう!" }, - { "LanguageCode": "zh", "Message": "聆听 Warframe 官方原声带!" }, - { "LanguageCode": "ko", "Message": "워프레임 사운드트랙을 들어보세요!" }, - { "LanguageCode": "tc", "Message": "享受 Warframe 原聲音樂!" } - ], - "Prop": "https://www.warframe.com/news/warframe-soundtracks-available-now?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-10-WarframeSoundtrackDigitalRelease", - "Date": { "$date": { "$numberLong": "1697658660000" } }, - "EventStartDate": { "$date": { "$numberLong": "1697655600000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/091bf394ece5c739cb6facdb6d83103a_1600x900.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6532efb2a6c68d36aa0b35ea" }, - "Messages": [{ "LanguageCode": "es", "Message": "Abismo de Dagath: Revisión 34.0.2 + 34.0.3" }], - "Prop": "https://forums.warframe.com/topic/1369074-abismo-de-dagath-revisi%C3%B3n-3402-3403/", - "Date": { "$date": { "$numberLong": "1697833260000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, { "_id": { "$oid": "65368b9aa7625caedf0d6715" }, "Messages": [{ "LanguageCode": "tr", "Message": "2023 Ürpertici Dojo Yarışması [Dagath'ın Çukuru]" }], @@ -207,614 +101,629 @@ "Community": true }, { - "_id": { "$oid": "65382320239dbdb44b06ec93" }, - "Messages": [{ "LanguageCode": "es", "Message": "Abismo de Dagath: Revisión 34.0.4" }], - "Prop": "https://forums.warframe.com/topic/1369754-abismo-de-dagath-revisi%C3%B3n-3404/", - "Date": { "$date": { "$numberLong": "1698174120000" } }, + "_id": { "$oid": "6553c26fcd5e49b3c50aa556" }, + "Messages": [{ "LanguageCode": "tr", "Message": "Eksiksiz Kavat ve Kubrow Rehberi" }], + "Prop": "https://forums.warframe.com/topic/1371844-eksiksiz-kavat-ve-kubrow-rehberi/", + "Date": { "$date": { "$numberLong": "1699987980000" } }, "Priority": false, "MobileOnly": false, "Community": true }, { - "_id": { "$oid": "6538302d6e58888cc6051068" }, - "Messages": [{ "LanguageCode": "es", "Message": "YA DISPONIBLE: Juego entre plataformas de Clanes/Alianzas y amigos" }], - "Prop": "https://forums.warframe.com/topic/1369774-ya-disponible-juego-entre-plataformas-de-clanesalianzas-y-amigos/", - "Date": { "$date": { "$numberLong": "1698181140000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "653bddb39e4cb1318200a5b8" }, + "_id": { "$oid": "65611ad1713ea52411002f8e" }, "Messages": [ - { "LanguageCode": "en", "Message": "Cross Platform Clans and Friends" }, - { "LanguageCode": "fr", "Message": "Clans et amis Cross-Platform" }, - { "LanguageCode": "it", "Message": "Clan e Amici Multipiattaforma" }, - { "LanguageCode": "de", "Message": "Cross-Platform-Clans & -Freunde" }, - { "LanguageCode": "es", "Message": "Clanes y amigos entre plataformas" }, - { "LanguageCode": "pt", "Message": "Clãs e Amigos Multiplataforma" }, - { "LanguageCode": "ru", "Message": "Кроссплатформенные кланы и друзья" }, - { "LanguageCode": "pl", "Message": "Klany międzyplatformowe i Przyjaciele" }, - { "LanguageCode": "uk", "Message": "Міжплатформні клани та друзі" }, - { "LanguageCode": "tr", "Message": "Çapraz Platform Klanları ve Arkadaşları" }, - { "LanguageCode": "ja", "Message": "クロスプラットフォーム:クランとフレンド" }, - { "LanguageCode": "ko", "Message": "크로스 플랫폼 클랜 및 친구 추가" } + { "LanguageCode": "en", "Message": "Android Pre-registration is Open!" }, + { "LanguageCode": "fr", "Message": "La pré-inscription Android est ouverte !" }, + { "LanguageCode": "it", "Message": "La preregistrazione Android è aperta!" }, + { "LanguageCode": "de", "Message": "Die Android-Vorregistrierung ist geöffnet!" }, + { "LanguageCode": "es", "Message": "¡El prerregistro de Android está abierto!" }, + { "LanguageCode": "pt", "Message": "O pré-registro do Warframe para Android está aberto!" }, + { "LanguageCode": "ru", "Message": "Предварительная регистрация для игры в Warframe на Android открыта!" }, + { "LanguageCode": "pl", "Message": "Rejestracja wstępna na Androidzie jest otwarta!" }, + { "LanguageCode": "uk", "Message": "Попередня реєстрація на Android відкрита!" }, + { "LanguageCode": "tr", "Message": "Android için ön kayıt açıldı!" }, + { "LanguageCode": "ja", "Message": "Android版の事前登録が開始!" }, + { "LanguageCode": "zh", "Message": "安卓版预注册现已开发!" }, + { "LanguageCode": "ko", "Message": "안드로이드 기기 사전등록이 시작되었습니다!" }, + { "LanguageCode": "tc", "Message": "Android 版本的 Warframe 已開放預先註冊!" } ], - "Prop": "https://www.warframe.com/news/cross-platform-clans-and-friends?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-10-CrossPlayClanandFriendsIGN", - "Date": { "$date": { "$numberLong": "1698422040000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/e5e7600d9b43d8707806c53d6bba3255_1600x900.png", + "Prop": "https://www.warframe.com/android?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-AndroidBetaSignUpLaunchIGN", + "Date": { "$date": { "$numberLong": "1700861400000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/9efb4cd34cc8698927ac5d5e40ff5634.jpg", "Priority": false, "MobileOnly": false }, { - "_id": { "$oid": "653d20bdcc79da182b09737d" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Résumé Devstream #174" }], - "Prop": "https://forums.warframe.com/topic/1370288-r%C3%A9sum%C3%A9-devstream-174-version-fr/", - "Date": { "$date": { "$numberLong": "1698504600000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_10/image.png.64e11d3e55c3f0a96a845e0147162f20.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "65426158e60609918a08b0e7" }, + "_id": { "$oid": "65708eb08538b4a03707c29d" }, "Messages": [ - { "LanguageCode": "en", "Message": "Movember 2023 is live!" }, - { "LanguageCode": "fr", "Message": "Movember 2023 a commencé !" }, - { "LanguageCode": "it", "Message": "Movember 2023 è ora disponibile!" }, - { "LanguageCode": "de", "Message": "Movember 2023 ist live!" }, - { "LanguageCode": "es", "Message": "¡Comenzó Movember 2023!" }, - { "LanguageCode": "pt", "Message": "O Novembro Azul 2023 (Movember) já começou!" }, - { "LanguageCode": "ru", "Message": "Усабрь 2023 уже пришёл!" }, - { "LanguageCode": "pl", "Message": "Movember 2023 już trwa!" }, - { "LanguageCode": "uk", "Message": "«Вусопад 2023» вже в грі!" }, - { "LanguageCode": "tr", "Message": "Movember 2023 şimdi sizlerle!" }, - { "LanguageCode": "ja", "Message": "モーベンバー2023開催!" }, - { "LanguageCode": "zh", "Message": "2023 胡子月大赛开始啦!" }, - { "LanguageCode": "ko", "Message": "모벰버 2023이 시작되었습니다!" }, - { "LanguageCode": "tc", "Message": "鬍子月 2023 登場了!" } + { "LanguageCode": "en", "Message": "Save the date(s) for TennoCon 2024!" }, + { "LanguageCode": "fr", "Message": "Réservez la date de la TennoCon 2024 !" }, + { "LanguageCode": "it", "Message": "Segna la data per il TennoCon 2024!" }, + { "LanguageCode": "de", "Message": "Merkt euch die Termine für die TennoCon 2024 vor!" }, + { "LanguageCode": "es", "Message": "¡Guarda las fechas para la TennoCon 2024!" }, + { "LanguageCode": "pt", "Message": "Reserve as datas para a TennoCon 2024!" }, + { "LanguageCode": "ru", "Message": "Зарезервируйте эти даты для TennoCon 2024!" }, + { "LanguageCode": "pl", "Message": "Zarezerwujcie czas na TennoCon 2024!" }, + { "LanguageCode": "uk", "Message": "Позначте в календарі дату Теннокону 2024!" }, + { "LanguageCode": "tr", "Message": "TennoCon 2024 için tarih(ler)i kaydet!" }, + { "LanguageCode": "ja", "Message": "TennoCon 2024開催日決定!" }, + { "LanguageCode": "ko", "Message": "텐노콘 2024을 위해 이 날(들) 의 일정을 비워두세요!" } ], - "Prop": "https://www.warframe.com/news/movember-2023-in-warframe?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-Movember2023EventLaunch", - "Date": { "$date": { "$numberLong": "1698847200000" } }, - "EventStartDate": { "$date": { "$numberLong": "1698847200000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/7f90b8f98c9530584e016641fa0360b0_1600x900.png", + "Prop": "https://www.warframe.com/news/tennocon-2024-en?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-TennoConSaveTheDate", + "Date": { "$date": { "$numberLong": "1701872280000" } }, + "EventStartDate": { "$date": { "$numberLong": "1701874800000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/efdbbeef36dd56d3ebdf852de51647b2_1600x900.png", "Priority": false, "MobileOnly": false }, { - "_id": { "$oid": "654292994eb21dd3d4023272" }, - "Messages": [{ "LanguageCode": "en", "Message": "Nora's Mix Vol. 4 Ending + Vol. 5 Incoming!" }], - "Prop": "https://forums.warframe.com/topic/1370861-noras-mix-vol-4-ending-vol-5-incoming/", - "Date": { "$date": { "$numberLong": "1698861660000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6542a80ddd58248c8603ce9b" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Fin du Mix de Nora Vol. 4" }], - "Prop": "https://forums.warframe.com/topic/1370873-le-mix-de-nora-vol-4-se-termine-bient%C3%B4t-le-vol-5-arrive/", - "Date": { "$date": { "$numberLong": "1698867120000" } }, - "ImageUrl": "https://warframe-web-assets-dev.nyc3.cdn.digitaloceanspaces.com/uploads/cms/Nora's_Investigation_Templates_16x9_4k.png", - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "6543e628b1a68db9800fb00e" }, + "_id": { "$oid": "65721c0f98c0c0c0e309040b" }, "Messages": [ - { "LanguageCode": "en", "Message": "Nezha Prime and Octavia Prime are back!" }, - { "LanguageCode": "fr", "Message": "Nezha Prime et Octavia Prime sont de retour !" }, - { "LanguageCode": "it", "Message": "Nezha Prime e Octavia Prime stanno tornando!" }, - { "LanguageCode": "de", "Message": "Nezha Prime und Octavia Prime sind zurück!" }, - { "LanguageCode": "es", "Message": "¡Nezha Prime y Octavia Prime están de vuelta!" }, - { "LanguageCode": "pt", "Message": "O Nezha Prime e a Octavia Prime voltaram!" }, - { "LanguageCode": "ru", "Message": "Нэчжа Прайм и Октавия Прайм возвращаются!" }, - { "LanguageCode": "pl", "Message": "Nezha Prime i Octavia Prime powrócili!" }, - { "LanguageCode": "uk", "Message": "Неджа-прайм і Октавія-прайм повертаються!" }, - { "LanguageCode": "tr", "Message": "Nezha Prime ve Octavia Prime geri döndü!" }, - { "LanguageCode": "ja", "Message": "Nezha PrimeとOctavia Primeが復帰!" }, - { "LanguageCode": "zh", "Message": "Nezha Prime 和 Octavia Prime 现已回归!" }, - { "LanguageCode": "ko", "Message": "나타 프라임과 옥타비아 프라임이 돌아왔습니다!" }, - { "LanguageCode": "tc", "Message": "Nezha Prime 以及 Octavia Prime 回歸了!" } + { "LanguageCode": "en", "Message": "Pre-Order: Whispers in the Walls Merch" }, + { "LanguageCode": "de", "Message": "Vorbestellung: Die 'Flüstern in den Wänden' Merch-Kollektion" }, + { "LanguageCode": "pt", "Message": "Pré-encomenda: Coleção de Produtos dos Sussurros nas Paredes" }, + { "LanguageCode": "tr", "Message": "Ön Sipariş: Whispers in the Walls Ürün Koleksiyonu" }, + { "LanguageCode": "ja", "Message": "「壁の中の囁き」グッズコレクションを今すぐ予約購入" }, + { "LanguageCode": "ko", "Message": "사전 예약 주문하세요: 벽 속의 속삭임 굿즈 컬렉션" } ], - "Prop": "https://www.warframe.com/prime-resurgence?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-PrimeResurgenceNezhaOctaviaIGN", - "Date": { "$date": { "$numberLong": "1698948480000" } }, - "ImageUrl": "https://n9e5v4d8.ssl.hwcdn.net/images/prime-resurgence/rotations/nezha-octavia/masthead-keyart-desktop.png", + "Prop": "https://store.warframe.com/collections/whispers-in-the-walls-collection?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-WhispersintheWallsCollectionLaunch", + "Date": { "$date": { "$numberLong": "1701976740000" } }, + "EventStartDate": { "$date": { "$numberLong": "1701975600000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/53ae5115fa3e794f97dafbd726c3ea2a_1600x900.png", "Priority": false, "MobileOnly": false }, { - "_id": { "$oid": "654940a38a899732aa0d09c1" }, - "Messages": [{ "LanguageCode": "en", "Message": "Community Stream Schedule: Nov 6 - 10 " }], - "Prop": "https://forums.warframe.com/topic/1371398-community-stream-schedule-nov-6-10/?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-Community-Streams-06", - "Date": { "$date": { "$numberLong": "1699299420000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "65494d8eae516ee0620cbfa7" }, - "Messages": [{ "LanguageCode": "ja", "Message": "11月6日~11月10日の配信スケジュール" }], - "Prop": "https://bit.ly/46ZfkmZ", - "Date": { "$date": { "$numberLong": "1699302720000" } }, - "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_11/UniversalMedallion.png.77c37ff5cc77679310041b52ab14d6e7.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654a60bd4cc72868230eeb48" }, - "Messages": [{ "LanguageCode": "en", "Message": "Full Details On How To Play Plague Star!" }], - "Prop": "https://forums.warframe.com/topic/1371415-live-on-all-platforms-operation-plague-star-how-to-faq/", - "Date": { "$date": { "$numberLong": "1699372860000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/00f8832b92926fe968e0407f6d409e17.png", + "_id": { "$oid": "6579d80beeb4b033ed0ce33f" }, + "Messages": [{ "LanguageCode": "en", "Message": "Update 35: Whispers in the Walls" }], + "Prop": "https://forums.warframe.com/topic/1374376-update-35-whispers-in-the-walls/", + "Date": { "$date": { "$numberLong": "1702483020000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/71619183f29041bae5d62979ec39f2ee.jpg", "Priority": true, + "MobileOnly": false + }, + { + "_id": { "$oid": "6579d98f401337afef087f3f" }, + "Messages": [{ "LanguageCode": "ko", "Message": "업데이트 35: 벽 속의 속삭임" }], + "Prop": "", + "Links": [{ "LanguageCode": "ko", "Link": "https://forums.warframe.com/topic/1374381-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-35-%EB%B2%BD-%EC%86%8D%EC%9D%98-%EC%86%8D%EC%82%AD%EC%9E%84/" }], + "Date": { "$date": { "$numberLong": "1702484340000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6579dae50faa971ce30d3a46" }, + "Messages": [{ "LanguageCode": "ja", "Message": "アップデート35:「壁の中の囁き」パッチノート" }], + "Prop": "https://bit.ly/4aj8sTd", + "Date": { "$date": { "$numberLong": "1702484580000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/71619183f29041bae5d62979ec39f2ee.jpg", + "Priority": false, "MobileOnly": false, "Community": true }, { - "_id": { "$oid": "654a635bd86fbf17f5094d48" }, + "_id": { "$oid": "6579e123716960516c0a520f" }, "Messages": [ - { "LanguageCode": "en", "Message": "Play Plague Star today!" }, - { "LanguageCode": "fr", "Message": "Jouez au Fléau Céleste !" }, - { "LanguageCode": "it", "Message": "Gioca a Plague Star oggi stesso!" }, - { "LanguageCode": "de", "Message": "Spielt noch heute Plagenstern!" }, - { "LanguageCode": "es", "Message": "¡Juega Estrella Infestada hoy mismo!" }, - { "LanguageCode": "pt", "Message": "Jogue a Praga Estelar hoje mesmo!" }, - { "LanguageCode": "ru", "Message": "Сыграйте в «Чумную звезду» уже сегодня!" }, - { "LanguageCode": "pl", "Message": "Zagraj w Plagę z Gwiazd już dziś!" }, - { "LanguageCode": "uk", "Message": "Грайте в операцію «Морова зірка» вже сьогодні!" }, - { "LanguageCode": "tr", "Message": "Salgın Yıldızını hemen oynamaya başla!" }, - { "LanguageCode": "ja", "Message": "「疫病の星」作戦を今すぐプレイ!" }, - { "LanguageCode": "zh", "Message": "今天就来玩《瘟疫之星》吧!" }, - { "LanguageCode": "ko", "Message": "오늘 플레이그 스타를 플레이해보세요!" }, - { "LanguageCode": "tc", "Message": "今天就來遊玩《瘟疫之星》吧!" } + { "LanguageCode": "en", "Message": "Get the Sanctum Supporter Pack!" }, + { "LanguageCode": "fr", "Message": "Obtenez le Pack Supporter Sanctum" }, + { "LanguageCode": "it", "Message": "Ottieni il Pacchetto Sostenitore Sanctum!" }, + { "LanguageCode": "de", "Message": "Holt euch das Sanctum Unterstützer-Paket!" }, + { "LanguageCode": "es", "Message": "¡Obtén el Paquete de Apoyo Sanctum!" }, + { "LanguageCode": "pt", "Message": "Adquira o Pacote de Suporte do Sanctum!" }, + { "LanguageCode": "ru", "Message": "Получите набор поддержки «Санктум»!" }, + { "LanguageCode": "pl", "Message": "Zdobądź Pakiet Wsparcia Sanctum!" }, + { "LanguageCode": "uk", "Message": "Отримайте набір шанувальників «Святилище»!" }, + { "LanguageCode": "tr", "Message": "Sanctum Destek Paketini Al!" }, + { "LanguageCode": "ja", "Message": "サンクタムサポーターパックをゲットしよう!" }, + { "LanguageCode": "zh", "Message": "获得圣所支援包!" }, + { "LanguageCode": "ko", "Message": "생텀 서포터 팩을 만나보세요!" }, + { "LanguageCode": "tc", "Message": "獲取聖所支援組合包!" } ], - "Prop": "https://www.warframe.com/news/plague-star-is-back?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-PlagueStarLaunch", - "Date": { "$date": { "$numberLong": "1699373640000" } }, - "EventStartDate": { "$date": { "$numberLong": "1699372800000" } }, - "EventEndDate": { "$date": { "$numberLong": "1700582400000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/c21040f179c8d299f9869073977c3aa6_1600x900.png", + "Prop": "https://www.warframe.com/buyplatinum?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-SanctumSupporterPack", + "Date": { "$date": { "$numberLong": "1702484700000" } }, + "ImageUrl": "https://www-static.warframe.com/images/promo/whispers/supporter-pack-desktop.jpg", "Priority": false, "MobileOnly": false }, { - "_id": { "$oid": "654a649af7a870b7820650e8" }, - "Messages": [{ "LanguageCode": "ja", "Message": "「疫病の星」作戦プレイガイド" }], - "Prop": "https://bit.ly/463Pqx3", - "Date": { "$date": { "$numberLong": "1699374180000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/00f8832b92926fe968e0407f6d409e17.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654a64a946a65a886100284b" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Fléau Céleste - FAQ" }], - "Prop": "https://forums.warframe.com/topic/1371498-dispo-sur-toutes-les-plateformes-op%C3%A9ration%C2%A0%C2%A0fl%C3%A9au-c%C3%A9leste-conseils-et-faq/", - "Date": { "$date": { "$numberLong": "1699374180000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/00f8832b92926fe968e0407f6d409e17.png", - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654a88b29727773d6f02e3b4" }, - "Messages": [{ "LanguageCode": "es", "Message": "Programa de Twitch Drops 6 - 10 de noviembre" }], - "Prop": "https://forums.warframe.com/topic/1371521-programa-de-streams-y-twitch-drops-6-10-de-noviembre/", - "Date": { "$date": { "$numberLong": "1699383360000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654ac60b941def0313097bff" }, - "Messages": [{ "LanguageCode": "en", "Message": "PSA: Operation Plague Star Bounty Standing Changes" }], - "Prop": "https://forums.warframe.com/topic/1371541-psa-operation-plague-star-bounty-standing-changes/", - "Date": { "$date": { "$numberLong": "1699399140000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654d21fa2832bdb80d0e4332" }, - "Messages": [{ "LanguageCode": "en", "Message": "Give your dojo a place of honour on the Starchart!" }], - "Prop": "https://forums.warframe.com/topic/1371407-star-chart-dojo-showcase-autumn-2023/", - "Date": { "$date": { "$numberLong": "1699553700000" } }, - "EventStartDate": { "$date": { "$numberLong": "1699506000000" } }, - "EventEndDate": { "$date": { "$numberLong": "1700802000000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "654d34a42737ba454202fd8f" }, - "Messages": [{ "LanguageCode": "en", "Message": "Abyss of Dagath: Hotfix 34.0.8" }], - "Prop": "https://www.warframe.com/updates/pc/34-0-8", - "Date": { "$date": { "$numberLong": "1699558500000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "654d4a3573ea4f53bc0c7c18" }, - "Messages": [{ "LanguageCode": "fr", "Message": "Notes : 34.0.8" }], - "Prop": "https://forums.warframe.com/topic/1371728-les-abysses-de-dagath%C2%A0-correctif-3408/", - "Date": { "$date": { "$numberLong": "1699564020000" } }, - "Priority": false, - "MobileOnly": false - }, - { - "_id": { "$oid": "654d4e11bbfcd1a99e0eb0c7" }, - "Messages": [{ "LanguageCode": "es", "Message": "Abismo de Dagath: Revisión 34.0.8" }], - "Prop": "https://forums.warframe.com/topic/1371737-abismo-de-dagath-revisi%C3%B3n-3408/", - "Date": { "$date": { "$numberLong": "1699564980000" } }, - "Priority": false, - "MobileOnly": false, - "Community": true - }, - { - "_id": { "$oid": "654e5a60b8336c43bc007747" }, + "_id": { "$oid": "6579f5121ac944e9910da155" }, "Messages": [ - { "LanguageCode": "en", "Message": "Vasca Kavat Floof Plush Available Now!" }, - { "LanguageCode": "fr", "Message": "Peluche Kavat Vasca disponible!" }, - { "LanguageCode": "it", "Message": "Peluche Floof Vasca Kavat - Ora Disponibile!" }, - { "LanguageCode": "de", "Message": "Floof-Plüschtier: Vasca Kavat ist jetzt verfügbar!" }, - { "LanguageCode": "es", "Message": "¡El peluche del Floof de kavat Vasca ya está disponible!" }, - { "LanguageCode": "pt", "Message": "Floof de Pelúcia do Kavat Vasca Já Disponível!" }, - { "LanguageCode": "ru", "Message": "Пушистик Васка Кават уже доступен!" }, - { "LanguageCode": "pl", "Message": "Pluszak Kavata Vasca już dostępny!" }, - { "LanguageCode": "uk", "Message": "Плюш васкозного кавата вже доступний!" }, - { "LanguageCode": "tr", "Message": "Vasca Kavat Peluşu Şimdi Sizlerle!" }, - { "LanguageCode": "ja", "Message": "Vasca キャバットのぬいぐるみが登場!" }, - { "LanguageCode": "zh", "Message": "噬血型库娃毛绒玩偶现已登场!" }, - { "LanguageCode": "ko", "Message": "바스카 카밧 플루프 봉제인형을 지금 만나보세요!" }, - { "LanguageCode": "tc", "Message": "噬血型庫娃毛絨玩偶現已登場!" } + { "LanguageCode": "en", "Message": "Whispers in the Walls Available Now" }, + { "LanguageCode": "fr", "Message": "Dispo : Murmures dans les Murs" }, + { "LanguageCode": "it", "Message": "Sussurri nelle Mura Disponibile Ora" }, + { "LanguageCode": "de", "Message": "'Flüstern in den Wänden' ist jetzt verfügbar" }, + { "LanguageCode": "es", "Message": "«Susurros en las Paredes» ya está disponible" }, + { "LanguageCode": "pt", "Message": "Atualização \"Sussurros nas Paredes\" Já Disponível" }, + { "LanguageCode": "ru", "Message": "Обновление «Шёпот в стенах» уже доступно" }, + { "LanguageCode": "pl", "Message": "Szepty w Ścianach już dostępne" }, + { "LanguageCode": "uk", "Message": "Оновлення «Шепіт у стінах» уже доступно" }, + { "LanguageCode": "tr", "Message": "Whispers in the Walls Şimdi Sizlerle" }, + { "LanguageCode": "ja", "Message": "アップデート「壁の中の囁き」実装中" }, + { "LanguageCode": "zh", "Message": "《墙中低语》现已推出!" }, + { "LanguageCode": "ko", "Message": "벽 속의 속삭임을 지금 만나보세요" }, + { "LanguageCode": "tc", "Message": "《牆中低語》現已登場" } ], - "Prop": "https://store.warframe.com/products/vasca-kavat-floof-plush?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-Merch-VascaFloofLaunch", - "Date": { "$date": { "$numberLong": "1699633440000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/2c5efbd804bbcc60de119b82e407489c_1600x900.png", + "Prop": "https://www.warframe.com/whispers-in-the-walls?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-WhispersintheWallsUpdateLaunch", + "Date": { "$date": { "$numberLong": "1702486800000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/08941b26231d2cf366bdfe97b2b46886_1600x900.png", "Priority": false, "MobileOnly": false }, { - "_id": { "$oid": "654e5b5d0d02a46783044c99" }, + "_id": { "$oid": "6579f572c25a5319740dd6b8" }, "Messages": [ - { "LanguageCode": "en", "Message": "Black Friday Merch Sale" }, - { "LanguageCode": "fr", "Message": "Promo sur les Produits Dérivés du Black Friday" }, - { "LanguageCode": "it", "Message": "Offerte Merch Black Friday" }, - { "LanguageCode": "de", "Message": "Black Friday Merch-Angebote" }, - { "LanguageCode": "es", "Message": "Productos en oferta por Black Friday" }, - { "LanguageCode": "pt", "Message": "Promoção de Produtos da Black Friday" }, - { "LanguageCode": "ru", "Message": "Распродажа товаров Чёрной Пятницы" }, - { "LanguageCode": "pl", "Message": "Wyprzedaż Czarnego Piątku" }, - { "LanguageCode": "uk", "Message": "Розпродаж товарів на Чорну п’ятницю" }, - { "LanguageCode": "tr", "Message": "Efsane Cuma Ürün İndirimleri" }, - { "LanguageCode": "ja", "Message": "ブラックフライデーグッズセール" }, - { "LanguageCode": "zh", "Message": "黑色星期五周边商品促销活动" }, - { "LanguageCode": "ko", "Message": "블랙 프라이데이 굿즈 세일" }, - { "LanguageCode": "tc", "Message": "黑色星期五周边商品促销活动" } + { "LanguageCode": "en", "Message": "Get the Initiate Power Pack Now!" }, + { "LanguageCode": "fr", "Message": "Obtenez le Pack d'Initié Renforcé !" }, + { "LanguageCode": "it", "Message": "Ottieni Ora il Pacchetto Initiate Power!" }, + { "LanguageCode": "de", "Message": "Holt euch jetzt das Initiant Macht-Paket!" }, + { "LanguageCode": "es", "Message": "¡Obtén ya el Paquete de Poder Inicial!" }, + { "LanguageCode": "pt", "Message": "Obtenha o Pacote de Poder Inicial agora mesmo!" }, + { "LanguageCode": "ru", "Message": "Получите Первоначальный Набор Усиления сейчас!" }, + { "LanguageCode": "pl", "Message": "Zdobądź teraz Zestaw Mocy Początkującego!" }, + { "LanguageCode": "uk", "Message": "Отримайте набір початківця «Потужність» зараз!" }, + { "LanguageCode": "tr", "Message": "Başlangıç Güç Paketi Şimdi Sahip Ol!" }, + { "LanguageCode": "ja", "Message": "イニシエートパワーパックを今すぐゲット!" }, + { "LanguageCode": "zh", "Message": "立即获取启蒙力量组合包!" }, + { "LanguageCode": "ko", "Message": "이니시에이트 파워 팩을 지금 만나보세요!" }, + { "LanguageCode": "tc", "Message": "獲取啟蒙威力組合包!" } ], - "Prop": "https://store.warframe.com/collections/clearance?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-11-Merch-BlackFridaySale", - "Date": { "$date": { "$numberLong": "1699633800000" } }, - "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/6562efad3861076ae401127ed6de907f_1600x900.png", + "Prop": "https://www.warframe.com/buyplatinum?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-InitiatePowerPack", + "Date": { "$date": { "$numberLong": "1702486320000" } }, + "ImageUrl": "https://www-static.warframe.com/images/promo/whispers/power-pack-desktop.jpg", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "657a01d262df6147f3052a63" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Notes de màj #35 : Murmures" }], + "Prop": "https://forums.warframe.com/topic/1374393-mise-%C3%A0-jour-35-murmures-dans-les-murs/", + "Date": { "$date": { "$numberLong": "1702493700000" } }, + "ImageUrl": "https://content.invisioncic.com/Mwarframe/monthly_2023_12/image.png.e2f1dbd07b876a02af28c0bef20fcfe6.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "657a230aa75056b794032950" }, + "Messages": [{ "LanguageCode": "es", "Message": "ACTUALIZACIÓN 35: SUSURROS EN LAS PAREDES" }], + "Prop": "https://forums.warframe.com/topic/1374551-actualizaci%C3%B3n-35-susurros-en-las-paredes/", + "Date": { "$date": { "$numberLong": "1702503120000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6580a8b524e6af1e160336d2" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Gargoyle’s Cry is Live Now!" }, + { "LanguageCode": "fr", "Message": "Maintenant dispo : Cri de la Gargouille" }, + { "LanguageCode": "it", "Message": "Gargoyle’s Cry è Ora Disponibile!" }, + { "LanguageCode": "de", "Message": "Schrei des Gargoyles ist jetzt live!" }, + { "LanguageCode": "es", "Message": "¡Grito de Gárgola ya está disponible!" }, + { "LanguageCode": "pt", "Message": "O Clamor da Gárgula já está disponível!" }, + { "LanguageCode": "ru", "Message": "«Операция: Плач Горгульи» уже доступна!" }, + { "LanguageCode": "pl", "Message": "Krzyk Gargulca jest już dostępny!" }, + { "LanguageCode": "uk", "Message": "«Плач ґарґуйля» вже у грі!" }, + { "LanguageCode": "tr", "Message": "Gargoyle'ın Feryadı Şimdi Sizlerle!" }, + { "LanguageCode": "ja", "Message": "「ガーゴイルの叫び」作戦開催中!" }, + { "LanguageCode": "ko", "Message": "가고일의 외침이 지금 시작되었습니다!" }, + { "LanguageCode": "tc", "Message": "《嵌合長嘯》行動現已登場!" } + ], + "Prop": "https://www.warframe.com/news/operation-gargoyles-cry?utm_medium=in-game&utm_source=in-game&utm_campaign=2023-12-OperationGargoylesCryLaunch", + "Date": { "$date": { "$numberLong": "1702930320000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/d9919b30fed2f5a5376d01a5ae7d2b05.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6581bf424c4cd7a561075388" }, + "Messages": [{ "LanguageCode": "en", "Message": "PSA: Clan Rank Decrease Temporarily Disabled" }], + "Prop": "https://forums.warframe.com/topic/1376645-psa-clan-rank-locking-for-operation-gargolyes-cry/", + "Date": { "$date": { "$numberLong": "1703001840000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "6585c0d16a6b17dcee047787" }, + "Messages": [{ "LanguageCode": "en", "Message": "Whispers in the Walls: Hotfix 35.0.6" }], + "Prop": "https://forums.warframe.com/topic/1377693-whispers-in-the-walls-hotfix-3506/", + "Date": { "$date": { "$numberLong": "1703264400000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "658607bcce34ebee6b09b3a3" }, + "Messages": [{ "LanguageCode": "en", "Message": "Cross Platform Save: Mid-Release Review (re-opens in JANUARY)" }], + "Prop": "https://forums.warframe.com/topic/1377846-cross-platform-save-mid-release-review-re-opens-in-january/", + "Date": { "$date": { "$numberLong": "1703282520000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6586f67449d74955a40f7baf" }, + "Messages": [{ "LanguageCode": "fr", "Message": "[PSA] Sauv. Cross-Platform : retour en janvier" }], + "Prop": "https://forums.warframe.com/topic/1378022-psa-sauvegarde-cross-platform-reprendra-en-janvier/", + "Date": { "$date": { "$numberLong": "1703343660000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6586fb16a650b8ad1f0f4802" }, + "Messages": [{ "LanguageCode": "fr", "Message": "Adieu 2023, on se revoit en 2024 !" }], + "Prop": "https://forums.warframe.com/topic/1378027-adieu-2023-on-se-revoit-en-2024/", + "Date": { "$date": { "$numberLong": "1703344860000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "65873a2755795a7ee60e804d" }, + "Messages": [{ "LanguageCode": "es", "Message": " Susurros en las Paredes: Revisión 35.0.5 + 35.0.6" }], + "Prop": "https://forums.warframe.com/topic/1378072-susurros-en-las-paredes-revisi%C3%B3n-3505-3506/", + "Date": { "$date": { "$numberLong": "1703361000000" } }, + "Priority": false, + "MobileOnly": false, + "Community": true + }, + { + "_id": { "$oid": "65883db88cb3f2c420048454" }, + "Messages": [{ "LanguageCode": "uk", "Message": "Міжплатформне збереження: відкривається знову в січні 2024" }], + "Prop": "https://forums.warframe.com/topic/1378222-%D0%BC%D1%96%D0%B6%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%BD%D0%B5-%D0%B7%D0%B1%D0%B5%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F-%D0%B2%D1%96%D0%B4%D0%BA%D1%80%D0%B8%D0%B2%D0%B0%D1%94%D1%82%D1%8C%D1%81%D1%8F-%D0%B7%D0%BD%D0%BE%D0%B2%D1%83-%D0%B2-%D1%81%D1%96%D1%87%D0%BD%D1%96-2024/", + "Date": { "$date": { "$numberLong": "1703427480000" } }, + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6597048052f914e2df0b8d32" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Prime Resurgence Event: Rotation 2" }, + { "LanguageCode": "fr", "Message": "Événement Résurgence Prime : 2ème rotation" }, + { "LanguageCode": "it", "Message": "Evento Risorgenza Prime: Rotazione 2" }, + { "LanguageCode": "de", "Message": "Prime Rückkehr Event: Rotation 2" }, + { "LanguageCode": "es", "Message": "Evento de Resurgimiento Prime: Rotación 2" }, + { "LanguageCode": "pt", "Message": "Evento da Ressurgência Prime: 2ª Rotação" }, + { "LanguageCode": "ru", "Message": "Событие «Возрождение Прайм»: Ротация 2" }, + { "LanguageCode": "pl", "Message": "Odrodzenie Prime: Rotacja 2" }, + { "LanguageCode": "uk", "Message": "Подія прайм-відродження: друга ротація" }, + { "LanguageCode": "tr", "Message": "Prime Diriliş Etkinliği: Rotasyon 2" }, + { "LanguageCode": "ja", "Message": "Prime Resurgence 特別イベント:ローテーション2" }, + { "LanguageCode": "zh", "Message": "Prime 重生活动:轮换 2" }, + { "LanguageCode": "ko", "Message": "프라임 리서전스 이벤트: 로테이션 2" }, + { "LanguageCode": "tc", "Message": "Prime Resurgence 活動:輪替 2" } + ], + "Prop": "https://www.warframe.com/news/prime-resurgence-event-2023?utm_medium=in-game&utm_source=in-game&utm_campaign=2024-01-PrimeResurgenceR2Event2024", + "Date": { "$date": { "$numberLong": "1704394320000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/9bf82d4a590a069b219c01544464d166_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "6598395d0433a1c66c070c45" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Grendel Prime Access Ending Soon" }, + { "LanguageCode": "fr", "Message": "Le Prime Access Grendel Prime se termine bientôt" }, + { "LanguageCode": "it", "Message": "L'Accesso Grendel Prime Terminerà Presto" }, + { "LanguageCode": "de", "Message": "Grendel Prime Access endet bald" }, + { "LanguageCode": "es", "Message": "Prime Access de Grendel está por terminar" }, + { "LanguageCode": "pt", "Message": "O Prime Access do Grendel Prime terminará em breve" }, + { "LanguageCode": "ru", "Message": "Доступ Грендель Прайм скоро закончится" }, + { "LanguageCode": "pl", "Message": "Grendel Prime Access wkrótce się skończy" }, + { "LanguageCode": "uk", "Message": "Доступ до Ґренделя-прайм невдовзі завершується" }, + { "LanguageCode": "tr", "Message": "Grendel Prime Access Yakında Sona Eriyor" }, + { "LanguageCode": "ja", "Message": "Grendel Prime Accessが近日終了" }, + { "LanguageCode": "zh", "Message": "Grendel Prime Access 即将结束" }, + { "LanguageCode": "ko", "Message": "그렌델 프라임 액세스가 곧 종료됩니다" }, + { "LanguageCode": "tc", "Message": "Grendel Prime Access 即將結束" } + ], + "Prop": "https://www.warframe.com/prime-access?utm_medium=in-game&utm_source=in-game&utm_campaign=2024-01-GrendelPrimeEndingSoon", + "Date": { "$date": { "$numberLong": "1704473220000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/fc9e09a4ca79eddd55383762476c71e1_1600x900.png", + "Priority": false, + "MobileOnly": false + }, + { + "_id": { "$oid": "65983e32a798c19dd4082312" }, + "Messages": [ + { "LanguageCode": "en", "Message": "Full Schedule: Void Corruption Weekend Alerts" }, + { "LanguageCode": "fr", "Message": "Programme : Alertes Corruption du Néant (WE)" }, + { "LanguageCode": "it", "Message": "Programmazione Completa: Allerte del Weekend Corruzione Void" }, + { "LanguageCode": "de", "Message": "Vollständiger Zeitplan: Void-Korruption Alarmierungen an den Wochenenden" }, + { "LanguageCode": "es", "Message": "Calendario completo: Alertas de fin de semana de Corrupción del Vacío" }, + { "LanguageCode": "pt", "Message": "Programação Completa: Alertas de Fim de Semana de Corrupção do Void" }, + { "LanguageCode": "ru", "Message": "Полное расписание: «Сигналы Тревоги: Искажение Бездны»" }, + { "LanguageCode": "pl", "Message": "Pełen harmonogram weekendowych Alarmów Skażenia Pustki" }, + { "LanguageCode": "uk", "Message": "Повний розклад: виклики на вихідних «Викривлення Порожнечі»" }, + { "LanguageCode": "tr", "Message": "Tam Program: Void Kirliliği Haftasonu Alert Görevleri" }, + { "LanguageCode": "ja", "Message": "イベントスケジュール:Voidコラプトウィークエンドアラート" }, + { "LanguageCode": "zh", "Message": "完整时间表:虚空堕落周末警报" }, + { "LanguageCode": "ko", "Message": "전체 일정: 보이드 커럽션 주말 얼럿" }, + { "LanguageCode": "tc", "Message": "完整時間表:虛空墮落週末警報" } + ], + "Prop": "https://www.warframe.com/news/void-corruption-alerts", + "Date": { "$date": { "$numberLong": "1704475980000" } }, + "EventStartDate": { "$date": { "$numberLong": "1704438000000" } }, + "EventEndDate": { "$date": { "$numberLong": "1707116400000" } }, + "ImageUrl": "https://warframe-web-assets.nyc3.cdn.digitaloceanspaces.com/uploads/thumbnails/09e25944d5374ec6e372c7ec7c297d67_1600x900.png", "Priority": false, "MobileOnly": false } ], "Goals": [ { - "_id": { "$oid": "654a5058c757487cdb11824f" }, - "Activation": { "$date": { "$numberLong": "1699372800000" } }, - "Expiry": { "$date": { "$numberLong": "1700582400000" } }, - "Tag": "InfestedPlains", - "RegionIdx": 2, - "Faction": "FC_INFESTATION", - "Desc": "/Lotus/Language/InfestedPlainsEvent/InfestedPlainsBountyName", - "ToolTip": "/Lotus/Language/InfestedPlainsEvent/InfestedPlainsBountyDesc", - "Icon": "/Lotus/Materials/Emblems/PlagueStarEventBadge_e.png", - "JobAffiliationTag": "EventSyndicate", - "Jobs": [ - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/InfestedPlainsBounty", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/PlagueStarTableRewards", - "minEnemyLevel": 15, - "maxEnemyLevel": 25, - "xpAmounts": [50, 300, 100, 575] - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/InfestedPlainsBountyAdvanced", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/PlagueStarTableRewards", - "minEnemyLevel": 55, - "maxEnemyLevel": 65, - "xpAmounts": [200, 1000, 300, 1700], - "requiredItems": ["/Lotus/StoreItems/Types/Items/Eidolon/InfestedEventIngredient", "/Lotus/StoreItems/Types/Items/Eidolon/InfestedEventClanIngredient"], - "useRequiredItemsAsMiscItemFee": true - }, - { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Events/InfestedPlainsBountySteelPath", - "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/PlagueStarTableSteelPathRewards", - "minEnemyLevel": 100, - "maxEnemyLevel": 110, - "xpAmounts": [200, 1100, 400, 2100], - "masteryReq": 10, - "requiredItems": ["/Lotus/StoreItems/Types/Items/Eidolon/InfestedEventIngredient", "/Lotus/StoreItems/Types/Items/Eidolon/InfestedEventClanIngredient"], - "useRequiredItemsAsMiscItemFee": true - } - ], - "Transmission": "/Lotus/Sounds/Dialog/PlainsMeteorLeadUp/LeadUp/DLeadUp0021Lotus", - "InstructionalItem": "/Lotus/Types/StoreItems/Packages/PlagueStarEventStoreItem" + "_id": { "$oid": "658094c3a929ee19cc7aa4ce" }, + "Activation": { "$date": { "$numberLong": "1702926000000" } }, + "Expiry": { "$date": { "$numberLong": "1705345200000" } }, + "Tag": "EntratiEvent", + "Faction": "FC_MITW", + "Desc": "/Lotus/Language/EntratiLab/EntratiGeneral/EntratiEventName", + "ToolTip": "/Lotus/Language/EntratiLab/EntratiGeneral/EntratiEventDesc", + "Icon": "/Lotus/Interface/Icons/WorldStatePanel/GargoylesCryEventBadge.png", + "InstructionalItem": "/Lotus/Types/StoreItems/Packages/GargoylesCryEventStoreItem", + "Community": true, + "Count": 0, + "Goal": 100, + "HealthPct": 1, + "ScoreLocTag": "/Lotus/Language/EntratiLab/EntratiGeneral/EntratiEventMurmurNodes" } ], "Alerts": [ { - "_id": { "$oid": "6543f40fa0ae5796cf06c709" }, - "Activation": { "$date": { "$numberLong": "1699034400000" } }, - "Expiry": { "$date": { "$numberLong": "1700247600000" } }, + "_id": { "$oid": "6570f6593dd37a164e0e069e" }, + "Activation": { "$date": { "$numberLong": "1704470400000" } }, + "Expiry": { "$date": { "$numberLong": "1704729600000" } }, "MissionInfo": { - "location": "SolNode43", - "missionType": "MT_TERRITORY", - "faction": "FC_CORPUS", - "difficulty": 1, - "missionReward": { "credits": 10000, "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/Forma", "ItemCount": 3 }] }, - "levelOverride": "/Lotus/Levels/Proc/Corpus/CorpusOutpostInterception", - "enemySpec": "/Lotus/Types/Game/EnemySpecs/CorpusSquadDefenseB", - "minEnemyLevel": 20, - "maxEnemyLevel": 30, - "descText": "/Lotus/Language/Alerts/TennoUnitedAlert", - "maxWaveNum": 2 - }, - "Tag": "LotusGift", - "ForceUnlock": true - }, - { - "_id": { "$oid": "6543f47b76f923206c0bda1a" }, - "Activation": { "$date": { "$numberLong": "1699034400000" } }, - "Expiry": { "$date": { "$numberLong": "1700247600000" } }, - "MissionInfo": { - "location": "SolNode164", + "location": "SolNode402", "missionType": "MT_DEFENSE", - "faction": "FC_INFESTATION", + "faction": "FC_OROKIN", "difficulty": 1, - "missionReward": { "credits": 10000, "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/FormaUmbra", "ItemCount": 1 }] }, - "levelOverride": "/Lotus/Levels/Proc/Infestation/InfestedCorpusShipDefense", - "enemySpec": "/Lotus/Types/Game/EnemySpecs/InfestedDefenseB", - "minEnemyLevel": 20, - "maxEnemyLevel": 30, - "descText": "/Lotus/Language/Alerts/TennoUnitedAlert", + "missionReward": { "credits": 30000, "items": ["/Lotus/StoreItems/Upgrades/Mods/Warframe/DualStat/CorruptedEfficiencyDurationWarframe"] }, + "levelOverride": "/Lotus/Levels/Proc/Orokin/OrokinTowerDefense", + "enemySpec": "/Lotus/Types/Game/EnemySpecs/OrokinDefenseSquadB", + "minEnemyLevel": 10, + "maxEnemyLevel": 15, "maxWaveNum": 10 - }, - "Tag": "LotusGift" + } } ], "Sorties": [ { - "_id": { "$oid": "654faf8dabd662d926f8b75d" }, - "Activation": { "$date": { "$numberLong": "1699722000000" } }, - "Expiry": { "$date": { "$numberLong": "1699808400000" } }, + "_id": { "$oid": "6598320df46f603a49ca4362" }, + "Activation": { "$date": { "$numberLong": "1704474000000" } }, + "Expiry": { "$date": { "$numberLong": "1704560400000" } }, "Reward": "/Lotus/Types/Game/MissionDecks/SortieRewards", - "Seed": 20945, - "Boss": "SORTIE_BOSS_INFALAD", + "Seed": 35109, + "Boss": "SORTIE_BOSS_RUK", "ExtraDrops": [], "Variants": [ - { "missionType": "MT_EXTERMINATION", "modifierType": "SORTIE_MODIFIER_SECONDARY_ONLY", "node": "SolNode24", "tileset": "GrineerForestTileset" }, - { "missionType": "MT_INTEL", "modifierType": "SORTIE_MODIFIER_LOW_ENERGY", "node": "SolNode48", "tileset": "CorpusOutpostTileset" }, - { "missionType": "MT_ASSASSINATION", "modifierType": "SORTIE_MODIFIER_HAZARD_MAGNETIC", "node": "SolNode166", "tileset": "InfestedCorpusShipTileset" } + { "missionType": "MT_SABOTAGE", "modifierType": "SORTIE_MODIFIER_EXIMUS", "node": "SolNode96", "tileset": "GrineerGalleonTileset" }, + { "missionType": "MT_RESCUE", "modifierType": "SORTIE_MODIFIER_ARMOR", "node": "SolNode748", "tileset": "GrineerFortressTileset" }, + { "missionType": "MT_INTEL", "modifierType": "SORTIE_MODIFIER_SNIPER_ONLY", "node": "SolNode46", "tileset": "GrineerSettlementTileset" } ], "Twitter": true } ], "LiteSorties": [ { - "_id": { "$oid": "654828fda5da5fcb5331f09c" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, + "_id": { "$oid": "6591fcfddcd072b88de858a7" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, "Reward": "/Lotus/Types/Game/MissionDecks/ArchonSortieRewards", - "Seed": 20998, - "Boss": "SORTIE_BOSS_BOREAL", + "Seed": 46899, + "Boss": "SORTIE_BOSS_NIRA", "Missions": [ - { "missionType": "MT_EXTERMINATION", "node": "SolNode59" }, - { "missionType": "MT_DEFENSE", "node": "SolNode75" }, - { "missionType": "MT_ASSASSINATION", "node": "SolNode24" } + { "missionType": "MT_SABOTAGE", "node": "SolNode121" }, + { "missionType": "MT_TERRITORY", "node": "SolNode10" }, + { "missionType": "MT_ASSASSINATION", "node": "SolNode53" } ] } ], "SyndicateMissions": [ { - "_id": { "$oid": "654fb2d5935447c35c5a0ae5" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a7785e" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "ArbitersSyndicate", - "Seed": 20945, - "Nodes": ["SolNode226", "SolNode123", "SolNode209", "SolNode85", "SolNode4", "SolNode45", "SolNode400"] + "Seed": 35109, + "Nodes": ["SolNode27", "SolNode11", "SolNode18", "SettlementNode1", "SolNode2", "SolNode146", "SolNode217"] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0ae6" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a7785f" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "CephalonSudaSyndicate", - "Seed": 56908, - "Nodes": ["SolNode119", "SolNode23", "SolNode14", "SolNode25", "SolNode412", "SolNode76", "SolNode49"] + "Seed": 41134, + "Nodes": ["SolNode226", "SolNode30", "SolNode711", "SolNode214", "SolNode162", "SolNode102", "SolNode67"] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0ae7" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77860" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "NecraloidSyndicate", - "Seed": 48195, + "Seed": 80261, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0ae8" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77861" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "EventSyndicate", - "Seed": 81647, + "Seed": 29248, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0ae9" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77862" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "KahlSyndicate", - "Seed": 19395, + "Seed": 57839, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0aea" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "NewLokaSyndicate", - "Seed": 7425, - "Nodes": ["SolNode16", "SolNode223", "SolNode139", "SettlementNode2", "SolNode39", "SolNode2", "SolNode205"] - }, - { - "_id": { "$oid": "654fb2d5935447c35c5a0aeb" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77864" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "QuillsSyndicate", - "Seed": 101, + "Seed": 56241, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0aec" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77863" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "NewLokaSyndicate", + "Seed": 82392, + "Nodes": ["SolNode101", "SolNode39", "SettlementNode14", "SolNode100", "SolNode189", "SolNode140", "SolNode205"] + }, + { + "_id": { "$oid": "659835564c9f6830d8a77865" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "PerrinSyndicate", - "Seed": 58090, - "Nodes": ["SolNode224", "SolNode66", "SolNode710", "SolNode20", "SolNode215", "SettlementNode12", "SolNode97"] + "Seed": 18654, + "Nodes": ["SolNode119", "SolNode45", "SolNode141", "SolNode73", "SolNode403", "SolNode181", "SolNode61"] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0aed" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77866" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegion2Syndicate", - "Seed": 66815, + "Seed": 27071, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0aee" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegion3Syndicate", - "Seed": 71306, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d5935447c35c5a0aef" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77868" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegionIntermission2Syndicate", - "Seed": 43673, + "Seed": 23888, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0af0" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77867" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegion3Syndicate", + "Seed": 7591, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a77869" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegionIntermission3Syndicate", - "Seed": 26200, + "Seed": 99726, "Nodes": [] }, { - "_id": { "$oid": "654fb2d5935447c35c5a0af1" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegionIntermission4Syndicate", - "Seed": 1910, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d5935447c35c5a0af2" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegionIntermission5Syndicate", - "Seed": 83458, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d5935447c35c5a0af3" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegionIntermission6Syndicate", - "Seed": 68685, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d5935447c35c5a0af4" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegionIntermission7Syndicate", - "Seed": 62837, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d6935447c35c5a0af5" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "RadioLegionIntermission8Syndicate", - "Seed": 67457, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d6935447c35c5a0af6" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a7786f" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegionIntermission9Syndicate", - "Seed": 35940, + "Seed": 69343, "Nodes": [] }, { - "_id": { "$oid": "654fb2d6935447c35c5a0af7" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a7786d" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegionIntermission7Syndicate", + "Seed": 55294, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a7786e" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegionIntermission8Syndicate", + "Seed": 11252, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a7786c" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegionIntermission6Syndicate", + "Seed": 99928, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a7786a" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegionIntermission4Syndicate", + "Seed": 77391, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a7786b" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "RadioLegionIntermission5Syndicate", + "Seed": 39908, + "Nodes": [] + }, + { + "_id": { "$oid": "659835564c9f6830d8a77870" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegionIntermissionSyndicate", - "Seed": 95754, + "Seed": 82965, "Nodes": [] }, { - "_id": { "$oid": "654fb2d6935447c35c5a0af8" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77871" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RadioLegionSyndicate", - "Seed": 37335, + "Seed": 79586, "Nodes": [] }, { - "_id": { "$oid": "654fb2d6935447c35c5a0af9" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77872" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "RedVeilSyndicate", - "Seed": 69629, - "Nodes": ["SolNode22", "SolNode225", "SolNode79", "SolNode214", "SolNode189", "SolNode30", "SolNode406"] + "Seed": 49638, + "Nodes": ["SolNode225", "SolNode41", "SettlementNode2", "SolNode149", "SolNode48", "SolNode64", "SolNode126"] }, { - "_id": { "$oid": "654fb2d6935447c35c5a0afa" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "VentKidsSyndicate", - "Seed": 92938, - "Nodes": [] - }, - { - "_id": { "$oid": "654fb2d6935447c35c5a0afb" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, + "_id": { "$oid": "659835564c9f6830d8a77874" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, "Tag": "VoxSyndicate", - "Seed": 38402, + "Seed": 27464, "Nodes": [] }, { - "_id": { "$oid": "654fb2d6935447c35c5a0afc" }, - "Activation": { "$date": { "$numberLong": "1699721941149" } }, - "Expiry": { "$date": { "$numberLong": "1699808340000" } }, - "Tag": "SteelMeridianSyndicate", - "Seed": 93407, - "Nodes": ["SolNode130", "SolNode107", "SolNode217", "SolNode126", "SolNode59", "SolNode57", "SettlementNode1"] + "_id": { "$oid": "659835564c9f6830d8a77873" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "VentKidsSyndicate", + "Seed": 72638, + "Nodes": [] }, { - "_id": { "$oid": "6550e07a0000000000000002" }, - "Activation": { "$date": { "$numberLong": "1699799162362" } }, - "Expiry": { "$date": { "$numberLong": "1699808161236" } }, + "_id": { "$oid": "659835564c9f6830d8a77875" }, + "Activation": { "$date": { "$numberLong": "1704473942005" } }, + "Expiry": { "$date": { "$numberLong": "1704560340000" } }, + "Tag": "SteelMeridianSyndicate", + "Seed": 59732, + "Nodes": ["SolNode14", "SolNode63", "SolNode706", "SettlementNode12", "SolNode216", "SolNode57", "SolNode22"] + }, + { + "_id": { "$oid": "659960a80000000000000004" }, + "Activation": { "$date": { "$numberLong": "1704550568258" } }, + "Expiry": { "$date": { "$numberLong": "1704559567132" } }, + "Tag": "EntratiLabSyndicate", + "Seed": 47257, + "Nodes": [] + }, + { + "_id": { "$oid": "659960a80000000000000002" }, + "Activation": { "$date": { "$numberLong": "1704550568258" } }, + "Expiry": { "$date": { "$numberLong": "1704559567132" } }, "Tag": "EntratiSyndicate", - "Seed": 84413, + "Seed": 47257, "Nodes": [], "Jobs": [ { @@ -823,10 +732,10 @@ "masteryReq": 0, "minEnemyLevel": 5, "maxEnemyLevel": 15, - "xpAmounts": [4, 4, 4] + "xpAmounts": [5, 5, 5] }, { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosPurifyBounty", + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosCrpSurvivorBounty", "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierCTableARewards", "masteryReq": 1, "minEnemyLevel": 15, @@ -834,7 +743,7 @@ "xpAmounts": [10, 10, 10] }, { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessPurifyBounty", + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosEndlessExcavateBounty", "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierBTableARewards", "masteryReq": 5, "minEnemyLevel": 25, @@ -844,23 +753,23 @@ "xpAmounts": [14, 14, 14] }, { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosGrnSurvivorBounty", + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosPurifyBounty", "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierDTableARewards", "masteryReq": 2, "minEnemyLevel": 30, "maxEnemyLevel": 40, - "xpAmounts": [19, 19, 19, 28] + "xpAmounts": [16, 16, 16, 25] }, { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAreaDefenseBounty", "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", "masteryReq": 3, "minEnemyLevel": 40, "maxEnemyLevel": 60, - "xpAmounts": [21, 21, 21, 21, 41] + "xpAmounts": [22, 22, 22, 22, 43] }, { - "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosAssassinateBounty", + "jobType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Jobs/DeimosExcavateBounty", "rewards": "/Lotus/Types/Game/MissionDecks/DeimosMissionRewards/TierETableARewards", "masteryReq": 10, "minEnemyLevel": 100, @@ -897,55 +806,55 @@ ] }, { - "_id": { "$oid": "6550e07a0000000000000007" }, - "Activation": { "$date": { "$numberLong": "1699799162362" } }, - "Expiry": { "$date": { "$numberLong": "1699808161236" } }, + "_id": { "$oid": "659960a80000000000000008" }, + "Activation": { "$date": { "$numberLong": "1704550568258" } }, + "Expiry": { "$date": { "$numberLong": "1704559567132" } }, "Tag": "CetusSyndicate", - "Seed": 84413, + "Seed": 47257, "Nodes": [], "Jobs": [ { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapOne", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyCap", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierATableARewards", "masteryReq": 0, "minEnemyLevel": 5, "maxEnemyLevel": 15, - "xpAmounts": [340, 340, 340] + "xpAmounts": [490, 490, 490] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyCap", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierBTableARewards", "masteryReq": 1, "minEnemyLevel": 10, "maxEnemyLevel": 30, - "xpAmounts": [700, 700, 700] + "xpAmounts": [630, 630, 630] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/CaptureBountyCapTwo", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyLib", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierCTableARewards", "masteryReq": 2, "minEnemyLevel": 20, "maxEnemyLevel": 40, - "xpAmounts": [620, 620, 620, 910] + "xpAmounts": [570, 570, 570, 830] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyCap", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierDTableARewards", "masteryReq": 3, "minEnemyLevel": 30, "maxEnemyLevel": 50, - "xpAmounts": [620, 620, 620, 620, 1210] + "xpAmounts": [600, 600, 600, 600, 1170] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AssassinateBountyAss", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/AttritionBountyExt", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableARewards", "masteryReq": 5, "minEnemyLevel": 40, "maxEnemyLevel": 60, - "xpAmounts": [720, 720, 720, 720, 1410] + "xpAmounts": [700, 700, 700, 700, 1380] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/ReclamationBountyTheft", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/RescueBountyResc", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/TierETableARewards", "masteryReq": 10, "minEnemyLevel": 100, @@ -953,65 +862,65 @@ "xpAmounts": [840, 840, 840, 840, 1660] }, { - "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyExt", + "jobType": "/Lotus/Types/Gameplay/Eidolon/Jobs/Narmer/AttritionBountyLib", "rewards": "/Lotus/Types/Game/MissionDecks/EidolonJobMissionRewards/NarmerTableARewards", "masteryReq": 0, "minEnemyLevel": 50, "maxEnemyLevel": 70, - "xpAmounts": [810, 810, 810, 810, 1590] + "xpAmounts": [820, 820, 820, 820, 1610] } ] }, { - "_id": { "$oid": "6550e07a0000000000000023" }, - "Activation": { "$date": { "$numberLong": "1699799162362" } }, - "Expiry": { "$date": { "$numberLong": "1699808161236" } }, + "_id": { "$oid": "659960a80000000000000024" }, + "Activation": { "$date": { "$numberLong": "1704550568258" } }, + "Expiry": { "$date": { "$numberLong": "1704559567132" } }, "Tag": "SolarisSyndicate", - "Seed": 84413, + "Seed": 47257, "Nodes": [], "Jobs": [ { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusWetworkJobSpy", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobSpy", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierATableARewards", "masteryReq": 0, "minEnemyLevel": 5, "maxEnemyLevel": 15, - "xpAmounts": [340, 340, 340] + "xpAmounts": [420, 420, 420] }, { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobAssassinate", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusWetworkJobSpy", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierBTableARewards", "masteryReq": 1, "minEnemyLevel": 10, "maxEnemyLevel": 30, - "xpAmounts": [590, 590, 590] + "xpAmounts": [620, 620, 620] }, { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusCullJobResource", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusTheftJobResource", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierCTableARewards", "masteryReq": 2, "minEnemyLevel": 20, "maxEnemyLevel": 40, - "xpAmounts": [570, 570, 570, 840] + "xpAmounts": [670, 670, 670, 980] }, { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusTheftJobAmbush", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusHelpingJobResource", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierDTableARewards", "masteryReq": 3, "minEnemyLevel": 30, "maxEnemyLevel": 50, - "xpAmounts": [600, 600, 600, 600, 1180] + "xpAmounts": [600, 600, 600, 600, 1170] }, { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusChaosJobAssassinate", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusIntelJobSpy", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableARewards", "masteryReq": 5, "minEnemyLevel": 40, "maxEnemyLevel": 60, - "xpAmounts": [760, 760, 760, 760, 1490] + "xpAmounts": [690, 690, 690, 690, 1360] }, { - "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusIntelJobRecovery", + "jobType": "/Lotus/Types/Gameplay/Venus/Jobs/VenusPreservationJobResource", "rewards": "/Lotus/Types/Game/MissionDecks/VenusJobMissionRewards/VenusTierETableARewards", "masteryReq": 10, "minEnemyLevel": 100, @@ -1024,263 +933,282 @@ "masteryReq": 0, "minEnemyLevel": 50, "maxEnemyLevel": 70, - "xpAmounts": [810, 810, 810, 810, 1600] + "xpAmounts": [770, 770, 770, 770, 1510] } ] }, { - "_id": { "$oid": "6550e07a0000000000000027" }, - "Activation": { "$date": { "$numberLong": "1699799162362" } }, - "Expiry": { "$date": { "$numberLong": "1699808161236" } }, + "_id": { "$oid": "659960a80000000000000028" }, + "Activation": { "$date": { "$numberLong": "1704550568258" } }, + "Expiry": { "$date": { "$numberLong": "1704559567132" } }, "Tag": "ZarimanSyndicate", - "Seed": 84413, + "Seed": 47257, "Nodes": [] } ], "ActiveMissions": [ { - "_id": { "$oid": "6550d5ed467b39cd26619fd3" }, + "_id": { "$oid": "6599595d25bdc25c1ecedbc6" }, "Region": 13, - "Seed": 8999, - "Activation": { "$date": { "$numberLong": "1699796461223" } }, - "Expiry": { "$date": { "$numberLong": "1699802079700" } }, + "Seed": 88339, + "Activation": { "$date": { "$numberLong": "1704548701758" } }, + "Expiry": { "$date": { "$numberLong": "1704555758279" } }, "Node": "SolNode205", "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT3" - }, - { - "_id": { "$oid": "6550d6a28bef104892f59c0a" }, - "Region": 13, - "Seed": 43264, - "Activation": { "$date": { "$numberLong": "1699796642084" } }, - "Expiry": { "$date": { "$numberLong": "1699803713775" } }, - "Node": "SolNode215", - "MissionType": "MT_INTEL", "Modifier": "VoidT3", "Hard": true }, { - "_id": { "$oid": "6550d6a28bef104892f59c0b" }, - "Region": 8, - "Seed": 55313, - "Activation": { "$date": { "$numberLong": "1699796642084" } }, - "Expiry": { "$date": { "$numberLong": "1699802469360" } }, - "Node": "SolNode84", - "MissionType": "MT_INTEL", + "_id": { "$oid": "6599595d25bdc25c1ecedbc7" }, + "Region": 7, + "Seed": 89653, + "Activation": { "$date": { "$numberLong": "1704548701758" } }, + "Expiry": { "$date": { "$numberLong": "1704555378519" } }, + "Node": "SolNode64", + "MissionType": "MT_TERRITORY", "Modifier": "VoidT3", "Hard": true }, { - "_id": { "$oid": "6550d845e1909b3e90c77663" }, + "_id": { "$oid": "659959d62408c1087e9abd91" }, "Region": 19, - "Seed": 49516, - "Activation": { "$date": { "$numberLong": "1699797061375" } }, - "Expiry": { "$date": { "$numberLong": "1699800818115" } }, - "Node": "SolNode746", - "MissionType": "MT_EXTERMINATION", + "Seed": 42602, + "Activation": { "$date": { "$numberLong": "1704548822127" } }, + "Expiry": { "$date": { "$numberLong": "1704555475986" } }, + "Node": "SolNode744", + "MissionType": "MT_SURVIVAL", + "Modifier": "VoidT5" + }, + { + "_id": { "$oid": "659963ad419074eadcc36f6d" }, + "Region": 19, + "Seed": 64193, + "Activation": { "$date": { "$numberLong": "1704551341949" } }, + "Expiry": { "$date": { "$numberLong": "1704557390513" } }, + "Node": "SolNode741", + "MissionType": "MT_ASSAULT", "Modifier": "VoidT5", "Hard": true }, { - "_id": { "$oid": "6550d9ad079cd43578f9b6ed" }, - "Region": 2, - "Seed": 25432, - "Activation": { "$date": { "$numberLong": "1699797421713" } }, - "Expiry": { "$date": { "$numberLong": "1699802429943" } }, - "Node": "SolNode23", + "_id": { "$oid": "659963ad419074eadcc36f6e" }, + "Region": 19, + "Seed": 71201, + "Activation": { "$date": { "$numberLong": "1704551341949" } }, + "Expiry": { "$date": { "$numberLong": "1704558487644" } }, + "Node": "SolNode743", + "MissionType": "MT_MOBILE_DEFENSE", + "Modifier": "VoidT5", + "Hard": true + }, + { + "_id": { "$oid": "6599646199349b9f72d4c608" }, + "Region": 5, + "Seed": 63813, + "Activation": { "$date": { "$numberLong": "1704551521372" } }, + "Expiry": { "$date": { "$numberLong": "1704557321450" } }, + "Node": "SolNode88", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "6599646199349b9f72d4c609" }, + "Region": 16, + "Seed": 98495, + "Activation": { "$date": { "$numberLong": "1704551521372" } }, + "Expiry": { "$date": { "$numberLong": "1704557081572" } }, + "Node": "SettlementNode12", + "MissionType": "MT_RESCUE", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "6599646199349b9f72d4c60a" }, + "Region": 10, + "Seed": 21656, + "Activation": { "$date": { "$numberLong": "1704551521372" } }, + "Expiry": { "$date": { "$numberLong": "1704556608408" } }, + "Node": "SolNode131", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT2", + "Hard": true + }, + { + "_id": { "$oid": "65996a01002c9bd2a8030751" }, + "Region": 7, + "Seed": 7737, + "Activation": { "$date": { "$numberLong": "1704552961863" } }, + "Expiry": { "$date": { "$numberLong": "1704558819693" } }, + "Node": "SolNode122", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "65996a01002c9bd2a8030752" }, + "Region": 13, + "Seed": 77774, + "Activation": { "$date": { "$numberLong": "1704552961863" } }, + "Expiry": { "$date": { "$numberLong": "1704558976409" } }, + "Node": "SolNode209", + "MissionType": "MT_MOBILE_DEFENSE", + "Modifier": "VoidT3" + }, + { + "_id": { "$oid": "65996b6922a7b7cdd3063406" }, + "Region": 4, + "Seed": 55473, + "Activation": { "$date": { "$numberLong": "1704553321777" } }, + "Expiry": { "$date": { "$numberLong": "1704559417204" } }, + "Node": "SolNode68", + "MissionType": "MT_MOBILE_DEFENSE", + "Modifier": "VoidT1" + }, + { + "_id": { "$oid": "65996b6922a7b7cdd3063407" }, + "Region": 3, + "Seed": 8227, + "Activation": { "$date": { "$numberLong": "1704553321777" } }, + "Expiry": { "$date": { "$numberLong": "1704559708597" } }, + "Node": "SolNode85", "MissionType": "MT_TERRITORY", "Modifier": "VoidT1" }, { - "_id": { "$oid": "6550d9ad079cd43578f9b6ee" }, + "_id": { "$oid": "65996b6922a7b7cdd3063408" }, + "Region": 3, + "Seed": 33892, + "Activation": { "$date": { "$numberLong": "1704553321777" } }, + "Expiry": { "$date": { "$numberLong": "1704558935177" } }, + "Node": "SolNode89", + "MissionType": "MT_EXTERMINATION", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "65996b6922a7b7cdd3063409" }, + "Region": 2, + "Seed": 11544, + "Activation": { "$date": { "$numberLong": "1704553321777" } }, + "Expiry": { "$date": { "$numberLong": "1704557337139" } }, + "Node": "SolNode23", + "MissionType": "MT_TERRITORY", + "Modifier": "VoidT1", + "Hard": true + }, + { + "_id": { "$oid": "65996be1095ba09968e5c293" }, "Region": 15, - "Seed": 94235, - "Activation": { "$date": { "$numberLong": "1699797421713" } }, - "Expiry": { "$date": { "$numberLong": "1699804216526" } }, - "Node": "SolNode405", + "Seed": 52866, + "Activation": { "$date": { "$numberLong": "1704553441173" } }, + "Expiry": { "$date": { "$numberLong": "1704557944185" } }, + "Node": "SolNode402", + "MissionType": "MT_DEFENSE", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "65996be1095ba09968e5c294" }, + "Region": 12, + "Seed": 11006, + "Activation": { "$date": { "$numberLong": "1704553441173" } }, + "Expiry": { "$date": { "$numberLong": "1704557156372" } }, + "Node": "SolNode196", + "MissionType": "MT_MOBILE_DEFENSE", + "Modifier": "VoidT4" + }, + { + "_id": { "$oid": "65996cd141e495c8170329f1" }, + "Region": 6, + "Seed": 83840, + "Activation": { "$date": { "$numberLong": "1704553681856" } }, + "Expiry": { "$date": { "$numberLong": "1704559075854" } }, + "Node": "SolNode67", + "MissionType": "MT_INTEL", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "65996cd141e495c8170329f2" }, + "Region": 10, + "Seed": 94654, + "Activation": { "$date": { "$numberLong": "1704553681856" } }, + "Expiry": { "$date": { "$numberLong": "1704559395779" } }, + "Node": "SolNode141", + "MissionType": "MT_SABOTAGE", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "65996cd141e495c8170329f3" }, + "Region": 16, + "Seed": 59379, + "Activation": { "$date": { "$numberLong": "1704553681856" } }, + "Expiry": { "$date": { "$numberLong": "1704558778504" } }, + "Node": "SettlementNode14", + "MissionType": "MT_INTEL", + "Modifier": "VoidT2" + }, + { + "_id": { "$oid": "65996d0e7e8c0b39805f9d2f" }, + "Region": 15, + "Seed": 67983, + "Activation": { "$date": { "$numberLong": "1704553742063" } }, + "Expiry": { "$date": { "$numberLong": "1704558731665" } }, + "Node": "SolNode409", "MissionType": "MT_SURVIVAL", "Modifier": "VoidT4", "Hard": true }, { - "_id": { "$oid": "6550d9ad079cd43578f9b6ef" }, + "_id": { "$oid": "65996d0e7e8c0b39805f9d30" }, "Region": 11, - "Seed": 8445, - "Activation": { "$date": { "$numberLong": "1699797421713" } }, - "Expiry": { "$date": { "$numberLong": "1699803984227" } }, - "Node": "SolNode164", + "Seed": 74682, + "Activation": { "$date": { "$numberLong": "1704553742063" } }, + "Expiry": { "$date": { "$numberLong": "1704557791586" } }, + "Node": "SolNode173", + "MissionType": "MT_MOBILE_DEFENSE", + "Modifier": "VoidT4", + "Hard": true + }, + { + "_id": { "$oid": "65996d0e7e8c0b39805f9d31" }, + "Region": 9, + "Seed": 15538, + "Activation": { "$date": { "$numberLong": "1704553742063" } }, + "Expiry": { "$date": { "$numberLong": "1704557868519" } }, + "Node": "SolNode72", "MissionType": "MT_DEFENSE", "Modifier": "VoidT4", "Hard": true }, { - "_id": { "$oid": "6550dd6d89297b4edd0ab591" }, - "Region": 15, - "Seed": 13169, - "Activation": { "$date": { "$numberLong": "1699798381217" } }, - "Expiry": { "$date": { "$numberLong": "1699805459419" } }, - "Node": "SolNode407", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "6550dd6d89297b4edd0ab592" }, - "Region": 11, - "Seed": 64688, - "Activation": { "$date": { "$numberLong": "1699798381217" } }, - "Expiry": { "$date": { "$numberLong": "1699804918952" } }, - "Node": "SolNode175", - "MissionType": "MT_HIVE", - "Modifier": "VoidT4" - }, - { - "_id": { "$oid": "6550e12d77680bffc97fff94" }, - "Region": 10, - "Seed": 32976, - "Activation": { "$date": { "$numberLong": "1699799341931" } }, - "Expiry": { "$date": { "$numberLong": "1699803723656" } }, - "Node": "SolNode141", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "6550e12e77680bffc97fff95" }, - "Region": 16, - "Seed": 95642, - "Activation": { "$date": { "$numberLong": "1699799341931" } }, - "Expiry": { "$date": { "$numberLong": "1699805538261" } }, - "Node": "SettlementNode1", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT2", - "Hard": true - }, - { - "_id": { "$oid": "6550e2597c4ec4698c00444e" }, + "_id": { "$oid": "659972aebdefee45d6c87d6b" }, "Region": 19, - "Seed": 59447, - "Activation": { "$date": { "$numberLong": "1699799641761" } }, - "Expiry": { "$date": { "$numberLong": "1699804786535" } }, - "Node": "SolNode748", - "MissionType": "MT_RESCUE", + "Seed": 5511, + "Activation": { "$date": { "$numberLong": "1704555182038" } }, + "Expiry": { "$date": { "$numberLong": "1704561187882" } }, + "Node": "SolNode742", + "MissionType": "MT_DEFENSE", "Modifier": "VoidT5" - }, - { - "_id": { "$oid": "6550e2597c4ec4698c00444f" }, - "Region": 19, - "Seed": 91439, - "Activation": { "$date": { "$numberLong": "1699799641761" } }, - "Expiry": { "$date": { "$numberLong": "1699805160813" } }, - "Node": "SolNode743", - "MissionType": "MT_MOBILE_DEFENSE", - "Modifier": "VoidT5" - }, - { - "_id": { "$oid": "6550e3c1c049d0fa328f0521" }, - "Region": 3, - "Seed": 6557, - "Activation": { "$date": { "$numberLong": "1699800001532" } }, - "Expiry": { "$date": { "$numberLong": "1699803951263" } }, - "Node": "SolNode75", - "MissionType": "MT_SABOTAGE", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "6550e3c1c049d0fa328f0522" }, - "Region": 4, - "Seed": 54408, - "Activation": { "$date": { "$numberLong": "1699800001532" } }, - "Expiry": { "$date": { "$numberLong": "1699806966377" } }, - "Node": "SolNode14", - "MissionType": "MT_EXTERMINATION", - "Modifier": "VoidT1", - "Hard": true - }, - { - "_id": { "$oid": "6550e3fdfcddd45807588003" }, - "Region": 10, - "Seed": 15144, - "Activation": { "$date": { "$numberLong": "1699800061579" } }, - "Expiry": { "$date": { "$numberLong": "1699804353480" } }, - "Node": "SolNode140", - "MissionType": "MT_MOBILE_DEFENSE", - "Modifier": "VoidT2" - }, - { - "_id": { "$oid": "6550e5de9fd64a593bd70001" }, - "Region": 19, - "Seed": 67074, - "Activation": { "$date": { "$numberLong": "1699800542134" } }, - "Expiry": { "$date": { "$numberLong": "1699806483750" } }, - "Node": "SolNode744", - "MissionType": "MT_SURVIVAL", - "Modifier": "VoidT5", - "Hard": true } ], "GlobalUpgrades": [], "FlashSales": [ { - "TypeName": "/Lotus/Types/Items/MiscItems/OrokinCatalyst", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", + "StartDate": { "$date": { "$numberLong": "1654560000000" } }, + "EndDate": { "$date": { "$numberLong": "1735689600000" } }, "ShowInMarket": true, "HideFromMarket": false, - "SupporterPack": false, + "SupporterPack": true, "Discount": 0, "RegularOverride": 0, - "PremiumOverride": 20, + "PremiumOverride": 1, "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VorunaVoidshellSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 90, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Powersuits/Werewolf/Werewolf", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 325, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/XakuLotusDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 430, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" + "BogoGet": 0 }, { "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", "StartDate": { "$date": { "$numberLong": "1661173200000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, + "EndDate": { "$date": { "$numberLong": "1735689600000" } }, "ShowInMarket": true, "HideFromMarket": false, "SupporterPack": true, @@ -1290,102 +1218,6 @@ "BogoBuy": 0, "BogoGet": 0 }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackA", - "StartDate": { "$date": { "$numberLong": "1654560000000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": true, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "StartDate": { "$date": { "$numberLong": "1662422400000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": true, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 1, - "BogoBuy": 0, - "BogoGet": 0 - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/MesaVoltDeluxeSkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 260, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 195, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, - { - "TypeName": "/Lotus/Types/StoreItems/Packages/FormaPack", - "StartDate": { "$date": { "$numberLong": "1675036800000" } }, - "EndDate": { "$date": { "$numberLong": "1703980800000" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "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" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "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" } }, - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "RegularOverride": 0, - "PremiumOverride": 165, - "BogoBuy": 0, - "BogoGet": 0, - "UrlOverride": "" - }, { "TypeName": "/Lotus/Types/StoreItems/Packages/TenYearAnniversaryCommunityArtPack", "ShowInMarket": true, @@ -1399,571 +1231,304 @@ "EndDate": { "$date": { "$numberLong": "1719838800000" } } }, { - "TypeName": "/Lotus/Upgrades/Skins/Scarves/TnCharityRibbonSyandana", + "TypeName": "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", "ShowInMarket": true, - "HideFromMarket": false, + "HideFromMarket": true, "SupporterPack": false, "Discount": 0, "BogoBuy": 0, "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696266000000" } }, - "EndDate": { "$date": { "$numberLong": "1704038340000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704038340000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Armor/TnCharityRibbonArmor/ConqueraChestRibbon", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696266000000" } }, - "EndDate": { "$date": { "$numberLong": "1704038340000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704038340000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Armor/TnCharityRibbonArmor/ConqueraArmorA", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696266000000" } }, - "EndDate": { "$date": { "$numberLong": "1704038340000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704038340000" } } - }, - { - "TypeName": "/Lotus/Powersuits/EntratiMech/NechroTech", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 25, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 281, + "PremiumOverride": 1, "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1696528800000" } }, - "EndDate": { "$date": { "$numberLong": "1699984800000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Sigils/ConqueraSigil", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera2021C", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera2021D", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera2021A", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera2021B", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/StoreItems/AvatarImages/ImageConquera2022A", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Types/Items/ShipDecos/Conquera2021Deco", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Effects/ConqueraEphemera", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Effects/Conquera2022Ephemera", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1696946400000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1704081540000" } } + "StartDate": { "$date": { "$numberLong": "1701103800000" } }, + "EndDate": { "$date": { "$numberLong": "1893516600000" } } }, { "TypeName": "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", "ShowInMarket": true, - "HideFromMarket": false, + "HideFromMarket": true, "SupporterPack": false, "Discount": 0, "BogoBuy": 0, "BogoGet": 0, "PremiumOverride": 1, "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1696941480000" } }, - "EndDate": { "$date": { "$numberLong": "1894365480000" } } + "StartDate": { "$date": { "$numberLong": "1701103860000" } }, + "EndDate": { "$date": { "$numberLong": "1893516660000" } } }, { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeIridosOctaviaStoreItemNoLogo", + "TypeName": "/Lotus/Types/StoreItems/Packages/SanctumPack", "ShowInMarket": true, "HideFromMarket": false, + "SupporterPack": true, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1702380180000" } }, + "EndDate": { "$date": { "$numberLong": "1736767380000" } } + }, + { + "TypeName": "/Lotus/Upgrades/Skins/Armor/SevagothDlxFishArmour/SevagothDlxFishArmourA", + "ShowInMarket": true, + "HideFromMarket": false, + "SupporterPack": false, + "Discount": 0, + "BogoBuy": 0, + "BogoGet": 0, + "PremiumOverride": 65, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1702381620000" } }, + "EndDate": { "$date": { "$numberLong": "1706788020000" } } + }, + { + "TypeName": "/Lotus/Types/StoreItems/Packages/HeirloomPackC", + "ShowInMarket": true, + "HideFromMarket": true, "SupporterPack": false, "Discount": 0, "BogoBuy": 0, "BogoGet": 0, "PremiumOverride": 1, "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1697542380000" } }, - "EndDate": { "$date": { "$numberLong": "1700146800000" } } + "StartDate": { "$date": { "$numberLong": "1704187800000" } }, + "EndDate": { "$date": { "$numberLong": "1735723800000" } } }, { - "TypeName": "/Lotus/Types/StoreItems/Packages/TwitchPrimeIridosOctaviaStoreItem", + "TypeName": "/Lotus/Types/StoreItems/Packages/HeirloomPackA", "ShowInMarket": true, - "HideFromMarket": false, + "HideFromMarket": true, "SupporterPack": false, "Discount": 0, "BogoBuy": 0, "BogoGet": 0, "PremiumOverride": 1, "RegularOverride": 0, - "StartDate": { "$date": { "$numberLong": "1697542380000" } }, - "EndDate": { "$date": { "$numberLong": "1700146800000" } } + "StartDate": { "$date": { "$numberLong": "1704187920000" } }, + "EndDate": { "$date": { "$numberLong": "1735723920000" } } }, { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache02", + "TypeName": "/Lotus/Types/StoreItems/Packages/HeirloomPackB", "ShowInMarket": true, - "HideFromMarket": false, + "HideFromMarket": true, "SupporterPack": false, "Discount": 0, "BogoBuy": 0, "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache03", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache04", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache05", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache06", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache07", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache08", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache09", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache10", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } - }, - { - "TypeName": "/Lotus/Upgrades/Skins/Mustache/Stache", - "ShowInMarket": true, - "HideFromMarket": false, - "SupporterPack": false, - "Discount": 0, - "BogoBuy": 0, - "BogoGet": 0, - "PremiumOverride": 0, - "RegularOverride": 1, - "StartDate": { "$date": { "$numberLong": "1698847200000" } }, - "EndDate": { "$date": { "$numberLong": "1701403140000" } }, - "ProductExpiryOverride": { "$date": { "$numberLong": "1701403140000" } } + "PremiumOverride": 1, + "RegularOverride": 0, + "StartDate": { "$date": { "$numberLong": "1704187860000" } }, + "EndDate": { "$date": { "$numberLong": "1735723860000" } } } ], "InGameMarket": { "LandingPage": { "Categories": [ + { + "CategoryName": "WHISPERS", + "Name": "/Lotus/Language/Store/WhispersInTheWallCategory", + "Icon": "updatepacks", + "AddToMenu": true, + "Items": [ + "/Lotus/Types/StoreItems/Packages/SanctumPack", + "/Lotus/Types/StoreItems/Packages/PowerPack", + "/Lotus/Types/StoreItems/Packages/WarframeBundles/QorvexItemsBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/SevagothDeluxeSkinBundle", + "/Lotus/StoreItems/Upgrades/Skins/Weapons/Grimoire/GrimoireSciFiSkin", + "/Lotus/StoreItems/Upgrades/Skins/Weapons/Grimoire/GrimoireFantasySkin", + "/Lotus/Types/StoreItems/Packages/ShipDecoBundleEntrati", + "/Lotus/StoreItems/Upgrades/Skins/Armor/SevagothDlxFishArmour/SevagothDlxFishArmourA", + "/Lotus/StoreItems/Upgrades/Skins/Wraith/SevagothDeluxeSkin", + "/Lotus/StoreItems/Powersuits/ConcreteFrame/ConcreteFrame", + "/Lotus/StoreItems/Upgrades/Skins/ConcreteFrame/ConcreteFrameAltHelmet", + "/Lotus/StoreItems/Weapons/Tenno/Archwing/Primary/TnConcreteArchgun/TnConcreteArchgunWeapon", + "/Lotus/StoreItems/Upgrades/Skins/Scarves/TnConcreteSyandana", + "/Lotus/StoreItems/Weapons/Thanotech/EntSphereHammer/EntSphereHammer", + "/Lotus/StoreItems/Upgrades/Skins/Crowns/DexVinesCrown", + "/Lotus/Types/StoreItems/Packages/KavatColorPackEntrati", + "/Lotus/Types/StoreItems/Packages/EssentialTennokaiModPack", + "/Lotus/Types/StoreItems/Packages/EssentialGrimoireModPack", + "/Lotus/Types/StoreItems/Packages/WitWGlyphsBundle", + "/Lotus/StoreItems/Types/Items/ShipDecos/LisetPropNecraMechDrone", + "/Lotus/StoreItems/Types/Items/ShipDecos/WitWSupporterPoster", + "/Lotus/StoreItems/Types/Items/ShipDecos/AlbrechtPortrait", + "/Lotus/StoreItems/Types/Items/ShipDecos/GrimoireAltar", + "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/BirdPlush", + "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/FishPlush", + "/Lotus/StoreItems/Types/Items/ShipDecos/Plushies/DeerPlush" + ] + }, { "CategoryName": "POPULAR", "Name": "/Lotus/Language/Menu/StorePopular", "Icon": "popular", "AddToMenu": true, "Items": [ - "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", + "/Lotus/Types/StoreItems/Packages/PrimeTokenPackC", "/Lotus/Types/StoreItems/Packages/WarframeBundles/DagathItemsBundle", - "/Lotus/Types/StoreItems/Packages/Halloween2023CompleteBundle", + "/Lotus/Types/StoreItems/Packages/DeluxeBundles/TitaniaDeluxeIISkinBundle", "/Lotus/Types/StoreItems/Packages/Halloween2023BatBundle", - "/Lotus/StoreItems/Powersuits/EntratiMech/NechroTech", - "/Lotus/Types/StoreItems/Packages/HarrowDeluxeSkinBundle", + "/Lotus/Types/StoreItems/Packages/Halloween2023CompleteBundle", + "/Lotus/StoreItems/Powersuits/Wraith/Wraith", + "/Lotus/StoreItems/Powersuits/EntratiMech/ThanoTech", + "/Lotus/Types/StoreItems/Packages/ProtovyreCosmeticsBundle", + "/Lotus/StoreItems/Powersuits/Fairy/Fairy", + "/Lotus/Types/StoreItems/Packages/IncarnonPackages/BoarIncarnonBundle", "/Lotus/Types/StoreItems/Packages/DeluxeBundles/GaussDeluxeSkinBundle", "/Lotus/StoreItems/Powersuits/Runner/Runner", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/RevenantDeluxeSkinBundle", - "/Lotus/Types/StoreItems/Packages/DeluxeBundles/RevenantDlxOperatorBundle", - "/Lotus/StoreItems/Powersuits/Wraith/Wraith", - "/Lotus/StoreItems/Types/Items/MiscItems/Forma", + "/Lotus/Types/StoreItems/Packages/ColorPack", "/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeIridosOctaviaStoreItemNoLogo", - "/Lotus/Types/StoreItems/Packages/TwitchPrimeIridosOctaviaStoreItem" + "/Lotus/Types/StoreItems/Packages/FormaPack" ] }, - { - "CategoryName": "SEASONAL", - "Name": "/Lotus/Language/Store/SeasonalCategoryTitle", - "Icon": "seasonal", - "AddToMenu": true, - "Items": [ - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache02", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache03", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache04", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache05", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache06", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache07", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache08", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache09", - "/Lotus/StoreItems/Upgrades/Skins/Mustache/Stache10", - "/Lotus/StoreItems/Upgrades/Skins/Sigils/ConqueraSigil", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera2021C", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera2021D", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera2021A", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera2021B", - "/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageConquera2022A", - "/Lotus/StoreItems/Types/Items/ShipDecos/Conquera2021Deco", - "/Lotus/StoreItems/Upgrades/Skins/Effects/ConqueraEphemera", - "/Lotus/StoreItems/Upgrades/Skins/Effects/Conquera2022Ephemera", - "/Lotus/StoreItems/Upgrades/Skins/Armor/TnCharityRibbonArmor/ConqueraArmorA", - "/Lotus/StoreItems/Upgrades/Skins/Armor/TnCharityRibbonArmor/ConqueraChestRibbon", - "/Lotus/StoreItems/Upgrades/Skins/Scarves/TnCharityRibbonSyandana" - ] - }, - { "CategoryName": "DUVIRI_CHOICES", "Name": "/Lotus/Language/Store/Store_DuviriChoices", "Icon": "duvirichoices", "AddToMenu": true, "Items": [] }, + { "CategoryName": "DUVIRI_CHOICES", "Name": "/Lotus/Language/Store/Store_DuviriChoices", "Icon": "duvirichoices", "Items": [] }, + { "CategoryName": "WISH_LIST", "Name": "/Lotus/Language/Menu/Store_Wishlist", "Icon": "wishlist", "Items": [] }, { "CategoryName": "PREMIUM_BUNDLES", "Name": "/Lotus/Language/Store/Store_PremiumBundles", "Icon": "premiumbundles", "Items": [ + "/Lotus/Types/StoreItems/Packages/SanctumPack", "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier3StoreItem", - "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", - "/Lotus/Types/StoreItems/Packages/HeirloomPackC", - "/Lotus/Types/StoreItems/Packages/VeilbreakerSupporterPack", - "/Lotus/Types/StoreItems/Packages/InitiateIIIPCPack", "/Lotus/Types/StoreItems/Packages/AOTZSupporterPackB", - "/Lotus/Types/StoreItems/Packages/HeirloomPackA", - "/Lotus/Types/StoreItems/Packages/HeirloomPackB", + "/Lotus/Types/StoreItems/Packages/PowerPack", + "/Lotus/Types/StoreItems/Packages/PrimeAccess1AccessoryStoreItem", "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier2StoreItem", "/Lotus/Types/StoreItems/Packages/PrimeAccess1Tier1StoreItem" ] - }, - { "CategoryName": "WISH_LIST", "Name": "/Lotus/Language/Menu/Store_Wishlist", "Icon": "wishlist", "Items": [] } + } ] } }, "Invasions": [ { - "_id": { "$oid": "654e62bececd776bc3cab972" }, + "_id": { "$oid": "65979c0df1c7a9161bfd0867" }, "Faction": "FC_CORPUS", "DefenderFaction": "FC_GRINEER", - "Node": "SolNode19", - "Count": 38149, - "Goal": 38000, - "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "654657c15150463957963b1f" }, - "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] }, - "AttackerMissionInfo": { "seed": 983860, "faction": "FC_GRINEER" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, - "DefenderMissionInfo": { "seed": 98731, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1699636839881" } } - }, - { - "_id": { "$oid": "6550cea94a84460eed3b8b5f" }, - "Faction": "FC_CORPUS", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode50", - "Count": 1161, - "Goal": 43000, + "Node": "SolNode196", + "Count": -6144, + "Goal": 36000, "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", "Completed": false, - "ChainID": { "$oid": "654657c15150463957963b1f" }, - "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/SnipetronVandalReceiver", "ItemCount": 1 }] }, - "AttackerMissionInfo": { "seed": 761676, "faction": "FC_GRINEER" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/GrineerCombatKnifeSortieBlueprint", "ItemCount": 1 }] }, - "DefenderMissionInfo": { "seed": 568677, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1699795642956" } } + "ChainID": { "$oid": "659348a1828ed5fd1886eeb5" }, + "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/DeraVandalReceiver", "ItemCount": 1 }] }, + "AttackerMissionInfo": { "seed": 404308, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/GrineerCombatKnifeHilt", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 681215, "faction": "FC_CORPUS" }, + "Activation": { "$date": { "$numberLong": "1704435349138" } } }, { - "_id": { "$oid": "654d9cb1803c5203e40bcd1d" }, - "Faction": "FC_CORPUS", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode31", - "Count": 35073, - "Goal": 35000, - "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "6549a2566144383d2587a9c0" }, - "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] }, - "AttackerMissionInfo": { "seed": 47329, "faction": "FC_GRINEER" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, - "DefenderMissionInfo": { "seed": 421973, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1699585690899" } } - }, - { - "_id": { "$oid": "6550759aca836ca4a44cfcec" }, - "Faction": "FC_CORPUS", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode18", - "Count": 6066, - "Goal": 38000, - "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", - "Completed": false, - "ChainID": { "$oid": "6549a2566144383d2587a9c0" }, - "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] }, - "AttackerMissionInfo": { "seed": 19461, "faction": "FC_GRINEER" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, - "DefenderMissionInfo": { "seed": 223581, "faction": "FC_CORPUS" }, - "Activation": { "$date": { "$numberLong": "1699772697113" } } - }, - { - "_id": { "$oid": "654d4e2d3ef02a6712d9edfa" }, - "Faction": "FC_GRINEER", - "DefenderFaction": "FC_CORPUS", - "Node": "SolNode17", - "Count": -47005, - "Goal": 47000, - "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", - "Completed": true, - "ChainID": { "$oid": "654d4e2d3ef02a6712d9edfa" }, - "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, - "AttackerMissionInfo": { "seed": 178317, "faction": "FC_CORPUS" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/EnergyComponent", "ItemCount": 3 }] }, - "DefenderMissionInfo": { "seed": 746120, "faction": "FC_GRINEER" }, - "Activation": { "$date": { "$numberLong": "1699623046665" } } - }, - { - "_id": { "$oid": "654f74f5bed2841b81c402f2" }, - "Faction": "FC_INFESTATION", - "DefenderFaction": "FC_GRINEER", - "Node": "SolNode144", - "Count": -30050, - "Goal": 30000, - "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", - "Completed": true, - "ChainID": { "$oid": "654f3de13c46a435328f495e" }, - "AttackerReward": [], - "AttackerMissionInfo": { "seed": 430032, "faction": "FC_GRINEER" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, - "DefenderMissionInfo": { "seed": 944337, "faction": "FC_INFESTATION", "missionReward": [] }, - "Activation": { "$date": { "$numberLong": "1699706101486" } } - }, - { - "_id": { "$oid": "654f8434792e97d2d96c0e76" }, + "_id": { "$oid": "659786f5a5663c49db7f7450" }, "Faction": "FC_INFESTATION", "DefenderFaction": "FC_CORPUS", "Node": "SolNode51", - "Count": -23078, + "Count": -30011, + "Goal": 30000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", + "Completed": true, + "ChainID": { "$oid": "65974c5d8c545041bbaad208" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 180036, "faction": "FC_CORPUS" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 734207, "faction": "FC_INFESTATION", "missionReward": [] }, + "Activation": { "$date": { "$numberLong": "1704429301149" } } + }, + { + "_id": { "$oid": "65977436f5ef62271799cd7d" }, + "Faction": "FC_GRINEER", + "DefenderFaction": "FC_CORPUS", + "Node": "SolNode62", + "Count": 13573, + "Goal": 45000, + "LocTag": "/Lotus/Language/Menu/GrineerInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "65977436f5ef62271799cd7d" }, + "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/StrunWraithBarrel", "ItemCount": 1 }] }, + "AttackerMissionInfo": { "seed": 335652, "faction": "FC_CORPUS" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/DeraVandalStock", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 114617, "faction": "FC_GRINEER" }, + "Activation": { "$date": { "$numberLong": "1704496199605" } } + }, + { + "_id": { "$oid": "65979c0df1c7a9161bfd0868" }, + "Faction": "FC_CORPUS", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode187", + "Count": -3142, + "Goal": 47000, + "LocTag": "/Lotus/Language/Menu/CorpusInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "65979c0df1c7a9161bfd0868" }, + "AttackerReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/DeraVandalBlueprint", "ItemCount": 1 }] }, + "AttackerMissionInfo": { "seed": 348816, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Recipes/Weapons/WeaponParts/TwinVipersWraithReceiver", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 557051, "faction": "FC_CORPUS" }, + "Activation": { "$date": { "$numberLong": "1704509479191" } } + }, + { + "_id": { "$oid": "6597db56de4a78820af945e6" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode99", + "Count": -30102, + "Goal": 30000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", + "Completed": true, + "ChainID": { "$oid": "6597aff9e9c5ac11dfcdfe90" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 803034, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, + "DefenderMissionInfo": { "seed": 239664, "faction": "FC_INFESTATION", "missionReward": [] }, + "Activation": { "$date": { "$numberLong": "1704450902042" } } + }, + { + "_id": { "$oid": "65992cd5eeae97743aca67fd" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode42", + "Count": -21975, + "Goal": 34000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "65992cd5eeae97743aca67fd" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 642142, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 778617, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1704542201390" } } + }, + { + "_id": { "$oid": "659955d90ec412d0f19f5173" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode19", + "Count": -1145, + "Goal": 35000, + "LocTag": "/Lotus/Language/Menu/InfestedInvasionGeneric", + "Completed": false, + "ChainID": { "$oid": "65992cd5eeae97743aca67fd" }, + "AttackerReward": [], + "AttackerMissionInfo": { "seed": 733256, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/ChemComponent", "ItemCount": 3 }] }, + "DefenderMissionInfo": { "seed": 226984, "faction": "FC_INFESTATION" }, + "Activation": { "$date": { "$numberLong": "1704547801551" } } + }, + { + "_id": { "$oid": "659955d90ec412d0f19f5174" }, + "Faction": "FC_INFESTATION", + "DefenderFaction": "FC_GRINEER", + "Node": "SolNode32", + "Count": -5510, "Goal": 30000, "LocTag": "/Lotus/Language/Menu/InfestedInvasionBoss", "Completed": false, - "ChainID": { "$oid": "654f5fdeaeaccbc4bcc25e2d" }, + "ChainID": { "$oid": "65992cd5eeae97743aca67fd" }, "AttackerReward": [], - "AttackerMissionInfo": { "seed": 46086, "faction": "FC_CORPUS" }, - "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/MiscItems/InfestedAladCoordinate", "ItemCount": 1 }] }, - "DefenderMissionInfo": { "seed": 859516, "faction": "FC_INFESTATION", "missionReward": [] }, - "Activation": { "$date": { "$numberLong": "1699710003673" } } + "AttackerMissionInfo": { "seed": 657818, "faction": "FC_GRINEER" }, + "DefenderReward": { "countedItems": [{ "ItemType": "/Lotus/Types/Items/Research/BioComponent", "ItemCount": 1 }] }, + "DefenderMissionInfo": { "seed": 585189, "faction": "FC_INFESTATION", "missionReward": [] }, + "Activation": { "$date": { "$numberLong": "1704547801551" } } } ], "HubEvents": [], @@ -1971,7 +1536,7 @@ { "_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": 9724537 }, + { "_id": { "$oid": "5ad9f9bb6df82a56eabf3d44" }, "Node": "SolNode802", "Seed": 9799953 }, { "_id": { "$oid": "5b8817c2bd4f253264d6aa91" }, "Node": "EarthHUB", @@ -1985,41 +1550,13 @@ "Hide": true, "LevelOverride": "/Lotus/Levels/Proc/Hub/RelayStationHubHydroid", "Activation": { "$date": { "$numberLong": "1563030000000" } } - }, - { - "_id": { "$oid": "6550759aca836ca4a44cfceb" }, - "Node": "SolNode31", - "Faction": "FC_CORPUS", - "EnemySpec": "/Lotus/Types/Game/EnemySpecs/CorpusSquadA", - "ExtraEnemySpec": "/Lotus/Types/Game/EnemySpecs/CorpusDropship", - "Expiry": { "$date": { "$numberLong": "1699833627218" } } - }, - { - "_id": { "$oid": "6550cea94a84460eed3b8b5e" }, - "Node": "SolNode19", - "Faction": "FC_CORPUS", - "EnemySpec": "/Lotus/Types/Game/EnemySpecs/CorpusSquadB", - "ExtraEnemySpec": "/Lotus/Types/Game/EnemySpecs/GamemodeExtraEnemySpecs/CorpusHeavyEnemiesDropship", - "Expiry": { "$date": { "$numberLong": "1699849477801" } } - }, - { - "Node": "SolNode228", - "ExtraEnemySpec": "/Lotus/Types/Game/EnemySpecs/InfestedSquadA", - "CustomNpcEncounters": [ - "/Lotus/Types/Gameplay/Eidolon/Encounters/InfestedEncounters/InfestedPatrol", - "/Lotus/Types/Gameplay/Eidolon/Encounters/InfestedEncounters/InfestedDropPods", - "/Lotus/Types/Gameplay/Eidolon/Encounters/InfestedEncounters/InfestedDropPodsReinforcements" - ], - "_id": { "$oid": "654a5058c757487cdb11824f" }, - "Activation": { "$date": { "$numberLong": "1699372800000" } }, - "Expiry": { "$date": { "$numberLong": "1700582400000" } } } ], "VoidTraders": [ { "_id": { "$oid": "5d1e07a0a38e4a4fdd7cefca" }, - "Activation": { "$date": { "$numberLong": "1700226000000" } }, - "Expiry": { "$date": { "$numberLong": "1700398800000" } }, + "Activation": { "$date": { "$numberLong": "1705068000000" } }, + "Expiry": { "$date": { "$numberLong": "1705240800000" } }, "Id": "5d1e07a0a38e4a4fdd7cefca", "Character": "Baro'Ki Teel", "Node": "SaturnHUB" @@ -2028,155 +1565,48 @@ "PrimeVaultTraders": [ { "_id": { "$oid": "631f8c4ac36af423770eaa97" }, - "Activation": { "$date": { "$numberLong": "1698948000000" } }, + "Activation": { "$date": { "$numberLong": "1704394800000" } }, "Completed": false, "InitialStartDate": { "$date": { "$numberLong": "1662738144266" } }, "Node": "TradeHUB1", "Manifest": [ - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNezhaPrimeSinglePack", "PrimePrice": 6 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNezhaOctaviaPrimeDualPack", "PrimePrice": 10 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVOctaviaPrimeSinglePack", "PrimePrice": 6 }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVFrostMagPrimeDualPack", - "PrimePrice": 10, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVFrostPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVMagPrimeSinglePack", - "PrimePrice": 6, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { "ItemType": "/Lotus/StoreItems/Powersuits/Nezha/NezhaPrime", "PrimePrice": 3 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVRanshaPrimeArmorSet", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Effects/EphemeraNezhaPrime", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Polearms/PrimeGuandao/PrimeGuandaoWeapon", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeZakti/PrimeZaktiPistol", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Powersuits/Bard/OctaviaPrime", "PrimePrice": 3 }, - { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVGlissandaPrimeArmorSet", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeOctaviaSyandana", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/LisetPropShawzinPrime", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeTenora/TenoraPrimeWeapon", "PrimePrice": 2 }, - { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimePandero/PanderoPrimeWeapon", "PrimePrice": 2 }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Frost/FrostPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Scarves/PrimeScarf", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTitanPrimeSet", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/LatronPrime", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Scythe/ReaperWeapon", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Powersuits/Mag/MagPrime", - "PrimePrice": 3, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTargisPrimeArmorSet", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVDistillingExtractorPrimeSet", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Shotgun/PrimeBoar", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/CronusSword/PrimeCronusLongSword", - "PrimePrice": 2, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/NezhaPrimeBobbleHead", "PrimePrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/OctaviaPrimeBobbleHead", "PrimePrice": 1 }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/FrostPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/MagPrimeBobbleHead", - "PrimePrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNezhaOctaviaVaultABronze", "RegularPrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionNezhaOctaviaVaultBBronze", "RegularPrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNezhaOctaviaVaultABronze", "RegularPrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionNezhaOctaviaVaultBBronze", "RegularPrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionNezhaOctaviaVaultABronze", "RegularPrice": 1 }, - { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionNezhaOctaviaVaultABronze", "RegularPrice": 1 }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionFrostMagVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionFrostMagVaultBBronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionFrostMagVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionFrostMagVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - }, - { - "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionFrostMagVaultABronze", - "RegularPrice": 1, - "StartDate": { "$date": { "$numberLong": "1693072800000" } }, - "EndDate": { "$date": { "$numberLong": "1704081540000" } } - } + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltLokiPrimeDualPack", "PrimePrice": 10 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaTrinityPrimeDualPack", "PrimePrice": 10 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVVoltPrimeSinglePack", "PrimePrice": 6 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVLokiPrimeSinglePack", "PrimePrice": 6 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNovaPrimeSinglePack", "PrimePrice": 6 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVTrinityPrimeSinglePack", "PrimePrice": 6 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/Volt/VoltPrime", "PrimePrice": 3 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/KazeruPrimeMeleeDangle", "PrimePrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVEdoPrimeArmorSet", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/Archwing/PrimeJetPack/PrimeJetPack", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/Loki/LokiPrime", "PrimePrice": 3 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/MeleeDangles/PrimeMeleeDangle", "PrimePrice": 1 }, + { "ItemType": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVSummusPrimeSentAccessories", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Melee/Staff/PrimeBo/PrimeBoWeapon", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Types/Sentinels/SentinelPowersuits/PrimeWyrmPowerSuit", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Powersuits/AntiMatter/NovaPrime", "PrimePrice": 3 }, + { "ItemType": "/Lotus/StoreItems/Upgrades/Skins/Sigils/PrimeAccessSigilFive", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Pistols/PrimeVasto/PrimeVastoPistol", "PrimePrice": 2 }, + { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeSoma/PrimeSomaRifle", "PrimePrice": 2 }, + { "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/Types/Items/ShipDecos/NovaPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/TrinityPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/VoltPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Items/ShipDecos/LokiPrimeBobbleHead", "PrimePrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T1VoidProjectionLokiVoltVaultABronze", "RegularPrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T2VoidProjectionLokiVoltVaultABronze", "RegularPrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T3VoidProjectionLokiVoltVaultABronze", "RegularPrice": 1 }, + { "ItemType": "/Lotus/StoreItems/Types/Game/Projections/T4VoidProjectionLokiVoltVaultABronze", "RegularPrice": 1 }, + { "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": "1703185200000" } }, + "Expiry": { "$date": { "$numberLong": "1705604400000" } }, "EvergreenManifest": [ { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/LongGuns/PrimeBurston/PrimeBurston", "PrimePrice": 2 }, { "ItemType": "/Lotus/StoreItems/Weapons/Tenno/Rifle/BratonPrime", "PrimePrice": 1 }, @@ -2259,93 +1689,100 @@ "PreviewHiddenUntil": { "$date": { "$numberLong": "1697738400000" } }, "FeaturedItem": "/Lotus/Types/StoreItems/Packages/MegaPrimeVault/MPVNezhaOctaviaPrimeDualPack" }, - { "Expiry": { "$date": { "$numberLong": "1704394800000" } }, "PreviewHiddenUntil": { "$date": { "$numberLong": "1704394800000" } } } + { + "Expiry": { "$date": { "$numberLong": "1704394800000" } }, + "PreviewHiddenUntil": { "$date": { "$numberLong": "1697738400000" } }, + "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" + }, + { "Expiry": { "$date": { "$numberLong": "1705604400000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" }, + { "Expiry": { "$date": { "$numberLong": "1706814000000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" }, + { "Expiry": { "$date": { "$numberLong": "1708023600000" } }, "FeaturedItem": "/Lotus/StoreItems/Types/StoreItems/Packages/MegaPrimeVault/LastChanceItemC" } ] } ], "VoidStorms": [ { - "_id": { "$oid": "6550c7a1bbb11874ea80f56e" }, - "Node": "CrewBattleNode519", - "Activation": { "$date": { "$numberLong": "1699795201821" } }, - "Expiry": { "$date": { "$numberLong": "1699800601821" } }, + "_id": { "$oid": "6599538219418ebd4f6e9b5f" }, + "Node": "CrewBattleNode518", + "Activation": { "$date": { "$numberLong": "1704550801821" } }, + "Expiry": { "$date": { "$numberLong": "1704556201821" } }, "ActiveMissionTier": "VoidT1" }, { - "_id": { "$oid": "6550c7a1bbb11874ea80f56f" }, - "Node": "CrewBattleNode515", - "Activation": { "$date": { "$numberLong": "1699795201825" } }, - "Expiry": { "$date": { "$numberLong": "1699800601825" } }, - "ActiveMissionTier": "VoidT1" + "_id": { "$oid": "6599538219418ebd4f6e9b64" }, + "Node": "CrewBattleNode539", + "Activation": { "$date": { "$numberLong": "1704550801834" } }, + "Expiry": { "$date": { "$numberLong": "1704556201834" } }, + "ActiveMissionTier": "VoidT4" }, { - "_id": { "$oid": "6550c7a1bbb11874ea80f570" }, - "Node": "CrewBattleNode530", - "Activation": { "$date": { "$numberLong": "1699795201827" } }, - "Expiry": { "$date": { "$numberLong": "1699800601827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "6550c7a2bbb11874ea80f571" }, - "Node": "CrewBattleNode525", - "Activation": { "$date": { "$numberLong": "1699795201829" } }, - "Expiry": { "$date": { "$numberLong": "1699800601829" } }, + "_id": { "$oid": "6599538219418ebd4f6e9b62" }, + "Node": "CrewBattleNode521", + "Activation": { "$date": { "$numberLong": "1704550801829" } }, + "Expiry": { "$date": { "$numberLong": "1704556201829" } }, "ActiveMissionTier": "VoidT3" }, { - "_id": { "$oid": "6550c7a2bbb11874ea80f572" }, + "_id": { "$oid": "6599538219418ebd4f6e9b60" }, + "Node": "CrewBattleNode512", + "Activation": { "$date": { "$numberLong": "1704550801825" } }, + "Expiry": { "$date": { "$numberLong": "1704556201825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "6599538219418ebd4f6e9b61" }, + "Node": "CrewBattleNode534", + "Activation": { "$date": { "$numberLong": "1704550801827" } }, + "Expiry": { "$date": { "$numberLong": "1704556201827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "6599538219418ebd4f6e9b63" }, "Node": "CrewBattleNode527", - "Activation": { "$date": { "$numberLong": "1699795201832" } }, - "Expiry": { "$date": { "$numberLong": "1699800601832" } }, + "Activation": { "$date": { "$numberLong": "1704550801832" } }, + "Expiry": { "$date": { "$numberLong": "1704556201832" } }, "ActiveMissionTier": "VoidT4" }, { - "_id": { "$oid": "6550c7a2bbb11874ea80f573" }, - "Node": "CrewBattleNode555", - "Activation": { "$date": { "$numberLong": "1699795201834" } }, - "Expiry": { "$date": { "$numberLong": "1699800601834" } }, - "ActiveMissionTier": "VoidT4" - }, - { - "_id": { "$oid": "6550d5b2210e9a054eef5a21" }, + "_id": { "$oid": "65996641accd4cc7867ee02d" }, "Node": "CrewBattleNode509", - "Activation": { "$date": { "$numberLong": "1699798801821" } }, - "Expiry": { "$date": { "$numberLong": "1699804201821" } }, + "Activation": { "$date": { "$numberLong": "1704554401821" } }, + "Expiry": { "$date": { "$numberLong": "1704559801821" } }, "ActiveMissionTier": "VoidT1" }, { - "_id": { "$oid": "6550d5b2210e9a054eef5a22" }, - "Node": "CrewBattleNode503", - "Activation": { "$date": { "$numberLong": "1699798801825" } }, - "Expiry": { "$date": { "$numberLong": "1699804201825" } }, - "ActiveMissionTier": "VoidT1" - }, - { - "_id": { "$oid": "6550d5b2210e9a054eef5a23" }, - "Node": "CrewBattleNode533", - "Activation": { "$date": { "$numberLong": "1699798801827" } }, - "Expiry": { "$date": { "$numberLong": "1699804201827" } }, - "ActiveMissionTier": "VoidT2" - }, - { - "_id": { "$oid": "6550d5b2210e9a054eef5a24" }, + "_id": { "$oid": "65996641accd4cc7867ee030" }, "Node": "CrewBattleNode516", - "Activation": { "$date": { "$numberLong": "1699798801829" } }, - "Expiry": { "$date": { "$numberLong": "1699804201829" } }, + "Activation": { "$date": { "$numberLong": "1704554401829" } }, + "Expiry": { "$date": { "$numberLong": "1704559801829" } }, "ActiveMissionTier": "VoidT3" }, { - "_id": { "$oid": "6550d5b2210e9a054eef5a25" }, - "Node": "CrewBattleNode529", - "Activation": { "$date": { "$numberLong": "1699798801832" } }, - "Expiry": { "$date": { "$numberLong": "1699804201832" } }, + "_id": { "$oid": "65996641accd4cc7867ee02f" }, + "Node": "CrewBattleNode533", + "Activation": { "$date": { "$numberLong": "1704554401827" } }, + "Expiry": { "$date": { "$numberLong": "1704559801827" } }, + "ActiveMissionTier": "VoidT2" + }, + { + "_id": { "$oid": "65996641accd4cc7867ee032" }, + "Node": "CrewBattleNode543", + "Activation": { "$date": { "$numberLong": "1704554401834" } }, + "Expiry": { "$date": { "$numberLong": "1704559801834" } }, "ActiveMissionTier": "VoidT4" }, { - "_id": { "$oid": "6550d5b2210e9a054eef5a26" }, - "Node": "CrewBattleNode538", - "Activation": { "$date": { "$numberLong": "1699798801834" } }, - "Expiry": { "$date": { "$numberLong": "1699804201834" } }, + "_id": { "$oid": "65996641accd4cc7867ee02e" }, + "Node": "CrewBattleNode503", + "Activation": { "$date": { "$numberLong": "1704554401825" } }, + "Expiry": { "$date": { "$numberLong": "1704559801825" } }, + "ActiveMissionTier": "VoidT1" + }, + { + "_id": { "$oid": "65996641accd4cc7867ee031" }, + "Node": "CrewBattleNode529", + "Activation": { "$date": { "$numberLong": "1704554401832" } }, + "Expiry": { "$date": { "$numberLong": "1704559801832" } }, "ActiveMissionTier": "VoidT4" } ], @@ -2354,23 +1791,23 @@ "PrimeTokenAvailability": true, "DailyDeals": [ { - "StoreItem": "/Lotus/StoreItems/Weapons/Tenno/Pistols/TnBardPistol/TnBardPistolGun", - "Activation": { "$date": { "$numberLong": "1699707600000" } }, - "Expiry": { "$date": { "$numberLong": "1699801200000" } }, + "StoreItem": "/Lotus/StoreItems/Weapons/Tenno/Pistol/CrossBow", + "Activation": { "$date": { "$numberLong": "1704481200000" } }, + "Expiry": { "$date": { "$numberLong": "1704574800000" } }, "Discount": 50, - "OriginalPrice": 190, - "SalePrice": 95, - "AmountTotal": 150, - "AmountSold": 71 + "OriginalPrice": 175, + "SalePrice": 87, + "AmountTotal": 200, + "AmountSold": 30 } ], "LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" }, "PVPChallengeInstances": [ { - "_id": { "$oid": "654e98a68f77ff95a143d8e9" }, + "_id": { "$oid": "659873ad24ae204a62fa071b" }, "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins", - "startDate": { "$date": { "$numberLong": "1699649702069" } }, - "endDate": { "$date": { "$numberLong": "1700254502069" } }, + "startDate": { "$date": { "$numberLong": "1704489901970" } }, + "endDate": { "$date": { "$numberLong": "1705094701970" } }, "params": [{ "n": "ScriptParamValue", "v": 6 }], "isGenerated": true, "PVPMode": "PVPMODE_ALL", @@ -2378,21 +1815,21 @@ "Category": "PVPChallengeTypeCategory_WEEKLY" }, { - "_id": { "$oid": "654e98a68f77ff95a143d8ea" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", - "startDate": { "$date": { "$numberLong": "1699649702069" } }, - "endDate": { "$date": { "$numberLong": "1700254502069" } }, - "params": [{ "n": "ScriptParamValue", "v": 20 }], + "_id": { "$oid": "659873ad24ae204a62fa071e" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", + "startDate": { "$date": { "$numberLong": "1704489901970" } }, + "endDate": { "$date": { "$numberLong": "1705094701970" } }, + "params": [{ "n": "ScriptParamValue", "v": 0 }], "isGenerated": true, - "PVPMode": "PVPMODE_ALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_WEEKLY" + "PVPMode": "PVPMODE_NONE", + "subChallenges": [{ "$oid": "659873ad24ae204a62fa071b" }, { "$oid": "659873ad24ae204a62fa071c" }, { "$oid": "659873ad24ae204a62fa071d" }], + "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" }, { - "_id": { "$oid": "654e98a68f77ff95a143d8eb" }, + "_id": { "$oid": "659873ad24ae204a62fa071d" }, "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY", - "startDate": { "$date": { "$numberLong": "1699649702069" } }, - "endDate": { "$date": { "$numberLong": "1700254502069" } }, + "startDate": { "$date": { "$numberLong": "1704489901970" } }, + "endDate": { "$date": { "$numberLong": "1705094701970" } }, "params": [{ "n": "ScriptParamValue", "v": 10 }], "isGenerated": true, "PVPMode": "PVPMODE_ALL", @@ -2400,21 +1837,21 @@ "Category": "PVPChallengeTypeCategory_WEEKLY" }, { - "_id": { "$oid": "654e98a68f77ff95a143d8ec" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet", - "startDate": { "$date": { "$numberLong": "1699649702069" } }, - "endDate": { "$date": { "$numberLong": "1700254502069" } }, - "params": [{ "n": "ScriptParamValue", "v": 0 }], + "_id": { "$oid": "659873ad24ae204a62fa071c" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete", + "startDate": { "$date": { "$numberLong": "1704489901970" } }, + "endDate": { "$date": { "$numberLong": "1705094701970" } }, + "params": [{ "n": "ScriptParamValue", "v": 20 }], "isGenerated": true, - "PVPMode": "PVPMODE_NONE", - "subChallenges": [{ "$oid": "654e98a68f77ff95a143d8e9" }, { "$oid": "654e98a68f77ff95a143d8ea" }, { "$oid": "654e98a68f77ff95a143d8eb" }], - "Category": "PVPChallengeTypeCategory_WEEKLY_ROOT" + "PVPMode": "PVPMODE_ALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_WEEKLY" }, { - "_id": { "$oid": "6550006969f22db526abb815" }, + "_id": { "$oid": "6598af7191b9e0eea5d5e293" }, "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, "params": [{ "n": "ScriptParamValue", "v": 1 }], "isGenerated": true, "PVPMode": "PVPMODE_CAPTURETHEFLAG", @@ -2422,10 +1859,10 @@ "Category": "PVPChallengeTypeCategory_DAILY" }, { - "_id": { "$oid": "6550006969f22db526abb816" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagCaptureMEDIUM", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, + "_id": { "$oid": "6598af7191b9e0eea5d5e292" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, "params": [{ "n": "ScriptParamValue", "v": 4 }], "isGenerated": true, "PVPMode": "PVPMODE_CAPTURETHEFLAG", @@ -2433,10 +1870,21 @@ "Category": "PVPChallengeTypeCategory_DAILY" }, { - "_id": { "$oid": "6550006969f22db526abb817" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsTargetInAirEASY", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, + "_id": { "$oid": "6598af7191b9e0eea5d5e295" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsTargetInAirHARD", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, + "params": [{ "n": "ScriptParamValue", "v": 3 }], + "isGenerated": true, + "PVPMode": "PVPMODE_TEAMDEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6598af7191b9e0eea5d5e294" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPaybackEASY", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, "params": [{ "n": "ScriptParamValue", "v": 1 }], "isGenerated": true, "PVPMode": "PVPMODE_TEAMDEATHMATCH", @@ -2444,164 +1892,142 @@ "Category": "PVPChallengeTypeCategory_DAILY" }, { - "_id": { "$oid": "6550006969f22db526abb818" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPowerMEDIUM", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, - "params": [{ "n": "ScriptParamValue", "v": 4 }], - "isGenerated": true, - "PVPMode": "PVPMODE_TEAMDEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6550006a69f22db526abb819" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsMeleeMEDIUM", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, - "params": [{ "n": "ScriptParamValue", "v": 4 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6550006a69f22db526abb81a" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileInAirHARD", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, - "params": [{ "n": "ScriptParamValue", "v": 3 }], - "isGenerated": true, - "PVPMode": "PVPMODE_DEATHMATCH", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6550006a69f22db526abb81b" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsEASY", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, - "params": [{ "n": "ScriptParamValue", "v": 3 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6550006a69f22db526abb81c" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballPassesHARD", - "startDate": { "$date": { "$numberLong": "1699741801931" } }, - "endDate": { "$date": { "$numberLong": "1699828201931" } }, - "params": [{ "n": "ScriptParamValue", "v": 3 }], - "isGenerated": true, - "PVPMode": "PVPMODE_SPEEDBALL", - "subChallenges": [], - "Category": "PVPChallengeTypeCategory_DAILY" - }, - { - "_id": { "$oid": "6550e4ed03f0626fc01c4f6d" }, - "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedAffectorSuperEverything", - "startDate": { "$date": { "$numberLong": "1699800301512" } }, - "endDate": { "$date": { "$numberLong": "1699800901512" } }, + "_id": { "$oid": "6598af7191b9e0eea5d5e296" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, "params": [{ "n": "ScriptParamValue", "v": 2 }], "isGenerated": true, "PVPMode": "PVPMODE_DEATHMATCH", "subChallenges": [], - "Category": "PVPChallengeTypeCategory_MODEAFFECTOR" + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6598af7191b9e0eea5d5e299" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballStealsEASY", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, + "params": [{ "n": "ScriptParamValue", "v": 3 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6598af7191b9e0eea5d5e298" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballPassesHARD", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, + "params": [{ "n": "ScriptParamValue", "v": 3 }], + "isGenerated": true, + "PVPMode": "PVPMODE_SPEEDBALL", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" + }, + { + "_id": { "$oid": "6598af7191b9e0eea5d5e297" }, + "challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakStoppedEASY", + "startDate": { "$date": { "$numberLong": "1704505201665" } }, + "endDate": { "$date": { "$numberLong": "1704591601665" } }, + "params": [{ "n": "ScriptParamValue", "v": 1 }], + "isGenerated": true, + "PVPMode": "PVPMODE_DEATHMATCH", + "subChallenges": [], + "Category": "PVPChallengeTypeCategory_DAILY" } ], "PersistentEnemies": [], "PVPAlternativeModes": [], "PVPActiveTournaments": [], - "ProjectPct": [91.68905726815011, 53.82862202580854, 0], + "ProjectPct": [38.73147325043345, 25.356565957635535, 0], "ConstructionProjects": [], "TwitchPromos": [], "ExperimentRecommended": [], "EndlessXpChoices": [ - { "Category": "EXC_NORMAL", "Choices": ["Hydroid", "Mirage", "Limbo"] }, - { "Category": "EXC_HARD", "Choices": ["Boar", "Gammacor", "Anku", "Gorgon", "Angstrum"] } + { "Category": "EXC_NORMAL", "Choices": ["Ash", "Frost", "Nyx"] }, + { "Category": "EXC_HARD", "Choices": ["Bo", "Latron", "Furis", "Furax", "Strun"] } ], "ForceLogoutVersion": 0, "FeaturedGuilds": [ - { "_id": { "$oid": "5fa2e5812794220e700f6f6a" }, "Name": "Ministry of Wonderland#405", "Tier": 1, "Emblem": true, "OriginalPlatform": 0 }, - { "_id": { "$oid": "5efc425c4e453377337c5ad4" }, "Name": "SATANS KAT#927", "Tier": 2, "AllianceId": { "$oid": "589ba800be87e42d0a24942c" }, "Emblem": true, "OriginalPlatform": 0 }, - { "_id": { "$oid": "5c5713243f8d4a3bb04e09b1" }, "Name": "Orokin Legionnaires#083", "Tier": 3, "AllianceId": { "$oid": "613df42cc566ad767f53d9e0" }, "Emblem": true, "OriginalPlatform": 0 }, - { "_id": { "$oid": "599b1e8cbe87e4a2d713dc74" }, "Name": "La Legione Oscura#122", "Tier": 5, "AllianceId": { "$oid": "5f98a7ccace62c369071e561" }, "Emblem": true, "OriginalPlatform": 0 }, - { "_id": { "$oid": "552c713807c56fafac7b3f37" }, "Name": "Syndicate Synergy#282", "Tier": 5, "AllianceId": { "$oid": "56031df008c56fe8106a9982" }, "Emblem": true, "OriginalPlatform": 0 }, - { "_id": { "$oid": "559bb99d06c56f888a4b2f44" }, "Name": "--UMBRA--Lua Lycans#447", "Tier": 4, "Emblem": true, "AllianceId": { "$oid": "6365589e89dc6b94480fbb06" }, "OriginalPlatform": 0 } + { "_id": { "$oid": "5b4478a82183dbb61871e464" }, "Name": "_People_#660", "Tier": 1, "Emblem": true, "OriginalPlatform": 0 }, + { "_id": { "$oid": "5303c4bd06c56f4168b5fed9" }, "Name": "Miau after Tomorrow#004", "Tier": 2, "AllianceId": { "$oid": "53f9876c07c56f85b1c24ed7" }, "Emblem": true, "OriginalPlatform": 0 }, + { "_id": { "$oid": "51e332a507c56f8131001afe" }, "Name": "La confrerie#881", "Tier": 3, "AllianceId": { "$oid": "535d3fbc07c56fa289fec649" }, "Emblem": true, "OriginalPlatform": 0 }, + { "_id": { "$oid": "570f9bda08c56f0887fb6db5" }, "Name": "GentleManz#996", "Tier": 4, "Emblem": true, "OriginalPlatform": 0 }, + { "_id": { "$oid": "5a44a1ba2183db95d61d3e56" }, "Name": "Syndicate Solstice#268", "Tier": 5, "AllianceId": { "$oid": "56031df008c56fe8106a9982" }, "Emblem": true, "OriginalPlatform": 0 }, + { "_id": { "$oid": "5d6e8383a38e4ab3d87910b4" }, "Name": "KHAO SAN ROAD#515", "Tier": 1, "AllianceId": { "$oid": "62ca246ada801e95e10faef5" }, "Emblem": true, "OriginalPlatform": 0 } ], "SeasonInfo": { - "Activation": { "$date": { "$numberLong": "1684951200000" } }, - "Expiry": { "$date": { "$numberLong": "1700679600000" } }, - "AffiliationTag": "RadioLegionIntermission8Syndicate", - "Season": 10, + "Activation": { "$date": { "$numberLong": "1701284400000" } }, + "Expiry": { "$date": { "$numberLong": "1719187200000" } }, + "AffiliationTag": "RadioLegionIntermission9Syndicate", + "Season": 11, "Phase": 0, "Params": "", "ActiveChallenges": [ { - "_id": { "$oid": "001100250000000000000348" }, + "_id": { "$oid": "001200060000000000000084" }, "Daily": true, - "Activation": { "$date": { "$numberLong": "1699574400000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithElectricity" + "Activation": { "$date": { "$numberLong": "1704326400000" } }, + "Expiry": { "$date": { "$numberLong": "1704585600000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailySuspendFiveEnemies" }, { - "_id": { "$oid": "001100250000000000000349" }, + "_id": { "$oid": "001200060000000000000085" }, "Daily": true, - "Activation": { "$date": { "$numberLong": "1699660800000" } }, - "Expiry": { "$date": { "$numberLong": "1699920000000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyMedic" + "Activation": { "$date": { "$numberLong": "1704412800000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyCodexScan" }, { - "_id": { "$oid": "001100250000000000000350" }, + "_id": { "$oid": "001200060000000000000086" }, "Daily": true, - "Activation": { "$date": { "$numberLong": "1699747200000" } }, - "Expiry": { "$date": { "$numberLong": "1700006400000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyDeployAirSupport" + "Activation": { "$date": { "$numberLong": "1704499200000" } }, + "Expiry": { "$date": { "$numberLong": "1704758400000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Daily/SeasonDailyKillEnemiesWithAbilities" }, { - "_id": { "$oid": "001100250000000000000337" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyVenusBounties" + "_id": { "$oid": "001200060000000000000074" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentCompleteMissions6" }, { - "_id": { "$oid": "001100250000000000000338" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyMineRarePlainsResources" + "_id": { "$oid": "001200060000000000000075" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEximus6" }, { - "_id": { "$oid": "001100250000000000000339" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPickUpRareMods" + "_id": { "$oid": "001200060000000000000076" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyPermanentKillEnemies6" }, { - "_id": { "$oid": "001100250000000000000340" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyKillEnemiesInMech" + "_id": { "$oid": "001200060000000000000077" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyDestroyCrewshipArtillery" }, { - "_id": { "$oid": "001100250000000000000341" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklySimarisScan" + "_id": { "$oid": "001200060000000000000078" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/Weekly/SeasonWeeklyLoyalty" }, { - "_id": { "$oid": "001100250000000000000342" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardUnlockRelics" + "_id": { "$oid": "001200060000000000000079" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardCompleteSteelPathMissions" }, { - "_id": { "$oid": "001100250000000000000343" }, - "Activation": { "$date": { "$numberLong": "1699228800000" } }, - "Expiry": { "$date": { "$numberLong": "1699833600000" } }, - "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardTerminated" + "_id": { "$oid": "001200060000000000000080" }, + "Activation": { "$date": { "$numberLong": "1704067200000" } }, + "Expiry": { "$date": { "$numberLong": "1704672000000" } }, + "Challenge": "/Lotus/Types/Challenges/Seasons/WeeklyHard/SeasonWeeklyHardAntiquarian" } ] }, - "Tmp": "{\"prisbegin\":\"1687363200\",\"prisend\":\"1688572800\",\"cavabegin\":\"1690761600\",\"sfn\":554}" + "Tmp": "{\"prisbegin\":\"1687363200\",\"prisend\":\"1688572800\",\"cavabegin\":\"1690761600\",\"PurchasePlatformLockEnabled\":true,\"sfn\":550}" }