1738 Commits

Author SHA1 Message Date
b9feec2ee4 fix: handle assassination-only nodes in sortie generation
All checks were successful
Build / build (pull_request) Successful in 2m10s
2025-11-21 19:53:59 +01:00
6606e3b924 chore: update package name (#3059)
All checks were successful
Build / build (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 1m58s
"wf-emulator" used to be the name of the GH repo in the very old days and was later changed to SpaceNinjaServer for *reasons*. Thought it might make sense to update it here because nowadays we call it "SpaceNinjaServer" (SNS) in the community and not "WF Emulator" anymore.

Reviewed-on: #3059
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-20 23:24:17 -08:00
45609d999c fix: don't throw if removeRequiredItems fails to remove an item (#3058)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #3052

Reviewed-on: #3058
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-20 23:23:52 -08:00
a3c1dcd1f1 fix: create NORMAL loadout with post-tutorial accounts (#3057)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
There are some strange client bugs resulting from logging in to an account without a loadout in post-tutorial state.

Reviewed-on: #3057
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-20 23:23:37 -08:00
3f3fe0b466 chore: remove license field from package.json
All checks were successful
Build / build (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 1m58s
2025-11-20 14:55:26 +01:00
412ce82aae chore: fix wording of error when an item goes negative (#3054)
All checks were successful
Build / build (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 4m37s
It would say "subtracting -1" instead of "adding -1" or "subtracting 1". Also mentioned the absolute count (that would be) after the operation.

Reviewed-on: #3054
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-20 00:27:30 -08:00
1b74fe4c54 chore: assert quantity is 1 if otherwise ignored in addItem (#3051)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #3051
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-20 00:27:13 -08:00
cca9d56d11 feat: Accolades & Council Chat Access Import Sample (#3050)
All checks were successful
Build / build (push) Successful in 2m9s
Build Docker image / docker (push) Successful in 2m58s
Thought this one may fit better to import section, rather than account cheats.

Staff is intentionally set to false due to the lvl 5K limit in simulacrum, but the user can always easily set it to true, if they wish.

Reviewed-on: #3050
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-19 04:03:01 -08:00
a33d1199c7 chore: update licence (#3049)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
- Switched to AGPL so "network use" (providing a hosted version of SpaceNinjaServer) requires the source code of it to be available (of course, unmodified instances needn't worry about this).
- Added the "commons clause" condition, which prohibits commercial use.

Reviewed-on: #3049
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-19 04:02:50 -08:00
4353f2915a chore: ask mongoose if import did anything (#3047)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Partially reverting 71785fffd7 for a much simpler solution.

Reviewed-on: #3047
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-19 04:02:43 -08:00
4b43825b67 chore: add Created to inventory schema (#3046)
All checks were successful
Build / build (push) Successful in 2m7s
Build Docker image / docker (push) Successful in 3m38s
Reviewed-on: #3046
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-18 05:07:21 -08:00
974636b5f5 chore(webui): give feedback when import errored (#3044)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #3043

Reviewed-on: #3044
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-18 05:07:16 -08:00
e07f3bb5d2 chore: derive MatchmakingBuildId from buildLabel (#3041)
All checks were successful
Build / build (push) Successful in 1m30s
Build Docker image / docker (push) Successful in 2m53s
Reviewed-on: #3041
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-18 04:14:37 -08:00
cbd3750125 chore: update package-lock.json
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
2025-11-18 13:15:36 +01:00
78373c134c feat: mods in pre-U18.18 builds + equipment features in pre-U24.4 builds (#3040)
All checks were successful
Build / build (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 2m2s
This implements support for mods in pre-U18.18  (The Silver Grove) builds, as well as support for Orokin Catalysts/Reactors, Forma, Exilus Adapters, and gilding modular weapons in pre-U24.4 builds. And should also fix #3036.

- Pre-Endo fusion system (consuming Fusion Cores and other mods to rank up the target), handles ranked Fusion Core mission drops.
- Attaching/detaching mods in U7-U8.
- Transmutation works but the game crashes if it rolls a mod that doesn't exist in that build.
- Riven mods work in U19 builds when added through the WebUI, but I can't get veiled Rivens to appear in the inventory in old builds yet (they probably changed the item paths when they made them stackable) to test if activating/unveiling them works, but rerolling them works.

This is a decently large PR that should be tested for regressions before merging, I have done a lot of thorough testing myself as I've worked on it, but I may have missed an edge-case somewhere.
And if there is anything I can improve code-wise in all these changes please reach out.

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #3040
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-18 00:27:07 -08:00
2bdf8b80fb chore: stats view U17.8 (#3039)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
for some reason it uses post for that

Reviewed-on: #3039
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-18 00:26:50 -08:00
25d2b1c3ce chore(webui): don't display rank of mods with a max rank of 0 (#3037)
All checks were successful
Build / build (push) Successful in 2m8s
Build Docker image / docker (push) Successful in 3m2s
Makes the mods tab look a little cleaner with Parazon mods and Legendary Cores.

Reviewed-on: #3037
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-18 00:07:47 -08:00
34ba56862b chore: remove tsturnonagain
All checks were successful
Build / build (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 2m52s
2025-11-17 14:23:34 +01:00
de77c06120 feat: skipAllPopups cheat & update skipAllDialogue (#3035)
All checks were successful
Build / build (push) Successful in 2m7s
Build Docker image / docker (push) Successful in 2m13s
Reviewed-on: #3035
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-17 00:05:05 -08:00
b09ef0f21b feat(webui): revive booster (#3018)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #3018
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-17 00:04:53 -08:00
2eb7f7ed11 fix: use polling for chokidar when running under docker (#3033)
All checks were successful
Build / build (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 2m48s
Closes #3031

Reviewed-on: #3033
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-15 00:26:32 -08:00
f3a6f60222 chore: remove networking config options when running under docker (#3032)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This should make it hopefully ever so slightly less confusing.

Reviewed-on: #3032
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-15 00:26:23 -08:00
55d051ff37 fix: item count validation when starting a recipe (#3030)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Can't assume it's all MiscItems. Instead upgraded the warnings to errors in the inventoryService functions.

Reviewed-on: #3030
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-15 00:26:14 -08:00
9f94a17eda chore: add tunables to config-vanilla.json (#3028)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Kinda forgor about this file when adding these options.

Reviewed-on: #3028
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-15 00:26:06 -08:00
711eb7ac47 fix: Shrine Defense node not showing up despite unlocking all missions via cheat (#3027)
All checks were successful
Build / build (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 2m49s
Reviewed-on: #3027
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-14 01:50:33 -08:00
90ffd8948b fix: claiming recipes in U22.20-U24.1 + disable rush cost scaling for builds older than U18 (#3024)
Some checks failed
Build / build (push) Has started running
Build Docker image / docker (push) Has been cancelled
With this, the Foundry should be fully functional in all game versions now (excluding incorrect recipe data for things that got changed over the years).
This also disables rush cost scaling for versions older than U18, as U18 is the version that introduced it.

Reviewed-on: #3024
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-14 01:50:19 -08:00
8a0f99f573 fix: selling items in old builds (#3023)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
I'm not sure exactly which build the sell request changed in, but this solution seems to be catch-all.

Reviewed-on: #3023
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-14 01:50:03 -08:00
55e2871531 fix: give ChallengeProgress with unlockAllScans cheat (#3020)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #3013

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #3020
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-14 01:49:48 -08:00
8088044ec8 feat(webui): echoes of umbra (#3019)
All checks were successful
Build / build (push) Successful in 2m2s
Build Docker image / docker (push) Successful in 1m45s
Reviewed-on: #3019
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-11 23:26:01 -08:00
6167eeadb0 feat: view leaderboard U8 (#3017)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #3017
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-11 23:25:40 -08:00
9c1ba17537 chore: automatically use nora's mix 6 & 7 in respective versions (#3016)
All checks were successful
Build / build (push) Successful in 1m18s
Build Docker image / docker (push) Successful in 2m45s
Reviewed-on: #3016
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-10 23:51:13 -08:00
85a446f67f fix: acquisition of new KubrowEgg item (#3015)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #3015
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-10 23:50:59 -08:00
48b7138c1c feat: initial foundry for U8 (#3014)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
endpoints should work, but we don't have data for required recipe items for U8, so in most cases, an unknown error will occur in the game, and a more detailed error will occur in the server console.

Reviewed-on: #3014
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-10 23:50:51 -08:00
f63954c796 chore: fix misplaced heading
All checks were successful
Build / build (push) Successful in 2m2s
Build Docker image / docker (push) Successful in 1m43s
2025-11-10 12:29:38 +01:00
c42f68d904 feat: alertsRepeatable cheat (#3012)
All checks were successful
Build Docker image / docker (push) Successful in 2m50s
Build / build (push) Successful in 5m18s
For anyone who prefers certain alerts to be replayable (QTCC, etc.).

Works on Clem, Maroo, Arbitration, SP Incursions, Kuva Siphon, Nightmare and special alerts like QTCC & Void Corruption and probably more.

Reviewed-on: #3012
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-10 00:43:38 -08:00
3d57a76ee6 fix: incubator after PE+ update (#3011)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Seems the kubrow egg item type was changed in U40.

Reviewed-on: #3011
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-10 00:43:29 -08:00
04b504fa18 feat: add config options for bootstrapper tunables (#3010)
All checks were successful
Build Docker image / docker (push) Successful in 1m42s
Build / build (push) Successful in 5m22s
Reviewed-on: #3010
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-09 08:39:41 -08:00
5c1cf3bfb1 feat: get endpoint for addFriendImage (#3009)
All checks were successful
Build / build (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 2m44s
Used by U17 and below.

Reviewed-on: #3009
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-07 23:36:06 -08:00
f50f4a924b fix: give MK1-Braton for old tutorial (#3008)
All checks were successful
Build Docker image / docker (push) Successful in 2m43s
Build / build (push) Successful in 5m39s
The old tutorial is supposed to give the MK1-Braton, but giveStartingGear was defaulting to the regular Braton.

Reviewed-on: #3008
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-07 00:52:32 -08:00
5c397a180c fix: worldState being ignored by U18.18 - U20.4 (#3007)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #3006. A Bootstrapper code update will also be needed.

Reviewed-on: #3007
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-07 00:52:23 -08:00
e1add8bf18 fix(webui): ignore BuildLabel (#3005)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
WebUI is designed to work with the modern inventory format. It simply doesn't work with the legacy oid.

Reviewed-on: #3005
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-07 00:52:15 -08:00
e58655e3f4 feat: profileStats endpoint for U8 (#3003)
All checks were successful
Build / build (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 3m36s
Reviewed-on: #3003
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-06 00:17:52 -08:00
71785fffd7 chore(webui): inform user when import did nothing (#3002)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2998

Reviewed-on: #3002
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-06 00:17:39 -08:00
9f432d3919 feat: get endpoint trainingResult (#3000)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2994

Reviewed-on: #3000
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-06 00:17:30 -08:00
8ceab34f22 feat: get endpoint for giveStartingGear (#2997)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2995

Reviewed-on: #2997
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-06 00:17:21 -08:00
4ab5794f61 fix: acquisition of armory cache from daily tribute (#2990)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2991

Reviewed-on: #2990
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-06 00:17:10 -08:00
986201697f feat(webui): equipment features in detailed view (#2987)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2927

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2987
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-06 00:16:58 -08:00
b8d0924f0f chore: fix unable to login in U13 (#2989)
All checks were successful
Build / build (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 2m44s
Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2989
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-05 08:01:31 -08:00
65138b64fc chore(webui): inform the user of JSON parsing errors during import (#3001)
All checks were successful
Build / build (push) Successful in 1m18s
Build Docker image / docker (push) Successful in 3m1s
Closes #2996

Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/3001
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-05 07:58:25 -08:00
be064fd249 fix: properly provide hex conquest for pre-U40 clients (#2992)
All checks were successful
Build / build (push) Successful in 1m34s
Build Docker image / docker (push) Successful in 2m45s
The missing mf field did end up causing script errors + exterminate was not provided in the proper format

Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2992
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-05 05:36:38 -08:00
50e9cafc09 chore: fix unable to login in U11 (#2988)
All checks were successful
Build / build (push) Successful in 1m57s
Build Docker image / docker (push) Successful in 2m1s
Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2988
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-05 01:56:52 -08:00
4be7a9e6c6 feat: sync worldstate on config change (#2986)
All checks were successful
Build / build (push) Successful in 1m57s
Build Docker image / docker (push) Successful in 2m0s
Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2986
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-05 01:10:39 -08:00
ebda91f517 chore: keep conquests in sync between pre- & post-U40 clients (#2985)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2985
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-05 01:10:27 -08:00
2264ae176b fix: handle fake jobs without syndicateMissionId (#2982)
All checks were successful
Build / build (push) Successful in 1m39s
Build Docker image / docker (push) Successful in 3m49s
Closes #2970

Reviewed-on: #2982
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-03 23:56:31 -08:00
9369e6cc5a fix: typo in vorsPrizePreU40Rewards (#2984)
All checks were successful
Build Docker image / docker (push) Successful in 3m4s
Build / build (push) Successful in 6m4s
Closes #2983

Reviewed-on: #2984
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-03 05:31:43 -08:00
49eb14f758 chore(webui): inform user to relog after IGN change (#2981)
All checks were successful
Build / build (push) Successful in 1m55s
Build Docker image / docker (push) Successful in 2m16s
Reviewed-on: #2981
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-02 23:28:55 -08:00
5e455d1e90 fix: don't override TauntHistory with skipAllDialogue (#2979)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Older versions used this for more than just Maroo's dialogue so we might be breaking stuff there

Reviewed-on: #2979
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:28:31 -08:00
4d93dc80dc fix: creating/deleting sessions in pre-Specters of the Rail builds (#2978)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
This is only verified to work as far back as U15, I have not tried to test any builds older than that yet until they are added to the support list.

Reviewed-on: #2978
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VoltPrime <subsonicjackal@gmail.com>
Co-committed-by: VoltPrime <subsonicjackal@gmail.com>
2025-11-02 23:28:10 -08:00
38326fc452 chore: avoid using sendFile as it may spontaneously fail (#2977)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2977
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:27:38 -08:00
6e9c787c59 fix: don't add raw riven mods with fingerprints (#2976)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2967

Reviewed-on: #2976
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:26:57 -08:00
82fe598056 chore: override vor's prize level key rewards for pre-U40 clients (#2975)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2974

Reviewed-on: #2975
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:26:31 -08:00
bc271216ac fix: defer resolving of StrippedItems in bounties to extraction (#2972)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #2970

Reviewed-on: #2972
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:25:37 -08:00
c5463166a8 chore: enable U8 clients to log in (#2971)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2971
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 23:25:19 -08:00
8bce83d14c chore: update cert
All checks were successful
Build / build (push) Successful in 1m55s
Build Docker image / docker (push) Successful in 1m43s
2025-11-02 11:52:43 +01:00
cc5682760d chore(webui): clean up listing for rivens with pending challenges (#2969)
All checks were successful
Build / build (push) Successful in 1m30s
Build Docker image / docker (push) Successful in 2m45s
Closes #2966

Reviewed-on: #2969
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 00:17:25 -07:00
00acaed62a chore: reduce inventory byte size when faking XP (#2968)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2968
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-02 00:17:16 -07:00
d794bd94ce fix: skip "prove yourself" text when unlocking all missions via cheat (#2965)
All checks were successful
Build / build (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 2m44s
Even tho the PoE beginner bounty was skipped by the cheat, Konzu would still say "Gotta prove yourself first". Giving a non-zero standing value seems to bypass that (in this case I put ~~200~~ 250 which is identical to completing beginner bounty with bonus).

Reviewed-on: #2965
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-11-01 02:52:15 -07:00
cecc65197b fix: set quest inactive when deleting it (#2963)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2958

Reviewed-on: #2963
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-01 02:52:05 -07:00
b1c1b56de3 feat: server-side conquest generation for U40 and above (#2962)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2932

Reviewed-on: #2962
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-01 02:51:58 -07:00
167da9c573 chore: don't splice quest stages when backtracking (#2961)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Inbox messages and items likely should not be given again

Reviewed-on: #2961
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-01 02:51:46 -07:00
5e6955ae32 chore: set nightwave activation to this week (#2960)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
The weekly permanent challenges were already at 24

Reviewed-on: #2960
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-11-01 02:51:13 -07:00
f2145ed91b feat: remove quest related items (#2957)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
if I haven't missed anything, this should close #1116

Reviewed-on: #2957
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-11-01 02:51:01 -07:00
20d9a699b4 chore(webui): rename inventory_maxPlexus to cheats_maxPlexus (#2956)
All checks were successful
Build / build (push) Successful in 1m55s
Build Docker image / docker (push) Successful in 1m50s
Reviewed-on: #2956
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-30 23:07:50 -07:00
2b054d1728 chore(webui): update German translation (#2955)
All checks were successful
Build / build (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 3m40s
Since German wf is a fkin mess with different terms being used for the exact same thing (for no reason at all I guess), I decided to stick with one term for WebUI instead of making the same mess that official German wf does:

`Enemy`, which uses "Feind" & "Gegner" in-game; I stick with Gegner.
`Health`, which uses "Gesundheit" & "Leben" in-game; I stick with Gesundheit.

Also includes some other small improvements.

Reviewed-on: #2955
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-29 10:36:46 -07:00
5ac73528a0 chore: update inventory sync guidance to avoid confusiona (#2953)
All checks were successful
Build Docker image / docker (push) Successful in 1m59s
Build / build (push) Successful in 5m1s
Newer versions of the Bootstrapper do not require usage of /sync and other client patches might not have such a command.

Reviewed-on: #2953
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-29 06:25:22 -07:00
678ad0c4a1 fix(webui): display correct name for kuva weapons in detailedView (#2952)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2952
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-29 06:25:14 -07:00
4bdb759463 fix: correct path for deepmind bounty reward tables (#2951)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2950

Reviewed-on: #2951
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-29 06:25:05 -07:00
71be8a2868 feat: nightwave dreams of the dead (#2949)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2949
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-29 06:24:49 -07:00
f3072e84c9 feat: reverseQuestProgress (#2948)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2939

Reviewed-on: #2948
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-29 06:24:39 -07:00
b2749765a3 chore: fix nodejs deprecation warning in dev script (#2947)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2947
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-29 06:24:32 -07:00
654652b889 chore: use bun instead of npm when running dev script under bun (#2946)
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 2m37s
Reviewed-on: #2946
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-28 00:51:02 -07:00
e3048ea188 feat: ircExecutable config (#2945)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2945
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-28 00:50:55 -07:00
bb1d6a98c5 chore: make docker setup compatible with regular mongodb data (#2944)
Some checks failed
Build / build (push) Successful in 1m51s
Build Docker image / docker (push) Has been cancelled
We still need to address the database as 'mongodb' instead of '127.0.0.1' inside of the container, but otherwise the MongoDB data folder can simply be copied over. Existing setups shouldn't be affected by this change.

Reviewed-on: #2944
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-28 00:50:01 -07:00
c3bf0ae7c7 ci: build multiplatform docker image
All checks were successful
Build Docker image / docker (push) Successful in 2m39s
Build / build (push) Successful in 4m51s
2025-10-27 11:56:54 +01:00
3a72617a0f feat: archgun arcane adapter (#2940)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m39s
Build / build (push) Successful in 3m11s
Build Docker image / docker-amd64 (push) Successful in 1m39s
Reviewed-on: #2940
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-27 00:21:32 -07:00
3ae535ccbc feat: deepmines bounties (#2933)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m38s
Build Docker image / docker-amd64 (push) Successful in 52s
Build / build (push) Successful in 1m10s
Closes #2936

Reviewed-on: #2933
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-26 06:37:43 -07:00
23abe5de02 fix: junction completion on steel path doesn't save (#2937)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 43s
Build Docker image / docker-arm64 (push) Successful in 1m37s
Build / build (push) Successful in 3m23s
Aka., an alternative approach to fixing the problem in #2866. Junctions don't have RewardInfo and therefore weren't reaching the new call to addMissionComplete.

Reviewed-on: #2937
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-25 00:27:02 -07:00
0d21c73ab7 fix: set ModQuestTeshinAccess when using cheats to complete mod quest (#2935)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
This is required to go to Teshin's relay room after U40.

Reviewed-on: #2935
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-25 00:26:49 -07:00
482101ccd0 feat: nightcap syndicate (#2934)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2928
Closes #2931

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2934
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-25 00:26:36 -07:00
60e87543aa fixup: skipAllDialogue for the prince
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m37s
Build / build (push) Successful in 1m19s
Build Docker image / docker-amd64 (push) Successful in 56s
2025-10-24 10:43:05 +02:00
c4c17f24d7 chore: add nightcap stuff for skipAllDialogues (#2930)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m35s
Build Docker image / docker-amd64 (push) Successful in 45s
Build / build (push) Successful in 5m14s
Reviewed-on: #2930
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-23 23:21:46 -07:00
43fa1978c0 feat(webui): remove IsNew (#2926)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2917

Reviewed-on: #2926
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-23 23:21:37 -07:00
18fafc38b5 feat: invasion additional credits (#2925)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 49s
Build / build (push) Successful in 1m50s
Build Docker image / docker-arm64 (push) Successful in 1m35s
Re #1097

Reviewed-on: #2925
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-23 07:42:18 -07:00
98a46e51de feat: complete Rising Tide with buying railjack (#2922)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m35s
Build / build (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 46s
Closes #2754

Reviewed-on: #2922
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-21 23:50:05 -07:00
2a7767ef4a chore(webui): update fr (#2924)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 48s
Build / build (push) Successful in 1m49s
Build Docker image / docker-arm64 (push) Successful in 1m34s
Reviewed-on: #2924
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-10-21 12:23:12 -07:00
e867123f89 fix: correct multiplier for credit blessing (#2921)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m35s
Build / build (push) Successful in 3m59s
Reviewed-on: #2921
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-21 00:43:25 -07:00
2322a994c6 feat: rewards for overriden enemy caches (#2919)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2913

Reviewed-on: #2919
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-21 00:43:15 -07:00
be8e2feae6 fix: exclude SolNode63 from archon hunts (#2918)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2918
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-21 00:43:03 -07:00
4f8b07322e chore: move int cheats into account section (#2916)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Re #2361

Reviewed-on: #2916
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-21 00:42:56 -07:00
4b3b1969da chore(webui): disable browser autocompletion for datalist inputs (#2915)
All checks were successful
Build / build (push) Successful in 10m7s
Build Docker image / docker-amd64 (push) Successful in 5m40s
Build Docker image / docker-arm64 (push) Successful in 6m28s
It's just unnecessary clutter, especially if you switch languages in the webui

Reviewed-on: #2915
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-20 00:56:56 -07:00
a0ce110e7e chore: dont send messages with completeQuest (#2914)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Re #2754

Reviewed-on: #2914
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-20 00:56:45 -07:00
7fe00da2a4 fix: remove vors prize from questCompletionRewards (#2911)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 53s
Build Docker image / docker-arm64 (push) Successful in 1m33s
Build / build (push) Successful in 4m33s
Because this file overrides the public export, it means The Teacher quest would not be given.

Reviewed-on: #2911
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-18 23:44:48 -07:00
bac23a8465 fix(webui): use text type for email input (#2910)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
We don't need the browser to validate the input because the game accepts emails with nothing before the @ which the browser may not.

Reviewed-on: #2910
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-18 23:44:39 -07:00
db112ee5ed chore: handle updateQuest request having CompletionDate (#2909)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Successful in 1m35s
Build Docker image / docker-amd64 (push) Has been cancelled
The client date representation would produce a schema error

Reviewed-on: #2909
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-18 23:44:28 -07:00
86998b6760 fix: disallow infestation hijack missions in sorties (#2908)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m32s
Build / build (push) Successful in 1m13s
Build Docker image / docker-amd64 (push) Successful in 52s
Closes #2907

Reviewed-on: #2908
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-17 22:38:08 -07:00
be3dd7ab66 chore: use prettier instead of lint:fix for 'npm run fix' (#2906)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
e.g., eslint can't fix prettier problems in .json files

Reviewed-on: #2906
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-17 22:37:59 -07:00
e6fb675e21 chore: update getSkuCatalog for U40 (#2905)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2905
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-17 22:37:52 -07:00
fb4c42490e fix(webui): use optional chaining operator for maxLevelCap (#2904)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
For items that not in itemMap

Reviewed-on: #2904
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-17 22:37:45 -07:00
96a15e25df chore(webui): update German translation (#2903)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m32s
Build Docker image / docker-amd64 (push) Successful in 47s
Build / build (push) Successful in 2m50s
Reviewed-on: #2903
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-17 08:01:04 -07:00
ff234c9874 chore: update PE+ (#2902)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2902
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-17 08:00:53 -07:00
7d3915fe05 feat: night of naberus and qtcc flashsales (#2901)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m35s
Build Docker image / docker-amd64 (push) Successful in 51s
Build / build (push) Successful in 4m20s
Reviewed-on: #2901
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-16 00:48:33 -07:00
4b3e2dfc62 chore: update typings for bootstrapper for 0.11.13 (#2900)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2900
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-16 00:48:12 -07:00
737d013655 feat: focus 2.0 (#2898)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Implemented all the ops we handle for focus 3.0 + activating/deactivating upgrades + the pool mechanic

Reviewed-on: #2898
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-16 00:48:01 -07:00
1f8d437fad chore: fix unlock all focus schools cheat advising visiting navigation (#2899)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m29s
Build / build (push) Successful in 2m56s
This doesn't work to sync inventory on pre-duviri or post-spider versions.

Reviewed-on: #2899
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-15 01:14:05 -07:00
9263b8f179 chore: forgot to add one removed/obsolete setting to configRemovedOptionsKeys (#2897)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
One setting in the config used to have a typo before #291 and the whole thing here is case sensitive anyway, so I added it here as well.

Reviewed-on: #2897
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-15 01:13:53 -07:00
875f4b9fa4 chore: more removed/obsolete settings put into configRemovedOptionsKeys (#2896)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m32s
Build Docker image / docker-amd64 (push) Successful in 45s
Build / build (push) Successful in 2m46s
Reviewed-on: #2896
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-14 00:24:43 -07:00
fd7ddd9696 chore(webui): fix inconsistent strings in dropdown menu (#2895)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 47s
Build / build (push) Successful in 4m36s
Build Docker image / docker-arm64 (push) Successful in 1m29s
Reviewed-on: #2895
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-13 05:21:22 -07:00
065afc0089 chore(webui): move wolf hunt 2025 option up for consistency (#2891)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 45s
Build Docker image / docker-arm64 (push) Successful in 1m27s
Build / build (push) Successful in 3m4s
Reviewed-on: #2891
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-11 23:35:53 -07:00
c1c14b2068 feat(webui): Vault MiscItems and ShipDecorations (#2889)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2874
Closes #2875

Reviewed-on: #2889
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-11 23:35:39 -07:00
9e66d22256 feat: wolf hunt 2019 (#2888)
All checks were successful
Build / build (push) Successful in 1m40s
Build Docker image / docker-arm64 (push) Successful in 1m26s
Build Docker image / docker-amd64 (push) Successful in 45s
Re #1103

Reviewed-on: #2888
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-11 05:17:08 -07:00
02f0935710 feat(webui): skins (#2816)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m27s
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 42s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2816
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-09 23:02:09 -07:00
af4c3a93ce feat: forceRemoveItem.php (#2884)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2883

Reviewed-on: #2884
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-09 23:02:00 -07:00
4141970530 fix: use correct items for Hallowed Nightmares (#2885)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2885
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-09 23:01:49 -07:00
ca589cb7cf feat: QTCC floofs alerts (#2886)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Re #2842

Reviewed-on: #2886
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-09 23:01:36 -07:00
d6ed22d1ff chore(webui): Void Corruption translations (#2887)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2887
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-09 23:01:20 -07:00
610a432e46 fixup for 2ca895a5f8
All checks were successful
Build / build (push) Successful in 1m56s
Build Docker image / docker-amd64 (push) Successful in 2m49s
Build Docker image / docker-arm64 (push) Successful in 1m26s
2025-10-09 11:01:49 +02:00
2ca895a5f8 feat: Void Corruption 2025 (#2865)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 1m26s
Build / build (push) Successful in 3m27s
Reviewed-on: #2865
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Slayer55555 <slayer55555@noreply.localhost>
Co-committed-by: Slayer55555 <slayer55555@noreply.localhost>
2025-10-09 00:28:34 -07:00
fd2286c253 fix: send back entire dojo when a room build has been cancelled (#2879)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Fixes #2877

Reviewed-on: #2879
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-09 00:28:16 -07:00
5a582daa1a chore(webui): debounce guild tech actions (#2882)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2880

Reviewed-on: #2882
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-09 00:28:09 -07:00
6a571e5e78 chore: explicitly declare body-parser dependency for pnpm (#2873)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 1m25s
Build / build (push) Successful in 4m23s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2873
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Mind <1634300602@qq.com>
Co-committed-by: Mind <1634300602@qq.com>
2025-10-07 23:21:17 -07:00
0349c4a32c feat: increase BountyScore for additional stratos emblems earned (#2872)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2871

Reviewed-on: #2872
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-07 23:20:48 -07:00
e1563bf298 fix(webui): allow digits in itemtype for add items(raw) (#2870)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 2m36s
Build Docker image / docker-arm64 (push) Successful in 1m26s
For items like `/Lotus/Types/Keys/TacAlertKeyAnniversary2023k`

Reviewed-on: #2870
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-10-07 23:18:03 -07:00
af6f422fec feat: nemesis mode t / LastNemesisAllySpawnTime (#2869)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Also some import stuff. Closes #2867

Reviewed-on: #2869
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-07 23:17:50 -07:00
f5c1b83598 fix: only commit 'Missions' on successful completion (#2866)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m24s
Build Docker image / docker-amd64 (push) Successful in 44s
Build / build (push) Successful in 4m33s
Fixes SP missions being marked as completed when failing/quitting.

Reviewed-on: #2866
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:57:18 -07:00
30f380f37e chore(webui): refresh when creating/deleting a clan in-game (#2864)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
So the clan tab shows/hides instantly as expected.

Reviewed-on: #2864
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:57:08 -07:00
0f7a85db59 chore(webui): sync account cheats between different webui tabs (#2863)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2863
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:56:51 -07:00
43bc12713a chore(webui): force account cheat element state after request is done (#2862)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
There's a very slim chance we get an inventory response between sending the setAccountCheat request and receiving the response, in which case the element state would be ingruent.

Reviewed-on: #2862
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:56:35 -07:00
6022bf97b5 feat: nemesis mode d (#2860)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2860
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:56:20 -07:00
159e151dc0 chore: check for xpBasedLevelCapDisabled in missionInventoryUpdate (#2859)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
The bootstrapper provides this field since 0.8.2, so I think this field being absent is now more likely to mean that the patch is not in effect.

Reviewed-on: #2859
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:56:04 -07:00
56954260c8 chore(webui): debounce quest updates (#2858)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2855

Reviewed-on: #2858
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:55:46 -07:00
c535044af8 fix: use 1-based indexing for clan ranks for versions before U24 (#2857)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2857
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:55:33 -07:00
f5146be129 fix: handle dojo room build request from old versions (#2854)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2854
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:54:57 -07:00
d38ec06ed6 fix: disallow creating a clan from an account that's already in one (#2853)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Just a slight precaution to avoid snowballing problems.

Reviewed-on: #2853
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:54:35 -07:00
060f65900f fix: transform inventoryResponse.GuildId for older versions (#2852)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2852
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-06 22:54:22 -07:00
66d3057d40 chore: fix typo
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m25s
Build / build (push) Successful in 1m21s
Build Docker image / docker-amd64 (push) Successful in 49s
2025-10-06 08:33:44 +02:00
b14a5925df fix: setGuildMotd response for U29.3.1 (#2851)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m27s
Build / build (push) Successful in 1m11s
Build Docker image / docker-amd64 (push) Successful in 48s
Unsure which version introduced long descriptions exactly, but it surely wasn't this one. :^)

Reviewed-on: #2851
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 23:25:08 -07:00
9da47c406a fix: put CompletionTime of initial clan hall in the past (#2850)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
For old versions, TimeRemaining of 0 would cause this to show in yellow, we need it to be negative.

Reviewed-on: #2850
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 23:24:59 -07:00
09065bdb4e chore: let webui know when client called updateQuest (#2849)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2849
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 23:24:49 -07:00
8f04fc5fdf fix: default quest progress c to -1 (#2848)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Fixes #2846

Reviewed-on: #2848
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 23:24:38 -07:00
230ee5f638 fix: anniversary mission inbox messages showing unresolved |LOTUS_NAME| (#2845)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2845
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 23:24:28 -07:00
21db6ce265 chore(webui): update uk & ru (#2844)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2844
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-10-05 23:24:14 -07:00
1ecf53c96b chore: don't add 'alwaysAvailable' skins with unlockAllSkins (#2843)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m24s
Build / build (push) Successful in 1m10s
Build Docker image / docker-amd64 (push) Successful in 51s
Reviewed-on: #2843
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-05 05:56:58 -07:00
e67ef63b77 fix: avoid using assassination node for an earlier sortie mission (#2838)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m24s
Build / build (push) Successful in 1m21s
Build Docker image / docker-amd64 (push) Successful in 1m2s
Closes #2837

Reviewed-on: #2838
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-04 04:18:21 -07:00
5772ebe746 feat(import): boosters (#2836)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m22s
Build / build (push) Successful in 1m34s
Reviewed-on: #2836
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-03 06:46:07 -07:00
0136e4d152 chore(webui): clarify /sync command goes into chat (#2835)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2835
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-10-03 06:45:57 -07:00
8b3ee4b4f5 chore: allow sortie image randomisation for most tilesets (#2834)
All checks were successful
Build / build (push) Successful in 1m25s
Build Docker image / docker-amd64 (push) Successful in 55s
Build Docker image / docker-arm64 (push) Successful in 1m20s
This should reduce the impact while we investigate #2833

Reviewed-on: #2834
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-10-02 05:27:56 -07:00
6e8800f048 chore(webui): fix typos (#2832)
All checks were successful
Build / build (push) Successful in 1m31s
Build Docker image / docker-amd64 (push) Successful in 56s
Build Docker image / docker-arm64 (push) Successful in 1m20s
also updated author credits

Reviewed-on: #2832
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-10-01 01:23:08 -07:00
d65a667acd fix: ensure sorties show 'correct' image for corpus ice planet tileset (#2831)
All checks were successful
Build / build (push) Successful in 1m31s
Build Docker image / docker-amd64 (push) Successful in 44s
Build Docker image / docker-arm64 (push) Successful in 1m18s
Reviewed-on: #2831
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-30 00:00:13 -07:00
c6a3e86d2b fix(webui): invoke giveKeyChainStageTriggered for new stage (#2830)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Previously, this caused the old stage to just be reinitiated so we never went backwards.

Closes #2829

Reviewed-on: #2830
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-29 23:59:35 -07:00
a8e41c95e7 chore: move createNewEventMessages from inboxService to inboxController (#2828)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
This function wasn't used anywhere else and caused a recursive include in inboxService.

Reviewed-on: #2828
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-29 23:59:26 -07:00
9426359370 feat: Nights of Naberus (#2817)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2817
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Gian <gianplu55@gmail.com>
Co-committed-by: Gian <gianplu55@gmail.com>
2025-09-29 23:59:17 -07:00
e5247700df fix: use safe navigation to check for replay in giveKeyChainMessage (#2826)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 42s
Build Docker image / docker-arm64 (push) Successful in 1m19s
Build / build (push) Successful in 3m40s
Reviewed-on: #2826
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-29 02:00:32 -07:00
1c3f1e2276 feat: DeleteAllReadNonCin (#2824)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2822

Reviewed-on: #2824
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-29 02:00:17 -07:00
7710e7c13f feat: inbox message for relics cracked during an unfinished mission (#2823)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2821

Reviewed-on: #2823
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-29 02:00:05 -07:00
a64c5ea3c1 chore(webui): remove administratorNames entry when deleting account (#2820)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m20s
Build / build (push) Successful in 1m10s
Build Docker image / docker-amd64 (push) Successful in 47s
Closes #2819

Reviewed-on: #2820
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-28 01:10:45 -07:00
17e1eb86dd fix(webui): don't send off 2 addXp requests at once (#2815)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m20s
Build / build (push) Successful in 2m19s
Build Docker image / docker-amd64 (push) Successful in 1m38s
One would likely fail due to Mongoose's array versioning

Closes #2811

Reviewed-on: #2815
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-27 03:23:53 -07:00
de9dfb3d71 fix: show endless relic rewards in EOM screen (#2813)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 44s
Build / build (push) Successful in 2m17s
Build Docker image / docker-arm64 (push) Successful in 1m22s
Closes #2812

Reviewed-on: #2813
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-26 04:42:08 -07:00
fc38f818dd feat: nemesis henchmen kills multiplier cheat (#2806)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Co-authored-by: AlexisinGit <136088944+AlexisinGit@users.noreply.github.com>
Reviewed-on: #2806
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AlexisinGit <alexisingit@noreply.localhost>
Co-committed-by: AlexisinGit <alexisingit@noreply.localhost>
2025-09-26 04:41:54 -07:00
e76f08db89 chore(webui): update to Spanish translation (#2814)
Some checks are pending
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Successful in 1m0s
Build / build (push) Successful in 3m34s
Reviewed-on: #2814
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-09-25 10:51:44 -07:00
7bcb5f21ce chore(webui): unify Invigoration code (#2809)
All checks were successful
Build / build (push) Successful in 1m28s
Build Docker image / docker-amd64 (push) Successful in 1m16s
Build Docker image / docker-arm64 (push) Successful in 1m17s
Reviewed-on: #2809
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-25 10:21:04 -07:00
3641d63f6f chore(webui): update to Spanish translation (#2810)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m17s
Build / build (push) Successful in 1m15s
Build Docker image / docker-amd64 (push) Successful in 47s
Reviewed-on: #2810
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-09-24 23:49:10 -07:00
71c4835a69 chore(webui): unify Boosters code (#2808)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m18s
Build Docker image / docker-amd64 (push) Successful in 56s
Build / build (push) Successful in 3m52s
Reviewed-on: #2808
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-24 08:41:35 -07:00
86a63ace41 chore(webui): adjust checks for guild view requests (#2807)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2807
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-24 08:41:04 -07:00
32c95b6715 fix: conditional in giveKeyChainItem (#2804)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m18s
Build / build (push) Successful in 2m54s
Using safe navigation now and inverted the condition because i would be false when we have to give items, not true.

Closes #2803

Reviewed-on: #2804
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-22 04:42:54 -07:00
6f8b14fb2d chore(webui): stick from on top in acquire cards (#2802)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Also use `d-none` instead `style="display: none;"` in modular cards

Reviewed-on: #2802
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-22 04:42:46 -07:00
3d8aa60838 feat(webui): unlock level cap (#2799)
All checks were successful
Build / build (push) Successful in 2m33s
Build Docker image / docker-arm64 (push) Successful in 1m15s
Build Docker image / docker-amd64 (push) Successful in 1m38s
Closes #2620

Reviewed-on: #2799
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-21 02:53:16 -07:00
87da94658d fix: correct checks for quest replay (#2798)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Successful in 1m17s
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2797

Reviewed-on: #2798
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-21 02:53:05 -07:00
05fbefa7f4 fix: faithful response to startCollectibleEntry (#2796)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m16s
Build / build (push) Successful in 1m17s
Build Docker image / docker-amd64 (push) Successful in 56s
Closes #2795

Reviewed-on: #2796
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-20 00:29:15 -07:00
a2abf6db8f fix(webui): get correct element for doAcquireCountItems (#2794)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2793

Reviewed-on: #2794
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-20 00:29:06 -07:00
64a1c8b276 chore(webui): update uk & ru (#2784)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 47s
Build / build (push) Successful in 2m55s
Build Docker image / docker-arm64 (push) Successful in 1m12s
Reviewed-on: #2784
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-09-19 04:11:44 -07:00
4fa07a1319 chore(webui): give the user higher quantity of ShipDecorations (#2791)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m13s
Build Docker image / docker-amd64 (push) Successful in 48s
Build / build (push) Successful in 4m1s
100 is way too low. 999999 should be enough (was also the same number IIRC from the previous ShipDecorations cheat) for everything probably

Reviewed-on: #2791
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-09-18 01:12:44 -07:00
a3cc7d9f92 fix: give host permission to highest clan ranks (#2790)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Re #2088, I must've assumed 16351 included this permission.

Reviewed-on: #2790
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-18 01:12:35 -07:00
c47c60fdcc fix: determine armor or shield based on sortie boss faction (#2787)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2785

Reviewed-on: #2787
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-18 01:12:25 -07:00
367455baaa chore: update German newsfeed worldState message (#2788)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m12s
Build / build (push) Successful in 1m6s
Build Docker image / docker-amd64 (push) Successful in 49s
I found "Trete" might fit slightly better due to sounding more natural than "Tritt". Also sounds slightly more welcoming this way

Reviewed-on: #2788
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-09-17 08:32:27 -07:00
6c2b7a61e2 chore(webui): exclude always available items from datalist (#2783)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m13s
Build / build (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 46s
Reviewed-on: #2783
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-16 23:23:59 -07:00
6a6683fb25 chore(webui): stalker loc (#2781)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m12s
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 2m1s
Reviewed-on: #2781
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-15 10:40:29 -07:00
e3b6accb5d feat(webui): ship decorations (#2780)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Re #2361

Reviewed-on: #2780
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-15 10:40:21 -07:00
7e437d75bf feat(webui): flavour Items (#2779)
All checks were successful
Build / build (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 1m4s
Build Docker image / docker-arm64 (push) Successful in 1m14s
Re #2361

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2779
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-14 23:31:43 -07:00
62570177b6 fix: handle quest replay (#2778)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2496

Reviewed-on: #2778
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-14 23:31:35 -07:00
d2aff211c6 fix: show conservation standing in progress screen, missing reward multiplications (#2776)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m15s
Build Docker image / docker-amd64 (push) Successful in 1m4s
Build / build (push) Successful in 2m7s
Closes #2774

Reviewed-on: #2776
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-13 23:50:08 -07:00
791ae389d8 fix: correct Activation/Expiry date for Ghoul Emergence (#2777)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2775

Reviewed-on: #2777
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-13 23:50:00 -07:00
d027e7f26e chore(webui): update fr (#2773)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m10s
Build / build (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 44s
Reviewed-on: #2773
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-09-12 06:25:50 -07:00
cd6ce61b80 feat: conservation standing reward (#2772)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Build / build (push) Successful in 2m19s
Closes #2763

Reviewed-on: #2772
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-12 00:41:05 -07:00
a5be29159f fix: handle lab conquest keeping RewardInfo from previous missions (#2771)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2768

Reviewed-on: #2771
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-12 00:40:48 -07:00
f099b64ef4 fix(webui): correct check for guild id (#2770)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 54s
Build / build (push) Successful in 2m6s
Reviewed-on: #2770
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-11 01:10:32 -07:00
c4f348c252 chore: update PE+ (#2769)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Some more deprecations

Reviewed-on: #2769
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-11 01:10:24 -07:00
0d388b4b0f feat: support websocket connections from game client (#2735)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build / build (push) Successful in 1m53s
Build Docker image / docker-amd64 (push) Successful in 55s
For bootstrapper v0.11.11, out now.

Reviewed-on: #2735
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-10 00:00:09 -07:00
d64531f4b2 feat(webui): guild view (#2752)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build Docker image / docker-amd64 (push) Successful in 51s
Build / build (push) Successful in 1m59s
Also moves guild-specific cheats to a switch for each guild
Closes #1403

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2752
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-09 23:55:10 -07:00
01b8f7acf3 chore(webui): better locale support for relics (#2764)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2764
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-09-09 23:55:01 -07:00
8a7db2cd85 chore: update PE+ (#2765)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Some things were deprecated in it

Reviewed-on: #2765
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-09 23:54:46 -07:00
5a9415ae0c feat: bindAddress (#2766)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
so people can limit the server to only be reachable via 127.0.0.1 etc

Reviewed-on: #2766
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-09 23:54:33 -07:00
39f898cd30 chore: use inlineSourceMap instead of sourceMap (#2767)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Windows filesystem is pretty slow, so avoiding creating an extra file per file makes `npm run build` ~20% faster (~1600ms to ~1300ms on my machine)

Reviewed-on: #2767
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-09 23:54:26 -07:00
9c55a8a4aa chore: enable no-deprecated warning (#2762)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 47s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m55s
Reviewed-on: #2762
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-08 20:43:31 -07:00
253ae09f24 fix(webui): use excludeFromCodex to detect arcane imposters (#2761)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2760

Reviewed-on: #2761
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-08 20:43:15 -07:00
703e9007b0 fix: invasion reward message sender name (#2759)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2759
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-08 20:43:02 -07:00
3e555b1753 feat: purchase additional conclave loadout slots (#2758)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2756. Also just in general simplified the logic around purchasing loadout slots.

Reviewed-on: #2758
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-08 20:42:53 -07:00
1066b4a983 chore(webui): quote display name for administrator requirement (#2753)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 42s
Build / build (push) Successful in 3m13s
Reviewed-on: #2753
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-07 18:58:16 -07:00
b9a2cea862 chore(webui): update to Spanish translation (#2757)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2757
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-09-07 18:58:08 -07:00
0342f52359 chore(webui): inform users how to resync their client for certain cheats (#2750)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 47s
Build / build (push) Successful in 2m22s
Reviewed-on: #2750
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-04 23:42:52 -07:00
ea9012bd56 chore: use raw running in update and start script if node is new enough (#2749)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2749
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-04 23:42:45 -07:00
13400b6d83 chore(webui): update to Spanish translation (#2751)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 55s
Reviewed-on: #2751
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-09-04 23:36:10 -07:00
8d57eda9d2 chore: make use of raw running when dev script is used with newer node (#2748)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 42s
Build / build (push) Successful in 1m57s
Reviewed-on: #2748
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:46:03 -07:00
6b66cb495b chore: handle 'npm run raw' being used on node versions below 22.7.0 (#2747)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2747
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:45:50 -07:00
f4f7ed00d1 chore: add consistent options for IRC, HUB, & NRS addresses (#2746)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2746
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:45:22 -07:00
18556cb2f5 chore: rework AGENTS.md into a more generic CONTRIBUTING.md (#2745)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
This should be useful for humans as well :)

Reviewed-on: #2745
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:45:02 -07:00
648af9ae18 chore(readme): note skipTutorial (#2744)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2744
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:44:34 -07:00
e16da9da44 chore(readme): remove filter from issues link (#2743)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2743
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-03 22:44:25 -07:00
4d8dbd99aa chore: update package-lock.json
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 49s
2025-09-03 11:41:52 +02:00
0a3f9549a9 fix: include currency changes in purchase response (#2740)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 57s
Build / build (push) Successful in 2m24s
Closes #2739

Reviewed-on: #2740
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-02 20:22:56 -07:00
2cfb21b98e chore: buttonify unlockAllScans, unlockAllShipFeatures, unlockAllCapturaScenes (#2738)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Re #2361. Mostly done via ChatGPT Codex.

Reviewed-on: #2738
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-02 20:22:47 -07:00
3fedc701f1 fix(webui): properly deselect active focus school so unlocking is free (#2737)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 1m53s
Reviewed-on: #2737
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-01 20:30:11 -07:00
ed596aa3f3 chore: respond to hub request with reflexive address (#2736)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2736
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-09-01 20:30:03 -07:00
e2349b361e chore: add noDojoDecoBuildStage to default config (#2734)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 42s
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 2m11s
Reviewed-on: #2734
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-31 18:50:08 -07:00
9221178522 fix(webui): switching routes resets active tab for "add items" (#2733)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2733
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-31 18:49:55 -07:00
9a5c2ab4a4 chore: remove NRS config (#2732)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2732
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-31 18:49:48 -07:00
d4c477769a fix: don't attempt to subtract a cost of 0 for unlocking focus school (#2731)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m16s
Build Docker image / docker-amd64 (push) Successful in 49s
Closes #2730

Reviewed-on: #2731
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-31 18:47:14 -07:00
6de9f0dcdb fixup: remove unlockAllSimarisResearchEntries from config-vanilla.json
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build / build (push) Successful in 1m16s
Build Docker image / docker-amd64 (push) Successful in 51s
2025-08-31 18:35:24 +02:00
9662da00de chore(webui): update uk & ru (#2728)
All checks were successful
Build / build (push) Successful in 1m12s
Build Docker image / docker-amd64 (push) Successful in 47s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Reviewed-on: #2728
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-30 19:35:06 -07:00
662d824369 chore: move unlockAllSimarisResearchEntries to a per-account button (#2726)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2725. Re #2361.

Reviewed-on: #2726
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-30 19:34:55 -07:00
a0bac12e95 fix: put vault medallion into correct place (#2723)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Re #2719

Reviewed-on: #2723
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-30 19:34:30 -07:00
e98cb2ec24 feat(webui): add item by ItemType (#2704)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2704
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-30 19:34:22 -07:00
b5c6c3e485 fix: don't push thermal fractures event if it's not activated yet (#2722)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 36s
Build / build (push) Successful in 1m11s
Build Docker image / docker-arm64 (push) Successful in 1m0s
Closes #2721

Reviewed-on: #2722
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-29 17:37:34 -07:00
fa65ba3f25 chore: correct breaks in Thermia Fractures cycle (#2724)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2724
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-29 17:37:23 -07:00
0c54c064eb fix: Pathos Clamps Upon Isleweave Clearing (#2718)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
https://wiki.warframe.com/w/Isleweaver#Normal

![image.png](/attachments/ad46e7d2-e28c-47cf-8b13-237a29bc7cc6)

Co-authored-by: AlexisinGit <136088944+AlexisinGit@users.noreply.github.com>
Reviewed-on: #2718
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AlexisinGit <alexisingit@noreply.localhost>
Co-committed-by: AlexisinGit <alexisingit@noreply.localhost>
2025-08-29 17:36:42 -07:00
b4e789bf0d chore: move unlock all profit taker stages to a per-account button (#2717)
Some checks are pending
Build / build (push) Waiting to run
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Re #2361, generated with OpenAI Codex.

Reviewed-on: #2717
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-29 17:36:31 -07:00
9add016d7b feat: finishInvasionsInOneMission (#2715)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
#2646

Co-authored-by: AlexisinGit <136088944+AlexisinGit@users.noreply.github.com>
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2715
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AlexisinGit <alexisingit@noreply.localhost>
Co-committed-by: AlexisinGit <alexisingit@noreply.localhost>
2025-08-29 17:36:11 -07:00
a2171c80a5 fix: CrewShipFusion bug with SubroutineIndex (#2714)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 51s
Build / build (push) Successful in 2m19s
Crewship fusion didn't agree with player's choice.

Expected results: ![image.png](/attachments/a61c96c7-1624-4dd4-9e4c-c6199d5af95a)

What I actually get: ![image.png](/attachments/cf58aed4-18d9-4d97-8894-6c53762f366d)

```
export interface ICrewShipComponentFingerprint extends IInnateDamageFingerprint {
    SubroutineIndex?: number;
}
```

The interface already demand SubroutineIndex to exist, so it would be unnecessary to check.

Meanwhile, inferiorFingerprint.SubroutineIndex could be 0, 1, 2... and might be handled incorrectly as true/ false.

Co-authored-by: AlexisinGit <136088944+AlexisinGit@users.noreply.github.com>
Reviewed-on: #2714
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AlexisinGit <alexisingit@noreply.localhost>
Co-committed-by: AlexisinGit <alexisingit@noreply.localhost>
2025-08-28 05:50:28 -07:00
5a2fa2c2c3 chore: move a few more cheat toggles to be per-account (#2713)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Re #2361

Reviewed-on: #2713
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-28 05:50:21 -07:00
4b2b184b8f feat: additional operator appearance slots (#2712)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2710

Reviewed-on: #2712
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-28 05:50:13 -07:00
dc401de1e9 chore: use raw running in docker image (#2711)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
We can rely on having up-to-date Node.js here, and reducing the size by like ~55 MiB seems decent.

Reviewed-on: #2711
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-28 05:50:06 -07:00
1439fdc083 chore(vscode): set typescript.preferences.preferTypeOnlyAutoImports
All checks were successful
Build / build (push) Successful in 1m10s
Build Docker image / docker-amd64 (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 1m14s
2025-08-27 23:44:12 +02:00
6771a129f5 fixup: remove fix-imports
All checks were successful
Build / build (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 1m5s
Build Docker image / docker-arm64 (push) Successful in 1m13s
2025-08-27 22:41:22 +02:00
f13de810e5 fixup: use eslint:fix instead of prettier in fix script
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Successful in 1m8s
2025-08-27 22:33:55 +02:00
c52f7dcedc fixup: remove paths from tsconfig
All checks were successful
Build / build (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Build Docker image / docker-arm64 (push) Successful in 1m10s
2025-08-27 22:31:22 +02:00
0bf142ed50 fix: view profile on U39.1+ (#2709)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build / build (push) Successful in 1m45s
Build Docker image / docker-amd64 (push) Successful in 1m4s
Reviewed-on: #2709
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 13:06:36 -07:00
0d791ad145 fix: incorrect ordering of relicQualitySuffixes (#2708)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2708
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 13:06:28 -07:00
5396eefe75 chore: move dependencies only required for build to 'optional' (#2707)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
This is a bit of a misnomer because npm installs them just like dev deps unless an appropriate --omit flag is added. Anyway, these deps are ~55 MB, so being able to omit that chunk for raw running might be good.

Reviewed-on: #2707
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 13:06:18 -07:00
a9a197b005 chore: add some missing entries to .dockerignore (#2706)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2706
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 13:06:01 -07:00
1ade801e7c fix: 5 disinfection progress per mission until 95 for Technocyte Coda (#2705)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Co-authored-by: AlexisinGit <136088944+AlexisinGit@users.noreply.github.com>
Reviewed-on: #2705
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AlexisinGit <alexisingit@noreply.localhost>
Co-committed-by: AlexisinGit <alexisingit@noreply.localhost>
2025-08-27 13:05:49 -07:00
c9cc1fa089 chore: define node version constraints (#2703)
All checks were successful
Build / build (push) Successful in 1m11s
Build Docker image / docker-amd64 (push) Successful in 1m4s
Build Docker image / docker-arm64 (push) Successful in 1m9s
`>=20.18.1` is required for `npm i && npm run build && npm run start` to succeed.
`npm run raw` would require `>=22.7.0`.

Reviewed-on: #2703
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 01:30:36 -07:00
287acab892 chore: abort update and start scripts when .git folder is missing (#2702)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
In that case, updating is obviously not possible.

Reviewed-on: #2702
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 01:30:19 -07:00
30398021b3 feat: claim all recipes (#2700)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2699

tried to make it a cleaner diff, but this is the best I could do

Reviewed-on: #2700
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-27 01:29:46 -07:00
15578b04d2 chore: move baro cheats to worldstate section (#2695)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2695
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-27 01:29:38 -07:00
9d034824f7 chore: npm update
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m12s
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 54s
2025-08-26 23:25:20 +02:00
8b8d66ab2e chore: add worldState endpoint for U39.1 (#2701)
All checks were successful
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 57s
Build Docker image / docker-arm64 (push) Successful in 1m8s
U39.1 wants world state from `/worldState.php` not from `/dynamic/worldState.php` as before.
Before bootstrapper update you need to replace `/static/data/buildConfig.json` to match latest version.

Reviewed-on: #2701
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-26 13:44:44 -07:00
78b8cf4c77 fix: bump DuviriInfo.NumCompletions when completing one of its modes (#2698)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m10s
Build / build (push) Successful in 1m41s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Closes #2697

Reviewed-on: #2698
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-26 04:29:14 -07:00
1ead04ddc1 chore: switch to esm, support raw running via node (#2696)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Using ESM so the `import` syntax we use is actually valid without compilation. Now, Node can run the TypeScript code directly, albeit without typechecking and requiring use of an experimental feature.

Reviewed-on: #2696
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-26 04:29:06 -07:00
c97c22b434 chore: use relative imports with .ts (#2694)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m15s
Build / build (push) Successful in 1m8s
Build Docker image / docker-amd64 (push) Successful in 1m1s
Reviewed-on: #2694
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-25 13:37:14 -07:00
d7a93463c0 chore: enforce consistent-type-imports (#2693)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m6s
Build / build (push) Successful in 1m8s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Reviewed-on: #2693
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 21:41:20 -07:00
f6b73e58da chore(webui): swap account and server cheat cards (#2691)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 53s
Reviewed-on: #2691
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 15:59:33 -07:00
28b8fb3e78 chore: move skipClanKeyCrafting back to config.json (#2690)
All checks were successful
Build / build (push) Successful in 1m7s
Build Docker image / docker-amd64 (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Reviewed-on: #2690
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 15:36:59 -07:00
895e76b45e chore: automatically remove deleted options from config.json (#2689)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 56s
Reviewed-on: #2689
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 15:30:31 -07:00
71d0c140ae chore: move more cheats to account section (#2680)
All checks were successful
Build / build (push) Successful in 1m39s
Build Docker image / docker-amd64 (push) Successful in 56s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Re #2361

Reviewed-on: #2680
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-24 15:16:42 -07:00
f06a3b8187 fix: use netracell search pulse only when container item was picked up (#2687)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2687
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 15:16:06 -07:00
ffcbbb480b fix(import): handle ship features being in inventory (#2688)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2686

Reviewed-on: #2688
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-24 15:15:50 -07:00
dfd1fb834b chore: avoid using client oid representation in database (#2685)
All checks were successful
Build / build (push) Successful in 1m45s
Build Docker image / docker-amd64 (push) Successful in 1m5s
Build Docker image / docker-arm64 (push) Successful in 1m6s
Reviewed-on: #2685
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-23 12:56:41 -07:00
2c43d897c0 fix(import): handle IOrbiterClient.ShipInterior being undefined (#2681)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 57s
Reviewed-on: #2681
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-22 23:17:53 -07:00
217eb1f61b chore(webui): update to Spanish translation (#2682)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 1m6s
Reviewed-on: #2682
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-08-22 20:03:30 -07:00
5e1ff64cca fix: move getDialogue preconditions into the function itself (#2679)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 1m40s
Closes #2678

Reviewed-on: #2679
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-22 11:46:04 -07:00
9c232bfc1f chore: skip cetus intro job with complete all missions (#2677)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2647

Reviewed-on: #2677
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-22 11:45:56 -07:00
9e73fc7fb1 chore: update PE+ (#2676)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2673

Reviewed-on: #2676
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-22 11:45:47 -07:00
03b8b610db feat: consume search pulse for doing netracells (#2675)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2675
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-22 11:45:39 -07:00
4b46938dab chore(webui): update uk (#2674)
All checks were successful
Build / build (push) Successful in 1m40s
Build Docker image / docker-amd64 (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 1m6s
Reviewed-on: #2674
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-21 12:21:09 -07:00
6230f52f27 fix: incorrect log message
All checks were successful
Build / build (push) Successful in 1m4s
Build Docker image / docker-arm64 (push) Successful in 1m48s
Build Docker image / docker-amd64 (push) Successful in 54s
2025-08-21 20:58:57 +02:00
460cb20af7 fix: the circuit normal rewards rotation (#2672)
All checks were successful
Build / build (push) Successful in 1m6s
Build Docker image / docker-amd64 (push) Successful in 57s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Reviewed-on: #2672
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: BanLanGen <banlangen@noreply.localhost>
Co-committed-by: BanLanGen <banlangen@noreply.localhost>
2025-08-21 11:27:36 -07:00
1e4007f6da fix(import): accept loadouts without GEAR field (#2671)
Some checks failed
Build Docker image / docker-arm64 (push) Successful in 1m6s
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Has been cancelled
New inventories don't have that field

Reviewed-on: #2671
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-21 11:25:50 -07:00
7dc44e81ec feat: thermia fractures (#2670)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m12s
Build / build (push) Successful in 1m13s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Re #1103

Reviewed-on: #2670
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-21 11:07:31 -07:00
bfc4048721 chore(webui): update to Spanish translation (#2669)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build / build (push) Successful in 1m6s
Build Docker image / docker-amd64 (push) Successful in 1m7s
Reviewed-on: #2669
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-08-20 00:37:59 -07:00
7174848588 chore: non-fatally handle missing LevelKey info (#2667)
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Closes #2665

Reviewed-on: #2667
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-18 09:34:38 -07:00
a5b667c331 feat: protovyre armor challenge rewards (#2666)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2485

Reviewed-on: #2666
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-18 09:34:31 -07:00
9b6abff2be feat: dominus aureus rewards when operation eight claw is active (#2663)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2660

Reviewed-on: #2663
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-18 09:34:24 -07:00
7c7f37e46b chore(webui): update to Spanish translation (#2662)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2662
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-08-18 09:34:17 -07:00
52a560bef2 chore(webui): update uk & ru (#2664)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 1m32s
Reviewed-on: #2664
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-18 09:31:58 -07:00
369794dcdb chore(webui): update zh (#2668)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2668
Co-authored-by: BanLanGen <banlangen@noreply.localhost>
Co-committed-by: BanLanGen <banlangen@noreply.localhost>
2025-08-18 09:31:51 -07:00
956ba38b7d fix(webui): handle name already being taken at rename (#2659)
All checks were successful
Build / build (push) Successful in 1m25s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 50s
Closes #2643

Reviewed-on: #2659
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-17 13:12:40 -07:00
660c3f3ddf fix(webui): differentiate between nonce invalidation & forced logout (#2658)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2642

Reviewed-on: #2658
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-17 13:12:29 -07:00
024b806af1 feat(webui): display Favorite items first (#2656)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2653

Reviewed-on: #2656
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-17 13:12:06 -07:00
b885d7766c feat: warframe anniversary goals (#2640)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Also adds `useAnniversaryTagForOldGoals` to display old Goals in GUI
Re #1103

Reviewed-on: #2640
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-17 13:11:55 -07:00
d0743654dd feat: orphix venom (#2637)
All checks were successful
Build / build (push) Successful in 1m27s
Build Docker image / docker-amd64 (push) Successful in 1m14s
Build Docker image / docker-arm64 (push) Successful in 1m10s
Without rotation on last mission
Re #1103
Thanks to https://wiki.warframe.com/w/World_State/Example

Reviewed-on: #2637
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-16 09:52:58 -07:00
cddd2cdd2b chore: fix inconsistencies with getGuildEventScoreController (#2641)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
bring it more in line with the rest of the codebase

Reviewed-on: #2641
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-16 09:52:36 -07:00
62a6042c9c fix(webui): save ProgressOverride value (#2638)
All checks were successful
Build / build (push) Successful in 1m39s
Build Docker image / docker-arm64 (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 1m23s
Reviewed-on: #2638
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-16 05:42:09 -07:00
e8d4d84d6e chore(webui): update uk (#2639)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2639
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-16 05:41:12 -07:00
62881aaa36 feat: articula customizations (#2636)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2636
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-16 05:40:16 -07:00
df316e3a7a feat: conclave challenges rotation (#2635)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Re #1192

Reviewed-on: #2635
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-16 05:39:23 -07:00
264e9cfc98 fix: use flat rush cost at <50% progress (#2634)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
otherwise the cost would be increased instead of decreased

Reviewed-on: #2634
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-16 05:39:00 -07:00
5d5554a80e feat: h-09 apex turret sumdali reward (#2633)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2630

Reviewed-on: #2633
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-16 05:38:48 -07:00
da14a4081b chore: put reward year into goal _id (#2626)
All checks were successful
Build / build (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m44s
Build Docker image / docker-arm64 (push) Successful in 1m8s
Closes #2623

Reviewed-on: #2626
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-15 21:02:15 -07:00
b0b68f474a feat: getShip import (#2627)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m12s
Build / build (push) Successful in 1m55s
Build Docker image / docker-amd64 (push) Successful in 1m24s
Re #2592
Unsure about import note, is it okay that we leave the API path?

Reviewed-on: #2627
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-15 15:13:34 -07:00
ab214df1a8 chore(webui): update ru & uk (#2632)
All checks were successful
Build / build (push) Successful in 1m30s
Build Docker image / docker-amd64 (push) Successful in 1m16s
Build Docker image / docker-arm64 (push) Successful in 1m7s
Updated and improved some translations

Reviewed-on: #2632
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-15 14:57:04 -07:00
9f8105d7f1 fix: extractor drone reward amounts (#2629)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Fixes #2628

Reviewed-on: #2629
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VampireKitten <dynamightkobold@gmail.com>
Co-committed-by: VampireKitten <dynamightkobold@gmail.com>
2025-08-15 14:56:39 -07:00
c47a29ec96 chore: note
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m17s
2025-08-15 18:15:10 +02:00
6d727c50f4 chore: handle addItem of GhoulFragmentRewards (#2625)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m30s
Build Docker image / docker-amd64 (push) Successful in 1m21s
Closes #2624

Reviewed-on: #2625
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-15 08:15:51 -07:00
bf04755c36 feat: belly of the beast / eight claw (#2621)
Some checks failed
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build / build (push) Successful in 1m25s
Build Docker image / docker-amd64 (push) Has been cancelled
Re #1103

Reviewed-on: #2621
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-15 08:14:36 -07:00
e345fc35b6 chore(webui): update es (#2622)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m11s
Build / build (push) Successful in 3m8s
Build Docker image / docker-amd64 (push) Successful in 1m40s
Reviewed-on: #2622
Co-authored-by: Slayer55555 <slayer55555@noreply.localhost>
Co-committed-by: Slayer55555 <slayer55555@noreply.localhost>
2025-08-14 08:38:43 -07:00
f5335704b4 chore: make 'infinite' cheats per-account toggles (#2619)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m30s
Build Docker image / docker-amd64 (push) Successful in 1m6s
Re #2361

Reviewed-on: #2619
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-14 07:58:41 -07:00
79c5f7a67a chore: fix cyclic include for slotPurchaseNameToSlotName (#2618)
All checks were successful
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m14s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Reviewed-on: #2618
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-14 07:56:45 -07:00
e97b107853 feat: nemesis convert message (#2616)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2614

Reviewed-on: #2616
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-14 07:56:29 -07:00
7bc5065251 chore(webui): update uk (#2617)
All checks were successful
Build / build (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 47s
Reviewed-on: #2617
Co-authored-by: LoseFace <loseface@noreply.localhost>
Co-committed-by: LoseFace <loseface@noreply.localhost>
2025-08-13 13:03:20 -07:00
3194a693b3 fix: hardcode rotation A for non-endless railjack missions (#2613)
All checks were successful
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Closes #2612

Reviewed-on: #2613
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-13 07:13:41 -07:00
261dbd5fdf feat: railjack abandoned caches (#2611)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2602

Reviewed-on: #2611
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: VampireKitten <dynamightkobold@gmail.com>
Co-committed-by: VampireKitten <dynamightkobold@gmail.com>
2025-08-13 07:13:26 -07:00
fd2ec696a0 feat: tactical alerts (#2607)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Includes all `Tactical Alerts` since Star Chart 3.0 with exception:
`Snowday Showdown`
`Wolf Hunt (2019)` (couldn't find corresponded `EventNode` for that)
`Void Corruption` (that's goes into `Alerts`)
All `Warframe's Anniversary`

Re #1103

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2607
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-13 07:13:05 -07:00
9cc0c76ef5 chore(webui): omit conclave from supported syndicates (#2608)
All checks were successful
Build / build (push) Successful in 1m3s
Build Docker image / docker-arm64 (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 56s
Reviewed-on: #2608
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-12 06:32:41 -07:00
2a4488d1dd chore(webui): update fr (#2609)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2609
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-08-12 06:32:27 -07:00
2e1326cde8 chore: update PE+ (#2606)
All checks were successful
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 56s
Reviewed-on: #2606
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-11 08:09:30 -07:00
70be467cbf feat: disruption rewards (#2605)
Some checks are pending
Build / build (push) Waiting to run
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Closes #2599

Reviewed-on: #2605
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-11 08:09:15 -07:00
fac3ec01c6 chore: improve structuring of mission response types (#2604)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2604
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-11 08:09:08 -07:00
ebdca760e6 chore: simplify syncing of challenge 'Completed' field (#2603)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Challenges are mostly client-authoritative, so narrow the special-casing to "challengeRewards".

Reviewed-on: #2603
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-11 08:08:47 -07:00
51c0ddda38 feat(goals): cetus events (#2598)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Includes `Plague Star` and `Ghoul Purge`.
Translation for webUI taken from game files.
Re #1103

Reviewed-on: #2598
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-11 08:08:40 -07:00
9129bdb5fc chore(webui): update zh (#2601)
All checks were successful
Build / build (push) Successful in 57s
Build Docker image / docker-arm64 (push) Successful in 55s
Build Docker image / docker-amd64 (push) Successful in 50s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2601
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: qingchun <qingchun@noreply.localhost>
Co-committed-by: qingchun <qingchun@noreply.localhost>
2025-08-10 16:53:03 -07:00
a4922d4c35 chore: improve handling of RJ interstitial missionInventoryUpdate (#2600)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 55s
Build / build (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 53s
InventoryJson should only be returned when going back to dojo, in which case RJ is also not present in the request anymore.

Reviewed-on: #2600
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-09 03:38:10 -07:00
679752633a feat: recover nightwave challenges (#2593)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 56s
Closes #1534

Reviewed-on: #2593
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-08 04:21:18 -07:00
67b5890f39 feat(webui): ukrainian translation by LoseFace (#2596)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 54s
Reviewed-on: #2596
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-07 12:31:38 -07:00
5d54e79e5d chore(webui): russian translation update by LoseFace (#2595)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2595
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-07 12:31:28 -07:00
4606f28a58 fix(webui): incorect values for ability override request (#2591)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 51s
Reviewed-on: #2591
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-07 03:59:25 -07:00
a2d383ee3c fix: ignore rewardQualifications for non-endless mission types (#2590)
All checks were successful
Build / build (push) Successful in 1m7s
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 53s
Closes #2586

Reviewed-on: #2590
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-06 04:01:01 -07:00
834b7a8196 fix(webui): email address not being lowercased (#2589)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Regression introduced by 2fa6dcc7ed, which threw out the change introduced by 1fd801403f.

Reviewed-on: #2589
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-06 04:00:43 -07:00
4a2d863c9c chore(webui): update to Spanish translation (#2588)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 1m8s
Build Docker image / docker-amd64 (push) Successful in 56s
Reviewed-on: #2588
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-08-05 10:18:36 -07:00
9f0cd91105 chore(webui): update German translation (#2587)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 1m4s
I need to double check some other time if it's also called "TennoLive" in German wf, once I'm home again. Should be prob good enough for now...

Reviewed-on: #2587
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-08-05 09:47:25 -07:00
ebfef52fb1 fix(webui): proper PvPVariant check (#2585)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 53s
Build / build (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 1m2s
Closes #2584

Reviewed-on: #2585
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-04 05:18:45 -07:00
dd7bacd22e chore: update PE+ (#2583)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-amd64 (push) Successful in 53s
Build Docker image / docker-arm64 (push) Successful in 53s
Reviewed-on: #2583
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-03 15:37:06 -07:00
c00967931e fix(webui): add k-drive (#2581)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker-amd64 (push) Successful in 1m21s
Build Docker image / docker-arm64 (push) Successful in 53s
Closes #2580

Reviewed-on: #2581
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-02 04:57:16 -07:00
b15a635e11 fix(webui): exclude zaw strike pvp variants (#2579)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2579
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-02 04:57:08 -07:00
7e618539fa fix(webui): explicitly specify websocket protocol (#2578)
All checks were successful
Build / build (push) Successful in 1m18s
Build Docker image / docker-amd64 (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 54s
apparently some browsers (e.g. 2 year old chrome) need this to establish a connection. can't hurt, anyway.

Reviewed-on: #2578
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-01 03:47:14 -07:00
a29398fae6 chore(webui): update Chinese translation (#2577)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 52s
Build / build (push) Successful in 1m21s
Build Docker image / docker-amd64 (push) Successful in 1m54s
Reviewed-on: #2577
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-31 07:46:01 -07:00
601091f1c0 chore(webui): clarify that eidolon override also takes effect on deimos (#2576)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 49s
Build Docker image / docker-amd64 (push) Successful in 1m23s
Build / build (push) Successful in 55s
This is an update in the English translation only.

Reviewed-on: #2576
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-31 02:28:03 -07:00
f561884f2c feat: worldState.baroTennoConRelay config (#2574)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2531

Reviewed-on: #2574
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-31 02:27:38 -07:00
6e1cb0c9f9 chore(webui): update Chinese translation (#2575)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2575
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-31 02:27:26 -07:00
9286627668 feat: star days rotation (#2573)
All checks were successful
Build / build (push) Successful in 1m11s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Build Docker image / docker-arm64 (push) Successful in 1m9s
Closes #2567

Reviewed-on: #2573
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 05:44:42 -07:00
f94f2005d3 fix: script error with baroFullyStocked
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m10s
Build / build (push) Successful in 1m13s
Build Docker image / docker-amd64 (push) Successful in 1m14s
2025-07-30 13:45:00 +02:00
9901b7af54 chore: rename config.json.example to config-vanilla.json (#2570)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m6s
Build / build (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m14s
Changing file extensions can be a bit of a chore on stock Windows, so this should simplify matters. Another bonus is that the "vanilla" clarifies the general guideline for how the defaults are configured.

Reviewed-on: #2570
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 04:01:02 -07:00
2fa846f465 chore(webui): update Chinese translation (#2572)
All checks were successful
Build / build (push) Successful in 1m7s
Build Docker image / docker-arm64 (push) Successful in 1m21s
Build Docker image / docker-amd64 (push) Successful in 2m12s
Reviewed-on: #2572
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-30 03:51:42 -07:00
541ec3d702 feat: claiming of tennolive relay's secret (#2569)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m11s
Build / build (push) Successful in 1m30s
Build Docker image / docker-amd64 (push) Successful in 1m10s
Reviewed-on: #2569
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 01:51:07 -07:00
0a28eab65d feat: worldState.tennoLiveRelay config (#2568)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Re #2531

Reviewed-on: #2568
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 01:50:43 -07:00
8e639a16bd feat: initial protovyre/evolving cosmetics (#2566)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Basic handling of sending the challenge rewards to the inbox upon completion.

Re #2485. Still missing handling for the Protovyre armor pieces which require killing sentients.

Reviewed-on: #2566
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 01:50:23 -07:00
522924a823 chore: remove empty ModularParts arrays from equipment (#2565)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2565
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 01:49:55 -07:00
48e3f324e2 chore: log when worldState time is behind real time + make sure client knows fissures are active (#2562)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2562
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-30 01:49:34 -07:00
8f77c722cb chore(webui): update German translation (#2564)
All checks were successful
Build / build (push) Successful in 1m6s
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Reviewed-on: #2564
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-29 07:34:04 -07:00
e7287933b5 chore(webui): update Chinese translation (#2563)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2563
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-29 07:33:57 -07:00
b21bca7a6d fix: AffiliationChanges disapears from EOM screen when bounty stage is completed (#2560)
All checks were successful
Build / build (push) Successful in 1m7s
Build Docker image / docker-amd64 (push) Successful in 1m9s
Build Docker image / docker-arm64 (push) Successful in 1m9s
Reviewed-on: #2560
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-29 00:31:48 -07:00
d30d450311 chore: add rewards for NewbieJob (#2559)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2536

Reviewed-on: #2559
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-29 00:31:37 -07:00
b62e326920 feat(webui): ability overrides (#2558)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #851

Reviewed-on: #2558
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-29 00:31:29 -07:00
8b4bc114f6 chore: add logging for bounty medallion rewards (#2557)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2557
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-29 00:31:19 -07:00
564aa06762 fix: correctly apply riven cipher (#2554)
All checks were successful
Build / build (push) Successful in 1m6s
Build Docker image / docker-amd64 (push) Successful in 1m21s
Build Docker image / docker-arm64 (push) Successful in 1m41s
The completeRandomModChallenge endpoint is only supposed to complete the challenge, what a shocker. Because we directly set a unveiled fingerprint, the game was not showing the expected UI.

Reviewed-on: #2554
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-27 06:29:12 -07:00
2e84f71af8 chore: faithful handling when ki'teer signa was rolled (#2553)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2553
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-27 06:29:02 -07:00
ddfa98e0b2 chore: update baro.json (#2550)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Co-authored-by: BanLanGen <banlangen@noreply.localhost>
Reviewed-on: #2550
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-27 06:28:51 -07:00
bb3c3e01b0 chore: add GEAR loadout slot (#2545)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 52s
added missing GEAR loadout slot (was causing issues with saving loadout in U29)

Reviewed-on: #2545
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: azdful <mischzaripov@yandex.ru>
Co-committed-by: azdful <mischzaripov@yandex.ru>
2025-07-25 01:51:13 -07:00
695dcf98e0 chore: handle sale of fusion treasures (#2542)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m10s
Build Docker image / docker-amd64 (push) Successful in 1m6s
Closes #2541

Reviewed-on: #2542
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-24 05:30:55 -07:00
509f7f0d9b feat: selling for Dirac (CrewShipFusionPoints) (#2540)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m8s
Build / build (push) Successful in 1m25s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2540
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: azdful <mischzaripov@yandex.ru>
Co-committed-by: azdful <mischzaripov@yandex.ru>
2025-07-23 11:09:44 -07:00
aada031a80 chore: update mongoose (#2539)
All checks were successful
Build / build (push) Successful in 1m18s
Build Docker image / docker-arm64 (push) Successful in 1m7s
Build Docker image / docker-amd64 (push) Successful in 52s
The transform hook signature was changed in the typings, so I just updated them to be explicit about what we expect.

Reviewed-on: #2539
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-23 07:51:51 -07:00
a2a441ecb0 fix: getUsernameFromEmail returning wrong value (#2538)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2537

Reviewed-on: #2538
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-23 07:51:22 -07:00
c0a0463a68 feat: vista suite backdrop and soundscape customisation (#2534)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m14s
Build Docker image / docker-amd64 (push) Successful in 1m1s
Closes #2532

Reviewed-on: #2534
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-22 07:34:46 -07:00
2307a40833 chore(webui): debounce inventory bulk actions (#2533)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2513

Reviewed-on: #2533
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-22 07:34:40 -07:00
304af514e2 fix(webui): handle name already being taken (#2530)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2528

Reviewed-on: #2530
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-22 07:34:31 -07:00
ddf3cd49b5 chore: handle new T value for orowyrm chest (#2527)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2526

Reviewed-on: #2527
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-22 07:34:22 -07:00
41e3f0136f chore(webui): improve auth state management
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 55s
2025-07-21 20:28:19 +02:00
c0ca9d9398 fix: add try/catch around websocket message event handler (#2529)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 1m13s
Re #2528

Reviewed-on: #2529
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-21 07:44:54 -07:00
0f6b55beed chore(webui): update fr (#2525)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m21s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Reviewed-on: #2525
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-07-21 03:23:12 -07:00
f8550e9afe fix: incorect deimos bounty medallion reward (#2524)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2524
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-21 03:23:05 -07:00
b53c4d9125 feat: reset obstacle course (#2523)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2520

Reviewed-on: #2523
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-21 03:22:59 -07:00
922b65cfab chore: print build date when started via docker (#2517)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Docker updates can be a bit confusing so this should help users know if they're up-to-date.

Reviewed-on: #2517
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-21 03:22:46 -07:00
2f642df20a feat: reset decorations (#2516)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2514

Reviewed-on: #2516
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-21 03:22:35 -07:00
62314e89c7 fix: refund personal decos when destroying dojo room (#2522)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m19s
Build Docker image / docker-amd64 (push) Successful in 51s
Closes #2521

Reviewed-on: #2522
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-20 10:35:14 -07:00
56aa3e3331 fix: placing decorations in apartment in newer game versions (#2515)
All checks were successful
Build / build (push) Successful in 1m9s
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Newer game versions use BootLocation instead of IsApartment

Reviewed-on: #2515
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-20 01:29:08 -07:00
c3f486488f chore: npm update (#2512)
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 58s
Build Docker image / docker-arm64 (push) Successful in 1m1s
There were some low severity vulnerabilites audit was complaining about

Reviewed-on: #2512
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-20 00:28:46 -07:00
49c353d895 chore: disable DTLS (#2511)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2511
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-20 00:28:37 -07:00
90ab560620 chore(webui): don't refresh inventory for sell on the tab that issued it (#2506)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m15s
Build Docker image / docker-amd64 (push) Successful in 1m5s
Reviewed-on: #2506
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-18 15:36:10 -07:00
b0e80fcfa8 chore(webui): update German translation (#2507)
All checks were successful
Build / build (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Build Docker image / docker-arm64 (push) Successful in 1m10s
Reviewed-on: #2507
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-17 06:56:23 -07:00
2c62fb3c3c chore: move syncConfigWithDatabase to configService (#2505)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build / build (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 52s
This avoids a cyclic dependency due to configController using this

Reviewed-on: #2505
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-17 05:04:30 -07:00
5b215733aa chore(webui): update to Spanish translation (#2503)
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 57s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Reviewed-on: #2503
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-07-16 23:04:26 -07:00
39866b9a2b fix: hide edit suit invigorations card on detailed view load (#2500)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 55s
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 1m43s
Fixes #2494

Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com>
Reviewed-on: #2500
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: nyaoouo <nyaoouo@noreply.localhost>
Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>
2025-07-16 08:29:41 -07:00
fad1ee9314 chore(webui): update Chinese translation (#2501)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2501
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-16 08:29:13 -07:00
64b43fcccf chore(webui): fixing a mess in the translations (#2498)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m11s
Build Docker image / docker-amd64 (push) Successful in 57s
Re #2494 (only fixes the strings, **NOT** the weapon issue)

- The invigoration stuff now mentions the numbers, percentages of buffs
- Improved some misleading strings (e.g. "Movement Speed", when it was in fact just "Sprint Speed" instead)
- Improved some inconsistencies in some key names (some weren't like other, similar existing ones)
- Got rid of duplicate "None" string & re-used it properly + re-used existing strings to newly added buttons, instead of using unnecessary extra added strings (more consistent to use existing strings, aside that they are shorter, less lines and less work overall for everyone involved)

If I should change anything, lemme know.

Reviewed-on: #2498
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-15 20:59:59 -07:00
e407262cf8 fix: don't send baro message ahead of his visit (#2497)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2495

Reviewed-on: #2497
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-15 20:59:49 -07:00
00e57c43df fix: charge correct amount of void traces for upgrading to radiant (#2492)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2490

Reviewed-on: #2492
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-15 20:59:39 -07:00
2ab9f39507 chore(webui): update Chinese translation (#2493)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m39s
Build Docker image / docker-amd64 (push) Successful in 2m54s
Reviewed-on: #2493
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-15 02:37:43 -07:00
b60723ef54 feat(webui): edit suit invigorations (#2478)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 57s
Build / build (push) Successful in 1m31s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2478
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: nyaoouo <nyaoouo@noreply.localhost>
Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>
2025-07-14 20:33:37 -07:00
b3bf291d10 chore: send event messages for boosters (#2487)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 1m41s
Build Docker image / docker-amd64 (push) Successful in 1m17s
Closes #2464

Reviewed-on: #2487
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-14 20:24:17 -07:00
db86e2d265 chore(webui): update translations (#2489)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
- Updated German translation with all new strings
- Added the rest of the missing Chinese translation contributors (only the ones who did actually translate, that is)

Reviewed-on: #2489
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-14 20:23:56 -07:00
f6cb8414c1 chore(webui): refresh inventory when crafting/buying/gilding kitguns (#2486)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 57s
Build Docker image / docker-amd64 (push) Successful in 1m7s
Build / build (push) Successful in 1m22s
Reviewed-on: #2486
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-13 21:08:34 -07:00
ba3df4bdbc fix: don't give mastery xp for SpecialItems except for venari (#2484)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2482

Reviewed-on: #2484
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-13 21:08:23 -07:00
8feb3a5b3c feat: give kaithe summon at riding level 9 (#2483)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2480

Reviewed-on: #2483
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-13 21:08:14 -07:00
66f3d65d77 fix(webui): none syndicate (#2477)
All checks were successful
Build / build (push) Successful in 1m15s
Build Docker image / docker-arm64 (push) Successful in 55s
Build Docker image / docker-amd64 (push) Successful in 54s
Closes #2475

Reviewed-on: #2477
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-12 21:20:08 -07:00
b18f06087b chore(webui): update to Spanish translation (#2481)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2481
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-07-12 21:19:50 -07:00
987b5b98ff chore(webui): update Chinese translation (#2476)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 55s
Build / build (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 51s
Reviewed-on: #2476
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-12 00:00:23 -07:00
fbbd9076cf fix: delete galleon of ghouls inbox messages when disabled via webui (#2473)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 57s
Build / build (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 58s
Reviewed-on: #2473
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-11 21:16:07 -07:00
838818543c fix: omit plains of eidolon from non-grineer sorties (#2472)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2470

Reviewed-on: #2472
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-11 21:15:48 -07:00
a16e2716f1 feat(webui): Change weapon Modular Parts (#2471)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2471
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-11 21:15:16 -07:00
f4c7ce582b chore(webui): handle malformed rivens so they can be deleted at least (#2469)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2468

Reviewed-on: #2469
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-11 21:15:04 -07:00
c0187f9446 chore(webui): refresh inventory when pet was consigned (#2467)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 56s
Build / build (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 44s
Closes #2463

Reviewed-on: #2467
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-11 08:55:04 -07:00
f796f9a851 feat: resetQuestProgress (#2461)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 52s
Build Docker image / docker-arm64 (push) Successful in 54s
Build / build (push) Successful in 1m44s
Just giving the client an 'ok' response. It seems that it does use updateQuest to manage the state itself mostly, just the server and webui are a bit confused about a quest with all stages completed still being active.
Re #1323

Reviewed-on: #2461
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-10 20:59:39 -07:00
e18b8e09ea fix: properly track xp for modular items (#2460)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2454

Reviewed-on: #2460
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-10 20:59:32 -07:00
0d8044b87c chore(webui): update to Spanish translation (#2466)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2466
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-07-10 20:59:22 -07:00
a109ea6c5d chore: update PE+ (#2459)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 53s
Build Docker image / docker-arm64 (push) Successful in 52s
Closes #2455

Reviewed-on: #2459
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-09 21:22:23 -07:00
7eb95c995c feat: initial invasions (#2458)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build / build (push) Successful in 1m17s
Build Docker image / docker-amd64 (push) Successful in 1m3s
A rough generation of 3 invasions that change at daily reset, so missing the planet-based invasion 'chains'.
Battle pay is fully working tho, just a few points of uncertainty there due to missing research and logs.
Death marks are also roughly working.
Re #1097

Reviewed-on: #2458
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-09 19:58:01 -07:00
dc8f32d4d8 chore(webui): update Chinese translation (#2453)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 53s
Build / build (push) Successful in 57s
Build Docker image / docker-amd64 (push) Successful in 58s
Reviewed-on: #2453
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-08 22:12:26 -07:00
ba70ba88dd fix(webui): recreate missing datalist-QuestKeys entries after refreshing inventory (#2452)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-amd64 (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 51s
Closes #2448

Reviewed-on: #2452
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:52:45 -07:00
08d4a03c50 fix: use the correct magic number for crew member seeds (#2451)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2444

Reviewed-on: #2451
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:52:24 -07:00
45feff682b feat: give on call crew gear item for command rank 9 (#2450)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2445

Reviewed-on: #2450
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:52:14 -07:00
65be1083ce feat(webui): mark inbox as read (#2449)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #1117

Reviewed-on: #2449
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:52:01 -07:00
07e7c9e897 fix: add eudico's post-new war yapping to allDialogue (#2447)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2447
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:51:46 -07:00
dcb26471c9 feat: handle all slot types in inventorySlots.php (#2443)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2443
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:51:35 -07:00
5a75d88385 feat: give skiajati and umbra mods alongside umbra, with max rank and potatoes (#2442)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Not 100% sure if the response format is correct and if this is even the correct time/place to do it, but impossible to say without a log from live.

Closes #1054

Reviewed-on: #2442
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:51:18 -07:00
a35572e306 fix(webui): move "add maxed" after "add" button (#2441)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Apparently the onclick event is being fired even when pressing enter. I originally moved it to make alt+enter add it maxed, but now even just pressing enter adds it maxed which is not what I wanted. :|

Reviewed-on: #2441
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:50:51 -07:00
c46c43f143 chore(webui): add loading string to translation system (#2440)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2439

Reviewed-on: #2440
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:50:28 -07:00
98ed2b5ee4 chore: use ideal time when going backwards to satisfy constraints (#2438)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
"Before next expected world state refresh" is now used as a bare minimum constraint. If it cannot be met, we align to the ideal second. Compromising when multiple constraints are in use to avoid having to go back like 7 years, as this would break navigation.

Closes #2434

Reviewed-on: #2438
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:50:10 -07:00
7aa1b12306 fix: show multiplied relic reward amount on eom screen (#2437)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2437
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:49:46 -07:00
b410f6b554 chore(webui): indicate unsaved changes (#2436)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2436
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 20:49:22 -07:00
1dffcf979f feat: send tennokai email after WitW quest completion (#2433)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-amd64 (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 55s
Reviewed-on: #2433
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 00:29:16 -07:00
c86bba017b chore(webui): update Chinese translation (#2432)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2432
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-08 00:29:05 -07:00
2c499cec3d fix: set proper dominant traits for helminth charger (#2429)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2417

Reviewed-on: #2429
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 00:28:56 -07:00
d6145561fd chore: improve randomness of void storm missions (#2428)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Instead of alternating the mission pool every hour, we now use sequentiallyUniqueRandomElement which should ensure that we don't duplicate any of the last x missions (x = 3 for Lith & Axi and x = 1 Meso & Neo).

Reviewed-on: #2428
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-08 00:28:49 -07:00
1545cdb8ce fix(webui): handle config having no worldState entry at all (#2427)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 47s
Build Docker image / docker-arm64 (push) Successful in 50s
Build / build (push) Successful in 1m13s
Reviewed-on: #2427
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:14:05 -07:00
80b5e2df7f feat: random recessive traits for beasts (#2426)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2426
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:13:59 -07:00
76e61129bf fix: skip birthdays of characters we can't talk to (#2425)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2424

Reviewed-on: #2425
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:13:50 -07:00
ea3e299861 fix: ensure nightwave weekly challenges are unique (#2423)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Re #2411

Reviewed-on: #2423
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:13:42 -07:00
3d8c1d036a fix: ensure nightwave daily challenges are unique (#2422)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
When generating a daily challenge, we now use sequentiallyUniqueRandomElement with a lookbehind of 2 to ensure the 2 previous (and still active) daily challenges are not duplicated.

Re #2411

Reviewed-on: #2422
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:13:32 -07:00
773f96ebbc fix: set PrimeTokenAvailability to true (#2420)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2416

Reviewed-on: #2420
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-06 20:13:20 -07:00
2a80307c26 chore(webui): reuse "code_remove" for "general_removeButton" (#2421)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 50s
Build / build (push) Successful in 1m15s
Build Docker image / docker-amd64 (push) Successful in 51s
Closes #2418

Reviewed-on: #2421
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-05 20:18:18 -07:00
a40ff27fea fix: add InitialStartDate to PrimeVaultTrader (#2419)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2414

Reviewed-on: #2419
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-05 20:18:01 -07:00
c9a4359714 chore(webui): update Chinese translation (#2413)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 49s
Build / build (push) Successful in 51s
Build Docker image / docker-amd64 (push) Successful in 55s
Reviewed-on: #2413
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-05 16:52:16 -07:00
280ed8bef1 chore(webui): improve string (#2412)
All checks were successful
Build / build (push) Successful in 53s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Build Docker image / docker-arm64 (push) Successful in 48s
The `100% chance` part is unnecessary in practice and can be shortened. In-game it also never mentions the `100% chance` part either.

Reviewed-on: #2412
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-05 06:41:26 -07:00
9c89e907b1 chore(webui): update Chinese translation (#2410)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 50s
Build / build (push) Successful in 54s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Reviewed-on: #2410
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-05 06:23:17 -07:00
b54fd96098 chore: fix cyclic includes due to saveConfig used in controllers (#2409)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2409
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-05 06:23:10 -07:00
c7c7fd4ea0 chore: enforce consistent imports (#2408)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 47s
Build / build (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 47s
Reviewed-on: #2408
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 17:40:06 -07:00
a75e6d6b95 chore: add warning coverage for cyclic includes (#2407)
All checks were successful
Build / build (push) Successful in 51s
Build Docker image / docker-amd64 (push) Successful in 52s
Build Docker image / docker-arm64 (push) Successful in 47s
and some initial refactoring to avoid it where possible

Reviewed-on: #2407
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 16:49:25 -07:00
5089f67146 chore: improve ship customization stuff (#2402)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker-amd64 (push) Successful in 59s
Build Docker image / docker-arm64 (push) Successful in 49s
The only functionally relevant change is that orbiter scenes are now saved via SkinFlavourItem (as of U39?).
The rest is cleanup of the types because the ship customization stuff was duplicated all over the place.

Reviewed-on: #2402
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 15:19:15 -07:00
0416221d15 feat: reset custom obstable course leaderboard (#2401)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2401
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 15:19:03 -07:00
26729ce21a feat: railjack skins (#2400)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Technically worked before but some weird behaviour. Also updating saveLoadout again. I think warn is a more appropriate severity. It's certainly not a progession stopper if some category is unimplemented.

Closes #2397

Reviewed-on: #2400
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 15:18:53 -07:00
ee4adc7d55 feat: Varzia (Prime Resurgence) rotation (#2390)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Also closes #1059

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2390
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-04 15:18:41 -07:00
29aadf4e78 chore(webui): improve string (#2406)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 59s
Build / build (push) Successful in 1m34s
other `after Hacking` or `while Hacking` strings are in uppercase, but this particular one wasn't

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2406
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-04 15:02:30 -07:00
0b32bc21be chore(webui): improve string (#2405)
All checks were successful
Build / build (push) Successful in 46s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m8s
was missing a plus and this shorter version may fit better

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2405
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-07-04 04:55:36 -07:00
e09e5ebec2 fix: infinite loop when attempting to generate loid commisions (#2399)
All checks were successful
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m17s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Reviewed-on: #2399
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-04 03:26:41 -07:00
b2de8608c6 chore: fix duplicate import
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 56s
Build / build (push) Successful in 1m20s
2025-07-04 11:46:49 +02:00
2b23db1433 chore: remove usage of markModified (#2403)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m19s
Build Docker image / docker-amd64 (push) Successful in 56s
Only this one remained, but not needed because it's schema'd.

Reviewed-on: #2403
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-03 22:45:07 -07:00
a45bacc388 chore: update PE+ (#2398)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2392

Reviewed-on: #2398
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-03 22:44:26 -07:00
46d37d3688 chore(webui): update Chinese translation (#2396)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 53s
Build / build (push) Successful in 1m23s
Reviewed-on: #2396
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-03 11:09:07 -07:00
41686aea88 fix: properly cap negative syndicate standing (#2393)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2388

Reviewed-on: #2393
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-03 11:08:57 -07:00
61ac2f8b72 chore(webui): update Chinese translation (#2394)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 1m18s
Reviewed-on: #2394
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-02 15:04:42 -07:00
d2ab894c01 fix(webui): assign labels for appropriate inputs (#2391)
All checks were successful
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m12s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Reviewed-on: #2391
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-07-02 14:29:41 -07:00
8c85cdcd1d feat(webui): "add maxed" for mods (#2387)
All checks were successful
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 1m0s
Closes #2382

Reviewed-on: #2387
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-02 14:18:24 -07:00
aa6191f033 feat: relic rng cheats (#2386)
Some checks failed
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build / build (push) Has been cancelled
Closes #2370

Reviewed-on: #2386
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-02 14:17:14 -07:00
e26d2635fb chore(webui): fix inconsistent % chance strings (#2385)
Some checks failed
Build / build (push) Successful in 1m0s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2381

Reviewed-on: #2385
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-02 14:15:50 -07:00
dd6ae8898f chore(webui): move max rank button before detailed view link (#2384)
Reviewed-on: #2384
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-02 14:14:19 -07:00
499ca23ffb chore(webui): update inventory when equipment was forma'd (#2383)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m12s
Reviewed-on: #2383
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-02 14:14:13 -07:00
d3102acb7c chore(webui): update Chinese translation (#2380)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Reviewed-on: #2380
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-01 10:58:47 -07:00
363028c9ce chore: clarify log output related to saveLoadout (#2379)
All checks were successful
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Reviewed-on: #2379
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:48:03 -07:00
1d60745f18 feat: year rollover kiss emails (#2376)
All checks were successful
Build / build (push) Successful in 1m16s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 52s
Closes #2375

Reviewed-on: #2376
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:45:41 -07:00
a9b3b16d31 feat: dojo visitors (#2374)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2373

Reviewed-on: #2374
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:45:12 -07:00
fd1d72a1cf chore(webui): add inventory update note to quests tab (#2372)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2372
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:44:30 -07:00
75832afdbe feat: relicRewardItemCountMultiplier cheat (#2369)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2369
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:44:13 -07:00
aa916d2820 feat: sell genetic imprints (#2368)
Some checks failed
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2368
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-01 07:44:05 -07:00
5a5f6106a3 chore: save inventory and account in parallel when claiming login reward (#2371)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m6s
Reviewed-on: #2371
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 17:55:06 -07:00
24d9dc27e2 chore(webui): update inventory when login reward was claimed (#2367)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Closes #2360

Reviewed-on: #2367
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 13:30:09 -07:00
5e05a15743 fix: update calendar progress at daily reset (#2365)
All checks were successful
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Closes #2364

Reviewed-on: #2365
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 13:28:27 -07:00
545b949202 feat: sell crew members (#2366)
All checks were successful
Build / build (push) Successful in 55s
Build Docker image / docker-arm64 (push) Successful in 1m9s
Build Docker image / docker-amd64 (push) Successful in 1m10s
Closes #2363

Reviewed-on: #2366
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 12:58:24 -07:00
0c9b27a29b chore: optimise creditsController (#2359)
All checks were successful
Build / build (push) Successful in 1m1s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m21s
Doing both lookups in parallel saves around 1 ms in the happy case (20% of baseline time), and in case nonce does not match, the error is simply raised as per usual with the inventory request being lightweight enough to be negligible.

Noteworthy that this reasoning doesn't really work for other controllers because in the error case, the inventory request would still be quite significant, even if the HTTP request itself would still finish quickly.

Reviewed-on: #2359
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 11:05:49 -07:00
cfa750b6f7 fix: handle crafting of archwing summon for versions prior to U39 (#2358)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2356

Reviewed-on: #2358
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 11:05:16 -07:00
049baa4313 fix(webui): make sidebar sticky as intended (#2354)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
also a bit of language-specific width adjustment

Reviewed-on: #2354
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-30 11:04:58 -07:00
e267ca8f55 chore(webui): update to Spanish translation (#2355)
All checks were successful
Build / build (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Reviewed-on: #2355
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-29 19:42:24 -07:00
1a2d8ab19a chore: continue execution if subsequent JSON.parse on config failed (#2353)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m20s
By calling JSON.parse before setting everything to undefined, we don't lose the old config in case of an error.

Reviewed-on: #2353
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-29 11:54:20 -07:00
8c19aec340 fix(webui): "all focus schools maxed out" doesn't have squad regen maxed
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m19s
2025-06-29 19:32:49 +02:00
d1c860c693 feat(webui): Valence Bonus (#2348)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 1m2s
Build / build (push) Successful in 1m29s
Closes #1181

Reviewed-on: #2348
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-29 09:28:28 -07:00
69f9d5ebc5 fix: handle setPlacedDecoInfo for non-ship boot locations (#2349)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m15s
Closes #2347

Reviewed-on: #2349
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-29 09:08:44 -07:00
d66f1c58d8 feat(webui): light/dark theme selection (#2343)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2093

Reviewed-on: #2343
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-29 09:07:53 -07:00
5234cf213e chore(webui): explain star chart refreshing for unlock all missions (#2342)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
This is relevant for U39 at least

Reviewed-on: #2342
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-29 09:07:33 -07:00
7c7d2b9061 chore(webui): update to Spanish translation (#2351)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2351
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-29 09:07:12 -07:00
3d46d05a6c chore(webui): update Chinese translation (#2350)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2350
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-06-29 09:07:05 -07:00
00cea6788e fix: sync config with db only after connection is established (#2346)
All checks were successful
Build / build (push) Successful in 57s
Build Docker image / docker-amd64 (push) Successful in 46s
Build Docker image / docker-arm64 (push) Successful in 1m0s
The error message had regressed in the case where connection could not be established.

Reviewed-on: #2346
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 15:08:36 -07:00
58bdb2d2ec chore(webui): improving inconsistent, long string (#2344)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 54s
Build Docker image / docker-amd64 (push) Successful in 1m18s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2344
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-06-28 10:28:09 -07:00
c4c622d82b feat: baro's void surplus (#2334)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m0s
Build / build (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 1m24s
Closes #2284

Reviewed-on: #2334
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 09:50:40 -07:00
44a129ab0b feat: create genetic imprint (#2337)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m18s
Re #2212

Reviewed-on: #2337
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 09:48:12 -07:00
5a7caa5ba9 feat: disableDailyTribute config (#2338)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2338
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 09:47:39 -07:00
a9c5e30994 chore: deal with visiting navigation not resyncing inventory (#2340)
Some checks failed
Build / build (push) Successful in 57s
Build Docker image / docker-amd64 (push) Successful in 51s
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2339

Reviewed-on: #2340
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 09:46:45 -07:00
f0547cb9e6 chore(webui): update Chinese translation (#2341)
Some checks failed
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 53s
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2341
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-06-28 09:45:45 -07:00
ef3d3b92c7 feat: darvo deal (#2261)
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m12s
Closes #2260

Reviewed-on: #2261
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-28 09:39:41 -07:00
a9359bd989 feat(webui): the circuit override (#2335)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 49s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Re #2312

Reviewed-on: #2335
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 20:28:44 -07:00
3d21813a79 fix(vscode): update launch.json
All checks were successful
Build / build (push) Successful in 46s
Build Docker image / docker-arm64 (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m11s
2025-06-28 01:28:45 +02:00
7cad831702 chore: update PE+ (#2336)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Build / build (push) Successful in 1m16s
Closes #2332

Reviewed-on: #2336
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 15:16:22 -07:00
0f2b6c68cd chore: use some instead of find
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 48s
Build / build (push) Successful in 1m31s
2025-06-27 19:29:55 +02:00
4fcac6dc37 feat: duviri murmur reward tiers (#2331)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 46s
Build Docker image / docker-arm64 (push) Successful in 58s
Reviewed-on: #2331
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 08:22:00 -07:00
d2cae012a7 chore: add operation eight claw trophies to allDecoRecipes (#2330)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2295

Reviewed-on: #2330
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 08:21:48 -07:00
b36d524953 feat: personal deco capacity costs (#2329)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2278

Reviewed-on: #2329
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 08:21:27 -07:00
abb5b8880f chore(webui): keep config in sync with multiple tabs (#2325)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Adding "wsid" to uniquely identify a given tab (by the websocket connection) so we can avoid needless refreshing on the same tab.

Closes #2316

Reviewed-on: #2325
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 08:21:05 -07:00
4895b4630b feat: credit boosters (+ daily first win) (#2324)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Daily first win is kinda weird because the client doesn't even seem to acknowledge it.

Also fixed missionCompletionCredits being added to inventory inconsistently (sometimes once, sometimes twice).

Closes #1086
Closes #2322

Reviewed-on: #2324
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-27 08:20:37 -07:00
690b872b5e chore(webui): update Chinese translation (#2328)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 1m5s
Build / build (push) Successful in 1m31s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Reviewed-on: #2328
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-06-26 22:26:35 -07:00
d77fe60cd8 fix(webui): apply consistent margins (#2327)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2327
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 22:26:22 -07:00
3cae42c7d6 fix: acrithis vendor freezing with fullyStockedVendors (#2326)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Permanent offers were not satisfying bin constraints

Reviewed-on: #2326
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 22:25:31 -07:00
bbccee0637 fix: ignore purchaseQuantity for login reward items (#2321)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build / build (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m16s
cryotic amount should not be multiplied by 3000...

Reviewed-on: #2321
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 19:40:06 -07:00
31e24c27ad chore: ignore invalid item ids in saveLoadout (#2320)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
With the 'IsNew' flag + webui delete item, this is quite easy to trigger and shouldn't prevent the other changes from going through.

Reviewed-on: #2320
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 19:39:46 -07:00
4acd87aae6 chore: handle CalendarProgress in updateChallengeProgress
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m1s
Build / build (push) Successful in 1m20s
2025-06-26 19:35:03 -07:00
d8ff601be7 fix: array out of bounds when processing CalendarProgress 2025-06-26 19:35:03 -07:00
d79e7c0274 feat(webui): world state config (#2318)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m7s
Re #2312. Will need some follow-up considerations for circuit game modes.

Reviewed-on: #2318
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 19:32:53 -07:00
4f1f9592b0 chore: use chokidar for configWatcherService (#2315)
All checks were successful
Build / build (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m13s
Build Docker image / docker-arm64 (push) Successful in 57s
It's just a lot snappier + works flawlessly under Bun.

Reviewed-on: #2315
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 15:30:01 -07:00
764cdd1ab8 feat: worldState.allTheFissures (#2313)
All checks were successful
Build / build (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m16s
Closes #2294

Reviewed-on: #2313
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 14:32:26 -07:00
0ba641a2ac chore: update PE+ (#2311)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2309

Reviewed-on: #2311
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 14:31:52 -07:00
eb7b51852b fix: use exact quantity when adding gear items by StoreItem (#2310)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #2304

Reviewed-on: #2310
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-26 14:31:40 -07:00
a3be376489 chore(webui): add Thalys to Incarnon List (#2299)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 49s
Build Docker image / docker-amd64 (push) Successful in 1m12s
Closes #2298

Reviewed-on: #2299
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-26 11:02:40 -07:00
d94cd38120 chore(webui): update Chinese translation (#2291)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 52s
Build Docker image / docker-amd64 (push) Successful in 1m20s
Reviewed-on: #2291
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-06-26 06:44:03 -07:00
8c22555904 feat(webui): add missing subsumed abilities (#2287)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 55s
Build Docker image / docker-amd64 (push) Successful in 1m7s
Closes #1984

Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2287
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-25 20:24:29 -07:00
c9edef39f8 feat: claimJunctionChallengeReward (#2289)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2285

Reviewed-on: #2289
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-25 20:24:16 -07:00
b42182c85f fix(webui): handle existing entries for unlock all missions (#2290)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 55s
Build / build (push) Successful in 1m29s
Closes #2283

Reviewed-on: #2290
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-25 20:22:24 -07:00
86f86d0476 chore: fully adopt tsgo
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build / build (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 1m17s
It's finally able to emit this project without issues. It doesn't yet support incremental builds, but a full build with it is faster than an incremental build with the old tsc, so we're not losing anything.
2025-06-26 05:20:29 +02:00
0fdf8b2c75 chore(webui): update fr
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m3s
Build / build (push) Successful in 1m23s
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
2025-06-25 19:33:21 +02:00
285b1bbf60 chore(webui): update Chinese translation (#2281)
All checks were successful
Build / build (push) Successful in 55s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build Docker image / docker-amd64 (push) Successful in 1m18s
Reviewed-on: #2281
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-06-25 08:04:46 -07:00
731ce6c215 feat: galleon of ghouls (#2280)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Re #1103

Reviewed-on: #2280
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-25 08:04:03 -07:00
39630c5af7 fix: properly convert personal room decos to and from inventory types (#2279)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2277

Reviewed-on: #2279
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-25 08:03:56 -07:00
d5be202835 fix: ensure every bounty tier has a unique job type (#2273)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
I saw "trash their traps" show up twice on Eudico in different tiers, I don't think that's correct.

Reviewed-on: #2273
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-25 08:03:49 -07:00
3a6e4ac2e1 feat: Arcana Isolation Vault rewards (#2276)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 1m0s
Build / build (push) Successful in 1m16s
Closes #388

Reviewed-on: #2276
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-24 19:05:19 -07:00
e234af098d fix(webui): incorrect value of upgrade_AvatarTimeLimitIncrease string (#2274)
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Reviewed-on: #2274
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-24 17:12:39 -07:00
4a434cea2b chore(webui): update to Spanish translation (#2275)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker-amd64 (push) Successful in 1m10s
Build Docker image / docker-arm64 (push) Successful in 1m21s
Reviewed-on: #2275
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-24 12:02:21 -07:00
36f2828d37 feat: void trader (#2269)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 59s
Build / build (push) Successful in 1m29s
Closes #2245

Reviewed-on: #2269
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-24 11:19:32 -07:00
ca3cfb5299 feat(webui): max focus schools (#2270)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 1m11s
Closes #1433

Reviewed-on: #2270
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-24 10:03:18 -07:00
f242d9f873 chore: make ws self test work under bun (#2268)
All checks were successful
Build / build (push) Successful in 51s
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build Docker image / docker-amd64 (push) Successful in 53s
Reviewed-on: #2268
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 21:52:02 -07:00
9a034b1c8a feat: unfaithful bug fixes (#2267)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #2257

Reviewed-on: #2267
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 21:51:48 -07:00
122950034e chore: cleanup purchase stuff (#2266)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Reviewed-on: #2266
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 21:51:09 -07:00
636d3100f3 fixup for 444c92f0c6
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build Docker image / docker-amd64 (push) Successful in 52s
I forgot to save this file
2025-06-24 01:34:47 +02:00
444c92f0c6 fix: use shared count for calendar day indecies (#2265)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 50s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Build / build (push) Successful in 1m22s
I'm not sure if this was always this way and I was just really confused when I initially implemented this, or if this was changed in a later version, but at least now it seems to be tracking everything correctly for 38.6.0.

Closes #2264

Reviewed-on: #2265
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 15:02:30 -07:00
653798b987 fix: use correct dropTable for bounty stage reward (#2263)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker-amd64 (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Re #388

Reviewed-on: #2263
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-23 14:56:18 -07:00
7a88f6f486 chore: create AGENTS.md (#2262)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build Docker image / docker-amd64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2262
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 14:56:08 -07:00
82b203e00b fix(nemesis): subtract charge from installed mods instead of ideal mods (#2259)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Because oull might substitute one of them.

Closes #2258

Reviewed-on: #2259
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 14:55:48 -07:00
271f5bd47a fix: also increment LastCompletedDayIdx when completing a 1999 challenge (#2256)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker-amd64 (push) Successful in 1m9s
Build Docker image / docker-arm64 (push) Successful in 1m5s
Fixes #2255

Reviewed-on: #2256
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 04:58:21 -07:00
f61d15b496 chore: replace 'websocket' with 'undici' (#2253)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m5s
Build / build (push) Successful in 1m29s
Build Docker image / docker-amd64 (push) Successful in 1m3s
This is a lot more lightweight

Reviewed-on: #2253
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 04:55:19 -07:00
cfd50e7402 feat: unlockAllSimarisResearchEntries cheat (#2252)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #1869

Reviewed-on: #2252
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 04:54:54 -07:00
2421a16b2c fix: cap spy rotations at C (#2251)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
for Jade Shadows' spy mission with 4 vaults. will simply do ABCC in this case.

Closes #2250

Reviewed-on: #2251
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-23 04:54:36 -07:00
cee622d5e9 chore: add bun support (#2254)
All checks were successful
Build / build (push) Successful in 1m4s
Build Docker image / docker-arm64 (push) Successful in 1m25s
Build Docker image / docker-amd64 (push) Successful in 1m55s
It definitely has some benefits:
- It starts up insanely quickly compared to Node.
- It can run typescript directly, allow the build step to be reduced to verify/noEmit.

It does not implement NodeJS APIs perfectly, so I've had to add some special handling for Bun, but I think that's okay.

Reviewed-on: #2254
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 19:58:48 -07:00
84f081312b feat: fullyStockedVendors cheat (#2246)
All checks were successful
Build / build (push) Successful in 53s
Build Docker image / docker-amd64 (push) Successful in 1m8s
Build Docker image / docker-arm64 (push) Successful in 1m18s
Reviewed-on: #2246
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 06:55:44 -07:00
7ca7147b78 fix(docker): install node-gyp deps to fix arm64 build
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 1m19s
Build Docker image / docker-amd64 (push) Successful in 1m38s
2025-06-22 15:52:37 +02:00
558af66965 chore: verify that httpsPort has actually been bound by us (#2243)
Some checks failed
Build Docker image / docker-amd64 (push) Successful in 52s
Build / build (push) Successful in 1m17s
Build Docker image / docker-arm64 (push) Failing after 33s
I'm not the biggest fan of this, but it's a semi-regular problem and this should help affected users quickly discover it.

Reviewed-on: #2243
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 06:41:43 -07:00
d7b9fb1ab5 fix(webui): once awake stage 2 not consistently showing up in-game (#2244)
Some checks failed
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Fixes #2040

Reviewed-on: #2244
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 06:41:06 -07:00
bf12f90c88 chore: replace unlockAllMissions config with an account cheats button (#2241)
All checks were successful
Build / build (push) Successful in 55s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m11s
This way, mission completion rewards are given. This is especially import for junction rewards like quest keys (Closes #2229).

Reviewed-on: #2241
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 06:37:17 -07:00
6dd9b42f40 feat(webui): update inventory when in-game changes are made (#2239)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
A bit of a rough initial implementation, but already works pretty well.

Closes #2224

Reviewed-on: #2239
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-22 06:36:47 -07:00
3bcd5827f9 chore(webui): unset nonce when logging out (#2242)
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m17s
Reviewed-on: #2242
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 14:38:48 -07:00
d16d763977 chore: handle logout POST request for older versions (#2240)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2240
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 14:38:24 -07:00
ff8ec8dbed chore(webui): update bootstrap, add sourcemaps for it (#2238)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2238
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 14:38:04 -07:00
6cdd103c3d chore(dev): improve bulk change handling (#2234)
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker-amd64 (push) Successful in 53s
Build Docker image / docker-arm64 (push) Successful in 1m0s
Fixed abandoned build processes sometimes still triggering a start (causing double-starts) made it more robust in regards to webui changes being intermixed: making the fetch a fire-and-forget to avoid errors, and waiting for the websocket connection to be re-established to avoid the browser attempting to reload when the server may not be up for a few seconds.

Reviewed-on: #2234
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 11:33:59 -07:00
b6f79c1e5c fix: save steel path mission completion (#2233)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Build Docker image / docker-amd64 (push) Successful in 1m23s
Fixes #2228

Reviewed-on: #2233
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 11:25:42 -07:00
2bb3e2afdd chore(webui): update to Spanish translation (#2236)
All checks were successful
Build Docker image / docker-amd64 (push) Successful in 51s
Build / build (push) Successful in 1m24s
Build Docker image / docker-arm64 (push) Successful in 1m4s
Reviewed-on: #2236
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-21 10:51:57 -07:00
6a60537cd0 chore: remove unused string
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker-amd64 (push) Successful in 1m5s
Build Docker image / docker-arm64 (push) Successful in 1m2s
Fixup for 2fa6dcc7ed
2025-06-21 17:46:38 +02:00
2fa6dcc7ed feat(webui): handle auth via websocket (#2226)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-amd64 (push) Successful in 1m19s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Now when logging in and out of the game, the webui is notified so it can refresh the nonce, removing the need for constant login requests to revalidate it.

Closes #2223

Reviewed-on: #2226
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 07:26:43 -07:00
93ef9a5348 feat: autogenerate all vendors (#2225)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
I went through a few of the still-hardcoded vendors and they seemed to "just work" with autogeneration so I think it's time to say: Closes #1225 and disable the `noVendorPurchaseLimits` cheat by default.

Reviewed-on: #2225
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-21 07:26:11 -07:00
5d5d0ee560 chore(webui): update Chinese translation (#2227)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2227
Co-authored-by: CrazyZhang <crazyzhang@noreply.localhost>
Co-committed-by: CrazyZhang <crazyzhang@noreply.localhost>
2025-06-21 07:25:48 -07:00
f84cc54c97 chore: use build & start process for development as well (#2222)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-amd64 (push) Successful in 54s
Build Docker image / docker-arm64 (push) Successful in 58s
Reviewed-on: #2222
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 18:30:52 -07:00
4cb0f8b167 feat(webui): initial websocket integration to be more responsive (#2221)
All checks were successful
Build / build (push) Successful in 1m22s
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 54s
For now just handles changes to config.json but in the future might keep the inventory tabs up-to-date with in-game actions.

Reviewed-on: #2221
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 14:00:55 -07:00
eadc9c4ecb feat(webui): max rank plexus (#2219)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Closes #1740

Reviewed-on: #2219
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 14:00:39 -07:00
f41377bb81 chore: npm audit fix (#2220)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m3s
Build / build (push) Successful in 1m1s
Build Docker image / docker-amd64 (push) Successful in 1m25s
Reviewed-on: #2220
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 09:40:53 -07:00
95136e6059 feat: dynamic void fissure missions (#2214)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 59s
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 1m6s
Closes #1512

Reviewed-on: #2214
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 04:47:45 -07:00
3c64f17e34 feat: missionsCanGiveAllRelics cheat (#2217)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 58s
Build / build (push) Successful in 1m22s
Build Docker image / docker-amd64 (push) Successful in 1m15s
Closes #1060

Reviewed-on: #2217
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 04:42:11 -07:00
3619bdfdb5 feat: autogenerate mask vendor (#2216)
Some checks failed
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Reviewed-on: #2216
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 04:41:47 -07:00
97064826b2 feat: unlockAllProfitTakerStages cheat (#2215)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build / build (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2081

Reviewed-on: #2215
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-20 04:41:13 -07:00
c6c7a2966b fix: deimos vault bounty detection (#2207)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Related to #388
this should fix incorect rewards for deimos filed bounties

Reviewed-on: #2207
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-06-20 04:40:27 -07:00
ce46fa14ac chore: ignore crossPlaySetting in updateChallengeProgress
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-amd64 (push) Successful in 1m4s
Build Docker image / docker-arm64 (push) Successful in 58s
2025-06-20 05:04:24 +02:00
3186ffe164 feat: autogenerate temple & archimedean vendors (#2208)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 1m7s
Build Docker image / docker-arm64 (push) Successful in 1m18s
So the kuva offer is refreshed every week.

Reviewed-on: #2208
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 19:39:50 -07:00
e686a2d028 chore: report unknown fields in updateChallengeProgress payload (#2210)
All checks were successful
Build / build (push) Successful in 1m19s
Build Docker image / docker-arm64 (push) Successful in 58s
Build Docker image / docker-amd64 (push) Successful in 1m10s
Reviewed-on: #2210
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 16:18:49 -07:00
88d4ba6340 feat: dontSubtractVendor{Credit,Platinum,Item,Standing}Cost cheats (#2209)
Some checks failed
Build Docker image / docker-amd64 (push) Waiting to run
Build Docker image / docker-arm64 (push) Waiting to run
Build / build (push) Has been cancelled
Closes #1586

Reviewed-on: #2209
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 16:18:35 -07:00
05382beaaf feat: worldState.duviriOverride config (#2206)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker-amd64 (push) Has been cancelled
Build Docker image / docker-arm64 (push) Has been cancelled
Closes #2205

Reviewed-on: #2206
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 16:18:17 -07:00
e136c0494e chore(webui): update to Spanish translation (#2213)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker-amd64 (push) Successful in 1m12s
Build Docker image / docker-arm64 (push) Successful in 58s
Reviewed-on: #2213
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-19 13:38:00 -07:00
ad7b5fc052 fix(webui): incorrect description of topaz shields for blast (#2211)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker-arm64 (push) Successful in 59s
Build Docker image / docker-amd64 (push) Successful in 1m22s
Reviewed-on: #2211
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 11:15:27 -07:00
61a8d01f64 ci: split docker amd64 & arm64 builds
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 56s
Build Docker image / docker-amd64 (push) Successful in 59s
Build / build (push) Successful in 1m19s
2025-06-19 14:00:16 +02:00
d78ca91d6c fix(webui): properly handle renaming of pets (#2204)
All checks were successful
Build / build (push) Successful in 56s
Build Docker image / docker (push) Successful in 4m26s
Reviewed-on: #2204
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 04:23:33 -07:00
4ca4990f89 chore(docker): use file-based config & precompile code in image (#2202)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Failing after 45s
Reviewed-on: #2202
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 04:23:10 -07:00
bf40155dd4 chore: no-op nemesis mode=w (#2196)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2196
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-19 04:22:54 -07:00
2e9d3c33b6 chore(webui): update to Spanish translation (#2203)
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m12s
Reviewed-on: #2203
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-18 11:48:22 -07:00
7c8e8fe049 ci: only run on pushes to main
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 47s
Non-main branches are gonna have to open a PR anyway, so we don't need to run it twice.
2025-06-18 20:42:27 +02:00
0c4065619d chore: support config path being specified via command line argument (#2201)
All checks were successful
Build / build (push) Successful in 51s
Build Docker image / docker (push) Successful in 38s
Reviewed-on: #2201
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 11:34:12 -07:00
dabca46e88 feat(webui): automatically commit toggle changes (#2198)
All checks were successful
Build Docker image / docker (push) Successful in 44s
Build / build (push) Successful in 1m46s
Closes #2197

Reviewed-on: #2198
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 11:05:07 -07:00
7819d87bbe chore: update nodejs version in Dockerfile (#2199)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker (push) Successful in 15s
Reviewed-on: #2199
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 10:23:39 -07:00
b8b8b6a6c6 feat: railjack valence fusion (#2194)
All checks were successful
Build Docker image / docker (push) Successful in 22s
Build / build (push) Successful in 1m25s
Closes #1678

Reviewed-on: #2194
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:52:16 -07:00
9af0e06b70 feat: add worldState.circuitGameModes config option (#2192)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Closes #749

Reviewed-on: #2192
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:51:56 -07:00
f8d0c9e0cb chore: use ChallengesFixVersion that client provides (#2190)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
It seems that now we're on version 7, so let's just not hard-code it.

Reviewed-on: #2190
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:51:20 -07:00
16e80acb53 chore: add return type to createMessage (#2188)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2188
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:50:43 -07:00
6691d4e402 feat: autogenerate steel path honors vendor (#2187)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
No more "preprocessing" needed now. Some good progress for #1225, I'd say.

Reviewed-on: #2187
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:49:58 -07:00
3dcd2663d3 fix: weaken classic lich when getting all 3 mods correct (#2186)
All checks were successful
Build / build (push) Successful in 50s
Build Docker image / docker (push) Successful in 13s
Fixes #2185

Reviewed-on: #2186
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-18 05:39:10 -07:00
ffeffe2796 chore(webui): update es (#2195)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker (push) Successful in 19s
Reviewed-on: #2195
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-18 05:18:02 -07:00
a9f1368cb7 fix: add UpgradeType field to repaired railjack weapons (#2193)
All checks were successful
Build / build (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 18s
Reviewed-on: #2193
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 20:58:10 -07:00
cccf6f04a5 feat: xtra cheese rotation (#2191)
All checks were successful
Build / build (push) Successful in 54s
Build Docker image / docker (push) Successful in 14s
This has a bug where the client shows a negative time for "Xtra cheese starts in ..." until it refreshes the world state. This is because we're only providing the new activation as soon as that time/date is reached. However, this is 100% faithful to live.

Reviewed-on: #2191
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 17:32:34 -07:00
1ead581780 chore: improve typing of IFocusXp (#2182)
All checks were successful
Build Docker image / docker (push) Successful in 9s
Build / build (push) Successful in 58s
Any given focus school can be undefined in this object due to importing.

Reviewed-on: #2182
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 05:02:58 -07:00
145d21e30e fix: weaken infested lich (#2181)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2180

Reviewed-on: #2181
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 05:02:34 -07:00
6c2055a246 feat: echoes of umbra (#2177)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Having this item in the inventory unlocks the helminth option which is helpfully called "remove cyst" to install and uninstall it on a frame.

Reviewed-on: #2177
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 05:02:11 -07:00
01e490768c fix: ensure helminth shard operations don't produce a null shard (#2176)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2176
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 05:01:55 -07:00
2e8fe799d7 feat: setSuitInfection (#2174)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2172

Reviewed-on: #2174
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-17 05:01:21 -07:00
53976378bb chore(webui): update Chinese translation (#2184)
All checks were successful
Build Docker image / docker (push) Successful in 15s
Build / build (push) Successful in 1m1s
Reviewed-on: #2184
Co-authored-by: qianlishun <qianlishun@noreply.localhost>
Co-committed-by: qianlishun <qianlishun@noreply.localhost>
2025-06-17 03:28:49 -07:00
4e832d3b2c chore(webui): add login/register error messages to translation system (#2179)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker (push) Successful in 13s
Closes #2178

Reviewed-on: #2179
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-16 15:05:26 -07:00
8c1147998d fix(webui): respond with 200 for successful shard operations (#2175)
All checks were successful
Build / build (push) Successful in 45s
Build Docker image / docker (push) Successful in 15s
Reviewed-on: #2175
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-16 14:55:56 -07:00
3e99e069be feat: void storm rotation (#2171)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #1512

Reviewed-on: #2171
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-16 14:55:35 -07:00
9731004de6 feat: autogenerate railjack crew member vendor (#2170)
All checks were successful
Build / build (push) Successful in 45s
Build Docker image / docker (push) Successful in 23s
Reviewed-on: #2170
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-16 14:51:47 -07:00
b98a88b700 chore: retroactively populate vendor to hide that it was just generated (#2168)
All checks were successful
Build / build (push) Successful in 58s
Build Docker image / docker (push) Successful in 13s
For example, debt-bonds at ticker always expire in at least 2 hours so visiting him, you'd never see an offer with an expiry less than that. The solution here is simply generating offers for the last few hours.

Reviewed-on: #2168
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 18:52:10 -07:00
6023f1c113 feat: autogenerate "today's special" at mining vendors (#2167)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2167
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 18:51:42 -07:00
c6dd8bfb81 chore: improve error reporting when config.json exists with invalid json (#2166)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2166
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 18:51:32 -07:00
3053112428 chore: auto-generate palladino's vendor manifest (#2160)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m4s
A bit ugly, but having the self test forces correctness.

Reviewed-on: #2160
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 05:53:10 -07:00
f448d03880 fix: 1999 bounty chemistry (#2164)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m38s
Closes #2162

Reviewed-on: #2164
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 05:05:35 -07:00
d00fbed46f fix: treating chemstry delta as absolute value (#2163)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2163
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-15 05:05:18 -07:00
c283d61399 chore(webui): update to Spanish translation (#2165)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m24s
Reviewed-on: #2165
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-14 23:44:34 -07:00
12d09531b3 feat: add dev.keepVendorsExpired config option (#2161)
All checks were successful
Build / build (push) Successful in 44s
Build Docker image / docker (push) Successful in 10s
Reviewed-on: #2161
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-14 12:58:26 -07:00
b67ddf6df2 feat: handle classic syndicate alignments when trading in medals (#2157)
Some checks failed
Build / build (push) Successful in 41s
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2157
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-14 12:57:40 -07:00
8b27fcf459 chore(webui): add archon crystal upgrades to translation system (#2154)
All checks were successful
Build / build (push) Successful in 43s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #2154
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-13 19:57:19 -07:00
071ef528ea fix: syndicate rank up from negative levels (#2156)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 58s
For level <= 0, SacrificeLevel is the current level.

Reviewed-on: #2156
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-13 10:58:41 -07:00
71d1b6094c feat: randomise classic bounty xpAmounts (#2150)
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #2150
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-13 04:46:18 -07:00
fcc11206cc fix: multiple syndicate level ups (#2152)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Regression from 54a73ad5d7 because I forgot that levelIncrease could now be >1

Reviewed-on: #2152
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-13 04:46:04 -07:00
3c019e41b9 chore(webui): update to Spanish translation (#2151)
All checks were successful
Build / build (push) Successful in 40s
Build Docker image / docker (push) Successful in 17s
Reviewed-on: #2151
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-06-12 13:23:51 -07:00
54a73ad5d7 fix: syndicate initiation (#2149)
All checks were successful
Build Docker image / docker (push) Successful in 39s
Build / build (push) Successful in 1m20s
Was accidentially broken by 1979b20f8c

Reviewed-on: #2149
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-12 09:20:32 -07:00
62eeb313ec feat: nightwaveStandingMultiplier cheat (#2145)
All checks were successful
Build / build (push) Successful in 44s
Build Docker image / docker (push) Successful in 14s
Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: ny <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2145
Co-authored-by: nyaoouo <nyaoouo@noreply.localhost>
Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>
2025-06-12 04:54:41 -07:00
62d4b9f6cb feat(webui): boosters (#2140)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Co-authored-by: ny <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: nyaoouo <64143453+nyaoouo@users.noreply.github.com>
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2140
Co-authored-by: nyaoouo <nyaoouo@noreply.localhost>
Co-committed-by: nyaoouo <nyaoouo@noreply.localhost>
2025-06-12 04:54:17 -07:00
1d813a1b1b fix: toStoreItem not converting boosters (#2147)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 2m55s
Bug reported via #2146

Reviewed-on: #2147
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-11 03:10:10 -07:00
4823406229 chore: don't fail missionInventoryUpdate on unknown items (#2144)
All checks were successful
Build Docker image / docker (push) Successful in 1m11s
Build / build (push) Successful in 1m14s
It's possible we started a mission, deleted an item in the webui, and then finished it. The mission completion is still valid, we just can't update that item.

Reviewed-on: #2144
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-11 02:32:51 -07:00
bdc41de8bb fix: set incubated pet as in stasis when one is already active (#2143)
Some checks failed
Build Docker image / docker (push) Successful in 34s
Build / build (push) Has been cancelled
Previously was kept in incubating state which is obviously wrong

Reviewed-on: #2143
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-11 02:31:14 -07:00
60236a1154 chore: update PE+ (#2142)
All checks were successful
Build Docker image / docker (push) Successful in 1m13s
Build / build (push) Successful in 2m33s
Closes #2141

Reviewed-on: #2142
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-10 09:48:13 -07:00
1979b20f8c fix: handle multiple syndicate title increases at once (#2139)
All checks were successful
Build / build (push) Successful in 57s
Build Docker image / docker (push) Successful in 1m25s
Only really possible with nightwave afaik. Bug reported via #2138.

Reviewed-on: #2139
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-10 05:49:43 -07:00
c736310ff3 feat: send clan search message when reaching MR 2 (#2136)
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 2m25s
Closes #1960

Reviewed-on: #2136
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-09 11:03:56 -07:00
2b555a6456 chore(webui): update Chinese translation (#2137)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 2m27s
Reviewed-on: #2137
Co-authored-by: bishan178 <bishan178@noreply.localhost>
Co-committed-by: bishan178 <bishan178@noreply.localhost>
2025-06-09 08:20:34 -07:00
870c964854 feat: add eidolonOverride & vallisOverride to replace lockTime (#2135)
Some checks failed
Build Docker image / docker (push) Failing after 27s
Build / build (push) Successful in 2m5s
I think for now it's best to keep the client time somewhat in sync with the server/database time to avoid various issues.

Reviewed-on: #2135
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-09 06:54:58 -07:00
4535b193e0 chore: handle nightwaveOverride having an invalid value (#2133)
All checks were successful
Build / build (push) Successful in 51s
Build Docker image / docker (push) Successful in 1m16s
Reviewed-on: #2133
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-09 03:37:42 -07:00
943574bf3a chore(webui): update Chinese translation (#2134)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 2m4s
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Reviewed-on: #2134
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-06-08 11:14:28 -07:00
f9a4d48b4d chore: base all cycles on locked time if used (#2128)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m53s
Reviewed-on: #2128
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 16:46:45 -07:00
135b1e54fe feat: classic lich guess history (#2129)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2123

Reviewed-on: #2129
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 16:46:18 -07:00
b7c47b91ff chore: improve getItemCategoryByUniqueName (#2130)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
unused function, but might as well make it at least half decent

Reviewed-on: #2130
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 16:46:00 -07:00
9def5c265e feat: kubrow & kavat incubation (#2131)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #377

Reviewed-on: #2131
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 16:45:50 -07:00
65387ccdea feat(webui): disambiguate gear and resource with the same name for add items (#2127)
All checks were successful
Build / build (push) Successful in 45s
Build Docker image / docker (push) Successful in 1m11s
Closes #2097

Reviewed-on: #2127
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:17:27 -07:00
4118528603 chore: some minor improvements to nemesis mode=s (#2126)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2126
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:17:05 -07:00
8ffbb308c5 fix: oull being considered an incorrect guess (#2125)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2121

Reviewed-on: #2125
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:16:50 -07:00
2e649cabf6 chore: handle purchasing decree from acrithis (#2124)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2112

Reviewed-on: #2124
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:16:33 -07:00
5c5296d565 feat: add nightwaveOverride to config (#2120)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2120
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:16:19 -07:00
8f5f2fc206 chore: handle numbers in config administratorNames (#2117)
Some checks failed
Build Docker image / docker (push) Successful in 35s
Build / build (push) Has been cancelled
Reviewed-on: #2117
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-07 02:15:35 -07:00
0997f9567f fix: cap nemesis rank (#2122)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m50s
Re #2121

Reviewed-on: #2122
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-06 16:59:13 -07:00
be02435661 chore: handle addItem of /Lotus/Types/Items/Emotes/** based on path (#2116)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker (push) Successful in 1m6s
Closes #2114

Reviewed-on: #2116
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-06 16:29:25 -07:00
20c4092dfe fix: swapped operands (#2119)
All checks were successful
Build / build (push) Successful in 45s
Build Docker image / docker (push) Successful in 41s
Closes #2118

Reviewed-on: #2119
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-06 13:13:36 -07:00
01492f4f16 fix: swapped operands (#2115)
All checks were successful
Build Docker image / docker (push) Successful in 1m15s
Build / build (push) Successful in 1m20s
Closes #2113

Reviewed-on: #2115
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-06 08:59:22 -07:00
d739945a1d fix: check that syndicateMissionId is not undefined (#2110)
All checks were successful
Build Docker image / docker (push) Successful in 41s
Build / build (push) Successful in 2m19s
Closes #2111

Reviewed-on: #2110
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-03 10:40:28 -07:00
d43e39d7b5 fix(webui): error when an unknown suit is max rank (#2109)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker (push) Successful in 1m7s
Reviewed-on: #2109
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-02 01:44:10 -07:00
b0499a62aa chore: use 'git checkout -f' instead of 'git reset --hard' to avoid loss
All checks were successful
Build / build (push) Successful in 49s
Build Docker image / docker (push) Successful in 1m6s
2025-06-01 12:16:16 +02:00
8f02bd1509 fix: avoid addition by undefined when adding skill points (#2108)
All checks were successful
Build / build (push) Successful in 48s
Build Docker image / docker (push) Successful in 1m8s
Reviewed-on: #2108
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-06-01 03:12:14 -07:00
32f4c5105a feat: add update and start script for linux (#2107)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2107
Co-authored-by: Sainan <sainan@calamity.gg>
Co-committed-by: Sainan <sainan@calamity.gg>
2025-06-01 03:12:07 -07:00
28da982c80 feat: renamePet (#2106)
All checks were successful
Build Docker image / docker (push) Successful in 43s
Build / build (push) Successful in 2m19s
Reviewed-on: #2106
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-30 11:42:45 -07:00
ae1850d6cd chore: update PE+ (#2105)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 48s
Reviewed-on: #2105
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-27 03:58:12 -07:00
b90bdd2783 chore: update french translation (#2104)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker (push) Successful in 1m6s
Reviewed-on: #2104
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-05-26 01:46:19 -07:00
90f2b90398 chore: switch to official tsgo preview package (#2103)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m54s
Reviewed-on: #2103
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-24 01:48:50 -07:00
84916bf64e fix: resolve random relic booster pack for login reward (#2101)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2101
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-24 01:48:41 -07:00
d41e4f7f56 chore: restart web server when ports in config have changed (#2100)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #2100
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-24 01:48:25 -07:00
082ae536f7 fix: more robust address detection (#2099)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Previously this had a few issues when using non-standard ports for HTTP(S)

Reviewed-on: #2099
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-24 01:48:10 -07:00
ba6cd47432 feat: initial support for multiple nightwave seasons (#2096)
All checks were successful
Build Docker image / docker (push) Successful in 1m2s
Build / build (push) Successful in 54s
Reviewed-on: #2096
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-23 06:12:54 -07:00
92d34fd69e chore: update shard removal costs for 38.6.0 (#2094)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 1m44s
Reviewed-on: #2094
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-21 22:16:44 -07:00
09b9683fa1 chore(webui): update to Spanish translation (#2095)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2095
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-05-21 22:16:00 -07:00
a47eccdec8 fix: provide response for FocusOperation.ActivateWay (#2092)
All checks were successful
Build / build (push) Successful in 52s
Build Docker image / docker (push) Successful in 47s
Closes #2091

Reviewed-on: #2092
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-21 04:51:36 -07:00
ffd410537e feat: syndicateMissionsRepeatable cheat (#2090)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 52s
Closes #2050

Reviewed-on: #2090
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-20 02:48:45 -07:00
79eab71aaf chore(webui): update to Spanish translation (#2089)
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 59s
Reviewed-on: #2089
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-05-18 19:06:35 -07:00
21164554a3 chore: some fixes to enter guild dojo on U15 (#2088)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2088
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-18 19:06:24 -07:00
45c0da6ed8 chore: fix some questionable calls to model.findById
All checks were successful
Build / build (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 2m33s
2025-05-18 12:55:51 +02:00
727f6837ba feat: instantFinishRivenChallenge cheat (#2087)
All checks were successful
Build / build (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 37s
Closes #1952

Reviewed-on: #2087
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-18 01:33:16 -07:00
77a3b64f49 feat: support all nemesis manifests down to 26.0.0 (#2086)
All checks were successful
Build Docker image / docker (push) Successful in 1m3s
Build / build (push) Successful in 1m0s
Also fixes the ephemera chance for kuva lich manifest v2 and up

Reviewed-on: #2086
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-17 23:29:23 -07:00
ce59086f7d chore: handle vendor per-item count limits (#2084)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2084
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-17 23:29:16 -07:00
9b0989f1df chore: add self-test for serverside vendors (#2083)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2083
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-17 23:29:09 -07:00
b01376f703 chore: replace instances of find(x => x = ...) with indexOf(...)
All checks were successful
Build Docker image / docker (push) Successful in 1m16s
Build / build (push) Successful in 1m50s
2025-05-17 09:17:03 +02:00
870ff2dd2c feat: adjust server-side vendor prices according to syndicate standings (#2076)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m46s
For buying crew members from ticker

Reviewed-on: #2076
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-16 20:01:20 -07:00
1ac71a9b28 chore: auto-detect cycle duration for auto-generated vendors (#2077)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This also fixes the "time left to trade" showing incorrectly for fishmonger "daily special" vendors

Reviewed-on: #2077
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-16 20:00:50 -07:00
a622787500 fix: ensure guild advertisments vendor always has its 5 offers (#2078)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Because the per-bin limits are not respected right now, it was possible that some clan tiers simply don't have an offer some weeks.

Reviewed-on: #2078
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-16 20:00:44 -07:00
52c8802d57 feat: classic lich vanquish inbox mesage (#2074)
All checks were successful
Build Docker image / docker (push) Successful in 1m15s
Build / build (push) Successful in 1m41s
Closes #1897

Reviewed-on: #2074
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-14 21:14:04 -07:00
daf721f7cd chore: don't set a default avatar image type in inventory (#2075)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This seems to be somewhat of an issue for older versions, plus it's not really accurate anyway.

Reviewed-on: #2075
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-14 21:13:49 -07:00
f724073d93 feat: classic lich regalia rewards (#2073)
All checks were successful
Build Docker image / docker (push) Successful in 56s
Build / build (push) Successful in 1m47s
Closes #2068

Reviewed-on: #2073
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 22:28:59 -07:00
8fb676c906 feat: classic lich ephemera reward (#2067)
All checks were successful
Build Docker image / docker (push) Successful in 1m16s
Build / build (push) Successful in 1m46s
Reviewed-on: #2067
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 20:41:49 -07:00
2ce5cc4562 fix: handle converted lich as crew member (#2071)
All checks were successful
Build Docker image / docker (push) Successful in 1m0s
Build / build (push) Successful in 1m46s
saveLoadout was missing bigint support to properly store NemesisFingerprint, and crewMembers was missing handling for liches being set on-call (the only option available for them)

Reviewed-on: #2071
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 20:39:03 -07:00
099f12a197 feat: bounty chemistry bonus (#2070)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #388

Reviewed-on: #2070
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 20:38:52 -07:00
bfe2e93c76 feat: resource reward along with duviri decree (#2066)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #561

Reviewed-on: #2066
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 20:38:37 -07:00
8b97bb4b0a feat: classic lich hints (#2064)
Some checks failed
Build Docker image / docker (push) Successful in 1m18s
Build / build (push) Has been cancelled
Closes #1923

Reviewed-on: #2064
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 20:37:30 -07:00
85a45a04ea fix: ensure that only one CrewMember is ever on call (#2069)
All checks were successful
Build Docker image / docker (push) Successful in 1m16s
Build / build (push) Successful in 57s
Reviewed-on: #2069
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-13 08:25:09 -07:00
2a40449604 chore: add TNemesisFaction
All checks were successful
Build Docker image / docker (push) Successful in 1m15s
Build / build (push) Successful in 1m17s
2025-05-13 12:21:20 +02:00
382f8c55ce chore: update Docker stuff (#2065)
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m47s
Reviewed-on: #2065
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-13 01:47:09 -07:00
77513190e4 fix: incorrect droptable name for zariman tier c (#2062)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 1m45s
Fixes #2061

Reviewed-on: #2062
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-12 19:49:30 -07:00
5e8ce934c9 chore: clarify which category has a negative count
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m35s
2025-05-12 06:59:20 +02:00
6de81c2b41 chore: handle LasrianTankSteelPathDropTable for DROP_MOD (#2057)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m46s
Closes #2056

Reviewed-on: #2057
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-11 21:53:16 -07:00
4c5ac4f03a chore(webui): update German translation (#2059)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m39s
Reviewed-on: #2059
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-11 02:16:23 -07:00
d6f4c1a035 chore(webui): update to Spanish translation (#2058)
All checks were successful
Build Docker image / docker (push) Successful in 1m14s
Build / build (push) Successful in 1m2s
Reviewed-on: #2058
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-05-11 00:02:57 -07:00
c58c70c4ce chore: update json-with-bigint minimum required version
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 1m44s
2025-05-11 08:29:13 +02:00
3e1e19d6c5 feat: dontSubtractVoidTraces cheat (#2055)
All checks were successful
Build Docker image / docker (push) Successful in 50s
Build / build (push) Successful in 1m40s
Closes #2051

Reviewed-on: #2055
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-10 19:12:42 -07:00
2521733e55 fix: exclude open worlds from archon hunt (#2054)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2048

Reviewed-on: #2054
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-10 19:12:34 -07:00
d5297d3547 fix(webui): sidebar toggler not showing up on small screens (#2053)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2049

Reviewed-on: #2053
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-10 19:12:25 -07:00
5bc39aac8a fix: login failure on U22.8 (#2044)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
2018.01.04.13.12

Reviewed-on: #2044
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-10 19:12:17 -07:00
b201508fa1 chore(webui): update German translation (#2046)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m43s
Reviewed-on: #2046
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-10 03:44:55 -07:00
5f9ae2aef6 chore(webui): update to Spanish translation (#2045)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2045
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-05-10 03:44:42 -07:00
b451c73598 chore: handle mods picked up in mission on U19 (#2042)
All checks were successful
Build Docker image / docker (push) Successful in 1m10s
Build / build (push) Successful in 1m36s
Reviewed-on: #2042
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:38:42 -07:00
9d4bce852e feat: the circuit (#2039)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1965

Closes #2041

Reviewed-on: #2039
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:38:13 -07:00
c83e732b88 feat: gifting bonus (#2036)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2014

Reviewed-on: #2036
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:37:59 -07:00
3d13ec311e feat: claimingBlueprintRefundsIngredients cheat (#2034)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1922

Reviewed-on: #2034
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:37:28 -07:00
31043b55de feat: batch remove friends (#2032)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1947

Reviewed-on: #2032
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:37:09 -07:00
ab32728c47 fix: don't give assassination blueprint reward for archon hunt (#2031)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2025

Reviewed-on: #2031
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:36:49 -07:00
3fc2dccf81 chore: use 64-bit RNG everywhere (#2030)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2026

Reviewed-on: #2030
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:36:22 -07:00
1084932afb fix: only set IsNew flag if the ItemType is new (#2028)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2028
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 21:35:58 -07:00
f9b3fecc10 chore: some initial handling of legacy oid format (#2033)
All checks were successful
Build Docker image / docker (push) Successful in 1m13s
Build / build (push) Successful in 1m54s
This at least allows mission inventory update to succeed on U19.5 and below.

Reviewed-on: #2033
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-09 00:20:54 -07:00
7a51fab5d3 chore: address some questionable calls to DocumentArray.id
All checks were successful
Build Docker image / docker (push) Successful in 1m13s
Build / build (push) Successful in 1m47s
2025-05-09 07:18:25 +02:00
0e255067a8 chore: increase seed ranges to be more accurate (#2029)
All checks were successful
Build Docker image / docker (push) Successful in 1m18s
Build / build (push) Successful in 1m2s
Reviewed-on: #2029
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 18:00:22 -07:00
8d788d38a5 chore: remove query for ship in getShipController (#2022)
All checks were successful
Build Docker image / docker (push) Successful in 48s
Build / build (push) Successful in 1m48s
as far as I can tell, the ShipAttachments and SkinFlavourItem are just here due to the fact that the type from ShipExterior is being reused, but they aren't actually needed because the interior can't have attachments or flavour items - and if it could, they would be different from the exterior anyway.

Reviewed-on: #2022
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 17:37:00 -07:00
bdd5ade2eb feat: kuva siphon mission rewards (#2023)
All checks were successful
Build Docker image / docker (push) Successful in 1m12s
Build / build (push) Successful in 51s
Closes #1955

Reviewed-on: #2023
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:22:27 -07:00
3ff7e4264c chore: npm update (#2021)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #2021
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:22:06 -07:00
29b54b52dd feat: place conclave console decoration by default for new accounts (#2019)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1908

Reviewed-on: #2019
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:21:36 -07:00
dab8c6c8ba feat: static rewards for completion of arbitration mission (#2017)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1954

Reviewed-on: #2017
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:21:19 -07:00
bdb4c8fd7c fear: add InGameMarket to worldState (#2015)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
To roughly match the market as seen on live, but excluding the "premium bundles" section.

Closes #1906

Reviewed-on: #2015
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:20:53 -07:00
3bcac1459b feat: track LastLogin to provide it for friends & clan members (#2013)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2013
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 08:20:45 -07:00
b987e01811 fix: ships having wrong format in inventory response (#2018)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 1m40s
Reviewed-on: #2018
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 04:51:03 -07:00
d831732513 chore: update PE+ (#2020)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m41s
Reviewed-on: #2020
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-08 04:32:32 -07:00
42c63ecbe8 chore(webui): use name for zanuka from datalist instead of webui loc (#2012)
All checks were successful
Build Docker image / docker (push) Successful in 44s
Build / build (push) Successful in 1m41s
Reviewed-on: #2012
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-05-07 20:15:19 -07:00
0319031e13 chore(webui): Update Russian translation (#2010)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #2010
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-05-07 20:15:09 -07:00
1f3bb88910 feat: bounty bonus standing (#2009)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2007

Reviewed-on: #2009
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-05-07 20:15:00 -07:00
6171b36479 fix: use correct day when providing pre-rollover syndicate missions (#2006)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2005

Reviewed-on: #2006
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-07 20:14:34 -07:00
c56507e12d feat: friends (#2004)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1288

Reviewed-on: #2004
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-07 20:14:21 -07:00
e545ecf767 fix: restrict sortie mission types based on what the tileset supports (#2003)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #2000

Reviewed-on: #2003
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-07 20:14:05 -07:00
58549c1488 fix: exclude railjack missions from archon hunt (#2002)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #2001

Reviewed-on: #2002
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-07 20:13:45 -07:00
bb606f3a95 fix: get bounty info by id to handle rollover (#1998)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 1m39s
Closes #1988

Reviewed-on: #1998
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 19:05:23 -07:00
4b12fe12cb feat: handle mechsuits in sellController (#1996)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1995

Reviewed-on: #1996
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 19:04:53 -07:00
4f28688837 feat: add CompletedVorsPrize to getAccountInfo response (#1994)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1941

Reviewed-on: #1994
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 19:04:39 -07:00
203b3e20d9 fix: refuse to give starting gear again (#1993)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1993
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 19:04:22 -07:00
005690daa4 fix: handle "skip prologue" to visit orbiter in U14 (#1999)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 53s
Reviewed-on: #1999
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 07:37:30 -07:00
5fefd189af fix: login failure on U15 (#1997)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m39s
Reviewed-on: #1997
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 06:05:12 -07:00
f6cbc02c47 fix: ignore client providing not-an-id in recipe ids array (#1990)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m44s
Closes #1989

Reviewed-on: #1990
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 02:29:23 -07:00
da6d75c748 fix: don't give sortie assassination rewards if mission type differs (#1992)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1987

Reviewed-on: #1992
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 02:29:11 -07:00
460deed3ed fix: login failure on U16 (#1991)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1991
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-06 02:29:03 -07:00
4e57bcd1ae fix: login failure on U17 (#1986)
All checks were successful
Build Docker image / docker (push) Successful in 1m16s
Build / build (push) Successful in 1m0s
Reviewed-on: #1986
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-05 18:09:03 -07:00
e2fe406017 fix: always use rotation A for Profit-Taker bounty rewards (#1981)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 1m21s
Closes #1964

Reviewed-on: #1981
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-05 18:03:53 -07:00
c53dc2fd02 fix: remove non-existent sortie modifiers (#1980)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1976

Reviewed-on: #1980
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-05 18:03:44 -07:00
cfa3586f64 fix: don't provide syndicate missions in advance (#1979)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1975

Reviewed-on: #1979
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-05 18:03:36 -07:00
238af294fe fix: login failure on U18 (#1983)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m40s
Reviewed-on: #1983
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-05 04:57:44 -07:00
1914fd8f10 fix: venus bounties having wrong reward tables (#1978)
All checks were successful
Build Docker image / docker (push) Successful in 54s
Build / build (push) Successful in 1m30s
Due to missing / on six of the reward tables.

Fixes #1977.

Reviewed-on: #1978
Co-authored-by: VampireKitten <dynamightkobold@gmail.com>
Co-committed-by: VampireKitten <dynamightkobold@gmail.com>
2025-05-04 17:31:36 -07:00
ec4af075b5 fix: login failure on U21 (#1974)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1974
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-04 17:30:48 -07:00
355a70d366 fix: login failure on u23 and below (#1972)
All checks were successful
Build Docker image / docker (push) Successful in 45s
Build / build (push) Successful in 1m39s
Reviewed-on: #1972
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:48:01 -07:00
cad82cf7de fix: refuse to add horse if one is already owned (#1973)
All checks were successful
Build Docker image / docker (push) Successful in 1m9s
Build / build (push) Successful in 1m20s
Reviewed-on: #1973
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:24:47 -07:00
ff3a9b382c chore: handle profile viewing data request from old versions (#1970)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #1970
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:24:40 -07:00
18fbd51efb fix: omit nightwave challenges for versions before 38.0.8 (#1969)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1969
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:24:31 -07:00
f7b4b4f089 fix: dojo time fields for old versions (#1968)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Tested this in U27 & U38.5

Reviewed-on: #1968
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:24:20 -07:00
83743831c9 fix: don't divide by 0 (#1966)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1964

Reviewed-on: #1966
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-03 17:24:08 -07:00
8520650018 fix: don't push SORTIE_MODIFIER_HAZARD_RADIATION unconditionally
All checks were successful
Build Docker image / docker (push) Successful in 1m0s
Build / build (push) Successful in 1m1s
2025-05-03 16:06:33 +02:00
b958c108f9 chore: fix typo
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m38s
2025-05-03 15:30:32 +02:00
8ae5fcfad0 fix: login failure on u25 & u26 (#1967)
All checks were successful
Build Docker image / docker (push) Successful in 41s
Build / build (push) Successful in 1m22s
also updated the setGuildMotd response for the old UI before LongMOTD

Reviewed-on: #1967
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-02 22:14:44 -07:00
468efed71c fix: handle tileset-specific sortie modifiers (#1958)
All checks were successful
Build Docker image / docker (push) Successful in 1m10s
Build / build (push) Successful in 56s
Closes #1956

Reviewed-on: #1958
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-02 15:07:00 -07:00
4926b2f2be fix: only refresh rewardSeed at EOM (#1957)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1953

Reviewed-on: #1957
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-02 15:06:46 -07:00
562ddd513f chore: update docker stuff (#1961)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Some Docker stuff I updated ~~but keeping WIP for now, until I know whether this breaks or not, if someone could test it for me. Will close the PR if it doesn't, cuz if I cannot even run it on my machine (Docker only crashing on my end in general), then its pointless for me to mess with it.~~

Reviewed-on: #1961
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-05-02 15:06:36 -07:00
35d5c01203 fix: login failure on u29 heart of deimos and below (#1959)
All checks were successful
Build Docker image / docker (push) Successful in 1m3s
Build / build (push) Successful in 1m18s
Reviewed-on: #1959
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-02 04:03:42 -07:00
8f8bc5b364 fix: don't set G3/Zanuka death marks by default (#1950)
All checks were successful
Build Docker image / docker (push) Successful in 38s
Build / build (push) Successful in 1m32s
These should only be set to true after completing an invasion for the enemy faction. Re #1097

Reviewed-on: #1950
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:55:01 -07:00
a8227ce54c feat: cure vasca virus (#1949)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1946

Reviewed-on: #1949
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:54:50 -07:00
ec9dc2aa5f fix: multiply standing cost by purchase quantity (#1948)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1945

Reviewed-on: #1948
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:54:27 -07:00
f7906c91e3 fix: ignore purchaseQuantity for webui add items (#1944)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1942

Reviewed-on: #1944
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:54:04 -07:00
159598979d fix: don't duplicate level key credits reward (#1940)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1939

Reviewed-on: #1940
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:53:40 -07:00
4983417201 chore: update certificate (#1937)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This is good for *.faketls.com until March 2026.

Reviewed-on: #1937
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:53:28 -07:00
9b652f5c3c fix: spoof nemesis to avoid script errors in older versions (#1936)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1936
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:53:10 -07:00
19b04533df fix: omit void fissures for U35.1 (#1935)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This version also has a script error even tho it should know most of the new deimos nodes...

Reviewed-on: #1935
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:52:43 -07:00
cddd4bdf5c fix: filter sortie armor/shields modifier based on mission faction (#1934)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m35s
Closes #1931

Reviewed-on: #1934
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 13:51:31 -07:00
12b6e5d16e fix: login failure on U31 the new war & U30.5 sisters of parvos (#1943)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m37s
Reviewed-on: #1943
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-05-01 05:23:25 -07:00
8eefd67d79 chore: fix typo
All checks were successful
Build Docker image / docker (push) Successful in 1m8s
Build / build (push) Successful in 1m34s
2025-05-01 13:09:45 +02:00
c4b2248df5 fix: login failure on U31.5 angels of the zariman (#1933)
All checks were successful
Build Docker image / docker (push) Successful in 47s
Build / build (push) Successful in 1m40s
Reviewed-on: #1933
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 23:50:02 -07:00
2c3043f40e fix: login failure on U32 veilbreaker (#1932)
All checks were successful
Build Docker image / docker (push) Successful in 51s
Build / build (push) Successful in 1m35s
Reviewed-on: #1932
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 15:45:42 -07:00
7d02906656 fix: better handling of assassination missions in sorties (#1930)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m36s
Closes #1918

Reviewed-on: #1930
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:28:34 -07:00
ed54e00a03 fix: compatibility with echoes of duviri (#1928)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1928
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:28:24 -07:00
3d6c880c96 feat: handle client setting InfestationDate on equipment (#1927)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1919

Reviewed-on: #1927
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:28:16 -07:00
660768b53b fix: handle DuviriInfo being absent from inventory (#1926)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1917

Reviewed-on: #1926
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:28:01 -07:00
3de68e51d5 fix: properly set Harvestable & DeathSquadable fields (#1925)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1916

Reviewed-on: #1925
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:27:47 -07:00
c06abded11 fix: always multiply acquired gear quantity by purchaseQuantity (#1924)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1915

Reviewed-on: #1924
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-30 13:27:36 -07:00
9468768947 fix: weapon seed's low dword being sign extended (#1914)
All checks were successful
Build / build (push) Successful in 46s
Build Docker image / docker (push) Successful in 53s
JavaScript's semantics here are incredibly stupid, but basically if the initial DWORD's high WORD's MSB is true, the number would become negative after the shift left by 16. Then when ORing it with the highDword, the initial DWORD would be sign-extended to a QWORD, meaning the high DWORD would become all 1s, basically cancelling out the entire OR operation.

Reviewed-on: #1914
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-29 12:28:01 -07:00
0af7f41201 fix: unset LibraryPersonalTarget after completing it (#1913)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #1913
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-29 12:27:47 -07:00
de1e2a25f2 fix(webui): ensure that all requests using authz revalidate it (#1911)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Closes #1907

Reviewed-on: #1911
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-29 12:27:38 -07:00
1cf7b41d3f chore: note that random element functions could return undefined (#1910)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
We should be explicit about the fact that we expect the arrays to not be empty.

Reviewed-on: #1910
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-29 12:27:25 -07:00
ab9cc685eb fix: exclude capture as a mission type for sorties (#1909)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m39s
Closes #1865

Reviewed-on: #1909
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-29 02:05:18 -07:00
743b784754 chore(webui): use plural form of "Moa", just to stay consistent with the other categories (#1905)
All checks were successful
Build Docker image / docker (push) Successful in 32s
Build / build (push) Successful in 1m31s
Reviewed-on: #1905
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-28 14:01:35 -07:00
5df533a7fb chore: auto-generate "daily special" for fish vendors (#1902)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Trying to go a bit more towards an "auto-generate by default" approach, with manual overrides where needed.

Reviewed-on: #1902
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:01:17 -07:00
9417aa3c84 fix: only consider market-listed blueprints for login reward (#1900)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1882

Reviewed-on: #1900
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:01:02 -07:00
a1872e2b07 chore: simplify getInnateDamageTag (#1899)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1899
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:00:51 -07:00
9042e85355 feat: infested lich rewards (#1898)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1884

Reviewed-on: #1898
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:00:38 -07:00
66ee550ccd feat: refresh duviri seed when mood changes (#1895)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1887

Reviewed-on: #1895
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:00:22 -07:00
7a295a86ec fix: handle boosters in store item utilities (#1894)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
e.g. `/Lotus/Types/StoreItems/Boosters/AffinityBoosterStoreItem`

Reviewed-on: #1894
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 14:00:06 -07:00
88d00eaaa1 feat: weaken nemesis (#1893)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1885

Reviewed-on: #1893
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 13:59:54 -07:00
1e8f2fc766 chore: comment out mixed fields in inventory (#1892)
Some checks failed
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Has been cancelled
If they are needed in the future, they schould be properly schema'd.

Reviewed-on: #1892
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-28 13:58:39 -07:00
0d842ade90 chore(webui): update German translation (#1904)
All checks were successful
Build Docker image / docker (push) Successful in 1m6s
Build / build (push) Successful in 48s
Reviewed-on: #1904
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-28 05:14:25 -07:00
4e3a2e17ee chore: removing unnecessary entries in allScans.json (#1903)
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m29s
Reviewed-on: #1903
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-28 03:36:39 -07:00
61864b2be1 chore(webui): update to Spanish translation (#1901)
All checks were successful
Build Docker image / docker (push) Successful in 48s
Build / build (push) Successful in 1m35s
Reviewed-on: #1901
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-27 19:39:49 -07:00
45748fa8be fix: import failing for LotusCustomization from live (#1891)
All checks were successful
Build Docker image / docker (push) Successful in 51s
Build / build (push) Successful in 1m32s
Reviewed-on: #1891
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-27 14:20:52 -07:00
afec59e8a6 feat: skipClanKeyCrafting cheat (#1883)
All checks were successful
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Successful in 51s
Closes #1843

Reviewed-on: #1883
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-27 12:38:55 -07:00
ee1a49f5f2 feat: handle NemesisKillConvert at missionInventoryUpdate (#1880)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1848

Reviewed-on: #1880
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-27 12:38:48 -07:00
9e94083875 feat: handle KubrowPetEggs in missionInventoryUpdate (#1876)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m35s
Closes #1866

Reviewed-on: #1876
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-27 12:36:00 -07:00
db0e0d80dd chore: remove PropertyTextHash from auto-generated vendors
All checks were successful
Build / build (push) Successful in 55s
Build Docker image / docker (push) Successful in 35s
2025-04-27 07:20:04 +02:00
5cda2e2d08 chore: improve unlockAllScans's handling of existing scans (#1875)
All checks were successful
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Successful in 1m23s
Reviewed-on: #1875
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 19:28:03 -07:00
e23d865044 fix: use a list of "known good" syndicate missions (#1874)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1870

Reviewed-on: #1874
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 19:27:50 -07:00
c7658b5b20 chore: use parallelForeach in removePigmentsFromGuildMembers
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m34s
2025-04-27 04:22:18 +02:00
9993500eca chore(webui): update to Spanish translation (#1881)
All checks were successful
Build Docker image / docker (push) Successful in 1m7s
Build / build (push) Successful in 1m4s
Reviewed-on: #1881
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-26 18:53:46 -07:00
267357871b feat: handle HenchmenKilled & HintProgress incrementing (#1877)
All checks were successful
Build Docker image / docker (push) Successful in 1m4s
Build / build (push) Successful in 52s
Closes #1807

Reviewed-on: #1877
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 15:25:47 -07:00
cf5ed0442d fix: don't assume rewardInfo.node is in ExportRegions (#1879)
All checks were successful
Build Docker image / docker (push) Successful in 38s
Build / build (push) Successful in 1m30s
Fixes #1878

Reviewed-on: #1879
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 14:23:00 -07:00
de36e2ee8d fix: close connection for dating saveDialogue request (#1873)
All checks were successful
Build Docker image / docker (push) Successful in 41s
Build / build (push) Successful in 1m31s
Missing fix for #1852

Reviewed-on: #1873
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 12:14:42 -07:00
ca1b6c31b6 fix: give rewards for completing a capture mission (#1872)
All checks were successful
Build / build (push) Successful in 43s
Build Docker image / docker (push) Successful in 51s
Reviewed-on: #1872
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:57:03 -07:00
d66c474bfc fix: some issues with sortie generation (#1871)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Now using sortieTilesets as a source of truth for allowed mission nodes as it's based only on real sorties, also added disallowed mission types for FC_OROKIN (Corrupted Vor) that otherwise cause a script error.

Closes #1865

Reviewed-on: #1871
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:56:41 -07:00
781f01520f feat: save lotus customization (#1864)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #768

Reviewed-on: #1864
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:56:22 -07:00
ac37702468 feat(webui): add missing max rank mods (#1863)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #916

Reviewed-on: #1863
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:56:16 -07:00
75c011e3cb fix: don't set IsNew flag for starting gear (#1859)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1859
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:56:06 -07:00
4d4f885c8e feat: dontSubtractConsumables cheat (#1857)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1838

Reviewed-on: #1857
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:55:45 -07:00
66d1a65e63 fix: handle credits & platinum prices from vendors (#1856)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1837

Reviewed-on: #1856
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:55:03 -07:00
48eefd8db1 fix: don't give droptable rewards for non-assassination sortie missions (#1855)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1835

Reviewed-on: #1855
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:54:54 -07:00
4a6a5ea9cc feat: handle WeaponSkins picked up in missions (#1854)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
For sigils.

Closes #1839

Reviewed-on: #1854
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:54:38 -07:00
95c0ad7892 fix: handle saveDialogue request without Data or Gift (#1853)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Needed to just set booleans when starting dating.

Closes #1852

Reviewed-on: #1853
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:54:25 -07:00
a90d3a5156 feat: gardening (#1849)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1849
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:54:06 -07:00
d0c9409a2d fix: exclude pvp variants from daily special parts (#1846)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1836

Reviewed-on: #1846
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 11:53:41 -07:00
bbde7b2141 chore: don't change remote/origin url
All checks were successful
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Successful in 55s
2025-04-26 08:12:54 +02:00
5271123090 chore(webui): update to Spanish translation (#1862)
All checks were successful
Build Docker image / docker (push) Successful in 42s
Build / build (push) Successful in 1m22s
Reviewed-on: #1862
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-25 22:13:28 -07:00
f3e56480e5 fix(webui): error for inventory without EvolutionProgress (#1861)
All checks were successful
Build Docker image / docker (push) Successful in 1m4s
Build / build (push) Successful in 1m25s
Reviewed-on: #1861
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 21:26:58 -07:00
6f46ace40c fix(webui): revalidate authz for rename & delete account actions (#1860)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1860
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 21:26:52 -07:00
883426e429 fix: align guild advertisment vendor rotation to monday 0 UTC (#1858)
Some checks failed
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Has been cancelled
Reviewed-on: #1858
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 21:26:16 -07:00
13432bf034 fix: future-proof oid string generation (#1847)
All checks were successful
Build Docker image / docker (push) Successful in 1m4s
Build / build (push) Successful in 48s
This ensures they are still 24 bytes long even past the year 2106. :^)

Reviewed-on: #1847
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 18:55:09 -07:00
a1267e5f64 chore: add temple vendor manifest (#1851)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1850

Reviewed-on: #1851
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 18:54:52 -07:00
2058207b6a fix: nemesis fp from client could be of type number
All checks were successful
Build Docker image / docker (push) Successful in 51s
Build / build (push) Successful in 1m34s
2025-04-26 03:15:58 +02:00
c7c416c100 chore: simplify arguments defaulted to undefined
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m27s
2025-04-26 00:40:57 +02:00
90e97d7888 chore: auto-generate guild advertisment vendor (#1845)
All checks were successful
Build Docker image / docker (push) Successful in 50s
Build / build (push) Successful in 1m33s
With this, preprocessing is simplified to just refreshing expiry dates. No real change to auto-generation logic.

Reviewed-on: #1845
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 15:12:45 -07:00
3f6734ac1c feat(webui): EvolutionProgress support (#1818)
All checks were successful
Build Docker image / docker (push) Successful in 47s
Build / build (push) Successful in 1m32s
Closes #1815

Reviewed-on: #1818
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-25 12:00:38 -07:00
6f64690b91 fix: refresh duviri seed after non-quit completion of a duviri game mode (#1834)
All checks were successful
Build Docker image / docker (push) Successful in 31s
Build / build (push) Successful in 1m32s
Reviewed-on: #1834
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:56:40 -07:00
fb5a7320bb chore: update to allScans cheat (#1844)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1844
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-25 11:56:27 -07:00
143b358a03 chore: always update rewardSeed in missionInventoryUpdate (#1833)
All checks were successful
Build / build (push) Successful in 1m33s
Build Docker image / docker (push) Successful in 1m27s
This should be slightly more faithful. Also logging a warning in case we have a mismatch as that shouldn't happen.

Reviewed-on: #1833
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:54:11 -07:00
0b75757277 chore: improve distribution of rewardSeed (#1831)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This was previously not ideal due to float imprecision, but now it's 64 bits and there's enough entropy for all of them.

Reviewed-on: #1831
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:53:54 -07:00
fd7f4c9e92 feat: calendar progress (#1830)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1775

Reviewed-on: #1830
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:53:34 -07:00
fa6fac494b fix: some problems with 1999 calendar rotation (#1829)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
- First day was incorrect for summer & autumn
- Only 1 reward was shown, now is a choice of 2
- Only 1 upgrade was shown, now is a choice of 3
- First 2 challenges in the season are now guaranteed to be "easy"

Reviewed-on: #1829
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:53:04 -07:00
6b3f524574 feat: sortie mission credit rewards (#1828)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1820

Reviewed-on: #1828
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:52:42 -07:00
506365f97e feat: auto-generate debt token vendor manifest (#1827)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Yet another pretty big change to how these things are generated, but getting closer to where we wanna be now.

Reviewed-on: #1827
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:52:31 -07:00
70646160c3 fix: give no rewards if there are no qualifications (#1826)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1823

Reviewed-on: #1826
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:52:16 -07:00
3ffa4a7fd3 fix: exclude some more nodes from syndicate missions (#1825)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1819

Reviewed-on: #1825
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:51:54 -07:00
826a09a473 fix: provide a response to setShipFavouriteLoadout (#1824)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Seems to be the same format as the request, so just mirror it back. This is so the client knows we acknowledged the change as it won't resync the ship until the next login.

Closes #1822

Reviewed-on: #1824
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-25 11:51:43 -07:00
100aefcee4 fix: give corresponding weapon when crafting Hound (#1816)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m43s
Reviewed-on: #1816
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-24 11:24:53 -07:00
409c089d11 feat: handle account already owning a nightwave skin item (#1814)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1811

Reviewed-on: #1814
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-24 11:24:38 -07:00
8c32dc2670 fix: add MoaPets into sellController (#1813)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1813
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-24 11:24:25 -07:00
a67f99b665 chore: don't use sequential values as RNG seeds directly (#1812)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This should help get a slightly better distribution

Reviewed-on: #1812
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-24 11:24:11 -07:00
756a01d270 fix: pass Emblem field on in getGuildClient
All checks were successful
Build Docker image / docker (push) Successful in 1m3s
Build / build (push) Successful in 1m26s
2025-04-24 05:36:16 +02:00
efc7467a99 chore: remove unused MoaPets array from getItemLists
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m31s
2025-04-24 02:00:27 +02:00
99e1a66da8 chore: improve typings in getItemLists
All checks were successful
Build / build (push) Successful in 44s
Build Docker image / docker (push) Successful in 51s
2025-04-24 00:46:33 +02:00
370f8c1008 fix: getItemLists fixup
All checks were successful
Build Docker image / docker (push) Successful in 53s
Build / build (push) Successful in 1m32s
2025-04-24 00:42:33 +02:00
f039998d71 chore: update PE+ to 0.5.58
All checks were successful
Build Docker image / docker (push) Successful in 1m7s
Build / build (push) Successful in 47s
2025-04-24 00:33:20 +02:00
eb594af9d8 chore: improve archwing mission detection (#1794)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m38s
SettlementNode10 was not being excluded

Reviewed-on: #1794
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:40:45 -07:00
bb8596fa87 fix(webui): use proper 'size' abbreviations for vallis & deimos fish (#1804)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m34s
Closes #1763

Reviewed-on: #1804
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:38:04 -07:00
a85539a686 feat: set IsNew flag on new sentinels (#1802)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1802
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:37:52 -07:00
ada6a4bad0 fix: occupy correct slot for arch-guns (#1801)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1801
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:37:43 -07:00
948104a9a6 fix: "logged in elsewhere" when logging in on account created via webui (#1800)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1800
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:37:31 -07:00
7a8b12b372 chore: cap FusionPoints balance at 2147483647 (#1797)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Same idea as with typeCountSchema. The game needs to be able to store these safely in an i32 on the C++ side.

Reviewed-on: #1797
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:37:10 -07:00
26d644a982 feat: handle scale for the dojo decos that need it (#1795)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1785

Reviewed-on: #1795
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:36:57 -07:00
d6750cd84b chore: provide tileset for sortie missions (#1793)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1788

Reviewed-on: #1793
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:36:32 -07:00
f3601ec43e chore: allow MT_CAPTURE for sorties (#1792)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
e.g. `SolNode1` is a capture mission but it should still be a valid node for sorties. Not that the mission will actually be a capture.

Reviewed-on: #1792
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:36:19 -07:00
15aaa28a4f feat: conquest progression & rewards (#1791)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1570

Co-authored-by: Jānis <janisslsm@noreply.localhost>
Reviewed-on: #1791
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:35:57 -07:00
ce5b0fc9e2 fix: limit MT_LANDSCAPE sortie missions to PoE (#1790)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1789

Reviewed-on: #1790
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-23 11:35:29 -07:00
64290b72c0 chore(webui): update to Spanish translation (#1809)
All checks were successful
Build Docker image / docker (push) Successful in 1m9s
Build / build (push) Successful in 45s
Reviewed-on: #1809
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-23 11:20:40 -07:00
570c6fe0d1 chore(webui): update German translation (#1806)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1806
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-23 11:20:25 -07:00
146dbd1b89 chore(webui): update to Spanish translation (#1803)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m31s
Reviewed-on: #1803
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-22 18:52:46 -07:00
e17d43dcb6 chore: fix slotNames duplication (#1798)
All checks were successful
Build Docker image / docker (push) Successful in 54s
Build / build (push) Successful in 1m32s
Reviewed-on: #1798
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 15:20:50 -07:00
daacbf6f7b fix(webui): add exalted array for KubrowPets ItemLists (#1782)
All checks were successful
Build Docker image / docker (push) Successful in 42s
Build / build (push) Successful in 1m34s
Closes #1770

Reviewed-on: #1782
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-22 10:00:58 -07:00
32bb6d4ccb feat: syndicate mission rotation (#1781)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1530

Reviewed-on: #1781
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 10:00:49 -07:00
23dafb53d1 fix: skipTutorial sets ReceivedStartingGear before giving the gear (#1780)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
This was raising a warning when creating a new account.

Reviewed-on: #1780
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 10:00:38 -07:00
3aa853f953 feat(webui): register (#1779)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #740

Reviewed-on: #1779
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 10:00:26 -07:00
409f41d3bf feat(webui): remove unranked mods (#1778)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1778
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 10:00:10 -07:00
c4b8a71c5a chore(webui): provide "max rank" option when only exalted needs it (#1776)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1776
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 10:00:04 -07:00
3b20a109f6 fix: handle saveDialogue without YearIteration having been supplied (#1774)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
This is needed for The Hex rank up dialogues, which are independent of the year iterations.

Fixes #1773

Reviewed-on: #1774
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 09:59:54 -07:00
6d93ae9f2d fix: be less strict with required avatar type for personal synthesis (#1768)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1766

Reviewed-on: #1768
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 09:59:41 -07:00
ad2f143f15 feat: cleanup some problems in inventories at daily reset (#1767)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1767
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-22 09:59:30 -07:00
03590c7360 chore(webui): update German translation (#1786)
All checks were successful
Build Docker image / docker (push) Successful in 1m8s
Build / build (push) Successful in 47s
Reviewed-on: #1786
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-22 09:44:47 -07:00
e3fca682d6 Update static/webui/translations/fr.js (#1784)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m34s
Reviewed-on: #1784
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-04-22 09:44:07 -07:00
c94bc3ef90 chore(webui): update Russian translation (#1783)
All checks were successful
Build Docker image / docker (push) Successful in 1m4s
Build / build (push) Successful in 49s
Reviewed-on: #1783
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-22 00:00:52 -07:00
731be0d5e3 fix: exclude MT_ARENA from sortie node options (#1769)
All checks were successful
Build Docker image / docker (push) Successful in 48s
Build / build (push) Successful in 1m31s
Fixes #1764

Reviewed-on: #1769
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 22:06:39 -07:00
a49edefbd1 fix(webui): don't halve required R30 XP for MoaPets & KubrowPets (#1771)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 12m6s
Reviewed-on: #1771
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 15:21:40 -07:00
e3a34399e5 chore(webui): update to Spanish translation (#1772)
All checks were successful
Build Docker image / docker (push) Successful in 1m2s
Build / build (push) Successful in 42s
Reviewed-on: #1772
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-21 11:55:58 -07:00
ec6729db4d feat: setHubNpcCustomizations (#1762)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m29s
Closes #1757

Reviewed-on: #1762
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 10:44:12 -07:00
72b28f1d75 feat: send hex quest email when The Lotus Eaters and The Duviri Paradox are complete (#1761)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Close #1759

Reviewed-on: #1761
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 10:44:01 -07:00
bdf0ac722b feat: give lotus eaters quest at completion of whispers in the walls (#1760)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1758

Reviewed-on: #1760
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 10:43:26 -07:00
98aebba677 fix: EOM endo rewards showing as doubled in the client (#1756)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1754

Reviewed-on: #1756
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 10:43:10 -07:00
9912a623b1 fix: complete all quests not working (#1755)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1742

Reviewed-on: #1755
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-21 10:42:56 -07:00
98975edca1 feat(webui): KubrowPets support (#1752)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
also using `/api/modularWeaponCrafting.php` instead of  `/custom/addModularEquipment` for modular equipment

Reviewed-on: #1752
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-21 10:42:48 -07:00
218df461e1 feat: send WiTW email when completing The New War or Heart of Deimos (#1749)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 42s
At completion of either of the quests, check if the other has been completed, and if so, unlock WiTW.

Closes #1748

Reviewed-on: #1749
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-20 16:10:45 -07:00
86d871537b chore: add void corrupted moa to allScans.json
All checks were successful
Build / build (push) Successful in 45s
Build Docker image / docker (push) Successful in 1m47s
2025-04-20 17:18:00 +02:00
11f2ffe64d feat(import): accolades (#1750)
All checks were successful
Build Docker image / docker (push) Successful in 38s
Build / build (push) Successful in 1m42s
So one is able to import e.g. `{"Staff":true}` to set that field to true without going into Compass.

Reviewed-on: #1750
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-20 07:53:45 -07:00
8fd7152c41 fix: don't give rewards for aborted railjack missions (#1743)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1741

Reviewed-on: #1743
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-20 07:53:11 -07:00
0f3d9f6c2c chore: provide upcoming weekly acts before week rollover (#1736)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m29s
The final piece to close #1640

Reviewed-on: #1736
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:06:49 -07:00
c2a633b549 chore: improve LiteSortie handling at week rollover (#1735)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
WorldState now provides the upcoming LiteSortie if relevant and the boss is derived from the sortieId so completing it at rollover should work as expected.

Reviewed-on: #1735
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:06:38 -07:00
7040d422a2 feat: manage crew members (#1734)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1734
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:06:20 -07:00
ba1380ec4c feat: rush repair drones (#1733)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1677

Reviewed-on: #1733
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:06:07 -07:00
26f37f58e5 chore(webui): make add mods behave more like adding items (#1732)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1732
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:05:55 -07:00
e59bdcdfbc chore(webui): assume deleting items will always succeed (#1731)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
instead of waiting for a response + then refreshing inventory, we can just delete the element right away and hope it works out

Reviewed-on: #1731
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:05:43 -07:00
c1ca303310 fix: handle mk1 armaments being salvaged (#1730)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1729

Reviewed-on: #1730
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:05:23 -07:00
8afb515231 fix(stats): captures not being tracked for a new enemy (#1728)
Some checks failed
Build Docker image / docker (push) Successful in 35s
Build / build (push) Has been cancelled
Reviewed-on: #1728
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:04:22 -07:00
5eecf11b1a fix: ignore assassin mission failure if recovery is still pending (#1726)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1724

Reviewed-on: #1726
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:04:04 -07:00
37ac10acd2 chore: use import for static vendor manifest json files again (#1725)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This was changed because for VRST_WEAPON, the LocTagRandSeed is too big to be read without precision loss, but both vendors using it are now auto-generated, so we can have hot-reloading again when these files are changed.

Reviewed-on: #1725
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-19 09:03:53 -07:00
8b0ba0b84a feat: save InvasionProgress/QualifyingInvasions (#1719)
All checks were successful
Build Docker image / docker (push) Successful in 54s
Build / build (push) Successful in 1m28s
Reviewed-on: #1719
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:27:29 -07:00
cdead6fdf8 feat: archon hunt rewards (#1713)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m29s
also added a check for first completion to avoid giving another reward for repeating the final mission

Closes #1624

Reviewed-on: #1713
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:23:52 -07:00
da6067ec43 fix: use correct drop table for phorid assassination (#1718)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m27s
Reviewed-on: #1718
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:18:26 -07:00
a98e18d511 feat: tenet weapon vendor rotation (#1717)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1717
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:18:11 -07:00
6394adb0f0 fix(webui): handle config get request failing due to expired authz (#1716)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1716
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:17:55 -07:00
bc5dc02fc9 chore: fill in guild member data asynchronously (#1715)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1715
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:17:36 -07:00
de5fd5fce0 chore: provide a proper schema for CurrentLoadOutIds (#1714)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1714
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:17:19 -07:00
a6d4fab595 chore: rewrite gruzzling droptable to scathing/mocking whispers (#1712)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1708

Reviewed-on: #1712
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:16:58 -07:00
f549b042d6 feat: ignore list (#1711)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1707

Reviewed-on: #1711
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:16:43 -07:00
0c34c87d75 fix: give defaultUpgrades for infested pets (#1710)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1709

Reviewed-on: #1710
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:16:11 -07:00
3baf6ad015 feat: handle railjack armaments, crew, & customizations in saveLoadout (#1706)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #467

Reviewed-on: #1706
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:15:50 -07:00
196182f9a8 feat: acquisition of CrewMembers (#1705)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1705
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-18 11:15:27 -07:00
379f57be2c chore: add pumpkin containers to allScans (#1703)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 1m17s
Closes #1693

Reviewed-on: #1703
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 18:40:51 -07:00
0d8f5ee66c fix: provide proper response when unbranding a suit (#1697)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Fixes #1695

Reviewed-on: #1697
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 18:40:41 -07:00
79492efbb4 chore: pass --enable-source-maps to node for npm run start (#1701)
All checks were successful
Build / build (push) Successful in 41s
Build Docker image / docker (push) Successful in 49s
Reviewed-on: #1701
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 13:15:50 -07:00
decbbdc81b chore(webui): update German translation (#1704)
All checks were successful
Build / build (push) Successful in 44s
Build Docker image / docker (push) Successful in 47s
Reviewed-on: #1704
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-17 12:17:15 -07:00
41d976d362 fix: don't trigger G3 capture when LevelKeyName is present (#1699)
All checks were successful
Build Docker image / docker (push) Successful in 49s
Build / build (push) Successful in 1m30s
Reviewed-on: #1699
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 10:58:40 -07:00
f94ecbfbfc chore: validate railjack repair start (#1698)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 1m25s
Reviewed-on: #1698
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 10:50:24 -07:00
f4f1e11b31 chore(webui): update Spanish translation (#1702)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (push) Successful in 1m34s
Reviewed-on: #1702
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-17 10:46:22 -07:00
e38d52fb1b feat: sortie reward (#1692)
All checks were successful
Build / build (push) Successful in 1m0s
Build Docker image / docker (push) Successful in 2m43s
May work somewhat for lite sorties, didn't test that. They'd also need some extra handling with regards to the archon shards with their dynamic probabilities.

Reviewed-on: #1692
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 08:02:13 -07:00
419096f603 feat: noDeathMarks cheat (#1691)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1583

Reviewed-on: #1691
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 08:01:59 -07:00
76a53bb1f6 fix: don't consider simaris title 1 to earn a free favour (#1690)
Some checks are pending
Build Docker image / docker (push) Waiting to run
Build / build (push) Successful in 1m28s
Fixes #1688

Reviewed-on: #1690
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 08:00:31 -07:00
435aafeaae feat: randomly generate 1999 calendar seasons (#1689)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
also handling week rollover now

Reviewed-on: #1689
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 08:00:19 -07:00
8a1603a661 feat: more comprehensive handling of railjack items in sellController (#1687)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1675

Reviewed-on: #1687
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 07:59:57 -07:00
66e34b7be9 feat: identify & repair railjack armaments (#1686)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1676

Reviewed-on: #1686
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-17 07:59:42 -07:00
9940024a01 fix: put acquired house version railjack armaments into raw salvage (#1685)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 43s
Reviewed-on: #1685
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 10:39:01 -07:00
ed217bae33 feat: cancel personal tech project (#1679)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1665

Reviewed-on: #1679
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 10:38:53 -07:00
16e850e7ee fix: provide a SubroutineIndex when identifying applicable components (#1683)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1683
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 10:38:27 -07:00
850a073594 fix: don't set IsNew on CrewShipWeapons (#1682)
Some checks failed
Build Docker image / docker (push) Successful in 59s
Build / build (push) Has been cancelled
this indicator doesn't fully work for them as it seems the client doesn't clear it, so I assume they're not supposed to have it

Reviewed-on: #1682
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 10:37:40 -07:00
66dae6d3f8 chore(webui): update Spanish translation (#1681)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 43s
Reviewed-on: #1681
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-16 09:28:40 -07:00
9a50c05205 chore(webui): update to German translation (#1680)
All checks were successful
Build Docker image / docker (push) Successful in 1m1s
Build / build (push) Successful in 1m38s
Reviewed-on: #1680
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-16 09:01:47 -07:00
379e83a764 fix: use rewardTier only for rescue missions (#1674)
All checks were successful
Build Docker image / docker (push) Successful in 1m0s
Build / build (push) Successful in 1m1s
Fixes #1672

Reviewed-on: #1674
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 08:36:00 -07:00
44da0eb50a docs: some basic explanation of config.json & config.json.example
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m24s
2025-04-16 15:35:39 +02:00
deb652ab37 fix: provide upcoming nightwave daily challenge if rollover is imminent (#1667)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 1m29s
Reviewed-on: #1667
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:31:16 -07:00
0ea67ea89a feat: identify & repair railjack components (#1664)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #911

Reviewed-on: #1664
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:31:00 -07:00
51b82df5fd feat: granum void/purgatory rewards (#1663)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1627

Reviewed-on: #1663
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:30:36 -07:00
3d1b009bdb feat: noDailyFocusLimit cheat (#1661)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1641

Reviewed-on: #1661
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:30:22 -07:00
46aef2c00e feat: send jordas precept email when completing pluto to eris junction (#1660)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1659

Reviewed-on: #1660
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:30:06 -07:00
7d607b7348 fix: check ascension ceremony contributors when changing clan tier (#1656)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1656
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:29:50 -07:00
4cb1ea94e5 feat: sell/scrap CrewShipWeapons (#1655)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1646

Reviewed-on: #1655
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:29:27 -07:00
729061951f fix: allow manageQuests' deleteKey op to be used with any ItemType (#1653)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1653
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:29:09 -07:00
38502f10bf fix: give ample duplicates of ship decos with unlockAllShipDecorations (#1651)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1644

Reviewed-on: #1651
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:28:52 -07:00
a738dbfa9a fix: use JobTier instead of parsing the jobId for it (#1649)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Should fix #1647

Reviewed-on: #1649
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-16 06:28:34 -07:00
95562a97ad fix: provide current & upcoming sortie if rollover is imminent (#1666)
All checks were successful
Build / build (push) Successful in 1m26s
Build Docker image / docker (push) Successful in 1m13s
Reviewed-on: #1666
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 20:53:27 -07:00
c13615c4df fix: provide upcoming bounties in worldState when new cycle is imminent (#1657)
All checks were successful
Build Docker image / docker (push) Successful in 1m3s
Build / build (push) Successful in 1m1s
Reviewed-on: #1657
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 20:41:46 -07:00
eb6b1c1f57 chore: fix typo
All checks were successful
Build Docker image / docker (push) Successful in 1m31s
Build / build (push) Successful in 1m3s
2025-04-16 03:40:21 +02:00
64fbdf6064 fix: put house version railjack components into the salvage array (#1654)
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 51s
Fixes #1645

Reviewed-on: #1654
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 18:11:13 -07:00
47551e93b3 feat(webui): add everything in ExportCustoms as an "add items" option
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
2025-04-16 03:11:21 +02:00
7a53363b1b fix response of giveQuestKeyReward
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 1m23s
2025-04-16 01:36:46 +02:00
ea0ca8c88b chore: fix file name for giveQuestKeyRewardController
All checks were successful
Build Docker image / docker (push) Successful in 59s
Build / build (push) Successful in 46s
2025-04-16 01:35:28 +02:00
a10c3b061a fix: respect VaultsCracked when rolling droptable for level key rewards (#1639)
All checks were successful
Build / build (push) Successful in 44s
Build Docker image / docker (push) Successful in 51s
Fixes #1638

Reviewed-on: #1639
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 14:58:15 -07:00
3165d9f459 fix: respect rewardTier for rescue missions (#1650)
All checks were successful
Build Docker image / docker (push) Successful in 46s
Build / build (push) Successful in 1m42s
Reviewed-on: #1650
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 10:47:38 -07:00
28d7ca8ca0 chore: address eslint warnings
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m33s
2025-04-15 18:48:17 +02:00
3f0a2bec48 fix: generate rewards based on RewardSeed to match what's show in client (#1628)
All checks were successful
Build Docker image / docker (push) Successful in 44s
Build / build (push) Successful in 1m29s
Reviewed-on: #1628
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 09:46:08 -07:00
d28437b658 feat: give 5 steel essence when completing an SP incursion (#1637)
All checks were successful
Build Docker image / docker (push) Successful in 54s
Build / build (push) Successful in 54s
Closes #1631

Reviewed-on: #1637
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 06:16:40 -07:00
a6d2c8b18a fix: don't give credits for junctions, the index, and free flight (#1635)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1625

Reviewed-on: #1635
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 06:16:31 -07:00
0c884576bd feat: picking up prex cards (#1634)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1621

Reviewed-on: #1634
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 06:16:19 -07:00
380f0662a4 fix: don't try to subtract MiscItems for polarity swap (#1633)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1620

Reviewed-on: #1633
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 06:16:07 -07:00
bd83738168 fix: provide a response to setPlacedDecoInfo (#1632)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This seems to be needed for the client when refreshing the ship after loading into a mission as it does not resync the ship otherwise.

Closes #1629

Reviewed-on: #1632
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-15 06:15:49 -07:00
fa68a1357d chore(webui): update to German translation (#1642)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1642
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-15 06:15:33 -07:00
43f3917b09 fix: additional checks in bounty rewards (#1626)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 1m28s
Reviewed-on: #1626
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-15 06:10:25 -07:00
8ebb749732 chore(webui): update to Spanish translation (#1636)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (push) Successful in 1m21s
Reviewed-on: #1636
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-14 11:45:00 -07:00
827ea47468 feat: personal quarters loadout, stencil, vignette, & fish customisation (#1619)
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 55s
Closes #1618

Reviewed-on: #1619
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-14 07:16:25 -07:00
c64d466ce1 fix: universalPolarityEverywhere not applying on plexus aura slot (#1614)
All checks were successful
Build Docker image / docker (push) Successful in 47s
Build / build (push) Successful in 1m27s
Reviewed-on: #1614
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-14 07:14:50 -07:00
c8ae3d688f feat: noResourceExtractorDronesDamage cheat (#1613)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1609

Reviewed-on: #1613
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-14 07:14:15 -07:00
4a971841a1 fix: check addItems quantity for Drones & EmailItems (#1612)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1610

Reviewed-on: #1612
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-14 07:13:51 -07:00
9472f855b6 chore: slightly generalise auto-generation of vendor manifests (#1611)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
was gonna use this for the iron wake vendor manifest but the order is all wrong so in that way preprocessing remains a more preferable approach

Reviewed-on: #1611
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-14 07:13:36 -07:00
7736a2bf65 chore(webui): update to Spanish translation (#1616)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (push) Successful in 1m29s
Reviewed-on: #1616
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-13 09:51:27 -07:00
bef3aeed72 chore(webui): update to German translation (#1615)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1615
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-13 09:51:18 -07:00
aacd089123 feat: caliber chicks 2 rewards (#1606)
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 48s
Closes #1263

Reviewed-on: #1606
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-13 05:52:21 -07:00
d281e929ae feat: noKimCooldowns cheat (#1605)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1537

Reviewed-on: #1605
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-13 05:51:54 -07:00
729ea0abff fix: look ahead for key chain messages (#1603)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
This is required for the railjack quest:
- request has ChainStage 1 when it wants message from index 3
- request has ChainStage 4 when it wants message from index 6
- ...

Reviewed-on: #1603
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-13 05:51:27 -07:00
a75e0c59af feat: personal research (#1602)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This should be good enough for the railjack quest at least

Closes #1599

Reviewed-on: #1602
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-13 05:51:15 -07:00
b429eed46c feat: bounty item reward (#1595)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #388
same as before I think this only missing `Field Bounties` and `Arcana Isolation Vault`

Reviewed-on: #1595
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-13 05:51:02 -07:00
92d2616dda feat: handle duet encounter (#1592)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1274

Reviewed-on: #1592
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-13 05:50:51 -07:00
37ccd33d5c chore(webui): update to German translation (#1607)
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m26s
Reviewed-on: #1607
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-13 05:48:38 -07:00
20326fdaa0 chore(webui): strip <SHARD_BLUE_SIMPLE> etc from item name
All checks were successful
Build Docker image / docker (push) Successful in 56s
Build / build (push) Successful in 1m0s
2025-04-13 05:08:14 +02:00
6a97a0c7c8 chore: default ChallengesFixVersion to 6 (#1594)
All checks were successful
Build Docker image / docker (push) Successful in 57s
Build / build (push) Successful in 1m17s
we don't set this field anywhere but it might be needed

Reviewed-on: #1594
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 18:55:01 -07:00
0928b842ad fix: handle acquisition of weapon slots via nightwave (#1591)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1591
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 18:54:49 -07:00
e0200b2111 fix: universalPolarityEverywhere not affecting all plexus slots (#1589)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1589
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 18:54:42 -07:00
18a13911ba fix: handle content-encoding "e" (#1588)
All checks were successful
Build Docker image / docker (push) Successful in 42s
Build / build (push) Successful in 1m27s
Reviewed-on: #1588
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 18:53:35 -07:00
2c53d17489 chore: update pe+ (#1604)
All checks were successful
Build / build (push) Successful in 47s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1604
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 18:52:01 -07:00
2eb28c4e89 chore: fix unnecessary condition
All checks were successful
Build Docker image / docker (push) Successful in 32s
Build / build (push) Successful in 1m16s
2025-04-12 23:59:06 +02:00
2187d9cd7e chore(webui): note performance impact of archon shards
All checks were successful
Build Docker image / docker (push) Successful in 55s
Build / build (push) Successful in 1m20s
2025-04-12 23:56:33 +02:00
e5e6f7963b chore(webui): update ru translation (#1598)
All checks were successful
Build Docker image / docker (push) Successful in 47s
Build / build (push) Successful in 1m24s
Reviewed-on: #1598
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-12 14:46:24 -07:00
900c6e9a26 chore: enforce UNIX-style line endings
All checks were successful
Build Docker image / docker (push) Successful in 49s
Build / build (push) Successful in 1m24s
2025-04-12 23:45:26 +02:00
f0ee1e8aad feat(webui): Spanish translation
Some checks failed
Build Docker image / docker (push) Successful in 45s
Build / build (push) Has been cancelled
2025-04-12 23:37:08 +02:00
5c6b4b5779 fix: set activation & expiry for eidolon/venus/deimos bounties (#1581)
All checks were successful
Build Docker image / docker (push) Successful in 46s
Build / build (push) Successful in 1m25s
Reviewed-on: #1581
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 06:15:14 -07:00
9b330ffd3e feat: sendMsgToInBox (#1580)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (push) Has been cancelled
Reviewed-on: #1580
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 06:15:03 -07:00
97d27e8110 feat: playedParkourTutorial (#1579)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Reviewed-on: #1579
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 06:14:46 -07:00
525e3067c9 fix: only warn when addKeyChainItems does not change the inventory (#1578)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1578
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 06:14:21 -07:00
0c1fa05e9c chore: don't error on setDojoURL (#1571)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
users may be confused about the "unknown endpoint" message, as it is reported with error level

Reviewed-on: #1571
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-12 06:14:02 -07:00
946f3129b8 feat: bounty standing reward (#1556)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #388
I think this only missing `Field Bounties` and `Arcana Isolation Vault`

Reviewed-on: #1556
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-12 06:13:44 -07:00
355de3fa04 chore(webui): update to German translation (#1575)
All checks were successful
Build Docker image / docker (push) Successful in 45s
Build / build (push) Successful in 46s
Reviewed-on: #1575
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-11 08:51:39 -07:00
61e168e444 chore: add Conselor to IInventoryClient
All checks were successful
Build Docker image / docker (push) Successful in 40s
Build / build (push) Successful in 1m18s
this isn't an accolade, but it unlocks a new chat
2025-04-11 16:55:23 +02:00
70fa48ab07 chore(webui): update to German translation (#1568)
All checks were successful
Build Docker image / docker (push) Successful in 44s
Build / build (push) Successful in 50s
Reviewed-on: #1568
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-11 06:57:35 -07:00
dde95c2b61 feat: favoriting equipment & skins (#1555)
Some checks failed
Build Docker image / docker (push) Successful in 43s
Build / build (push) Has been cancelled
Reviewed-on: #1555
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:56:45 -07:00
2ca79ef898 feat: eidolon/venus/deimos bounty rotation (#1554)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1554
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:56:31 -07:00
63e3c96671 feat: transmutation of requiem/antivirus/potency mods (#1553)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1553
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:56:12 -07:00
f0351489be feat: HeistProfitTakerBountyThree first time completion reward (#1552)
All checks were successful
Build Docker image / docker (push) Successful in 58s
Build / build (push) Successful in 49s
Reviewed-on: #1552
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-11 06:54:59 -07:00
5149d0e382 chore: don't use ? for leaderboardService parameters (#1551)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
This means the argument can be omitted when we really mean that it can be undefined — but we still want it to be explicitly given.

Reviewed-on: #1551
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:54:47 -07:00
ec8982a921 feat: bounty rewards (#1549)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #388. This only handles reward manifests and only those given in the worldState.

Reviewed-on: #1549
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:54:35 -07:00
cc338c2173 feat: cheat Unlock All Dojo Deco Recipes (#1543)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1543
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-11 06:54:07 -07:00
85b5bb438e feat: handle OtherDialogueInfos in saveDialogue (#1542)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1542
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-11 06:53:50 -07:00
9f727789ca chore: split worldState stuff into types & service (#1548)
All checks were successful
Build Docker image / docker (push) Successful in 43s
Build / build (push) Successful in 41s
Reviewed-on: #1548
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 12:54:48 -07:00
b308b91f44 chore: remove typescript version limit (#1547)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
This is no longer needed now that the eslint stuff is up-to-date enough.

Reviewed-on: #1547
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 12:54:43 -07:00
fc3ef3a126 fix: use wagerTier for The Index rewards (#1545)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1545
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 12:54:29 -07:00
3f47f89b56 chore: update PE+ (#1546)
All checks were successful
Build Docker image / docker (push) Successful in 51s
Build / build (push) Successful in 1m23s
and make use of some of the new data

Reviewed-on: #1546
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 12:40:57 -07:00
e784b2dfb8 chore: fix typo
All checks were successful
Build Docker image / docker (push) Successful in 50s
Build / build (push) Successful in 1m21s
2025-04-10 21:05:35 +02:00
c0947b8822 chore(webui): use select for "supported syndicate" (#1539)
All checks were successful
Build Docker image / docker (push) Successful in 50s
Build / build (push) Successful in 1m26s
Reviewed-on: #1539
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:17:40 -07:00
a0b61bec12 feat: KIM gifts (#1538)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1538
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:16:54 -07:00
d3620c00e2 feat: automatically delete death mark messages after 24 hours (#1535)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Possibly unfaithful but more faithful than never deleting it at all.

Reviewed-on: #1535
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:16:30 -07:00
0ffcee5faf fix: set deathmark message title to the boss' name (#1533)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1533
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:16:06 -07:00
c2ed8b40f0 feat: track EudicoHeists in CompletedJobChains (#1531)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1531
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:15:54 -07:00
feb1dd4715 chore: improve changeDojoRoot (#1522)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Using SortId instead of actually changing the component ids.
What's strange is that providing/omitting SortId does seem to make a difference in regards to deco positioning, which is presumably what the POST body would be for. I've opted to simply always provide the SortId in hopes that this avoids the need for repositioning entirely.
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-10 07:15:27 -07:00
540961ff9e chore(webui): use gildWeaponController (#1518)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
also use `TEquipmentKey` instead `WeaponTypeInternal | "Hoverboards"`
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-10 07:14:53 -07:00
5692a6201e feat: No Dojo Deco Build Stage cheat (#1508)
Some checks failed
Build / build (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1508
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-10 07:14:33 -07:00
541b8d32a8 feat: LizzieShawzin (#1525)
All checks were successful
Build Docker image / docker (push) Successful in 43s
Build / build (push) Successful in 1m18s
Reviewed-on: #1525
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 15:37:28 -07:00
74f9d1567f feat: handle QueuedDialogues in saveDialogue (#1524)
All checks were successful
Build Docker image / docker (push) Successful in 41s
Build / build (push) Successful in 43s
Reviewed-on: #1524
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 15:30:59 -07:00
02a4d2b30a feat: track KIM resets (#1528)
All checks were successful
Build Docker image / docker (push) Successful in 41s
Build / build (push) Successful in 1m18s
This was added in 38.5.0 for FlareRank1Convo3

Reviewed-on: #1528
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 15:28:29 -07:00
a8f174bce1 fix: don't duplicate FlavourItems (#1526)
All checks were successful
Build Docker image / docker (push) Successful in 56s
Build / build (push) Successful in 44s
Reviewed-on: #1526
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 15:26:40 -07:00
db1dd21924 ci: improve prettier coverage (#1523)
All checks were successful
Build Docker image / docker (push) Successful in 43s
Build / build (push) Successful in 1m19s
All prettier violations will now be reported, not just what eslint checks.

Reviewed-on: #1523
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 15:25:19 -07:00
005350bde0 ci: remove node.js version matrix (#1519)
All checks were successful
Build Docker image / docker (push) Successful in 54s
Build / build (push) Successful in 1m25s
We only check if the TypeScript successfully compiles & lints, which isn't really dependent on Node.js version.

Reviewed-on: #1519
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 06:52:30 -07:00
5cd18db7a7 chore: prettier
All checks were successful
Build / build (18) (push) Successful in 50s
Build / build (20) (push) Successful in 1m19s
Build Docker image / docker (push) Successful in 47s
Build / build (22) (push) Successful in 1m17s
2025-04-09 13:30:04 +02:00
bb315eaafe chore: handle addItem of crew ship harness (#1516)
All checks were successful
Build / build (18) (push) Successful in 51s
Build / build (20) (push) Successful in 1m19s
Build / build (22) (push) Successful in 1m23s
Build Docker image / docker (push) Successful in 51s
Reviewed-on: #1516
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-09 03:48:07 -07:00
327b834b07 chore: handle zealoid prelate stripped rewards (#1515)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m21s
Build Docker image / docker (push) Successful in 37s
Build / build (22) (push) Successful in 1m20s
Reviewed-on: #1515
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-08 03:06:47 -07:00
39be095818 chore: handle season challenge completion in missionInventoryUpdate (#1511)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1511
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-08 03:06:36 -07:00
ef4973e694 chrore(webui): don't add duplicates to datalists (#1510)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Browsers will show all options, even if this makes no sense, causing some confusion for users.

Reviewed-on: #1510
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-08 03:06:19 -07:00
7f69667171 feat: dojo component settings (#1509)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1509
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-08 03:06:06 -07:00
dcdeb0cd34 feat(webui): add pigment (#1507)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1507
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-08 03:05:53 -07:00
8ce86ad4fd chore(webui): show quantity for recipes (#1506)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m17s
Build / build (18) (push) Successful in 1m19s
Build Docker image / docker (push) Successful in 36s
Reviewed-on: #1506
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-07 05:55:33 -07:00
a2f1469779 feat: add attVisualOnly to inbox messages (#1499)
All checks were successful
Build / build (18) (push) Successful in 45s
Build / build (20) (push) Successful in 1m15s
Build / build (22) (push) Successful in 1m24s
Build Docker image / docker (push) Successful in 37s
In case we'll need it...

Reviewed-on: #1499
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-07 05:30:29 -07:00
dd32e082f3 chore: add UmbraDate to equipment (#1496)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1496
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-07 05:30:15 -07:00
74c7d86090 feat: polychrome (#1495)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1495
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-07 05:30:00 -07:00
7fd4d50e07 feat(webui): add level keys via "add items" (#1493)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1493
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-07 05:29:44 -07:00
7f805a1dcc feat: handle KeyToRemove in EOM upload (#1491)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1491
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-07 05:29:32 -07:00
919f12b8f9 feat: sortie rotation (#1453)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1453
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-07 05:29:21 -07:00
94993a16aa fix: use await instead of void
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m17s
2025-04-07 01:13:47 +02:00
002b0cb93f chore: fix code duplication for quest completion (#1497)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m15s
Reviewed-on: #1497
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 16:08:36 -07:00
4362a842ff Fix the rewards of Second Dream (#1498)
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 1m13s
Build / build (22) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 34s
Adds the two missing inbox items of Second Dream.

Reviewed-on: #1498
Co-authored-by: VampireKitten <dynamightkobold@gmail.com>
Co-committed-by: VampireKitten <dynamightkobold@gmail.com>
2025-04-06 16:05:47 -07:00
5702ab5f3b fix: missing AutoContributeFromVault in guild response
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (22) (push) Successful in 1m13s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 36s
2025-04-06 23:21:43 +02:00
fac52bfda1 fix: scale credits subtracted from clan vault when auto-contributing
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (22) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 1m17s
2025-04-06 23:19:00 +02:00
2ff535e7ab chore: update PE+
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m16s
2025-04-06 21:20:00 +02:00
9698baa979 feat: handle droptable rewards from level key (#1492)
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (18) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 33s
Build / build (20) (push) Successful in 1m21s
Reviewed-on: #1492
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 10:19:15 -07:00
ceb7deec06 chore: generate source maps with build (#1489)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This ensures that when we get a stack trace, it contains the original line numbers.

Reviewed-on: #1489
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 10:18:50 -07:00
fe0b745066 fix: missing fields in dojo response (#1488)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1488
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 10:18:33 -07:00
8f41d3c13f fix: give an extra trade when leveling up MR (#1487)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1487
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 10:18:15 -07:00
f906cdb5e8 fix: handle client providing an invalid loadout id at EOM upload (#1486)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1486
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 10:18:01 -07:00
ea6facf3fc chore(webui): update to German translation (#1490)
All checks were successful
Build / build (18) (push) Successful in 48s
Build / build (22) (push) Successful in 1m20s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 36s
Reviewed-on: #1490
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-06 06:44:11 -07:00
b93a4a6dae fix: handle login reward not being able to give any recipe (#1479)
All checks were successful
Build / build (22) (push) Successful in 43s
Build / build (20) (push) Successful in 1m16s
Build / build (18) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1479
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:04:55 -07:00
64da8c2e50 feat: no mastery rank up cooldown cheat (#1478)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1478
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:04:44 -07:00
b2497ded19 fix: refuse to add items non-fatally (#1476)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This is needed to complete to the railjack quest when already owning a railjack

Reviewed-on: #1476
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:04:30 -07:00
5f6b2330af chore: remove /Lotus/Types/Recipes/ from path-based logic (#1475)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Both recipes & MiscItems (recipe components) start with this.

Reviewed-on: #1475
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:04:16 -07:00
2bdb722986 fix: invalid format in inventory response for UpgradesExpiry (#1473)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1473
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:04:04 -07:00
3c79f910a2 feat: coda weapon vendor rotation (#1471)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1471
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-06 06:03:55 -07:00
65306e0478 chore(webui): update to German translation (#1469)
All checks were successful
Build / build (18) (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 34s
Build / build (22) (push) Successful in 1m21s
Build / build (20) (push) Successful in 37s
Reviewed-on: #1469
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-04-05 07:45:10 -07:00
49edebc1eb chore: fix controllers exporting non-RequestHandler things (#1468)
All checks were successful
Build / build (20) (push) Successful in 43s
Build / build (18) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 35s
Build / build (22) (push) Successful in 1m19s
I'm surprised JavaScript allows circular includes, but they still don't feel good.

Reviewed-on: #1468
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:52:35 -07:00
62263efde3 chore: simplify serversideVendorsService's api (#1467)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1467
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:52:13 -07:00
f66c958a3c feat: change alliance member permissions (#1466)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1466
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:51:54 -07:00
2ef59cd570 chore: split confirmGuildInvitation get & post controllers (#1465)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1465
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:51:37 -07:00
6bb74b026a feat: contribute to allied clan vault (#1462)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1462
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:51:23 -07:00
743a905de4 fix: ignore non-weapon entries in ExportWeapons for recipe login reward (#1461)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1461
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:51:10 -07:00
5c22949c6b chore: improve handling when config.json is missing & fix logger options (#1460)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1460
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-05 06:50:57 -07:00
651640c4d7 chore(vscode): recommend eslint extension
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (22) (push) Successful in 1m16s
Build / build (20) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 34s
2025-04-05 02:56:29 +02:00
1d1abf5550 chore: remove unused eslint-disable directives
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (20) (push) Successful in 1m16s
Build / build (18) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 33s
2025-04-05 02:54:06 +02:00
23267aa641 feat: leave alliance/kick alliance members (#1459)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (22) (push) Successful in 1m14s
Build / build (18) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1459
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 15:18:10 -07:00
d94b4fd946 chore: use parallelForeach in deleteGuild (#1458)
Some checks failed
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 1m12s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1458
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 15:16:57 -07:00
d5ff349746 fix: update TradesRemaining at daily reset (#1457)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1457
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 15:16:46 -07:00
2746e243c9 chore: add async-utils
All checks were successful
Build / build (22) (push) Successful in 44s
Build / build (20) (push) Successful in 1m15s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 36s
2025-04-04 15:12:25 +02:00
b3374eb66e feat: divvy alliance vault (#1455)
All checks were successful
Build / build (20) (push) Successful in 47s
Build / build (18) (push) Successful in 1m16s
Build / build (22) (push) Successful in 1m20s
Build Docker image / docker (push) Successful in 35s
Reviewed-on: #1455
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 06:03:12 -07:00
c18abab9c4 feat: handle miscItemFee in end of match upload (#1454)
Some checks failed
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1454
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 06:02:55 -07:00
61062e433f feat: personal decos in dojo & move dojo decos (#1451)
Some checks failed
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1451
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-04 06:02:40 -07:00
92e8ffd709 feat: alliance invites (#1452)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m11s
Build / build (22) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1452
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 19:04:21 -07:00
0b18932dd8 chore: remove duplicate conditional
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (20) (push) Successful in 1m12s
Build / build (18) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 33s
2025-04-04 02:46:32 +02:00
abeb17ce44 chore: add alliance information to getAccountInfo (#1439)
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 35s
Build / build (22) (push) Successful in 1m22s
Reviewed-on: #1439
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:41:01 -07:00
710470ca2d feat(webui): quests support (#1411)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1411
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-03 10:40:22 -07:00
5cc991baca fix: reduce DailyFocus by earned focus XP (#1448)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1448
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:40:02 -07:00
9eadc7fa21 feat: auto-contribute from clan vault (#1435)
Some checks failed
Build / build (20) (push) Successful in 39s
Build Docker image / docker (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
The wiki says this is also supposed to do partial fills, but didn't see that in my testing on live.

Reviewed-on: #1435
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:39:16 -07:00
ed10a89c1d feat: alliance motd (#1438)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1438
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:38:37 -07:00
0c2f72f9b1 fix: don't charge platinum for renaming kaithe (#1440)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1440
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:38:23 -07:00
d918b0c982 fix: don't remove consumed argon crystals from FoundToday (#1447)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
This fixes a possible mongo conflict when ticking them, and this is probably more desirable as you wanna consume unstable crystals first.

Reviewed-on: #1447
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:38:11 -07:00
05c0c9909c fix: ignore purchaseQuantity when giving mission rewards (#1446)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1446
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 10:37:52 -07:00
92cf85084f chore: remove needless query when sending clan invite (#1434)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 33s
Build / build (22) (push) Successful in 1m14s
Reviewed-on: #1434
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 06:17:38 -07:00
cfa9ec775e feat: handle creditsFee in missionInventoryUpdate (#1431)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1431
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-03 06:17:11 -07:00
d4d887a5a4 chore: prettier
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m18s
2025-04-03 00:34:26 +02:00
1b7b5a28bc chore: limit number of kubrow eggs that can be acquired at once
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (22) (push) Successful in 1m12s
Build / build (20) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 38s
2025-04-02 22:33:49 +02:00
6dc54ed893 feat: donate credits to alliance vault (#1436)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 1m8s
Build / build (22) (push) Successful in 37s
Build Docker image / docker (push) Successful in 49s
Reviewed-on: #1436
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-02 13:26:44 -07:00
2173bdb8b8 fix: clamp ItemCount within 32-bit integer range (#1432)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m25s
It seems the game uses 32-bit ints for these values on the C++ side before passing them on to Lua where they become floats. This would cause the game to have overflow/underflow semantics when receiving values outside of these bounds.

Reviewed-on: #1432
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-02 13:20:06 -07:00
74d9428a66 fix(webui): ignore MiscItems that don't have a name (#1429)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m16s
Build / build (22) (push) Successful in 40s
Build Docker image / docker (push) Successful in 52s
Reviewed-on: #1429
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-02 09:52:24 -07:00
dd7805cfb2 chore: fix some minor issues with ability infusions (#1426)
Some checks failed
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Reviewed-on: #1426
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-02 09:52:13 -07:00
c55aa8a0e1 chore: fix misplaced index
Some checks failed
Build / build (20) (push) Successful in 41s
Build / build (22) (push) Successful in 1m17s
Build / build (18) (push) Successful in 1m11s
Build Docker image / docker (push) Has been cancelled
2025-04-02 18:51:15 +02:00
24ed580a97 feat: create alliance (#1423)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 36s
Build / build (20) (push) Successful in 1m24s
Reviewed-on: #1423
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-02 04:59:21 -07:00
158310bda2 fix(webui): blacklist modular weapons from add missing (#1425)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (20) (push) Successful in 1m10s
Build / build (18) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1425
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-02 04:43:03 -07:00
2b451a19e6 chore: remove duplicate entries (#1424)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
CrewShipWeapons and CrewShipSalvagedWeapons already in equipmentFields

Reviewed-on: #1424
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-04-02 04:42:36 -07:00
bf67a4391d feat: eleanor weapon offerings (#1419)
All checks were successful
Build / build (20) (push) Successful in 35s
Build / build (18) (push) Successful in 1m10s
Build / build (22) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 31s
Need to do rotating offers for her some other time

Reviewed-on: #1419
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 15:49:08 -07:00
ea9333279b fix: handle CurrentLoadOutIds missing LoadOuts in missionInventoryUpdate (#1421)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1421
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 15:48:40 -07:00
9e1a5d50af chore: slightly more faithful cutoff for valence fusion (#1418)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m17s
Reviewed-on: #1418
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:29:51 -07:00
2091dabfc3 chore: use tsgo to verify types (#1417)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1417
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:29:41 -07:00
3a26d788a2 feat: zanuka capture (#1416)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1416
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:29:29 -07:00
367dd3f22d feat: consign pet (#1415)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1415
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:29:05 -07:00
404c747642 feat: getProfileViewingData for clans (#1412)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1412
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:28:48 -07:00
1a4ad8b7a5 feat: clan applications (#1410)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Reviewed-on: #1410
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-01 02:28:24 -07:00
4a3a3de300 chore: fix eslint warning
All checks were successful
Build / build (22) (push) Successful in 40s
Build / build (18) (push) Successful in 1m15s
Build / build (20) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 35s
2025-04-01 02:28:52 +02:00
7d5ea680e4 chore(webui): remove "<ARCHWING> " from item name (#1414)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 34s
Build / build (20) (push) Successful in 1m17s
Reviewed-on: #1414
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-31 13:59:18 -07:00
e2879a7808 chore(webui): update translations (#1413)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m21s
translations were taken from the game

Reviewed-on: #1413
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-31 13:54:55 -07:00
d033c2bc12 feat(webui): MoaPets support (#1402)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m19s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m17s
Translations were taken from the game

Reviewed-on: #1402
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-31 09:18:41 -07:00
fb58aeb07f chore: reimplement setWeaponSkillTree as a mongo query (#1406)
Some checks failed
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This is faster by like 1-2 ms

Reviewed-on: #1406
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 09:18:33 -07:00
3d69828610 fix: give non-exalted additional items when acquiring warframe (#1408)
Some checks failed
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Also upgraded `no-misused-promises` to an error and added `IsNew` field to powersuits.

Reviewed-on: #1408
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 09:18:25 -07:00
a0fa41cd58 chore: accept ObjectId for accountId when sending inbox messages (#1409)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1409
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 09:18:00 -07:00
9162522962 chore: update PE+ (#1407)
All checks were successful
Build / build (20) (push) Successful in 43s
Build / build (22) (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 38s
Build / build (18) (push) Successful in 1m33s
Reviewed-on: #1407
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:51:12 -07:00
42e08faaaf chore: handle account switching guilds (#1398)
All checks were successful
Build / build (18) (push) Successful in 45s
Build / build (20) (push) Successful in 1m16s
Build / build (22) (push) Successful in 45s
Build Docker image / docker (push) Successful in 49s
Plus some additional inventory cleanup when a guild is being deleted forcefully.
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:26:55 -07:00
9e0dd3e0a5 chore: run save operations in parallel where possible (#1401)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1401
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:26:44 -07:00
054abee62c chore: use inventory projection in sellController (#1399)
All checks were successful
Build / build (22) (push) Successful in 45s
Build / build (18) (push) Successful in 1m16s
Build / build (20) (push) Successful in 1m19s
Build Docker image / docker (push) Successful in 1m25s
Yeah, it's not pretty but it's a good amount faster.

Reviewed-on: #1399
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:16:09 -07:00
04d39ed973 chore: use SubdocumentArray.id in some more places (#1400)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1400
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:15:32 -07:00
b0f0b61d49 fix: allow completion of unknown nodes (#1395)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1395
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:15:00 -07:00
23f8901505 fix: reduce platinum cost of rushing recipes based on progress (#1393)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1393
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:14:35 -07:00
d3d966a503 feat: grustrag bolt (#1392)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1392
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:14:20 -07:00
48598c145f feat: guild ads (#1390)
Some checks failed
Build / build (22) (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1390
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-31 04:14:00 -07:00
01f04c287a fix: add RemovedIdItems to valence fusion response (#1397)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 1m12s
Build / build (22) (push) Successful in 36s
Build Docker image / docker (push) Successful in 50s
Reviewed-on: #1397
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 13:50:59 -07:00
9e99d0370c fix: align dojo component DestructionTime to full seconds (#1394)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
not doing this causes the client to spam requests and have some UI bugs

Reviewed-on: #1394
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 13:50:36 -07:00
516f822e43 feat: clan tiers (#1378)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m19s
Build / build (22) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 39s
Reviewed-on: #1378
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 09:58:51 -07:00
fccdbf4a8e fix: detect kuva weapons more reliably (#1388)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
it seems not all of them have the InnateDamageRandomMod or even VT_KUVA so just assuming that any weapon with max rank 40 that's not the ballas sword needs it
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 09:58:44 -07:00
cfc1524619 fix: give quest completion items from cheated completion too (#1376)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m16s
Build / build (22) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1376
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 08:13:24 -07:00
3beb1ecc42 chore: use ExportKeys for quests not in questCompletionItems (#1377)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1377
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 08:13:11 -07:00
779bc34082 feat(webui): adding kitgun (#1382)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1382
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 08:12:46 -07:00
b6167165fe chore(webui): put all ModularParts in itemLists (#1383)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1383
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 08:12:31 -07:00
b07e89ed72 chore(webui): update to German translation (#1386)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (22) (push) Successful in 1m15s
Build / build (20) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 38s
Reviewed-on: #1386
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-30 07:13:48 -07:00
f34e1615e2 fix(webui): show 0 rerolls instead NaN in Rivens (#1385)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m15s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 34s
Co-authored-by: Sainan <sainan@calamity.inc>
Reviewed-on: #1385
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 06:54:58 -07:00
c82cad7b02 chore(webui): update ru loc (#1384)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (20) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m15s
Reviewed-on: #1384
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 06:39:32 -07:00
725efcc72e chore: replace copyfiles with ncp (#1381)
All checks were successful
Build / build (22) (push) Successful in 43s
Build / build (20) (push) Successful in 1m14s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 36s
They're both unmaintained, but this one is smaller at least.

Reviewed-on: #1381
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 06:20:53 -07:00
fa34b99976 chore: improve login error for unknown email + no auto-create (#1379)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (20) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m17s
Reviewed-on: #1379
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 05:11:17 -07:00
d3819c25c5 feat(webui): gild action for modular equipment (#1375)
Some checks failed
Build / build (22) (push) Successful in 41s
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1375
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 05:10:32 -07:00
4cb883dabf feat(webui): adding modular K-Drives, Amps and Zaw (#1374)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1374
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-30 05:10:24 -07:00
c376ff25f3 chore: don't emit code when verifying types in CI (#1380)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m17s
Build / build (18) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1380
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 05:02:42 -07:00
f7ada5a7e5 chore: delete guild when founding warlord leaves (#1371)
All checks were successful
Build / build (18) (push) Successful in 46s
Build / build (22) (push) Successful in 1m16s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 35s
Reviewed-on: #1371
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-30 04:40:00 -07:00
1bdc5126b3 feat: lock worldState time via config (#1361)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (22) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 1m22s
Reviewed-on: #1361
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 15:42:42 -07:00
a7899d1c18 feat: give kahl standing when completing the new war (#1334)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (22) (push) Successful in 1m13s
Build / build (20) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 29s
Reviewed-on: #1334
2025-03-29 15:35:43 -07:00
895b9381ca chore: update eslint (#1373)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 30s
Build / build (20) (push) Successful in 1m30s
Reviewed-on: #1373
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 15:20:54 -07:00
9de0aee6f0 fix: dojo key blueprint not immediately showing up when creating clan
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m24s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m20s
2025-03-29 18:01:52 +01:00
69f544c8d1 chore: use inventory projection in updateInventoryForConfirmedGuildJoin
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
2025-03-29 18:01:15 +01:00
8cdcb209ae fix: remove clan key blueprint when removed from guild
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m20s
Build Docker image / docker (push) Successful in 30s
Build / build (22) (push) Successful in 1m27s
2025-03-29 17:49:14 +01:00
ab0d472c75 chore: delete clan invite email when member is kicked before accepting (#1370)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1370
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 09:48:45 -07:00
e266f9e36c fix: save login reward was claimed on milestone days (#1367)
All checks were successful
Build / build (18) (push) Successful in 47s
Build / build (20) (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 34s
Build / build (22) (push) Successful in 1m21s
Reviewed-on: #1367
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 09:28:12 -07:00
6a1e508109 feat: initial vendor rotations (#1360)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1360
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 09:27:56 -07:00
a167216730 feat: WeaponSkins IsNew flag (#1347)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1347
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 09:27:38 -07:00
30ae95bec8 fix: insufficient guild projection in addToGuildController
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (20) (push) Successful in 1m17s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m32s
2025-03-29 17:24:42 +01:00
dcc2b903ac feat: maturePet (#1355)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 1m27s
Reviewed-on: #1355
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-28 15:50:44 -07:00
3a904753f2 chore: accurate infested pet traits (#1356)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m21s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m12s
Reviewed-on: #1356
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-28 06:49:29 -07:00
212b7b1ce9 chore(webui): kDrive typo (#1357)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1357
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-28 06:49:19 -07:00
92e647a0fd chore: fill out all details for infested pets
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 34s
Build / build (18) (push) Successful in 1m26s
2025-03-28 11:53:27 +01:00
aa7d5067bc feat: retrievePetFromStasis (#1354)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m17s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 32s
Closes #621

Reviewed-on: #1354
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-28 03:08:22 -07:00
ae5a540975 feat: crafting infested cats and dogs (#1352)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1352
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-28 03:08:02 -07:00
eb332d5e32 feat(webui): ability to add mutagens and antigens via "add items" (#1349)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1349
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-28 03:07:39 -07:00
b14927d605 fix: handle recipes requiring non-MiscItem items (#1348)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
e.g. mutagens and antigens require vome and fass residue which are consumables

Reviewed-on: #1348
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-28 03:07:30 -07:00
24c288fe61 chore: handle email address starting with @
All checks were successful
Build / build (18) (push) Successful in 52s
Build / build (20) (push) Successful in 1m13s
Build / build (22) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 31s
2025-03-28 01:02:06 +01:00
aad3a7bcf7 chore: update vendor purchase response
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (20) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 30s
Build / build (18) (push) Successful in 1m21s
2025-03-28 00:17:47 +01:00
692dfaf0a5 feat: respect Settings.GuildInvRestriction for addToGuild (#1345)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m13s
Build / build (22) (push) Successful in 38s
Build Docker image / docker (push) Successful in 46s
Reviewed-on: #1345
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-27 12:57:57 -07:00
36d2b2dda5 feat: gifting (#1344)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1344
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-27 12:57:44 -07:00
a56ff89bb9 feat: equipment IsNew flag (#1309)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 31s
Build / build (20) (push) Successful in 1m22s
Reviewed-on: #1309
2025-03-27 12:27:38 -07:00
ba795150a9 chore: fix shape of RecentVendorPurchases in InventoryChanges
All checks were successful
Build / build (20) (push) Successful in 44s
Build / build (18) (push) Successful in 1m18s
Build / build (22) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 30s
2025-03-27 16:45:33 +01:00
2b9eb1844d chore: use inventory projection for saveSettingsController
All checks were successful
Build / build (20) (push) Successful in 1m11s
Build / build (22) (push) Successful in 44s
Build Docker image / docker (push) Successful in 47s
Build / build (18) (push) Successful in 1m25s
2025-03-27 12:49:26 +01:00
2516af9acc chore: fix saveSettingsController
All checks were successful
Build / build (18) (push) Successful in 58s
Build / build (20) (push) Successful in 1m14s
Build / build (22) (push) Successful in 45s
Build Docker image / docker (push) Successful in 45s
2025-03-27 12:30:12 +01:00
fd93f34538 chore: simplify logoutController (#1342)
All checks were successful
Build / build (20) (push) Successful in 45s
Build / build (18) (push) Successful in 1m14s
Build / build (22) (push) Successful in 1m23s
Build Docker image / docker (push) Successful in 1m9s
Reducing 3-4 MongoDB operations to only 1.

Reviewed-on: #1342
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-27 03:33:39 -07:00
a622393933 chore: don't validate Nonce in query (#1341)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
By asking MongoDB to simply find the account by the ID and then validating the nonce ourselves, we save roughly 1ms.

Reviewed-on: #1341
2025-03-27 03:33:27 -07:00
d9b944175a feat: view clan contributions (#1340)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1340
2025-03-27 03:33:08 -07:00
36c7b6f8f8 feat: handle DiscoveredMarkers in missionInventoryUpdate (#1339)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #679

Reviewed-on: #1339
2025-03-27 03:32:50 -07:00
5f9475f750 fix: only give normal variant blueprints from daily tribute (#1332)
All checks were successful
Build / build (20) (push) Successful in 49s
Build / build (18) (push) Successful in 1m17s
Build / build (22) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 50s
you definitely shouldn't get prime or kuva variants

Reviewed-on: #1332
2025-03-26 16:09:05 -07:00
7492ddaad7 feat: handle CapturedAnimals in missionInventoryUpdate (#1337)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1337
2025-03-26 16:08:33 -07:00
926b87dda0 chore: cleanup leaderboards stuff
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (18) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 36s
Build / build (20) (push) Successful in 1m19s
2025-03-26 22:46:30 +01:00
83b267bcf5 fix: restrict transmutation polarity when a transmute core is being used (#1336)
All checks were successful
Build / build (18) (push) Successful in 43s
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 1m18s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1336
2025-03-26 14:22:09 -07:00
401f1ed229 feat: hubBlessing.php (#1335)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1335
2025-03-26 14:21:58 -07:00
049f709713 feat(leaderboard): missions & guilds leaderboard (#1338)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1338
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-26 14:21:22 -07:00
0f7866a575 fix: handle weapon meta having an empty defaultUpgrades array (#1333)
All checks were successful
Build / build (18) (push) Successful in 50s
Build / build (22) (push) Successful in 1m11s
Build / build (20) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1333
2025-03-26 05:09:48 -07:00
aea1787908 chore: handle nameFromEmail being empty
All checks were successful
Build / build (18) (push) Successful in 1m13s
Build / build (20) (push) Successful in 1m13s
Build / build (22) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 45s
2025-03-26 00:28:35 +01:00
0fc1326255 fix(webui): refresh inventory after changing server cheats (#1331)
All checks were successful
Build / build (20) (push) Successful in 44s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 41s
Build / build (22) (push) Successful in 1m24s
Reviewed-on: #1331
2025-03-25 15:12:31 -07:00
8221674098 chore(webui): handle index.html being opened as a file (#1329)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1329
2025-03-25 15:12:20 -07:00
5597bfe876 feat: custom obstacle course leaderboard (#1326)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1326
2025-03-25 15:12:09 -07:00
06ce4ac695 chore: more faithful handling of daily tribute (#1324)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1324
2025-03-25 15:11:26 -07:00
bfcd928fde feat: nightwave rank up rewards (#1320)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (20) (push) Successful in 1m10s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1320
2025-03-25 06:38:44 -07:00
58508a0260 feat: nightwave challenge completion (#1319)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1319
2025-03-25 06:38:37 -07:00
eccea4ae54 feat: nightwave challenge rotation (#1317)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1317
2025-03-25 06:38:30 -07:00
31c1fc245f fix: instantly finish free dojo decos (e.g. obstacle course gates) (#1321)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m12s
Build / build (22) (push) Successful in 1m18s
Build Docker image / docker (push) Successful in 37s
Reviewed-on: #1321
2025-03-25 03:26:32 -07:00
3ba58114b9 fix: ignore parts without premiumPrice when generating daily special (#1316)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1316
2025-03-25 03:26:18 -07:00
a12e5968da feat: race leaderboards (#1314)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Initial leaderboard system. Currently only tracking races, tho.

Reviewed-on: #1314
2025-03-25 03:25:58 -07:00
2ec2b0278a chore: use model.findById where possible (#1315)
All checks were successful
Build / build (20) (push) Successful in 51s
Build / build (18) (push) Successful in 1m14s
Build / build (22) (push) Successful in 1m24s
Build Docker image / docker (push) Successful in 41s
Reviewed-on: #1315
2025-03-24 11:32:08 -07:00
4afc8bc8c6 chore: use inventory projection for updateChallengeProgress (#1313)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1313
2025-03-24 11:32:01 -07:00
e65393f433 chore: use json-with-bigint for JSON.stringify hook (#1312)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1312
2025-03-24 11:31:53 -07:00
3e2e73f6eb feat: handle Boosters in missionInventoryUpdate (#1311)
All checks were successful
Build / build (18) (push) Successful in 1m12s
Build / build (20) (push) Successful in 1m11s
Build / build (22) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 43s
Closes #751

Reviewed-on: #1311
2025-03-24 01:38:32 -07:00
ac25ee5118 feat: redeemPromoCode (#1310)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1310
2025-03-24 01:38:08 -07:00
0085c20e11 feat(import): additional fields (#1305)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (20) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m20s
Reviewed-on: #1305
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-23 13:33:26 -07:00
a77c1906bf chore: add custom getAccountInfo endpoint (#1300)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m12s
This will help the IRC server get all the information it needs for permission management in a single request.

Reviewed-on: #1300
2025-03-23 13:17:14 -07:00
e7605a2e17 fix: use IMongoDate for EntratiVaultCountResetDate in inventory response (#1308)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 30s
Build / build (22) (push) Successful in 1m27s
Reviewed-on: #1308
2025-03-23 13:09:38 -07:00
db8bff20fe fix: only roll unique rewards for peely pix booster packs (#1306)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1306
2025-03-23 13:09:13 -07:00
19bfffaa7c fix: give helmet when acquiring a skin (#1304)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1304
2025-03-23 13:09:02 -07:00
d0df9e3731 chore: remove unused junctionRewards.json
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (22) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 1m31s
2025-03-23 21:05:31 +01:00
8a29f06207 chore: use inventory projection for updateTheme (#1302)
All checks were successful
Build / build (18) (push) Successful in 52s
Build / build (20) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 38s
Build / build (22) (push) Successful in 1m26s
Reviewed-on: #1302
2025-03-23 09:06:28 -07:00
cf3007b744 chore: update config when admin changes their name (#1298)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1298
2025-03-23 09:06:08 -07:00
7f5592e00c chore: improve authentication and Dropped logic (#1296)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
- Dropped is now also unset by getAccountForRequest
- Improved how nonce is validated to avoid possible parser mismatch issues to smuggle a 0
- Updated ircDroppedController to perform only a single MongoDB operation

Reviewed-on: #1296
2025-03-23 09:05:47 -07:00
c3d7ae33c2 chore: do 'git stash' before hard reset
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (18) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m11s
Just in case the user made local changes and then runs the bat we don't wanna have it be irrecoverably lost.
2025-03-23 16:40:48 +01:00
aa12708738 chore: make addItem return InventoryChanges directly (#1299)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (20) (push) Successful in 1m19s
Build / build (22) (push) Successful in 43s
Build Docker image / docker (push) Successful in 41s
Reviewed-on: #1299
2025-03-23 08:26:46 -07:00
cf125b5355 chore: prettier
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m13s
2025-03-23 13:59:22 +01:00
5277f7cc37 feat(import): loc pins (#1297)
All checks were successful
Build / build (18) (push) Successful in 46s
Build / build (20) (push) Successful in 1m11s
Build / build (22) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1297
2025-03-23 05:20:48 -07:00
b5a0a2297e feat: acquisition of peely pix + free pack for first visit (#1292)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 33s
Build / build (22) (push) Successful in 1m18s
Reviewed-on: #1292
2025-03-23 05:07:15 -07:00
e0d31b8988 feat: entratiLabConquestMode.php (#1291)
Some checks failed
Build / build (22) (push) Successful in 38s
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1291
2025-03-23 05:06:31 -07:00
bc6f03b7c9 feat: toggle wishlisted items (#1289)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1289
2025-03-23 05:06:06 -07:00
5817b48db9 fix: use deleteMany for models where accountId is not unique when deleting account (#1290)
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m11s
Build / build (20) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1290
2025-03-22 18:12:59 -07:00
5a56c2e9d3 feat: ascension ceremony inbox message (#1284)
All checks were successful
Build / build (18) (push) Successful in 44s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m7s
Build / build (22) (push) Successful in 1m10s
Reviewed-on: #1284
2025-03-22 17:35:52 -07:00
7414658340 fix: add missing items from codex objects list to allScans (#1282)
Some checks failed
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Waiting to run
Build / build (20) (push) Has been cancelled
Reviewed-on: #1282
2025-03-22 17:35:34 -07:00
4b3b551ba7 fix: properly commit boosters to inventory (#1279)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1279
2025-03-22 17:35:18 -07:00
b8e3be5018 chore: add IOtherDialogueInfo
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (22) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m25s
2025-03-22 21:11:16 +01:00
57786bfffb fix: don't touch NemesisAbandonedRewards when spawning a lich (#1275)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m12s
Because this can contain both grineer and corpus weapons, I think we should simply defer to the client's missionInventoryUpdate request in this matter.
This still leaves open the possibility of the client crashing between spawning the lich and finishing the mission, but that's rather unlikely, I guess.

Reviewed-on: #1275
2025-03-22 07:30:29 -07:00
a0453ca61d feat: nemesis mode p (#1276)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1276
2025-03-22 07:30:16 -07:00
16bfcc44d5 chore(webui): update to translation files (#1278)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 30s
Build / build (18) (push) Successful in 1m28s
- Update to German translation.
- Added the new (previously missing) untranslated string to the other files.

Reviewed-on: #1278
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-22 06:44:05 -07:00
c6a2785175 feat: clearing lich infuance (#1270)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m12s
Reviewed-on: #1270
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-22 06:08:00 -07:00
beb02bffb0 chore(webui): say "successfully removed" when using a negative quantity (#1271)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m12s
Reviewed-on: #1271
2025-03-22 03:37:06 -07:00
468ede680a chore(webui): update russain translations (#1273)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1273
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-22 03:36:55 -07:00
42aca103ed feat: handle ShipDecorations in missionInventoryUpdate (#1267)
All checks were successful
Build / build (20) (push) Successful in 1m7s
Build / build (18) (push) Successful in 1m10s
Build / build (22) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 39s
Reviewed-on: #1267
2025-03-22 01:15:09 -07:00
aa95074ee0 chore(webui): give feedback via toasts instead of alerts (#1269)
All checks were successful
Build / build (20) (push) Successful in 1m8s
Build / build (18) (push) Successful in 1m13s
Build / build (22) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 38s
Reviewed-on: #1269
2025-03-22 01:10:41 -07:00
5038095c13 fix(webui): hide unapplicable server settings elements (#1266)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (20) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m19s
Reviewed-on: #1266
2025-03-21 05:20:01 -07:00
3b16ff9b54 feat: getProfileViewingData for players (#1258)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1258
2025-03-21 05:19:53 -07:00
6598318fc5 feat: daily tribute (#1241)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #367

Reviewed-on: #1241
2025-03-21 05:19:42 -07:00
e83970d326 chore(stats): fix eslint warnings (#1262)
All checks were successful
Build / build (18) (push) Successful in 45s
Build / build (20) (push) Successful in 1m12s
Build / build (22) (push) Successful in 40s
Build Docker image / docker (push) Successful in 40s
Reviewed-on: #1262
2025-03-21 04:02:49 -07:00
3c87dd56ca feat(stats): Ollie's Crash Course Rewards (#1260)
All checks were successful
Build / build (20) (push) Successful in 43s
Build / build (22) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 1m18s
Reviewed-on: #1260
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-21 03:40:20 -07:00
7d3f2e8796 feat(stats): minigame stats (#1249)
All checks were successful
Build / build (22) (push) Successful in 53s
Build / build (18) (push) Successful in 1m16s
Build / build (20) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 44s
Reviewed-on: #1249
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-21 02:40:04 -07:00
4cd35ef4d9 fix(webui): can't acquire entrati lanthorn
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m10s
Build / build (22) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 32s
2025-03-21 00:48:58 +01:00
9b16dc2c6a feat: valence fusion (#1251)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 1m8s
Build / build (22) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1251
2025-03-20 15:27:37 -07:00
9d90a3ca26 fix: handle creation of infested lich (#1252)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
just setting the höllvania nodes and preventing the generation of a weapon index

Reviewed-on: #1252
2025-03-20 15:27:15 -07:00
b761ff1bff fix: tell client of PrimeTokens inventory change when buying from varzia (#1243)
All checks were successful
Build / build (18) (push) Successful in 1m15s
Build / build (22) (push) Successful in 42s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 42s
Reviewed-on: #1243
2025-03-20 10:08:00 -07:00
31ad97e215 feat: valence swap (#1244)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 43s
Build / build (22) (push) Successful in 41s
Reviewed-on: #1244
2025-03-20 09:50:33 -07:00
9150d036d7 feat: installation of valence adapter (#1240)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1240
2025-03-20 09:50:22 -07:00
1b4aee0b90 chore(webui): update to German translation (#1242)
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (20) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 45s
Build / build (18) (push) Successful in 43s
Translated the new `cheats_intrinsicsUnlockAll` string.

Reviewed-on: #1242
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-20 07:23:16 -07:00
88c5999d07 chore: use SubdocumentArray.id in upgradesController (#1238)
All checks were successful
Build / build (18) (push) Successful in 45s
Build / build (22) (push) Successful in 1m6s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1238
2025-03-20 05:50:48 -07:00
f0ebeab74e fix: when acquiring lich weapon, add innate damage (#1237)
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m14s
Build / build (20) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 32s
just fully randomised right now but better than adding these in a 'broken' state

Reviewed-on: #1237
2025-03-20 05:37:53 -07:00
352c6df339 fix: default PlacedDecos in schema to [] to match the type (#1235)
Some checks failed
Build / build (20) (push) Successful in 43s
Build / build (18) (push) Successful in 1m9s
Build Docker image / docker (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1235
2025-03-20 05:36:45 -07:00
6135fdcdb9 fix: remove credits & ducats for purchases from baro (#1232)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1232
2025-03-20 05:36:36 -07:00
2334e76453 feat(webui): max rank all intrinsics (#1230)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1230
2025-03-20 05:36:29 -07:00
3986dac8ef fix: buying flawed mods on iron wake doesn't consume credits (#1228)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1228
2025-03-20 05:36:17 -07:00
0e1973e246 feat: start nemesis (#1227)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Closes #446

As discussed there, some support for 64-bit integers without precision loss had to be hacked in.

Reviewed-on: #1227
2025-03-20 05:36:09 -07:00
ae05172ad8 chore: update PE+ for 38.5.0
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m8s
2025-03-20 01:09:39 +01:00
6eebf0aa84 chore: update request handling for 38.5.0
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m4s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 30s
2025-03-19 20:38:14 +01:00
c98d872d52 chore: use projection for drones request when possible (#1231)
All checks were successful
Build / build (18) (push) Successful in 43s
Build / build (20) (push) Successful in 1m3s
Build / build (22) (push) Successful in 40s
Build Docker image / docker (push) Successful in 39s
Reviewed-on: #1231
2025-03-18 04:24:22 -07:00
2a703de0cb chore: replace instances of new Date().getTime() with Date.now() (#1229)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #1229
2025-03-18 04:24:11 -07:00
8728cf3abf fix(webui): add riven placeholder text
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m12s
Build / build (20) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 35s
2025-03-18 10:00:12 +01:00
3e460c5728 chore: update RewardSeed in database after generating a new one (#1226)
All checks were successful
Build / build (22) (push) Successful in 40s
Build / build (20) (push) Successful in 1m6s
Build / build (18) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1226
2025-03-18 01:45:16 -07:00
f78616980a feat: archon hunt rotation (#1220)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1220
2025-03-18 01:45:08 -07:00
b4da457501 feat: mastery rank up inbox message (#1206)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (22) (push) Successful in 1m4s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 32s
Closes #1203

Reviewed-on: #1206
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-17 12:23:17 -07:00
f2afa6bb55 chore: add GuildAdvertisementVendorManifest (#1221)
All checks were successful
Build / build (22) (push) Successful in 44s
Build / build (18) (push) Successful in 1m8s
Build / build (20) (push) Successful in 1m0s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1221
2025-03-17 10:43:59 -07:00
7b866a2f71 fix(webui): unable to add relics (#1222)
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (18) (push) Successful in 1m9s
Build / build (20) (push) Successful in 59s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1222
2025-03-17 10:06:25 -07:00
3eb5c366df fix(webui): ignore empty archon shard slots
Some checks failed
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m9s
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
2025-03-17 18:05:27 +01:00
6f3f1fe5b9 fix: syndicate mission oids being longer than 24 chars
All checks were successful
Build / build (18) (push) Successful in 43s
Build / build (20) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m10s
2025-03-17 14:33:47 +01:00
0be54dd7ce feat: purchase modular weapon from daily special (#1217)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (20) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m14s
Closes #685

Reviewed-on: #1217
2025-03-17 05:10:44 -07:00
1d091e3c4c chore: remove consumables, recipes, etc. from array when their ItemCount becomes 0 (#1216)
Some checks failed
Build / build (22) (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1216
2025-03-17 05:10:28 -07:00
6d12d90877 chore: add indexes for various models (#1213)
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 31s
Build / build (20) (push) Successful in 1m14s
These are looked up by the owner account id and/or assumed to exist only once per account.
No index was added for "Ships" as that does not match these critera.

Reviewed-on: #1213
2025-03-16 08:46:02 -07:00
943edf7065 chore: use updateOne for active focus way change
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m7s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 32s
2025-03-16 16:41:39 +01:00
1d23f2736f chore: use inventory projection for getGuild requests (#1212)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m6s
Build / build (22) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 37s
Reviewed-on: #1212
2025-03-16 08:16:49 -07:00
05356af9bd chore: use updateOne for simple inventory field setters (#1211)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
e.g. changing syndicate pledge now takes ~6 ms instead of ~84 ms.

Reviewed-on: #1211
2025-03-16 08:16:27 -07:00
818e09d4af fix: only track clan log dateTime once contributions are done (#1210)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1210
2025-03-16 08:16:11 -07:00
c3a9b42fa2 fix: update slots where addEquipment is used (#1207)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m7s
Build / build (22) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1207
2025-03-16 04:33:48 -07:00
651ab5f6f1 feat: death marks (#1205)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1205
2025-03-16 04:33:21 -07:00
b7f05e851c fix: handle high spoofed mastery rank plus noDailyStandingLimits (#1201)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
In case the spoofed mastery rank is so high that 999,999 is *less* than the assumed maximum value for daily affiliation bins, we'll just use that so that the bar is always (at least) 100% full.

Reviewed-on: #1201
2025-03-16 04:33:12 -07:00
ecc2e35535 feat: randomly generate daily modular weapon sales (#1199)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Re #685

Reviewed-on: #1199
2025-03-16 04:32:57 -07:00
ab11f67f0b feat: clan polychrome research (#1177)
Some checks failed
Build / build (18) (push) Successful in 46s
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1177
2025-03-16 04:32:11 -07:00
56a372ee6f chore(webui): update to German translation (#1204)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m11s
Reviewed-on: #1204
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-15 12:44:46 -07:00
56fecef1bf chore: set HasOwnedVoidProjectionsPreviously when acquiring a relic (#1198)
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m10s
Reviewed-on: #1198
2025-03-15 10:25:32 -07:00
adddc11b6f fix: limit booster pack purchases to a max quantity of 100 (#1189)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1189
2025-03-15 10:25:15 -07:00
2d6e096fde feat: argon crystal decay (#1195)
All checks were successful
Build / build (20) (push) Successful in 42s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m13s
Build / build (22) (push) Successful in 1m10s
Reviewed-on: #1195
2025-03-15 06:39:54 -07:00
2f59b3d775 chore(webui): update to German and Chinese translation file (#1196)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 2m30s
- Translated the latest new vendor string into German in `de.js`
- Added the `[UNTRANSLATED] No Vendor Purchase Limits` placeholder string in `zh.js` because that file was missed.

Reviewed-on: #1196
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-15 06:33:21 -07:00
294bedd29a fix(stats): add captures to stat model (#1191)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m10s
Build / build (22) (push) Successful in 41s
Build Docker image / docker (push) Successful in 42s
Reviewed-on: #1191
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-15 03:48:47 -07:00
ae9a98ca8b fix(stats): handle eidolon capture (#1190)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m14s
Reviewed-on: #1190
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-15 03:25:02 -07:00
2891e2fef5 chore: fix various eslint issues (#1176)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1176
2025-03-15 03:24:39 -07:00
db20369eb9 feat: add config options for event boosters (#1184)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (22) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m10s
Reviewed-on: #1184
2025-03-15 03:21:54 -07:00
25dfbf4724 feat: edit clan tax rate (#1183)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1183
2025-03-15 03:21:40 -07:00
114e175efb chore: set HWIDProtectEnabled so trading post can be used (#1182)
Some checks failed
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #1182
2025-03-15 03:21:26 -07:00
0facdd1af9 chore: check permissions for various clan requests (#1175)
All checks were successful
Build / build (18) (push) Successful in 45s
Build / build (20) (push) Successful in 1m4s
Build / build (22) (push) Successful in 41s
Build Docker image / docker (push) Successful in 51s
Reviewed-on: #1175
2025-03-14 07:09:28 -07:00
236cccc137 fix: remove dojo key after being kicked from clan
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (20) (push) Successful in 1m3s
Build / build (18) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 34s
2025-03-14 11:21:56 +01:00
0c06776985 feat: track RoomChanges in clan log (#1174)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (22) (push) Successful in 1m4s
Build / build (18) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 34s
Final part for clan log; closes #1152

Reviewed-on: #1174
2025-03-14 02:07:08 -07:00
6508d16190 feat: track RosterActivity in clan log (#1173)
All checks were successful
Build / build (18) (push) Successful in 47s
Build / build (20) (push) Successful in 1m4s
Build / build (22) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1173
2025-03-13 10:46:08 -07:00
3a995ef6d1 chore: specify minimum typescript version required to compile
All checks were successful
Build / build (18) (push) Successful in 1m5s
Build / build (20) (push) Successful in 58s
Build Docker image / docker (push) Successful in 42s
Build / build (22) (push) Successful in 1m5s
2025-03-13 13:26:24 +01:00
de4fe0311c feat: trade in modular weapons for standing (#1172)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #1055

Reviewed-on: #1172
2025-03-13 05:25:46 -07:00
292ac9d41b fix: deduct 5000 credits for crafting a zaw (#1168)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 56s
Reviewed-on: #1168
2025-03-13 04:26:06 -07:00
a029c288b7 fix: free slot when selling or otherwise getting rid of items (#1169)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1169
2025-03-13 04:25:59 -07:00
6490fadcae feat: track vendor purchases (#1153)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 1m4s
Build / build (22) (push) Successful in 57s
Build Docker image / docker (push) Successful in 33s
Closes #739

Also adds the `noVendorPurchaseLimits` cheat to disable the logic, which is enabled by default due to lack of vendor rotations.

Reviewed-on: #1153
2025-03-13 02:14:53 -07:00
b7800b6d20 feat: edit clan hierarchy (#1164)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Re #1144

Reviewed-on: #1164
2025-03-13 02:14:29 -07:00
516df61633 chore: add "project status" section to readme (#1166)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Explicitly pointing out the issue tracking should give people a better idea of the project and allow them to set expectations accordingly.

Reviewed-on: #1166
2025-03-13 02:14:21 -07:00
2ad95aecb6 chore: npm update (#1162)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 35s
Build / build (22) (push) Successful in 1m3s
The package-lock.json is smaller now, that seems good.

Reviewed-on: #1162
2025-03-12 07:59:35 -07:00
5ca72d75e2 feat: promote & demote clan members (#1163)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Re #1144

Reviewed-on: #1163
2025-03-12 07:59:29 -07:00
073eddc050 feat: track TechChanges in clan log (#1160)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Re #1152

Reviewed-on: #1160
2025-03-12 07:59:20 -07:00
42799fee7b fix(webui): Chinese translation of Traumatic Peculiar mod name (#1161)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m4s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1161
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-12 06:31:14 -07:00
02ce0f57a6 chore: faithful response to getGuild & getGuildLog when not in a clan (#1159)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 1m2s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1159
2025-03-12 05:10:26 -07:00
8daf0c9eda fix(webui): add mods regression
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (22) (push) Successful in 1m1s
Build / build (18) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 33s
2025-03-12 12:41:45 +01:00
be6e5ce250 feat: track ClassChanges in clan log (#1157)
All checks were successful
Build / build (22) (push) Successful in 43s
Build / build (20) (push) Successful in 1m2s
Build / build (18) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
Re #1152

Reviewed-on: #1157
2025-03-12 01:08:15 -07:00
7acb54922f fix: occupy a sentinel slot for sentinel weapons (#1156)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 33s
Build / build (18) (push) Successful in 1m13s
Fixes #1155

Reviewed-on: #1156
2025-03-11 13:00:12 -07:00
4e0494f15d fix: ignore purchaseQuantity when getting slots via a bundle (#1151)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m6s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 34s
Fixes #1149

Reviewed-on: #1151
2025-03-11 10:32:44 -07:00
d24aac2ab2 feat: clan name discriminators (#1147)
Some checks failed
Build / build (22) (push) Successful in 41s
Build / build (20) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #1145

Reviewed-on: #1147
2025-03-11 10:31:56 -07:00
1b54bcd1e0 feat(webui): Chinese translation (#1154)
All checks were successful
Build / build (18) (push) Successful in 44s
Build / build (20) (push) Successful in 1m4s
Build / build (22) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 36s
Co-authored-by: Belenus <hello.belenus@proton.me>
Reviewed-on: #1154
2025-03-11 17:14:33 +01:00
38dfe14776 feat: fabricate research (#1150)
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (20) (push) Successful in 1m2s
Build / build (18) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 36s
Closes #910

Reviewed-on: #1150
2025-03-11 07:56:18 -07:00
ead7b67efc chore: remove ts-node dependency (#1148)
All checks were successful
Build / build (20) (push) Successful in 42s
Build / build (18) (push) Successful in 1m4s
Build / build (22) (push) Successful in 54s
Build Docker image / docker (push) Successful in 41s
We either use ts-node-dev or compile to JS and then run that so this isn't needed.

Reviewed-on: #1148
2025-03-11 02:04:25 -07:00
fae6615df4 feat: clan members (#1143)
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (20) (push) Successful in 58s
Build / build (18) (push) Successful in 58s
Build Docker image / docker (push) Successful in 33s
Now you can add/remove members and accept/decline invites.

Closes #1110

Reviewed-on: #1143
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-10 16:40:40 -07:00
00f6a8bd6d chore: disable cheats by default (#1139)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 58s
Build / build (22) (push) Successful in 48s
Build Docker image / docker (push) Successful in 31s
The config.json.example is now has all cheats/time-savers disabled so it's as faithful as possible.

Reviewed-on: #1139
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-10 16:22:38 -07:00
b553097fe4 fix: handle quest completion via missionInventoryUpdate (#1140)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Partial fix for #1126

Reviewed-on: #1140
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-10 16:22:02 -07:00
29275fcfdd feat(WebUI): German translation (#1142)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m1s
Build / build (22) (push) Successful in 57s
Build Docker image / docker (push) Successful in 37s
2025-03-10 20:03:05 +01:00
b0b52ccabe chore: update package-lock.json
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m0s
Build / build (20) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 31s
2025-03-10 10:28:52 +01:00
cadb6bc97b fix: logic error
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m0s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 33s
2025-03-10 09:15:11 +01:00
4937cf7f59 fix: handle refresh request for a single dojo component (#1136)
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 1m1s
Build / build (22) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1136
2025-03-09 11:16:17 -07:00
758135d19b feat(webui): add resource drones & their blueprints via "add items" (#1137)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Closes #1133

Reviewed-on: #1137
2025-03-09 11:15:45 -07:00
1ae1cf5170 fix: can't rush dojo components with infinitePlatinum (#1138)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1138
2025-03-09 11:15:33 -07:00
0ffa9c6bc4 feat: clan motd (#1134)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 1m0s
Build / build (20) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1134
2025-03-09 07:47:32 -07:00
814f4cfdad fix: consume resources & standing required for gilding (#1132)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Fixes #1122

Reviewed-on: #1132
2025-03-09 07:47:24 -07:00
d5feec2c37 chore: track inventory changes when cracking relic via addMissionRewards (#1131)
All checks were successful
Build / build (18) (push) Successful in 42s
Build / build (20) (push) Successful in 59s
Build / build (22) (push) Successful in 40s
Build Docker image / docker (push) Successful in 41s
Closes #1120

Reviewed-on: #1131
2025-03-09 07:43:30 -07:00
1c276ce133 feat: stripped rewards (#1123)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Waiting to run
Closes #683

Reviewed-on: #1123
2025-03-09 07:42:55 -07:00
6b35408144 chore: don't install dev dependencies for basic usage (#1135)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 33s
Build / build (20) (push) Successful in 1m8s
Reviewed-on: #1135
2025-03-09 07:41:24 -07:00
f6513420be feat: login conflict (#1127)
Some checks failed
Build / build (20) (push) Successful in 40s
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1076

Reviewed-on: #1127
2025-03-09 07:40:37 -07:00
3da02385f9 chore: auto-detect 'my address', only use config as fallback (#1125)
All checks were successful
Build / build (18) (push) Successful in 43s
Build / build (20) (push) Successful in 59s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 33s
This is useful for LAN usage where we can use localhost on our own machine but have to use 192.168.x.y on other devices.

Reviewed-on: #1125
2025-03-09 05:45:11 -07:00
3af15881f5 fix: failure to remove shard installed via webui (#1129)
All checks were successful
Build / build (18) (push) Successful in 43s
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 1m0s
Build Docker image / docker (push) Successful in 48s
Fixes #1128

Reviewed-on: #1129
2025-03-09 03:41:12 -07:00
92d53e1c00 chore: improve addMissionInventoryUpdates (#1121)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (22) (push) Successful in 58s
Build / build (18) (push) Successful in 58s
Build Docker image / docker (push) Successful in 34s
Closes #1119

Reviewed-on: #1121
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 06:29:05 -08:00
3853fda60d feat: track NemesisAbandonedRewards (#1118)
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m0s
Build / build (22) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 31s
Re #446

Reviewed-on: #1118
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 05:36:06 -08:00
901263ada3 feat: transmutation (#1112)
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 59s
Build / build (22) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 33s
Closes #1098

Reviewed-on: #1112
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:34:41 -08:00
d7e3f33ecf feat: add custom getName endpoint (#1108)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This can be useful for an IRC server to validate the accountId & nonce given and ensure the nickname matches.

Reviewed-on: #1108
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:34:14 -08:00
7fdb37f2e8 fix: donate platinum from clan vault (#1107)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1107
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:34:00 -08:00
457663f14a fix: claim recipe response (#1106)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixes #1105

The client already 'knows' the ItemCount was decremented so when we also say it in the response, it actually ends up causing the client to think the recipe was used twice.

Reviewed-on: #1106
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:33:45 -08:00
ec1f504bae chore(webui): allow negative quantity for "add items" & "add mods" (#1113)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Closes #1111

Reviewed-on: #1113
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:33:33 -08:00
6142b8d2dc feat: config option for star days event (#1104)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m2s
Build / build (22) (push) Successful in 54s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1104
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:28:05 -08:00
537fe5dcd1 fix: ensure exalted weapons are given from giveStartingGear (#1092)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixes #1020

Reviewed-on: #1092
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:27:11 -08:00
5a843dfe53 fix: icon for welcome message (#1115)
Some checks failed
Build / build (20) (push) Successful in 38s
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1114

Reviewed-on: #1115
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 04:26:24 -08:00
6c7e8e908e fix: set ArchwingEnabled to true when obtaining an archwing (#1091)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 1m1s
Build / build (22) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 33s
Closes #984

Reviewed-on: #1091
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-08 03:36:52 -08:00
9acad90b12 chore: add Invasions to worldState (#1102)
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 58s
Build / build (20) (push) Successful in 57s
Build Docker image / docker (push) Successful in 33s
Re #1097

Reviewed-on: #1102
2025-03-08 01:44:54 -08:00
f7c2c74437 feat: clan xp (#1100)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #690

Reviewed-on: #1100
2025-03-08 01:44:30 -08:00
137213520e chore: npm run prettier
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 59s
Build / build (22) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 34s
2025-03-07 20:16:15 +01:00
1ad26db331 fix(webui): show message when max rank all warframes has nothing to do
All checks were successful
Build / build (22) (push) Successful in 40s
Build / build (18) (push) Successful in 1m0s
Build / build (20) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 34s
2025-03-07 15:19:39 +01:00
e4a3b13160 chore: simplify config (#1090)
All checks were successful
Build / build (20) (push) Successful in 40s
Build / build (18) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 33s
Build / build (22) (push) Successful in 53s
Reviewed-on: #1090
2025-03-07 00:41:36 -08:00
59fd816b0c feat: handle EmailItems received during mission (#1088)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Closes #1087

Reviewed-on: #1088
2025-03-07 00:41:18 -08:00
530713ce5c chore: enable "incremental" in tsconfig (#1082)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This should make subsequent runs of `npm run build` a bit faster.

Reviewed-on: #1082
2025-03-07 00:40:52 -08:00
b8b1c5e008 feat: library personal target progress (#1083)
Some checks failed
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Closes #1081

Reviewed-on: #1083
2025-03-07 00:40:22 -08:00
57b3a5b9b3 feat: clan vault (#1093)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (18) (push) Successful in 56s
Build / build (20) (push) Successful in 51s
Build Docker image / docker (push) Successful in 32s
Closes #1080

Reviewed-on: #1093
2025-03-06 21:24:25 -08:00
95dedaf976 chore(webui): update Russian translation (#1096)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 56s
Build / build (22) (push) Successful in 51s
Build Docker image / docker (push) Successful in 36s
Reviewed-on: #1096
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-06 20:43:09 -08:00
519cb26044 fix(webui): remove unnecessary elements when changing language (#1095)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixes #1094

Reviewed-on: #1095
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-03-06 20:42:30 -08:00
77aa1caa8f feat: dojo room destruction stage (#1089)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 57s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 39s
Closes #1074

Based on what I could find, apparently only rooms need 2 hours to destroy and decos are removed instantly.

Reviewed-on: #1089
2025-03-06 07:19:01 -08:00
6daa8ab5da chore(webui): fixup french translation
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 54s
Build / build (22) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 33s
2025-03-06 09:29:57 +01:00
c4ab496aa3 feat: dojo decorations (#1079)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 55s
Build / build (18) (push) Successful in 52s
Build Docker image / docker (push) Successful in 32s
Closes #525

Reviewed-on: #1079
2025-03-05 23:54:47 -08:00
97b61b51b7 feat(webui): french translation (#1085)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 54s
Build / build (22) (push) Successful in 37s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1085
Co-authored-by: Vitruvio <vitruvio@noreply.localhost>
Co-committed-by: Vitruvio <vitruvio@noreply.localhost>
2025-03-05 22:26:00 -08:00
0de0416ba3 chore: remove unused strings
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m3s
2025-03-05 16:31:13 +01:00
0a2b2f5218 chore: update URL to avoid needing a redirect (#1084)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Successful in 55s
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Because it obviously doesn't bring you anywhere currently and it could be used by a third party unfortunately.

Reviewed-on: #1084
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-03-05 07:30:19 -08:00
bafc6322c2 fix: proper response for fusionTreasures.php (#1078)
All checks were successful
Build / build (18) (push) Successful in 47s
Build / build (20) (push) Successful in 52s
Build / build (22) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 1m33s
Fixes #1077

Reviewed-on: #1078
2025-03-05 03:51:48 -08:00
0869bbfb27 feat: rush dojo component (#1075)
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 54s
Build Docker image / docker (push) Successful in 33s
Build / build (22) (push) Successful in 1m4s
Closes #1072

This whole system is a bit weird to me. It seems the RushPlatinum is not used by the client at all, so the server just adjusts the CompletionTime. We seem to be about 1% off, but I'm not quite sure why.

Reviewed-on: #1075
2025-03-04 10:33:38 -08:00
fba1808b07 fix: failure to create a new dojo
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (22) (push) Successful in 52s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m9s
2025-03-04 19:31:23 +01:00
2ec110733f note
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (22) (push) Successful in 52s
Build / build (18) (push) Successful in 58s
Build Docker image / docker (push) Successful in 32s
2025-03-04 08:34:42 +01:00
f3f1bfc890 chore: simplify rngService (#1073)
All checks were successful
Build / build (20) (push) Successful in 33s
Build / build (18) (push) Successful in 51s
Build / build (22) (push) Successful in 33s
Build Docker image / docker (push) Successful in 31s
getRandomWeightedReward now takes any object with lowercase 'rarity', and the only alternative to it is the 'uc' variant which takes any object with uppercase 'Rarity'
usage of IRngResult is now also optional

Reviewed-on: #1073
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-03 12:48:46 -08:00
67a275a009 feat: dojo component "collecting materials" stage (#1071)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Closes #1051

Reviewed-on: #1071
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-03 12:48:39 -08:00
77cadc732c chore: give baro his entire stock (from TennoCon 2024) (#1067)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
given that his offers are currently not rotating

Reviewed-on: #1067
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-03 12:48:24 -08:00
f97bdea447 fix: send heart of deimos email when quest is given (#1065)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Fixes #1061

Reviewed-on: #1065
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-03 12:48:11 -08:00
3442f15c6d fix(starter-bat): don't start if build step has failed (#1069)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 51s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #1069
2025-03-03 05:48:54 -08:00
b3003b9fb3 feat: resource extractor drones (#1068)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Closes #793

Reviewed-on: #1068
2025-03-03 05:48:46 -08:00
36d12e08c7 chore: turn guild DojoComponents into a DocumentArray (#1070)
All checks were successful
Build / build (22) (push) Successful in 35s
Build / build (18) (push) Successful in 53s
Build / build (20) (push) Successful in 57s
Build Docker image / docker (push) Successful in 32s
and use .id for setDojoComponentMessage

Reviewed-on: #1070
2025-03-03 05:46:16 -08:00
d7ec259e2d chore: fix inventorySchema transform for projection
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 52s
Build / build (22) (push) Successful in 57s
Build Docker image / docker (push) Successful in 31s
2025-03-02 16:09:18 +01:00
0798d8c6b4 chore: update cert (#1056)
All checks were successful
Build / build (20) (push) Successful in 52s
Build / build (22) (push) Successful in 47s
Build / build (18) (push) Successful in 59s
Build Docker image / docker (push) Successful in 29s
The *.p2ptls.com cert expires on April 16, so I'm changing it for *.viatls.com which expires on August 3.

Reviewed-on: #1056
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-02 04:22:20 -08:00
8a6f36a9b0 feat(webui): add relics via "add items" (#1066)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Closes #1062

Reviewed-on: #1066
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-02 04:21:59 -08:00
9158209059 feat: handle acquisition of EmailItems (#1064)
All checks were successful
Build / build (18) (push) Successful in 53s
Build / build (22) (push) Successful in 48s
Build / build (20) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 34s
Fixes #1063

Reviewed-on: #1064
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-03-02 04:18:59 -08:00
70cd088ffa chore: exclude markdown files from prettier
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 50s
Build / build (22) (push) Successful in 58s
Build Docker image / docker (push) Successful in 31s
2025-03-02 12:04:22 +01:00
bbc40d5534 feat: updateSongChallenge (#1024)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Closes #707

untested but should be correct based on all the information I could find

Reviewed-on: #1024
2025-02-28 18:18:33 -08:00
da2b50d537 feat: collectible series (#1025)
All checks were successful
Build / build (20) (push) Successful in 41s
Build / build (22) (push) Successful in 52s
Build / build (18) (push) Successful in 56s
Build Docker image / docker (push) Successful in 34s
Closes #712

a bit unsure about the inbox messages, but otherwise it should be working

Reviewed-on: #1025
2025-02-28 18:09:37 -08:00
32cc8dc61b fix: preinstall potatoes on non-crafted equipment (#1037)
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (18) (push) Successful in 49s
Build / build (20) (push) Successful in 54s
Build Docker image / docker (push) Successful in 37s
Fixes #1028

Reviewed-on: #1037
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-28 12:39:51 -08:00
c971a484ef feat: updateAlignment (#1039)
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (18) (push) Successful in 49s
Build / build (20) (push) Successful in 51s
Build Docker image / docker (push) Successful in 31s
Closes #1038

may need some more information about how this endpoint works. had to make a few assumptions.

Reviewed-on: #1039
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-28 12:36:49 -08:00
8c662fa1ec feat: derelict vault rewards (#1049)
Some checks failed
Build / build (22) (push) Successful in 36s
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Closes #1045

Reviewed-on: #1049
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-28 12:36:01 -08:00
4205364bd8 feat: noDojoResearchCosts & noDojoResearchTime (#1053)
Some checks failed
Build / build (22) (push) Successful in 36s
Build / build (20) (push) Successful in 48s
Build Docker image / docker (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #1052

Reviewed-on: #1053
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-28 12:35:14 -08:00
caec5a6cbf feat: recipes that consume weapons (#1032)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (22) (push) Successful in 50s
Build / build (20) (push) Successful in 57s
Build Docker image / docker (push) Successful in 32s
Closes #720

Reviewed-on: #1032
2025-02-28 06:47:34 -08:00
79147786f6 chore: handle a FusionTreasures entry being 0 or less (#1050)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (20) (push) Successful in 47s
Build / build (18) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 32s
Closes #1043

Reviewed-on: #1050
2025-02-28 06:08:46 -08:00
cfaafc2cc3 chore: remove undefined as a possible argument when committing inventory change (#1047)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 47s
Build / build (22) (push) Successful in 55s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1047
2025-02-28 03:05:32 -08:00
1468c6b1d2 chore: update PE+ to 0.5.38 (#1048)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixess #1041

Reviewed-on: #1048
2025-02-28 03:04:59 -08:00
28b9e35d8d chore: remove string[] from combineInventoryChanges
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
2025-02-28 12:04:43 +01:00
05c0a91f82 chore: make this reference more future proof
All checks were successful
Build / build (22) (push) Successful in 35s
Build / build (20) (push) Successful in 49s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 59s
2025-02-28 07:11:54 +01:00
08a4dba80b fix: put ayatan statues in FusionTreasures instead of MiscItems (#1046)
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 50s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 49s
Fixes #1044

Reviewed-on: #1046
2025-02-27 21:54:31 -08:00
d63bab1bf4 fix: logic error in addCrewShipHarness
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (22) (push) Successful in 47s
Build / build (20) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
2025-02-28 03:51:08 +01:00
526ce1529b feat: unveiling rivens by doing the challenge (#1031)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 48s
Build / build (22) (push) Successful in 49s
Build Docker image / docker (push) Successful in 34s
Closes #722

Reviewed-on: #1031
2025-02-27 18:01:06 -08:00
9267c9929e feat(webui): acquire flawed mods & imposters via add mods (#1040)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #1033

Reviewed-on: #1040
2025-02-27 18:00:37 -08:00
a8c7eebf6d chore: note for mirror lookers
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 48s
Build / build (22) (push) Successful in 57s
Build Docker image / docker (push) Successful in 32s
2025-02-27 10:13:29 +01:00
fac3d2f901 fix: only run docker workflow on the main repository
All checks were successful
Build / build (22) (push) Successful in 39s
Build / build (18) (push) Successful in 51s
Build / build (20) (push) Successful in 59s
Build Docker image / docker (push) Successful in 34s
2025-02-27 10:01:00 +01:00
550ad360d7 Revert "remove .coderabbit.yaml"
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 52s
Build / build (22) (push) Successful in 53s
Build Docker image / docker (push) Successful in 36s
This reverts commit 0f250c6103.
2025-02-27 09:58:48 +01:00
ca55b21a2a fix: display bug when activating riven via mods console (#1034)
All checks were successful
Build / build (20) (push) Successful in 35s
Build / build (18) (push) Successful in 50s
Build / build (22) (push) Successful in 53s
Build Docker image / docker (push) Successful in 30s
Reviewed-on: #1034
2025-02-26 15:42:25 -08:00
08f4137d71 fix: propagate relic reward's itemCount (#1030)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Preemptive fix for a visual bug after completing a non-endless fissure.

Reviewed-on: #1030
2025-02-26 15:42:13 -08:00
58ec63f7b9 chore: update mongoose (#1036)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1036
2025-02-26 15:41:36 -08:00
a5c45bb646 fix: consume a slot when item is crafted instead of bought via plat (#1029)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1029
2025-02-26 15:41:07 -08:00
4471b2d64d fix(webui): typo (#1035)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 51s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 38s
Reviewed-on: #1035
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-02-26 15:15:32 -08:00
e2ee1172ed chore: fix most eslint warnings in itemDataService
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (22) (push) Successful in 49s
Build / build (18) (push) Successful in 58s
Build Docker image / docker (push) Successful in 36s
2025-02-26 12:16:31 +01:00
6a6e333011 fix: update-translations ignoring translated import_submit entry
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 1m7s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 31s
2025-02-26 06:23:45 +01:00
9893fa957f fix: purchasing SuitBin slots (#1026)
All checks were successful
Build / build (22) (push) Successful in 46s
Build / build (18) (push) Successful in 1m8s
Build / build (20) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 34s
Reviewed-on: #1026
2025-02-25 21:06:21 -08:00
de794f47ba chore: npm run prettier
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
2025-02-26 06:00:54 +01:00
5ce2e26683 chore: fix ISlots 2025-02-26 06:00:40 +01:00
28a36052d9 feat: daily synthesis (#1014)
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 1m4s
Build / build (22) (push) Successful in 58s
Build Docker image / docker (push) Successful in 36s
Closes #386
Closes #533

Reviewed-on: #1014
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 17:31:52 -08:00
d7628d46e9 fix: acquisition of CrewShipWeaponSkins (#1019)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Reviewed-on: #1019
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 17:31:33 -08:00
2b8da4af60 fix: increment LoreFragmentScans Progress when already present (#1022)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixes #1021

Reviewed-on: #1022
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 17:31:24 -08:00
8fea608b76 fix: fill upgrades array with empty strings (#1023)
Some checks failed
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Otherwise the client will "LogBug: (Invalid UpgradeId)" and may crash/raise an interrupt

Reviewed-on: #1023
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 17:31:16 -08:00
c13cf70814 fix: update vor's prize completion rewards
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (20) (push) Successful in 1m4s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 34s
2025-02-26 02:26:22 +01:00
3945359e7d chore: simplify conversion of missionReward from PE+ (#1018)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 1m3s
Build / build (20) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1018
2025-02-25 16:58:07 -08:00
a27f1c5e01 fix: converting storeitems in missionRewards (#1017)
All checks were successful
Build / build (20) (push) Successful in 1m3s
Build / build (18) (push) Successful in 52s
Build / build (22) (push) Successful in 1m7s
Build Docker image / docker (push) Successful in 44s
Fixes the acquisition of blueprints as rewards, such as those rewarded by the Junctions.

Reviewed-on: #1017
Co-authored-by: VampireKitten <dynamightkobold@gmail.com>
Co-committed-by: VampireKitten <dynamightkobold@gmail.com>
2025-02-25 10:08:27 -08:00
93afc2645c fix: items from enemy caches not showing "identified" (#1016)
All checks were successful
Build / build (22) (push) Successful in 37s
Build / build (18) (push) Successful in 1m4s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #1016
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:42:49 -08:00
b5b088249c fix: ignore empty mission tag in missionInventoryUpdate (#1015)
Some checks failed
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 1m3s
Build Docker image / docker (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Fixes #1013

Reviewed-on: #1015
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:41:45 -08:00
e6ec144f1f feat: handle defaultUpgrades for moas and hounds (#1012)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Closes #997

Reviewed-on: #1012
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:41:14 -08:00
3d82fee99e feat: give additionalItems for weapons (#1011)
Some checks failed
Build / build (22) (push) Successful in 37s
Build / build (18) (push) Successful in 1m7s
Build / build (20) (push) Successful in 1m14s
Build Docker image / docker (push) Has been cancelled
Closes #1002

Reviewed-on: #1011
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:39:59 -08:00
39f0f7de9a feat: cracking relics in non-endless missions (#1010)
Some checks failed
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 1m6s
Build / build (22) (push) Successful in 1m12s
Build Docker image / docker (push) Has been cancelled
Closes #415

Reviewed-on: #1010
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:38:47 -08:00
f672f05db9 fix: handle bundles being given to addItems (#1005)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
This is needed for the Hex noggles email attachment

Reviewed-on: #1005
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:38:17 -08:00
4d9e6a35ab fix: use correct reward manifest for arbitrations (#1004)
All checks were successful
Build / build (18) (push) Successful in 1m6s
Build / build (22) (push) Successful in 52s
Build / build (20) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 45s
Closes #939

Reviewed-on: #1004
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-25 04:36:10 -08:00
c29bf6aab5 chore: use PE+ for boosters (#1009)
All checks were successful
Build / build (20) (push) Successful in 39s
Build / build (18) (push) Successful in 1m6s
Build / build (22) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: #1009
2025-02-24 21:46:30 -08:00
bc07978846 chore: use creditBundles map from PE+ (#1008)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #1008
2025-02-24 21:46:20 -08:00
2efe0df2f2 chore: fix some eslint warnings (#1007)
All checks were successful
Build / build (18) (push) Successful in 1m4s
Build / build (20) (push) Successful in 1m9s
Build / build (22) (push) Successful in 1m1s
Build Docker image / docker (push) Successful in 50s
Reviewed-on: #1007
2025-02-24 20:56:34 -08:00
38b255d41a chore: promote no-case-declarations lint to an error (#1006)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #1006
2025-02-24 20:56:27 -08:00
421164986a fix: don't throw an error if questKey already exists (#1003)
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (20) (push) Successful in 1m1s
Build / build (18) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 55s
Reviewed-on: #1003
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-24 15:59:57 -08:00
045d933458 fix: complete junction data and crash in vors prize mission four (#1001)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 1m7s
Build / build (22) (push) Successful in 36s
Build Docker image / docker (push) Successful in 43s
Reviewed-on: #1001
Co-authored-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
2025-02-24 08:50:07 -08:00
9de57668ab fix: ensure quest progress exists (#1000)
All checks were successful
Build Docker image / docker (push) Successful in 38s
Build / build (20) (push) Successful in 37s
Build / build (22) (push) Successful in 1m2s
Build / build (18) (push) Successful in 1m4s
Reviewed-on: #1000
Co-authored-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
2025-02-24 06:14:47 -08:00
ebb28d56d5 feat: acquisition of resource extractor drones (#998)
All checks were successful
Build / build (18) (push) Successful in 1m5s
Build / build (20) (push) Successful in 1m3s
Build / build (22) (push) Successful in 37s
Build Docker image / docker (push) Successful in 51s
Related to #793

Reviewed-on: #998
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-24 05:28:43 -08:00
d69cba6bef chore: reuse inventory in claimCompletedRecipeController (#999)
Some checks failed
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #999
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-24 05:27:50 -08:00
50d687e59a fix: re-enable giving ship features and mission rewards from Vors Prize after skipTutorial (#996)
All checks were successful
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 1m4s
Build / build (22) (push) Successful in 1m4s
Reviewed-on: #996
Co-authored-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: OrdisPrime <134585663+OrdisPrime@users.noreply.github.com>
2025-02-23 12:22:54 -08:00
1274304647 chore: fix type not matching reality
All checks were successful
Build / build (22) (push) Successful in 36s
Build / build (18) (push) Successful in 1m3s
Build / build (20) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 32s
2025-02-23 14:10:10 +01:00
837e041db8 feat: unveil riven with cipher (#992)
All checks were successful
Build / build (18) (push) Successful in 1m2s
Build / build (22) (push) Successful in 58s
Build / build (20) (push) Successful in 1m11s
Build Docker image / docker (push) Successful in 46s
Related to #722

Reviewed-on: #992
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-23 03:55:15 -08:00
84d7b5a62e fix: handle droptable giving a 3-day booster (#993)
Some checks failed
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
e.g. sorties can rarely give these

Reviewed-on: #993
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-23 03:54:46 -08:00
3c2d194302 chore: replace fusionBundles map with ExportFusionBundles (#994)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #994
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-23 03:54:26 -08:00
e1af6bd598 feat: implement CreditBundle purchases (#989)
Some checks failed
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
This fixes purchasing one of the few bundles that include these credit bundles. Ex: Essential Damage mod bundles

Reviewed-on: #989
Co-authored-by: nrbdev <itzneonrb@gmail.com>
Co-committed-by: nrbdev <itzneonrb@gmail.com>
2025-02-23 03:53:56 -08:00
0142aa72a8 chore: sort api post routes
All checks were successful
Build / build (22) (push) Successful in 42s
Build / build (18) (push) Successful in 1m2s
Build / build (20) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 34s
2025-02-23 05:00:41 +01:00
02c0c1c2f2 chore: fix imports in api.ts
All checks were successful
Build / build (22) (push) Successful in 41s
Build / build (20) (push) Successful in 1m0s
Build / build (18) (push) Successful in 1m9s
Build Docker image / docker (push) Successful in 33s
2025-02-23 04:33:28 +01:00
bf7fd42198 feat: tutorial and natural new player experience (#983)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (22) (push) Successful in 1m1s
Build / build (20) (push) Successful in 1m12s
Build Docker image / docker (push) Successful in 30s
Reviewed-on: #983
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-22 11:10:52 -08:00
9203e0bf4d feat: infiniteHelminthMaterials cheat (#985)
All checks were successful
Build / build (20) (push) Successful in 46s
Build / build (18) (push) Successful in 1m2s
Build / build (22) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 32s
Closes #728

Reviewed-on: #985
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-22 11:09:17 -08:00
a3873a1710 fix(webui): show names for zaw parts (#988)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 1m1s
Build / build (20) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #988
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-22 02:22:41 -08:00
73f8f93b17 chore: update russian translation (#987)
Some checks failed
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Reviewed-on: #987
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-22 02:21:57 -08:00
df70050cfd chore: update translations
All checks were successful
Build / build (18) (push) Successful in 41s
Build / build (22) (push) Successful in 1m0s
Build / build (20) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 34s
2025-02-22 07:10:28 +01:00
9f0be223e6 fix: returning givekeychainitem response
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 1m1s
Build / build (22) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 34s
2025-02-21 15:46:09 +01:00
eb56442d63 fix: junction rewards (#982)
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 1m2s
Build / build (22) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 35s
Reviewed-on: #982
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-21 06:32:05 -08:00
a259afe912 feat(webui): give all quests (#981)
All checks were successful
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 1m0s
Build Docker image / docker (push) Successful in 36s
Build / build (22) (push) Successful in 1m4s
Reviewed-on: #981
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-21 05:30:13 -08:00
4d7b3b543b fix: typings not matching reality
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (18) (push) Successful in 1m1s
Build / build (20) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 43s
2025-02-21 08:29:42 +01:00
78548a2ebe chore: cleanup config (#979)
All checks were successful
Build / build (22) (push) Successful in 35s
Build / build (18) (push) Successful in 1m3s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 33s
Reviewed-on: #979
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-20 06:16:40 -08:00
815d18623e chore: generate inventory equipment types from equipmentKeys (#972)
All checks were successful
Build Docker image / docker (push) Successful in 44s
Build / build (22) (push) Successful in 35s
Build / build (20) (push) Successful in 1m1s
Build / build (18) (push) Successful in 1m13s
Reviewed-on: #972
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:58:57 -08:00
ac6ac19199 chore: properly type equipment in IInventoryChanges (#973)
Some checks are pending
Build / build (18) (push) Waiting to run
Build / build (20) (push) Waiting to run
Build / build (22) (push) Waiting to run
Build Docker image / docker (push) Waiting to run
Reviewed-on: #973
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:58:44 -08:00
b4e780baa3 fix: save LoreFragmentScans (#974)
All checks were successful
Build / build (22) (push) Successful in 33s
Build / build (18) (push) Successful in 1m0s
Build / build (20) (push) Successful in 1m4s
Build Docker image / docker (push) Successful in 32s
Reviewed-on: #974
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-20 02:57:23 -08:00
fb8d176fbe fix(webui): quest cheats (#965)
All checks were successful
Build / build (18) (push) Successful in 58s
Build / build (22) (push) Successful in 32s
Build / build (20) (push) Successful in 1m8s
Build Docker image / docker (push) Successful in 1m25s
Completing Quests via the webui will now also award the quest's items and mails.

Also fixes doubly adding key chain items.
A few items will not be added, as it is currently impossible to determine the item category by path for these items.
This will be fixed soon.

Reviewed-on: #965
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-19 14:09:47 -08:00
b551563681 fix: save settings when accepting trade policy. (#966)
Some checks failed
Build / build (22) (push) Successful in 32s
Build / build (18) (push) Has been cancelled
Build Docker image / docker (push) Has been cancelled
Build / build (20) (push) Has been cancelled
![image.png](/attachments/b9954b5f-5ece-4803-b728-548ca2320fdf)

Co-authored-by: Kenya-DK <kenni.k@hotmail.com>
Reviewed-on: #966
Co-authored-by: CyberVenom <cybervenom@noreply.localhost>
Co-committed-by: CyberVenom <cybervenom@noreply.localhost>
2025-02-19 14:09:02 -08:00
ca4017ad1e chore: typings (#971)
All checks were successful
Build / build (18) (push) Successful in 34s
Build / build (20) (push) Successful in 56s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m12s
Reviewed-on: #971
2025-02-19 14:07:28 -08:00
dee302c996 chore: handle motorcycle in addItems (#970)
All checks were successful
Build / build (22) (push) Successful in 32s
Build / build (18) (push) Successful in 58s
Build / build (20) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 33s
Closes #968

Reviewed-on: #970
2025-02-19 13:53:21 -08:00
6acb0f5dca chore: enforce that account only owns one of 'singleton items' (#969)
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (20) (push) Successful in 56s
Build Docker image / docker (push) Successful in 34s
Build / build (22) (push) Successful in 1m15s
Reviewed-on: #969
2025-02-19 13:42:36 -08:00
00a75a33fa fix: don't use path-based matching to add QuestKeys (#967)
All checks were successful
Build / build (22) (push) Successful in 33s
Build / build (20) (push) Successful in 56s
Build / build (18) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 37s
Reviewed-on: #967
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-19 12:42:21 -08:00
1413a6bcc2 feat: move quest cheats to webui (#963)
All checks were successful
Build Docker image / docker (push) Successful in 35s
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 57s
Build / build (22) (push) Successful in 1m9s
Co-authored-by: Sainan <sainan@calamity.inc>
Reviewed-on: #963
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-18 17:14:42 -08:00
87cc2594c8 fix: add missing quest keys at updateQuestKey (#958)
All checks were successful
Build Docker image / docker (push) Successful in 37s
Build / build (20) (push) Successful in 36s
Build / build (18) (push) Successful in 59s
Build / build (22) (push) Successful in 1m7s
it's possible the quest key was not in already in the inventory but the quest was still available due to unlockAllQuests

Closes #957

Reviewed-on: #958
2025-02-18 13:48:21 -08:00
cd100c87b8 fix: respect purchaseQuantity when giving gear items from inbox message (#960)
All checks were successful
Build / build (20) (push) Successful in 35s
Build / build (18) (push) Successful in 57s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m15s
Closes #942

Reviewed-on: #960
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-18 05:39:45 -08:00
c8542c9d75 chore: update PE+, add countedAtt to key chain triggered messages (#959)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Reviewed-on: #959
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-18 05:39:24 -08:00
a62e8eebc2 chore: log missionInventoryUpdate request body (#961)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 57s
Build / build (22) (push) Successful in 1m14s
Build Docker image / docker (push) Successful in 34s
there's still so much uncertainty about this, this is vital information to have logged by default, imo

Reviewed-on: #961
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-18 05:24:28 -08:00
0e7c124d26 fix: unable to add legendary core (#955)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 56s
Build / build (22) (push) Successful in 1m13s
Build Docker image / docker (push) Successful in 40s
Related to #952

Reviewed-on: #955
2025-02-12 18:15:22 -08:00
7ee8252d0e chore: prettier (#954)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
some of the latest changes haven't been quite congruent with the way prettier would like things to be. this fixes those details.

Reviewed-on: #954
2025-02-12 18:15:07 -08:00
edddc80bd8 fix(webui): don't give legendary cores with "add missing mods" (#953)
Some checks failed
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Closes #952

Reviewed-on: #953
2025-02-12 18:14:59 -08:00
7e7e4e2eea feat: change dojo spawn room (#949)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 56s
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Successful in 1m23s
Closes #524

Reviewed-on: #949
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-12 14:06:48 -08:00
eace26b4b3 chore: update PE+ (#951)
All checks were successful
Build / build (22) (push) Successful in 35s
Build / build (18) (push) Successful in 1m2s
Build Docker image / docker (push) Successful in 33s
Build / build (20) (push) Successful in 1m26s
lavos prime and stuff

Reviewed-on: #951
2025-02-12 10:34:28 -08:00
947dcdcec5 chore: update PE+ (#950)
All checks were successful
Build Docker image / docker (push) Successful in 36s
Build / build (18) (push) Successful in 36s
Build / build (20) (push) Successful in 58s
Build / build (22) (push) Successful in 33s
Closes #940

Reviewed-on: #950
2025-02-11 21:27:20 -08:00
2dade02f3e feat(stats): log unknown categories in updateStats (#947)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #947
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-11 21:27:05 -08:00
cf50738d34 feat: setDojoComponentMessage (#948)
All checks were successful
Build / build (18) (push) Successful in 40s
Build / build (20) (push) Successful in 56s
Build / build (22) (push) Successful in 1m10s
Build Docker image / docker (push) Successful in 33s
Closes #946

Reviewed-on: #948
2025-02-11 20:11:31 -08:00
dc4d592b5a chore: fix order in api.ts
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (20) (push) Successful in 57s
Build Docker image / docker (push) Successful in 34s
Build / build (18) (push) Successful in 1m23s
2025-02-12 00:22:05 +01:00
b3b2ce5524 fix(webui): remove 'step' from number inputs (#944)
All checks were successful
Build / build (20) (push) Successful in 34s
Build / build (18) (push) Successful in 58s
Build Docker image / docker (push) Successful in 32s
Build / build (22) (push) Successful in 1m26s
browsers seem to validate that the value is a multiple of the step size, which was not the intention here

Reviewed-on: #944
2025-02-11 08:22:43 -08:00
61471d6785 chore: update nightwave to vol. 8 (#941)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #941
2025-02-11 08:22:37 -08:00
30061fb0e3 fix: don't abort quest update when quest completion rewards are missing. (#937)
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (20) (push) Successful in 54s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m20s
Temporary fix until quest completion items are added. This is wip.
Your account has to own the quest keys for the quest system to work.

Reviewed-on: #937
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-09 14:37:25 -08:00
a03c987f69 chore: handle client requesting non-Lotus assets (#934)
Some checks failed
Build Docker image / docker (push) Successful in 33s
Build / build (20) (push) Successful in 35s
Build / build (18) (push) Successful in 56s
Build / build (22) (push) Has been cancelled
Reviewed-on: #934
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-09 09:39:52 -08:00
7863833850 fix: save nightwave challenges & sortie/archon hunt completion (#933)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Closes #932, Closes #468

Reviewed-on: #933
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-09 09:39:45 -08:00
4398d37566 chore: update localization files (#935)
All checks were successful
Build / build (18) (push) Successful in 37s
Build / build (20) (push) Successful in 57s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m23s
Reviewed-on: #935
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-09 08:26:36 -08:00
7c59d4fe3f feat(webui): currencies (#931)
All checks were successful
Build / build (22) (push) Successful in 33s
Build / build (20) (push) Successful in 57s
Build / build (18) (push) Successful in 1m29s
Build Docker image / docker (push) Successful in 32s
Closes #854

Reviewed-on: #931
2025-02-09 07:17:42 -08:00
4504b95977 feat(import): EvolutionProgress (#930)
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 56s
Build Docker image / docker (push) Successful in 34s
Build / build (20) (push) Successful in 1m19s
Closes #929

Reviewed-on: #930
2025-02-08 22:22:30 -08:00
90b6d13923 feat(webui): change SupportedSyndicate (#923)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Closes #829

Reviewed-on: #923
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-08 22:22:22 -08:00
3d62fc4259 fix: save tailorshop customisations (#927)
All checks were successful
Build / build (20) (push) Successful in 38s
Build / build (18) (push) Successful in 59s
Build / build (22) (push) Successful in 1m15s
Build Docker image / docker (push) Successful in 1m16s
Reviewed-on: #927
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-08 17:41:33 -08:00
d4c5e367b4 fix: nightmare missions rewards (#926)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Closes #416

Reviewed-on: #926
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-08 17:41:21 -08:00
eb3acad598 feat(vs-code): Debugging (#924)
All checks were successful
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 55s
Build / build (20) (push) Successful in 1m17s
Reviewed-on: #924
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-07 09:49:13 -08:00
079f9ebbdf fix(webui): max rank up all suits (#917)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (20) (push) Successful in 35s
Build / build (18) (push) Successful in 56s
Build / build (22) (push) Successful in 1m15s
Fixes #914

Reviewed-on: #917
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-07 06:46:07 -08:00
0c1624cc03 chore: remove console logs (#922)
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (18) (push) Successful in 39s
Build / build (20) (push) Successful in 55s
Build / build (22) (push) Successful in 1m9s
Reviewed-on: #922
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-07 04:53:26 -08:00
9539bcf8ee fix: setting active quest (#921)
Some checks failed
Build Docker image / docker (push) Successful in 32s
Build / build (18) (push) Successful in 55s
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
fixes #920

Reviewed-on: #921
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-07 04:44:45 -08:00
9bff05a635 chore: update PE+ (#919)
Some checks failed
Build Docker image / docker (push) Successful in 32s
Build / build (20) (push) Has been cancelled
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Rhino Heirloom and stuff

Reviewed-on: #919
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-07 02:07:26 -08:00
e8559bc09c fix: don't add unknown skin items to RawUpgrades (#918)
Some checks failed
Build Docker image / docker (push) Waiting to run
Build / build (18) (push) Has been cancelled
Build / build (22) (push) Has been cancelled
Build / build (20) (push) Has been cancelled
Reviewed-on: #918
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-07 02:07:18 -08:00
0f4c14531b fix(webui): weird navbar margins at smaller widths
All checks were successful
Build / build (22) (push) Successful in 31s
Build / build (20) (push) Successful in 50s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m15s
2025-02-06 21:55:42 +01:00
0fbf300d3e refactor: don't pass undefined to getRandomMissionRewards (#913)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (20) (push) Successful in 55s
Build Docker image / docker (push) Successful in 29s
Build / build (22) (push) Successful in 1m17s
Reviewed-on: #913
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-06 07:11:31 -08:00
1fd801403f fix(webui): lowercase email address to match client (#912)
Some checks are pending
Build Docker image / docker (push) Waiting to run
Build / build (22) (push) Successful in 32s
Build / build (18) (push) Successful in 52s
Build / build (20) (push) Successful in 1m12s
Reviewed-on: #912
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-06 07:10:25 -08:00
78032f191c feat(webui): translations (#909)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 37s
Build Docker image / docker (push) Successful in 39s
Build / build (22) (push) Successful in 1m17s
Closes #900
Supersedes #903

Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>

Reviewed-on: #909
2025-02-06 07:00:21 -08:00
13c68a75c1 feat: initial stats save (#884)
All checks were successful
Build Docker image / docker (push) Successful in 30s
Build / build (20) (push) Successful in 41s
Build / build (18) (push) Successful in 57s
Build / build (22) (push) Successful in 39s
Closes #203

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/884
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-06 04:42:59 -08:00
8175deb023 chore: get rid of instances of markModified (#908)
All checks were successful
Build / build (20) (push) Successful in 34s
Build / build (22) (push) Successful in 52s
Build Docker image / docker (push) Successful in 31s
Build / build (18) (push) Successful in 1m18s
Closes #904

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/908
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-06 04:39:01 -08:00
1c82b90033 feat: obtaining crewship related items on mission update (#897)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 51s
Build / build (20) (push) Successful in 1m6s
Build Docker image / docker (push) Successful in 36s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/897
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-05 12:23:35 -08:00
d396fe8b5c fix: handle acquisition of modular weapon parts (#906)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (20) (push) Successful in 52s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m30s
Fixes #905

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/906
2025-02-05 09:00:20 -08:00
1351e73961 chore(webui): clarify what credentials are required (#902)
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (18) (push) Successful in 54s
Build Docker image / docker (push) Successful in 31s
Build / build (20) (push) Successful in 1m11s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/902
2025-02-05 06:37:31 -08:00
4353c67867 fix: delete inbox messages when deleting account (#899)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 51s
Build / build (20) (push) Successful in 1m3s
Build Docker image / docker (push) Successful in 31s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/899
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-05 05:54:24 -08:00
8633696dc8 chore: update tunablesController (#901)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (20) (push) Successful in 49s
Build / build (22) (push) Successful in 36s
Build Docker image / docker (push) Successful in 1m38s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/901
2025-02-04 19:13:48 -08:00
a5d74b92c8 feat(import): Consumables (#895)
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (20) (push) Successful in 53s
Build Docker image / docker (push) Successful in 30s
Build / build (22) (push) Successful in 1m13s
Closes #894

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/895
2025-02-04 09:19:14 -08:00
f15f2bfdbd chore: update favicon (#896)
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (20) (push) Successful in 51s
Build Docker image / docker (push) Successful in 30s
Build / build (18) (push) Successful in 1m18s
This change is paired with a change in the bootstrapper to make the icons all unique and somewhat resembling their part in the whole.

![image.webp](/attachments/b30a31d9-15bd-4933-93cb-a409a9c91159)

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/896
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-04 06:39:28 -08:00
c1fcd3042e feat(webui): ensure forma count of at least 5 when max ranking item (#893)
All checks were successful
Build / build (22) (push) Successful in 33s
Build / build (20) (push) Successful in 51s
Build Docker image / docker (push) Successful in 30s
Build / build (18) (push) Successful in 1m11s
Closes #889

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/893
2025-02-04 03:22:37 -08:00
fb232f74bd feat: acquiring CrewShipHarness with CrewShip (#888)
All checks were successful
Build / build (20) (push) Successful in 36s
Build / build (22) (push) Successful in 52s
Build / build (18) (push) Successful in 1m5s
Build Docker image / docker (push) Successful in 32s
Closes #886

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/888
Reviewed-by: Sainan <sainan@calamity.inc>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-04 02:29:23 -08:00
c267ce47c3 update docker-compose.yml
All checks were successful
Build / build (20) (push) Successful in 32s
Build / build (18) (push) Successful in 53s
Build Docker image / docker (push) Successful in 31s
Build / build (22) (push) Successful in 1m9s
2025-02-03 22:55:26 +01:00
3537c7e436 add docker workflow using docker hub as remote
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (20) (push) Successful in 50s
Build Docker image / docker (push) Successful in 30s
Build / build (22) (push) Successful in 1m13s
2025-02-03 22:50:35 +01:00
3b3edaced4 fix: universalPolarityEverywhere not affecting all necramech slots (#891)
All checks were successful
Build / build (18) (push) Successful in 34s
Build / build (20) (push) Successful in 50s
Build / build (22) (push) Successful in 1m12s
Fixes #890

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/891
2025-02-03 13:21:12 -08:00
e46b3c7d29 chore: use mongoose's 'id' function in addGearExpByCategory (#892)
All checks were successful
Build / build (20) (push) Successful in 33s
Build / build (22) (push) Successful in 50s
Build / build (18) (push) Successful in 1m20s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/892
2025-02-03 13:20:56 -08:00
241f0c894a chore(webui): remove client cheats (#883)
All checks were successful
Build / build (22) (push) Successful in 33s
Build / build (18) (push) Successful in 53s
Build / build (20) (push) Successful in 1m9s
This has long been only a very small subset of what the bootstrapper offers. I think it's better that the bootstrapper itself provides the interface for it and we don't duplicate the logic so shallowly.

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/883
2025-02-03 12:10:36 -08:00
9823729aa8 chore: update batch script
All checks were successful
Build / build (20) (push) Successful in 35s
Build / build (22) (push) Successful in 52s
Build / build (18) (push) Successful in 1m18s
2025-02-02 14:30:51 +01:00
07451dcef0 fix: inventory not being requested when visiting navigation (#882)
All checks were successful
Build / build (22) (push) Successful in 34s
Build / build (18) (push) Successful in 53s
Build / build (20) (push) Successful in 26s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/882
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-02 05:16:43 -08:00
d62ef9bbf3 fix: don't give level mission credits on free roam missions (#881)
All checks were successful
Build / build (22) (push) Successful in 35s
Build / build (20) (push) Successful in 50s
Build / build (18) (push) Successful in 32s
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/881
Co-authored-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
Co-committed-by: Ordis <134585663+OrdisPrime@users.noreply.github.com>
2025-02-01 08:20:11 -08:00
5460ccf93d feat: loc-pin saving (#879)
All checks were successful
Build / build (18) (push) Successful in 36s
Build / build (22) (push) Successful in 50s
Build / build (20) (push) Successful in 40s
Closes #404

Co-authored-by: Sainan <sainan@calamity.inc>
Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/879
Reviewed-by: Sainan <sainan@noreply.localhost>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-02-01 07:41:34 -08:00
53ce6ccce2 fix: subtract standing gained in missions from daily bin (#880)
All checks were successful
Build / build (18) (push) Successful in 38s
Build / build (22) (push) Successful in 35s
Build / build (20) (push) Successful in 39s
Fixes #794

Reviewed-on: http://209.141.38.3/OpenWF/SpaceNinjaServer/pulls/880
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
2025-02-01 07:32:56 -08:00
edc3171eee feat: Quests 2 (#878)
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (22) (push) Successful in 50s
Build / build (20) (push) Successful in 38s
2025-02-01 16:31:04 +01:00
0f250c6103 remove .coderabbit.yaml
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (20) (push) Successful in 32s
Build / build (22) (push) Successful in 32s
2025-02-01 14:11:47 +01:00
61e4ab1934 remove docker workflow
All checks were successful
Build / build (18) (push) Successful in 35s
Build / build (20) (push) Successful in 33s
Build / build (22) (push) Successful in 33s
2025-02-01 12:55:14 +01:00
01d369bf38 fix: can't log in to existing account
All checks were successful
Build / build (18) (push) Successful in 1m51s
Build / build (20) (push) Successful in 38s
Build / build (22) (push) Successful in 38s
2025-01-31 17:15:58 +01:00
aca0b0fe4c feat: earning intrinsics (#872) 2025-01-31 17:03:14 +01:00
9ab0d8d15e feat: startLibraryPersonalTarget (#873) 2025-01-31 17:03:00 +01:00
3a7cb5d9b1 fix: correctly add kubrow eggs to inventory (#875) 2025-01-31 17:02:46 +01:00
9de87f0959 fix: 'account now owns a negative amount' not showing when it had 0 (#877) 2025-01-31 17:02:27 +01:00
50c280cf01 feat: Inbox (#876) 2025-01-31 14:15:36 +01:00
cf196430b7 fix: sort api imports alphabetically 2025-01-31 09:37:51 +01:00
de7758684b feat: earn focus xp with a lens (#871) 2025-01-27 18:11:05 +01:00
97bec71b05 feat: more supported equipment types (#867) 2025-01-27 13:18:16 +01:00
cb7c15a382 fix: provide LoadOutPresets & Ships in missionInventoryUpdate response (#869) 2025-01-25 13:12:49 +01:00
6a427018e3 fix: can't acquire Sun & Moon (#865) 2025-01-25 06:25:13 +01:00
b72a0d12ef fix: apply spoofing stuff to missionInventoryUpdate's InventoryJson (#866) 2025-01-24 21:09:34 +01:00
57061073be fix: adjust mission update controller to add xp when aborting mission(#864) 2025-01-24 16:17:59 +01:00
080b466bfc fix(webui): add items (#863) 2025-01-24 16:12:39 +01:00
3cd66391b6 fix(webui): max rank (#859) 2025-01-24 15:44:34 +01:00
5649c5bf86 chore: switch purchaseService to take inventory document (#848) 2025-01-24 15:24:29 +01:00
249d2056ed fix: use logger instead of console 2025-01-24 15:20:51 +01:00
ebd51cc380 fix: aborting Mission and completeAllQuests config (#858) 2025-01-24 15:13:55 +01:00
8b836020bf chore: turn getJSONfromString into a template/generic function (#836) 2025-01-24 14:27:10 +01:00
61f63dd40f fix: typescript version unsupported by eslint (#853) 2025-01-24 14:23:40 +01:00
4e8c079171 fix: exclude riven buffs from being a curse (#849) 2025-01-24 14:18:16 +01:00
efcaaa56c4 fix: tell client when it has used a free favor (#850) 2025-01-24 14:18:05 +01:00
7716c945d0 fix: address some client warnings about malformed inventory.php response (#840) 2025-01-24 14:17:52 +01:00
ef2708b510 feat: Quests1 (#852) 2025-01-24 14:13:21 +01:00
8858b15693 fix: rectify CrewMembers import & typings (#845) 2025-01-21 20:07:15 +01:00
90f05c477b fix: slight logic error in importService (#846) 2025-01-21 20:05:28 +01:00
25a099970e fix(webui): delete prompt showing name twice 2025-01-21 18:36:45 +01:00
1ba3378574 fix(webui): properly handle unique level caps (#837) 2025-01-20 18:29:25 +01:00
7b78f5a997 fix(starter-bat): automatically prune references that no longer exist remotely (#838) 2025-01-20 18:28:56 +01:00
10100ae2ca fix: more accurate inventory after skipTutorial (#755) 2025-01-20 18:25:50 +01:00
dependabot[bot]
701cd19a17 build(deps-dev): bump eslint-plugin-prettier from 5.2.1 to 5.2.3 (#842)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 17:29:08 +01:00
7bb857a17a fix(webui): disable text wrapping for action column 2025-01-20 12:35:26 +01:00
3eab0c187c feat: add update and start script for dummies (#828) 2025-01-20 12:22:34 +01:00
62a4ac0652 feat(webui): add necramechs (#834) 2025-01-20 12:21:50 +01:00
a4c44e8bb0 chore: get rid of some unecessary conditionals (#835) 2025-01-20 12:21:39 +01:00
c9b48ace36 feat: import (#831) 2025-01-20 12:19:32 +01:00
ee0bee5d7b fix(webui): shrink count inputs 2025-01-20 05:23:32 +01:00
ceba8252b0 feat(webui): mod count (#830) 2025-01-20 04:00:58 +01:00
b19fda66a2 fix(webui): ignore empty ModularParts array 2025-01-19 15:06:32 +01:00
86a2b57e22 feat(webui): more equipment (#826) 2025-01-19 15:03:34 +01:00
3c99b748dc chore: raise size limit for text/plain requests 2025-01-19 12:33:29 +01:00
1c186450e1 chore: remove unused IInventoryResponseDocument 2025-01-19 12:33:26 +01:00
f310028e42 fix: classical syndicate medallions don't use daily limit (#818) 2025-01-19 12:30:27 +01:00
16922279f9 fix: remove legendary core from inventory when it was used (#819) 2025-01-19 12:29:53 +01:00
4ce03ad523 chore(webui): split weapons by category (#820) 2025-01-19 12:29:32 +01:00
45c32b087d chore: handle addMiscItems & addMods resulting in account having 0 or less of a type (#821) 2025-01-19 12:29:19 +01:00
15f36263cd chore: make buildConfig.json optional (#822) 2025-01-19 12:28:45 +01:00
ae832d0125 fix(webui): erroring on empty archon shard slot 2025-01-19 03:58:25 +01:00
d25a969269 chore: optimise stats/view.php (#816) 2025-01-19 01:58:59 +01:00
5d4c454b0b chore: optimise creditsController (#815) 2025-01-19 01:58:47 +01:00
73df848f11 chore: optimise getAccountIdForRequest (#814) 2025-01-19 01:58:35 +01:00
16c2b8f83c chore: use MongooseDocumentArray.id instead of .find where possible (#813) 2025-01-19 01:58:24 +01:00
7af5cd9811 fix: add slots when adding items via WebUI (#812) 2025-01-19 01:58:09 +01:00
a10bdeb497 feat: rerolling rivens (#806) 2025-01-19 01:57:52 +01:00
fc8537ba4d feat(webui): add "add missing mods" (#804)
Co-authored-by: Chinosu <46995931+Chinosu@users.noreply.github.com>
2025-01-19 01:57:39 +01:00
a8fb9095c5 feat: Kinematic Instant Messaging (#801) 2025-01-19 01:57:24 +01:00
f1c3dcbefc chore: move mod upgrading logic into artifactsController (#800) 2025-01-18 11:12:06 +01:00
734ca84557 fix: purchasing flawed mods from iron wake (#802) 2025-01-18 11:11:52 +01:00
79299db475 fix: not consuming ItemPrices from server-side vendor (#798) 2025-01-18 07:06:07 +01:00
15193603e3 chore: npm audit fix 2025-01-18 07:05:03 +01:00
1e4092e7f8 feat(webui): ability to add Legendary Core 2025-01-17 16:26:48 +01:00
9fd2fb6ba2 fix: track FreeFavorsEarned & FreeFavorsUsed (#792) 2025-01-17 14:43:51 +01:00
79f1937483 fix: handle standing limits in fishmongerController (#795) 2025-01-17 14:43:33 +01:00
0ace5eb446 fix: identify correct offer for when teshin has 2 kuva offers up (#797) 2025-01-17 14:43:09 +01:00
b3d2345894 fix: steel path honors having expired stuff 2025-01-17 13:22:29 +01:00
d5d60bcbff chore: improve IVendorManifest 2025-01-17 13:22:27 +01:00
29206f142d chore: simplify computation of allDailyAffiliationKeys 2025-01-17 07:25:15 +01:00
1a8e0f33b9 feat: noDailyStandingLimits cheat (#791) 2025-01-17 07:02:19 +01:00
d8845bc478 feat: apply & track daily standing limit when trading in medallions (#788) 2025-01-17 05:27:12 +01:00
534f7d8cce feat: archon shard fusion (#785) 2025-01-17 05:09:25 +01:00
6ee28e5864 fix: syndicate sacrifice doesn't persist new title (#787) 2025-01-17 05:09:11 +01:00
9633d307a2 fix: incomplete circuit weapon names 2025-01-16 09:21:04 +01:00
a545d4f047 feat(webui): add "max rank all warframes" & "max rank all weapons" (#783)
Co-authored-by: Sainan <sainan@calamity.inc>
2025-01-15 16:29:02 +01:00
7d7466cbc1 chore: update nightwave to nora's mix vol. 7 (#784)
Co-authored-by: Sainan <sainan@calamity.inc>
2025-01-15 16:23:58 +01:00
fc7eaa0283 fix: incarnon options cycle (#782) 2025-01-15 16:18:42 +01:00
d73d14bc48 feat: add potatoes, exilus, & arcanes everywhere cheats (#774) 2025-01-15 05:20:30 +01:00
215b83974c feat(webui): add "add missing warframes" & "add missing weapons" (#775) 2025-01-15 05:20:17 +01:00
eab4eb2e5b fix(webui): spacing 2025-01-15 05:19:27 +01:00
26f20bfbb5 fix: limit standing gain from medallions for title's max (#772) 2025-01-13 17:57:59 +01:00
dependabot[bot]
4698578599 build(deps): bump warframe-public-export-plus from 0.5.21 to 0.5.22 (#780)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 17:54:20 +01:00
dependabot[bot]
a8d5bafc29 build(deps): bump mongoose from 8.9.3 to 8.9.4 (#779)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 17:51:35 +01:00
dependabot[bot]
a988f3e899 build(deps-dev): bump typescript from 5.5.3 to 5.5.4 (#778)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-13 17:51:18 +01:00
5d43627805 fix: 1999 calendar not working properly (#777) 2025-01-13 04:17:06 +01:00
e201279eee fix: remove ship decos from inventory when placed and vice-versa (#770) 2025-01-12 13:38:05 +01:00
5cbececb04 fix(webui): error on unrevealed riven mod (#773) 2025-01-12 08:30:56 +01:00
8ebd7068e2 fix: premature week rollover (#771) 2025-01-12 05:54:52 +01:00
2cd47c8ae2 fix: reproducible oids for unlockAllSkins (#769) 2025-01-12 02:42:27 +01:00
53d5e7c3f0 fix: make crew member slots optional (#766) 2025-01-11 23:08:17 +01:00
f6265d57ec feat: Sentient Anomaly rotation (#759)
Co-authored-by: Sainan <sainan@calamity.inc>
2025-01-11 23:01:33 +01:00
25459503d1 feat: changing equipped shawzin/instrument (#762) 2025-01-11 12:54:32 +01:00
e8e918ff0c fix: purchasing of ship decorations (#761) 2025-01-11 12:54:11 +01:00
fb8e19403e feat: cycle 1999 calendar season every week (#756) 2025-01-11 07:18:42 +01:00
eafdd9f755 fix: worldState growing with every request (#760) 2025-01-10 06:23:25 +01:00
1c654650d4 fix: cap helminth resources at 100% (#757) 2025-01-09 14:02:12 +01:00
c07f7502a4 fix(coderabbit): disable commit_status as it now indicates failure on rate limit 2025-01-09 07:30:33 +01:00
56906a0f69 chore: npm run prettier 2025-01-09 07:17:29 +01:00
cd5aaaa6cf fix: change cavia bounties every 2.5 hours (#748) 2025-01-09 05:54:29 +01:00
eeaa339090 fix: can't open nightwave offerings (#754) 2025-01-08 19:34:38 +01:00
e4476d7136 fix: add coalescent shards segment to allShipFeatures (#743) 2025-01-07 04:56:39 +01:00
dependabot[bot]
abf312a41b build(deps): bump mongoose from 8.9.2 to 8.9.3 (#746)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 23:36:19 +01:00
172db2337f feat: infiniteEndo & infiniteRegalAya (#741) 2025-01-06 05:36:39 +01:00
f56fc232f2 feat: leveling up intrinsics (#725) 2025-01-06 05:36:18 +01:00
83617ae287 feat: activate riven mod (get a random challenge) (#721) 2025-01-06 05:35:57 +01:00
3903b973e2 feat: opening relics in endless missions (#713) 2025-01-06 05:35:36 +01:00
8d7f69ce80 fix: motorcycle in backroom is broken (#736) 2025-01-06 05:35:11 +01:00
2c875caddc fix: remove syndicate sacrifices from inventory (#735) 2025-01-06 05:34:59 +01:00
3a4eea379d chore: move sell types to sellController (#731) 2025-01-06 05:34:37 +01:00
05fd3c4cec chore: some notes in inventoryTypes 2025-01-06 05:27:12 +01:00
69c65f3ce2 fix: missing teshin hard mode vendor manifest (#737) 2025-01-06 04:36:40 +01:00
709c2a401b feat: spectre loadouts (#719) 2025-01-06 01:21:37 +01:00
eb6baa5e15 fix: removing an archon shard doesn't refund it (#729) 2025-01-06 01:21:02 +01:00
82621ebe0f feat: sentient apetite (#726) 2025-01-05 23:20:36 +01:00
9d115a4d02 feat: archon shard removal (#724) 2025-01-05 13:40:19 +01:00
d69ebf89ec feat: helminth losing apetite (#718) 2025-01-05 13:34:41 +01:00
1bab76f58b fix: unlockAllScans not fully working with blacklisted enemies (#723) 2025-01-05 12:37:08 +01:00
8154f9bc36 feat(webui): add "Fully Level Up Helminth" (#717) 2025-01-05 12:26:26 +01:00
06bc0123ba feat: all server-side metamorphosis levels (#716) 2025-01-05 07:16:48 +01:00
506e77db6c feat: invigorations (#715) 2025-01-05 06:17:42 +01:00
6baad5d008 feat: correctly scale standing and focus limits by mastery rank (#711) 2025-01-05 05:17:56 +01:00
05d16f09b6 feat: handle helminth offerings update request (#714) 2025-01-05 05:17:40 +01:00
e42e2eb258 chore: npm run prettier 2025-01-05 05:16:45 +01:00
595305081a fix: wrong format for "log-in expired" response 2025-01-05 05:04:50 +01:00
ea59665a0c chore: implement /pay/getSkuCatalog.php (#706) 2025-01-05 02:44:01 +01:00
bd7baef002 fix(webui): diambiguate fish names (#705) 2025-01-05 02:43:22 +01:00
27ddada3f3 fix: quantity ignored when purchasing slots (#704) 2025-01-05 02:43:06 +01:00
571d244985 chore: rename getCreditsController to creditsController 2025-01-04 01:04:58 +01:00
76d40964db chore: remove log-in expired handler in getCreditsController 2025-01-04 01:04:00 +01:00
e77f8b0e51 feat: replicate dojo research (#701) 2025-01-04 00:25:23 +01:00
74ed098692 chore: do addItem on inventory document, not accountId (#699) 2025-01-04 00:25:09 +01:00
7a6ffd94dc fix: error handler registered in the wrong place 2025-01-03 22:46:14 +01:00
4756f54f40 chore: add middleware for error handling (#695) 2025-01-03 22:25:03 +01:00
e6432b5052 chore: cleanup inventory types (#691) 2025-01-03 22:17:34 +01:00
69734ea101 fix: don't say "error" just because a loadout category is unimplemented (#692) 2025-01-03 09:19:06 +01:00
0523fbdaae fix: add missing kitgun types for primaries (#694) 2025-01-03 09:09:53 +01:00
e0ff240d60 feat: dojo research (#689) 2025-01-03 09:06:50 +01:00
c80dd1bbd0 feat: remove incarnon (#688) 2025-01-03 09:06:34 +01:00
f1c0c5a429 feat: subsuming warframes (#686) 2025-01-03 05:22:56 +01:00
ff4b1e5c29 fix: enable completeAllQuests in default/example config (#684) 2025-01-03 00:49:18 +01:00
80e00b8825 fix: consume resources when installing incarnon genesis (#687) 2025-01-03 00:48:54 +01:00
b8ceb78c98 feat: trade fish for standing (#681) 2025-01-03 00:10:18 +01:00
e7a9f2e2b8 chore: move syndicate sacrifice stuff into syndicateSacrificeController (#682) 2025-01-03 00:05:34 +01:00
52d1b72701 fix: selling MiscItems doesn't remove them from inventory (#680) 2025-01-02 08:55:04 +01:00
0c6f6e556f feat: infusing abilities (#676) 2025-01-02 08:54:27 +01:00
48aa145a20 fix: error when attempting to sell items for ducats (#678) 2024-12-31 21:17:46 +01:00
3e54977d4b feat: helminth gaining subsume slots (#677) 2024-12-31 04:46:12 +01:00
a16158aedd chore: simplify upgradesController (#675) 2024-12-31 02:50:11 +01:00
e4613069b3 fix: abort startup if not connected to MongoDB server (#665) 2024-12-31 01:41:47 +01:00
16d98636e9 chore: updateCurrency with existing inventory instance (#674) 2024-12-31 01:41:29 +01:00
ddb1a8d665 fix(webui): showing hidden recipes for "add items" (#672) 2024-12-31 01:40:32 +01:00
0e1ee0c669 fix: purchase of multiple booster packs (#671) 2024-12-31 01:39:45 +01:00
230c0303b1 chore: remove recipeService (#659) 2024-12-31 01:36:28 +01:00
b8ef39bada feat: implement setShipFavouriteLoadout.php (#662) 2024-12-30 19:48:43 +01:00
d930c3d957 feat: fish dissection (#663) 2024-12-30 19:48:20 +01:00
dependabot[bot]
7ea02d142f build(deps-dev): bump @typescript-eslint/eslint-plugin from 7.15.0 to 7.18.0 (#667)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-30 19:44:05 +01:00
dependabot[bot]
5b1e162c1c build(deps): bump warframe-public-export-plus from 0.5.16 to 0.5.17 (#666)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-30 19:43:27 +01:00
1024d0350f fix: consistenly use static/data for 'npm run build' (#661) 2024-12-30 01:51:38 +01:00
e41022f176 chore: improve typings in trainingResultsController 2024-12-30 00:09:03 +01:00
9455703bdc chore: fix non-string concat warnings 2024-12-30 00:07:53 +01:00
1c436d9466 chore: fix unsafe assignment of any value warning 2024-12-30 00:06:31 +01:00
212a5e7035 fix(webui): 404 for favicon.ico with 'npm run build' 2024-12-29 23:44:38 +01:00
02f4d0e821 improve: handle config.administratorNames being a string (#658) 2024-12-29 23:34:26 +01:00
f0eea818f9 chore: fix unsafe assignment of any value warning 2024-12-29 23:33:02 +01:00
412968026e chore: add ability range & efficiency for archon crystal upgrades 2024-12-29 23:08:21 +01:00
d31f9f8d24 chore: fix most explicit-function-return-type warnings (#656) 2024-12-29 21:47:18 +01:00
05be199927 chore: fix "member access .toString on any value" warnings (#655) 2024-12-29 21:41:56 +01:00
25c8179a88 chore: remove toLoginRequest (#651) 2024-12-29 21:41:39 +01:00
9e21105474 chore: improve IInventoryChanges (#654) 2024-12-29 21:40:54 +01:00
00bcf5c3c5 chore: fix unsafe member access warnings for upgrade fingerprints (#653) 2024-12-29 21:40:38 +01:00
8a4f2f4d0e chore: improve IFindSessionRequest (#652) 2024-12-29 21:40:25 +01:00
44b78ecfe8 feat: unlock all captura scenes (#650) 2024-12-29 21:11:36 +01:00
607ec836e9 fix: tutorial being skipped with skipTutorial disabled (#613) 2024-12-29 21:11:10 +01:00
9dbb0fe4bf improve: for "make rank 30", also make respective exalted items rank 30 (#648) 2024-12-29 06:37:40 +01:00
27af54d039 chore: fix concat of ObjectId to make eslint happy 2024-12-29 06:14:54 +01:00
b0c3e725f8 chore: fix no-case-declarations warnings 2024-12-29 06:14:29 +01:00
dc85be8f37 fix: purchase response doesn't include exalted weapons when applicable (#647) 2024-12-29 03:42:22 +01:00
b5e0712675 fix: exalted weapons should not be duplicated as they are shared (#645) 2024-12-29 02:46:57 +01:00
3ae2338c13 fix: unable to spawn all enemies in simulacrum despite unlockAllScans (#642) 2024-12-28 18:31:10 +01:00
494f219db3 feat: dynamically cycle ESO, holdfast bounties, hex bounties, & circuit choices (#643) 2024-12-28 18:30:43 +01:00
4d1bbff99e fix: booster packs not showing what items were gained after purchase (#635) 2024-12-25 23:34:14 +01:00
735f0b885d feat: syndicate initiation (#638) 2024-12-25 23:33:29 +01:00
8fe9b89143 fix: no hex bounties available (#641) 2024-12-25 23:32:12 +01:00
3a1b407a81 fix: selling consumable/gear items (#639) 2024-12-25 01:08:18 +01:00
8ad979ab11 fix: can't dissolve arcanes (#634) 2024-12-23 23:32:33 +01:00
7fdb59f6c9 feat: dojo room energy & capacity costs & gains (#633) 2024-12-23 23:12:21 +01:00
063adb3519 improve: tell user that the WebUI is available (#631) 2024-12-23 22:48:16 +01:00
45cb9c6da0 fix: acquisition of railjack (#629) 2024-12-23 22:47:58 +01:00
7dcb1f4fa4 chore: initial documentation of config.json (#627) 2024-12-23 22:44:43 +01:00
42f11b2d30 fix: give respective weapons & mods when acquiring sentinel (#623) 2024-12-23 22:44:24 +01:00
103e9bc431 feat: add administrators, require administrator perms to change server config in webui (#628) 2024-12-23 22:44:01 +01:00
eeaac6f07e Revert "build(deps-dev): bump typescript from 5.5.3 to 5.7.2 (#626)"
This reverts commit d50c6b8c76.
2024-12-23 22:19:31 +01:00
dependabot[bot]
d50c6b8c76 build(deps-dev): bump typescript from 5.5.3 to 5.7.2 (#626)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 17:53:50 +01:00
dependabot[bot]
11d1daf206 build(deps-dev): bump eslint-plugin-prettier from 5.1.3 to 5.2.1 (#624)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 17:53:27 +01:00
77c7522023 feat(webui): ability to add recipes via "add items" (#617) 2024-12-23 14:37:21 +01:00
9be89fa9b7 feat(webui): rename account (#616) 2024-12-23 14:37:07 +01:00
0a4d620652 chore: update trainingResultController (#611) 2024-12-23 14:36:52 +01:00
dda41875ae fix: acquiring ships (#619) 2024-12-23 09:15:41 +01:00
918e33f126 fix: incorrect types for PersonalRooms & TailorShop (#618) 2024-12-23 06:21:48 +01:00
68335aa91b fix: handle purchaseQuantity for resources (#609) 2024-12-23 04:05:06 +01:00
ba7da656a8 feat(webui): delete account (#615) 2024-12-23 03:34:14 +01:00
066d07f8ba fix: incomplete regex for stripped assets (#614) 2024-12-23 02:29:16 +01:00
d5c829e4fe fix: avoid spilling new database account fields into login response (#610) 2024-12-23 00:40:35 +01:00
412de02680 feat: subtract standing for syndicate purchases (#608) 2024-12-22 23:31:30 +01:00
c421c7021c feat: implement aya costs for varzia offers (#606) 2024-12-22 23:28:59 +01:00
d1d221bb58 feat: apply QuantityMultiplier for server-side vendor offers (#605) 2024-12-22 23:28:44 +01:00
2175e003cc style(coderabbit): disable related PRs 2024-12-22 22:14:50 +01:00
ce94c78cc1 fix: scale MiscItem prices by quantity 2024-12-22 22:14:08 +01:00
0a31ff7b5c feat(webui): language selector (#593) 2024-12-22 20:38:50 +01:00
52c0a3123e feat: implement syndicateStandingBonus endpoint (#583) 2024-12-22 20:37:02 +01:00
b84258a893 feat: basic implementation of endlessXp.php we can play The Circuit (#596) 2024-12-22 20:36:01 +01:00
9fd6ed3b21 fix: purchasing an arcane pack does not consume vosfor (#601) 2024-12-22 20:35:08 +01:00
ac09fcec5c fix: don't default scale ship decorations to 1 (#603) 2024-12-22 20:34:04 +01:00
95bd07b50f feat: decorating the backroom (#604) 2024-12-22 20:32:19 +01:00
cbdd1cd0a7 fix: unable to purchase arcanes 2024-12-22 16:15:05 +01:00
987b05a334 chore: update express to v5 (#599) 2024-12-22 15:42:24 +01:00
febe7ec5e0 feat: implement feeding of helminth (#597) 2024-12-22 07:26:14 +01:00
f2ae465dd9 fix: inconsistent handling of purchase request (#594) 2024-12-22 05:40:37 +01:00
c2a9fc6609 fix: unable to buy fish bait (#598) 2024-12-22 05:38:46 +01:00
c6ed013e23 fix: purchasing of augment mods (#595) 2024-12-22 05:32:30 +01:00
7b2c32b723 style(coderabbit): disable sequence diagrams 2024-12-22 05:13:43 +01:00
37f6fe9323 fix: isDate 2024-12-22 01:02:27 +01:00
0398691e01 chore: simplify updateGeneric 2024-12-22 01:02:25 +01:00
c6c3e1c005 chore: simplify getExalted 2024-12-22 01:02:21 +01:00
7b894823cc fix: duplicate warnings
explicit-module-boundary-types is a subset of explicit-function-return-type
2024-12-22 01:02:19 +01:00
dependabot[bot]
d1cf2953df build(deps-dev): bump prettier from 3.3.2 to 3.4.2 (#592)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-22 00:59:20 +01:00
dependabot[bot]
b544d6159b build(deps-dev): bump @typescript-eslint/parser from 7.15.0 to 7.18.0 (#494)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-22 00:55:25 +01:00
dependabot[bot]
46332bf3e0 build(deps): bump winston from 3.13.0 to 3.17.0 (#591)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-22 00:51:51 +01:00
dependabot[bot]
5ddc1aea85 build(deps): bump mongoose from 8.9.0 to 8.9.2 (#590)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-22 00:48:45 +01:00
fe7051f855 Fix environment to config.json parser (#589) 2024-12-22 00:47:46 +01:00
d9c94664c3 feat: daily reset for syndicate standing (#582) 2024-12-22 00:44:49 +01:00
8a43eae230 feat: replace infiniteResources with infiniteCredits & infinitePlatinum (#588) 2024-12-22 00:34:19 +01:00
144ac5850c feat(inventory): add accolade fields to IInventoryResponse (#586) 2024-12-20 03:12:36 +01:00
b0b2d9f6fa fix: automatically populate regions for unlockAllMissions (#587) 2024-12-20 03:11:38 +01:00
d824b83cf9 feat: respect client-supplied version information (#585) 2024-12-20 03:11:09 +01:00
259bfa1362 chore: npm audit fix (#579) 2024-12-19 01:42:10 +01:00
0dd98393a5 feat(inventory&loadouts): motorcycles (#580) 2024-12-16 05:25:28 +01:00
cd514d47af chore: update for 1999 (#576) 2024-12-16 04:50:51 +01:00
38e7d3d078 chore: update PE+ to 0.5.5 (#573) 2024-11-17 04:18:13 +01:00
Vampire Kitten
e98514a7be improve: Add Ergo Blast's Tenet Weapon shop (#568) 2024-10-19 13:47:28 +02:00
1b95186ab8 chore: remove leftover console.log in inventoryController (#569) 2024-10-19 13:45:06 +02:00
Vampire Kitten
1a029ebb4b fix: missing vendor infos (#565) 2024-10-18 18:13:53 +02:00
c20e3ea01d chore: update warframe-riven-info (#553) 2024-10-18 17:03:24 +02:00
ba349535fb feat: implement setPlacedDecoInfo (#558) 2024-10-18 16:54:49 +02:00
abc3bd8624 fix: being unable to visit Palladino in Iron Wake despite completeAllQuests (#564) 2024-10-18 16:49:33 +02:00
Vampire Kitten
76964585eb fix: Apply Look not working with Unlock All Skins turned on (#549) 2024-10-15 16:27:58 +02:00
Vampire Kitten
59679c3d56 feat: Installation of Focus Lenses (#550) 2024-10-15 16:27:11 +02:00
07c2fbcadf feat: implement socketing of ayatan sculptures (#542) 2024-10-12 23:51:45 +02:00
6c4c685690 chore: fix inconsistent formatting (npm run prettier) (#543) 2024-10-12 23:49:33 +02:00
cc5713e375 chore: handle resource being rolled as mission reward (#545) 2024-10-12 23:49:06 +02:00
de6c1da55d fix: docker workflow failing in forks (#531) 2024-10-12 00:26:47 +02:00
26a5f31ee9 feat: add tunables endpoint (#530) 2024-10-12 00:26:19 +02:00
5fb4b94bb4 chore: update PE+ to 0.5.1 (#537) 2024-10-12 00:25:43 +02:00
sw5ciprl
533c249e68 feat: create Docker image, set up Docker CI (#528) 2024-10-10 22:07:37 +02:00
d9c95e676d chore: update coderabbit config 2024-10-10 14:30:38 +02:00
0c31eb4b25 chore: config file for coderabbit 2024-10-07 17:45:07 +02:00
f9ed123cb4 fix: not showing "void fissures" tab in navigation (#521) 2024-10-07 17:44:02 +02:00
b7f381ba1d feat: implement upgrading & downgrading arcanes (#520) 2024-10-06 17:43:43 +02:00
59389a991b npm audit fix (#518) 2024-10-06 14:47:09 +02:00
59cec40443 chore: update warframe-public-export-plus for 37.0.0 (#517) 2024-10-02 23:18:39 +02:00
419 changed files with 59364 additions and 25591 deletions

19
.coderabbit.yaml Normal file
View File

@@ -0,0 +1,19 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
language: "en-US"
early_access: false
reviews:
profile: "chill"
request_changes_workflow: false
changed_files_summary: false
high_level_summary: false
poem: false
review_status: true
commit_status: false
collapse_walkthrough: false
sequence_diagrams: false
related_prs: false
auto_review:
enabled: true
drafts: false
chat:
auto_reply: true

8
.dockerignore Normal file
View File

@@ -0,0 +1,8 @@
**/.dockerignore
**/.git
Dockerfile*
.*
docker-data/
node_modules/
static/data/
logs/

View File

@@ -1,4 +0,0 @@
# Docker may need a .env file for the following settings:
DATABASE_PORT=27017
DATABASE_USERNAME=root
DATABASE_PASSWORD=database

View File

@@ -1,35 +1,48 @@
{
"plugins": ["@typescript-eslint", "prettier", "import"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:import/recommended",
"plugin:import/typescript"
],
"plugins": ["@typescript-eslint", "prettier"],
"env": {
"browser": true,
"es6": true,
"node": true
},
"rules": {
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/explicit-module-boundary-types": "warn",
"@typescript-eslint/restrict-template-expressions": "warn",
"@typescript-eslint/restrict-plus-operands": "warn",
"@typescript-eslint/no-unsafe-member-access": "warn",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"@typescript-eslint/no-misused-promises": "warn",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/explicit-function-return-type": "error",
"@typescript-eslint/restrict-template-expressions": "error",
"@typescript-eslint/restrict-plus-operands": "error",
"@typescript-eslint/no-unsafe-member-access": "error",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_", "caughtErrors": "none" }],
"@typescript-eslint/no-unsafe-argument": "error",
"@typescript-eslint/no-unsafe-call": "warn",
"@typescript-eslint/no-unsafe-assignment": "warn",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-loss-of-precision": "warn",
"no-case-declarations": "warn",
"@typescript-eslint/no-unsafe-call": "error",
"@typescript-eslint/no-unsafe-assignment": "error",
"@typescript-eslint/no-explicit-any": "off",
"no-loss-of-precision": "error",
"@typescript-eslint/no-unnecessary-condition": "error",
"@typescript-eslint/no-base-to-string": "off",
"no-case-declarations": "error",
"prettier/prettier": "error",
"@typescript-eslint/semi": "error",
"no-mixed-spaces-and-tabs": "error"
"no-mixed-spaces-and-tabs": "error",
"@typescript-eslint/require-await": "error",
"import/no-named-as-default-member": "off",
"import/no-cycle": "warn",
"@typescript-eslint/no-deprecated": "warn"
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"settings": {
"import/extensions": [ ".ts" ],
"import/resolver": {
"typescript": true,
"node": true
}
}
}

2
.gitattributes vendored
View File

@@ -1,4 +1,4 @@
# Auto detect text files and perform LF normalization
* text=auto
* text=auto eol=lf
static/webui/libs/ linguist-vendored

View File

@@ -1,22 +1,29 @@
name: Build
on:
push: {}
push:
branches: ["main"]
pull_request: {}
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
version: [18, 20, 22]
steps:
- name: Checkout
uses: actions/checkout@v4.1.2
- name: Setup Node.js environment
uses: actions/setup-node@v4.0.2
with:
node-version: ${{ matrix.version }}
node-version: ">=20.18.1"
- run: npm ci
- run: cp config.json.example config.json
- run: echo '{"version":"","buildLabel":"","matchmakingBuildId":""}' > static/data/buildConfig.json
- run: npm run build
- run: npm run lint
- run: cp config-vanilla.json config.json
- run: npm run verify
- run: npm run lint:ci
- run: npm run prettier
- run: npm run update-translations
- name: Fail if there are uncommitted changes
run: |
if [[ -n "$(git status --porcelain)" ]]; then
echo "Uncommitted changes detected:"
git status
git --no-pager diff
exit 1
fi

27
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: Build Docker image
on:
push:
branches:
- main
jobs:
docker:
if: github.repository == 'OpenWF/SpaceNinjaServer'
runs-on: ubuntu-latest
steps:
- name: Set up Docker buildx
uses: docker/setup-buildx-action@v3
- name: Log in to container registry
uses: docker/login-action@v3
with:
username: openwf
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
platforms: linux/arm64,linux/amd64
push: true
tags: |
openwf/spaceninjaserver:latest
openwf/spaceninjaserver:latest-arm64
openwf/spaceninjaserver:${{ github.sha }}
openwf/spaceninjaserver:${{ github.sha }}-arm64

5
.gitignore vendored
View File

@@ -15,4 +15,7 @@ yarn.lock
/logs
# MongoDB VSCode extension playground scripts
/database_scripts
/database_scripts
# Default Docker directory
/docker-data

View File

@@ -1,2 +1,5 @@
src/routes/api.ts
static/webui/libs/
*.html
*.md
config-vanilla.json

3
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"recommendations": ["dbaeumer.vscode-eslint"]
}

18
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,18 @@
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug and Watch",
"args": ["${workspaceFolder}/scripts/dev.js"],
"console": "integratedTerminal"
}
]
}
//can use "console": "internalConsole" for VS Code's Debug Console. For that, forceConsole in logger.ts is needed to be true
//"internalConsoleOptions": "openOnSessionStart" can be useful then

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"typescript.preferences.preferTypeOnlyAutoImports": true
}

19
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,19 @@
## In General
### Prerequisites
Use `npm i` or `npm ci` to install all dependencies, including dev dependencies.
### Development Process
Auto reloading is supported for server and WebUI development. Simply use `npm run dev` or `npm run dev:bun` to start the server and edit away.
### Testing
Before submitting a PR:
- Use `npm run verify` to verify that the code is type-safe.
- Use `npm run fix` to fix formatting issues as well as be informed of any unfixable issues. Avoid introducing new warnings.
## WebUI Specific
The translation system is designed around additions being made to `static/webui/translations/en.js`. They are copied over for translation via `npm run update-translations`. DO NOT provide translations generated by AI or other automated tools.

View File

@@ -1,5 +1,11 @@
FROM mongo as base
FROM node:24-alpine3.21
EXPOSE 27017
RUN apk add --no-cache bash jq
CMD ["mongod"]
COPY . /app
WORKDIR /app
RUN npm i --omit=dev --omit=optional
RUN date '+%d %B %Y' > BUILD_DATE
ENTRYPOINT ["/app/docker-entrypoint.sh"]

151
LICENSE
View File

@@ -1,5 +1,15 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
“Commons Clause” License Condition v1.0
The Software is provided to you by the Licensor under the License, as defined below, subject to the following condition.
Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software.
For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Clause License Condition notice.
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
@@ -7,17 +17,15 @@ GNU GENERAL PUBLIC LICENSE
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
@@ -26,44 +34,34 @@ them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
@@ -72,7 +70,7 @@ modification follow.
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
@@ -549,35 +547,45 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
@@ -635,40 +643,29 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU Affero General Public License for more details.
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@@ -1,3 +1,42 @@
# Space Ninja Server
More information for the moment here: [https://discord.gg/PNNZ3asUuY](https://discord.gg/PNNZ3asUuY)
## Project Status
This project is in active development at <https://onlyg.it/OpenWF/SpaceNinjaServer>.
To get an idea of what functionality you can expect to be missing [have a look through the issues](https://onlyg.it/OpenWF/SpaceNinjaServer/issues). However, many things have been implemented and *should* work as expected. Please open an issue for anything where that's not the case and/or the server is reporting errors.
## config.json
SpaceNinjaServer requires a `config.json`. To set it up, you can copy the [config-vanilla.json](config-vanilla.json), which has most cheats disabled.
- `skipTutorial` affects only newly created accounts, so you may wish to change it before logging in for the first time.
- `logger.level` can be `fatal`, `error`, `warn`, `info`, `http`, `debug`, or `trace`.
- `bindAddress`, `httpPort`, `httpsPort` are related to how SpaceNinjaServer is reached on the network. Under Docker, these options are unchangable; modify your `docker-compose.yml`, instead.
- `ircExecutable` can be provided with a relative path to an EXE which will be ran as a child process of SpaceNinjaServer.
- `ircAddress`, `hubAddress`, and `nrsAddress` can be provided if these secondary servers are on a different machine.
- `worldState.eidolonOverride` can be set to `day` or `night` to lock the time to day/fass and night/vome on Plains of Eidolon/Cambion Drift.
- `worldState.vallisOverride` can be set to `warm` or `cold` to lock the temperature on Orb Vallis.
- `worldState.duviriOverride` can be set to `joy`, `anger`, `envy`, `sorrow`, or `fear` to lock the Duviri spiral.
- `worldState.nightwaveOverride` will lock the nightwave season, assuming the client is new enough for it. Valid values:
- `RadioLegionIntermission14Syndicate` for Nora's Mix: Dreams of the Dead
- `RadioLegionIntermission13Syndicate` for Nora's Mix Vol. 9
- `RadioLegionIntermission12Syndicate` for Nora's Mix Vol. 8
- `RadioLegionIntermission11Syndicate` for Nora's Mix Vol. 7
- `RadioLegionIntermission10Syndicate` for Nora's Mix Vol. 6
- `RadioLegionIntermission9Syndicate` for Nora's Mix Vol. 5
- `RadioLegionIntermission8Syndicate` for Nora's Mix Vol. 4
- `RadioLegionIntermission7Syndicate` for Nora's Mix Vol. 3
- `RadioLegionIntermission6Syndicate` for Nora's Mix Vol. 2
- `RadioLegionIntermission5Syndicate` for Nora's Mix Vol. 1
- `RadioLegionIntermission4Syndicate` for Nora's Choice
- `RadioLegionIntermission3Syndicate` for Intermission III
- `RadioLegion3Syndicate` for Glassmaker
- `RadioLegionIntermission2Syndicate` for Intermission II
- `RadioLegion2Syndicate` for The Emissary
- `RadioLegionIntermissionSyndicate` for Intermission I
- `RadioLegionSyndicate` for The Wolf of Saturn Six
- `worldState.allTheFissures` can be set to `normal` or `hard` to enable all fissures either in normal or steel path, respectively.
- `worldState.circuitGameModes` can be set to an array of game modes which will override the otherwise-random pattern in The Circuit. Valid element values are `Survival`, `VoidFlood`, `Excavation`, `Defense`, `Exterminate`, `Assassination`, and `Alchemy`.

View File

@@ -0,0 +1,33 @@
@echo off
echo Updating SpaceNinjaServer...
git fetch --prune
if %errorlevel% == 0 (
git stash
git checkout -f origin/main
if exist static\data\0\ (
echo Updating stripped assets...
cd static\data\0\
git pull
cd ..\..\..\
)
echo Updating dependencies...
node scripts/raw-precheck.js > NUL
if %errorlevel% == 0 (
call npm i --omit=dev --omit=optional
call npm run raw
) else (
call npm i --omit=dev
call npm run build
if %errorlevel% == 0 (
call npm run start
)
)
echo SpaceNinjaServer seems to have crashed.
)
:a
pause > nul
goto a

29
UPDATE AND START SERVER.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/bash
echo "Updating SpaceNinjaServer..."
git fetch --prune
if [ $? -eq 0 ]; then
git stash
git checkout -f origin/main
if [ -d "static/data/0/" ]; then
echo "Updating stripped assets..."
cd static/data/0/
git pull
cd ../../../
fi
echo "Updating dependencies..."
node scripts/raw-precheck.js > /dev/null
if [ $? -eq 0 ]; then
npm i --omit=dev --omit=optional
npm run raw
else
npm i --omit=dev
npm run build
if [ $? -eq 0 ]; then
npm run start
fi
fi
echo "SpaceNinjaServer seems to have crashed."
fi

82
config-vanilla.json Normal file
View File

@@ -0,0 +1,82 @@
{
"mongodbUrl": "mongodb://127.0.0.1:27017/openWF",
"logger": {
"files": true,
"level": "trace"
},
"myAddress": "localhost",
"bindAddress": "0.0.0.0",
"httpPort": 80,
"httpsPort": 443,
"ircExecutable": null,
"ircAddress": null,
"hubAddress": null,
"nrsAddress": null,
"administratorNames": [],
"autoCreateAccount": true,
"skipTutorial": false,
"unlockAllSkins": false,
"fullyStockedVendors": false,
"skipClanKeyCrafting": false,
"unfaithfulBugFixes": {
"ignore1999LastRegionPlayed": false,
"fixXtraCheeseTimer": false,
"useAnniversaryTagForOldGoals": true
},
"worldState": {
"creditBoost": false,
"affinityBoost": false,
"resourceBoost": false,
"tennoLiveRelay": false,
"baroTennoConRelay": false,
"baroAlwaysAvailable": false,
"baroFullyStocked": false,
"varziaFullyStocked": false,
"wolfHunt": null,
"orphixVenom": false,
"longShadow": false,
"hallowedFlame": false,
"anniversary": null,
"hallowedNightmares": false,
"hallowedNightmaresRewardsOverride": 0,
"naberusNightsOverride": null,
"proxyRebellion": false,
"proxyRebellionRewardsOverride": 0,
"voidCorruption2025Week1": false,
"voidCorruption2025Week2": false,
"voidCorruption2025Week3": false,
"voidCorruption2025Week4": false,
"qtccAlerts": false,
"galleonOfGhouls": 0,
"ghoulEmergenceOverride": null,
"plagueStarOverride": null,
"starDaysOverride": null,
"dogDaysOverride": null,
"dogDaysRewardsOverride": null,
"bellyOfTheBeast": false,
"bellyOfTheBeastProgressOverride": 0,
"eightClaw": false,
"eightClawProgressOverride": 0,
"thermiaFracturesOverride": null,
"thermiaFracturesProgressOverride": 0,
"eidolonOverride": "",
"vallisOverride": "",
"duviriOverride": "",
"nightwaveOverride": "",
"allTheFissures": "",
"varziaOverride": "",
"circuitGameModes": null,
"darvoStockMultiplier": 1
},
"tunables": {
"useLoginToken": false,
"prohibitSkipMissionStartTimer": false,
"prohibitFovOverride": false,
"prohibitFreecam": false,
"prohibitTeleport": false,
"prohibitScripts": false
},
"dev": {
"keepVendorsExpired": false
}
}

View File

@@ -1,26 +0,0 @@
{
"mongodbUrl": "mongodb://127.0.0.1:27017/openWF",
"logger": {
"files": true,
"level": "trace",
"__valid_levels": "fatal, error, warn, info, http, debug, trace"
},
"myAddress": "localhost",
"httpPort": 80,
"httpsPort": 443,
"autoCreateAccount": true,
"skipStoryModeChoice": true,
"skipTutorial": true,
"skipAllDialogue": true,
"unlockAllScans": true,
"unlockAllMissions": true,
"unlockAllQuests": true,
"completeAllQuests": false,
"infiniteResources": true,
"unlockAllShipFeatures": true,
"unlockAllShipDecorations": true,
"unlockAllFlavourItems": true,
"unlockAllSkins": true,
"universalPolarityEverywhere": true,
"spoofMasteryRank": -1
}

View File

@@ -1,24 +1,26 @@
version: "3.9"
services:
mongodb:
container_name: mongodb
image: mongodb
restart: always
build:
context: .
dockerfile: Dockerfile
target: base
environment:
MONGO_INITDB_ROOT_USERNAME: ${DATABASE_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
ports:
- ${DATABASE_PORT}:${DATABASE_PORT}
expose:
- "${DATABASE_PORT}"
networks:
- docker
spaceninjaserver:
image: openwf/spaceninjaserver:latest
networks:
docker:
external: true
volumes:
- ./docker-data/conf:/app/conf
- ./docker-data/static-data:/app/static/data
- ./docker-data/logs:/app/logs
ports:
# The lefthand value determines the port you actually connect to. Within the container, SpaceNinjaServer will always use 80 and 443 (righthand values).
- 80:80
- 443:443
# Normally, the image is fetched from Docker Hub, but you can use the local Dockerfile by removing "image" above and adding this:
#build: .
# Works best when using `docker compose up --force-recreate --build`.
environment:
- CHOKIDAR_USEPOLLING=true
depends_on:
- mongodb
mongodb:
image: docker.io/library/mongo:8.0.0-noble
volumes:
- ./docker-data/database:/data/db
command: mongod --quiet --logpath /dev/null

8
docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -e
if [ ! -f conf/config.json ]; then
jq --arg value "mongodb://mongodb:27017/openWF" '.mongodbUrl = $value | del(.bindAddress) | del(.httpPort) | del(.httpsPort)' /app/config-vanilla.json > /app/conf/config.json
fi
exec npm run raw -- --configPath conf/config.json --docker

5037
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,41 +1,65 @@
{
"name": "wf-emulator",
"name": "spaceninjaserver",
"version": "0.1.0",
"description": "WF Emulator",
"description": "SpaceNinjaServer",
"main": "index.ts",
"scripts": {
"start": "node --import ./build/src/pathman.js build/src/index.js",
"dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts ",
"build": "tsc && copyfiles static/webui/** build",
"start": "node --enable-source-maps build/src/index.js",
"build": "tsgo --inlineSourceMap && ncp static/webui build/static/webui",
"build:tsc": "tsc --incremental --inlineSourceMap && ncp static/webui build/static/webui",
"build:dev": "tsgo --inlineSourceMap",
"build:dev:tsc": "tsc --incremental --inlineSourceMap",
"build-and-start": "npm run build && npm run start",
"dev": "node scripts/dev.cjs",
"dev:bun": "bun scripts/dev.cjs",
"verify": "tsgo --noEmit",
"verify:tsc": "tsc --noEmit",
"raw": "node scripts/raw-precheck.js && node --experimental-transform-types src/index.ts",
"raw:bun": "bun src/index.ts",
"lint": "eslint --ext .ts .",
"lint:ci": "eslint --ext .ts --rule \"prettier/prettier: off\" .",
"lint:fix": "eslint --fix --ext .ts .",
"prettier": "prettier --write ."
"prettier": "prettier --write .",
"update-translations": "cd scripts && node update-translations.cjs",
"fix": "npm run update-translations && npm run prettier"
},
"license": "GNU",
"type": "module",
"dependencies": {
"copyfiles": "^2.4.1",
"express": "^5.0.0-beta.3",
"mongoose": "^8.4.5",
"warframe-public-export-plus": "^0.4.4",
"warframe-riven-info": "^0.1.1",
"winston": "^3.13.0",
"winston-daily-rotate-file": "^5.0.0"
"body-parser": "^2.2.0",
"chokidar": "^4.0.3",
"crc-32": "^1.2.2",
"express": "^5",
"json-with-bigint": "^3.4.4",
"mongoose": "^8.11.0",
"morgan": "^1.10.0",
"ncp": "^2.0.0",
"undici": "^7.10.0",
"warframe-public-export-plus": "^0.5.93",
"warframe-riven-info": "^0.1.2",
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0",
"ws": "^8.18.2"
},
"optionalDependencies": {
"@types/body-parser": "^1.19.6",
"@types/express": "^5",
"@types/morgan": "^1.9.9",
"@types/websocket": "^1.0.10",
"@types/ws": "^8.18.1",
"@typescript/native-preview": "^7.0.0-dev.20250625.1",
"typescript": "^5.7"
},
"devDependencies": {
"@types/express": "^4.17.20",
"@types/morgan": "^1.9.9",
"@typescript-eslint/eslint-plugin": "^7.14",
"@typescript-eslint/parser": "^7.14",
"eslint": "^8.56.0",
"eslint-plugin-prettier": "^5.1.3",
"morgan": "^1.10.0",
"prettier": "^3.3.2",
"ts-node-dev": "^2.0.0",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.5"
"@typescript-eslint/eslint-plugin": "^8.28.0",
"@typescript-eslint/parser": "^8.28.0",
"eslint": "^8",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.2.5",
"prettier": "^3.5.3",
"tree-kill": "^1.2.2"
},
"engines": {
"node": ">=18.15.0",
"npm": ">=9.5.0"
"node": ">=20.18.1"
}
}

81
scripts/dev.cjs Normal file
View File

@@ -0,0 +1,81 @@
/* eslint-disable */
const { spawn } = require("child_process");
const chokidar = require("chokidar");
const kill = require("tree-kill");
let secret = "";
for (let i = 0; i != 10; ++i) {
secret += String.fromCharCode(Math.floor(Math.random() * 26) + 0x41);
}
const args = [...process.argv].splice(2);
args.push("--dev");
args.push("--secret");
args.push(secret);
const cangoraw = (() => {
if (process.versions.bun) {
return true;
}
const [major, minor] = process.versions.node.split(".").map(x => parseInt(x));
if (major > 22 || (major == 22 && minor >= 7)) {
return true;
}
return false;
})();
let buildproc, runproc;
const spawnopts = { stdio: "inherit", shell: true };
function run(changedFile) {
if (changedFile) {
console.log(`Change to ${changedFile} detected`);
}
if (buildproc) {
kill(buildproc.pid);
buildproc = undefined;
}
if (runproc) {
kill(runproc.pid);
runproc = undefined;
}
const thisbuildproc = spawn(
[process.versions.bun ? "bun" : "npm", "run", cangoraw ? "verify" : "build:dev"].join(" "),
spawnopts
);
const thisbuildstart = Date.now();
buildproc = thisbuildproc;
buildproc.on("exit", code => {
if (buildproc !== thisbuildproc) {
return;
}
buildproc = undefined;
if (code === 0) {
console.log(`${cangoraw ? "Verified" : "Built"} in ${Date.now() - thisbuildstart} ms`);
runproc = spawn(
[
process.versions.bun ? "bun" : "npm",
"run",
cangoraw ? (process.versions.bun ? "raw:bun" : "raw") : "start",
"--",
...args
].join(" "),
spawnopts
);
runproc.on("exit", () => {
runproc = undefined;
});
}
});
}
run();
chokidar.watch("src").on("change", run);
chokidar.watch("static/fixed_responses").on("change", run);
chokidar.watch("static/webui").on("change", async () => {
try {
await fetch("http://localhost/custom/webuiFileChangeDetected?secret=" + secret);
} catch (e) {}
});

9
scripts/raw-precheck.js Normal file
View File

@@ -0,0 +1,9 @@
const [major, minor] = process.versions.node.split(".").map(x => parseInt(x));
if (major > 22 || (major == 22 && minor >= 7)) {
// ok
} else {
console.log("Sorry, your Node version is a bit too old for this. You have 2 options:");
console.log("- Update Node.js.");
console.log("- Use 'npm run build && npm run start'. Optional libraries must be installed for this.");
process.exit(1);
}

View File

@@ -0,0 +1,47 @@
// Based on https://onlyg.it/OpenWF/Translations/src/branch/main/update.php
// Converted via ChatGPT-4o
/* eslint-disable */
const fs = require("fs");
function extractStrings(content) {
const regex = /([a-zA-Z0-9_]+): `([^`]*)`,/g;
let matches;
const strings = {};
while ((matches = regex.exec(content)) !== null) {
strings[matches[1]] = matches[2];
}
return strings;
}
const source = fs.readFileSync("../static/webui/translations/en.js", "utf8");
const sourceStrings = extractStrings(source);
const sourceLines = source.substring(0, source.length - 1).split("\n");
fs.readdirSync("../static/webui/translations").forEach(file => {
if (fs.lstatSync(`../static/webui/translations/${file}`).isFile() && file !== "en.js") {
const content = fs.readFileSync(`../static/webui/translations/${file}`, "utf8");
const targetStrings = extractStrings(content);
const contentLines = content.split("\n");
const fileHandle = fs.openSync(`../static/webui/translations/${file}`, "w");
fs.writeSync(fileHandle, contentLines[0] + "\n");
sourceLines.forEach(line => {
const strings = extractStrings(line);
if (Object.keys(strings).length > 0) {
Object.entries(strings).forEach(([key, value]) => {
if (targetStrings.hasOwnProperty(key) && !targetStrings[key].startsWith("[UNTRANSLATED]")) {
fs.writeSync(fileHandle, ` ${key}: \`${targetStrings[key]}\`,\n`);
} else {
fs.writeSync(fileHandle, ` ${key}: \`[UNTRANSLATED] ${value}\`,\n`);
}
});
} else {
fs.writeSync(fileHandle, line + "\n");
}
});
fs.closeSync(fileHandle);
}
});

View File

@@ -1,45 +1,51 @@
import express from "express";
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 { unknownEndpointHandler } from "./middleware/middleware.ts";
import { requestLogger } from "./middleware/morgenMiddleware.ts";
import { errorHandler } from "./middleware/errorHandler.ts";
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 { webuiRouter } from "@/src/routes/webui";
import { connectDatabase } from "@/src/services/mongoService";
import { registerLogFileCreationListener } from "@/src/utils/logger";
void registerLogFileCreationListener();
void connectDatabase();
import { apiRouter } from "./routes/api.ts";
import { cacheRouter } from "./routes/cache.ts";
import { customRouter } from "./routes/custom.ts";
import { dynamicController } from "./routes/dynamic.ts";
import { payRouter } from "./routes/pay.ts";
import { statsRouter } from "./routes/stats.ts";
import { webuiRouter } from "./routes/webui.ts";
const app = express();
app.use((req, _res, next) => {
// 38.5.0 introduced "ezip" for encrypted body blobs and "e" for request verification only (encrypted body blobs with no application data).
// The client patch is expected to decrypt it for us but having an unsupported Content-Encoding here would still be an issue for Express, so removing it.
if (req.headers["content-encoding"] == "ezip" || req.headers["content-encoding"] == "e") {
req.headers["content-encoding"] = undefined;
}
// U18 uses application/x-www-form-urlencoded even tho the data is JSON which Express doesn't like.
// U17 sets no Content-Type at all, which Express also doesn't like.
if (!req.headers["content-type"] || req.headers["content-type"] == "application/x-www-form-urlencoded") {
req.headers["content-type"] = "application/octet-stream";
}
next();
});
app.use(bodyParser.raw());
app.use(express.json());
app.use(bodyParser.text());
app.use(express.json({ limit: "4mb" }));
app.use(bodyParser.text({ limit: "4mb" }));
app.use(requestLogger);
//app.use(requestLogger);
app.use("/api", apiRouter);
//app.use("/test", testRouter);
app.use("/", cacheRouter);
app.use("/custom", customRouter);
app.use("/dynamic", dynamicController);
app.use("/:id/dynamic", dynamicController);
app.post("/pay/steamPacks.php", steamPacksController);
app.use("/pay", payRouter);
app.use("/stats", statsRouter);
app.use("/", webuiRouter);
app.use(unknownEndpointHandler);
//app.use(errorHandler)
app.use(errorHandler);
export { app };

View File

@@ -1,16 +1,21 @@
export const EPOCH = 1734307200_000; // Monday, Dec 16, 2024 @ 00:00 UTC+0; should logically be the start of winter in 1999 iteration 0
const millisecondsPerSecond = 1000;
const secondsPerMinute = 60;
const minutesPerHour = 60;
const hoursPerDay = 24;
const daysPerWeek = 7;
const unixSecond = millisecondsPerSecond;
const unixMinute = secondsPerMinute * millisecondsPerSecond;
const unixHour = unixMinute * minutesPerHour;
const unixDay = hoursPerDay * unixHour;
const unixWeek = daysPerWeek * unixDay;
export const unixTimesInMs = {
second: unixSecond,
minute: unixMinute,
hour: unixHour,
day: unixDay
day: unixDay,
week: unixWeek
};

View File

@@ -0,0 +1,11 @@
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const abandonLibraryDailyTaskController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
inventory.LibraryActiveDailyTaskInfo = undefined;
await inventory.save();
res.status(200).end();
};

View File

@@ -0,0 +1,47 @@
import {
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
hasGuildPermission,
removeDojoDeco,
removeDojoRoom
} from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const abortDojoComponentController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId LevelKeys");
const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IAbortDojoComponentRequest;
if (
!hasAccessToDojo(inventory) ||
!(await hasGuildPermission(
guild,
accountId,
request.DecoId ? GuildPermission.Decorator : GuildPermission.Architect
))
) {
res.json({ DojoRequestStatus: -1 });
return;
}
if (request.DecoId) {
removeDojoDeco(guild, request.ComponentId, request.DecoId);
await guild.save();
res.json(await getDojoClient(guild, 0, request.ComponentId));
} else {
await removeDojoRoom(guild, request.ComponentId);
await guild.save();
res.json(await getDojoClient(guild, 0));
}
};
interface IAbortDojoComponentRequest {
DecoType?: string;
ComponentId: string;
DecoId?: string;
}

View File

@@ -0,0 +1,26 @@
import {
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
hasGuildPermission
} from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const abortDojoComponentDestructionController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId LevelKeys");
const guild = await getGuildForRequestEx(req, inventory);
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Architect))) {
res.json({ DojoRequestStatus: -1 });
return;
}
const componentId = req.query.componentId as string;
guild.DojoComponents.id(componentId)!.DestructionTime = undefined;
await guild.save();
res.json(await getDojoClient(guild, 0, componentId));
};

View File

@@ -0,0 +1,47 @@
import { toOid2 } from "../../helpers/inventoryHelpers.ts";
import {
createVeiledRivenFingerprint,
createUnveiledRivenFingerprint,
rivenRawToRealWeighted
} from "../../helpers/rivenHelper.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { addMods, getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { getRandomElement } from "../../services/rngService.ts";
import type { RequestHandler } from "express";
import { ExportUpgrades } from "warframe-public-export-plus";
export const activateRandomModController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const accountId = account._id.toString();
const inventory = await getInventory(accountId, "RawUpgrades Upgrades instantFinishRivenChallenge");
const request = getJSONfromString<IActiveRandomModRequest>(String(req.body));
addMods(inventory, [
{
ItemType: request.ItemType,
ItemCount: -1
}
]);
const rivenType = getRandomElement(rivenRawToRealWeighted[request.ItemType])!;
const fingerprint = inventory.instantFinishRivenChallenge
? createUnveiledRivenFingerprint(ExportUpgrades[rivenType])
: createVeiledRivenFingerprint(ExportUpgrades[rivenType]);
const upgradeIndex =
inventory.Upgrades.push({
ItemType: rivenType,
UpgradeFingerprint: JSON.stringify(fingerprint)
}) - 1;
await inventory.save();
// For some reason, in this response, the UpgradeFingerprint is simply a nested object and not a string
res.json({
NewMod: {
UpgradeFingerprint: fingerprint,
ItemType: rivenType,
ItemId: toOid2(inventory.Upgrades[upgradeIndex]._id, account.BuildLabel)
}
});
};
interface IActiveRandomModRequest {
ItemType: string;
}

View File

@@ -0,0 +1,60 @@
import { toOid } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Friendship } from "../../models/friendModel.ts";
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "../../services/friendService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IFriendInfo } from "../../types/friendTypes.ts";
import type { RequestHandler } from "express";
export const addFriendController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const payload = getJSONfromString<IAddFriendRequest>(String(req.body));
const promises: Promise<void>[] = [];
const newFriends: IFriendInfo[] = [];
if (payload.friend == "all") {
const [internalFriendships, externalFriendships] = await Promise.all([
Friendship.find({ owner: accountId }, "friend"),
Friendship.find({ friend: accountId }, "owner")
]);
for (const externalFriendship of externalFriendships) {
if (!internalFriendships.find(x => x.friend.equals(externalFriendship.owner))) {
promises.push(
Friendship.insertOne({
owner: accountId,
friend: externalFriendship.owner,
Note: externalFriendship.Note // TOVERIFY: Should the note be copied when accepting a friend request?
}) as unknown as Promise<void>
);
newFriends.push({
_id: toOid(externalFriendship.owner)
});
}
}
} else {
const externalFriendship = await Friendship.findOne({ owner: payload.friend, friend: accountId }, "Note");
if (externalFriendship) {
promises.push(
Friendship.insertOne({
owner: accountId,
friend: payload.friend,
Note: externalFriendship.Note
}) as unknown as Promise<void>
);
newFriends.push({
_id: { $oid: payload.friend }
});
}
}
for (const newFriend of newFriends) {
promises.push(addAccountDataToFriendInfo(newFriend));
promises.push(addInventoryDataToFriendInfo(newFriend));
}
await Promise.all(promises);
res.json({
Friends: newFriends
});
};
interface IAddFriendRequest {
friend: string; // oid or "all" in which case all=1 is also a query parameter
}

View File

@@ -1,17 +1,40 @@
import { RequestHandler } from "express";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { IUpdateGlyphRequest } from "@/src/types/requestTypes";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory } from "@/src/services/inventoryService";
import type { RequestHandler } from "express";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const addFriendImageController: RequestHandler = async (req, res) => {
export const addFriendImageGetController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const json = getJSONfromString(String(req.body)) as IUpdateGlyphRequest;
const inventory = await getInventory(accountId);
inventory.ActiveAvatarImageType = json.AvatarImageType;
await inventory.save();
await Inventory.updateOne(
{
accountOwnerId: accountId
},
{
ActiveAvatarImageType: String(req.query.avatarImageType)
}
);
res.json({});
};
export { addFriendImageController };
export const addFriendImagePostController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const json = getJSONfromString<IUpdateGlyphRequest>(String(req.body));
await Inventory.updateOne(
{
accountOwnerId: accountId
},
{
ActiveAvatarImageType: json.AvatarImageType
}
);
res.json({});
};
interface IUpdateGlyphRequest {
AvatarImageType: string;
AvatarImage: string;
}

View File

@@ -0,0 +1,30 @@
import { toOid } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Account, Ignore } from "../../models/loginModel.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IFriendInfo } from "../../types/friendTypes.ts";
import type { RequestHandler } from "express";
export const addIgnoredUserController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const data = getJSONfromString<IAddIgnoredUserRequest>(String(req.body));
const ignoreeAccount = await Account.findOne(
{ DisplayName: data.playerName.substring(0, data.playerName.length - 1) },
"_id"
);
if (ignoreeAccount) {
await Ignore.create({ ignorer: accountId, ignoree: ignoreeAccount._id });
res.json({
Ignored: {
_id: toOid(ignoreeAccount._id),
DisplayName: data.playerName
} satisfies IFriendInfo
});
} else {
res.status(400).end();
}
};
interface IAddIgnoredUserRequest {
playerName: string;
}

View File

@@ -0,0 +1,52 @@
import { toMongoDate, toOid } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Friendship } from "../../models/friendModel.ts";
import { Account } from "../../models/loginModel.ts";
import { addInventoryDataToFriendInfo, areFriendsOfFriends } from "../../services/friendService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IFriendInfo } from "../../types/friendTypes.ts";
import type { RequestHandler } from "express";
export const addPendingFriendController: RequestHandler = async (req, res) => {
const payload = getJSONfromString<IAddPendingFriendRequest>(String(req.body));
const account = await Account.findOne({ DisplayName: payload.friend });
if (!account) {
res.status(400).end();
return;
}
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(account._id.toString(), "Settings");
if (
inventory.Settings?.FriendInvRestriction == "GIFT_MODE_NONE" ||
(inventory.Settings?.FriendInvRestriction == "GIFT_MODE_FRIENDS" &&
!(await areFriendsOfFriends(account._id, accountId)))
) {
res.status(400).send("Friend Invite Restriction");
return;
}
await Friendship.insertOne({
owner: accountId,
friend: account._id,
Note: payload.message
});
const friendInfo: IFriendInfo = {
_id: toOid(account._id),
DisplayName: account.DisplayName,
LastLogin: toMongoDate(account.LastLogin),
Note: payload.message
};
await addInventoryDataToFriendInfo(friendInfo);
res.json({
Friend: friendInfo
});
};
interface IAddPendingFriendRequest {
friend: string;
message: string;
}

View File

@@ -0,0 +1,117 @@
import { getJSONfromString, regexEscape } from "../../helpers/stringHelpers.ts";
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
import { createMessage } from "../../services/inboxService.ts";
import { getEffectiveAvatarImageType, getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest, getSuffixedName } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { logger } from "../../utils/logger.ts";
import type { RequestHandler } from "express";
import { ExportFlavour } from "warframe-public-export-plus";
export const addToAllianceController: RequestHandler = async (req, res) => {
// Check requester is a warlord in their guild
const account = await getAccountForRequest(req);
const guildMember = (await GuildMember.findOne({ accountId: account._id, status: 0 }))!;
if (guildMember.rank > 1) {
res.status(400).json({ Error: 104 });
return;
}
// Check guild has invite permissions in the alliance
const allianceMember = (await AllianceMember.findOne({
allianceId: req.query.allianceId,
guildId: guildMember.guildId
}))!;
if (!(allianceMember.Permissions & GuildPermission.Recruiter)) {
res.status(400).json({ Error: 104 });
return;
}
// Find clan to invite
const payload = getJSONfromString<IAddToAllianceRequest>(String(req.body));
const guilds = await Guild.find(
{
Name:
payload.clanName.indexOf("#") == -1
? new RegExp("^" + regexEscape(payload.clanName) + "#...$")
: payload.clanName
},
"Name"
);
if (guilds.length == 0) {
res.status(400).json({ Error: 101 });
return;
}
if (guilds.length > 1) {
const choices: IGuildChoice[] = [];
for (const guild of guilds) {
choices.push({
OriginalPlatform: 0,
Name: guild.Name
});
}
res.json(choices);
return;
}
// Add clan as a pending alliance member
try {
await AllianceMember.insertOne({
allianceId: req.query.allianceId,
guildId: guilds[0]._id,
Pending: true,
Permissions: 0
});
} catch (e) {
logger.debug(`alliance invite failed due to ${String(e)}`);
res.status(400).json({ Error: 102 });
return;
}
// Send inbox message to founding warlord
// TOVERIFY: Should other warlords get this as well?
// TOVERIFY: Who/what should the sender be?
// TOVERIFY: Should this message be highPriority?
const invitedClanOwnerMember = (await GuildMember.findOne({ guildId: guilds[0]._id, rank: 0 }))!;
const senderInventory = await getInventory(account._id.toString(), "ActiveAvatarImageType");
const senderGuild = (await Guild.findById(allianceMember.guildId, "Name"))!;
const alliance = (await Alliance.findById(req.query.allianceId as string, "Name"))!;
await createMessage(invitedClanOwnerMember.accountId, [
{
sndr: getSuffixedName(account),
msg: "/Lotus/Language/Menu/Mailbox_AllianceInvite_Body",
arg: [
{
Key: "THEIR_CLAN",
Tag: senderGuild.Name
},
{
Key: "CLAN",
Tag: guilds[0].Name
},
{
Key: "ALLIANCE",
Tag: alliance.Name
}
],
sub: "/Lotus/Language/Menu/Mailbox_AllianceInvite_Title",
icon: ExportFlavour[getEffectiveAvatarImageType(senderInventory)].icon,
contextInfo: alliance._id.toString(),
highPriority: true,
acceptAction: "ALLIANCE_INVITE",
declineAction: "ALLIANCE_INVITE",
hasAccountAction: true
}
]);
res.end();
};
interface IAddToAllianceRequest {
clanName: string;
}
interface IGuildChoice {
OriginalPlatform: number;
Name: string;
}

View File

@@ -0,0 +1,112 @@
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
import { Guild, GuildMember } from "../../models/guildModel.ts";
import { Account } from "../../models/loginModel.ts";
import { addInventoryDataToFriendInfo, areFriends } from "../../services/friendService.ts";
import { hasGuildPermission } from "../../services/guildService.ts";
import { createMessage } from "../../services/inboxService.ts";
import { getEffectiveAvatarImageType, getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "../../services/loginService.ts";
import type { IOid } from "../../types/commonTypes.ts";
import type { IGuildMemberClient } from "../../types/guildTypes.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { logger } from "../../utils/logger.ts";
import type { RequestHandler } from "express";
import { ExportFlavour } from "warframe-public-export-plus";
export const addToGuildController: RequestHandler = async (req, res) => {
const payload = JSON.parse(String(req.body)) as IAddToGuildRequest;
if ("UserName" in payload) {
// Clan recruiter sending an invite
const account = await Account.findOne({ DisplayName: payload.UserName });
if (!account) {
res.status(400).json("Username does not exist");
return;
}
const senderAccount = await getAccountForRequest(req);
const inventory = await getInventory(account._id.toString(), "Settings");
if (
inventory.Settings?.GuildInvRestriction == "GIFT_MODE_NONE" ||
(inventory.Settings?.GuildInvRestriction == "GIFT_MODE_FRIENDS" &&
!(await areFriends(account._id, senderAccount._id)))
) {
res.status(400).json("Invite restricted");
return;
}
const guild = (await Guild.findById(payload.GuildId.$oid, "Name Ranks"))!;
if (!(await hasGuildPermission(guild, senderAccount._id.toString(), GuildPermission.Recruiter))) {
res.status(400).json("Invalid permission");
}
try {
await GuildMember.insertOne({
accountId: account._id,
guildId: payload.GuildId.$oid,
status: 2 // outgoing invite
});
} catch (e) {
logger.debug(`guild invite failed due to ${String(e)}`);
res.status(400).json("User already invited to clan");
return;
}
const senderInventory = await getInventory(senderAccount._id.toString(), "ActiveAvatarImageType");
await createMessage(account._id, [
{
sndr: getSuffixedName(senderAccount),
msg: "/Lotus/Language/Menu/Mailbox_ClanInvite_Body",
arg: [
{
Key: "clan",
Tag: guild.Name
}
],
sub: "/Lotus/Language/Menu/Mailbox_ClanInvite_Title",
icon: ExportFlavour[getEffectiveAvatarImageType(senderInventory)].icon,
contextInfo: payload.GuildId.$oid,
highPriority: true,
acceptAction: "GUILD_INVITE",
declineAction: "GUILD_INVITE",
hasAccountAction: true
}
]);
const member: IGuildMemberClient = {
_id: { $oid: account._id.toString() },
DisplayName: account.DisplayName,
LastLogin: toMongoDate(account.LastLogin),
Rank: 7,
Status: 2
};
await addInventoryDataToFriendInfo(member);
res.json({ NewMember: member });
} else if ("RequestMsg" in payload) {
// Player applying to join a clan
const accountId = await getAccountIdForRequest(req);
try {
await GuildMember.insertOne({
accountId,
guildId: payload.GuildId.$oid,
status: 1, // incoming invite
RequestMsg: payload.RequestMsg,
RequestExpiry: new Date(Date.now() + 14 * 86400 * 1000) // TOVERIFY: I can't find any good information about this with regards to live, but 2 weeks seem reasonable.
});
} catch (e) {
logger.debug(`guild invite failed due to ${String(e)}`);
res.status(400).send("Already requested");
}
res.end();
} else {
logger.error(`data provided to ${req.path}: ${String(req.body)}`);
res.status(400).end();
}
};
interface IAddToGuildRequest {
UserName?: string;
GuildId: IOid;
RequestMsg?: string;
}

View File

@@ -0,0 +1,27 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const adoptPetController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "KubrowPets");
const data = getJSONfromString<IAdoptPetRequest>(String(req.body));
const details = inventory.KubrowPets.id(data.petId)!.Details!;
details.Name = data.name;
await inventory.save();
res.json({
petId: data.petId,
newName: data.name
} satisfies IAdoptPetResponse);
};
interface IAdoptPetRequest {
petId: string;
name: string;
}
interface IAdoptPetResponse {
petId: string;
newName: string;
}

View File

@@ -0,0 +1,22 @@
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getPersonalRooms } from "../../services/personalRoomsService.ts";
import type { RequestHandler } from "express";
export const apartmentController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const personalRooms = await getPersonalRooms(accountId, "Apartment");
const response: IApartmentResponse = {};
if (req.query.backdrop !== undefined) {
response.NewBackdropItem = personalRooms.Apartment.VideoWallBackdrop = req.query.backdrop as string;
}
if (req.query.soundscape !== undefined) {
response.NewSoundscapeItem = personalRooms.Apartment.Soundscape = req.query.soundscape as string;
}
await personalRooms.save();
res.json(response);
};
interface IApartmentResponse {
NewBackdropItem?: string;
NewSoundscapeItem?: string;
}

View File

@@ -0,0 +1,76 @@
import type { RequestHandler } from "express";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getInventory, addMods } from "../../services/inventoryService.ts";
import type { IOid } from "../../types/commonTypes.ts";
export const arcaneCommonController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const json = getJSONfromString<IArcaneCommonRequest>(String(req.body));
const inventory = await getInventory(accountId);
const upgrade = inventory.Upgrades.id(json.arcane.ItemId.$oid);
if (json.newRank == -1) {
// Break down request?
if (!upgrade || !upgrade.UpgradeFingerprint) {
throw new Error(`Failed to find upgrade with OID ${json.arcane.ItemId.$oid}`);
}
// Remove Upgrade
inventory.Upgrades.pull({ _id: json.arcane.ItemId.$oid });
// Add RawUpgrades
const numRawUpgradesToGive = arcaneLevelCounts[(JSON.parse(upgrade.UpgradeFingerprint) as { lvl: number }).lvl];
addMods(inventory, [
{
ItemType: json.arcane.ItemType,
ItemCount: numRawUpgradesToGive
}
]);
res.json({ upgradeId: json.arcane.ItemId.$oid, numConsumed: numRawUpgradesToGive });
} else {
// Upgrade request?
let numConsumed = arcaneLevelCounts[json.newRank];
let upgradeId = json.arcane.ItemId.$oid;
if (upgrade) {
// Have an existing Upgrade item?
if (upgrade.UpgradeFingerprint) {
const existingLevel = (JSON.parse(upgrade.UpgradeFingerprint) as { lvl: number }).lvl;
numConsumed -= arcaneLevelCounts[existingLevel];
}
upgrade.UpgradeFingerprint = JSON.stringify({ lvl: json.newRank });
} else {
const newLength = inventory.Upgrades.push({
ItemType: json.arcane.ItemType,
UpgradeFingerprint: JSON.stringify({ lvl: json.newRank })
});
upgradeId = inventory.Upgrades[newLength - 1]._id.toString();
}
// Remove RawUpgrades
addMods(inventory, [
{
ItemType: json.arcane.ItemType,
ItemCount: numConsumed * -1
}
]);
res.json({ newLevel: json.newRank, numConsumed, upgradeId });
}
await inventory.save();
};
const arcaneLevelCounts = [0, 3, 6, 10, 15, 21];
interface IArcaneCommonRequest {
arcane: {
ItemType: string;
ItemId: IOid;
FromSKU: boolean;
UpgradeFingerprint: string;
PendingRerollFingerprint: string;
ItemCount: number;
LastAdded: IOid;
};
newRank: number;
}

View File

@@ -0,0 +1,51 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import { colorToShard, combineColors, shardToColor } from "../../helpers/shardHelper.ts";
export const archonFusionController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const request = JSON.parse(String(req.body)) as IArchonFusionRequest;
const inventory = await getInventory(accountId);
request.Consumed.forEach(x => {
x.ItemCount *= -1;
});
addMiscItems(inventory, request.Consumed);
const newArchons: IMiscItem[] = [];
switch (request.FusionType) {
case "AFT_ASCENT":
newArchons.push({
ItemType: request.Consumed[0].ItemType + "Mythic",
ItemCount: 1
});
break;
case "AFT_COALESCENT":
newArchons.push({
ItemType:
colorToShard[
combineColors(
shardToColor[request.Consumed[0].ItemType],
shardToColor[request.Consumed[1].ItemType]
)
],
ItemCount: 1
});
break;
default:
throw new Error(`unknown archon fusion type: ${request.FusionType}`);
}
addMiscItems(inventory, newArchons);
await inventory.save();
res.json({
NewArchons: newArchons
});
};
interface IArchonFusionRequest {
Consumed: IMiscItem[];
FusionType: string;
StatResultType: "SRT_NEW_STAT"; // ???
}

View File

@@ -0,0 +1,173 @@
import { fromOid, toOid2 } from "../../helpers/inventoryHelpers.ts";
import { createVeiledRivenFingerprint, rivenRawToRealWeighted } from "../../helpers/rivenHelper.ts";
import { addMiscItems, addMods, getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { getRandomElement, getRandomWeightedReward, getRandomWeightedRewardUc } from "../../services/rngService.ts";
import type { IUpgradeFromClient } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { RequestHandler } from "express";
import type { TRarity } from "warframe-public-export-plus";
import { ExportBoosterPacks, ExportUpgrades } from "warframe-public-export-plus";
export const artifactTransmutationController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const accountId = account._id.toString();
const inventory = await getInventory(accountId);
const payload = JSON.parse(String(req.body)) as IArtifactTransmutationRequest;
inventory.RegularCredits -= payload.Cost;
if (payload.FusionPointCost) {
inventory.FusionPoints -= payload.FusionPointCost;
}
if (payload.RivenTransmute) {
addMiscItems(inventory, [
{
ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/SentientSecretItem",
ItemCount: -1
}
]);
payload.Consumed.forEach(upgrade => {
inventory.Upgrades.pull({ _id: fromOid(upgrade.ItemId) });
});
const rawRivenType = getRandomRawRivenType();
const rivenType = getRandomElement(rivenRawToRealWeighted[rawRivenType])!;
const fingerprint = createVeiledRivenFingerprint(ExportUpgrades[rivenType]);
const upgradeIndex =
inventory.Upgrades.push({
ItemType: rivenType,
UpgradeFingerprint: JSON.stringify(fingerprint)
}) - 1;
await inventory.save();
res.json({
NewMods: [
{
ItemId: toOid2(inventory.Upgrades[upgradeIndex]._id, account.BuildLabel),
ItemType: rivenType,
UpgradeFingerprint: fingerprint
}
]
});
} else {
const counts: Record<TRarity, number> = {
COMMON: 0,
UNCOMMON: 0,
RARE: 0,
LEGENDARY: 0
};
let forcedPolarity: string | undefined;
payload.Consumed.forEach(upgrade => {
upgrade.ItemCount ??= 1;
const meta = ExportUpgrades[upgrade.ItemType];
counts[meta.rarity] += upgrade.ItemCount;
if (fromOid(upgrade.ItemId) != "" && fromOid(upgrade.ItemId) != "000000000000000000000000") {
inventory.Upgrades.pull({ _id: fromOid(upgrade.ItemId) });
} else {
addMods(inventory, [
{
ItemType: upgrade.ItemType,
ItemCount: upgrade.ItemCount * -1
}
]);
}
if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/AttackTransmuteCore") {
forcedPolarity = "AP_ATTACK";
} else if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/DefenseTransmuteCore") {
forcedPolarity = "AP_DEFENSE";
} else if (upgrade.ItemType == "/Lotus/Upgrades/Mods/TransmuteCores/TacticTransmuteCore") {
forcedPolarity = "AP_TACTIC";
}
});
let newModType: string | undefined;
for (const specialModSet of specialModSets) {
if (specialModSet.indexOf(payload.Consumed[0].ItemType) != -1) {
newModType = getRandomElement(specialModSet);
break;
}
}
if (!newModType) {
// Based on the table on https://wiki.warframe.com/w/Transmutation
const weights: Record<TRarity, number> = {
COMMON: counts.COMMON * 95 + counts.UNCOMMON * 15 + counts.RARE * 4,
UNCOMMON: counts.COMMON * 4 + counts.UNCOMMON * 80 + counts.RARE * 10,
RARE: counts.COMMON * 1 + counts.UNCOMMON * 5 + counts.RARE * 50,
LEGENDARY: 0
};
const options: { uniqueName: string; rarity: TRarity }[] = [];
Object.entries(ExportUpgrades).forEach(([uniqueName, upgrade]) => {
if (upgrade.canBeTransmutation && (!forcedPolarity || upgrade.polarity == forcedPolarity)) {
options.push({ uniqueName, rarity: upgrade.rarity });
}
});
newModType = getRandomWeightedReward(options, weights)!.uniqueName;
}
addMods(inventory, [
{
ItemType: newModType,
ItemCount: 1
}
]);
await inventory.save();
res.json({
NewMods: [
{
ItemType: newModType,
ItemCount: 1
}
]
});
}
};
const getRandomRawRivenType = (): string => {
const pack = ExportBoosterPacks["/Lotus/Types/BoosterPacks/CalendarRivenPack"];
return getRandomWeightedRewardUc(pack.components, pack.rarityWeightsPerRoll[0])!.Item;
};
interface IArtifactTransmutationRequest {
Upgrade: IUpgradeFromClient;
LevelDiff: number;
Consumed: IUpgradeFromClient[];
Cost: number;
FusionPointCost?: number;
RivenTransmute?: boolean;
}
const specialModSets: string[][] = [
[
"/Lotus/Upgrades/Mods/Immortal/ImmortalOneMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalTwoMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalThreeMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalFourMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalFiveMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalSixMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalSevenMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalEightMod",
"/Lotus/Upgrades/Mods/Immortal/ImmortalWildcardMod"
],
[
"/Lotus/Upgrades/Mods/Immortal/AntivirusOneMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusTwoMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusThreeMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusFourMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusFiveMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusSixMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusSevenMod",
"/Lotus/Upgrades/Mods/Immortal/AntivirusEightMod"
],
[
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndSpeedOnUseMod",
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusAndWeaponDamageOnUseMod",
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusLargeOnSingleUseMod",
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusOnUseMod",
"/Lotus/Upgrades/Mods/DataSpike/Potency/GainAntivirusSmallOnSingleUseMod"
]
];

View File

@@ -1,22 +1,135 @@
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { upgradeMod } from "@/src/services/inventoryService";
import { IArtifactsRequest } from "@/src/types/requestTypes";
import { RequestHandler } from "express";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
import type {
IInventoryClient,
IUpgradeClient,
IUpgradeFromClient
} from "../../types/inventoryTypes/inventoryTypes.ts";
import { addMods, getInventory } from "../../services/inventoryService.ts";
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
import { fromOid, version_compare } from "../../helpers/inventoryHelpers.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const artifactsController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
export const artifactsController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const accountId = account._id.toString();
const artifactsData = getJSONfromString<IArtifactsRequest>(String(req.body));
try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
const artifactsData = getJSONfromString(req.body.toString()) as IArtifactsRequest;
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
const upgradeModId = await upgradeMod(artifactsData, accountId);
res.send(upgradeModId);
} catch (err) {
console.error("Error parsing JSON data:", err);
const { Upgrade, LevelDiff, Cost, FusionPointCost, Consumed, Fingerprint } = artifactsData;
const inventory = await getInventory(accountId);
const { Upgrades } = inventory;
const { ItemType, UpgradeFingerprint, ItemId } = Upgrade;
if (!account.BuildLabel || version_compare(account.BuildLabel, "2016.08.19.17.12") >= 0) {
const safeUpgradeFingerprint = UpgradeFingerprint || '{"lvl":0}';
const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint) as { lvl: number };
parsedUpgradeFingerprint.lvl += LevelDiff;
const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint);
let itemIndex = Upgrades.findIndex(upgrade => upgrade._id.equals(fromOid(ItemId)));
if (itemIndex !== -1) {
Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint;
} else {
itemIndex =
Upgrades.push({
UpgradeFingerprint: stringifiedUpgradeFingerprint,
ItemType
}) - 1;
addMods(inventory, [{ ItemType, ItemCount: -1 }]);
}
if (!inventory.infiniteCredits) {
inventory.RegularCredits -= Cost;
}
if (!inventory.infiniteEndo) {
inventory.FusionPoints -= FusionPointCost;
}
if (artifactsData.LegendaryFusion) {
addMods(inventory, [
{
ItemType: "/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser",
ItemCount: -1
}
]);
}
const changedInventory = (await inventory.save()).toJSON<IInventoryClient>();
const itemId =
changedInventory.Upgrades[itemIndex].ItemId.$oid ?? changedInventory.Upgrades[itemIndex].ItemId.$id;
if (!itemId) {
throw new Error("Item Id not found in upgradeMod");
}
res.send(itemId);
} else {
// Pre-U18.18.0 uses the old pre-Endo fusion system which uses a different UpgradeFingerprint format
// that has to be converted and consumes upgrades in the fusion proccess
const safeUpgradeFingerprint = `{"lvl":${Fingerprint?.substring(4, Fingerprint.lastIndexOf("|"))}}`;
const parsedUpgradeFingerprint = JSON.parse(safeUpgradeFingerprint) as { lvl: number };
if (LevelDiff) {
parsedUpgradeFingerprint.lvl += LevelDiff;
}
const stringifiedUpgradeFingerprint = JSON.stringify(parsedUpgradeFingerprint);
let itemIndex = Upgrades.findIndex(upgrade => upgrade._id.equals(ItemId.$id));
if (itemIndex !== -1) {
Upgrades[itemIndex].UpgradeFingerprint = stringifiedUpgradeFingerprint;
} else {
itemIndex =
Upgrades.push({
UpgradeFingerprint: stringifiedUpgradeFingerprint,
ItemType
}) - 1;
addMods(inventory, [{ ItemType, ItemCount: -1 }]);
}
const itemId = Upgrades[itemIndex]._id.toString();
if (!itemId) {
throw new Error("Item Id not found in upgradeMod");
}
if (!inventory.infiniteCredits) {
inventory.RegularCredits -= Cost;
}
if (Consumed && Consumed.length > 0) {
for (const upgrade of Consumed) {
// The client does not send the expected information about the mods, so we have to check if it's an Upgrade or RawUpgrade manually.
if (Upgrades.id(fromOid(upgrade.ItemId))) {
Upgrades.pull({ _id: upgrade.ItemId.$id });
} else {
addMods(inventory, [
{
ItemType: upgrade.ItemType,
ItemCount: -1
}
]);
}
}
itemIndex = Upgrades.findIndex(upgrade => upgrade._id.equals(itemId));
}
await inventory.save();
res.send(itemId);
}
broadcastInventoryUpdate(req);
};
export { artifactsController };
interface IArtifactsRequest {
Upgrade: IUpgradeClient;
LevelDiff: number;
Cost: number;
FusionPointCost: number;
LegendaryFusion?: boolean;
Fingerprint?: string;
Consumed?: IUpgradeFromClient[];
}

View File

@@ -0,0 +1,20 @@
import { GuildAd } from "../../models/guildModel.ts";
import { getGuildForRequestEx, hasGuildPermission } from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const cancelGuildAdvertisementController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId");
const guild = await getGuildForRequestEx(req, inventory);
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Advertiser))) {
res.status(400).end();
return;
}
await GuildAd.deleteOne({ GuildId: guild._id });
res.end();
};

View File

@@ -0,0 +1,99 @@
import type { RequestHandler } from "express";
import {
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
hasGuildPermission
} from "../../services/guildService.ts";
import { logger } from "../../utils/logger.ts";
import type { IDojoComponentDatabase } from "../../types/guildTypes.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { Types } from "mongoose";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getInventory } from "../../services/inventoryService.ts";
export const changeDojoRootController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId LevelKeys");
const guild = await getGuildForRequestEx(req, inventory);
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Architect))) {
res.json({ DojoRequestStatus: -1 });
return;
}
// Example POST body: {"pivot":[0, 0, -64],"components":"{\"670429301ca0a63848ccc467\":{\"R\":[0,0,0],\"P\":[0,3,32]},\"6704254a1ca0a63848ccb33c\":{\"R\":[0,0,0],\"P\":[0,9.25,-32]},\"670429461ca0a63848ccc731\":{\"R\":[-90,0,0],\"P\":[-47.999992370605,3,16]}}"}
if (req.body) {
logger.debug(`data provided to ${req.path}: ${String(req.body)}`);
throw new Error("dojo reparent operation should not need deco repositioning"); // because we always provide SortId
}
const idToNode: Record<string, INode> = {};
guild.DojoComponents.forEach(x => {
idToNode[x._id.toString()] = {
component: x,
parent: undefined,
children: []
};
});
let oldRoot: INode | undefined;
guild.DojoComponents.forEach(x => {
const node = idToNode[x._id.toString()];
if (x.pi) {
idToNode[x.pi.toString()].children.push(node);
node.parent = idToNode[x.pi.toString()];
} else {
oldRoot = node;
}
});
logger.debug("Old tree:\n" + treeToString(oldRoot!));
const newRoot = idToNode[req.query.newRoot as string];
recursivelyTurnParentsIntoChildren(newRoot);
newRoot.component.pi = undefined;
newRoot.component.op = undefined;
newRoot.component.pp = undefined;
newRoot.parent = undefined;
// Set/update SortId in top-to-bottom order
const stack: INode[] = [newRoot];
while (stack.length != 0) {
const top = stack.shift()!;
top.component.SortId = new Types.ObjectId();
top.children.forEach(x => stack.push(x));
}
logger.debug("New tree:\n" + treeToString(newRoot));
await guild.save();
res.json(await getDojoClient(guild, 0));
};
interface INode {
component: IDojoComponentDatabase;
parent: INode | undefined;
children: INode[];
}
const treeToString = (root: INode, depth: number = 0): string => {
let str = " ".repeat(depth * 4) + root.component.pf + " (" + root.component._id.toString() + ")\n";
root.children.forEach(x => {
str += treeToString(x, depth + 1);
});
return str;
};
const recursivelyTurnParentsIntoChildren = (node: INode): void => {
if (node.parent!.parent) {
recursivelyTurnParentsIntoChildren(node.parent!);
}
node.parent!.component.pi = node.component._id;
node.parent!.component.op = node.component.pp;
node.parent!.component.pp = node.component.op;
node.parent!.parent = node;
node.parent!.children.splice(node.parent!.children.indexOf(node), 1);
node.children.push(node.parent!);
};

View File

@@ -0,0 +1,38 @@
import { GuildMember } from "../../models/guildModel.ts";
import { getGuildForRequest, hasGuildPermissionEx } from "../../services/guildService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const changeGuildRankController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const member = (await GuildMember.findOne({
accountId: accountId,
guildId: req.query.guildId as string
}))!;
const newRank: number = parseInt(req.query.rankChange as string);
const guild = await getGuildForRequest(req);
if (newRank < member.rank || !hasGuildPermissionEx(guild, member, GuildPermission.Promoter)) {
res.status(400).json("Invalid permission");
return;
}
const target = (await GuildMember.findOne({
guildId: req.query.guildId as string,
accountId: req.query.targetId as string
}))!;
target.rank = parseInt(req.query.rankChange as string);
await target.save();
if (newRank == 0) {
// If we just promoted someone else to Founding Warlord, we need to demote ourselves to Warlord.
member.rank = 1;
await member.save();
}
res.json({
_id: req.query.targetId as string,
Rank: newRank
});
};

View File

@@ -1,16 +1,12 @@
import { RequestHandler } from "express";
import { getAccountForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
const checkDailyMissionBonusController: RequestHandler = (_req, res) => {
const data = Buffer.from([
0x44, 0x61, 0x69, 0x6c, 0x79, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73, 0x3a,
0x31, 0x2d, 0x44, 0x61, 0x69, 0x6c, 0x79, 0x50, 0x56, 0x50, 0x57, 0x69, 0x6e, 0x42, 0x6f, 0x6e, 0x75, 0x73,
0x3a, 0x31, 0x0a
]);
res.writeHead(200, {
"Content-Type": "text/html",
"Content-Length": data.length
});
res.end(data);
export const checkDailyMissionBonusController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const today = Math.trunc(Date.now() / 86400000) * 86400;
if (account.DailyFirstWinDate != today) {
res.send("DailyMissionBonus:1-DailyPVPWinBonus:1\n");
} else {
res.send("DailyMissionBonus:0-DailyPVPWinBonus:1\n");
}
};
export { checkDailyMissionBonusController };

View File

@@ -0,0 +1,24 @@
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
import { getInventory } from "../../services/inventoryService.ts";
export const checkPendingRecipesController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "PendingRecipes");
const now = Date.now();
const resp: ICheckPendingRecipesResponse = {
PendingRecipes: inventory.PendingRecipes.map(recipe => ({
ItemType: recipe.ItemType,
SecondsRemaining: Math.max(0, Math.floor((recipe.CompletionDate.getTime() - now) / 1000))
}))
};
res.send(resp);
};
interface ICheckPendingRecipesResponse {
PendingRecipes: {
ItemType: string;
SecondsRemaining: number;
}[];
}

View File

@@ -1,88 +1,362 @@
//this is a controller for the claimCompletedRecipe route
//it will claim a recipe for the user
import { RequestHandler } from "express";
import { logger } from "@/src/utils/logger";
import { getRecipe } from "@/src/services/itemDataService";
import { IOid } from "@/src/types/commonTypes";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory, updateCurrency, addItem, addMiscItems, addRecipes } from "@/src/services/inventoryService";
import type { RequestHandler } from "express";
import { logger } from "../../utils/logger.ts";
import { getRecipe } from "../../services/itemDataService.ts";
import type { IOidWithLegacySupport } from "../../types/commonTypes.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { TAccountDocument } from "../../services/loginService.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import {
getInventory,
updateCurrency,
addItem,
addRecipes,
occupySlot,
combineInventoryChanges,
addKubrowPetPrint,
addPowerSuit,
addEquipment
} from "../../services/inventoryService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { IPendingRecipeDatabase } from "../../types/inventoryTypes/inventoryTypes.ts";
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
import { fromOid, toOid2, version_compare } from "../../helpers/inventoryHelpers.ts";
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
import type { IRecipe } from "warframe-public-export-plus";
import type { IEquipmentClient } from "../../types/equipmentTypes.ts";
import { EquipmentFeatures, Status } from "../../types/equipmentTypes.ts";
export interface IClaimCompletedRecipeRequest {
RecipeIds: IOid[];
interface IClaimCompletedRecipeRequest {
RecipeIds?: IOidWithLegacySupport[]; // U24.4 and beyond
recipeNames?: string[]; // Builds before U24.4 down to U22.20
}
interface IClaimCompletedRecipeResponse {
InventoryChanges: IInventoryChanges;
BrandedSuits?: IOidWithLegacySupport[];
}
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const claimCompletedRecipeController: RequestHandler = async (req, res) => {
const claimCompletedRecipeRequest = getJSONfromString(String(req.body)) as IClaimCompletedRecipeRequest;
const accountId = await getAccountIdForRequest(req);
if (!accountId) throw new Error("no account id");
const inventory = await getInventory(accountId);
const pendingRecipe = inventory.PendingRecipes.find(
recipe => recipe._id?.toString() === claimCompletedRecipeRequest.RecipeIds[0].$oid
);
if (!pendingRecipe) {
logger.error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
}
//check recipe is indeed ready to be completed
// if (pendingRecipe.CompletionDate > new Date()) {
// logger.error(`recipe ${pendingRecipe._id} is not ready to be completed`);
// throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
// }
inventory.PendingRecipes.pull(pendingRecipe._id);
await inventory.save();
const recipe = getRecipe(pendingRecipe.ItemType);
if (!recipe) {
logger.error(`no completed item found for recipe ${pendingRecipe._id}`);
throw new Error(`no completed item found for recipe ${pendingRecipe._id}`);
}
if (req.query.cancel) {
const currencyChanges = await updateCurrency(recipe.buildPrice * -1, false, accountId);
const inventory = await getInventory(accountId);
addMiscItems(inventory, recipe.ingredients);
await inventory.save();
// Not a bug: In the specific case of cancelling a recipe, InventoryChanges are expected to be the root.
res.json({
...currencyChanges,
MiscItems: recipe.ingredients
});
} else {
logger.debug("Claiming Recipe", { recipe, pendingRecipe });
let InventoryChanges = {};
if (recipe.consumeOnUse) {
const recipeChanges = [
{
ItemType: pendingRecipe.ItemType,
ItemCount: -1
const account = await getAccountForRequest(req);
const inventory = await getInventory(account._id.toString());
const resp: IClaimCompletedRecipeResponse = {
InventoryChanges: {}
};
if (!req.query.recipeName) {
const claimCompletedRecipeRequest = getJSONfromString<IClaimCompletedRecipeRequest>(String(req.body));
const recipes = claimCompletedRecipeRequest.recipeNames ?? claimCompletedRecipeRequest.RecipeIds;
if (recipes) {
for (const recipeId of recipes) {
let pendingRecipe;
if (typeof recipeId === "string") {
pendingRecipe = inventory.PendingRecipes.find(r => r.ItemType == recipeId);
if (!pendingRecipe) {
throw new Error(`no pending recipe found of type ${recipeId}`);
}
} else {
pendingRecipe = inventory.PendingRecipes.id(fromOid(recipeId));
if (!pendingRecipe) {
throw new Error(`no pending recipe found with id ${fromOid(recipeId)}`);
}
}
];
InventoryChanges = { ...InventoryChanges, Recipes: recipeChanges };
//check recipe is indeed ready to be completed
// if (pendingRecipe.CompletionDate > new Date()) {
// throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
// }
const inventory = await getInventory(accountId);
addRecipes(inventory, recipeChanges);
await inventory.save();
}
if (req.query.rush) {
InventoryChanges = {
...InventoryChanges,
...(await updateCurrency(recipe.skipBuildTimePrice, true, accountId))
};
}
res.json({
InventoryChanges: {
...InventoryChanges,
...(await addItem(accountId, recipe.resultType, recipe.num)).InventoryChanges
inventory.PendingRecipes.pull(pendingRecipe._id);
const recipe = getRecipe(pendingRecipe.ItemType);
if (!recipe) {
throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
}
if (req.query.cancel) {
const inventoryChanges: IInventoryChanges = {};
await refundRecipeIngredients(inventory, inventoryChanges, recipe, pendingRecipe);
await inventory.save();
res.json(inventoryChanges); // Not a bug: In the specific case of cancelling a recipe, InventoryChanges are expected to be the root.
return;
}
await claimCompletedRecipe(account, inventory, recipe, pendingRecipe, resp, req.query.rush);
}
});
} else {
throw new Error(`recipe list from request was undefined?`);
}
} else {
const recipeName = String(req.query.recipeName); // U8
const pendingRecipe = inventory.PendingRecipes.find(r => r.ItemType == recipeName);
if (!pendingRecipe) {
throw new Error(`no pending recipe found with ItemType ${recipeName}`);
}
inventory.PendingRecipes.pull(pendingRecipe._id);
const recipe = getRecipe(pendingRecipe.ItemType);
if (!recipe) {
throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
}
await claimCompletedRecipe(
account,
inventory,
recipe,
pendingRecipe,
resp,
req.path.includes("instantCompleteRecipe.php") || req.query.rush
);
}
await inventory.save();
res.json(resp);
};
const claimCompletedRecipe = async (
account: TAccountDocument,
inventory: TInventoryDatabaseDocument,
recipe: IRecipe,
pendingRecipe: IPendingRecipeDatabase,
resp: IClaimCompletedRecipeResponse,
rush: any
): Promise<void> => {
logger.debug("Claiming Recipe", { recipe, pendingRecipe });
if (recipe.secretIngredientAction == "SIA_SPECTRE_LOADOUT_COPY") {
inventory.PendingSpectreLoadouts ??= [];
inventory.SpectreLoadouts ??= [];
const pendingLoadoutIndex = inventory.PendingSpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType);
if (pendingLoadoutIndex != -1) {
const loadoutIndex = inventory.SpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType);
if (loadoutIndex != -1) {
inventory.SpectreLoadouts.splice(loadoutIndex, 1);
}
logger.debug(
"moving spectre loadout from pending to active",
inventory.toJSON().PendingSpectreLoadouts![pendingLoadoutIndex]
);
inventory.SpectreLoadouts.push(inventory.PendingSpectreLoadouts[pendingLoadoutIndex]);
inventory.PendingSpectreLoadouts.splice(pendingLoadoutIndex, 1);
}
} else if (recipe.secretIngredientAction == "SIA_UNBRAND") {
inventory.BrandedSuits!.splice(
inventory.BrandedSuits!.findIndex(x => x.equals(pendingRecipe.SuitToUnbrand)),
1
);
resp.BrandedSuits = [toOid2(pendingRecipe.SuitToUnbrand!, account.BuildLabel)];
}
if (recipe.consumeOnUse) {
addRecipes(inventory, [
{
ItemType: pendingRecipe.ItemType,
ItemCount: -1
}
]);
}
if (rush) {
let cost = recipe.skipBuildTimePrice;
const end = Math.trunc(pendingRecipe.CompletionDate.getTime() / 1000);
const start = end - recipe.buildTime;
const secondsElapsed = Math.trunc(Date.now() / 1000) - start;
const progress = secondsElapsed / recipe.buildTime;
logger.debug(`rushing recipe at ${Math.trunc(progress * 100)}% completion`);
// U18 introduced rush cost scaling, don't use it for older versions.
if (account.BuildLabel && version_compare(account.BuildLabel, "2015.12.03.00.00") >= 0) {
// Haven't found the real build label for U18.0.0 yet, but this works
cost =
progress > 0.5
? Math.round(recipe.skipBuildTimePrice * (1 - (progress - 0.5)))
: recipe.skipBuildTimePrice;
}
combineInventoryChanges(resp.InventoryChanges, updateCurrency(inventory, cost, true));
}
if (recipe.secretIngredientAction == "SIA_CREATE_KUBROW") {
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
if (pet.Details!.HatchDate!.getTime() > Date.now()) {
pet.Details!.HatchDate = new Date();
}
let canSetActive = true;
for (const pet of inventory.KubrowPets) {
if (pet.Details!.Status == Status.StatusAvailable) {
canSetActive = false;
break;
}
}
pet.Details!.Status = canSetActive ? Status.StatusAvailable : Status.StatusStasis;
} else if (recipe.secretIngredientAction == "SIA_DISTILL_PRINT") {
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
addKubrowPetPrint(inventory, pet, resp.InventoryChanges);
} else if (recipe.secretIngredientAction != "SIA_UNBRAND") {
if (recipe.resultType == "/Lotus/Powersuits/Excalibur/ExcaliburUmbra") {
// Quite the special case here...
// We don't just get Umbra, but also Skiajati and Umbra Mods. Both items are max rank, potatoed, and with the mods are pre-installed.
// Source: https://wiki.warframe.com/w/The_Sacrifice, https://wiki.warframe.com/w/Excalibur/Umbra, https://wiki.warframe.com/w/Skiajati
const umbraModA = (
await addItem(
inventory,
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModA",
1,
false,
undefined,
`{"lvl":5}`
)
).Upgrades![0];
const umbraModB = (
await addItem(
inventory,
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModB",
1,
false,
undefined,
`{"lvl":5}`
)
).Upgrades![0];
const umbraModC = (
await addItem(
inventory,
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModC",
1,
false,
undefined,
`{"lvl":5}`
)
).Upgrades![0];
const sacrificeModA = (
await addItem(
inventory,
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModA",
1,
false,
undefined,
`{"lvl":5}`
)
).Upgrades![0];
const sacrificeModB = (
await addItem(
inventory,
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModB",
1,
false,
undefined,
`{"lvl":5}`
)
).Upgrades![0];
resp.InventoryChanges.Upgrades ??= [];
resp.InventoryChanges.Upgrades.push(umbraModA, umbraModB, umbraModC, sacrificeModA, sacrificeModB);
await addPowerSuit(
inventory,
"/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
{
Configs: [
{
Upgrades: [
"",
"",
"",
"",
"",
fromOid(umbraModA.ItemId),
fromOid(umbraModB.ItemId),
fromOid(umbraModC.ItemId)
]
}
],
XP: 900_000,
Features: EquipmentFeatures.DOUBLE_CAPACITY
},
resp.InventoryChanges
);
inventory.XPInfo.push({
ItemType: "/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
XP: 900_000
});
addEquipment(
inventory,
"Melee",
"/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
{
Configs: [
{
Upgrades: [
"",
"",
"",
"",
"",
"",
fromOid(sacrificeModA.ItemId),
fromOid(sacrificeModB.ItemId)
]
}
],
XP: 450_000,
Features: EquipmentFeatures.DOUBLE_CAPACITY
},
resp.InventoryChanges
);
inventory.XPInfo.push({
ItemType: "/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
XP: 450_000
});
} else {
combineInventoryChanges(
resp.InventoryChanges,
await addItem(
inventory,
recipe.resultType,
recipe.num,
false,
undefined,
pendingRecipe.TargetFingerprint
)
);
}
}
if (
inventory.claimingBlueprintRefundsIngredients &&
recipe.secretIngredientAction != "SIA_CREATE_KUBROW" // Can't refund the egg
) {
await refundRecipeIngredients(inventory, resp.InventoryChanges, recipe, pendingRecipe);
}
};
const refundRecipeIngredients = async (
inventory: TInventoryDatabaseDocument,
inventoryChanges: IInventoryChanges,
recipe: IRecipe,
pendingRecipe: IPendingRecipeDatabase
): Promise<void> => {
updateCurrency(inventory, recipe.buildPrice * -1, false, inventoryChanges);
const equipmentIngredients = new Set();
for (const category of ["LongGuns", "Pistols", "Melee"] as const) {
if (pendingRecipe[category]) {
pendingRecipe[category].forEach(item => {
const index = inventory[category].push(item) - 1;
inventoryChanges[category] ??= [];
inventoryChanges[category].push(inventory[category][index].toJSON<IEquipmentClient>());
equipmentIngredients.add(item.ItemType);
occupySlot(inventory, InventorySlot.WEAPONS, false);
inventoryChanges.WeaponBin ??= { Slots: 0 };
inventoryChanges.WeaponBin.Slots -= 1;
});
}
}
for (const ingredient of recipe.ingredients) {
if (!equipmentIngredients.has(ingredient.ItemType)) {
combineInventoryChanges(
inventoryChanges,
await addItem(inventory, ingredient.ItemType, ingredient.ItemCount)
);
}
}
};

View File

@@ -0,0 +1,35 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { combineInventoryChanges, getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
import type { RequestHandler } from "express";
import { ExportChallenges } from "warframe-public-export-plus";
export const claimJunctionChallengeRewardController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const data = getJSONfromString<IClaimJunctionChallengeRewardRequest>(String(req.body));
const challengeProgress = inventory.ChallengeProgress.find(x => x.Name == data.Challenge)!;
if (challengeProgress.ReceivedJunctionReward) {
throw new Error(`attempt to double-claim junction reward`);
}
challengeProgress.ReceivedJunctionReward = true;
inventory.ClaimedJunctionChallengeRewards ??= [];
inventory.ClaimedJunctionChallengeRewards.push(data.Challenge);
const challengeMeta = Object.entries(ExportChallenges).find(arr => arr[0].endsWith("/" + data.Challenge))![1];
const inventoryChanges = {};
for (const reward of challengeMeta.countedRewards!) {
combineInventoryChanges(
inventoryChanges,
(await handleStoreItemAcquisition(reward.StoreItem, inventory, reward.ItemCount)).InventoryChanges
);
}
await inventory.save();
res.json({
inventoryChanges: inventoryChanges // Yeah, it's "inventoryChanges" in the response here.
});
};
interface IClaimJunctionChallengeRewardRequest {
Challenge: string;
}

View File

@@ -0,0 +1,31 @@
import { addFusionPoints, getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const claimLibraryDailyTaskRewardController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const rewardQuantity = inventory.LibraryActiveDailyTaskInfo!.RewardQuantity;
const rewardStanding = inventory.LibraryActiveDailyTaskInfo!.RewardStanding;
inventory.LibraryActiveDailyTaskInfo = undefined;
inventory.LibraryAvailableDailyTaskInfo = undefined;
let syndicate = inventory.Affiliations.find(x => x.Tag == "LibrarySyndicate");
if (!syndicate) {
syndicate = inventory.Affiliations[inventory.Affiliations.push({ Tag: "LibrarySyndicate", Standing: 0 }) - 1];
}
syndicate.Standing += rewardStanding;
addFusionPoints(inventory, 80 * rewardQuantity);
await inventory.save();
res.json({
RewardItem: "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/RareFusionBundle",
RewardQuantity: rewardQuantity,
StandingAwarded: rewardStanding,
InventoryChanges: {
FusionPoints: 80 * rewardQuantity
}
});
};

View File

@@ -0,0 +1,25 @@
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const clearDialogueHistoryController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const request = JSON.parse(String(req.body)) as IClearDialogueRequest;
if (inventory.DialogueHistory && inventory.DialogueHistory.Dialogues) {
inventory.DialogueHistory.Resets ??= 0;
inventory.DialogueHistory.Resets += 1;
for (const dialogueName of request.Dialogues) {
const index = inventory.DialogueHistory.Dialogues.findIndex(x => x.DialogueName == dialogueName);
if (index != -1) {
inventory.DialogueHistory.Dialogues.splice(index, 1);
}
}
}
await inventory.save();
res.end();
};
interface IClearDialogueRequest {
Dialogues: string[];
}

View File

@@ -0,0 +1,6 @@
import type { RequestHandler } from "express";
// example req.body: {"NewEpisodeReward":true,"crossPlaySetting":"ENABLED"}
export const clearNewEpisodeRewardController: RequestHandler = (_req, res) => {
res.status(200).end();
};

View File

@@ -0,0 +1,37 @@
import { checkCalendarAutoAdvance, getCalendarProgress, getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
import { getWorldState } from "../../services/worldStateService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
// GET request; query parameters: CompletedEventIdx=0&Iteration=4&Version=19&Season=CST_SUMMER
export const completeCalendarEventController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const calendarProgress = getCalendarProgress(inventory);
const currentSeason = getWorldState().KnownCalendarSeasons[0];
let inventoryChanges: IInventoryChanges = {};
const dayIndex = calendarProgress.SeasonProgress.LastCompletedDayIdx + 1;
const day = currentSeason.Days[dayIndex];
if (day.events.length != 0) {
if (day.events[0].type == "CET_CHALLENGE") {
throw new Error(`completeCalendarEvent should not be used for challenges`);
}
const selection = day.events[parseInt(req.query.CompletedEventIdx as string)];
if (selection.type == "CET_REWARD") {
inventoryChanges = (await handleStoreItemAcquisition(selection.reward!, inventory)).InventoryChanges;
} else if (selection.type == "CET_UPGRADE") {
calendarProgress.YearProgress.Upgrades.push(selection.upgrade!);
} else if (selection.type != "CET_PLOT") {
throw new Error(`unexpected selection type: ${selection.type}`);
}
}
calendarProgress.SeasonProgress.LastCompletedDayIdx = dayIndex;
checkCalendarAutoAdvance(inventory, currentSeason);
await inventory.save();
res.json({
InventoryChanges: inventoryChanges,
CalendarProgress: inventory.CalendarProgress
});
};

View File

@@ -0,0 +1,45 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { addMiscItems, getInventory, updateCurrency } from "../../services/inventoryService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { IVeiledRivenFingerprint } from "../../helpers/rivenHelper.ts";
export const completeRandomModChallengeController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const request = getJSONfromString<ICompleteRandomModChallengeRequest>(String(req.body));
let inventoryChanges: IInventoryChanges = {};
// Remove 20 plat or riven cipher
if ((req.query.p as string) == "1") {
inventoryChanges = { ...updateCurrency(inventory, 20, true) };
} else {
const miscItemChanges: IMiscItem[] = [
{
ItemType: "/Lotus/Types/Items/MiscItems/RivenIdentifier",
ItemCount: -1
}
];
addMiscItems(inventory, miscItemChanges);
inventoryChanges.MiscItems = miscItemChanges;
}
// Complete the riven challenge
const upgrade = inventory.Upgrades.id(request.ItemId)!;
const fp = JSON.parse(upgrade.UpgradeFingerprint!) as IVeiledRivenFingerprint;
fp.challenge.Progress = fp.challenge.Required;
upgrade.UpgradeFingerprint = JSON.stringify(fp);
await inventory.save();
res.json({
InventoryChanges: inventoryChanges,
Fingerprint: upgrade.UpgradeFingerprint
});
};
interface ICompleteRandomModChallengeRequest {
ItemId: string;
}

View File

@@ -0,0 +1,37 @@
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
import { getAllianceClient } from "../../services/guildService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const confirmAllianceInvitationController: RequestHandler = async (req, res) => {
// Check requester is a warlord in their guild
const accountId = await getAccountIdForRequest(req);
const guildMember = (await GuildMember.findOne({ accountId, status: 0 }))!;
if (guildMember.rank > 1) {
res.status(400).json({ Error: 104 });
return;
}
const allianceMember = await AllianceMember.findOne({
allianceId: req.query.allianceId,
guildId: guildMember.guildId
});
if (!allianceMember || !allianceMember.Pending) {
res.status(400);
return;
}
allianceMember.Pending = false;
const guild = (await Guild.findById(guildMember.guildId))!;
guild.AllianceId = allianceMember.allianceId;
await Promise.all([allianceMember.save(), guild.save()]);
// Give client the new alliance data which uses "AllianceId" instead of "_id" in this response
const alliance = (await Alliance.findById(allianceMember.allianceId))!;
const { _id, ...rest } = await getAllianceClient(alliance, guild);
res.json({
AllianceId: _id,
...rest
});
};

View File

@@ -0,0 +1,118 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Guild, GuildMember } from "../../models/guildModel.ts";
import { Account } from "../../models/loginModel.ts";
import {
deleteGuild,
getGuildClient,
giveClanKey,
hasGuildPermission,
removeDojoKeyItems
} from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
import { Types } from "mongoose";
// GET request: A player accepting an invite they got in their inbox.
export const confirmGuildInvitationGetController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const invitedGuildMember = await GuildMember.findOne({
accountId: account._id,
guildId: req.query.clanId as string
});
if (invitedGuildMember && invitedGuildMember.status == 2) {
let inventoryChanges: IInventoryChanges = {};
// If this account is already in a guild, we need to do cleanup first.
const guildMember = await GuildMember.findOneAndDelete({ accountId: account._id, status: 0 });
if (guildMember) {
const inventory = await getInventory(account._id.toString(), "LevelKeys Recipes");
inventoryChanges = removeDojoKeyItems(inventory);
await inventory.save();
if (guildMember.rank == 0) {
await deleteGuild(guildMember.guildId);
}
}
// Now that we're sure this account is not in a guild right now, we can just proceed with the normal updates.
invitedGuildMember.status = 0;
await invitedGuildMember.save();
// Remove pending applications for this account
await GuildMember.deleteMany({ accountId: account._id, status: 1 });
// Update inventory of new member
const inventory = await getInventory(account._id.toString(), "GuildId LevelKeys Recipes");
inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
giveClanKey(inventory, inventoryChanges);
await inventory.save();
const guild = (await Guild.findById(req.query.clanId as string))!;
// Add join to clan log
guild.RosterActivity ??= [];
guild.RosterActivity.push({
dateTime: new Date(),
entryType: 6,
details: getSuffixedName(account)
});
await guild.save();
res.json({
...(await getGuildClient(guild, account)),
InventoryChanges: inventoryChanges
});
} else {
res.end();
}
};
// POST request: Clan representative accepting invite(s).
export const confirmGuildInvitationPostController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const guild = (await Guild.findById(req.query.clanId as string, "Ranks RosterActivity"))!;
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Recruiter))) {
res.status(400).json("Invalid permission");
return;
}
const payload = getJSONfromString<{ userId: string }>(String(req.body));
const filter: { accountId?: string; status: number } = { status: 1 };
if (payload.userId != "all") {
filter.accountId = payload.userId;
}
const guildMembers = await GuildMember.find(filter);
const newMembers: string[] = [];
for (const guildMember of guildMembers) {
guildMember.status = 0;
guildMember.RequestMsg = undefined;
guildMember.RequestExpiry = undefined;
await guildMember.save();
// Remove other pending applications for this account
await GuildMember.deleteMany({ accountId: guildMember.accountId, status: 1 });
// Update inventory of new member
const inventory = await getInventory(guildMember.accountId.toString(), "GuildId LevelKeys Recipes");
inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
giveClanKey(inventory);
await inventory.save();
// Add join to clan log
const account = (await Account.findOne({ _id: guildMember.accountId }))!;
guild.RosterActivity ??= [];
guild.RosterActivity.push({
dateTime: new Date(),
entryType: 6,
details: getSuffixedName(account)
});
newMembers.push(account._id.toString());
}
await guild.save();
res.json({
NewMembers: newMembers
});
};

View File

@@ -0,0 +1,67 @@
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Guild } from "../../models/guildModel.ts";
import { checkClanAscensionHasRequiredContributors } from "../../services/guildService.ts";
import { addFusionPoints, getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
import { Types } from "mongoose";
export const contributeGuildClassController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const payload = getJSONfromString<IContributeGuildClassRequest>(String(req.body));
const guild = (await Guild.findById(payload.GuildId))!;
// First contributor initiates ceremony and locks the pending class.
if (!guild.CeremonyContributors) {
guild.CeremonyContributors = [];
guild.CeremonyClass = guildXpToClass(guild.XP);
guild.CeremonyEndo = 0;
for (let i = guild.Class; i != guild.CeremonyClass; ++i) {
guild.CeremonyEndo += (i + 1) * 1000;
}
guild.ClassChanges ??= [];
guild.ClassChanges.push({
dateTime: new Date(),
entryType: 13,
details: guild.CeremonyClass
});
}
guild.CeremonyContributors.push(new Types.ObjectId(accountId));
await checkClanAscensionHasRequiredContributors(guild);
await guild.save();
// Either way, endo is given to the contributor.
const inventory = await getInventory(accountId, "FusionPoints");
addFusionPoints(inventory, guild.CeremonyEndo!);
await inventory.save();
res.json({
NumContributors: guild.CeremonyContributors.length,
FusionPointReward: guild.CeremonyEndo,
Class: guild.Class,
CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined
});
};
interface IContributeGuildClassRequest {
GuildId: string;
RequiredContributors: number;
}
const guildXpToClass = (xp: number): number => {
const cummXp = [
0, 11000, 34000, 69000, 114000, 168000, 231000, 302000, 381000, 68000, 563000, 665000, 774000, 891000
];
let highest = 0;
for (let i = 0; i != cummXp.length; ++i) {
if (xp < cummXp[i]) {
break;
}
highest = i;
}
return highest;
};

View File

@@ -0,0 +1,170 @@
import type { TGuildDatabaseDocument } from "../../models/guildModel.ts";
import { GuildMember } from "../../models/guildModel.ts";
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
import {
addGuildMemberMiscItemContribution,
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
processDojoBuildMaterialsGathered,
scaleRequiredCount,
setDojoRoomLogFunded
} from "../../services/guildService.ts";
import { addMiscItems, getInventory, updateCurrency } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IDojoContributable, IGuildMemberDatabase } from "../../types/guildTypes.ts";
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
import type { IDojoBuild } from "warframe-public-export-plus";
import { ExportDojoRecipes } from "warframe-public-export-plus";
interface IContributeToDojoComponentRequest {
ComponentId: string;
DecoId?: string;
DecoType?: string;
IngredientContributions: IMiscItem[];
RegularCredits: number;
VaultIngredientContributions: IMiscItem[];
VaultCredits: number;
}
export const contributeToDojoComponentController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
// Any clan member should have permission to contribute although notably permission is denied if they have not crafted the dojo key and were simply invited in.
if (!hasAccessToDojo(inventory)) {
res.json({ DojoRequestStatus: -1 });
return;
}
const guild = await getGuildForRequestEx(req, inventory);
const guildMember = (await GuildMember.findOne(
{ accountId, guildId: guild._id },
"RegularCreditsContributed MiscItemsContributed"
))!;
const request = JSON.parse(String(req.body)) as IContributeToDojoComponentRequest;
const component = guild.DojoComponents.id(request.ComponentId)!;
const inventoryChanges: IInventoryChanges = {};
if (!component.CompletionTime) {
// Room is in "Collecting Materials" state
if (request.DecoId) {
throw new Error("attempt to contribute to a deco in an unfinished room?!");
}
const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
processContribution(guild, guildMember, request, inventory, inventoryChanges, meta, component);
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (component.CompletionTime) {
setDojoRoomLogFunded(guild, component);
}
} else {
// Room is past "Collecting Materials"
if (request.DecoId) {
const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
processContribution(guild, guildMember, request, inventory, inventoryChanges, meta, deco);
}
}
await Promise.all([guild.save(), inventory.save(), guildMember.save()]);
res.json({
...(await getDojoClient(guild, 0, component._id)),
InventoryChanges: inventoryChanges
});
};
const processContribution = (
guild: TGuildDatabaseDocument,
guildMember: IGuildMemberDatabase,
request: IContributeToDojoComponentRequest,
inventory: TInventoryDatabaseDocument,
inventoryChanges: IInventoryChanges,
meta: IDojoBuild,
component: IDojoContributable
): void => {
component.RegularCredits ??= 0;
if (request.RegularCredits) {
component.RegularCredits += request.RegularCredits;
inventoryChanges.RegularCredits = -request.RegularCredits;
updateCurrency(inventory, request.RegularCredits, false);
guildMember.RegularCreditsContributed ??= 0;
guildMember.RegularCreditsContributed += request.RegularCredits;
}
if (request.VaultCredits) {
component.RegularCredits += request.VaultCredits;
guild.VaultRegularCredits! -= request.VaultCredits;
}
if (component.RegularCredits > scaleRequiredCount(guild.Tier, meta.price)) {
guild.VaultRegularCredits ??= 0;
guild.VaultRegularCredits += component.RegularCredits - scaleRequiredCount(guild.Tier, meta.price);
component.RegularCredits = scaleRequiredCount(guild.Tier, meta.price);
}
component.MiscItems ??= [];
if (request.VaultIngredientContributions.length) {
for (const ingredientContribution of request.VaultIngredientContributions) {
const componentMiscItem = component.MiscItems.find(x => x.ItemType == ingredientContribution.ItemType);
if (componentMiscItem) {
const ingredientMeta = meta.ingredients.find(x => x.ItemType == ingredientContribution.ItemType)!;
if (
componentMiscItem.ItemCount + ingredientContribution.ItemCount >
scaleRequiredCount(guild.Tier, ingredientMeta.ItemCount)
) {
ingredientContribution.ItemCount =
scaleRequiredCount(guild.Tier, ingredientMeta.ItemCount) - componentMiscItem.ItemCount;
}
componentMiscItem.ItemCount += ingredientContribution.ItemCount;
} else {
component.MiscItems.push(ingredientContribution);
}
const vaultMiscItem = guild.VaultMiscItems!.find(x => x.ItemType == ingredientContribution.ItemType)!;
vaultMiscItem.ItemCount -= ingredientContribution.ItemCount;
}
}
if (request.IngredientContributions.length) {
const miscItemChanges: IMiscItem[] = [];
for (const ingredientContribution of request.IngredientContributions) {
const componentMiscItem = component.MiscItems.find(x => x.ItemType == ingredientContribution.ItemType);
if (componentMiscItem) {
const ingredientMeta = meta.ingredients.find(x => x.ItemType == ingredientContribution.ItemType)!;
if (
componentMiscItem.ItemCount + ingredientContribution.ItemCount >
scaleRequiredCount(guild.Tier, ingredientMeta.ItemCount)
) {
ingredientContribution.ItemCount =
scaleRequiredCount(guild.Tier, ingredientMeta.ItemCount) - componentMiscItem.ItemCount;
}
componentMiscItem.ItemCount += ingredientContribution.ItemCount;
} else {
component.MiscItems.push(ingredientContribution);
}
miscItemChanges.push({
ItemType: ingredientContribution.ItemType,
ItemCount: ingredientContribution.ItemCount * -1
});
addGuildMemberMiscItemContribution(guildMember, ingredientContribution);
}
addMiscItems(inventory, miscItemChanges);
inventoryChanges.MiscItems = miscItemChanges;
}
if (component.RegularCredits >= scaleRequiredCount(guild.Tier, meta.price)) {
let fullyFunded = true;
for (const ingredient of meta.ingredients) {
const componentMiscItem = component.MiscItems.find(x => x.ItemType == ingredient.ItemType);
if (
!componentMiscItem ||
componentMiscItem.ItemCount < scaleRequiredCount(guild.Tier, ingredient.ItemCount)
) {
fullyFunded = false;
break;
}
}
if (fullyFunded) {
component.CompletionTime = new Date(Date.now() + meta.time * 1000);
processDojoBuildMaterialsGathered(guild, meta);
}
}
};

View File

@@ -0,0 +1,109 @@
import type { TGuildDatabaseDocument, TGuildMemberDatabaseDocument } from "../../models/guildModel.ts";
import { Alliance, Guild, GuildMember } from "../../models/guildModel.ts";
import {
addGuildMemberMiscItemContribution,
addGuildMemberShipDecoContribution,
addVaultFusionTreasures,
addVaultMiscItems,
addVaultShipDecos,
getGuildForRequestEx
} from "../../services/guildService.ts";
import {
addFusionTreasures,
addMiscItems,
addShipDecorations,
getInventory,
updateCurrency
} from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { ITypeCount } from "../../types/commonTypes.ts";
import type { IFusionTreasure, IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { RequestHandler } from "express";
export const contributeToVaultController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId RegularCredits MiscItems ShipDecorations FusionTreasures");
const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
if (request.Alliance) {
const guild = await getGuildForRequestEx(req, inventory);
const alliance = (await Alliance.findById(guild.AllianceId!))!;
alliance.VaultRegularCredits ??= 0;
alliance.VaultRegularCredits += request.RegularCredits;
if (request.FromVault) {
guild.VaultRegularCredits! -= request.RegularCredits;
await Promise.all([guild.save(), alliance.save()]);
} else {
updateCurrency(inventory, request.RegularCredits, false);
await Promise.all([inventory.save(), alliance.save()]);
}
res.end();
return;
}
let guild: TGuildDatabaseDocument;
let guildMember: TGuildMemberDatabaseDocument | undefined;
if (request.GuildVault) {
guild = (await Guild.findById(request.GuildVault))!;
} else {
guild = await getGuildForRequestEx(req, inventory);
guildMember = (await GuildMember.findOne(
{ accountId, guildId: guild._id },
"RegularCreditsContributed MiscItemsContributed ShipDecorationsContributed"
))!;
}
if (request.RegularCredits) {
updateCurrency(inventory, request.RegularCredits, false);
guild.VaultRegularCredits ??= 0;
guild.VaultRegularCredits += request.RegularCredits;
if (guildMember) {
guildMember.RegularCreditsContributed ??= 0;
guildMember.RegularCreditsContributed += request.RegularCredits;
}
}
if (request.MiscItems.length) {
addVaultMiscItems(guild, request.MiscItems);
for (const item of request.MiscItems) {
if (guildMember) {
addGuildMemberMiscItemContribution(guildMember, item);
}
addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.ShipDecorations.length) {
addVaultShipDecos(guild, request.ShipDecorations);
for (const item of request.ShipDecorations) {
if (guildMember) {
addGuildMemberShipDecoContribution(guildMember, item);
}
addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
if (request.FusionTreasures.length) {
addVaultFusionTreasures(guild, request.FusionTreasures);
for (const item of request.FusionTreasures) {
addFusionTreasures(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
}
}
const promises: Promise<unknown>[] = [guild.save(), inventory.save()];
if (guildMember) {
promises.push(guildMember.save());
}
await Promise.all(promises);
res.end();
};
interface IContributeToVaultRequest {
RegularCredits: number;
MiscItems: IMiscItem[];
ShipDecorations: ITypeCount[];
FusionTreasures: IFusionTreasure[];
Alliance?: boolean;
FromVault?: boolean;
GuildVault?: string;
}

View File

@@ -0,0 +1,50 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
import { getAllianceClient } from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const createAllianceController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId");
const guild = (await Guild.findById(inventory.GuildId!, "Name Tier AllianceId"))!;
if (guild.AllianceId) {
res.status(400).send("Guild is already in an alliance").end();
return;
}
const guildMember = (await GuildMember.findOne({ guildId: guild._id, accountId }, "rank"))!;
if (guildMember.rank > 1) {
res.status(400).send("Invalid permission").end();
return;
}
const data = getJSONfromString<ICreateAllianceRequest>(String(req.body));
const alliance = new Alliance({ Name: data.allianceName });
try {
await alliance.save();
} catch (e) {
res.status(400).send("Alliance name already in use").end();
return;
}
guild.AllianceId = alliance._id;
await Promise.all([
guild.save(),
AllianceMember.insertOne({
allianceId: alliance._id,
guildId: guild._id,
Pending: false,
Permissions:
GuildPermission.Ruler |
GuildPermission.Promoter |
GuildPermission.Recruiter |
GuildPermission.Treasurer |
GuildPermission.ChatModerator
})
]);
res.json(await getAllianceClient(alliance, guild));
};
interface ICreateAllianceRequest {
allianceName: string;
}

View File

@@ -1,38 +1,56 @@
import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import { Guild } from "@/src/models/guildModel";
import { ICreateGuildRequest } from "@/src/types/guildTypes";
import type { RequestHandler } from "express";
import { getAccountForRequest } from "../../services/loginService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Guild, GuildMember } from "../../models/guildModel.ts";
import { createUniqueClanName, getGuildClient, giveClanKey } from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import { sendWsBroadcastTo } from "../../services/wsService.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const createGuildController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const payload = getJSONfromString(String(req.body)) as ICreateGuildRequest;
export const createGuildController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const payload = getJSONfromString<ICreateGuildRequest>(String(req.body));
const inventory = await getInventory(account._id.toString(), "GuildId LevelKeys Recipes");
if (inventory.GuildId) {
const guild = await Guild.findById(inventory.GuildId);
if (guild) {
res.json({
...(await getGuildClient(guild, account))
});
return;
}
}
// Remove pending applications for this account
await GuildMember.deleteMany({ accountId: account._id, status: 1 });
// Create guild on database
const guild = new Guild({
Name: payload.guildName
Name: await createUniqueClanName(payload.guildName)
});
await guild.save();
// Update inventory
const inventory = await Inventory.findOne({ accountOwnerId: accountId });
if (inventory) {
// Set GuildId
inventory.GuildId = guild._id;
// Create guild member on database
await GuildMember.insertOne({
accountId: account._id,
guildId: guild._id,
status: 0,
rank: 0
});
// Give clan key (TODO: This should only be a blueprint)
inventory.LevelKeys ??= [];
inventory.LevelKeys.push({
ItemType: "/Lotus/Types/Keys/DojoKey",
ItemCount: 1
});
inventory.GuildId = guild._id;
const inventoryChanges: IInventoryChanges = {};
giveClanKey(inventory, inventoryChanges);
await inventory.save();
await inventory.save();
}
res.json(guild);
res.json({
...(await getGuildClient(guild, account)),
InventoryChanges: inventoryChanges
});
sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
};
export { createGuildController };
interface ICreateGuildRequest {
guildName: string;
}

View File

@@ -0,0 +1,32 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getInventory } from "../../services/inventoryService.ts";
export const creditsController: RequestHandler = async (req, res) => {
const inventory = (
await Promise.all([
getAccountIdForRequest(req),
getInventory(
req.query.accountId as string,
"RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits infiniteCredits infinitePlatinum"
)
])
)[1];
const response = {
RegularCredits: inventory.RegularCredits,
TradesRemaining: inventory.TradesRemaining,
PremiumCreditsFree: inventory.PremiumCreditsFree,
PremiumCredits: inventory.PremiumCredits
};
if (inventory.infiniteCredits) {
response.RegularCredits = 999999999;
}
if (inventory.infinitePlatinum) {
response.PremiumCreditsFree = 0;
response.PremiumCredits = 999999999;
}
res.json(response);
};

View File

@@ -0,0 +1,54 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { ICrewMemberClient } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { RequestHandler } from "express";
import { Types } from "mongoose";
export const crewMembersController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "CrewMembers NemesisHistory");
const data = getJSONfromString<ICrewMembersRequest>(String(req.body));
if (data.crewMember.SecondInCommand) {
clearOnCall(inventory);
}
if (data.crewMember.ItemId.$oid == "000000000000000000000000") {
const convertedNemesis = inventory.NemesisHistory!.find(x => x.fp == data.crewMember.NemesisFingerprint)!;
convertedNemesis.SecondInCommand = data.crewMember.SecondInCommand;
} else {
const dbCrewMember = inventory.CrewMembers.id(data.crewMember.ItemId.$oid)!;
dbCrewMember.AssignedRole = data.crewMember.AssignedRole;
dbCrewMember.SkillEfficiency = data.crewMember.SkillEfficiency;
dbCrewMember.WeaponConfigIdx = data.crewMember.WeaponConfigIdx;
dbCrewMember.WeaponId = new Types.ObjectId(data.crewMember.WeaponId.$oid);
dbCrewMember.Configs = data.crewMember.Configs;
dbCrewMember.SecondInCommand = data.crewMember.SecondInCommand;
}
await inventory.save();
res.json({
crewMemberId: data.crewMember.ItemId.$oid,
NemesisFingerprint: data.crewMember.NemesisFingerprint
});
};
interface ICrewMembersRequest {
crewMember: ICrewMemberClient;
}
const clearOnCall = (inventory: TInventoryDatabaseDocument): void => {
for (const cm of inventory.CrewMembers) {
if (cm.SecondInCommand) {
cm.SecondInCommand = false;
return;
}
}
if (inventory.NemesisHistory) {
for (const cm of inventory.NemesisHistory) {
if (cm.SecondInCommand) {
cm.SecondInCommand = false;
return;
}
}
}
};

View File

@@ -0,0 +1,107 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { addMiscItems, freeUpSlot, getInventory, updateCurrency } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IOid } from "../../types/commonTypes.ts";
import type { ICrewShipComponentFingerprint } from "../../types/inventoryTypes/inventoryTypes.ts";
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
import { ExportCustoms, ExportDojoRecipes } from "warframe-public-export-plus";
export const crewShipFusionController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const payload = getJSONfromString<ICrewShipFusionRequest>(String(req.body));
const isWeapon = inventory.CrewShipWeapons.id(payload.PartA.$oid);
const itemA = isWeapon ?? inventory.CrewShipWeaponSkins.id(payload.PartA.$oid)!;
const category = isWeapon ? "CrewShipWeapons" : "CrewShipWeaponSkins";
const salvageCategory = isWeapon ? "CrewShipSalvagedWeapons" : "CrewShipSalvagedWeaponSkins";
const itemB = inventory[payload.SourceRecipe ? salvageCategory : category].id(payload.PartB.$oid)!;
const tierA = itemA.ItemType.charCodeAt(itemA.ItemType.length - 1) - 65;
const tierB = itemB.ItemType.charCodeAt(itemB.ItemType.length - 1) - 65;
const inventoryChanges: IInventoryChanges = {};
// Charge partial repair cost if fusing with an identified but unrepaired part
if (payload.SourceRecipe) {
const recipe = ExportDojoRecipes.research[payload.SourceRecipe];
updateCurrency(inventory, Math.round(recipe.price * 0.4), false, inventoryChanges);
const miscItemChanges = recipe.ingredients.map(x => ({ ...x, ItemCount: Math.round(x.ItemCount * -0.4) }));
addMiscItems(inventory, miscItemChanges);
inventoryChanges.MiscItems = miscItemChanges;
}
// Remove inferior item
if (payload.SourceRecipe) {
inventory[salvageCategory].pull({ _id: payload.PartB.$oid });
inventoryChanges.RemovedIdItems = [{ ItemId: payload.PartB }];
} else {
const inferiorId = tierA < tierB ? payload.PartA : payload.PartB;
inventory[category].pull({ _id: inferiorId.$oid });
inventoryChanges.RemovedIdItems = [{ ItemId: inferiorId }];
freeUpSlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
inventoryChanges[InventorySlot.RJ_COMPONENT_AND_ARMAMENTS] = { count: -1, platinum: 0, Slots: 1 };
}
// Upgrade superior item
const superiorItem = tierA < tierB ? itemB : itemA;
const inferiorItem = tierA < tierB ? itemA : itemB;
const fingerprint: ICrewShipComponentFingerprint = JSON.parse(
superiorItem.UpgradeFingerprint!
) as ICrewShipComponentFingerprint;
const inferiorFingerprint: ICrewShipComponentFingerprint = inferiorItem.UpgradeFingerprint
? (JSON.parse(inferiorItem.UpgradeFingerprint) as ICrewShipComponentFingerprint)
: { compat: "", buffs: [] };
if (isWeapon) {
for (let i = 0; i != fingerprint.buffs.length; ++i) {
const buffA = fingerprint.buffs[i];
const buffB = i < inferiorFingerprint.buffs.length ? inferiorFingerprint.buffs[i] : undefined;
const fvalA = buffA.Value / 0x3fffffff;
const fvalB = (buffB?.Value ?? 0) / 0x3fffffff;
const percA = 0.3 + fvalA * (0.6 - 0.3);
const percB = 0.3 + fvalB * (0.6 - 0.3);
const newPerc = Math.min(0.6, Math.max(percA, percB) * FUSE_MULTIPLIERS[Math.abs(tierA - tierB)]);
const newFval = (newPerc - 0.3) / (0.6 - 0.3);
buffA.Value = Math.trunc(newFval * 0x3fffffff);
}
} else {
const superiorMeta = ExportCustoms[superiorItem.ItemType].randomisedUpgrades ?? [];
const inferiorMeta = ExportCustoms[inferiorItem.ItemType].randomisedUpgrades ?? [];
for (let i = 0; i != inferiorFingerprint.buffs.length; ++i) {
const buffA = fingerprint.buffs[i];
const buffB = inferiorFingerprint.buffs[i];
const fvalA = buffA.Value / 0x3fffffff;
const fvalB = buffB.Value / 0x3fffffff;
const rangeA = superiorMeta[i].range;
const rangeB = inferiorMeta[i].range;
const percA = rangeA[0] + fvalA * (rangeA[1] - rangeA[0]);
const percB = rangeB[0] + fvalB * (rangeB[1] - rangeB[0]);
const newPerc = Math.min(rangeA[1], Math.max(percA, percB) * FUSE_MULTIPLIERS[Math.abs(tierA - tierB)]);
const newFval = (newPerc - rangeA[0]) / (rangeA[1] - rangeA[0]);
buffA.Value = Math.trunc(newFval * 0x3fffffff);
}
if (inferiorFingerprint.SubroutineIndex !== undefined) {
const useSuperiorSubroutine = tierA < tierB ? !payload.UseSubroutineA : payload.UseSubroutineA;
if (!useSuperiorSubroutine) {
fingerprint.SubroutineIndex = inferiorFingerprint.SubroutineIndex;
}
}
}
superiorItem.UpgradeFingerprint = JSON.stringify(fingerprint);
inventoryChanges[category] = [superiorItem.toJSON() as any];
await inventory.save();
res.json({
InventoryChanges: inventoryChanges
});
};
interface ICrewShipFusionRequest {
PartA: IOid;
PartB: IOid;
SourceRecipe: string;
UseSubroutineA: boolean;
}
const FUSE_MULTIPLIERS = [1.1, 1.05, 1.02];

View File

@@ -0,0 +1,87 @@
import {
addCrewShipSalvagedWeaponSkin,
addCrewShipRawSalvage,
getInventory,
addEquipment
} from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
import type {
ICrewShipComponentFingerprint,
IInnateDamageFingerprint
} from "../../types/inventoryTypes/inventoryTypes.ts";
import { ExportCustoms, ExportRailjackWeapons, ExportUpgrades } from "warframe-public-export-plus";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import { getRandomInt } from "../../services/rngService.ts";
import type { IFingerprintStat } from "../../helpers/rivenHelper.ts";
import type { IEquipmentDatabase } from "../../types/equipmentTypes.ts";
export const crewShipIdentifySalvageController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(
accountId,
"CrewShipSalvagedWeaponSkins CrewShipSalvagedWeapons CrewShipRawSalvage"
);
const payload = getJSONfromString<ICrewShipIdentifySalvageRequest>(String(req.body));
const inventoryChanges: IInventoryChanges = {};
if (payload.ItemType in ExportCustoms) {
const meta = ExportCustoms[payload.ItemType];
let upgradeFingerprint: ICrewShipComponentFingerprint = { compat: payload.ItemType, buffs: [] };
if (meta.subroutines) {
upgradeFingerprint = {
SubroutineIndex: getRandomInt(0, meta.subroutines.length - 1),
...upgradeFingerprint
};
}
for (const upgrade of meta.randomisedUpgrades!) {
upgradeFingerprint.buffs.push({ Tag: upgrade.tag, Value: Math.trunc(Math.random() * 0x40000000) });
}
addCrewShipSalvagedWeaponSkin(
inventory,
payload.ItemType,
JSON.stringify(upgradeFingerprint),
inventoryChanges
);
} else {
const meta = ExportRailjackWeapons[payload.ItemType];
let defaultOverwrites: Partial<IEquipmentDatabase> | undefined;
if (meta.defaultUpgrades?.[0]) {
const upgradeType = meta.defaultUpgrades[0].ItemType;
const upgradeMeta = ExportUpgrades[upgradeType];
const buffs: IFingerprintStat[] = [];
for (const buff of upgradeMeta.upgradeEntries!) {
buffs.push({
Tag: buff.tag,
Value: Math.trunc(Math.random() * 0x40000000)
});
}
defaultOverwrites = {
UpgradeType: upgradeType,
UpgradeFingerprint: JSON.stringify({
compat: payload.ItemType,
buffs
} satisfies IInnateDamageFingerprint)
};
}
addEquipment(inventory, "CrewShipSalvagedWeapons", payload.ItemType, defaultOverwrites, inventoryChanges);
}
inventoryChanges.CrewShipRawSalvage = [
{
ItemType: payload.ItemType,
ItemCount: -1
}
];
addCrewShipRawSalvage(inventory, inventoryChanges.CrewShipRawSalvage);
await inventory.save();
res.json({
InventoryChanges: inventoryChanges
});
};
interface ICrewShipIdentifySalvageRequest {
ItemType: string;
}

View File

@@ -0,0 +1,64 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { Guild } from "../../models/guildModel.ts";
import { hasAccessToDojo, hasGuildPermission } from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountForRequest, getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { logger } from "../../utils/logger.ts";
import type { RequestHandler } from "express";
export const customObstacleCourseLeaderboardController: RequestHandler = async (req, res) => {
const data = getJSONfromString<ICustomObstacleCourseLeaderboardRequest>(String(req.body));
const guild = (await Guild.findById(data.g, "DojoComponents Ranks"))!;
const component = guild.DojoComponents.id(data.c)!;
if (req.query.act == "f") {
res.json({
results: component.Leaderboard ?? []
});
} else if (req.query.act == "p") {
const account = await getAccountForRequest(req);
component.Leaderboard ??= [];
const entry = component.Leaderboard.find(x => x.n == account.DisplayName);
if (entry) {
entry.s = data.s!;
} else {
component.Leaderboard.push({
s: data.s!,
n: account.DisplayName,
r: 0
});
}
component.Leaderboard.sort((a, b) => a.s - b.s); // In this case, the score is the time in milliseconds, so smaller is better.
if (component.Leaderboard.length > 10) {
component.Leaderboard.shift();
}
let r = 0;
for (const entry of component.Leaderboard) {
entry.r = ++r;
}
await guild.save();
res.status(200).end();
} else if (req.query.act == "c") {
// TOVERIFY: What clan permission is actually needed for this?
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId LevelKeys");
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Decorator))) {
res.status(400).end();
return;
}
component.Leaderboard = undefined;
await guild.save();
res.status(200).end();
} else {
logger.debug(`data provided to ${req.path}: ${String(req.body)}`);
throw new Error(`unknown customObstacleCourseLeaderboard act: ${String(req.query.act)}`);
}
};
interface ICustomObstacleCourseLeaderboardRequest {
g: string;
c: string;
s?: number; // act=p
}

View File

@@ -0,0 +1,22 @@
import { getGuildForRequest, hasGuildPermission } from "../../services/guildService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IGuildRank } from "../../types/guildTypes.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const customizeGuildRanksController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const guild = await getGuildForRequest(req);
const payload = JSON.parse(String(req.body)) as ICustomizeGuildRanksRequest;
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Ruler))) {
res.status(400).json("Invalid permission");
return;
}
guild.Ranks = payload.GuildRanks;
await guild.save();
res.end();
};
interface ICustomizeGuildRanksRequest {
GuildRanks: IGuildRank[];
}

View File

@@ -0,0 +1,17 @@
import { AllianceMember, GuildMember } from "../../models/guildModel.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const declineAllianceInviteController: RequestHandler = async (req, res) => {
// Check requester is a warlord in their guild
const accountId = await getAccountIdForRequest(req);
const guildMember = (await GuildMember.findOne({ accountId, status: 0 }))!;
if (guildMember.rank > 1) {
res.status(400).json({ Error: 104 });
return;
}
await AllianceMember.deleteOne({ allianceId: req.query.allianceId, guildId: guildMember.guildId });
res.end();
};

View File

@@ -0,0 +1,14 @@
import { GuildMember } from "../../models/guildModel.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const declineGuildInviteController: RequestHandler = async (req, res) => {
const accountId = await getAccountForRequest(req);
await GuildMember.deleteOne({
accountId: accountId,
guildId: req.query.clanId as string
});
res.end();
};

View File

@@ -1,9 +1,17 @@
import { RequestHandler } from "express";
import { deleteSession } from "@/src/managers/sessionManager";
import type { RequestHandler } from "express";
import { deleteSession } from "../../managers/sessionManager.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { version_compare } from "../../helpers/inventoryHelpers.ts";
const deleteSessionController: RequestHandler = (_req, res) => {
const deleteSessionController: RequestHandler = async (_req, res) => {
const account = await getAccountForRequest(_req);
deleteSession(_req.query.sessionId as string);
res.sendStatus(200);
if (account.BuildLabel && version_compare(account.BuildLabel, "2016.07.08.16.56") < 0) {
// Pre-Specters of the Rail
res.send(_req.query.sessionId as string); // Unsure if this is correct, but the client is chill with it
} else {
res.sendStatus(200);
}
};
export { deleteSessionController };

View File

@@ -0,0 +1,51 @@
import {
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
hasGuildPermission,
refundDojoDeco,
removeDojoDeco
} from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { logger } from "../../utils/logger.ts";
import type { RequestHandler } from "express";
export const destroyDojoDecoController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId LevelKeys");
const guild = await getGuildForRequestEx(req, inventory);
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Decorator))) {
res.json({ DojoRequestStatus: -1 });
return;
}
const request = JSON.parse(String(req.body)) as IDestroyDojoDecoRequest | IClearObstacleCourseRequest;
if ("DecoType" in request) {
removeDojoDeco(guild, request.ComponentId, request.DecoId);
} else if (request.Act == "cObst") {
const component = guild.DojoComponents.id(request.ComponentId)!;
if (component.Decos) {
for (const deco of component.Decos) {
refundDojoDeco(guild, component, deco);
}
component.Decos.splice(0, component.Decos.length);
}
} else {
logger.error(`unhandled destroyDojoDeco request`, request);
}
await guild.save();
res.json(await getDojoClient(guild, 0, request.ComponentId));
};
interface IDestroyDojoDecoRequest {
DecoType: string;
ComponentId: string;
DecoId: string;
}
interface IClearObstacleCourseRequest {
ComponentId: string;
Act: "cObst" | "maybesomethingelsewedontknowabout";
}

View File

@@ -0,0 +1,67 @@
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { GuildPermission } from "../../types/guildTypes.ts";
import { parallelForeach } from "../../utils/async-utils.ts";
import { logger } from "../../utils/logger.ts";
import type { RequestHandler } from "express";
export const divvyAllianceVaultController: RequestHandler = async (req, res) => {
// Afaict, there's no way to put anything other than credits in the alliance vault (anymore?), so just no-op if this is not a request to divvy credits.
if (req.query.credits == "1") {
// Check requester is a warlord in their guild
const account = await getAccountForRequest(req);
const guildMember = (await GuildMember.findOne({ accountId: account._id, status: 0 }))!;
if (guildMember.rank > 1) {
res.status(400).end();
return;
}
// Check guild has treasurer permissions in the alliance
const allianceMember = (await AllianceMember.findOne({
allianceId: req.query.allianceId,
guildId: guildMember.guildId
}))!;
if (!(allianceMember.Permissions & GuildPermission.Treasurer)) {
res.status(400).end();
return;
}
const allianceMembers = await AllianceMember.find({ allianceId: req.query.allianceId });
const memberCounts: Record<string, number> = {};
let totalMembers = 0;
await parallelForeach(allianceMembers, async allianceMember => {
const memberCount = await GuildMember.countDocuments({
guildId: allianceMember.guildId
});
memberCounts[allianceMember.guildId.toString()] = memberCount;
totalMembers += memberCount;
});
logger.debug(`alliance has ${totalMembers} members between all its clans`);
const alliance = (await Alliance.findById(allianceMember.allianceId, "VaultRegularCredits"))!;
if (alliance.VaultRegularCredits) {
let creditsHandedOutInTotal = 0;
await parallelForeach(allianceMembers, async allianceMember => {
const memberCount = memberCounts[allianceMember.guildId.toString()];
const cutPercentage = memberCount / totalMembers;
const creditsToHandOut = Math.trunc(alliance.VaultRegularCredits! * cutPercentage);
logger.debug(
`${allianceMember.guildId.toString()} has ${memberCount} member(s) = ${Math.trunc(cutPercentage * 100)}% of alliance; giving ${creditsToHandOut} credit(s)`
);
if (creditsToHandOut != 0) {
await Guild.updateOne(
{ _id: allianceMember.guildId },
{ $inc: { VaultRegularCredits: creditsToHandOut } }
);
creditsHandedOutInTotal += creditsToHandOut;
}
});
alliance.VaultRegularCredits -= creditsHandedOutInTotal;
logger.debug(
`handed out ${creditsHandedOutInTotal} credits; alliance vault now has ${alliance.VaultRegularCredits} credit(s)`
);
}
await alliance.save();
}
res.end();
};

View File

@@ -0,0 +1,83 @@
import type { TGuildDatabaseDocument } from "../../models/guildModel.ts";
import { GuildMember } from "../../models/guildModel.ts";
import {
getDojoClient,
getGuildForRequestEx,
hasAccessToDojo,
scaleRequiredCount
} from "../../services/guildService.ts";
import { getInventory, updateCurrency } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IDojoContributable } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
import type { IDojoBuild } from "warframe-public-export-plus";
import { ExportDojoRecipes } from "warframe-public-export-plus";
interface IDojoComponentRushRequest {
DecoType?: string;
DecoId?: string;
ComponentId: string;
Amount: number;
VaultAmount: number;
AllianceVaultAmount: number;
}
export const dojoComponentRushController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
if (!hasAccessToDojo(inventory)) {
res.json({ DojoRequestStatus: -1 });
return;
}
const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
const component = guild.DojoComponents.id(request.ComponentId)!;
let platinumDonated = request.Amount;
const inventoryChanges = updateCurrency(inventory, request.Amount, true);
if (request.VaultAmount) {
platinumDonated += request.VaultAmount;
guild.VaultPremiumCredits! -= request.VaultAmount;
}
if (request.DecoId) {
const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
processContribution(guild, deco, meta, platinumDonated);
} else {
const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
processContribution(guild, component, meta, platinumDonated);
const entry = guild.RoomChanges?.find(x => x.componentId.equals(component._id));
if (entry) {
entry.dateTime = component.CompletionTime!;
}
}
const guildMember = (await GuildMember.findOne({ accountId, guildId: guild._id }, "PremiumCreditsContributed"))!;
guildMember.PremiumCreditsContributed ??= 0;
guildMember.PremiumCreditsContributed += request.Amount;
await Promise.all([guild.save(), inventory.save(), guildMember.save()]);
res.json({
...(await getDojoClient(guild, 0, component._id)),
InventoryChanges: inventoryChanges
});
};
const processContribution = (
guild: TGuildDatabaseDocument,
component: IDojoContributable,
meta: IDojoBuild,
platinumDonated: number
): void => {
const fullPlatinumCost = scaleRequiredCount(guild.Tier, meta.skipTimePrice);
const fullDurationSeconds = meta.time;
const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost;
component.CompletionTime = new Date(
component.CompletionTime!.getTime() - secondsPerPlatinum * platinumDonated * 1000
);
component.RushPlatinum ??= 0;
component.RushPlatinum += platinumDonated;
};

View File

@@ -1,5 +1,11 @@
import { RequestHandler } from "express";
import type { RequestHandler } from "express";
// Arbiter Dojo endpoints, not really used by us as we don't provide a ContentURL.
export const dojoController: RequestHandler = (_req, res) => {
res.json("-1"); // Tell client to use authorised request.
};
export const setDojoURLController: RequestHandler = (_req, res) => {
res.end();
};

View File

@@ -1,7 +1,145 @@
import { RequestHandler } from "express";
import { toMongoDate, toOid } from "../../helpers/inventoryHelpers.ts";
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
import { fromStoreItem } from "../../services/itemDataService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getRandomInt, getRandomWeightedRewardUc } from "../../services/rngService.ts";
import type { IMongoDate, IOid } from "../../types/commonTypes.ts";
import type { IDroneClient } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
import { ExportDrones, ExportResources, ExportSystems } from "warframe-public-export-plus";
const dronesController: RequestHandler = (_req, res) => {
res.json({});
export const dronesController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
if ("GetActive" in req.query) {
const inventory = await getInventory(accountId, "Drones");
const activeDrones: IActiveDrone[] = [];
for (const drone of inventory.Drones) {
if (drone.DeployTime) {
activeDrones.push({
DeployTime: toMongoDate(drone.DeployTime),
System: drone.System!,
ItemId: toOid(drone._id),
ItemType: drone.ItemType,
CurrentHP: drone.CurrentHP,
DamageTime: toMongoDate(drone.DamageTime!),
PendingDamage: drone.PendingDamage!,
Resources: [
{
ItemType: drone.ResourceType!,
BinTotal: drone.ResourceCount!,
StartTime: toMongoDate(drone.DeployTime)
}
]
});
}
}
res.json({
ActiveDrones: activeDrones
});
} else if ("droneId" in req.query && "systemIndex" in req.query) {
const inventory = await getInventory(
accountId,
"Drones instantResourceExtractorDrones noResourceExtractorDronesDamage"
);
const drone = inventory.Drones.id(req.query.droneId as string)!;
const droneMeta = ExportDrones[drone.ItemType];
drone.DeployTime = inventory.instantResourceExtractorDrones ? new Date(0) : new Date();
if (drone.RepairStart) {
const repairMinutes = (Date.now() - drone.RepairStart.getTime()) / 60_000;
const hpPerMinute = droneMeta.repairRate / 60;
drone.CurrentHP = Math.min(drone.CurrentHP + Math.round(repairMinutes * hpPerMinute), droneMeta.durability);
drone.RepairStart = undefined;
}
drone.System = parseInt(req.query.systemIndex as string);
const system = ExportSystems[drone.System - 1];
drone.DamageTime = inventory.instantResourceExtractorDrones
? new Date()
: new Date(Date.now() + getRandomInt(3 * 3600 * 1000, 4 * 3600 * 1000));
drone.PendingDamage =
!inventory.noResourceExtractorDronesDamage && Math.random() < system.damageChance
? getRandomInt(system.droneDamage.minValue, system.droneDamage.maxValue)
: 0;
const resource = getRandomWeightedRewardUc(system.resources, droneMeta.probabilities)!;
//logger.debug(`drone rolled`, resource);
drone.ResourceType = fromStoreItem(resource.StoreItem);
const resourceMeta = ExportResources[drone.ResourceType];
if (resourceMeta.pickupQuantity) {
const pickupsToCollect = droneMeta.binCapacity * droneMeta.capacityMultipliers[resource.Rarity];
drone.ResourceCount = 0;
for (let i = 0; i != pickupsToCollect; ++i) {
drone.ResourceCount += getRandomInt(
resourceMeta.pickupQuantity.minValue,
resourceMeta.pickupQuantity.maxValue
);
}
} else {
drone.ResourceCount = droneMeta.binCapacity * droneMeta.capacityMultipliers[resource.Rarity];
}
await inventory.save();
res.json({});
} else if ("collectDroneId" in req.query) {
const inventory = await getInventory(accountId);
const drone = inventory.Drones.id(req.query.collectDroneId as string)!;
if (new Date() >= drone.DamageTime!) {
drone.CurrentHP -= drone.PendingDamage!;
drone.RepairStart = new Date();
}
const inventoryChanges: IInventoryChanges = {};
if (drone.CurrentHP <= 0) {
inventory.RegularCredits += 100;
inventoryChanges.RegularCredits = 100;
inventory.Drones.pull({ _id: req.query.collectDroneId as string });
inventoryChanges.RemovedIdItems = [
{
ItemId: { $oid: req.query.collectDroneId }
}
];
} else {
const completionTime = drone.DeployTime!.getTime() + ExportDrones[drone.ItemType].fillRate * 3600_000;
if (Date.now() >= completionTime) {
const miscItemChanges = [
{
ItemType: drone.ResourceType!,
ItemCount: drone.ResourceCount!
}
];
addMiscItems(inventory, miscItemChanges);
inventoryChanges.MiscItems = miscItemChanges;
}
drone.DeployTime = undefined;
drone.System = undefined;
drone.DamageTime = undefined;
drone.PendingDamage = undefined;
drone.ResourceType = undefined;
drone.ResourceCount = undefined;
inventoryChanges.Drones = [drone.toJSON<IDroneClient>()];
}
await inventory.save();
res.json({
InventoryChanges: inventoryChanges
});
} else {
throw new Error(`drones.php query not handled`);
}
};
export { dronesController };
interface IActiveDrone {
DeployTime: IMongoDate;
System: number;
ItemId: IOid;
ItemType: string;
CurrentHP: number;
DamageTime: IMongoDate;
PendingDamage: number;
Resources: {
ItemType: string;
BinTotal: number;
StartTime: IMongoDate;
}[];
}

View File

@@ -0,0 +1,534 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { combineInventoryChanges, getInventory } from "../../services/inventoryService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type {
IEndlessXpReward,
IInventoryClient,
TEndlessXpCategory
} from "../../types/inventoryTypes/inventoryTypes.ts";
import { logger } from "../../utils/logger.ts";
import type { ICountedStoreItem } from "warframe-public-export-plus";
import { ExportRewards } from "warframe-public-export-plus";
import { getRandomElement } from "../../services/rngService.ts";
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
export const endlessXpController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const payload = getJSONfromString<IEndlessXpRequest>(String(req.body));
if (payload.Mode == "r") {
const inventory = await getInventory(accountId, "EndlessXP");
inventory.EndlessXP ??= [];
let entry = inventory.EndlessXP.find(x => x.Category == payload.Category);
if (!entry) {
entry = {
Category: payload.Category,
Earn: 0,
Claim: 0,
Choices: payload.Choices,
PendingRewards: []
};
inventory.EndlessXP.push(entry);
}
const weekStart = 1734307200_000 + Math.trunc((Date.now() - 1734307200_000) / 604800000) * 604800000;
const weekEnd = weekStart + 604800000;
entry.Earn = 0;
entry.Claim = 0;
entry.BonusAvailable = new Date(weekStart);
entry.Expiry = new Date(weekEnd);
entry.Choices = payload.Choices;
entry.PendingRewards =
payload.Category == "EXC_HARD"
? generateHardModeRewards(payload.Choices)
: generateNormalModeRewards(payload.Choices);
await inventory.save();
res.json({
NewProgress: inventory.toJSON<IInventoryClient>().EndlessXP!.find(x => x.Category == payload.Category)!
});
} else if (payload.Mode == "c") {
const inventory = await getInventory(accountId);
const entry = inventory.EndlessXP!.find(x => x.Category == payload.Category)!;
const inventoryChanges: IInventoryChanges = {};
for (const reward of entry.PendingRewards) {
if (entry.Claim < reward.RequiredTotalXp && reward.RequiredTotalXp <= entry.Earn) {
combineInventoryChanges(
inventoryChanges,
(
await handleStoreItemAcquisition(
reward.Rewards[0].StoreItem,
inventory,
reward.Rewards[0].ItemCount
)
).InventoryChanges
);
}
}
entry.Claim = entry.Earn;
await inventory.save();
res.json({
InventoryChanges: inventoryChanges,
ClaimedXp: entry.Claim
});
} else {
logger.debug(`data provided to ${req.path}: ${String(req.body)}`);
throw new Error(`unexpected endlessXp mode: ${payload.Mode}`);
}
};
type IEndlessXpRequest =
| {
Mode: "r";
Category: TEndlessXpCategory;
Choices: string[];
}
| {
Mode: "c" | "something else";
Category: TEndlessXpCategory;
};
const generateRandomRewards = (deckName: string): ICountedStoreItem[] => {
const reward = getRandomElement(ExportRewards[deckName][0])!;
return [
{
StoreItem: reward.type,
ItemCount: reward.itemCount
}
];
};
const normalModeChosenRewards: Record<string, string[]> = {
Excalibur: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ExcaliburHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ExcaliburChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Excalibur/RadialJavelinAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ExcaliburSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ExcaliburBlueprint"
],
Trinity: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrinityHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrinityChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Trinity/EnergyVampireAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrinitySystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrinityBlueprint"
],
Ember: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/EmberHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/EmberChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Ember/WorldOnFireAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/EmberSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/EmberBlueprint"
],
Loki: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/LOKIHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/LOKIChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Loki/InvisibilityAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/LOKISystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/LOKIBlueprint"
],
Mag: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Mag/CrushAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagBlueprint"
],
Rhino: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RhinoHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RhinoChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Rhino/RhinoChargeAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RhinoSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RhinoBlueprint"
],
Ash: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AshHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AshChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Ninja/GlaiveAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AshSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/AshBlueprint"
],
Frost: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FrostHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FrostChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Frost/IceShieldAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FrostSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FrostBlueprint"
],
Nyx: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NyxHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NyxChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Jade/SelfBulletAttractorAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NyxSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NyxBlueprint"
],
Saryn: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/SarynHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/SarynChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Saryn/PoisonAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/SarynSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/SarynBlueprint"
],
Vauban: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrapperHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrapperChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Trapper/LevTrapAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrapperSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/TrapperBlueprint"
],
Nova: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NovaHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NovaChassisBlueprint",
"/Lotus/StoreItems/Powersuits/AntiMatter/MolecularPrimeAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NovaSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NovaBlueprint"
],
Nekros: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NecroHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NecroChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Necro/CloneTheDeadAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NecroSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NecroBlueprint"
],
Valkyr: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BerserkerHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BerserkerChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Berserker/IntimidateAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BerserkerSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BerserkerBlueprint"
],
Oberon: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PaladinHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PaladinChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Paladin/RegenerationAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PaladinSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PaladinBlueprint"
],
Hydroid: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HydroidHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HydroidChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Pirate/CannonBarrageAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HydroidSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HydroidBlueprint"
],
Mirage: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HarlequinHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HarlequinChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Harlequin/LightAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HarlequinSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/HarlequinBlueprint"
],
Limbo: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagicianHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagicianChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Magician/TearInSpaceAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagicianSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MagicianBlueprint"
],
Mesa: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GunslingerHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GunslingerChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Cowgirl/GunFuPvPAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GunslingerSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GunslingerBlueprint"
],
Chroma: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Dragon/DragonLuckAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/ChromaBlueprint"
],
Atlas: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BrawlerHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BrawlerChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Brawler/BrawlerPassiveAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BrawlerSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/BrawlerBlueprint"
],
Ivara: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RangerHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RangerChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Ranger/RangerStealAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RangerSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RangerBlueprint"
],
Inaros: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MummyHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MummyChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Sandman/SandmanSwarmAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MummySystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/MummyBlueprint"
],
Titania: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FairyHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FairyChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Fairy/FairyFlightAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FairySystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/FairyBlueprint"
],
Nidus: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NidusHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NidusChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Infestation/InfestPodsAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NidusSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/NidusBlueprint"
],
Octavia: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/OctaviaHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/OctaviaChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Bard/BardCharmAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/OctaviaSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/OctaviaBlueprint"
],
Harrow: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PriestHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PriestChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Priest/PriestPactAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PriestSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PriestBlueprint"
],
Gara: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GlassHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GlassChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Glass/GlassFragmentAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GlassSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GlassBlueprint"
],
Khora: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/KhoraHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/KhoraChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Khora/KhoraCrackAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/KhoraSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/KhoraBlueprint"
],
Revenant: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RevenantHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RevenantChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Revenant/RevenantMarkAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RevenantSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/RevenantBlueprint"
],
Garuda: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GarudaHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GarudaChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Garuda/GarudaUnstoppableAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GarudaSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/GarudaBlueprint"
],
Baruuk: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PacifistHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PacifistChassisBlueprint",
"/Lotus/StoreItems/Powersuits/Pacifist/PacifistFistAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PacifistSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/PacifistBlueprint"
],
Hildryn: [
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/IronframeHelmetBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/IronframeChassisBlueprint",
"/Lotus/StoreItems/Powersuits/IronFrame/IronFrameStripAugmentCard",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/IronframeSystemsBlueprint",
"/Lotus/StoreItems/Types/Recipes/WarframeRecipes/IronframeBlueprint"
]
};
const generateNormalModeRewards = (choices: string[]): IEndlessXpReward[] => {
const choiceRewards = normalModeChosenRewards[choices[0]];
return [
{
RequiredTotalXp: 190,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessNormalSilverRewards"
)
},
{
RequiredTotalXp: 400,
Rewards: [
{
StoreItem: choiceRewards[0],
ItemCount: 1
}
]
},
{
RequiredTotalXp: 630,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessNormalSilverRewards"
)
},
{
RequiredTotalXp: 890,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessNormalMODRewards"
)
},
{
RequiredTotalXp: 1190,
Rewards: [
{
StoreItem: choiceRewards[1],
ItemCount: 1
}
]
},
{
RequiredTotalXp: 1540,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessNormalGoldRewards"
)
},
{
RequiredTotalXp: 1950,
Rewards: [
{
StoreItem: choiceRewards[2],
ItemCount: 1
}
]
},
{
RequiredTotalXp: 2430,
Rewards: [
{
StoreItem: choiceRewards[3],
ItemCount: 1
}
]
},
{
RequiredTotalXp: 2990,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessNormalArcaneRewards"
)
},
{
RequiredTotalXp: 3640,
Rewards: [
{
StoreItem: choiceRewards[4],
ItemCount: 1
}
]
}
];
};
const hardModeChosenRewards: Record<string, string> = {
Braton: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/BratonIncarnonUnlocker",
Lato: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/LatoIncarnonUnlocker",
Skana: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/SkanaIncarnonUnlocker",
Paris: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/ParisIncarnonUnlocker",
Kunai: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/KunaiIncarnonUnlocker",
Boar: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/BoarIncarnonUnlocker",
Gammacor: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/GammacorIncarnonUnlocker",
Anku: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/AnkuIncarnonUnlocker",
Gorgon: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/GorgonIncarnonUnlocker",
Angstrum: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/AngstrumIncarnonUnlocker",
Bo: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/BoIncarnonUnlocker",
Latron: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/LatronIncarnonUnlocker",
Furis: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/FurisIncarnonUnlocker",
Furax: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/FuraxIncarnonUnlocker",
Strun: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/StrunIncarnonUnlocker",
Lex: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/LexIncarnonUnlocker",
Magistar: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/MagistarIncarnonUnlocker",
Boltor: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/BoltorIncarnonUnlocker",
Bronco: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/BroncoIncarnonUnlocker",
CeramicDagger: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/CeramicDaggerIncarnonUnlocker",
Torid: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/ToridIncarnonUnlocker",
DualToxocyst: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/DualToxocystIncarnonUnlocker",
DualIchor: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/DualIchorIncarnonUnlocker",
Miter: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/MiterIncarnonUnlocker",
Atomos: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/AtomosIncarnonUnlocker",
AckAndBrunt: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/AckAndBruntIncarnonUnlocker",
Soma: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/SomaIncarnonUnlocker",
Vasto: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/VastoIncarnonUnlocker",
NamiSolo: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/NamiSoloIncarnonUnlocker",
Burston: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/BurstonIncarnonUnlocker",
Zylok: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/ZylokIncarnonUnlocker",
Sibear: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/SibearIncarnonUnlocker",
Dread: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/DreadIncarnonUnlocker",
Despair: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/DespairIncarnonUnlocker",
Hate: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/HateIncarnonUnlocker",
Dera: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/DeraIncarnonUnlocker",
Cestra: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/CestraIncarnonUnlocker",
Okina: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Melee/OkinaIncarnonUnlocker",
Sybaris: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Primary/SybarisIncarnonUnlocker",
Sicarus: "/Lotus/StoreItems/Types/Items/MiscItems/IncarnonAdapters/Secondary/SicarusIncarnonUnlocker",
RivenPrimary: "/Lotus/StoreItems/Upgrades/Mods/Randomized/RawRifleRandomMod",
RivenSecondary: "/Lotus/StoreItems/Upgrades/Mods/Randomized/RawPistolRandomMod",
RivenMelee: "/Lotus/StoreItems/Upgrades/Mods/Randomized/RawMeleeRandomMod",
Kuva: "/Lotus/Types/Game/DuviriEndless/CircuitSteelPathBIGKuvaReward"
};
const generateHardModeRewards = (choices: string[]): IEndlessXpReward[] => {
return [
{
RequiredTotalXp: 285,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathSilverRewards"
)
},
{
RequiredTotalXp: 600,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathArcaneRewards"
)
},
{
RequiredTotalXp: 945,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathSilverRewards"
)
},
{
RequiredTotalXp: 1335,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathSilverRewards"
)
},
{
RequiredTotalXp: 1785,
Rewards: [
{
StoreItem: hardModeChosenRewards[choices[0]],
ItemCount: 1
}
]
},
{
RequiredTotalXp: 2310,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathGoldRewards"
)
},
{
RequiredTotalXp: 2925,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathGoldRewards"
)
},
{
RequiredTotalXp: 3645,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathArcaneRewards"
)
},
{
RequiredTotalXp: 4485,
Rewards: generateRandomRewards(
"/Lotus/Types/Game/MissionDecks/DuviriEndlessCircuitRewards/DuviriEndlessSteelPathSteelEssenceRewards"
)
},
{
RequiredTotalXp: 5460,
Rewards: [
{
StoreItem: hardModeChosenRewards[choices[1]],
ItemCount: 1
}
]
}
];
};

View File

@@ -0,0 +1,52 @@
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getInventory, updateEntratiVault } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
export const entratiLabConquestModeController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(
accountId,
"EntratiVaultCountResetDate EntratiVaultCountLastPeriod EntratiLabConquestUnlocked EchoesHexConquestUnlocked EchoesHexConquestActiveFrameVariants EchoesHexConquestActiveStickers EntratiLabConquestActiveFrameVariants EntratiLabConquestCacheScoreMission EchoesHexConquestCacheScoreMission"
);
const body = getJSONfromString<IEntratiLabConquestModeRequest>(String(req.body));
updateEntratiVault(inventory);
if (body.BuyMode) {
inventory.EntratiVaultCountLastPeriod! += 2;
if (body.IsEchoesDeepArchemedea) {
inventory.EchoesHexConquestUnlocked = 1;
} else {
inventory.EntratiLabConquestUnlocked = 1;
}
}
if (body.IsEchoesDeepArchemedea) {
if (inventory.EchoesHexConquestUnlocked) {
inventory.EchoesHexConquestActiveFrameVariants = body.EchoesHexConquestActiveFrameVariants!;
inventory.EchoesHexConquestActiveStickers = body.EchoesHexConquestActiveStickers!;
}
} else {
if (inventory.EntratiLabConquestUnlocked) {
inventory.EntratiLabConquestActiveFrameVariants = body.EntratiLabConquestActiveFrameVariants!;
}
}
await inventory.save();
res.json({
EntratiVaultCountResetDate: toMongoDate(inventory.EntratiVaultCountResetDate!),
EntratiVaultCountLastPeriod: inventory.EntratiVaultCountLastPeriod,
EntratiLabConquestUnlocked: inventory.EntratiLabConquestUnlocked,
EntratiLabConquestCacheScoreMission: inventory.EntratiLabConquestCacheScoreMission,
EchoesHexConquestUnlocked: inventory.EchoesHexConquestUnlocked,
EchoesHexConquestCacheScoreMission: inventory.EchoesHexConquestCacheScoreMission
});
};
interface IEntratiLabConquestModeRequest {
BuyMode?: number;
IsEchoesDeepArchemedea?: number;
EntratiLabConquestUnlocked?: number;
EntratiLabConquestActiveFrameVariants?: string[];
EchoesHexConquestUnlocked?: number;
EchoesHexConquestActiveFrameVariants?: string[];
EchoesHexConquestActiveStickers?: string[];
}

View File

@@ -1,32 +1,49 @@
import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory } from "@/src/services/inventoryService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { WeaponTypeInternal } from "@/src/services/itemDataService";
import { EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes";
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { WeaponTypeInternal } from "../../services/itemDataService.ts";
import { getRecipe } from "../../services/itemDataService.ts";
import { EquipmentFeatures } from "../../types/equipmentTypes.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const evolveWeaponController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const payload = getJSONfromString(String(req.body)) as IEvolveWeaponRequest;
console.assert(payload.Action == "EWA_INSTALL");
const payload = getJSONfromString<IEvolveWeaponRequest>(String(req.body));
// TODO: We should remove the Genesis item & its resources, but currently we don't know these "recipes".
const recipe = getRecipe(payload.Recipe)!;
if (payload.Action == "EWA_INSTALL") {
addMiscItems(
inventory,
recipe.ingredients.map(x => ({ ItemType: x.ItemType, ItemCount: x.ItemCount * -1 }))
);
const item = inventory[payload.Category].find(item => item._id.toString() == (req.query.ItemId as string))!;
item.Features ??= 0;
item.Features |= EquipmentFeatures.INCARNON_GENESIS;
const item = inventory[payload.Category].id(req.query.ItemId as string)!;
item.Features ??= 0;
item.Features |= EquipmentFeatures.INCARNON_GENESIS;
item.SkillTree = "0";
item.SkillTree = "0";
inventory.EvolutionProgress ??= [];
if (!inventory.EvolutionProgress.find(entry => entry.ItemType == payload.EvoType)) {
inventory.EvolutionProgress.push({
Progress: 0,
Rank: 1,
ItemType: payload.EvoType
});
inventory.EvolutionProgress ??= [];
if (!inventory.EvolutionProgress.find(entry => entry.ItemType == payload.EvoType)) {
inventory.EvolutionProgress.push({
Progress: 0,
Rank: 1,
ItemType: payload.EvoType
});
}
} else if (payload.Action == "EWA_UNINSTALL") {
addMiscItems(inventory, [
{
ItemType: recipe.resultType,
ItemCount: 1
}
]);
const item = inventory[payload.Category].id(req.query.ItemId as string)!;
item.Features! &= ~EquipmentFeatures.INCARNON_GENESIS;
} else {
throw new Error(`unexpected evolve weapon action: ${payload.Action}`);
}
await inventory.save();
@@ -34,7 +51,7 @@ export const evolveWeaponController: RequestHandler = async (req, res) => {
};
interface IEvolveWeaponRequest {
Action: "EWA_INSTALL";
Action: string;
Category: WeaponTypeInternal;
Recipe: string; // e.g. "/Lotus/Types/Items/MiscItems/IncarnonAdapters/UnlockerBlueprints/DespairIncarnonBlueprint"
UninstallRecipe: "";

View File

@@ -0,0 +1,62 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { addMiscItem, getInventory } from "../../services/inventoryService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { logger } from "../../utils/logger.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
export const feedPrinceController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "MiscItems NokkoColony NodeIntrosCompleted");
const payload = getJSONfromString<IFeedPrinceRequest>(String(req.body));
switch (payload.Mode) {
case "r": {
inventory.NokkoColony ??= {
FeedLevel: 0,
JournalEntries: []
};
const InventoryChanges: IInventoryChanges = {};
inventory.NokkoColony.FeedLevel += payload.Amount;
if (
(!inventory.NodeIntrosCompleted.includes("CompletedVision1") && inventory.NokkoColony.FeedLevel > 20) ||
(!inventory.NodeIntrosCompleted.includes("CompletedVision2") && inventory.NokkoColony.FeedLevel > 60)
) {
res.json({
FeedSucceeded: false,
FeedLevel: inventory.NokkoColony.FeedLevel - payload.Amount,
InventoryChanges
} satisfies IFeedPrinceResponse);
} else {
addMiscItem(
inventory,
"/Lotus/Types/Items/MiscItems/MushroomFood",
payload.Amount * -1,
InventoryChanges
);
await inventory.save();
res.json({
FeedSucceeded: true,
FeedLevel: inventory.NokkoColony.FeedLevel,
InventoryChanges
} satisfies IFeedPrinceResponse);
}
break;
}
default:
logger.debug(`data provided to ${req.path}: ${String(req.body)}`);
throw new Error(`unknown feedPrince mode: ${payload.Mode}`);
}
};
interface IFeedPrinceRequest {
Mode: string; // r
Amount: number;
}
interface IFeedPrinceResponse {
FeedSucceeded: boolean;
FeedLevel: number;
InventoryChanges: IInventoryChanges;
}

View File

@@ -1,31 +1,28 @@
import { RequestHandler } from "express";
import { getSession } from "@/src/managers/sessionManager";
import { logger } from "@/src/utils/logger";
import type { RequestHandler } from "express";
import { getSession } from "../../managers/sessionManager.ts";
import { logger } from "../../utils/logger.ts";
import type { IFindSessionRequest } from "../../types/session.ts";
//TODO: cleanup
const findSessionsController: RequestHandler = (_req, res) => {
const reqBody = JSON.parse(String(_req.body));
logger.debug("FindSession Request ", { reqBody });
const req = JSON.parse(String(_req.body));
export const findSessionsController: RequestHandler = (_req, res) => {
const req = JSON.parse(String(_req.body)) as IFindSessionRequest;
logger.debug("FindSession Request ", req);
if (req.id != undefined) {
logger.debug("Found ID");
const session = getSession(req.id as string);
const session = getSession(req.id);
if (session) res.json({ queryId: req.queryId, Sessions: session });
if (session.length) res.json({ queryId: req.queryId, Sessions: session });
else res.json({});
} else if (req.originalSessionId != undefined) {
logger.debug("Found OriginalSessionID");
const session = getSession(req.originalSessionId as string);
if (session) res.json({ queryId: req.queryId, Sessions: session });
const session = getSession(req.originalSessionId);
if (session.length) res.json({ queryId: req.queryId, Sessions: session });
else res.json({});
} else {
logger.debug("Found SessionRequest");
const session = getSession(String(_req.body));
if (session) res.json({ queryId: req.queryId, Sessions: session });
const session = getSession(req);
if (session.length) res.json({ queryId: req.queryId, Sessions: session });
else res.json({});
}
};
export { findSessionsController };

View File

@@ -0,0 +1,46 @@
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { addMiscItems, addStanding, getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import type { RequestHandler } from "express";
import { ExportResources } from "warframe-public-export-plus";
export const fishmongerController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const body = getJSONfromString<IFishmongerRequest>(String(req.body));
const miscItemChanges: IMiscItem[] = [];
let syndicateTag: string | undefined;
let gainedStanding = 0;
for (const fish of body.Fish) {
const fishData = ExportResources[fish.ItemType];
if (req.query.dissect == "1") {
for (const part of fishData.dissectionParts!) {
const partItem = miscItemChanges.find(x => x.ItemType == part.ItemType);
if (partItem) {
partItem.ItemCount += part.ItemCount * fish.ItemCount;
} else {
miscItemChanges.push({ ItemType: part.ItemType, ItemCount: part.ItemCount * fish.ItemCount });
}
}
} else {
syndicateTag = fishData.syndicateTag!;
gainedStanding += fishData.standingBonus! * fish.ItemCount;
}
miscItemChanges.push({ ItemType: fish.ItemType, ItemCount: fish.ItemCount * -1 });
}
addMiscItems(inventory, miscItemChanges);
if (gainedStanding && syndicateTag) addStanding(inventory, syndicateTag, gainedStanding);
await inventory.save();
res.json({
InventoryChanges: {
MiscItems: miscItemChanges
},
SyndicateTag: syndicateTag,
StandingChange: gainedStanding
});
};
interface IFishmongerRequest {
Fish: IMiscItem[];
}

View File

@@ -1,28 +1,117 @@
import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory, addMiscItems, addEquipment } from "@/src/services/inventoryService";
import { IMiscItem, TFocusPolarity } from "@/src/types/inventoryTypes/inventoryTypes";
import { logger } from "@/src/utils/logger";
import type { RequestHandler } from "express";
import { getAccountForRequest } from "../../services/loginService.ts";
import { getInventory, addMiscItems, addEquipment, occupySlot } from "../../services/inventoryService.ts";
import type { IMiscItem, TFocusPolarity, TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
import { logger } from "../../utils/logger.ts";
import { ExportFocusUpgrades } from "warframe-public-export-plus";
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
import { version_compare } from "../../helpers/inventoryHelpers.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const focusController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
switch (req.query.op) {
const account = await getAccountForRequest(req);
let op = req.query.op as string;
const focus2 = account.BuildLabel && version_compare(account.BuildLabel, "2022.04.29.12.53") < 0;
if (focus2) {
// Focus 2.0
switch (req.query.op) {
case Focus2Operation.InstallLens:
op = "InstallLens";
break;
case Focus2Operation.UnlockWay:
op = "UnlockWay";
break;
case Focus2Operation.UnlockUpgrade:
op = "UnlockUpgrade";
break;
case Focus2Operation.IncreasePool:
op = "IncreasePool";
break;
case Focus2Operation.LevelUpUpgrade:
op = "LevelUpUpgrade";
break;
case Focus2Operation.ActivateWay:
op = "ActivateWay";
break;
case Focus2Operation.UpdateUpgrade:
op = "UpdateUpgrade";
break;
case Focus2Operation.SentTrainingAmplifier:
op = "SentTrainingAmplifier";
break;
case Focus2Operation.UnbindUpgrade:
op = "UnbindUpgrade";
break;
case Focus2Operation.ConvertShard:
op = "ConvertShard";
break;
}
} else {
// Focus 3.0
switch (req.query.op) {
case Focus3Operation.InstallLens:
op = "InstallLens";
break;
case Focus3Operation.UnlockWay:
op = "UnlockWay";
break;
case Focus3Operation.UnlockUpgrade:
op = "UnlockUpgrade";
break;
case Focus3Operation.LevelUpUpgrade:
op = "LevelUpUpgrade";
break;
case Focus3Operation.ActivateWay:
op = "ActivateWay";
break;
case Focus3Operation.SentTrainingAmplifier:
op = "SentTrainingAmplifier";
break;
case Focus3Operation.UnbindUpgrade:
op = "UnbindUpgrade";
break;
case Focus3Operation.ConvertShard:
op = "ConvertShard";
break;
}
}
switch (op) {
default:
logger.error("Unhandled focus op type: " + req.query.op);
logger.debug(req.body.toString());
logger.error("Unhandled focus op type: " + String(req.query.op));
logger.debug(String(req.body));
res.end();
break;
case FocusOperation.UnlockWay: {
case "InstallLens": {
const request = JSON.parse(String(req.body)) as ILensInstallRequest;
const inventory = await getInventory(account._id.toString());
const item = inventory[request.Category].id(request.WeaponId);
if (item) {
item.FocusLens = request.LensType;
addMiscItems(inventory, [
{
ItemType: request.LensType,
ItemCount: -1
} satisfies IMiscItem
]);
}
await inventory.save();
res.json({
weaponId: request.WeaponId,
lensType: request.LensType
});
break;
}
case "UnlockWay": {
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
const focusPolarity = focusTypeToPolarity(focusType);
const inventory = await getInventory(accountId);
const inventory = await getInventory(account._id.toString(), "FocusAbility FocusUpgrades FocusXP");
const cost = inventory.FocusAbility ? 50_000 : 0;
inventory.FocusAbility ??= focusType;
inventory.FocusUpgrades.push({ ItemType: focusType });
if (inventory.FocusXP) {
inventory.FocusXP[focusPolarity] -= cost;
if (cost) {
inventory.FocusXP![focusPolarity]! -= cost;
}
await inventory.save();
res.json({
@@ -31,24 +120,57 @@ export const focusController: RequestHandler = async (req, res) => {
});
break;
}
case FocusOperation.ActivateWay: {
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
const inventory = await getInventory(accountId);
inventory.FocusAbility = focusType;
case "IncreasePool": {
const request = JSON.parse(String(req.body)) as IIncreasePoolRequest;
const focusPolarity = focusTypeToPolarity(request.FocusType);
const inventory = await getInventory(account._id.toString(), "FocusXP FocusCapacity");
let cost = 0;
for (let capacity = request.CurrentTotalCapacity; capacity != request.NewTotalCapacity; ++capacity) {
cost += increasePoolCost[capacity - 5];
}
inventory.FocusXP![focusPolarity]! -= cost;
inventory.FocusCapacity = request.NewTotalCapacity;
await inventory.save();
res.end();
res.json({
TotalCapacity: request.NewTotalCapacity,
FocusPointCosts: { [focusPolarity]: cost }
});
break;
}
case FocusOperation.UnlockUpgrade: {
case "ActivateWay": {
const focusType = (JSON.parse(String(req.body)) as IWayRequest).FocusType;
await Inventory.updateOne(
{
accountOwnerId: account._id.toString()
},
{
FocusAbility: focusType
}
);
res.json({
FocusUpgrade: { ItemType: focusType }
});
break;
}
case "UnlockUpgrade": {
const request = JSON.parse(String(req.body)) as IUnlockUpgradeRequest;
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
const inventory = await getInventory(accountId);
const inventory = await getInventory(account._id.toString());
let cost = 0;
for (const focusType of request.FocusTypes) {
cost += ExportFocusUpgrades[focusType].baseFocusPointCost;
if (focusType in ExportFocusUpgrades) {
cost += ExportFocusUpgrades[focusType].baseFocusPointCost;
} else if (focusType == "/Lotus/Upgrades/Focus/Power/Residual/ChannelEfficiencyFocusUpgrade") {
// Zenurik's Inner Might (Focus 2.0)
cost += 50_000;
} else {
logger.warn(`unknown focus upgrade ${focusType}, will unlock it for free`);
}
inventory.FocusUpgrades.push({ ItemType: focusType, Level: 0 });
}
inventory.FocusXP[focusPolarity] -= cost;
inventory.FocusXP![focusPolarity]! -= cost;
await inventory.save();
res.json({
FocusTypes: request.FocusTypes,
@@ -56,17 +178,22 @@ export const focusController: RequestHandler = async (req, res) => {
});
break;
}
case FocusOperation.LevelUpUpgrade: {
case "LevelUpUpgrade":
case "UpdateUpgrade": {
const request = JSON.parse(String(req.body)) as ILevelUpUpgradeRequest;
const focusPolarity = focusTypeToPolarity(request.FocusInfos[0].ItemType);
const inventory = await getInventory(accountId);
const inventory = await getInventory(account._id.toString());
let cost = 0;
for (const focusUpgrade of request.FocusInfos) {
cost += focusUpgrade.FocusXpCost;
const focusUpgradeDb = inventory.FocusUpgrades.find(entry => entry.ItemType == focusUpgrade.ItemType)!;
focusUpgradeDb.Level = focusUpgrade.Level;
if (op == "UpdateUpgrade") {
focusUpgradeDb.IsActive = focusUpgrade.IsActive;
} else {
focusUpgradeDb.Level = focusUpgrade.Level;
}
}
inventory.FocusXP[focusPolarity] -= cost;
inventory.FocusXP![focusPolarity]! -= cost;
await inventory.save();
res.json({
FocusInfos: request.FocusInfos,
@@ -74,22 +201,26 @@ export const focusController: RequestHandler = async (req, res) => {
});
break;
}
case FocusOperation.SentTrainingAmplifier: {
case "SentTrainingAmplifier": {
const request = JSON.parse(String(req.body)) as ISentTrainingAmplifierRequest;
const parts: string[] = [
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingGrip",
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingChassis",
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingBarrel"
];
const result = await addEquipment("OperatorAmps", request.StartingWeaponType, accountId, parts);
res.json(result);
const inventory = await getInventory(account._id.toString());
const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, {
ModularParts: [
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingGrip",
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingChassis",
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingBarrel"
]
});
occupySlot(inventory, InventorySlot.AMPS, false);
await inventory.save();
res.json(inventoryChanges.OperatorAmps![0]);
break;
}
case FocusOperation.UnbindUpgrade: {
case "UnbindUpgrade": {
const request = JSON.parse(String(req.body)) as IUnbindUpgradeRequest;
const focusPolarity = focusTypeToPolarity(request.FocusTypes[0]);
const inventory = await getInventory(accountId);
inventory.FocusXP[focusPolarity] -= 750_000 * request.FocusTypes.length;
const inventory = await getInventory(account._id.toString());
inventory.FocusXP![focusPolarity]! -= 750_000 * request.FocusTypes.length;
addMiscItems(inventory, [
{
ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantItem",
@@ -115,7 +246,7 @@ export const focusController: RequestHandler = async (req, res) => {
});
break;
}
case FocusOperation.ConvertShard: {
case "ConvertShard": {
const request = JSON.parse(String(req.body)) as IConvertShardRequest;
// Tally XP
let xp = 0;
@@ -133,9 +264,11 @@ export const focusController: RequestHandler = async (req, res) => {
for (const shard of request.Shards) {
shard.ItemCount *= -1;
}
const inventory = await getInventory(accountId);
inventory.FocusXP ??= { AP_POWER: 0, AP_TACTIC: 0, AP_DEFENSE: 0, AP_ATTACK: 0, AP_WARD: 0 };
inventory.FocusXP[request.Polarity] += xp;
const inventory = await getInventory(account._id.toString());
const polarity = request.Polarity;
inventory.FocusXP ??= {};
inventory.FocusXP[polarity] ??= 0;
inventory.FocusXP[polarity] += xp;
addMiscItems(inventory, request.Shards);
await inventory.save();
break;
@@ -143,7 +276,9 @@ export const focusController: RequestHandler = async (req, res) => {
}
};
enum FocusOperation {
// Focus 3.0
enum Focus3Operation {
InstallLens = "1",
UnlockWay = "2",
UnlockUpgrade = "3",
LevelUpUpgrade = "4",
@@ -153,6 +288,20 @@ enum FocusOperation {
ConvertShard = "9"
}
// Focus 2.0
enum Focus2Operation {
InstallLens = "1",
UnlockWay = "2",
UnlockUpgrade = "3",
IncreasePool = "4",
LevelUpUpgrade = "5",
ActivateWay = "6",
UpdateUpgrade = "7", // used to change the IsActive state, same format as ILevelUpUpgradeRequest
SentTrainingAmplifier = "9",
UnbindUpgrade = "10",
ConvertShard = "11"
}
// For UnlockWay & ActivateWay
interface IWayRequest {
FocusType: string;
@@ -162,6 +311,13 @@ interface IUnlockUpgradeRequest {
FocusTypes: string[];
}
// Focus 2.0
interface IIncreasePoolRequest {
FocusType: string;
CurrentTotalCapacity: number;
NewTotalCapacity: number;
}
interface ILevelUpUpgradeRequest {
FocusInfos: {
ItemType: string;
@@ -169,6 +325,7 @@ interface ILevelUpUpgradeRequest {
IsUniversal: boolean;
Level: number;
IsActiveAbility: boolean;
IsActive?: number; // Focus 2.0
}[];
}
@@ -186,9 +343,15 @@ interface ISentTrainingAmplifierRequest {
StartingWeaponType: string;
}
interface ILensInstallRequest {
LensType: string;
Category: TEquipmentKey;
WeaponId: string;
}
// Works for ways & upgrades
const focusTypeToPolarity = (type: string): TFocusPolarity => {
return ("AP_" + type.substr(1).split("/")[3].toUpperCase()) as TFocusPolarity;
return ("AP_" + type.substring(1).split("/")[3].toUpperCase()) as TFocusPolarity;
};
const shardValues = {
@@ -197,3 +360,19 @@ const shardValues = {
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantItem": 25_000,
"/Lotus/Types/Gameplay/Eidolon/Resources/SentientShards/SentientShardBrilliantTierTwoItem": 40_000
};
// Starting at a capacity of 5 (Source: https://wiki.warframe.com/w/Focus_2.0)
const increasePoolCost = [
2576, 3099, 3638, 4190, 4755, 5331, 5918, 6514, 7120, 7734, 8357, 8988, 9626, 10271, 10923, 11582, 12247, 12918,
13595, 14277, 14965, 15659, 16357, 17061, 17769, 18482, 19200, 19922, 20649, 21380, 22115, 22854, 23597, 24344,
25095, 25850, 26609, 27371, 28136, 28905, 29678, 30454, 31233, 32015, 32801, 33590, 34382, 35176, 35974, 36775,
37579, 38386, 39195, 40008, 40823, 41641, 42461, 43284, 44110, 44938, 45769, 46603, 47439, 48277, 49118, 49961,
50807, 51655, 52505, 53357, 54212, 55069, 55929, 56790, 57654, 58520, 59388, 60258, 61130, 62005, 62881, 63759,
64640, 65522, 66407, 67293, 68182, 69072, 69964, 70858, 71754, 72652, 73552, 74453, 75357, 76262, 77169, 78078,
78988, 79900, 80814, 81730, 82648, 83567, 84488, 85410, 86334, 87260, 88188, 89117, 90047, 90980, 91914, 92849,
93786, 94725, 95665, 96607, 97550, 98495, 99441, 100389, 101338, 102289, 103241, 104195, 105150, 106107, 107065,
108024, 108985, 109948, 110911, 111877, 112843, 113811, 114780, 115751, 116723, 117696, 118671, 119647, 120624,
121603, 122583, 123564, 124547, 125531, 126516, 127503, 128490, 129479, 130470, 131461, 132454, 133448, 134443,
135440, 136438, 137437, 138437, 139438, 140441, 141444, 142449, 143455, 144463, 145471, 146481, 147492, 148503,
149517
];

View File

@@ -0,0 +1,27 @@
import type { RequestHandler } from "express";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { getInventory } from "../../services/inventoryService.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
export const forceRemoveItemController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "MiscItems");
const body = getJSONfromString<IForceRemoveItemRequest>(String(req.body));
const inventoryChanges: IInventoryChanges = {};
for (const item of body.items) {
const index = inventory.MiscItems.findIndex(x => x.ItemType == item);
if (index != -1) {
inventoryChanges.MiscItems ??= [];
inventoryChanges.MiscItems.push({ ItemType: item, ItemCount: inventory.MiscItems[index].ItemCount * -1 });
inventory.MiscItems.splice(index, 1);
}
}
await inventory.save();
res.json({ InventoryChanges: inventoryChanges });
};
interface IForceRemoveItemRequest {
items: string[];
}

View File

@@ -0,0 +1,44 @@
import type { RequestHandler } from "express";
import { ExportResources } from "warframe-public-export-plus";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { addFusionTreasures, addMiscItems, getInventory } from "../../services/inventoryService.ts";
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
import { parseFusionTreasure } from "../../helpers/inventoryHelpers.ts";
interface IFusionTreasureRequest {
oldTreasureName: string;
newTreasureName: string;
}
export const fusionTreasuresController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const request = JSON.parse(String(req.body)) as IFusionTreasureRequest;
// Swap treasures
const oldTreasure = parseFusionTreasure(request.oldTreasureName, -1);
const newTreasure = parseFusionTreasure(request.newTreasureName, 1);
const fusionTreasureChanges = [oldTreasure, newTreasure];
addFusionTreasures(inventory, fusionTreasureChanges);
// Remove consumed stars
const miscItemChanges: IMiscItem[] = [];
const filledSockets = newTreasure.Sockets & ~oldTreasure.Sockets;
for (let i = 0; filledSockets >> i; ++i) {
if ((filledSockets >> i) & 1) {
//console.log("Socket", i, "has been filled with", ExportResources[oldTreasure.ItemType].sockets![i]);
miscItemChanges.push({
ItemType: ExportResources[oldTreasure.ItemType].sockets![i],
ItemCount: -1
});
}
}
addMiscItems(inventory, miscItemChanges);
await inventory.save();
// The response itself is the inventory changes for this endpoint.
res.json({
MiscItems: miscItemChanges,
FusionTreasures: fusionTreasureChanges
});
};

View File

@@ -0,0 +1,83 @@
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { addMiscItem, getInventory } from "../../services/inventoryService.ts";
import { toStoreItem } from "../../services/itemDataService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { createGarden, getPersonalRooms } from "../../services/personalRoomsService.ts";
import type { IMongoDate } from "../../types/commonTypes.ts";
import type { IMissionReward } from "../../types/missionTypes.ts";
import type { IGardeningClient, IPersonalRoomsClient } from "../../types/personalRoomsTypes.ts";
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
import type { RequestHandler } from "express";
import { dict_en, ExportResources } from "warframe-public-export-plus";
export const gardeningController: RequestHandler = async (req, res) => {
const data = getJSONfromString<IGardeningRequest>(String(req.body));
if (data.Mode != "HarvestAll") {
throw new Error(`unexpected gardening mode: ${data.Mode}`);
}
const accountId = await getAccountIdForRequest(req);
const [inventory, personalRooms] = await Promise.all([
getInventory(accountId, "MiscItems"),
getPersonalRooms(accountId, "Apartment")
]);
// Harvest plants
const inventoryChanges: IInventoryChanges = {};
const rewards: Record<string, IMissionReward[][]> = {};
for (const planter of personalRooms.Apartment.Gardening.Planters) {
rewards[planter.Name] = [];
for (const plant of planter.Plants) {
const itemType =
"/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItem" +
plant.PlantType.substring(plant.PlantType.length - 1);
const itemCount = Math.random() < 0.775 ? 2 : 4;
addMiscItem(inventory, itemType, itemCount, inventoryChanges);
rewards[planter.Name].push([
{
StoreItem: toStoreItem(itemType),
TypeName: itemType,
ItemCount: itemCount,
DailyCooldown: false,
Rarity: itemCount == 2 ? 0.7743589743589744 : 0.22564102564102564,
TweetText: `${itemCount}x ${dict_en[ExportResources[itemType].name]} (Resource)`,
ProductCategory: "MiscItems"
}
]);
}
}
// Refresh garden
personalRooms.Apartment.Gardening = createGarden();
await Promise.all([inventory.save(), personalRooms.save()]);
const planter = personalRooms.Apartment.Gardening.Planters[personalRooms.Apartment.Gardening.Planters.length - 1];
const plant = planter.Plants[planter.Plants.length - 1];
res.json({
GardenTagName: planter.Name,
PlantType: plant.PlantType,
PlotIndex: plant.PlotIndex,
EndTime: toMongoDate(plant.EndTime),
InventoryChanges: inventoryChanges,
Gardening: personalRooms.toJSON<IPersonalRoomsClient>().Apartment.Gardening,
Rewards: rewards
} satisfies IGardeningResponse);
};
interface IGardeningRequest {
Mode: string;
}
interface IGardeningResponse {
GardenTagName: string;
PlantType: string;
PlotIndex: number;
EndTime: IMongoDate;
InventoryChanges: IInventoryChanges;
Gardening: IGardeningClient;
Rewards: Record<string, IMissionReward[][]>;
}

View File

@@ -1,16 +1,15 @@
import { getAccountIdForRequest } from "@/src/services/loginService";
import { updateGeneric } from "@/src/services/inventoryService";
import { RequestHandler } from "express";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { IGenericUpdate } from "@/src/types/genericUpdate";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { updateGeneric } from "../../services/inventoryService.ts";
import type { RequestHandler } from "express";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import type { IGenericUpdate } from "../../types/genericUpdate.ts";
// This endpoint used to be /api/genericUpdate.php, but sometime around the Jade Shadows update, it was changed to /api/updateNodeIntros.php.
// SpaceNinjaServer supports both endpoints right now.
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const genericUpdateController: RequestHandler = async (request, response) => {
const accountId = await getAccountIdForRequest(request);
const update = getJSONfromString(String(request.body)) as IGenericUpdate;
const update = getJSONfromString<IGenericUpdate>(String(request.body));
response.json(await updateGeneric(update, accountId));
};

View File

@@ -1,7 +1,26 @@
import { RequestHandler } from "express";
import { Alliance, Guild } from "../../models/guildModel.ts";
import { getAllianceClient } from "../../services/guildService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
const getAllianceController: RequestHandler = (_req, res) => {
res.sendStatus(200);
export const getAllianceController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId");
if (inventory.GuildId) {
const guild = (await Guild.findById(inventory.GuildId, "Name Tier AllianceId"))!;
if (guild.AllianceId) {
const alliance = (await Alliance.findById(guild.AllianceId))!;
res.json(await getAllianceClient(alliance, guild));
return;
}
}
res.end();
};
export { getAllianceController };
// POST request since U27
/*interface IGetAllianceRequest {
memberCount: number;
clanLeaderName: string;
clanLeaderId: string;
}*/

View File

@@ -1,33 +0,0 @@
import { RequestHandler } from "express";
import { config } from "@/src/services/configService";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getInventory } from "@/src/services/inventoryService";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const getCreditsController: RequestHandler = async (req, res) => {
let accountId;
try {
accountId = await getAccountIdForRequest(req);
} catch (e) {
res.status(400).send("Log-in expired");
return;
}
if (config.infiniteResources) {
res.json({
RegularCredits: 999999999,
TradesRemaining: 999999999,
PremiumCreditsFree: 999999999,
PremiumCredits: 999999999
});
return;
}
const inventory = await getInventory(accountId);
res.json({
RegularCredits: inventory.RegularCredits,
TradesRemaining: inventory.TradesRemaining,
PremiumCreditsFree: inventory.PremiumCreditsFree,
PremiumCredits: inventory.PremiumCredits
});
};

View File

@@ -1,8 +1,10 @@
import { RequestHandler } from "express";
import { DailyDeal } from "../../models/worldStateModel.ts";
import type { RequestHandler } from "express";
export const getDailyDealStockLevelsController: RequestHandler = (req, res) => {
export const getDailyDealStockLevelsController: RequestHandler = async (req, res) => {
const dailyDeal = (await DailyDeal.findOne({ StoreItem: req.query.productName }, "AmountSold"))!;
res.json({
StoreItem: req.query.productName,
AmountSold: 0
AmountSold: dailyDeal.AmountSold
});
};

View File

@@ -1,14 +1,55 @@
import { Request, Response } from "express";
import { toOid2 } from "../../helpers/inventoryHelpers.ts";
import { Friendship } from "../../models/friendModel.ts";
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "../../services/friendService.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import type { IFriendInfo } from "../../types/friendTypes.ts";
import type { Request, RequestHandler, Response } from "express";
const getFriendsController = (_request: Request, response: Response) => {
response.writeHead(200, {
//Connection: "keep-alive",
//"Content-Encoding": "gzip",
"Content-Type": "text/html",
// charset: "UTF - 8",
"Content-Length": "3"
});
response.end(Buffer.from([0x7b, 0x7d, 0x0a]));
// POST with {} instead of GET as of 38.5.0
export const getFriendsController: RequestHandler = async (req: Request, res: Response) => {
const account = await getAccountForRequest(req);
const accountId = account._id.toString();
const response: IGetFriendsResponse = {
Current: [],
IncomingFriendRequests: [],
OutgoingFriendRequests: []
};
const [internalFriendships, externalFriendships] = await Promise.all([
Friendship.find({ owner: accountId }),
Friendship.find({ friend: accountId }, "owner Note")
]);
for (const externalFriendship of externalFriendships) {
if (!internalFriendships.find(x => x.friend.equals(externalFriendship.owner))) {
response.IncomingFriendRequests.push({
_id: toOid2(externalFriendship.owner, account.BuildLabel),
Note: externalFriendship.Note
});
}
}
for (const internalFriendship of internalFriendships) {
const friendInfo: IFriendInfo = {
_id: toOid2(internalFriendship.friend, account.BuildLabel)
};
if (externalFriendships.find(x => x.owner.equals(internalFriendship.friend))) {
response.Current.push(friendInfo);
} else {
response.OutgoingFriendRequests.push(friendInfo);
}
}
const promises: Promise<void>[] = [];
for (const arr of Object.values(response)) {
for (const friendInfo of arr) {
promises.push(addAccountDataToFriendInfo(friendInfo));
promises.push(addInventoryDataToFriendInfo(friendInfo));
}
}
await Promise.all(promises);
res.json(response);
};
export { getFriendsController };
// interface IGetFriendsResponse {
// Current: IFriendInfo[];
// IncomingFriendRequests: IFriendInfo[];
// OutgoingFriendRequests: IFriendInfo[];
// }
type IGetFriendsResponse = Record<"Current" | "IncomingFriendRequests" | "OutgoingFriendRequests", IFriendInfo[]>;

View File

@@ -0,0 +1,19 @@
import { GuildMember } from "../../models/guildModel.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IGuildMemberClient } from "../../types/guildTypes.ts";
import type { RequestHandler } from "express";
export const getGuildContributionsController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const guildId = (await getInventory(accountId, "GuildId")).GuildId;
const guildMember = (await GuildMember.findOne({ guildId, accountId: req.query.buddyId }))!;
res.json({
_id: { $oid: req.query.buddyId as string },
RegularCreditsContributed: guildMember.RegularCreditsContributed,
PremiumCreditsContributed: guildMember.PremiumCreditsContributed,
MiscItemsContributed: guildMember.MiscItemsContributed,
ConsumablesContributed: [], // ???
ShipDecorationsContributed: guildMember.ShipDecorationsContributed
} satisfies Partial<IGuildMemberClient>);
};

View File

@@ -1,74 +1,32 @@
import { RequestHandler } from "express";
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import { Guild } from "@/src/models/guildModel";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { toOid } from "@/src/helpers/inventoryHelpers";
import type { RequestHandler } from "express";
import { Guild } from "../../models/guildModel.ts";
import { getAccountForRequest } from "../../services/loginService.ts";
import { logger } from "../../utils/logger.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { createUniqueClanName, getGuildClient } from "../../services/guildService.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const getGuildController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await Inventory.findOne({ accountOwnerId: accountId });
if (!inventory) {
res.status(400).json({ error: "inventory was undefined" });
return;
}
export const getGuildController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const inventory = await getInventory(account._id.toString(), "GuildId");
if (inventory.GuildId) {
const guild = await Guild.findOne({ _id: inventory.GuildId });
const guild = await Guild.findById(inventory.GuildId);
if (guild) {
res.json({
_id: toOid(guild._id),
Name: guild.Name,
Members: [
{
_id: { $oid: req.query.accountId },
Rank: 0,
Status: 0
}
],
Ranks: [
{
Name: "/Lotus/Language/Game/Rank_Creator",
Permissions: 16351
},
{
Name: "/Lotus/Language/Game/Rank_Warlord",
Permissions: 14303
},
{
Name: "/Lotus/Language/Game/Rank_General",
Permissions: 4318
},
{
Name: "/Lotus/Language/Game/Rank_Officer",
Permissions: 4314
},
{
Name: "/Lotus/Language/Game/Rank_Leader",
Permissions: 4106
},
{
Name: "/Lotus/Language/Game/Rank_Sage",
Permissions: 4304
},
{
Name: "/Lotus/Language/Game/Rank_Soldier",
Permissions: 4098
},
{
Name: "/Lotus/Language/Game/Rank_Initiate",
Permissions: 4096
},
{
Name: "/Lotus/Language/Game/Rank_Utility",
Permissions: 4096
}
],
Tier: 1
});
// Handle guilds created before we added discriminators
if (guild.Name.indexOf("#") == -1) {
guild.Name = await createUniqueClanName(guild.Name);
await guild.save();
}
if (guild.CeremonyResetDate && Date.now() >= guild.CeremonyResetDate.getTime()) {
logger.debug(`ascension ceremony is over`);
guild.CeremonyEndo = undefined;
guild.CeremonyContributors = undefined;
guild.CeremonyResetDate = undefined;
await guild.save();
}
res.json(await getGuildClient(guild, account));
return;
}
}
res.json({});
res.end();
};
export { getGuildController };

View File

@@ -1,60 +1,35 @@
import { RequestHandler } from "express";
import type { RequestHandler } from "express";
import { Types } from "mongoose";
import { Guild } from "@/src/models/guildModel";
import { IDojoClient, IDojoComponentClient } from "@/src/types/guildTypes";
import { toOid, toMongoDate } from "@/src/helpers/inventoryHelpers";
import { Guild } from "../../models/guildModel.ts";
import { getDojoClient } from "../../services/guildService.ts";
import { Account } from "../../models/loginModel.ts";
// eslint-disable-next-line @typescript-eslint/no-misused-promises
export const getGuildDojoController: RequestHandler = async (req, res) => {
const guildId = req.query.guildId as string;
const guild = await Guild.findOne({ _id: guildId });
const guild = await Guild.findById(guildId);
if (!guild) {
res.status(404).end();
return;
}
// Populate dojo info if not present
if (!guild.DojoComponents || guild.DojoComponents.length == 0) {
guild.DojoComponents = [
{
_id: new Types.ObjectId(),
pf: "/Lotus/Levels/ClanDojo/DojoHall.level",
ppf: "",
CompletionTime: new Date(Date.now())
}
];
if (guild.DojoComponents.length == 0) {
guild.DojoComponents.push({
_id: new Types.ObjectId(),
pf: "/Lotus/Levels/ClanDojo/DojoHall.level",
ppf: "",
CompletionTime: new Date(Date.now() - 1000),
DecoCapacity: 600
});
await guild.save();
}
const dojo: IDojoClient = {
_id: { $oid: guildId },
Name: guild.Name,
Tier: 1,
FixedContributions: true,
DojoRevision: 1,
RevisionTime: Math.round(Date.now() / 1000),
Energy: 5,
Capacity: 100,
DojoRequestStatus: 0,
DojoComponents: []
};
guild.DojoComponents.forEach(dojoComponent => {
const clientComponent: IDojoComponentClient = {
id: toOid(dojoComponent._id),
pf: dojoComponent.pf,
ppf: dojoComponent.ppf,
DecoCapacity: 600
};
if (dojoComponent.pi) {
clientComponent.pi = toOid(dojoComponent.pi);
clientComponent.op = dojoComponent.op!;
clientComponent.pp = dojoComponent.pp!;
}
if (dojoComponent.CompletionTime) {
clientComponent.CompletionTime = toMongoDate(dojoComponent.CompletionTime);
}
dojo.DojoComponents.push(clientComponent);
});
res.json(dojo);
const payload: IGetGuildDojoRequest = req.body ? (JSON.parse(String(req.body)) as IGetGuildDojoRequest) : {};
const account = await Account.findById(req.query.accountId as string);
res.json(await getDojoClient(guild, 0, payload.ComponentId, account?.BuildLabel));
};
interface IGetGuildDojoRequest {
ComponentId?: string;
}

View File

@@ -0,0 +1,26 @@
import type { RequestHandler } from "express";
import { getAccountForRequest } from "../../services/loginService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { Guild } from "../../models/guildModel.ts";
export const getGuildEventScoreController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const inventory = await getInventory(account._id.toString(), "GuildId");
const guild = await Guild.findById(inventory.GuildId);
const goalId = req.query.goalId as string;
if (guild && guild.GoalProgress && goalId) {
const goal = guild.GoalProgress.find(x => x.goalId.toString() == goalId);
if (goal) {
res.json({
Tier: guild.Tier,
GoalProgress: {
Count: goal.Count,
Tag: goal.Tag,
_id: { $oid: goal.goalId }
}
});
return;
}
}
res.json({});
};

View File

@@ -1,11 +1,60 @@
import { RequestHandler } from "express";
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
import { Guild } from "../../models/guildModel.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IMongoDate } from "../../types/commonTypes.ts";
import type { RequestHandler } from "express";
export const getGuildLogController: RequestHandler = (_req, res) => {
res.json({
RoomChanges: [],
TechChanges: [],
RosterActivity: [],
StandingsUpdates: [],
ClassChanges: []
});
export const getGuildLogController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "GuildId");
if (inventory.GuildId) {
const guild = await Guild.findById(inventory.GuildId);
if (guild) {
const log: Record<string, IGuildLogEntryClient[]> = {
RoomChanges: [],
TechChanges: [],
RosterActivity: [],
StandingsUpdates: [],
ClassChanges: []
};
guild.RoomChanges?.forEach(entry => {
log.RoomChanges.push({
dateTime: toMongoDate(entry.dateTime ?? new Date()),
entryType: entry.entryType,
details: entry.details
});
});
guild.TechChanges?.forEach(entry => {
log.TechChanges.push({
dateTime: toMongoDate(entry.dateTime ?? new Date()),
entryType: entry.entryType,
details: entry.details
});
});
guild.RosterActivity?.forEach(entry => {
log.RosterActivity.push({
dateTime: toMongoDate(entry.dateTime),
entryType: entry.entryType,
details: entry.details
});
});
guild.ClassChanges?.forEach(entry => {
log.ClassChanges.push({
dateTime: toMongoDate(entry.dateTime),
entryType: entry.entryType,
details: entry.details
});
});
res.json(log);
return;
}
}
res.sendStatus(200);
};
interface IGuildLogEntryClient {
dateTime: IMongoDate;
entryType: number;
details: number | string;
}

View File

@@ -1,16 +1,20 @@
import { RequestHandler } from "express";
import { toOid } from "../../helpers/inventoryHelpers.ts";
import { Account, Ignore } from "../../models/loginModel.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { IFriendInfo } from "../../types/friendTypes.ts";
import { parallelForeach } from "../../utils/async-utils.ts";
import type { RequestHandler } from "express";
const getIgnoredUsersController: RequestHandler = (_req, res) => {
res.writeHead(200, {
"Content-Type": "text/html",
"Content-Length": "3"
export const getIgnoredUsersController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const ignores = await Ignore.find({ ignorer: accountId });
const ignoredUsers: IFriendInfo[] = [];
await parallelForeach(ignores, async ignore => {
const ignoreeAccount = (await Account.findById(ignore.ignoree, "DisplayName"))!;
ignoredUsers.push({
_id: toOid(ignore.ignoree),
DisplayName: ignoreeAccount.DisplayName + ""
});
});
res.end(
Buffer.from([
0x7b, 0x22, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x38, 0x33, 0x30, 0x34, 0x30, 0x37, 0x37, 0x32, 0x32,
0x34, 0x30, 0x32, 0x32, 0x32, 0x36, 0x31, 0x35, 0x30, 0x31, 0x7d
])
);
res.json({ IgnoredUsers: ignoredUsers });
};
export { getIgnoredUsersController };

View File

@@ -1,13 +1,19 @@
import { RequestHandler } from "express";
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { generateRewardSeed } from "../../services/rngService.ts";
import type { RequestHandler } from "express";
const getNewRewardSeedController: RequestHandler = (_req, res) => {
res.json({ rewardSeed: generateRewardSeed() });
export const getNewRewardSeedController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const rewardSeed = generateRewardSeed();
await Inventory.updateOne(
{
accountOwnerId: accountId
},
{
RewardSeed: rewardSeed
}
);
res.json({ rewardSeed: rewardSeed });
};
function generateRewardSeed(): number {
const min = -Number.MAX_SAFE_INTEGER;
const max = Number.MAX_SAFE_INTEGER;
return Math.floor(Math.random() * (max - min + 1)) + min;
}
export { getNewRewardSeedController };

Some files were not shown because too many files have changed in this diff Show More