Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
eb4698109e | |||
3c7516a372 | |||
4e33f3b60f | |||
c17ba18548 | |||
82d6a4cfec |
@ -1,6 +1,6 @@
|
|||||||
FROM node:24-alpine3.21
|
FROM node:24-alpine3.21
|
||||||
|
|
||||||
RUN apk add --no-cache bash jq python3 make gcc alpine-sdk
|
RUN apk add --no-cache bash jq
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"skipTutorial": false,
|
"skipTutorial": false,
|
||||||
"skipAllDialogue": false,
|
"skipAllDialogue": false,
|
||||||
"unlockAllScans": false,
|
"unlockAllScans": false,
|
||||||
|
"unlockAllMissions": false,
|
||||||
"infiniteCredits": false,
|
"infiniteCredits": false,
|
||||||
"infinitePlatinum": false,
|
"infinitePlatinum": false,
|
||||||
"infiniteEndo": false,
|
"infiniteEndo": false,
|
||||||
@ -41,7 +42,6 @@
|
|||||||
"noVendorPurchaseLimits": false,
|
"noVendorPurchaseLimits": false,
|
||||||
"noDeathMarks": false,
|
"noDeathMarks": false,
|
||||||
"noKimCooldowns": false,
|
"noKimCooldowns": false,
|
||||||
"fullyStockedVendors": false,
|
|
||||||
"syndicateMissionsRepeatable": false,
|
"syndicateMissionsRepeatable": false,
|
||||||
"unlockAllProfitTakerStages": false,
|
"unlockAllProfitTakerStages": false,
|
||||||
"instantFinishRivenChallenge": false,
|
"instantFinishRivenChallenge": false,
|
||||||
|
204
package-lock.json
generated
204
package-lock.json
generated
@ -11,7 +11,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^5",
|
"@types/express": "^5",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/websocket": "^1.0.10",
|
|
||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -22,7 +21,6 @@
|
|||||||
"typescript": "^5.5",
|
"typescript": "^5.5",
|
||||||
"warframe-public-export-plus": "^0.5.68",
|
"warframe-public-export-plus": "^0.5.68",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"websocket": "^1.0.35",
|
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0",
|
"winston-daily-rotate-file": "^5.0.0",
|
||||||
"ws": "^8.18.2"
|
"ws": "^8.18.2"
|
||||||
@ -384,15 +382,6 @@
|
|||||||
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
|
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/websocket": {
|
|
||||||
"version": "1.0.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz",
|
|
||||||
"integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/whatwg-url": {
|
"node_modules/@types/whatwg-url": {
|
||||||
"version": "11.0.5",
|
"version": "11.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
|
||||||
@ -921,19 +910,6 @@
|
|||||||
"node": ">=16.20.1"
|
"node": ">=16.20.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/bufferutil": {
|
|
||||||
"version": "4.0.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz",
|
|
||||||
"integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"node-gyp-build": "^4.3.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.14.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/bytes": {
|
"node_modules/bytes": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||||
@ -1152,19 +1128,6 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/d": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"es5-ext": "^0.10.64",
|
|
||||||
"type": "^2.7.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/debug": {
|
"node_modules/debug": {
|
||||||
"version": "4.4.0",
|
"version": "4.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
|
||||||
@ -1276,46 +1239,6 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/es5-ext": {
|
|
||||||
"version": "0.10.64",
|
|
||||||
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
|
|
||||||
"integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"es6-iterator": "^2.0.3",
|
|
||||||
"es6-symbol": "^3.1.3",
|
|
||||||
"esniff": "^2.0.1",
|
|
||||||
"next-tick": "^1.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/es6-iterator": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"d": "1",
|
|
||||||
"es5-ext": "^0.10.35",
|
|
||||||
"es6-symbol": "^3.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/es6-symbol": {
|
|
||||||
"version": "3.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
|
|
||||||
"integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"d": "^1.0.2",
|
|
||||||
"ext": "^1.7.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/escape-html": {
|
"node_modules/escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
@ -1477,21 +1400,6 @@
|
|||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esniff": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"d": "^1.0.1",
|
|
||||||
"es5-ext": "^0.10.62",
|
|
||||||
"event-emitter": "^0.3.5",
|
|
||||||
"type": "^2.7.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/espree": {
|
"node_modules/espree": {
|
||||||
"version": "9.6.1",
|
"version": "9.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
|
||||||
@ -1565,16 +1473,6 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/event-emitter": {
|
|
||||||
"version": "0.3.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
|
|
||||||
"integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"d": "1",
|
|
||||||
"es5-ext": "~0.10.14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/express": {
|
"node_modules/express": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
|
||||||
@ -1617,15 +1515,6 @@
|
|||||||
"url": "https://opencollective.com/express"
|
"url": "https://opencollective.com/express"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ext": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"type": "^2.7.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/fast-deep-equal": {
|
"node_modules/fast-deep-equal": {
|
||||||
"version": "3.1.3",
|
"version": "3.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||||
@ -2155,12 +2044,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-typedarray": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/isexe": {
|
"node_modules/isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
@ -2566,23 +2449,6 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/next-tick": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/node-gyp-build": {
|
|
||||||
"version": "4.8.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
|
|
||||||
"integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"node-gyp-build": "bin.js",
|
|
||||||
"node-gyp-build-optional": "optional.js",
|
|
||||||
"node-gyp-build-test": "build-test.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/object-hash": {
|
"node_modules/object-hash": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
||||||
@ -3373,12 +3239,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "0BSD"
|
"license": "0BSD"
|
||||||
},
|
},
|
||||||
"node_modules/type": {
|
|
||||||
"version": "2.7.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
|
|
||||||
"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/type-check": {
|
"node_modules/type-check": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||||
@ -3419,15 +3279,6 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typedarray-to-buffer": {
|
|
||||||
"version": "3.1.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
|
|
||||||
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"is-typedarray": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.8.3",
|
"version": "5.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||||
@ -3466,19 +3317,6 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/utf-8-validate": {
|
|
||||||
"version": "5.0.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
|
|
||||||
"integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"node-gyp-build": "^4.3.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.14.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/util-deprecate": {
|
"node_modules/util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
@ -3513,38 +3351,6 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/websocket": {
|
|
||||||
"version": "1.0.35",
|
|
||||||
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz",
|
|
||||||
"integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"bufferutil": "^4.0.1",
|
|
||||||
"debug": "^2.2.0",
|
|
||||||
"es5-ext": "^0.10.63",
|
|
||||||
"typedarray-to-buffer": "^3.1.5",
|
|
||||||
"utf-8-validate": "^5.0.2",
|
|
||||||
"yaeti": "^0.0.6"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/websocket/node_modules/debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/websocket/node_modules/ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/whatwg-url": {
|
"node_modules/whatwg-url": {
|
||||||
"version": "14.2.0",
|
"version": "14.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
|
||||||
@ -3665,16 +3471,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yaeti": {
|
|
||||||
"version": "0.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
|
|
||||||
"integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==",
|
|
||||||
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.32"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/yocto-queue": {
|
"node_modules/yocto-queue": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^5",
|
"@types/express": "^5",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/websocket": "^1.0.10",
|
|
||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -31,7 +30,6 @@
|
|||||||
"typescript": "^5.5",
|
"typescript": "^5.5",
|
||||||
"warframe-public-export-plus": "^0.5.68",
|
"warframe-public-export-plus": "^0.5.68",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"websocket": "^1.0.35",
|
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0",
|
"winston-daily-rotate-file": "^5.0.0",
|
||||||
"ws": "^8.18.2"
|
"ws": "^8.18.2"
|
||||||
|
@ -6,7 +6,13 @@ import allDialogue from "@/static/fixed_responses/allDialogue.json";
|
|||||||
import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
|
import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
|
||||||
import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { IInventoryClient, IShipInventory, equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import { IPolarity, ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||||
import { ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus";
|
import {
|
||||||
|
ExportCustoms,
|
||||||
|
ExportFlavour,
|
||||||
|
ExportRegions,
|
||||||
|
ExportResources,
|
||||||
|
ExportVirtuals
|
||||||
|
} from "warframe-public-export-plus";
|
||||||
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
|
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
|
||||||
import {
|
import {
|
||||||
addMiscItems,
|
addMiscItems,
|
||||||
@ -16,7 +22,7 @@ import {
|
|||||||
generateRewardSeed
|
generateRewardSeed
|
||||||
} from "@/src/services/inventoryService";
|
} from "@/src/services/inventoryService";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { addString, catBreadHash } from "@/src/helpers/stringHelpers";
|
import { catBreadHash } from "@/src/helpers/stringHelpers";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
|
import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
|
||||||
import { getPersonalRooms } from "@/src/services/personalRoomsService";
|
import { getPersonalRooms } from "@/src/services/personalRoomsService";
|
||||||
@ -161,6 +167,18 @@ export const getInventoryResponse = async (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.unlockAllMissions) {
|
||||||
|
inventoryResponse.Missions = [];
|
||||||
|
for (const tag of Object.keys(ExportRegions)) {
|
||||||
|
inventoryResponse.Missions.push({
|
||||||
|
Completes: 1,
|
||||||
|
Tier: 1,
|
||||||
|
Tag: tag
|
||||||
|
});
|
||||||
|
}
|
||||||
|
addString(inventoryResponse.NodeIntrosCompleted, "TeshinHardModeUnlocked");
|
||||||
|
}
|
||||||
|
|
||||||
if (config.unlockAllShipDecorations) {
|
if (config.unlockAllShipDecorations) {
|
||||||
inventoryResponse.ShipDecorations = [];
|
inventoryResponse.ShipDecorations = [];
|
||||||
for (const [uniqueName, item] of Object.entries(ExportResources)) {
|
for (const [uniqueName, item] of Object.entries(ExportResources)) {
|
||||||
@ -344,6 +362,12 @@ const allEudicoHeistJobs = [
|
|||||||
"/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyFour"
|
"/Lotus/Types/Gameplay/Venus/Jobs/Heists/HeistProfitTakerBountyFour"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const addString = (arr: string[], str: string): void => {
|
||||||
|
if (arr.indexOf(str) == -1) {
|
||||||
|
arr.push(str);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const getExpRequiredForMr = (rank: number): number => {
|
const getExpRequiredForMr = (rank: number): number => {
|
||||||
if (rank <= 30) {
|
if (rank <= 30) {
|
||||||
return 2500 * rank * rank;
|
return 2500 * rank * rank;
|
||||||
|
@ -7,7 +7,6 @@ import { generateRewardSeed, getInventory } from "@/src/services/inventoryServic
|
|||||||
import { getInventoryResponse } from "./inventoryController";
|
import { getInventoryResponse } from "./inventoryController";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes";
|
import { IMissionInventoryUpdateResponse } from "@/src/types/missionTypes";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/webService";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
**** INPUT ****
|
**** INPUT ****
|
||||||
@ -77,7 +76,6 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
|
|||||||
InventoryJson: JSON.stringify(inventoryResponse),
|
InventoryJson: JSON.stringify(inventoryResponse),
|
||||||
MissionRewards: []
|
MissionRewards: []
|
||||||
});
|
});
|
||||||
sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +106,6 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
|
|||||||
AffiliationMods,
|
AffiliationMods,
|
||||||
ConquestCompletedMissionsCount
|
ConquestCompletedMissionsCount
|
||||||
} satisfies IMissionInventoryUpdateResponse);
|
} satisfies IMissionInventoryUpdateResponse);
|
||||||
sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
|
|||||||
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/webService";
|
|
||||||
|
|
||||||
interface INameWeaponRequest {
|
interface INameWeaponRequest {
|
||||||
ItemName: string;
|
ItemName: string;
|
||||||
@ -28,5 +27,4 @@ export const nameWeaponController: RequestHandler = async (req, res) => {
|
|||||||
res.json({
|
res.json({
|
||||||
InventoryChanges: currencyChanges
|
InventoryChanges: currencyChanges
|
||||||
});
|
});
|
||||||
sendWsBroadcastTo(accountId, { update_inventory: true });
|
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
|
|||||||
import { IPurchaseRequest } from "@/src/types/purchaseTypes";
|
import { IPurchaseRequest } from "@/src/types/purchaseTypes";
|
||||||
import { handlePurchase } from "@/src/services/purchaseService";
|
import { handlePurchase } from "@/src/services/purchaseService";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/webService";
|
|
||||||
|
|
||||||
export const purchaseController: RequestHandler = async (req, res) => {
|
export const purchaseController: RequestHandler = async (req, res) => {
|
||||||
const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest;
|
const purchaseRequest = JSON.parse(String(req.body)) as IPurchaseRequest;
|
||||||
@ -12,5 +11,4 @@ export const purchaseController: RequestHandler = async (req, res) => {
|
|||||||
const response = await handlePurchase(purchaseRequest, inventory);
|
const response = await handlePurchase(purchaseRequest, inventory);
|
||||||
await inventory.save();
|
await inventory.save();
|
||||||
res.json(response);
|
res.json(response);
|
||||||
sendWsBroadcastTo(accountId, { update_inventory: true });
|
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/webService";
|
|
||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
@ -23,7 +22,6 @@ export const renamePetController: RequestHandler = async (req, res) => {
|
|||||||
...data,
|
...data,
|
||||||
inventoryChanges: inventoryChanges
|
inventoryChanges: inventoryChanges
|
||||||
});
|
});
|
||||||
sendWsBroadcastTo(accountId, { update_inventory: true });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
interface IRenamePetRequest {
|
interface IRenamePetRequest {
|
||||||
|
@ -15,7 +15,6 @@ import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
|||||||
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/webService";
|
|
||||||
|
|
||||||
export const sellController: RequestHandler = async (req, res) => {
|
export const sellController: RequestHandler = async (req, res) => {
|
||||||
const payload = JSON.parse(String(req.body)) as ISellRequest;
|
const payload = JSON.parse(String(req.body)) as ISellRequest;
|
||||||
@ -280,7 +279,6 @@ export const sellController: RequestHandler = async (req, res) => {
|
|||||||
res.json({
|
res.json({
|
||||||
inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges"
|
inventoryChanges: inventoryChanges // "inventoryChanges" for this response instead of the usual "InventoryChanges"
|
||||||
});
|
});
|
||||||
sendWsBroadcastTo(accountId, { update_inventory: true });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ISellRequest {
|
interface ISellRequest {
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import { addString } from "@/src/helpers/stringHelpers";
|
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
||||||
import { addFixedLevelRewards } from "@/src/services/missionInventoryUpdateService";
|
|
||||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
|
||||||
import { IMissionReward } from "@/src/types/missionTypes";
|
|
||||||
import { RequestHandler } from "express";
|
|
||||||
import { ExportRegions } from "warframe-public-export-plus";
|
|
||||||
|
|
||||||
export const completeAllMissionsController: RequestHandler = async (req, res) => {
|
|
||||||
const accountId = await getAccountIdForRequest(req);
|
|
||||||
const inventory = await getInventory(accountId);
|
|
||||||
const MissionRewards: IMissionReward[] = [];
|
|
||||||
for (const [tag, node] of Object.entries(ExportRegions)) {
|
|
||||||
if (!inventory.Missions.find(x => x.Tag == tag)) {
|
|
||||||
inventory.Missions.push({
|
|
||||||
Completes: 1,
|
|
||||||
Tier: 1,
|
|
||||||
Tag: tag
|
|
||||||
});
|
|
||||||
|
|
||||||
if (node.missionReward) {
|
|
||||||
console.log(node.missionReward);
|
|
||||||
addFixedLevelRewards(node.missionReward, inventory, MissionRewards);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (const reward of MissionRewards) {
|
|
||||||
await handleStoreItemAcquisition(reward.StoreItem, inventory, reward.ItemCount, undefined, true);
|
|
||||||
}
|
|
||||||
addString(inventory.NodeIntrosCompleted, "TeshinHardModeUnlocked");
|
|
||||||
await inventory.save();
|
|
||||||
res.end();
|
|
||||||
};
|
|
@ -128,7 +128,7 @@ export const manageQuestsController: RequestHandler = async (req, res) => {
|
|||||||
await completeQuest(inventory, questKey.ItemType);
|
await completeQuest(inventory, questKey.ItemType);
|
||||||
} else {
|
} else {
|
||||||
const progress = {
|
const progress = {
|
||||||
c: 0,
|
c: questManifest.chainStages![currentStage].key ? -1 : 0,
|
||||||
i: false,
|
i: false,
|
||||||
m: false,
|
m: false,
|
||||||
b: []
|
b: []
|
||||||
|
@ -54,9 +54,3 @@ export const regexEscape = (str: string): string => {
|
|||||||
str = str.split("}").join("\\}");
|
str = str.split("}").join("\\}");
|
||||||
return str;
|
return str;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const addString = (arr: string[], str: string): void => {
|
|
||||||
if (arr.indexOf(str) == -1) {
|
|
||||||
arr.push(str);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
@ -12,7 +12,6 @@ import { ircDroppedController } from "@/src/controllers/custom/ircDroppedControl
|
|||||||
import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
|
import { unlockAllIntrinsicsController } from "@/src/controllers/custom/unlockAllIntrinsicsController";
|
||||||
import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
|
import { addMissingMaxRankModsController } from "@/src/controllers/custom/addMissingMaxRankModsController";
|
||||||
import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController";
|
import { webuiFileChangeDetectedController } from "@/src/controllers/custom/webuiFileChangeDetectedController";
|
||||||
import { completeAllMissionsController } from "@/src/controllers/custom/completeAllMissionsController";
|
|
||||||
|
|
||||||
import { createAccountController } from "@/src/controllers/custom/createAccountController";
|
import { createAccountController } from "@/src/controllers/custom/createAccountController";
|
||||||
import { createMessageController } from "@/src/controllers/custom/createMessageController";
|
import { createMessageController } from "@/src/controllers/custom/createMessageController";
|
||||||
@ -41,7 +40,6 @@ customRouter.get("/ircDropped", ircDroppedController);
|
|||||||
customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
|
customRouter.get("/unlockAllIntrinsics", unlockAllIntrinsicsController);
|
||||||
customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
|
customRouter.get("/addMissingMaxRankMods", addMissingMaxRankModsController);
|
||||||
customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController);
|
customRouter.get("/webuiFileChangeDetected", webuiFileChangeDetectedController);
|
||||||
customRouter.get("/completeAllMissions", completeAllMissionsController);
|
|
||||||
|
|
||||||
customRouter.post("/createAccount", createAccountController);
|
customRouter.post("/createAccount", createAccountController);
|
||||||
customRouter.post("/createMessage", createMessageController);
|
customRouter.post("/createMessage", createMessageController);
|
||||||
|
@ -19,6 +19,7 @@ export interface IConfig {
|
|||||||
skipTutorial?: boolean;
|
skipTutorial?: boolean;
|
||||||
skipAllDialogue?: boolean;
|
skipAllDialogue?: boolean;
|
||||||
unlockAllScans?: boolean;
|
unlockAllScans?: boolean;
|
||||||
|
unlockAllMissions?: boolean;
|
||||||
infiniteCredits?: boolean;
|
infiniteCredits?: boolean;
|
||||||
infinitePlatinum?: boolean;
|
infinitePlatinum?: boolean;
|
||||||
infiniteEndo?: boolean;
|
infiniteEndo?: boolean;
|
||||||
@ -48,7 +49,6 @@ export interface IConfig {
|
|||||||
noVendorPurchaseLimits?: boolean;
|
noVendorPurchaseLimits?: boolean;
|
||||||
noDeathMarks?: boolean;
|
noDeathMarks?: boolean;
|
||||||
noKimCooldowns?: boolean;
|
noKimCooldowns?: boolean;
|
||||||
fullyStockedVendors?: boolean;
|
|
||||||
syndicateMissionsRepeatable?: boolean;
|
syndicateMissionsRepeatable?: boolean;
|
||||||
unlockAllProfitTakerStages?: boolean;
|
unlockAllProfitTakerStages?: boolean;
|
||||||
instantFinishRivenChallenge?: boolean;
|
instantFinishRivenChallenge?: boolean;
|
||||||
|
@ -1367,7 +1367,7 @@ export const addFixedLevelRewards = (
|
|||||||
if (rewards.countedItems) {
|
if (rewards.countedItems) {
|
||||||
for (const item of rewards.countedItems) {
|
for (const item of rewards.countedItems) {
|
||||||
MissionRewards.push({
|
MissionRewards.push({
|
||||||
StoreItem: toStoreItem(item.ItemType),
|
StoreItem: `/Lotus/StoreItems${item.ItemType.substring("Lotus/".length)}`,
|
||||||
ItemCount: item.ItemCount
|
ItemCount: item.ItemCount
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import { mixSeeds, SRng } from "@/src/services/rngService";
|
|||||||
import { IItemManifest, IVendorInfo, IVendorManifest } from "@/src/types/vendorTypes";
|
import { IItemManifest, IVendorInfo, IVendorManifest } from "@/src/types/vendorTypes";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { ExportVendors, IRange, IVendor, IVendorOffer } from "warframe-public-export-plus";
|
import { ExportVendors, IRange, IVendor, IVendorOffer } from "warframe-public-export-plus";
|
||||||
import { config } from "./configService";
|
|
||||||
|
|
||||||
interface IGeneratableVendorInfo extends Omit<IVendorInfo, "ItemManifest" | "Expiry"> {
|
interface IGeneratableVendorInfo extends Omit<IVendorInfo, "ItemManifest" | "Expiry"> {
|
||||||
cycleOffset?: number;
|
cycleOffset?: number;
|
||||||
@ -60,23 +59,20 @@ const getCycleDuration = (manifest: IVendor): number => {
|
|||||||
return dur * unixTimesInMs.hour;
|
return dur * unixTimesInMs.hour;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getVendorManifestByTypeName = (typeName: string, fullStock?: boolean): IVendorManifest | undefined => {
|
export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | undefined => {
|
||||||
for (const vendorInfo of generatableVendors) {
|
for (const vendorInfo of generatableVendors) {
|
||||||
if (vendorInfo.TypeName == typeName) {
|
if (vendorInfo.TypeName == typeName) {
|
||||||
return generateVendorManifest(vendorInfo, fullStock ?? config.fullyStockedVendors);
|
return generateVendorManifest(vendorInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (typeName in ExportVendors) {
|
if (typeName in ExportVendors) {
|
||||||
const manifest = ExportVendors[typeName];
|
const manifest = ExportVendors[typeName];
|
||||||
return generateVendorManifest(
|
return generateVendorManifest({
|
||||||
{
|
_id: { $oid: getVendorOid(typeName) },
|
||||||
_id: { $oid: getVendorOid(typeName) },
|
TypeName: typeName,
|
||||||
TypeName: typeName,
|
RandomSeedType: manifest.randomSeedType,
|
||||||
RandomSeedType: manifest.randomSeedType,
|
cycleDuration: getCycleDuration(manifest)
|
||||||
cycleDuration: getCycleDuration(manifest)
|
});
|
||||||
},
|
|
||||||
fullStock ?? config.fullyStockedVendors
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
};
|
};
|
||||||
@ -84,21 +80,18 @@ export const getVendorManifestByTypeName = (typeName: string, fullStock?: boolea
|
|||||||
export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => {
|
export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => {
|
||||||
for (const vendorInfo of generatableVendors) {
|
for (const vendorInfo of generatableVendors) {
|
||||||
if (vendorInfo._id.$oid == oid) {
|
if (vendorInfo._id.$oid == oid) {
|
||||||
return generateVendorManifest(vendorInfo, config.fullyStockedVendors);
|
return generateVendorManifest(vendorInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const [typeName, manifest] of Object.entries(ExportVendors)) {
|
for (const [typeName, manifest] of Object.entries(ExportVendors)) {
|
||||||
const typeNameOid = getVendorOid(typeName);
|
const typeNameOid = getVendorOid(typeName);
|
||||||
if (typeNameOid == oid) {
|
if (typeNameOid == oid) {
|
||||||
return generateVendorManifest(
|
return generateVendorManifest({
|
||||||
{
|
_id: { $oid: typeNameOid },
|
||||||
_id: { $oid: typeNameOid },
|
TypeName: typeName,
|
||||||
TypeName: typeName,
|
RandomSeedType: manifest.randomSeedType,
|
||||||
RandomSeedType: manifest.randomSeedType,
|
cycleDuration: getCycleDuration(manifest)
|
||||||
cycleDuration: getCycleDuration(manifest)
|
});
|
||||||
},
|
|
||||||
config.fullyStockedVendors
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
@ -176,26 +169,9 @@ const getOfferId = (offer: IVendorOffer | IItemManifest): TOfferId => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let vendorManifestsUsingFullStock = false;
|
|
||||||
const vendorManifestCache: Record<string, IVendorManifest> = {};
|
const vendorManifestCache: Record<string, IVendorManifest> = {};
|
||||||
|
|
||||||
const clearVendorCache = (): void => {
|
const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorManifest => {
|
||||||
for (const k of Object.keys(vendorManifestCache)) {
|
|
||||||
delete vendorManifestCache[k];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const generateVendorManifest = (
|
|
||||||
vendorInfo: IGeneratableVendorInfo,
|
|
||||||
fullStock: boolean | undefined
|
|
||||||
): IVendorManifest => {
|
|
||||||
fullStock ??= config.fullyStockedVendors;
|
|
||||||
fullStock ??= false;
|
|
||||||
if (vendorManifestsUsingFullStock != fullStock) {
|
|
||||||
vendorManifestsUsingFullStock = fullStock;
|
|
||||||
clearVendorCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(vendorInfo.TypeName in vendorManifestCache)) {
|
if (!(vendorInfo.TypeName in vendorManifestCache)) {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const { cycleOffset, cycleDuration, ...clientVendorInfo } = vendorInfo;
|
const { cycleOffset, cycleDuration, ...clientVendorInfo } = vendorInfo;
|
||||||
@ -232,20 +208,7 @@ const generateVendorManifest = (
|
|||||||
const cycleIndex = Math.trunc((now - cycleOffset) / cycleDuration);
|
const cycleIndex = Math.trunc((now - cycleOffset) / cycleDuration);
|
||||||
const rng = new SRng(mixSeeds(vendorSeed, cycleIndex));
|
const rng = new SRng(mixSeeds(vendorSeed, cycleIndex));
|
||||||
const offersToAdd: IVendorOffer[] = [];
|
const offersToAdd: IVendorOffer[] = [];
|
||||||
if (manifest.isOneBinPerCycle) {
|
if (!manifest.isOneBinPerCycle) {
|
||||||
if (fullStock) {
|
|
||||||
for (const rawItem of manifest.items) {
|
|
||||||
offersToAdd.push(rawItem);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const binThisCycle = cycleIndex % 2; // Note: May want to check the actual number of bins, but this is only used for coda weapons right now.
|
|
||||||
for (const rawItem of manifest.items) {
|
|
||||||
if (rawItem.bin == binThisCycle) {
|
|
||||||
offersToAdd.push(rawItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Compute vendor requirements, subtracting existing offers
|
// Compute vendor requirements, subtracting existing offers
|
||||||
const remainingItemCapacity: Record<TOfferId, number> = {};
|
const remainingItemCapacity: Record<TOfferId, number> = {};
|
||||||
const missingItemsPerBin: Record<number, number> = {};
|
const missingItemsPerBin: Record<number, number> = {};
|
||||||
@ -291,14 +254,12 @@ const generateVendorManifest = (
|
|||||||
manifest.numItems &&
|
manifest.numItems &&
|
||||||
(manifest.numItems.minValue != manifest.numItems.maxValue ||
|
(manifest.numItems.minValue != manifest.numItems.maxValue ||
|
||||||
manifest.numItems.minValue != numCountedOffers);
|
manifest.numItems.minValue != numCountedOffers);
|
||||||
const numItemsTarget = fullStock
|
const numItemsTarget = manifest.numItems
|
||||||
? numUncountedOffers + numCountedOffers
|
? numUncountedOffers +
|
||||||
: manifest.numItems
|
(useRng
|
||||||
? numUncountedOffers +
|
? rng.randomInt(manifest.numItems.minValue, manifest.numItems.maxValue)
|
||||||
(useRng
|
: manifest.numItems.minValue)
|
||||||
? rng.randomInt(manifest.numItems.minValue, manifest.numItems.maxValue)
|
: manifest.items.length;
|
||||||
: manifest.numItems.minValue)
|
|
||||||
: manifest.items.length;
|
|
||||||
let i = 0;
|
let i = 0;
|
||||||
const rollableOffers = manifest.items.filter(x => x.probability !== undefined) as (Omit<
|
const rollableOffers = manifest.items.filter(x => x.probability !== undefined) as (Omit<
|
||||||
IVendorOffer,
|
IVendorOffer,
|
||||||
@ -321,6 +282,13 @@ const generateVendorManifest = (
|
|||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const binThisCycle = cycleIndex % 2; // Note: May want to auto-compute the bin size, but this is only used for coda weapons right now.
|
||||||
|
for (const rawItem of manifest.items) {
|
||||||
|
if (rawItem.bin == binThisCycle) {
|
||||||
|
offersToAdd.push(rawItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const cycleStart = cycleOffset + cycleIndex * cycleDuration;
|
const cycleStart = cycleOffset + cycleIndex * cycleDuration;
|
||||||
for (const rawItem of offersToAdd) {
|
for (const rawItem of offersToAdd) {
|
||||||
@ -419,44 +387,34 @@ if (args.dev) {
|
|||||||
logger.warn(`getCycleDuration self test failed`);
|
logger.warn(`getCycleDuration self test failed`);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i != 2; ++i) {
|
const ads = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest")!
|
||||||
const fullStock = !!i;
|
.VendorInfo.ItemManifest;
|
||||||
|
if (
|
||||||
const ads = getVendorManifestByTypeName(
|
ads.length != 5 ||
|
||||||
"/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest",
|
ads[0].Bin != "BIN_4" ||
|
||||||
fullStock
|
ads[1].Bin != "BIN_3" ||
|
||||||
)!.VendorInfo.ItemManifest;
|
ads[2].Bin != "BIN_2" ||
|
||||||
if (
|
ads[3].Bin != "BIN_1" ||
|
||||||
ads.length != 5 ||
|
ads[4].Bin != "BIN_0"
|
||||||
ads[0].Bin != "BIN_4" ||
|
) {
|
||||||
ads[1].Bin != "BIN_3" ||
|
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest`);
|
||||||
ads[2].Bin != "BIN_2" ||
|
|
||||||
ads[3].Bin != "BIN_1" ||
|
|
||||||
ads[4].Bin != "BIN_0"
|
|
||||||
) {
|
|
||||||
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const pall = getVendorManifestByTypeName(
|
|
||||||
"/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest",
|
|
||||||
fullStock
|
|
||||||
)!.VendorInfo.ItemManifest;
|
|
||||||
if (
|
|
||||||
pall.length != 5 ||
|
|
||||||
pall[0].StoreItem != "/Lotus/StoreItems/Types/Items/ShipDecos/HarrowQuestKeyOrnament" ||
|
|
||||||
pall[1].StoreItem != "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack" ||
|
|
||||||
pall[2].StoreItem != "/Lotus/StoreItems/Types/StoreItems/CreditBundles/150000Credits" ||
|
|
||||||
pall[3].StoreItem != "/Lotus/StoreItems/Types/Items/MiscItems/Kuva" ||
|
|
||||||
pall[4].StoreItem != "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack"
|
|
||||||
) {
|
|
||||||
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const cms = getVendorManifestByTypeName(
|
const pall = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest")!
|
||||||
"/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest",
|
.VendorInfo.ItemManifest;
|
||||||
false
|
if (
|
||||||
)!.VendorInfo.ItemManifest;
|
pall.length != 5 ||
|
||||||
|
pall[0].StoreItem != "/Lotus/StoreItems/Types/Items/ShipDecos/HarrowQuestKeyOrnament" ||
|
||||||
|
pall[1].StoreItem != "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack" ||
|
||||||
|
pall[2].StoreItem != "/Lotus/StoreItems/Types/StoreItems/CreditBundles/150000Credits" ||
|
||||||
|
pall[3].StoreItem != "/Lotus/StoreItems/Types/Items/MiscItems/Kuva" ||
|
||||||
|
pall[4].StoreItem != "/Lotus/StoreItems/Types/BoosterPacks/RivenModPack"
|
||||||
|
) {
|
||||||
|
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const cms = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest")!
|
||||||
|
.VendorInfo.ItemManifest;
|
||||||
if (
|
if (
|
||||||
cms.length != 9 ||
|
cms.length != 9 ||
|
||||||
cms[0].Bin != "BIN_2" ||
|
cms[0].Bin != "BIN_2" ||
|
||||||
@ -468,15 +426,13 @@ if (args.dev) {
|
|||||||
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest`);
|
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/Hubs/RailjackCrewMemberVendorManifest`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const temple = getVendorManifestByTypeName(
|
const temple = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/TheHex/Temple1999VendorManifest")!
|
||||||
"/Lotus/Types/Game/VendorManifests/TheHex/Temple1999VendorManifest",
|
.VendorInfo.ItemManifest;
|
||||||
false
|
|
||||||
)!.VendorInfo.ItemManifest;
|
|
||||||
if (!temple.find(x => x.StoreItem == "/Lotus/StoreItems/Types/Items/MiscItems/Kuva")) {
|
if (!temple.find(x => x.StoreItem == "/Lotus/StoreItems/Types/Items/MiscItems/Kuva")) {
|
||||||
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/TheHex/Temple1999VendorManifest`);
|
logger.warn(`self test failed for /Lotus/Types/Game/VendorManifests/TheHex/Temple1999VendorManifest`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const nakak = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest", false)!
|
const nakak = getVendorManifestByTypeName("/Lotus/Types/Game/VendorManifests/Ostron/MaskSalesmanManifest")!
|
||||||
.VendorInfo.ItemManifest;
|
.VendorInfo.ItemManifest;
|
||||||
if (
|
if (
|
||||||
nakak.length != 10 ||
|
nakak.length != 10 ||
|
||||||
|
@ -10,7 +10,6 @@ import { Account } from "../models/loginModel";
|
|||||||
import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "./loginService";
|
import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "./loginService";
|
||||||
import { IDatabaseAccountJson } from "../types/loginTypes";
|
import { IDatabaseAccountJson } from "../types/loginTypes";
|
||||||
import { HydratedDocument } from "mongoose";
|
import { HydratedDocument } from "mongoose";
|
||||||
import websocket from "websocket";
|
|
||||||
|
|
||||||
let httpServer: http.Server | undefined;
|
let httpServer: http.Server | undefined;
|
||||||
let httpsServer: https.Server | undefined;
|
let httpsServer: https.Server | undefined;
|
||||||
@ -45,37 +44,6 @@ export const startWebServer = (): void => {
|
|||||||
logger.info(
|
logger.info(
|
||||||
"Access the WebUI in your browser at http://localhost" + (httpPort == 80 ? "" : ":" + httpPort)
|
"Access the WebUI in your browser at http://localhost" + (httpPort == 80 ? "" : ":" + httpPort)
|
||||||
);
|
);
|
||||||
|
|
||||||
void runWsSelfTest("wss", httpsPort).then(ok => {
|
|
||||||
if (!ok) {
|
|
||||||
logger.warn(`WSS self-test failed. The server may not actually be reachable at port ${httpsPort}.`);
|
|
||||||
if (process.platform == "win32") {
|
|
||||||
logger.warn(
|
|
||||||
`You can check who actually has that port via powershell: Get-Process -Id (Get-NetTCPConnection -LocalPort ${httpsPort}).OwningProcess`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const runWsSelfTest = (protocol: "ws" | "wss", port: number): Promise<boolean> => {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
const client = new websocket.client({ tlsOptions: { rejectUnauthorized: false } });
|
|
||||||
client.connect(`${protocol}://localhost:${port}/custom/selftest`);
|
|
||||||
client.on("connect", connection => {
|
|
||||||
connection.on("message", msg => {
|
|
||||||
if (msg.type == "utf8" && msg.utf8Data == "SpaceNinjaServer") {
|
|
||||||
resolve(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
connection.on("close", () => {
|
|
||||||
resolve(false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
client.on("connectFailed", () => {
|
|
||||||
resolve(false);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -157,15 +125,9 @@ interface IWsMsgToClient {
|
|||||||
isRegister: boolean;
|
isRegister: boolean;
|
||||||
};
|
};
|
||||||
logged_out?: boolean;
|
logged_out?: boolean;
|
||||||
update_inventory?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const wsOnConnect = (ws: ws, req: http.IncomingMessage): void => {
|
const wsOnConnect = (ws: ws, _req: http.IncomingMessage): void => {
|
||||||
if (req.url == "/custom/selftest") {
|
|
||||||
ws.send("SpaceNinjaServer");
|
|
||||||
ws.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||||
ws.on("message", async msg => {
|
ws.on("message", async msg => {
|
||||||
const data = JSON.parse(String(msg)) as IWsMsgFromClient;
|
const data = JSON.parse(String(msg)) as IWsMsgFromClient;
|
||||||
|
@ -452,6 +452,9 @@
|
|||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
|
<button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
|
<button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -584,6 +587,10 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="unlockAllScans" />
|
<input class="form-check-input" type="checkbox" id="unlockAllScans" />
|
||||||
<label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
|
<label class="form-check-label" for="unlockAllScans" data-loc="cheats_unlockAllScans"></label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="unlockAllMissions" />
|
||||||
|
<label class="form-check-label" for="unlockAllMissions" data-loc="cheats_unlockAllMissions"></label>
|
||||||
|
</div>
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
<input class="form-check-input" type="checkbox" id="infiniteCredits" />
|
||||||
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
<label class="form-check-label" for="infiniteCredits" data-loc="cheats_infiniteCredits"></label>
|
||||||
@ -700,10 +707,6 @@
|
|||||||
<input class="form-check-input" type="checkbox" id="noKimCooldowns" />
|
<input class="form-check-input" type="checkbox" id="noKimCooldowns" />
|
||||||
<label class="form-check-label" for="noKimCooldowns" data-loc="cheats_noKimCooldowns"></label>
|
<label class="form-check-label" for="noKimCooldowns" data-loc="cheats_noKimCooldowns"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" id="fullyStockedVendors" />
|
|
||||||
<label class="form-check-label" for="fullyStockedVendors" data-loc="cheats_fullyStockedVendors"></label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" id="syndicateMissionsRepeatable" />
|
<input class="form-check-input" type="checkbox" id="syndicateMissionsRepeatable" />
|
||||||
<label class="form-check-label" for="syndicateMissionsRepeatable" data-loc="cheats_syndicateMissionsRepeatable"></label>
|
<label class="form-check-label" for="syndicateMissionsRepeatable" data-loc="cheats_syndicateMissionsRepeatable"></label>
|
||||||
@ -779,11 +782,9 @@
|
|||||||
<h5 class="card-header" data-loc="cheats_account"></h5>
|
<h5 class="card-header" data-loc="cheats_account"></h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="mb-2 d-flex flex-wrap gap-2">
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
<button class="btn btn-primary" onclick="debounce(doUnlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>
|
|
||||||
<button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
|
<button class="btn btn-primary" onclick="doUnlockAllFocusSchools();" data-loc="cheats_unlockAllFocusSchools"></button>
|
||||||
<button class="btn btn-primary" onclick="doHelminthUnlockAll();" data-loc="cheats_helminthUnlockAll"></button>
|
<button class="btn btn-primary" onclick="doHelminthUnlockAll();" data-loc="cheats_helminthUnlockAll"></button>
|
||||||
<button class="btn btn-primary" onclick="doIntrinsicsUnlockAll();" data-loc="cheats_intrinsicsUnlockAll"></button>
|
<button class="btn btn-primary" onclick="doIntrinsicsUnlockAll();" data-loc="cheats_intrinsicsUnlockAll"></button>
|
||||||
<button class="btn btn-primary" onclick="debounce(doMaxPlexus);" data-loc="inventory_maxPlexus"></button>
|
|
||||||
</div>
|
</div>
|
||||||
<form class="mt-2" onsubmit="doChangeSupportedSyndicate(); return false;">
|
<form class="mt-2" onsubmit="doChangeSupportedSyndicate(); return false;">
|
||||||
<label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
|
<label class="form-label" for="changeSyndicate" data-loc="cheats_changeSupportedSyndicate"></label>
|
||||||
|
@ -79,9 +79,6 @@ function openWebSocket() {
|
|||||||
if ("logged_out" in msg) {
|
if ("logged_out" in msg) {
|
||||||
sendAuth();
|
sendAuth();
|
||||||
}
|
}
|
||||||
if ("update_inventory" in msg) {
|
|
||||||
updateInventory();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
window.ws.onclose = function () {
|
window.ws.onclose = function () {
|
||||||
ws_is_open = false;
|
ws_is_open = false;
|
||||||
@ -114,9 +111,11 @@ function doLogin() {
|
|||||||
window.registerSubmit = false;
|
window.registerSubmit = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function revalidateAuthz() {
|
function revalidateAuthz(succ_cb) {
|
||||||
await getWebSocket();
|
getWebSocket().then(() => {
|
||||||
// We have a websocket connection, so authz should be good.
|
// We have a websocket connection, so authz should be good.
|
||||||
|
succ_cb();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function logout() {
|
function logout() {
|
||||||
@ -136,7 +135,7 @@ function doLogout() {
|
|||||||
function renameAccount() {
|
function renameAccount() {
|
||||||
const newname = window.prompt(loc("code_changeNameConfirm"));
|
const newname = window.prompt(loc("code_changeNameConfirm"));
|
||||||
if (newname) {
|
if (newname) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
fetch("/custom/renameAccount?" + window.authz + "&newname=" + newname).then(() => {
|
fetch("/custom/renameAccount?" + window.authz + "&newname=" + newname).then(() => {
|
||||||
$(".displayname").text(newname);
|
$(".displayname").text(newname);
|
||||||
updateLocElements();
|
updateLocElements();
|
||||||
@ -147,7 +146,7 @@ function renameAccount() {
|
|||||||
|
|
||||||
function deleteAccount() {
|
function deleteAccount() {
|
||||||
if (window.confirm(loc("code_deleteAccountConfirm"))) {
|
if (window.confirm(loc("code_deleteAccountConfirm"))) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
fetch("/custom/deleteAccount?" + window.authz).then(() => {
|
fetch("/custom/deleteAccount?" + window.authz).then(() => {
|
||||||
logout();
|
logout();
|
||||||
single.loadRoute("/webui/"); // Show login screen
|
single.loadRoute("/webui/"); // Show login screen
|
||||||
@ -647,7 +646,7 @@ function updateInventory() {
|
|||||||
a.href = "#";
|
a.href = "#";
|
||||||
a.onclick = function (event) {
|
a.onclick = function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const promises = [];
|
const promises = [];
|
||||||
if (item.XP < maxXP) {
|
if (item.XP < maxXP) {
|
||||||
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
|
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
|
||||||
@ -1237,7 +1236,7 @@ function doAcquireEquipment(category) {
|
|||||||
.focus();
|
.focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.post({
|
const req = $.post({
|
||||||
url: "/custom/addItems?" + window.authz,
|
url: "/custom/addItems?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1364,7 +1363,7 @@ function doAcquireModularEquipment(category, WeaponType) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (category == "KubrowPets") Parts.unshift(WeaponType);
|
if (category == "KubrowPets") Parts.unshift(WeaponType);
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.post({
|
const req = $.post({
|
||||||
url: "/api/modularWeaponCrafting.php?" + window.authz,
|
url: "/api/modularWeaponCrafting.php?" + window.authz,
|
||||||
contentType: "application/octet-stream",
|
contentType: "application/octet-stream",
|
||||||
@ -1417,7 +1416,7 @@ $("input[list]").on("input", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function dispatchAddItemsRequestsBatch(requests) {
|
function dispatchAddItemsRequestsBatch(requests) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.post({
|
const req = $.post({
|
||||||
url: "/custom/addItems?" + window.authz,
|
url: "/custom/addItems?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1461,7 +1460,7 @@ function addMissingEvolutionProgress() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function maxRankAllEvolutions() {
|
function maxRankAllEvolutions() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
req.done(data => {
|
req.done(data => {
|
||||||
const requests = [];
|
const requests = [];
|
||||||
@ -1485,7 +1484,7 @@ function maxRankAllEvolutions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function maxRankAllEquipment(categories) {
|
function maxRankAllEquipment(categories) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
req.done(data => {
|
req.done(data => {
|
||||||
window.itemListPromise.then(itemMap => {
|
window.itemListPromise.then(itemMap => {
|
||||||
@ -1559,7 +1558,7 @@ function addGearExp(category, oid, xp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function sendBatchGearExp(data) {
|
function sendBatchGearExp(data) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/addXp?" + window.authz,
|
url: "/custom/addXp?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1572,7 +1571,7 @@ function sendBatchGearExp(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renameGear(category, oid, name) {
|
function renameGear(category, oid, name) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
if (category == "KubrowPets") {
|
if (category == "KubrowPets") {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/renamePet.php?" + window.authz + "&webui=1",
|
url: "/api/renamePet.php?" + window.authz + "&webui=1",
|
||||||
@ -1600,7 +1599,7 @@ function renameGear(category, oid, name) {
|
|||||||
|
|
||||||
function disposeOfGear(category, oid) {
|
function disposeOfGear(category, oid) {
|
||||||
if (category == "KubrowPets") {
|
if (category == "KubrowPets") {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/releasePet.php?" + window.authz,
|
url: "/api/releasePet.php?" + window.authz,
|
||||||
contentType: "application/octet-stream",
|
contentType: "application/octet-stream",
|
||||||
@ -1622,7 +1621,7 @@ function disposeOfGear(category, oid) {
|
|||||||
Count: 0
|
Count: 0
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/sell.php?" + window.authz,
|
url: "/api/sell.php?" + window.authz,
|
||||||
contentType: "text/plain",
|
contentType: "text/plain",
|
||||||
@ -1644,7 +1643,7 @@ function disposeOfItems(category, type, count) {
|
|||||||
Count: count
|
Count: count
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/sell.php?" + window.authz,
|
url: "/api/sell.php?" + window.authz,
|
||||||
contentType: "text/plain",
|
contentType: "text/plain",
|
||||||
@ -1654,7 +1653,7 @@ function disposeOfItems(category, type, count) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function gildEquipment(category, oid) {
|
function gildEquipment(category, oid) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/gildWeapon.php?" + window.authz + "&ItemId=" + oid + "&Category=" + category,
|
url: "/api/gildWeapon.php?" + window.authz + "&ItemId=" + oid + "&Category=" + category,
|
||||||
contentType: "application/octet-stream",
|
contentType: "application/octet-stream",
|
||||||
@ -1668,7 +1667,7 @@ function gildEquipment(category, oid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function maturePet(oid, revert) {
|
function maturePet(oid, revert) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/maturePet.php?" + window.authz,
|
url: "/api/maturePet.php?" + window.authz,
|
||||||
contentType: "application/octet-stream",
|
contentType: "application/octet-stream",
|
||||||
@ -1683,7 +1682,7 @@ function maturePet(oid, revert) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setEvolutionProgress(requests) {
|
function setEvolutionProgress(requests) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.post({
|
const req = $.post({
|
||||||
url: "/custom/setEvolutionProgress?" + window.authz,
|
url: "/custom/setEvolutionProgress?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1703,7 +1702,7 @@ function doAcquireMiscItems() {
|
|||||||
}
|
}
|
||||||
const count = parseInt($("#miscitem-count").val());
|
const count = parseInt($("#miscitem-count").val());
|
||||||
if (count != 0) {
|
if (count != 0) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/addItems?" + window.authz,
|
url: "/custom/addItems?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1744,7 +1743,7 @@ function doAcquireRiven() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const uniqueName = "/Lotus/Upgrades/Mods/Randomized/" + $("#addriven-type").val();
|
const uniqueName = "/Lotus/Upgrades/Mods/Randomized/" + $("#addriven-type").val();
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
// Add riven type to inventory
|
// Add riven type to inventory
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/addItems?" + window.authz,
|
url: "/custom/addItems?" + window.authz,
|
||||||
@ -1791,7 +1790,7 @@ $("#addriven-fingerprint").on("input", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function setFingerprint(ItemType, ItemId, fingerprint) {
|
function setFingerprint(ItemType, ItemId, fingerprint) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/api/artifacts.php?" + window.authz,
|
url: "/api/artifacts.php?" + window.authz,
|
||||||
contentType: "text/plain",
|
contentType: "text/plain",
|
||||||
@ -1819,7 +1818,7 @@ function doAcquireMod() {
|
|||||||
}
|
}
|
||||||
const count = parseInt($("#mod-count").val());
|
const count = parseInt($("#mod-count").val());
|
||||||
if (count != 0) {
|
if (count != 0) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/addItems?" + window.authz,
|
url: "/custom/addItems?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -1896,7 +1895,7 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if ((await res.text()) == "Log-in expired") {
|
if ((await res.text()) == "Log-in expired") {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
if (single.getCurrentPath() == "/webui/cheats") {
|
if (single.getCurrentPath() == "/webui/cheats") {
|
||||||
single.loadRoute("/webui/cheats");
|
single.loadRoute("/webui/cheats");
|
||||||
}
|
}
|
||||||
@ -1913,7 +1912,7 @@ single.getRoute("/webui/cheats").on("beforeload", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function doUnlockAllFocusSchools() {
|
function doUnlockAllFocusSchools() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1").done(async data => {
|
$.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1").done(async data => {
|
||||||
const missingFocusUpgrades = {
|
const missingFocusUpgrades = {
|
||||||
"/Lotus/Upgrades/Focus/Attack/AttackFocusAbility": true,
|
"/Lotus/Upgrades/Focus/Attack/AttackFocusAbility": true,
|
||||||
@ -1964,13 +1963,13 @@ function unlockFocusSchool(upgradeType) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doHelminthUnlockAll() {
|
function doHelminthUnlockAll() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post("/api/infestedFoundry.php?" + window.authz + "&mode=custom_unlockall");
|
$.post("/api/infestedFoundry.php?" + window.authz + "&mode=custom_unlockall");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function doIntrinsicsUnlockAll() {
|
function doIntrinsicsUnlockAll() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.get("/custom/unlockAllIntrinsics?" + window.authz);
|
$.get("/custom/unlockAllIntrinsics?" + window.authz);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1982,7 +1981,7 @@ function doAddAllMods() {
|
|||||||
}
|
}
|
||||||
modsAll.delete("/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser");
|
modsAll.delete("/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser");
|
||||||
|
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
req.done(data => {
|
req.done(data => {
|
||||||
for (const modOwned of data.RawUpgrades) {
|
for (const modOwned of data.RawUpgrades) {
|
||||||
@ -2014,7 +2013,7 @@ function doAddAllMods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doRemoveUnrankedMods() {
|
function doRemoveUnrankedMods() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
|
||||||
req.done(inventory => {
|
req.done(inventory => {
|
||||||
window.itemListPromise.then(itemMap => {
|
window.itemListPromise.then(itemMap => {
|
||||||
@ -2039,7 +2038,7 @@ function doRemoveUnrankedMods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doAddMissingMaxRankMods() {
|
function doAddMissingMaxRankMods() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
fetch("/custom/addMissingMaxRankMods?" + window.authz).then(() => {
|
fetch("/custom/addMissingMaxRankMods?" + window.authz).then(() => {
|
||||||
updateInventory();
|
updateInventory();
|
||||||
});
|
});
|
||||||
@ -2061,7 +2060,7 @@ function doPushArchonCrystalUpgrade() {
|
|||||||
$("[list='datalist-archonCrystalUpgrades']").addClass("is-invalid").focus();
|
$("[list='datalist-archonCrystalUpgrades']").addClass("is-invalid").focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.get(
|
$.get(
|
||||||
"/custom/pushArchonCrystalUpgrade?" +
|
"/custom/pushArchonCrystalUpgrade?" +
|
||||||
window.authz +
|
window.authz +
|
||||||
@ -2079,7 +2078,7 @@ function doPushArchonCrystalUpgrade() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doPopArchonCrystalUpgrade(type) {
|
function doPopArchonCrystalUpgrade(type) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.get(
|
$.get(
|
||||||
"/custom/popArchonCrystalUpgrade?" +
|
"/custom/popArchonCrystalUpgrade?" +
|
||||||
window.authz +
|
window.authz +
|
||||||
@ -2094,7 +2093,7 @@ function doPopArchonCrystalUpgrade(type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doImport() {
|
function doImport() {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/import?" + window.authz,
|
url: "/custom/import?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -2111,7 +2110,7 @@ function doImport() {
|
|||||||
function doChangeSupportedSyndicate() {
|
function doChangeSupportedSyndicate() {
|
||||||
const uniqueName = document.getElementById("changeSyndicate").value;
|
const uniqueName = document.getElementById("changeSyndicate").value;
|
||||||
|
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.get("/api/setSupportedSyndicate.php?" + window.authz + "&syndicate=" + uniqueName).done(function () {
|
$.get("/api/setSupportedSyndicate.php?" + window.authz + "&syndicate=" + uniqueName).done(function () {
|
||||||
updateInventory();
|
updateInventory();
|
||||||
});
|
});
|
||||||
@ -2119,7 +2118,7 @@ function doChangeSupportedSyndicate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doAddCurrency(currency) {
|
function doAddCurrency(currency) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/addCurrency?" + window.authz,
|
url: "/custom/addCurrency?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -2134,7 +2133,7 @@ function doAddCurrency(currency) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doQuestUpdate(operation, itemType) {
|
function doQuestUpdate(operation, itemType) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation + "&itemType=" + itemType,
|
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation + "&itemType=" + itemType,
|
||||||
contentType: "application/json"
|
contentType: "application/json"
|
||||||
@ -2145,7 +2144,7 @@ function doQuestUpdate(operation, itemType) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doBulkQuestUpdate(operation) {
|
function doBulkQuestUpdate(operation) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation,
|
url: "/custom/manageQuests?" + window.authz + "&operation=" + operation,
|
||||||
contentType: "application/json"
|
contentType: "application/json"
|
||||||
@ -2243,7 +2242,7 @@ function handleModularSelection(category) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setBooster(ItemType, ExpiryDate, callback) {
|
function setBooster(ItemType, ExpiryDate, callback) {
|
||||||
revalidateAuthz().then(() => {
|
revalidateAuthz(() => {
|
||||||
$.post({
|
$.post({
|
||||||
url: "/custom/setBooster?" + window.authz,
|
url: "/custom/setBooster?" + window.authz,
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
@ -2333,9 +2332,3 @@ async function doMaxPlexus() {
|
|||||||
toast(loc("code_noEquipmentToRankUp"));
|
toast(loc("code_noEquipmentToRankUp"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function doUnlockAllMissions() {
|
|
||||||
await revalidateAuthz();
|
|
||||||
await fetch("/custom/completeAllMissions?" + window.authz);
|
|
||||||
updateInventory();
|
|
||||||
}
|
|
||||||
|
@ -158,7 +158,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`,
|
cheats_noVendorPurchaseLimits: `Keine Kaufbeschränkungen bei Händlern`,
|
||||||
cheats_noDeathMarks: `Keine Todesmarkierungen`,
|
cheats_noDeathMarks: `Keine Todesmarkierungen`,
|
||||||
cheats_noKimCooldowns: `Keine Wartezeit bei KIM`,
|
cheats_noKimCooldowns: `Keine Wartezeit bei KIM`,
|
||||||
cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`,
|
cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`,
|
||||||
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
||||||
cheats_instantFinishRivenChallenge: `Riven-Mod Herausforderung sofort abschließen`,
|
cheats_instantFinishRivenChallenge: `Riven-Mod Herausforderung sofort abschließen`,
|
||||||
|
@ -157,7 +157,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `No Vendor Purchase Limits`,
|
cheats_noVendorPurchaseLimits: `No Vendor Purchase Limits`,
|
||||||
cheats_noDeathMarks: `No Death Marks`,
|
cheats_noDeathMarks: `No Death Marks`,
|
||||||
cheats_noKimCooldowns: `No KIM Cooldowns`,
|
cheats_noKimCooldowns: `No KIM Cooldowns`,
|
||||||
cheats_fullyStockedVendors: `Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `Syndicate Missions Repeatable`,
|
cheats_syndicateMissionsRepeatable: `Syndicate Missions Repeatable`,
|
||||||
cheats_unlockAllProfitTakerStages: `Unlock All Profit Taker Stages`,
|
cheats_unlockAllProfitTakerStages: `Unlock All Profit Taker Stages`,
|
||||||
cheats_instantFinishRivenChallenge: `Instant Finish Riven Challenge`,
|
cheats_instantFinishRivenChallenge: `Instant Finish Riven Challenge`,
|
||||||
|
@ -158,7 +158,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `Sin límite de compras de vendedores`,
|
cheats_noVendorPurchaseLimits: `Sin límite de compras de vendedores`,
|
||||||
cheats_noDeathMarks: `Sin marcas de muerte`,
|
cheats_noDeathMarks: `Sin marcas de muerte`,
|
||||||
cheats_noKimCooldowns: `Sin tiempo de espera para conversaciones KIM`,
|
cheats_noKimCooldowns: `Sin tiempo de espera para conversaciones KIM`,
|
||||||
cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`,
|
cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`,
|
||||||
cheats_unlockAllProfitTakerStages: `Deslobquea todas las etapas del Roba-ganancias`,
|
cheats_unlockAllProfitTakerStages: `Deslobquea todas las etapas del Roba-ganancias`,
|
||||||
cheats_instantFinishRivenChallenge: `Terminar desafío de agrietado inmediatamente`,
|
cheats_instantFinishRivenChallenge: `Terminar desafío de agrietado inmediatamente`,
|
||||||
|
@ -158,7 +158,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `Aucune limite d'achat chez les PNJ`,
|
cheats_noVendorPurchaseLimits: `Aucune limite d'achat chez les PNJ`,
|
||||||
cheats_noDeathMarks: `Aucune marque d'assassin`,
|
cheats_noDeathMarks: `Aucune marque d'assassin`,
|
||||||
cheats_noKimCooldowns: `Aucun cooldown sur le KIM`,
|
cheats_noKimCooldowns: `Aucun cooldown sur le KIM`,
|
||||||
cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `Mission syndicat répétables`,
|
cheats_syndicateMissionsRepeatable: `Mission syndicat répétables`,
|
||||||
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
||||||
cheats_instantFinishRivenChallenge: `Débloquer le challenge Riven instantanément`,
|
cheats_instantFinishRivenChallenge: `Débloquer le challenge Riven instantanément`,
|
||||||
|
@ -158,7 +158,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `Отсутствие лимитов на покупки у вендоров`,
|
cheats_noVendorPurchaseLimits: `Отсутствие лимитов на покупки у вендоров`,
|
||||||
cheats_noDeathMarks: `Без меток сметри`,
|
cheats_noDeathMarks: `Без меток сметри`,
|
||||||
cheats_noKimCooldowns: `Чаты KIM без кулдауна`,
|
cheats_noKimCooldowns: `Чаты KIM без кулдауна`,
|
||||||
cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `[UNTRANSLATED] Syndicate Missions Repeatable`,
|
cheats_syndicateMissionsRepeatable: `[UNTRANSLATED] Syndicate Missions Repeatable`,
|
||||||
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`,
|
||||||
cheats_instantFinishRivenChallenge: `[UNTRANSLATED] Instant Finish Riven Challenge`,
|
cheats_instantFinishRivenChallenge: `[UNTRANSLATED] Instant Finish Riven Challenge`,
|
||||||
|
@ -158,7 +158,6 @@ dict = {
|
|||||||
cheats_noVendorPurchaseLimits: `商城或商人无购买限制`,
|
cheats_noVendorPurchaseLimits: `商城或商人无购买限制`,
|
||||||
cheats_noDeathMarks: `无死亡标记(不会被 Stalker/Grustrag 三霸/Zanuka 猎人等标记)`,
|
cheats_noDeathMarks: `无死亡标记(不会被 Stalker/Grustrag 三霸/Zanuka 猎人等标记)`,
|
||||||
cheats_noKimCooldowns: `无 KIM 冷却时间`,
|
cheats_noKimCooldowns: `无 KIM 冷却时间`,
|
||||||
cheats_fullyStockedVendors: `[UNTRANSLATED] Fully Stocked Vendors`,
|
|
||||||
cheats_syndicateMissionsRepeatable: `集团任务可重复`,
|
cheats_syndicateMissionsRepeatable: `集团任务可重复`,
|
||||||
cheats_unlockAllProfitTakerStages: `解锁利润收割者圆蛛所有阶段`,
|
cheats_unlockAllProfitTakerStages: `解锁利润收割者圆蛛所有阶段`,
|
||||||
cheats_instantFinishRivenChallenge: `立即完成裂罅挑战`,
|
cheats_instantFinishRivenChallenge: `立即完成裂罅挑战`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user