From 369794dcdb4a7cb2d3c2414d0800c38e14d831ad Mon Sep 17 00:00:00 2001 From: BanLanGen Date: Mon, 18 Aug 2025 09:31:51 -0700 Subject: [PATCH 1/6] chore(webui): update zh (#2668) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2668 Co-authored-by: BanLanGen Co-committed-by: BanLanGen --- static/webui/translations/zh.js | 82 ++++++++++++++++----------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index 98357ff7..0e039aee 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -1,17 +1,17 @@ // Chinese translation by meb154, bishan178, nyaoouo, qianlishun, CrazyZhang, Corvus, & qingchun dict = { - general_inventoryUpdateNote: `注意: 要在游戏中查看更改,您需要重新同步库存,例如使用客户端的 /sync 命令,访问道场/中继站或重新登录。`, + general_inventoryUpdateNote: `注意: 要在游戏中查看更改,您需要重新同步库存,例如使用客户端的 /sync 命令,访问道场/中继站或重新登录.`, general_addButton: `添加`, general_setButton: `设置`, general_none: `无`, general_bulkActions: `批量操作`, general_loading: `加载中...`, - code_loginFail: `登录失败。请检查邮箱和密码。`, - code_regFail: `注册失败。账号是否已存在?`, + code_loginFail: `登录失败.请检查邮箱和密码.`, + code_regFail: `注册失败.账号是否已存在?`, code_changeNameConfirm: `您想将账户名称更改为?`, - code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`, - code_deleteAccountConfirm: `确定要删除您的账户 |DISPLAYNAME|(|EMAIL|) 吗?此操作不可撤销。`, + code_changeNameRetry: `|NAME| 已存在相同昵称.`, + code_deleteAccountConfirm: `确定要删除您的账户 |DISPLAYNAME|(|EMAIL|) 吗?此操作不可撤销.`, code_archgun: `空战`, code_melee: `近战`, code_pistol: `手枪`, @@ -25,10 +25,10 @@ dict = { code_legendaryCore: `传奇核心`, code_traumaticPeculiar: `创伤怪奇`, code_starter: `|MOD| (有瑕疵的)`, - code_badItem: `(Imposter)`, + code_badItem: `(正式服中隐藏)`, code_maxRank: `满级`, code_rename: `重命名`, - code_renamePrompt: `输入新的自定义名称:`, + code_renamePrompt: `输入新的自定义名称:`, code_remove: `移除`, code_addItemsConfirm: `确定要向您的账户添加 |COUNT| 件物品吗?`, code_succRankUp: `等级已提升`, @@ -44,11 +44,11 @@ dict = { code_rankDown: `等级下降`, code_count: `数量`, code_focusAllUnlocked: `所有专精学派均已解锁`, - code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新。`, + code_focusUnlocked: `已解锁 |COUNT| 个新专精学派!需要游戏内仓库更新才能生效,您可以通过访问星图来触发仓库更新.`, code_addModsConfirm: `确定要向您的账户添加 |COUNT| 张MOD吗?`, code_succImport: `导入成功`, - code_succRelog: `完成。需要重新登录游戏才能看到变化。`, - code_nothingToDo: `完成。没有可执行的操作。`, + code_succRelog: `完成.需要重新登录游戏才能看到变化.`, + code_nothingToDo: `完成.没有可执行的操作.`, code_gild: `镀金`, code_moa: `恐鸟`, code_zanuka: `猎犬`, @@ -64,7 +64,7 @@ dict = { code_mature: `成长并战备`, code_unmature: `逆转衰老基因`, code_succChange: `更改成功`, - code_requiredInvigorationUpgrade: `您必须同时选择一个进攻型和一个功能型活化属性。`, + code_requiredInvigorationUpgrade: `您必须同时选择一个进攻型和一个功能型活化属性.`, login_description: `使用您的 OpenWF 账户凭证登录(与游戏内连接本服务器时使用的昵称相同)`, login_emailLabel: `电子邮箱`, login_passwordLabel: `密码`, @@ -75,7 +75,7 @@ dict = { navbar_deleteAccount: `删除账户`, navbar_inventory: `仓库`, navbar_mods: `Mods`, - navbar_quests: `任务`, + navbar_quests: `系列任务`, navbar_cheats: `作弊选项`, navbar_import: `导入`, inventory_addItems: `添加物品`, @@ -101,17 +101,17 @@ dict = { inventory_bulkAddSpaceWeapons: `添加缺失载具武器`, inventory_bulkAddSentinels: `添加缺失守护`, inventory_bulkAddSentinelWeapons: `添加缺失守护武器`, - inventory_bulkAddEvolutionProgress: `添加缺失的灵化之源`, + inventory_bulkAddEvolutionProgress: `添加缺失的灵化之源进度`, inventory_bulkRankUpSuits: `所有战甲升满级`, inventory_bulkRankUpWeapons: `所有武器升满级`, inventory_bulkRankUpSpaceSuits: `所有载具升满级`, inventory_bulkRankUpSpaceWeapons: `所有载具武器升满级`, inventory_bulkRankUpSentinels: `所有守护升满级`, inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`, - inventory_bulkRankUpEvolutionProgress: `所有灵化之源最大等级`, + inventory_bulkRankUpEvolutionProgress: `所有灵化之源进度最大等级`, inventory_maxPlexus: `最大深控等级`, - quests_list: `任务`, + quests_list: `系列任务`, quests_completeAll: `完成所有任务`, quests_resetAll: `重置所有任务`, quests_giveAll: `授予所有任务`, @@ -124,9 +124,9 @@ dict = { detailedView_archonShardsLabel: `执刑官源力石槽位`, detailedView_archonShardsDescription: `您可以使用这些无限插槽应用各种强化效果`, - detailedView_archonShardsDescription2: `请注意,在加载时,每个执政官源力石都需要一定的时间来生效。`, + detailedView_archonShardsDescription2: `请注意,在加载时,每个执政官源力石都需要一定的时间来生效.`, detailedView_valenceBonusLabel: `效价加成`, - detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成。`, + detailedView_valenceBonusDescription: `您可以设置或移除武器上的效价加成.`, detailedView_modularPartsLabel: `更换部件`, detailedView_suitInvigorationLabel: `编辑战甲活化属性`, detailedView_loadoutLabel: `配置`, @@ -148,10 +148,10 @@ dict = { invigorations_utility_EnergyMax: `+200%最大能量`, invigorations_utility_StatusImmune: `异常状态免疫`, invigorations_utility_ReloadSpeed: `+75%装填速度`, - invigorations_utility_HealthRegen: `+25/秒生命再生`, + invigorations_utility_HealthRegen: `+25/秒生命恢复`, invigorations_utility_ArmorMax: `+1000护甲值`, invigorations_utility_Jumps: `+5跳跃次数`, - invigorations_utility_EnergyRegen: `+2/秒能量再生`, + invigorations_utility_EnergyRegen: `+2/秒能量恢复`, invigorations_offensiveLabel: `进攻型属性`, invigorations_defensiveLabel: `功能型属性`, @@ -169,13 +169,13 @@ dict = { mods_addMissingUnrankedMods: `添加所有缺失的Mods`, mods_removeUnranked: `删除所有未升级的Mods`, mods_addMissingMaxRankMods: `添加所有缺失的满级Mods`, - cheats_administratorRequirement: `您必须是管理员才能使用此功能。要成为管理员,请在 config.json 中将 |DISPLAYNAME| 添加到 administratorNames`, + cheats_administratorRequirement: `您必须是管理员才能使用此功能.要成为管理员,请在 config.json 中将 |DISPLAYNAME| 添加到 administratorNames`, cheats_server: `服务器`, cheats_skipTutorial: `跳过教程`, cheats_skipAllDialogue: `跳过所有对话`, cheats_unlockAllScans: `解锁所有扫描`, cheats_unlockAllMissions: `解锁所有星图`, - cheats_unlockAllMissions_ok: `操作成功。请注意,您需要进入道场/中继站或重新登录以刷新星图数据。`, + cheats_unlockAllMissions_ok: `操作成功.请注意,您需要进入道场/中继站或重新登录以刷新星图数据.`, cheats_infiniteCredits: `无限现金`, cheats_infinitePlatinum: `无限白金`, cheats_infiniteEndo: `无限内融核心`, @@ -245,35 +245,35 @@ dict = { worldState_resourceBoost: `资源加成`, worldState_tennoLiveRelay: `TennoLive中继站`, worldState_baroTennoConRelay: `Baro的TennoCon中继站`, - worldState_starDays: `活动:星日`, - worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`, - worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`, - worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use Tag from Warframe Anniversary for old Events`, + worldState_starDays: `活动:星日`, + worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`, + worldState_anniversary: `12周年纪念活动`, + worldState_useAnniversaryTagForOldGoals: `使用纪念活动Tag解决旧活动不显示问题`, worldState_ghoulEmergence: `尸鬼净化`, worldState_plagueStar: `瘟疫之星`, worldState_dogDays: `三伏天`, - worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`, + worldState_dogDaysRewards: `三伏天奖励设置`, worldState_wolfHunt: `恶狼狩猎 (2025)`, worldState_orphixVenom: `奥影之毒`, worldState_longShadow: `暗夜长影`, worldState_hallowedFlame: `万圣之焰`, worldState_hallowedNightmares: `万圣噩梦`, - worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`, + worldState_hallowedNightmaresRewards: `万圣噩梦奖励设置`, worldState_proxyRebellion: `机械叛乱`, - worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`, + worldState_proxyRebellionRewards: `机械叛乱奖励设置`, worldState_bellyOfTheBeast: `兽之腹`, - worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, + worldState_bellyOfTheBeastProgressOverride: `不稳定微粒收集进度(%)`, worldState_eightClaw: `八爪`, - worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, - worldState_from_year: `[UNTRANSLATED] from |VAL|`, - worldState_pre_year: `[UNTRANSLATED] pre |VAL|`, - worldState_week: `[UNTRANSLATED] Week |VAL|`, - worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`, + worldState_eightClawProgressOverride: `大帝金币收集进度(%)`, + worldState_from_year: `|VAL|`, + worldState_pre_year: `|VAL|之前`, + worldState_week: `第|VAL|周`, + worldState_incompatibleWith: `不兼容的活动:`, enabled: `启用`, disabled: `关闭/取消配置`, - worldState_we1: `活动阶段:第一周`, - worldState_we2: `活动阶段:第二周`, - worldState_we3: `活动阶段:第三周`, + worldState_we1: `活动阶段:第一周`, + worldState_we2: `活动阶段:第二周`, + worldState_we3: `活动阶段:第三周`, worldState_eidolonOverride: `夜灵平原/魔胎之境状态`, worldState_day: `白昼/FASS`, worldState_night: `黑夜/VOME`, @@ -312,8 +312,8 @@ dict = { worldState_varziaFullyStocked: `瓦奇娅开启全部库存商品`, worldState_varziaOverride: `瓦奇娅(Prime重生)轮换状态`, - import_importNote: `[UNTRANSLATED] You can provide a full or partial inventory.php or getShip.php response (client representation) here.`, - import_importNote2: `支持的所有字段将被覆盖到您的账户中。`, + import_importNote: `您可以在此处提供完整或部分的inventory.php或者getShip.php响应(客户端表示形式).`, + import_importNote2: `支持的所有字段将被覆盖到您的账户中.`, import_submit: `提交`, import_samples: `示例:`, import_samples_maxFocus: `所有专精学派完全精通`, @@ -339,7 +339,7 @@ dict = { upgrade_WarframeHPBoostFromImpact: `通过爆炸伤害击杀的每个敌人可增加|VAL1|生命上限(最大|VAL2|生命上限)`, upgrade_WarframeParkourVelocity: `+|VAL|%跑酷速度`, upgrade_WarframeRadiationDamageBoost: `对受辐射状态影响的敌人+|VAL|%技能伤害`, - upgrade_WarframeHealthRegen: `+|VAL|/秒生命再生`, + upgrade_WarframeHealthRegen: `+|VAL|/秒生命恢复`, upgrade_WarframeShieldMax: `+|VAL|护盾值`, upgrade_WarframeStartingEnergy: `进任务时+|VAL|%初始能量`, upgrade_WarframeToxinDamage: `毒素伤害额外+|VAL|%伤害`, @@ -347,7 +347,7 @@ dict = { upgrade_WeaponCritBoostFromHeat: `每个被火焰伤害杀死的敌人,增加|VAL1|%次要武器暴击几率(最大|VAL2|%)`, upgrade_AvatarAbilityRange: `+7.5%技能范围`, upgrade_AvatarAbilityEfficiency: `+5%技能效率`, - upgrade_AvatarEnergyRegen: `+0.5/秒能量再生`, + upgrade_AvatarEnergyRegen: `+0.5/秒能量恢复`, upgrade_AvatarEnemyRadar: `+5米侦敌雷达`, upgrade_AvatarLootRadar: `+7米寻物雷达`, upgrade_WeaponAmmoMax: `+15%弹药最大容量`, From 52a560bef238202d52e75a61d2606477b7759c32 Mon Sep 17 00:00:00 2001 From: LoseFace Date: Mon, 18 Aug 2025 09:31:58 -0700 Subject: [PATCH 2/6] chore(webui): update uk & ru (#2664) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2664 Co-authored-by: LoseFace Co-committed-by: LoseFace --- static/webui/translations/ru.js | 2 +- static/webui/translations/uk.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js index 119afa5b..5e11969a 100644 --- a/static/webui/translations/ru.js +++ b/static/webui/translations/ru.js @@ -10,7 +10,7 @@ dict = { code_loginFail: `Не удалось войти. Проверьте адрес электронной почты и пароль.`, code_regFail: `Не удалось зарегистрироваться. Учетная запись уже существует?`, code_changeNameConfirm: `Какое имя вы хотите установить для своей учетной записи?`, - code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`, + code_changeNameRetry: `|NAME| уже занято.`, code_deleteAccountConfirm: `Вы уверены, что хотите удалить аккаунт |DISPLAYNAME| (|EMAIL|)? Это действие нельзя отменить.`, code_archgun: `Арч-Пушка`, code_melee: `Ближний бой`, diff --git a/static/webui/translations/uk.js b/static/webui/translations/uk.js index ba0815cc..519f510f 100644 --- a/static/webui/translations/uk.js +++ b/static/webui/translations/uk.js @@ -10,7 +10,7 @@ dict = { code_loginFail: `Не вдалося увійти. Перевірте адресу електронної пошти та пароль.`, code_regFail: `Не вдалося зареєструватися. Обліковий запис вже існує?`, code_changeNameConfirm: `Яке ім'я ви хочете встановити для свого облікового запису?`, - code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`, + code_changeNameRetry: `|NAME| вже зайнято.`, code_deleteAccountConfirm: `Ви впевнені, що хочете видалити обліковий запис |DISPLAYNAME| (|EMAIL|)? Цю дію не можна скасувати.`, code_archgun: `Арк-гармата`, code_melee: `Холодна зброя`, @@ -247,8 +247,8 @@ dict = { worldState_baroTennoConRelay: `Реле Баро TennoCon`, worldState_starDays: `Зоряні дні`, worldState_galleonOfGhouls: `Гульський галеон`, - worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`, - worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use Tag from Warframe Anniversary for old Events`, + worldState_anniversary: `Річниця Warframe`, + worldState_useAnniversaryTagForOldGoals: `Використати Tag з річниці Warframe для старих подій`, worldState_ghoulEmergence: `Зачищення від гулів`, worldState_plagueStar: `Морова зірка`, worldState_dogDays: `Спекотні дні`, @@ -267,7 +267,7 @@ dict = { worldState_eightClawProgressOverride: `Прогрес Восьми кігтів`, worldState_from_year: `з |VAL|`, worldState_pre_year: `до |VAL|`, - worldState_week: `[UNTRANSLATED] Week |VAL|`, + worldState_week: `Тиждень |VAL|`, worldState_incompatibleWith: `Несумісне з:`, enabled: `Увімкнено`, disabled: `Вимкнено`, From 7c7f37e46b1fe5efd9a8c7b255e9e00f1c33ac5f Mon Sep 17 00:00:00 2001 From: hxedcl Date: Mon, 18 Aug 2025 09:34:17 -0700 Subject: [PATCH 3/6] chore(webui): update to Spanish translation (#2662) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2662 Co-authored-by: hxedcl Co-committed-by: hxedcl --- static/webui/translations/es.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js index 54fb50ce..d7afa021 100644 --- a/static/webui/translations/es.js +++ b/static/webui/translations/es.js @@ -262,9 +262,9 @@ dict = { worldState_proxyRebellion: `Rebelión Proxy`, worldState_proxyRebellionRewards: `Recompensas de Rebelión Proxy`, worldState_bellyOfTheBeast: `Vientre de la Bestia`, - worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, + worldState_bellyOfTheBeastProgressOverride: `Progreso del Vientre de la Bestia`, worldState_eightClaw: `Octava Garra`, - worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, + worldState_eightClawProgressOverride: `Progreso de Octava Garra`, worldState_from_year: `de |VAL|`, worldState_pre_year: `antes de |VAL|`, worldState_week: `[UNTRANSLATED] Week |VAL|`, @@ -312,7 +312,7 @@ dict = { worldState_varziaFullyStocked: `Varzia con stock completo`, worldState_varziaOverride: `Cambio en rotación de Varzia`, - import_importNote: `[UNTRANSLATED] You can provide a full or partial inventory.php or getShip.php response (client representation) here.`, + import_importNote: `Puedes proporcionar una respuesta de inventory.php o getShip.php completa o parcial (representación del cliente) aquí.`, import_importNote2: `Todos los campos compatibles con el importador serán sobrescritos en tu cuenta.`, import_submit: `Enviar`, import_samples: `Muestras:`, From 9b6abff2be3c59024a83ea1399773755fe4cec78 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:34:24 -0700 Subject: [PATCH 4/6] feat: dominus aureus rewards when operation eight claw is active (#2663) Closes #2660 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2663 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/missionInventoryUpdateService.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index a7219d7f..28e40ec5 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -1785,20 +1785,20 @@ function getRandomMissionDrops( if (mission?.Tier == 1) { logger.warn(`non-steel path duviri murmur tier used on steel path?!`); } - /*if (operation eight claw is active) { + if (config.worldState?.eightClaw) { drops.push({ StoreItem: "/Lotus/StoreItems/Types/Gameplay/DuviriMITW/Resources/DuviriMurmurItemEvent", ItemCount: 10 }); - }*/ + } rewardManifests = ["/Lotus/Types/Game/MissionDecks/DuviriEncounterRewards/DuviriMurmurFinalChestRewards"]; } else if (RewardInfo.T == 19) { - /*if (operation eight claw is active) { + if (config.worldState?.eightClaw) { drops.push({ StoreItem: "/Lotus/StoreItems/Types/Gameplay/DuviriMITW/Resources/DuviriMurmurItemEvent", ItemCount: 15 }); - }*/ + } rewardManifests = [ "/Lotus/Types/Game/MissionDecks/DuviriEncounterRewards/DuviriMurmurFinalSteelChestRewards" ]; From a5b667c331ff2be91a891590f2e8da6c6a1e001e Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:34:31 -0700 Subject: [PATCH 5/6] feat: protovyre armor challenge rewards (#2666) Closes #2485 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2666 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/inventoryService.ts | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 0dd45ef4..c6f16b08 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1980,9 +1980,59 @@ const challengeRewardsInboxMessages: Record = msg: "/Lotus/Language/Inbox/EvolvingSekharaUnlockBDesc", icon: "/Lotus/Interface/Icons/Npcs/Ordis.png", att: ["/Lotus/Upgrades/Skins/Clan/ZarimanEvolvingSekharaBadgeItemC"] + }, + // In theory, the following should only give what is owned, but based on the limited information I can find, DE may have simply taken the easy way: https://www.reddit.com/r/Warframe/comments/rzlnku/receiving_all_protovyre_armor_evolution_but_only/ + SentEvoArmorRankOne: { + sub: "/Lotus/Language/Inbox/EvolvingArmorUnlockAName", + sndr: "/Lotus/Language/Bosses/Ordis", + msg: "/Lotus/Language/Inbox/EvolvingArmorUnlockADesc", + icon: "/Lotus/Interface/Icons/Npcs/Ordis.png", + att: [ + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2A", + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2C", + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2L" + ] + }, + SentEvoArmorRankTwo: { + sub: "/Lotus/Language/Inbox/EvolvingArmorUnlockBName", + sndr: "/Lotus/Language/Bosses/Ordis", + msg: "/Lotus/Language/Inbox/EvolvingArmorUnlockBDesc", + icon: "/Lotus/Interface/Icons/Npcs/Ordis.png", + att: [ + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3A", + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3C", + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3L" + ] } }; +/*const evolvingWeaponSkins: Record = { + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor1A": { + challenge: "SentEvoArmorRankOne", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2A" + }, + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor1C": { + challenge: "SentEvoArmorRankOne", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2C" + }, + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor1L": { + challenge: "SentEvoArmorRankOne", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2L" + }, + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2A": { + challenge: "SentEvoArmorRankTwo", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3A" + }, + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2C": { + challenge: "SentEvoArmorRankTwo", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3C" + }, + "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor2L": { + challenge: "SentEvoArmorRankTwo", + reward: "/Lotus/Upgrades/Skins/Armor/SentEvoArmor/SentEvoArmor3L" + } +};*/ + export const addChallenges = async ( account: TAccountDocument, inventory: TInventoryDatabaseDocument, @@ -2014,6 +2064,7 @@ export const addChallenges = async ( continue; } logger.warn(`ignoring unknown challenge completion`, { challenge: Name, completion }); + dbChallenge.Progress = 0; dbChallenge.Completed = []; } } From 717484858832016597921c4f37a5a7dc4b5f4fb8 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:34:38 -0700 Subject: [PATCH 6/6] chore: non-fatally handle missing LevelKey info (#2667) Closes #2665 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2667 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/services/itemDataService.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index 954099ff..96d80c1a 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -29,11 +29,13 @@ import { ExportWeapons, IDefaultUpgrade, IInboxMessage, + IKey, IMissionReward, IRecipe, TReward } from "warframe-public-export-plus"; import { IMessage } from "@/src/models/inboxModel"; +import { logger } from "@/src/utils/logger"; export type WeaponTypeInternal = | "LongGuns" @@ -210,15 +212,15 @@ export const getKeyChainItems = ({ KeyChain, ChainStage }: IKeyChainRequest): st export const getLevelKeyRewards = ( levelKey: string ): { levelKeyRewards?: IMissionReward; levelKeyRewards2?: TReward[] } => { - if (!(levelKey in ExportKeys)) { - throw new Error(`LevelKey ${levelKey} not found`); - } + const key = ExportKeys[levelKey] as IKey | undefined; - const levelKeyRewards = ExportKeys[levelKey].missionReward; - const levelKeyRewards2 = ExportKeys[levelKey].rewards; + const levelKeyRewards = key?.missionReward; + const levelKeyRewards2 = key?.rewards; if (!levelKeyRewards && !levelKeyRewards2) { - throw new Error(`LevelKey ${levelKey} does not contain either rewards1 or rewards2`); + logger.warn( + `Could not find any reward information for ${levelKey}, gonna have to potentially short-change you` + ); } return {