diff --git a/.github/ISSUE_TEMPLATE/bug_report_cn.yaml b/.github/ISSUE_TEMPLATE/bug_report_cn.yaml new file mode 100644 index 000000000..1ba6e9bd7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_cn.yaml @@ -0,0 +1,67 @@ +name: 上报 Bug +description: 使用中文进行 Bug 报告 +labels: ['bug / 缺陷'] +body: + - type: checkboxes + id: checks + attributes: + label: 在提问之前... + options: + - label: 我已经搜索了现有的 issues + required: true + - label: 我在提问题之前至少花费了 5 分钟来思考和准备 + required: true + - label: 我正在使用最新版的 SRC + required: true + - type: textarea + id: describe + attributes: + label: 描述你的问题 + description: 简要描述你的问题 + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: 如何复现 + description: 重现该行为的步骤 + value: | + 1. 前往 '...' + 2. 点击 '....' + 3. 滑动到 '....' + 4. 出现问题 + validations: + required: false + - type: textarea + id: expected + attributes: + label: 预期行为 + description: 简要描述你期望发生的事情 + validations: + required: false + - type: textarea + id: logs + attributes: + label: 相关 Logs + description: 请复制并粘贴任何相关的日志输出。 + render: Text + validations: + required: false + - type: textarea + id: screenshots + attributes: + label: 截图 + description: | + 如果有,添加屏幕截图以帮助解释你的问题。 + 提示: 可以通过点击这个区域,然后把文件拖进来添加图片或日志文件。 + validations: + required: false + - type: textarea + id: others + attributes: + label: 还有别的吗? + description: | + 相关的配置?链接?参考资料? + 任何能让我们对你所遇到的问题有更多了解的东西。 + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report_en.yaml b/.github/ISSUE_TEMPLATE/bug_report_en.yaml new file mode 100644 index 000000000..a3eed7edc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_en.yaml @@ -0,0 +1,67 @@ +name: Bug Report +description: Create a report to help us improve +labels: ['bug / 缺陷'] +body: + - type: checkboxes + id: checks + attributes: + label: Before you asking + options: + - label: I have searched the existing issues + required: true + - label: I spend at least 5 minutes for thinking and preparing + required: true + - label: I am using the latest version of SRC + required: true + - type: textarea + id: describe + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: To Reproduce + description: Steps to reproduce the behavior + value: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: false + - type: textarea + id: expected + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: false + - type: textarea + id: logs + attributes: + label: Relevant log output + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: Text + validations: + required: false + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: | + If applicable, add screenshots to help explain your problem. + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false + - type: textarea + id: others + attributes: + label: Anything else? + description: | + Related configs? Links? References? + Anything that will give us more context about the issue you are encountering! + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request_cn.yaml b/.github/ISSUE_TEMPLATE/feature_request_cn.yaml new file mode 100644 index 000000000..004aaaf41 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request_cn.yaml @@ -0,0 +1,25 @@ +name: 功能请求 +description: 使用中文进行功能请求 +labels: ['feature request / 功能请求'] +body: + - type: textarea + id: describe + attributes: + label: 你的功能请求是否与问题有关? + description: 简要描述相关的问题 + validations: + required: false + - type: textarea + id: solution + attributes: + label: 解决方案 + description: 描述你想要的解决方案 + validations: + required: false + - type: textarea + id: additional + attributes: + label: 其他内容 + description: 关于该功能请求的任何其他背景或屏幕截图。 + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request_en.yaml b/.github/ISSUE_TEMPLATE/feature_request_en.yaml new file mode 100644 index 000000000..8a3c618d0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request_en.yaml @@ -0,0 +1,26 @@ +name: Feature request +description: Suggest an idea for this project +labels: ['feature request / 功能请求'] +body: + - type: textarea + id: describe + attributes: + label: Is your feature request related to a problem? + description: A clear and concise description of what the problem is + placeholder: Ex. I'm always frustrated when ... + validations: + required: false + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen + validations: + required: false + - type: textarea + id: additional + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + validations: + required: false \ No newline at end of file diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index a667df98c..f6e1a782d 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -1,6 +1,7 @@ import os import re import typing as t +from collections import defaultdict from functools import cached_property from module.base.code_generator import CodeGenerator @@ -232,6 +233,80 @@ class KeywordExtract: ) self.load_keywords(keywords_id, lang) + def generate_shadow_with_characters(self): + # Damage type -> damage hash + damage_info = dict() + for type_name, data in read_file(os.path.join( + TextMap.DATA_FOLDER, 'ExcelOutput', + 'DamageType.json' + )).items(): + damage_info[type_name] = deep_get(data, 'DamageTypeName.Hash') + # Character id -> character hash & damage type + character_info = dict() + for data in read_file(os.path.join( + TextMap.DATA_FOLDER, 'ExcelOutput', + 'AvatarConfig.json' + )).values(): + name_hash = deep_get(data, 'AvatarName.Hash') + damage_type = deep_get(data, 'DamageType') + character_info[data['AvatarID']] = ( + name_hash, damage_info[damage_type]) + # Item id -> character id + promotion_info = defaultdict(list) + for data in read_file(os.path.join( + TextMap.DATA_FOLDER, 'ExcelOutput', + 'AvatarPromotionConfig.json' + )).values(): + character_id = deep_get(data, '0.AvatarID') + item_id = deep_get(data, '2.PromotionCostList')[-1]['ItemID'] + promotion_info[item_id].append(character_info[character_id]) + # Shadow hash -> item id + shadow_info = dict() + for data in read_file(os.path.join( + TextMap.DATA_FOLDER, 'ExcelOutput', + 'MappingInfo.json' + )).values(): + farm_type = deep_get(data, '0.FarmType') + if farm_type != 'ELEMENT': + continue + shadow_hash = deep_get(data, '0.Name.Hash') + item_id = deep_get(data, '5.DisplayItemList')[-1]['ItemID'] + shadow_info[shadow_hash] = promotion_info[item_id] + prefix_dict = { + 'cn': '角色晋阶材料:', + 'cht': '角色晉階材料:', + 'jp': 'キャラクター昇格素材:', + 'en': 'Ascension: ', + 'es': 'Ascension: ' + } + keyword_class = 'DungeonDetailed' + output_file = './tasks/dungeon/keywords/dungeon_detailed.py' + gen = CodeGenerator() + gen.Import(f""" + from .classes import {keyword_class} + """) + gen.CommentAutoGenerage('dev_tools.keyword_extract') + for index, (keyword, characters) in enumerate(shadow_info.items()): + _, name = self.find_keyword(keyword, lang='en') + name = text_to_variable(name).replace('Shape_of_', '') + with gen.Object(key=name, object_class=keyword_class): + gen.ObjectAttr(key='id', value=index + 1) + gen.ObjectAttr(key='name', value=name) + for lang in UI_LANGUAGES: + character_names = ' / '.join([ + self.find_keyword(c[0], lang)[1] + for c in characters + ]) + damage_type = self.find_keyword(characters[0][1], lang)[1] + if lang in {'en', 'es'}: + value = f'{prefix_dict[lang]}{damage_type} ({character_names})' + else: + value = f'{prefix_dict[lang]}{damage_type}({character_names})' + gen.ObjectAttr(key=lang, value=value) + print(f'Write {output_file}') + gen.write(output_file) + self.clear_keywords() + def generate_forgotten_hall_stages(self): keyword_class = "ForgottenHallStage" output_file = './tasks/forgotten_hall/keywords/stage.py' @@ -372,6 +447,7 @@ class KeywordExtract: text_convert=dungeon_name) self.load_keywords(['传送', '追踪']) self.write_keywords(keyword_class='DungeonEntrance', output_file='./tasks/dungeon/keywords/dungeon_entrance.py') + self.generate_shadow_with_characters() self.load_keywords(['奖励', '任务', ]) self.write_keywords(keyword_class='BattlePassTab', output_file='./tasks/battle_pass/keywords/tab.py') self.load_keywords(['本日任务', '本周任务', '本期任务']) diff --git a/module/config/config_updater.py b/module/config/config_updater.py index 13a2fb4e9..fe79b947f 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -354,16 +354,20 @@ class ConfigGenerator: # prefix = '国服' if prefix == 'CN' else prefix # deep_set(new, keys=path, value=f'[{prefix}] {_list[index]}') + ingame_lang = gui_lang_to_ingame_lang(lang) + dailies = deep_get(self.argument, keys='Dungeon.Name.option') # Dungeon names - from tasks.dungeon.keywords import DungeonList + from tasks.dungeon.keywords import DungeonList, DungeonDetailed if lang not in ['zh-CN', 'zh-TW', 'en-US', 'es-ES']: - ingame_lang = gui_lang_to_ingame_lang(lang) - dailies = deep_get(self.argument, keys='Dungeon.Name.option') for dungeon in DungeonList.instances.values(): if dungeon.name in dailies: value = dungeon.__getattribute__(ingame_lang) deep_set(new, keys=['Dungeon', 'Name', dungeon.name], value=value) - + # Stagnant shadows with character names + for dungeon in DungeonDetailed.instances.values(): + if dungeon.name in dailies: + value = dungeon.__getattribute__(ingame_lang) + deep_set(new, keys=['Dungeon', 'Name', dungeon.name], value=value) # Copy dungeon i18n to double events def update_dungeon_names(keys): for dungeon in deep_get(self.argument, keys=f'{keys}.option', default=[]): @@ -380,7 +384,6 @@ class ConfigGenerator: # Character names from tasks.character.keywords import CharacterList - ingame_lang = gui_lang_to_ingame_lang(lang) characters = deep_get(self.argument, keys='DungeonSupport.Character.option') for character in CharacterList.instances.values(): if character.name in characters: diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index b47b1de74..34c9b3a03 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -221,18 +221,18 @@ "Calyx_Crimson_Erudition": "Trace: Erudition (Bud of Erudition)", "Calyx_Crimson_Harmony": "Trace: Harmony (Bud of Harmony)", "Calyx_Crimson_Nihility": "Trace: Nihility (Bud of Nihility)", - "Stagnant_Shadow_Quanta": "Ascension: Quantum (Shape of Quanta)", - "Stagnant_Shadow_Gust": "Ascension: Wind (Shape of Gust)", - "Stagnant_Shadow_Fulmination": "Ascension: Lighting (Shape of Fulmination)", - "Stagnant_Shadow_Blaze": "Ascension: Fire (Shape of Blaze)", - "Stagnant_Shadow_Spike": "Ascension: Physical (Shape of Spike)", - "Stagnant_Shadow_Rime": "Ascension: Ice (Shape of Rime)", - "Stagnant_Shadow_Mirage": "Ascension: Imaginary (Shape of Mirage)", - "Stagnant_Shadow_Icicle": "Ascension: Ice (Shape of Icicle)", - "Stagnant_Shadow_Doom": "Ascension: Lighting (Shape of Doom)", - "Stagnant_Shadow_Puppetry": "Ascension: Imaginary (Shape of Puppetry)", - "Stagnant_Shadow_Abomination": "Ascension: Quantum (Shape of Abomination)", - "Stagnant_Shadow_Celestial": "Ascension: Wind (Shape of Celestial)", + "Stagnant_Shadow_Quanta": "Ascension: Quantum (Silver Wolf / Seele / Qingque)", + "Stagnant_Shadow_Gust": "Ascension: Wind (Dan Heng / Bronya / Sampo)", + "Stagnant_Shadow_Fulmination": "Ascension: Lightning (Arlan / Serval / Tingyun / Bailu)", + "Stagnant_Shadow_Blaze": "Ascension: Fire (Himeko / Asta / Hook)", + "Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)", + "Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)", + "Stagnant_Shadow_Mirage": "Ascension: Imaginary (Welt / Luocha / Yukong)", + "Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing)", + "Stagnant_Shadow_Doom": "Ascension: Lightning (Kafka / Jing Yuan)", + "Stagnant_Shadow_Puppetry": "Ascension: Imaginary (Dan Heng • Imbibitor Lunae)", + "Stagnant_Shadow_Abomination": "Ascension: Quantum (Lynx / Fu Xuan)", + "Stagnant_Shadow_Celestial": "Ascension: Wind (Blade)", "Cavern_of_Corrosion_Path_of_Gelid_Wind": "Relics: Ice Set & Wind Set (Path of Gelid Wind)", "Cavern_of_Corrosion_Path_of_Jabbing_Punch": "Relics: Physical Set & Break Effect Set (Path of Jabbing Punch)", "Cavern_of_Corrosion_Path_of_Drifting": "Relics: Healing Set & Musketeer Set (Path of Drifting)", @@ -308,18 +308,18 @@ "name": "Clear Stagnant Shadow 1 times", "help": "", "do_not_achieve": "Don't Do This Quest", - "Stagnant_Shadow_Quanta": "Ascension: Quantum (Shape of Quanta)", - "Stagnant_Shadow_Gust": "Ascension: Wind (Shape of Gust)", - "Stagnant_Shadow_Fulmination": "Ascension: Lighting (Shape of Fulmination)", - "Stagnant_Shadow_Blaze": "Ascension: Fire (Shape of Blaze)", - "Stagnant_Shadow_Spike": "Ascension: Physical (Shape of Spike)", - "Stagnant_Shadow_Rime": "Ascension: Ice (Shape of Rime)", - "Stagnant_Shadow_Mirage": "Ascension: Imaginary (Shape of Mirage)", - "Stagnant_Shadow_Icicle": "Ascension: Ice (Shape of Icicle)", - "Stagnant_Shadow_Doom": "Ascension: Lighting (Shape of Doom)", - "Stagnant_Shadow_Puppetry": "Ascension: Imaginary (Shape of Puppetry)", - "Stagnant_Shadow_Abomination": "Ascension: Quantum (Shape of Abomination)", - "Stagnant_Shadow_Celestial": "Ascension: Wind (Shape of Celestial)" + "Stagnant_Shadow_Quanta": "Ascension: Quantum (Silver Wolf / Seele / Qingque)", + "Stagnant_Shadow_Gust": "Ascension: Wind (Dan Heng / Bronya / Sampo)", + "Stagnant_Shadow_Fulmination": "Ascension: Lightning (Arlan / Serval / Tingyun / Bailu)", + "Stagnant_Shadow_Blaze": "Ascension: Fire (Himeko / Asta / Hook)", + "Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)", + "Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)", + "Stagnant_Shadow_Mirage": "Ascension: Imaginary (Welt / Luocha / Yukong)", + "Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing)", + "Stagnant_Shadow_Doom": "Ascension: Lightning (Kafka / Jing Yuan)", + "Stagnant_Shadow_Puppetry": "Ascension: Imaginary (Dan Heng • Imbibitor Lunae)", + "Stagnant_Shadow_Abomination": "Ascension: Quantum (Lynx / Fu Xuan)", + "Stagnant_Shadow_Celestial": "Ascension: Wind (Blade)" }, "CavernOfCorrosion": { "name": "Clear Cavern of Corrosion 1 times", diff --git a/module/config/i18n/es-ES.json b/module/config/i18n/es-ES.json index 13216886d..2dd6537de 100644 --- a/module/config/i18n/es-ES.json +++ b/module/config/i18n/es-ES.json @@ -221,18 +221,18 @@ "Calyx_Crimson_Erudition": "Rastros: Erudición (Flor de la Erudición)", "Calyx_Crimson_Harmony": "Rastros: Armonía (Flor de la Armonía)", "Calyx_Crimson_Nihility": "Rastros: Nihilidad (Flor de la Nihilidad)", - "Stagnant_Shadow_Quanta": "Ascension: Cuántico (Forma del cuanto)", - "Stagnant_Shadow_Gust": "Ascension: Viento (Forma del aire)", - "Stagnant_Shadow_Fulmination": "Ascension: Trueno (Forma del trueno)", - "Stagnant_Shadow_Blaze": "Ascension: Fuego (Forma de las llamas)", - "Stagnant_Shadow_Spike": "Ascension: Físico (Forma afilada)", - "Stagnant_Shadow_Rime": "Ascension: Hielo (Forma de la escarcha)", - "Stagnant_Shadow_Mirage": "Ascension: Imaginario (Forma del espejismo)", - "Stagnant_Shadow_Icicle": "Ascension: Hielo (Forma del témpano)", - "Stagnant_Shadow_Doom": "Ascension: Trueno (Forma de la perdición)", - "Stagnant_Shadow_Puppetry": "Ascension: Imaginario (Forma de las marionetas)", - "Stagnant_Shadow_Abomination": "Ascension: Cuántico (Forma de la abominación)", - "Stagnant_Shadow_Celestial": "Ascension: Viento (Forma de lo celestial)", + "Stagnant_Shadow_Quanta": "Ascension: Cuántico (Silver Wolf / Seele / Qingque)", + "Stagnant_Shadow_Gust": "Ascension: Viento (Dan Heng / Bronya / Sampo)", + "Stagnant_Shadow_Fulmination": "Ascension: Rayo (Arlan / Serval / Tingyun / Bailu)", + "Stagnant_Shadow_Blaze": "Ascension: Fuego (Himeko / Asta / Hook)", + "Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)", + "Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)", + "Stagnant_Shadow_Mirage": "Ascension: Imaginario (Welt / Luocha / Yukong)", + "Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing)", + "Stagnant_Shadow_Doom": "Ascension: Rayo (Kafka / Jing Yuan)", + "Stagnant_Shadow_Puppetry": "Ascension: Imaginario (Dan Heng - Imbibitor Lunae)", + "Stagnant_Shadow_Abomination": "Ascension: Cuántico (Lynx / Fu Xuan)", + "Stagnant_Shadow_Celestial": "Ascension: Viento (Blade)", "Cavern_of_Corrosion_Path_of_Gelid_Wind": "Artefactos: Hielo y Viento (Senda del viento gélido)", "Cavern_of_Corrosion_Path_of_Jabbing_Punch": "Artefactos: Físico y Efecto de Ruptura (Senda de los puños rápidos)", "Cavern_of_Corrosion_Path_of_Drifting": "Artefactos: Curación y Pistolera de la espiga silvestre (Senda de la deriva)", @@ -308,18 +308,18 @@ "name": "Completar Sombra paralizada 1 vez", "help": "", "do_not_achieve": "No hacer esta misión", - "Stagnant_Shadow_Quanta": "Ascension: Cuántico (Forma del cuanto)", - "Stagnant_Shadow_Gust": "Ascension: Viento (Forma del aire)", - "Stagnant_Shadow_Fulmination": "Ascension: Trueno (Forma del trueno)", - "Stagnant_Shadow_Blaze": "Ascension: Fuego (Forma de las llamas)", - "Stagnant_Shadow_Spike": "Ascension: Físico (Forma afilada)", - "Stagnant_Shadow_Rime": "Ascension: Hielo (Forma de la escarcha)", - "Stagnant_Shadow_Mirage": "Ascension: Imaginario (Forma del espejismo)", - "Stagnant_Shadow_Icicle": "Ascension: Hielo (Forma del témpano)", - "Stagnant_Shadow_Doom": "Ascension: Trueno (Forma de la perdición)", - "Stagnant_Shadow_Puppetry": "Ascension: Imaginario (Forma de las marionetas)", - "Stagnant_Shadow_Abomination": "Ascension: Cuántico (Forma de la abominación)", - "Stagnant_Shadow_Celestial": "Ascension: Viento (Forma de lo celestial)" + "Stagnant_Shadow_Quanta": "Ascension: Cuántico (Silver Wolf / Seele / Qingque)", + "Stagnant_Shadow_Gust": "Ascension: Viento (Dan Heng / Bronya / Sampo)", + "Stagnant_Shadow_Fulmination": "Ascension: Rayo (Arlan / Serval / Tingyun / Bailu)", + "Stagnant_Shadow_Blaze": "Ascension: Fuego (Himeko / Asta / Hook)", + "Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)", + "Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)", + "Stagnant_Shadow_Mirage": "Ascension: Imaginario (Welt / Luocha / Yukong)", + "Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing)", + "Stagnant_Shadow_Doom": "Ascension: Rayo (Kafka / Jing Yuan)", + "Stagnant_Shadow_Puppetry": "Ascension: Imaginario (Dan Heng - Imbibitor Lunae)", + "Stagnant_Shadow_Abomination": "Ascension: Cuántico (Lynx / Fu Xuan)", + "Stagnant_Shadow_Celestial": "Ascension: Viento (Blade)" }, "CavernOfCorrosion": { "name": "Completar Caverna de la corrosión 1 vez", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index fa0474152..ddc1ab825 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -221,18 +221,18 @@ "Calyx_Crimson_Erudition": "疑似花萼(赤)・知恵の蕾", "Calyx_Crimson_Harmony": "疑似花萼(赤)・調和の蕾", "Calyx_Crimson_Nihility": "疑似花萼(赤)・虚無の蕾", - "Stagnant_Shadow_Quanta": "凝結虚影・虚海の形", - "Stagnant_Shadow_Gust": "凝結虚影・薫風の形", - "Stagnant_Shadow_Fulmination": "凝結虚影・鳴雷の形", - "Stagnant_Shadow_Blaze": "凝結虚影・炎華の形", - "Stagnant_Shadow_Spike": "凝結虚影・切先の形", - "Stagnant_Shadow_Rime": "凝結虚影・霜晶の形", - "Stagnant_Shadow_Mirage": "凝結虚影・幻光の形", - "Stagnant_Shadow_Icicle": "凝結虚影・氷柱の形", - "Stagnant_Shadow_Doom": "凝結虚影・震厄の形", - "Stagnant_Shadow_Puppetry": "凝結虚影・傀儡の形", - "Stagnant_Shadow_Abomination": "凝結虚影・厄獣の形", - "Stagnant_Shadow_Celestial": "凝結虚影・天人の形", + "Stagnant_Shadow_Quanta": "キャラクター昇格素材:量子(銀狼 / ゼーレ / 青雀)", + "Stagnant_Shadow_Gust": "キャラクター昇格素材:風(丹恒 / ブローニャ / サンポ)", + "Stagnant_Shadow_Fulmination": "キャラクター昇格素材:雷(アーラン / セーバル / 停雲 / 白露)", + "Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)", + "Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)", + "Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)", + "Stagnant_Shadow_Mirage": "キャラクター昇格素材:虚数(ヴェルト / 羅刹 / 御空)", + "Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿)", + "Stagnant_Shadow_Doom": "キャラクター昇格素材:雷(カフカ / 景元)", + "Stagnant_Shadow_Puppetry": "キャラクター昇格素材:虚数(丹恒・飲月)", + "Stagnant_Shadow_Abomination": "キャラクター昇格素材:量子(リンクス / 符玄)", + "Stagnant_Shadow_Celestial": "キャラクター昇格素材:風(刃)", "Cavern_of_Corrosion_Path_of_Gelid_Wind": "侵蝕トンネル・霜風の路", "Cavern_of_Corrosion_Path_of_Jabbing_Punch": "侵蝕トンネル・迅拳の路", "Cavern_of_Corrosion_Path_of_Drifting": "侵蝕トンネル・漂泊の路", @@ -308,18 +308,18 @@ "name": "DungeonDaily.StagnantShadow.name", "help": "DungeonDaily.StagnantShadow.help", "do_not_achieve": "do_not_achieve", - "Stagnant_Shadow_Quanta": "凝結虚影・虚海の形", - "Stagnant_Shadow_Gust": "凝結虚影・薫風の形", - "Stagnant_Shadow_Fulmination": "凝結虚影・鳴雷の形", - "Stagnant_Shadow_Blaze": "凝結虚影・炎華の形", - "Stagnant_Shadow_Spike": "凝結虚影・切先の形", - "Stagnant_Shadow_Rime": "凝結虚影・霜晶の形", - "Stagnant_Shadow_Mirage": "凝結虚影・幻光の形", - "Stagnant_Shadow_Icicle": "凝結虚影・氷柱の形", - "Stagnant_Shadow_Doom": "凝結虚影・震厄の形", - "Stagnant_Shadow_Puppetry": "凝結虚影・傀儡の形", - "Stagnant_Shadow_Abomination": "凝結虚影・厄獣の形", - "Stagnant_Shadow_Celestial": "凝結虚影・天人の形" + "Stagnant_Shadow_Quanta": "キャラクター昇格素材:量子(銀狼 / ゼーレ / 青雀)", + "Stagnant_Shadow_Gust": "キャラクター昇格素材:風(丹恒 / ブローニャ / サンポ)", + "Stagnant_Shadow_Fulmination": "キャラクター昇格素材:雷(アーラン / セーバル / 停雲 / 白露)", + "Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)", + "Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)", + "Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)", + "Stagnant_Shadow_Mirage": "キャラクター昇格素材:虚数(ヴェルト / 羅刹 / 御空)", + "Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿)", + "Stagnant_Shadow_Doom": "キャラクター昇格素材:雷(カフカ / 景元)", + "Stagnant_Shadow_Puppetry": "キャラクター昇格素材:虚数(丹恒・飲月)", + "Stagnant_Shadow_Abomination": "キャラクター昇格素材:量子(リンクス / 符玄)", + "Stagnant_Shadow_Celestial": "キャラクター昇格素材:風(刃)" }, "CavernOfCorrosion": { "name": "DungeonDaily.CavernOfCorrosion.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b60cd00bc..014a2d7e7 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -221,18 +221,18 @@ "Calyx_Crimson_Erudition": "行迹材料:智识(智识之蕾•拟造花萼赤)", "Calyx_Crimson_Harmony": "行迹材料:同谐(同谐之蕾•拟造花萼赤)", "Calyx_Crimson_Nihility": "行迹材料:虚无(虚无之蕾•拟造花萼赤)", - "Stagnant_Shadow_Quanta": "角色晋阶材料:量子(空海之形•凝滞虚影)", - "Stagnant_Shadow_Gust": "角色晋阶材料:风(巽风之形•凝滞虚影)", - "Stagnant_Shadow_Fulmination": "角色晋阶材料:雷(鸣雷之形•凝滞虚影)", - "Stagnant_Shadow_Blaze": "角色晋阶材料:火(炎华之形•凝滞虚影)", - "Stagnant_Shadow_Spike": "角色晋阶材料:物理(锋芒之形•凝滞虚影)", - "Stagnant_Shadow_Rime": "角色晋阶材料:冰(霜晶之形•凝滞虚影)", - "Stagnant_Shadow_Mirage": "角色晋阶材料:虚数(幻光之形•凝滞虚影)", - "Stagnant_Shadow_Icicle": "角色晋阶材料:冰(冰棱之形•凝滞虚影)", - "Stagnant_Shadow_Doom": "角色晋阶材料:雷(震厄之形•凝滞虚影)", - "Stagnant_Shadow_Puppetry": "角色晋阶材料:虚数(偃偶之形•凝滞虚影)", - "Stagnant_Shadow_Abomination": "角色晋阶材料:量子(孽兽之形•凝滞虚影)", - "Stagnant_Shadow_Celestial": "角色晋阶材料:风(天人之形•凝滞虚影)", + "Stagnant_Shadow_Quanta": "角色晋阶材料:量子(银狼 / 希儿 / 青雀)", + "Stagnant_Shadow_Gust": "角色晋阶材料:风(丹恒 / 布洛妮娅 / 桑博)", + "Stagnant_Shadow_Fulmination": "角色晋阶材料:雷(阿兰 / 希露瓦 / 停云 / 白露)", + "Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)", + "Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)", + "Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)", + "Stagnant_Shadow_Mirage": "角色晋阶材料:虚数(瓦尔特 / 罗刹 / 驭空)", + "Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿)", + "Stagnant_Shadow_Doom": "角色晋阶材料:雷(卡芙卡 / 景元)", + "Stagnant_Shadow_Puppetry": "角色晋阶材料:虚数(丹恒•饮月)", + "Stagnant_Shadow_Abomination": "角色晋阶材料:量子(玲可 / 符玄)", + "Stagnant_Shadow_Celestial": "角色晋阶材料:风(刃)", "Cavern_of_Corrosion_Path_of_Gelid_Wind": "遗器:冰套+风套(霜风之径•侵蚀隧洞)", "Cavern_of_Corrosion_Path_of_Jabbing_Punch": "遗器:物理套+击破套(迅拳之径•侵蚀隧洞)", "Cavern_of_Corrosion_Path_of_Drifting": "遗器:治疗套+快枪手(漂泊之径•侵蚀隧洞)", @@ -308,18 +308,18 @@ "name": "完成1次凝滞虚影", "help": "", "do_not_achieve": "不完成这个任务", - "Stagnant_Shadow_Quanta": "角色晋阶材料:量子(空海之形•凝滞虚影)", - "Stagnant_Shadow_Gust": "角色晋阶材料:风(巽风之形•凝滞虚影)", - "Stagnant_Shadow_Fulmination": "角色晋阶材料:雷(鸣雷之形•凝滞虚影)", - "Stagnant_Shadow_Blaze": "角色晋阶材料:火(炎华之形•凝滞虚影)", - "Stagnant_Shadow_Spike": "角色晋阶材料:物理(锋芒之形•凝滞虚影)", - "Stagnant_Shadow_Rime": "角色晋阶材料:冰(霜晶之形•凝滞虚影)", - "Stagnant_Shadow_Mirage": "角色晋阶材料:虚数(幻光之形•凝滞虚影)", - "Stagnant_Shadow_Icicle": "角色晋阶材料:冰(冰棱之形•凝滞虚影)", - "Stagnant_Shadow_Doom": "角色晋阶材料:雷(震厄之形•凝滞虚影)", - "Stagnant_Shadow_Puppetry": "角色晋阶材料:虚数(偃偶之形•凝滞虚影)", - "Stagnant_Shadow_Abomination": "角色晋阶材料:量子(孽兽之形•凝滞虚影)", - "Stagnant_Shadow_Celestial": "角色晋阶材料:风(天人之形•凝滞虚影)" + "Stagnant_Shadow_Quanta": "角色晋阶材料:量子(银狼 / 希儿 / 青雀)", + "Stagnant_Shadow_Gust": "角色晋阶材料:风(丹恒 / 布洛妮娅 / 桑博)", + "Stagnant_Shadow_Fulmination": "角色晋阶材料:雷(阿兰 / 希露瓦 / 停云 / 白露)", + "Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)", + "Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)", + "Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)", + "Stagnant_Shadow_Mirage": "角色晋阶材料:虚数(瓦尔特 / 罗刹 / 驭空)", + "Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿)", + "Stagnant_Shadow_Doom": "角色晋阶材料:雷(卡芙卡 / 景元)", + "Stagnant_Shadow_Puppetry": "角色晋阶材料:虚数(丹恒•饮月)", + "Stagnant_Shadow_Abomination": "角色晋阶材料:量子(玲可 / 符玄)", + "Stagnant_Shadow_Celestial": "角色晋阶材料:风(刃)" }, "CavernOfCorrosion": { "name": "完成1次侵蚀隧洞", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 542cc5be7..1356b5d22 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -221,18 +221,18 @@ "Calyx_Crimson_Erudition": "行跡材料:智識(智識之蕾•擬造花萼赤)", "Calyx_Crimson_Harmony": "行跡材料:同諧(同諧之蕾•擬造花萼赤)", "Calyx_Crimson_Nihility": "行跡材料:虛無(虛無之蕾•擬造花萼赤)", - "Stagnant_Shadow_Quanta": "角色晉階材料:量子(空海之形•凝滯虛影)", - "Stagnant_Shadow_Gust": "角色晉階材料:風(巽風之形•凝滯虛影)", - "Stagnant_Shadow_Fulmination": "角色晉階材料:雷(鳴雷之形•凝滯虛影)", - "Stagnant_Shadow_Blaze": "角色晉階材料:火(炎華之形•凝滯虛影)", - "Stagnant_Shadow_Spike": "角色晉階材料:物理(鋒芒之形•凝滯虛影)", - "Stagnant_Shadow_Rime": "角色晉階材料:冰(霜晶之形•凝滯虛影)", - "Stagnant_Shadow_Mirage": "角色晉階材料:虛數(幻光之形•凝滯虛影)", - "Stagnant_Shadow_Icicle": "角色晉階材料:冰(冰稜之形•凝滯虛影)", - "Stagnant_Shadow_Doom": "角色晉階材料:雷(震厄之形•凝滯虛影)", - "Stagnant_Shadow_Puppetry": "角色晉階材料:虛數(偃偶之形•凝滯虛影)", - "Stagnant_Shadow_Abomination": "角色晉階材料:量子(孽獸之形•凝滯虛影)", - "Stagnant_Shadow_Celestial": "角色晉階材料:風(天人之形•凝滯虛影)", + "Stagnant_Shadow_Quanta": "角色晉階材料:量子(銀狼 / 希兒 / 青雀)", + "Stagnant_Shadow_Gust": "角色晉階材料:風(丹恆 / 布洛妮婭 / 桑博)", + "Stagnant_Shadow_Fulmination": "角色晉階材料:雷(阿蘭 / 希露瓦 / 停雲 / 白露)", + "Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)", + "Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)", + "Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)", + "Stagnant_Shadow_Mirage": "角色晉階材料:虛數(瓦爾特 / 羅剎 / 馭空)", + "Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿)", + "Stagnant_Shadow_Doom": "角色晉階材料:雷(卡芙卡 / 景元)", + "Stagnant_Shadow_Puppetry": "角色晉階材料:虛數(丹恆•飲月)", + "Stagnant_Shadow_Abomination": "角色晉階材料:量子(玲可 / 符玄)", + "Stagnant_Shadow_Celestial": "角色晉階材料:風(刃)", "Cavern_of_Corrosion_Path_of_Gelid_Wind": "遺器:冰套+風套(霜風之徑•侵蝕隧洞)", "Cavern_of_Corrosion_Path_of_Jabbing_Punch": "遺器:物理套+擊破套(迅拳之徑•侵蝕隧洞)", "Cavern_of_Corrosion_Path_of_Drifting": "遺器:治療套+快槍手(漂泊之徑•侵蝕隧洞)", @@ -308,18 +308,18 @@ "name": "完成1次凝滯虛影", "help": "", "do_not_achieve": "不完成這個任務", - "Stagnant_Shadow_Quanta": "角色晉階材料:量子(空海之形•凝滯虛影)", - "Stagnant_Shadow_Gust": "角色晉階材料:風(巽風之形•凝滯虛影)", - "Stagnant_Shadow_Fulmination": "角色晉階材料:雷(鳴雷之形•凝滯虛影)", - "Stagnant_Shadow_Blaze": "角色晉階材料:火(炎華之形•凝滯虛影)", - "Stagnant_Shadow_Spike": "角色晉階材料:物理(鋒芒之形•凝滯虛影)", - "Stagnant_Shadow_Rime": "角色晉階材料:冰(霜晶之形•凝滯虛影)", - "Stagnant_Shadow_Mirage": "角色晉階材料:虛數(幻光之形•凝滯虛影)", - "Stagnant_Shadow_Icicle": "角色晉階材料:冰(冰稜之形•凝滯虛影)", - "Stagnant_Shadow_Doom": "角色晉階材料:雷(震厄之形•凝滯虛影)", - "Stagnant_Shadow_Puppetry": "角色晉階材料:虛數(偃偶之形•凝滯虛影)", - "Stagnant_Shadow_Abomination": "角色晉階材料:量子(孽獸之形•凝滯虛影)", - "Stagnant_Shadow_Celestial": "角色晉階材料:風(天人之形•凝滯虛影)" + "Stagnant_Shadow_Quanta": "角色晉階材料:量子(銀狼 / 希兒 / 青雀)", + "Stagnant_Shadow_Gust": "角色晉階材料:風(丹恆 / 布洛妮婭 / 桑博)", + "Stagnant_Shadow_Fulmination": "角色晉階材料:雷(阿蘭 / 希露瓦 / 停雲 / 白露)", + "Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)", + "Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)", + "Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)", + "Stagnant_Shadow_Mirage": "角色晉階材料:虛數(瓦爾特 / 羅剎 / 馭空)", + "Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿)", + "Stagnant_Shadow_Doom": "角色晉階材料:雷(卡芙卡 / 景元)", + "Stagnant_Shadow_Puppetry": "角色晉階材料:虛數(丹恆•飲月)", + "Stagnant_Shadow_Abomination": "角色晉階材料:量子(玲可 / 符玄)", + "Stagnant_Shadow_Celestial": "角色晉階材料:風(刃)" }, "CavernOfCorrosion": { "name": "完成1次侵蝕隧洞", diff --git a/tasks/battle_pass/battle_pass.py b/tasks/battle_pass/battle_pass.py index 4b38a40d4..3eb4928c1 100644 --- a/tasks/battle_pass/battle_pass.py +++ b/tasks/battle_pass/battle_pass.py @@ -312,14 +312,15 @@ class BattlePassUI(UI): if self.appear(MAIN_GOTO_BATTLE_PASS, similarity=0.75): return True else: - logger.info('No battle pass entrance, probably a gap between two periods') continue + logger.info('No battle pass entrance, probably a gap between two periods') return False def run(self): self.ui_ensure(page_main) if not self.has_battle_pass_entrance(): + self.config.stored.BattlePassTodayQuest.set(0) self.config.task_delay(server_update=True) self.config.task_stop() diff --git a/tasks/dungeon/keywords/__init__.py b/tasks/dungeon/keywords/__init__.py index 5c303d89b..db9469de0 100644 --- a/tasks/dungeon/keywords/__init__.py +++ b/tasks/dungeon/keywords/__init__.py @@ -1,5 +1,7 @@ import tasks.dungeon.keywords.dungeon as KEYWORDS_DUNGEON_LIST +import tasks.dungeon.keywords.dungeon_detailed as KEYWORDS_DUNGEON_DETAILED import tasks.dungeon.keywords.dungeon_entrance as KEYWORDS_DUNGEON_ENTRANCE import tasks.dungeon.keywords.nav as KEYWORDS_DUNGEON_NAV import tasks.dungeon.keywords.tab as KEYWORDS_DUNGEON_TAB -from tasks.dungeon.keywords.classes import DungeonList, DungeonNav, DungeonTab +from tasks.dungeon.keywords.classes import (DungeonDetailed, DungeonList, + DungeonNav, DungeonTab) diff --git a/tasks/dungeon/keywords/classes.py b/tasks/dungeon/keywords/classes.py index 190b53206..6b0311ce2 100644 --- a/tasks/dungeon/keywords/classes.py +++ b/tasks/dungeon/keywords/classes.py @@ -92,3 +92,8 @@ class DungeonList(Keyword): @dataclass(repr=False) class DungeonEntrance(Keyword): instances: ClassVar = {} + + +@dataclass(repr=False) +class DungeonDetailed(Keyword): + instances: ClassVar = {} diff --git a/tasks/dungeon/keywords/dungeon_detailed.py b/tasks/dungeon/keywords/dungeon_detailed.py new file mode 100644 index 000000000..60dd7588e --- /dev/null +++ b/tasks/dungeon/keywords/dungeon_detailed.py @@ -0,0 +1,113 @@ +from .classes import DungeonDetailed + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Stagnant_Shadow_Quanta = DungeonDetailed( + id=1, + name='Stagnant_Shadow_Quanta', + cn='角色晋阶材料:量子(银狼 / 希儿 / 青雀)', + cht='角色晉階材料:量子(銀狼 / 希兒 / 青雀)', + en='Ascension: Quantum (Silver Wolf / Seele / Qingque)', + jp='キャラクター昇格素材:量子(銀狼 / ゼーレ / 青雀)', + es='Ascension: Cuántico (Silver Wolf / Seele / Qingque)', +) +Stagnant_Shadow_Gust = DungeonDetailed( + id=2, + name='Stagnant_Shadow_Gust', + cn='角色晋阶材料:风(丹恒 / 布洛妮娅 / 桑博)', + cht='角色晉階材料:風(丹恆 / 布洛妮婭 / 桑博)', + en='Ascension: Wind (Dan Heng / Bronya / Sampo)', + jp='キャラクター昇格素材:風(丹恒 / ブローニャ / サンポ)', + es='Ascension: Viento (Dan Heng / Bronya / Sampo)', +) +Stagnant_Shadow_Fulmination = DungeonDetailed( + id=3, + name='Stagnant_Shadow_Fulmination', + cn='角色晋阶材料:雷(阿兰 / 希露瓦 / 停云 / 白露)', + cht='角色晉階材料:雷(阿蘭 / 希露瓦 / 停雲 / 白露)', + en='Ascension: Lightning (Arlan / Serval / Tingyun / Bailu)', + jp='キャラクター昇格素材:雷(アーラン / セーバル / 停雲 / 白露)', + es='Ascension: Rayo (Arlan / Serval / Tingyun / Bailu)', +) +Stagnant_Shadow_Blaze = DungeonDetailed( + id=4, + name='Stagnant_Shadow_Blaze', + cn='角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)', + cht='角色晉階材料:火(姬子 / 艾絲妲 / 虎克)', + en='Ascension: Fire (Himeko / Asta / Hook)', + jp='キャラクター昇格素材:炎(姫子 / アスター / フック)', + es='Ascension: Fuego (Himeko / Asta / Hook)', +) +Stagnant_Shadow_Spike = DungeonDetailed( + id=5, + name='Stagnant_Shadow_Spike', + cn='角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)', + cht='角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)', + en='Ascension: Physical (Natasha / Clara / Luka / Sushang)', + jp='キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)', + es='Ascension: Físico (Natasha / Clara / Luka / Sushang)', +) +Stagnant_Shadow_Rime = DungeonDetailed( + id=6, + name='Stagnant_Shadow_Rime', + cn='角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)', + cht='角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)', + en='Ascension: Ice (March 7th / Herta / Gepard / Pela)', + jp='キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)', + es='Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)', +) +Stagnant_Shadow_Mirage = DungeonDetailed( + id=7, + name='Stagnant_Shadow_Mirage', + cn='角色晋阶材料:虚数(瓦尔特 / 罗刹 / 驭空)', + cht='角色晉階材料:虛數(瓦爾特 / 羅剎 / 馭空)', + en='Ascension: Imaginary (Welt / Luocha / Yukong)', + jp='キャラクター昇格素材:虚数(ヴェルト / 羅刹 / 御空)', + es='Ascension: Imaginario (Welt / Luocha / Yukong)', +) +Stagnant_Shadow_Icicle = DungeonDetailed( + id=8, + name='Stagnant_Shadow_Icicle', + cn='角色晋阶材料:冰(彦卿)', + cht='角色晉階材料:冰(彥卿)', + en='Ascension: Ice (Yanqing)', + jp='キャラクター昇格素材:氷(彦卿)', + es='Ascension: Hielo (Yanqing)', +) +Stagnant_Shadow_Doom = DungeonDetailed( + id=9, + name='Stagnant_Shadow_Doom', + cn='角色晋阶材料:雷(卡芙卡 / 景元)', + cht='角色晉階材料:雷(卡芙卡 / 景元)', + en='Ascension: Lightning (Kafka / Jing Yuan)', + jp='キャラクター昇格素材:雷(カフカ / 景元)', + es='Ascension: Rayo (Kafka / Jing Yuan)', +) +Stagnant_Shadow_Puppetry = DungeonDetailed( + id=10, + name='Stagnant_Shadow_Puppetry', + cn='角色晋阶材料:虚数(丹恒•饮月)', + cht='角色晉階材料:虛數(丹恆•飲月)', + en='Ascension: Imaginary (Dan Heng • Imbibitor Lunae)', + jp='キャラクター昇格素材:虚数(丹恒・飲月)', + es='Ascension: Imaginario (Dan Heng - Imbibitor Lunae)', +) +Stagnant_Shadow_Abomination = DungeonDetailed( + id=11, + name='Stagnant_Shadow_Abomination', + cn='角色晋阶材料:量子(玲可 / 符玄)', + cht='角色晉階材料:量子(玲可 / 符玄)', + en='Ascension: Quantum (Lynx / Fu Xuan)', + jp='キャラクター昇格素材:量子(リンクス / 符玄)', + es='Ascension: Cuántico (Lynx / Fu Xuan)', +) +Stagnant_Shadow_Celestial = DungeonDetailed( + id=12, + name='Stagnant_Shadow_Celestial', + cn='角色晋阶材料:风(刃)', + cht='角色晉階材料:風(刃)', + en='Ascension: Wind (Blade)', + jp='キャラクター昇格素材:風(刃)', + es='Ascension: Viento (Blade)', +) diff --git a/tasks/item/relics.py b/tasks/item/relics.py index a0b06b3ce..abf7a4617 100644 --- a/tasks/item/relics.py +++ b/tasks/item/relics.py @@ -11,7 +11,43 @@ class RelicsUI(ItemUI): def _is_in_salvage(self) -> bool: return self.appear(ORDER_ASCENDING) or self.appear(ORDER_DESCENDING) + def salvage_exit(self, skip_first_screenshot=True): + """ + Pages: + in: rewards claimed + or _is_in_salvage() + out: GOTO_SALVAGE + """ + interval = Timer(1) + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + if self.appear(GOTO_SALVAGE): + logger.info("Salvage page exited") + break + if self.handle_reward(interval=2): + continue + if interval.reached() and self._is_in_salvage(): + logger.info(f'_is_in_salvage -> {CLOSE}') + self.device.click(CLOSE) + interval.reset() + continue + def salvage_relic(self, skip_first_screenshot=True) -> bool: + """ + Args: + skip_first_screenshot: + + Returns: + bool: If success + + Pages: + in: Any + out: page_item, GOTO_SALVAGE + """ logger.hr('Salvage Relic', level=2) self.item_goto(KEYWORD_ITEM_TAB.Relics, wait_until_stable=False) while 1: # relic tab -> salvage @@ -37,6 +73,7 @@ class RelicsUI(ItemUI): if timeout.reached(): logger.warning('Timeout when selecting first relic') + self.salvage_exit() return False # The first frame entering relic page, SALVAGE is a white button as it's the default state. # At the second frame, SALVAGE is disabled since no items are selected. @@ -67,22 +104,5 @@ class RelicsUI(ItemUI): if self.handle_popup_confirm(): continue - skip_first_screenshot = True - interval = Timer(1) - while 1: # rewards claimed -> relic tab page - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - - if self.appear(GOTO_SALVAGE): - logger.info("Salvage page exited") - break - if self.handle_reward(interval=2): - continue - if interval.reached() and self._is_in_salvage(): - logger.info(f'_is_in_salvage -> {CLOSE}') - self.device.click(CLOSE) - interval.reset() - continue + self.salvage_exit() return True