From 21db6ce265c01f694168d4cd93ee0134c91e3062 Mon Sep 17 00:00:00 2001 From: LoseFace Date: Sun, 5 Oct 2025 23:24:14 -0700 Subject: [PATCH 1/7] chore(webui): update uk & ru (#2844) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2844 Co-authored-by: LoseFace Co-committed-by: LoseFace --- static/webui/translations/ru.js | 20 ++++++++++---------- static/webui/translations/uk.js | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index bdabbfb7..4de12099 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -1,6 +1,6 @@ // Russian translation by AMelonInsideLemon, LoseFace dict = { - general_inventoryUpdateNote: `Примечание: Чтобы увидеть изменения в игре, вам нужно повторно синхронизировать свой инвентарь, например, используя команду /sync в программе bootstrapper, посетив Додзё/Реле или перезагрузив игру.`, + general_inventoryUpdateNote: `Примечание: Чтобы увидеть изменения в игре, вам нужно повторно синхронизировать свой инвентарь, например, используя команду загрузчика /sync в чате игры, посетив Додзё/Реле или перезагрузив игру.`, general_inventoryUpdateNoteGameWs: `Примечание: для того, чтобы изменения вступили в силу, может потребоваться повторно открыть меню, в котором вы находитесь.`, general_addButton: `Добавить`, general_setButton: `Установить`, @@ -45,7 +45,7 @@ dict = { code_rank: `Ранг`, code_rankUp: `Повысить ранг`, code_rankDown: `Понизить ранг`, - code_unlockLevelCap: `[UNTRANSLATED] Unlock level cap`, + code_unlockLevelCap: `Разблокировать ограничение уровня`, code_count: `Количество`, code_focusAllUnlocked: `Все школы Фокуса уже разблокированы.`, code_focusUnlocked: `Разблокировано |COUNT| новых школ Фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`, @@ -227,7 +227,7 @@ dict = { cheats_baroFullyStocked: `Баро полностью укомплектован`, cheats_syndicateMissionsRepeatable: `Повторять миссии синдиката`, cheats_unlockAllProfitTakerStages: `Разблокировать все этапы Сферы извлечения прибыли`, - cheats_unlockSuccInventory: `Успех. Обратите внимание, что вам необходимо будет повторно синхронизировать свой инвентарь, например, с помощью команды /sync в программе bootstrapper, посетив Додзё/Реле или повторно войдя в игру.`, + cheats_unlockSuccInventory: `Успех. Обратите внимание, что вам необходимо будет повторно синхронизировать свой инвентарь, например, с помощью команды загрузчика /sync в чате игры, посетив Додзё/Реле или повторно войдя в игру.`, cheats_instantFinishRivenChallenge: `Мгновенное завершение испытания мода Разлома`, cheats_instantResourceExtractorDrones: `Мгновенно добывающие Дроны-сборщики`, cheats_noResourceExtractorDronesDamage: `Без урона по Дронам-сборщикам`, @@ -257,12 +257,12 @@ dict = { cheats_changeButton: `Изменить`, cheats_markAllAsRead: `Пометить все входящие как прочитанные`, cheats_finishInvasionsInOneMission: `Завершать вторжение за одну миссию`, - cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`, - cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`, - cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`, - cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`, - cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`, - cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, + cheats_nemesisHenchmenKillsMultiplierGrineer: `Мультипликатор прогресса ярости (Гринир)`, + cheats_nemesisHenchmenKillsMultiplierCorpus: `Мультипликатор прогресса ярости (Корпус)`, + cheats_nemesisAntivirusGainMultiplier: `Мультипликатор прогресса антивируса`, + cheats_nemesisHintProgressMultiplierGrineer: `Мультипликатор прогресса подсказки (Гринир)`, + cheats_nemesisHintProgressMultiplierCorpus: `Мультипликатор прогресса подсказки (Корпус)`, + cheats_nemesisExtraWeapon: `Дополнительное оружие/активный Кардиомиоцит за победу над Противником (0 для отключения)`, worldState: `Состояние мира`, worldState_creditBoost: `Глобальный бустер Кредитов`, @@ -284,7 +284,7 @@ dict = { worldState_hallowedFlame: `Священное пламя`, worldState_hallowedNightmares: `Священные кошмары`, worldState_hallowedNightmaresRewards: `Награды Священных кошмаров`, - worldState_naberusNights: `[UNTRANSLATED] Nights of Naberus`, + worldState_naberusNights: `Ночи Наберуса`, worldState_proxyRebellion: `Восстание роботов`, worldState_proxyRebellionRewards: `Награды Восстания роботов`, worldState_bellyOfTheBeast: `Чрево зверя`, diff --git a/static/webui/translations/uk.js b/static/webui/translations/uk.js index 7f5e38d9..dcfdc95c 100644 --- a/static/webui/translations/uk.js +++ b/static/webui/translations/uk.js @@ -1,6 +1,6 @@ // Ukrainian translation by LoseFace dict = { - general_inventoryUpdateNote: `Пам'ятка: Щоб побачити зміни в грі, вам потрібно повторно синхронізувати своє спорядження, наприклад, використовуючи команду /sync в програмі bootstrapper, відвідавши Доджьо/Реле або перезавантаживши гру.`, + general_inventoryUpdateNote: `Пам'ятка: Щоб побачити зміни в грі, вам потрібно повторно синхронізувати своє спорядження, наприклад, використовуючи команду завантажувача /sync у чаті гри, відвідавши Доджьо/Реле або перезавантаживши гру.`, general_inventoryUpdateNoteGameWs: `Примітка: для відображення змін може знадобитися повторно відкрити меню, в якому ви перебуваєте.`, general_addButton: `Добавити`, general_setButton: `Встановити`, @@ -45,7 +45,7 @@ dict = { code_rank: `Рівень`, code_rankUp: `Підвищити рівень`, code_rankDown: `Понизити рівень`, - code_unlockLevelCap: `[UNTRANSLATED] Unlock level cap`, + code_unlockLevelCap: `Розблокувати обмеження рівня`, code_count: `Кількість`, code_focusAllUnlocked: `Всі школи Фокусу вже розблоковані.`, code_focusUnlocked: `Розблоковано |COUNT| нових шкіл Фокусу! Для відображення змін в грі знадобиться оновлення спорядження. Відвідування навігації — найпростіший спосіб цього досягти.`, @@ -227,7 +227,7 @@ dict = { cheats_baroFullyStocked: `Баро повністю укомплектований`, cheats_syndicateMissionsRepeatable: `Повторювати місії синдиката`, cheats_unlockAllProfitTakerStages: `Розблокувати всі етапи Привласнювачки`, - cheats_unlockSuccInventory: `Успішно. Зверніть увагу, що вам потрібно буде повторно синхронізувати своє спорядження, наприклад, за допомогою команди /sync в програмі bootstrapper, відвідавши Доджьо/Реле або повторно увійшовши в гру.`, + cheats_unlockSuccInventory: `Успішно. Зверніть увагу, що вам потрібно буде повторно синхронізувати своє спорядження, наприклад, за допомогою команди завантажувача /sync у чаті гри, відвідавши Доджьо/Реле або повторно увійшовши в гру.`, cheats_instantFinishRivenChallenge: `Миттєве завершення випробування модифікатора Розколу`, cheats_instantResourceExtractorDrones: `Миттєво добуваючі Дрони-видобувачі`, cheats_noResourceExtractorDronesDamage: `Без шкоди по Дронам-видобувачам`, @@ -257,12 +257,12 @@ dict = { cheats_changeButton: `Змінити`, cheats_markAllAsRead: `Помітити всі вхідні як прочитані`, cheats_finishInvasionsInOneMission: `Завершувати вторгнення за одну місію`, - cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`, - cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`, - cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`, - cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`, - cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`, - cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, + cheats_nemesisHenchmenKillsMultiplierGrineer: `Множник прогресу люті (Ґрінери)`, + cheats_nemesisHenchmenKillsMultiplierCorpus: `Множник прогресу люті (Корпус)`, + cheats_nemesisAntivirusGainMultiplier: `Мультиплікатор прогресу антивіруса`, + cheats_nemesisHintProgressMultiplierGrineer: `Множник прогресу підсказки (Ґрінери)`, + cheats_nemesisHintProgressMultiplierCorpus: `Множник прогресу підсказки (Корпус)`, + cheats_nemesisExtraWeapon: `Додаткова зброя/Жива сердцевина за перемогу над Недругом (0 для вимкнення)`, worldState: `Стан світу`, worldState_creditBoost: `Глобальне посилення Кредитів`, @@ -284,7 +284,7 @@ dict = { worldState_hallowedFlame: `Священне полум'я`, worldState_hallowedNightmares: `Священні жахіття`, worldState_hallowedNightmaresRewards: `Нагороди Священних жахіть`, - worldState_naberusNights: `[UNTRANSLATED] Nights of Naberus`, + worldState_naberusNights: `Наберові ночі`, worldState_proxyRebellion: `Повстання роботів`, worldState_proxyRebellionRewards: `Нагороди Повстання роботів`, worldState_bellyOfTheBeast: `У лігві звіра`, From 230ee5f638451c47f477b261b7824263aaaec284 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:24:28 -0700 Subject: [PATCH 2/7] fix: anniversary mission inbox messages showing unresolved |LOTUS_NAME| (#2845) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2845 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/missionInventoryUpdateService.ts | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index a99784e9..dfb6c815 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -2483,95 +2483,95 @@ const goalMessagesByKey: Record Date: Sun, 5 Oct 2025 23:24:38 -0700 Subject: [PATCH 3/7] fix: default quest progress c to -1 (#2848) Fixes #2846 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2848 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/questService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/questService.ts b/src/services/questService.ts index 02bf81b7..30866b6b 100644 --- a/src/services/questService.ts +++ b/src/services/questService.ts @@ -74,7 +74,7 @@ export const updateQuestStage = ( if (!questStage) { const questStageIndex = quest.Progress.push({ - c: questStageUpdate.c ?? 0, + c: questStageUpdate.c ?? -1, i: questStageUpdate.i ?? false, m: questStageUpdate.m ?? false, b: questStageUpdate.b ?? [] From 09065bdb4e1cf0e1cc48812fe67e60985e63f1e2 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:24:49 -0700 Subject: [PATCH 4/7] chore: let webui know when client called updateQuest (#2849) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2849 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/updateQuestController.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/controllers/api/updateQuestController.ts b/src/controllers/api/updateQuestController.ts index 0ca4d857..5bae315a 100644 --- a/src/controllers/api/updateQuestController.ts +++ b/src/controllers/api/updateQuestController.ts @@ -5,6 +5,7 @@ import type { IUpdateQuestRequest } from "../../services/questService.ts"; import { updateQuestKey } from "../../services/questService.ts"; import { getInventory } from "../../services/inventoryService.ts"; import type { IInventoryChanges } from "../../types/purchaseTypes.ts"; +import { sendWsBroadcastTo } from "../../services/wsService.ts"; export const updateQuestController: RequestHandler = async (req, res) => { const accountId = parseString(req.query.accountId); @@ -29,4 +30,5 @@ export const updateQuestController: RequestHandler = async (req, res) => { await inventory.save(); res.send(updateQuestResponse); + sendWsBroadcastTo(accountId, { update_inventory: true }); }; From 9da47c406a98288cf56c2cc5b7b7baf83f560961 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:24:59 -0700 Subject: [PATCH 5/7] fix: put CompletionTime of initial clan hall in the past (#2850) For old versions, TimeRemaining of 0 would cause this to show in yellow, we need it to be negative. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2850 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/getGuildDojoController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/api/getGuildDojoController.ts b/src/controllers/api/getGuildDojoController.ts index 05d4685c..e9af4170 100644 --- a/src/controllers/api/getGuildDojoController.ts +++ b/src/controllers/api/getGuildDojoController.ts @@ -19,7 +19,7 @@ export const getGuildDojoController: RequestHandler = async (req, res) => { _id: new Types.ObjectId(), pf: "/Lotus/Levels/ClanDojo/DojoHall.level", ppf: "", - CompletionTime: new Date(Date.now()), + CompletionTime: new Date(Date.now() - 1000), DecoCapacity: 600 }); await guild.save(); From b14a5925df8a3b7282959016e4bdfcbdc20aba32 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 5 Oct 2025 23:25:08 -0700 Subject: [PATCH 6/7] fix: setGuildMotd response for U29.3.1 (#2851) Unsure which version introduced long descriptions exactly, but it surely wasn't this one. :^) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2851 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/setGuildMotdController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/api/setGuildMotdController.ts b/src/controllers/api/setGuildMotdController.ts index 8007bab0..96c77148 100644 --- a/src/controllers/api/setGuildMotdController.ts +++ b/src/controllers/api/setGuildMotdController.ts @@ -57,7 +57,7 @@ export const setGuildMotdController: RequestHandler = async (req, res) => { await guild.save(); } - if (!account.BuildLabel || version_compare(account.BuildLabel, "2020.03.24.20.24") > 0) { + if (!account.BuildLabel || version_compare(account.BuildLabel, "2020.11.04.18.58") > 0) { res.json({ IsLongMOTD, MOTD }); } else { res.send(MOTD).end(); From 66d3057d40fe5cc3566cdee80a197ed0602562cd Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 6 Oct 2025 08:33:44 +0200 Subject: [PATCH 7/7] chore: fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index deee20bf..d5b18647 100644 --- a/README.md +++ b/README.md @@ -35,5 +35,5 @@ SpaceNinjaServer requires a `config.json`. To set it up, you can copy the [confi - `RadioLegion2Syndicate` for The Emissary - `RadioLegionIntermissionSyndicate` for Intermission I - `RadioLegionSyndicate` for The Wolf of Saturn Six -- `allTheFissures` can be set to `normal` or `hard` to enable all fissures either in normal or steel path, respectively. +- `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`.