From 39ac8831df20894adb155b95053b3c14cb126242 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 7 Feb 2024 03:05:46 +0800 Subject: [PATCH] Dev: Extract dungeons with plane_id --- dev_tools/keyword_extract.py | 44 +-- dev_tools/keywords/dungeon_list.py | 74 +++++ module/config/config_updater.py | 14 +- tasks/dungeon/keywords/classes.py | 11 + tasks/dungeon/keywords/dungeon.py | 314 ++++++++++++++++----- tasks/dungeon/keywords/dungeon_detailed.py | 28 +- 6 files changed, 361 insertions(+), 124 deletions(-) create mode 100644 dev_tools/keywords/dungeon_list.py diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index e82f5073c..f325ce06a 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -1,7 +1,6 @@ import itertools import os import re -import typing as t from collections import defaultdict from functools import cache from hashlib import md5 @@ -13,19 +12,6 @@ from module.exception import ScriptError from module.logger import logger -def dungeon_name(name: str) -> str: - name = text_to_variable(name) - name = re.sub('Bud_of_(Memories|Aether|Treasures)', r'Calyx_Golden_\1', name) - name = re.sub('Bud_of_(.*)', r'Calyx_Crimson_\1', name).replace('Calyx_Crimson_Calyx_Crimson_', 'Calyx_Crimson_') - name = re.sub('Shape_of_(.*)', r'Stagnant_Shadow_\1', name) - name = re.sub('Path_of_(.*)', r'Cavern_of_Corrosion_Path_of_\1', name) - if name in ['Destruction_Beginning', 'End_of_the_Eternal_Freeze', 'Divine_Seed', 'Borehole_Planet_Old_Crater']: - name = f'Echo_of_War_{name}' - if name in ['The_Swarm_Disaster', 'Gold_and_Gears']: - name = f'Simulated_Universe_{name}' - return name - - def blessing_name(name: str) -> str: name = text_to_variable(name) name = re.sub(r'^\d', lambda match: f"_{match.group(0)}", name) @@ -56,31 +42,6 @@ class KeywordExtract: self.text_map['cn'] = TextMap('chs') self.keywords_id: list[int] = [] - def iter_guide(self) -> t.Iterable[int]: - file = os.path.join(TextMap.DATA_FOLDER, './ExcelOutput/GameplayGuideData.json') - # visited = set() - temp_save = "" - for data in read_file(file).values(): - hash_ = deep_get(data, keys='Name.Hash') - _, name = self.find_keyword(hash_, lang='cn') - if '永屹之城遗秘' in name: # load after all forgotten hall to make sure the same order in Game UI - temp_save = hash_ - continue - if '忘却之庭' in name: - continue - # if name in visited: - # continue - # visited.add(name) - yield hash_ - yield temp_save - # Consider rogue DLC as a dungeon - yield '寰宇蝗灾' - yield '黄金与机械' - # 'Memory of Chaos' is not a real dungeon, but represents a group - yield '混沌回忆' - yield '天艟求仙迷航录' - yield '永屹之城遗秘' - def find_keyword(self, keyword, lang) -> tuple[int, str]: """ Args: @@ -602,9 +563,8 @@ class KeywordExtract: self.load_keywords(['领取', '追踪']) self.write_keywords(keyword_class='BattlePassQuestState', output_file='./tasks/battle_pass/keywords/quest_state.py') - self.load_keywords(list(self.iter_guide())) - self.write_keywords(keyword_class='DungeonList', output_file='./tasks/dungeon/keywords/dungeon.py', - text_convert=dungeon_name) + from dev_tools.keywords.dungeon_list import GenerateDungeonList + GenerateDungeonList()() self.load_keywords(['进入', '传送', '追踪']) self.write_keywords(keyword_class='DungeonEntrance', output_file='./tasks/dungeon/keywords/dungeon_entrance.py') self.generate_shadow_with_characters() diff --git a/dev_tools/keywords/dungeon_list.py b/dev_tools/keywords/dungeon_list.py new file mode 100644 index 000000000..5de6b45b2 --- /dev/null +++ b/dev_tools/keywords/dungeon_list.py @@ -0,0 +1,74 @@ +import re +import typing as t + +from dev_tools.keywords.base import GenerateKeyword, text_to_variable +from module.base.decorator import cached_property +from module.config.utils import deep_get + + +def dungeon_name(name: str) -> str: + name = text_to_variable(name) + name = re.sub('Bud_of_(Memories|Aether|Treasures)', r'Calyx_Golden_\1', name) + name = re.sub('Bud_of_(.*)', r'Calyx_Crimson_\1', name).replace('Calyx_Crimson_Calyx_Crimson_', 'Calyx_Crimson_') + name = re.sub('Shape_of_(.*)', r'Stagnant_Shadow_\1', name) + name = re.sub('Path_of_(.*)', r'Cavern_of_Corrosion_Path_of_\1', name) + if name in ['Destruction_Beginning', 'End_of_the_Eternal_Freeze', 'Divine_Seed', 'Borehole_Planet_Old_Crater']: + name = f'Echo_of_War_{name}' + if name in ['The_Swarm_Disaster', 'Gold_and_Gears']: + name = f'Simulated_Universe_{name}' + return name + + +class GenerateDungeonList(GenerateKeyword): + output_file = './tasks/dungeon/keywords/dungeon.py' + + @cached_property + def data(self): + return self.read_file('./ExcelOutput/GameplayGuideData.json') + + def iter_keywords(self) -> t.Iterable[dict]: + for keyword in self.iter_dungeon(): + if isinstance(keyword, str): + yield dict( + text_id=self.find_keyword(keyword, lang='cn')[0], + plane_id=-1, + ) + else: + yield keyword + + def iter_dungeon(self): + temp_save = "" + for data in self.data.values(): + text_id = deep_get(data, keys='Name.Hash') + plane_id = deep_get(data, 'MapEntranceID', 0) + _, name = self.find_keyword(text_id, lang='cn') + if '永屹之城遗秘' in name: # load after all forgotten hall to make sure the same order in Game UI + temp_save = text_id + continue + if '忘却之庭' in name: + continue + yield dict( + text_id=text_id, + plane_id=plane_id, + ) + if temp_save: + yield temp_save + # Consider rogue DLC as a dungeon + yield '寰宇蝗灾' + yield '黄金与机械' + # 'Memory of Chaos' is not a real dungeon, but represents a group + yield '混沌回忆' + yield '天艟求仙迷航录' + yield '永屹之城遗秘' + + def convert_name(self, text: str, keyword: dict) -> str: + text = super().convert_name(text, keyword=keyword) + text = dungeon_name(text) + + # Add plane suffix + from tasks.map.keywords import MapPlane + + if text.startswith('Calyx_Crimson'): + plane = MapPlane.find_plane_id(keyword['plane_id']) + text = f'{text}_{plane.name}' + return text diff --git a/module/config/config_updater.py b/module/config/config_updater.py index 3267a1baa..cba3f75c6 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -66,11 +66,17 @@ class ConfigGenerator: from tasks.dungeon.keywords import DungeonList option_add( keys='Dungeon.Name.option', - options=[dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_daily_dungeon]) + options=[dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Calyx_Golden] \ + + [dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Calyx_Crimson] \ + + [dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Stagnant_Shadow] \ + + [dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Cavern_of_Corrosion] + ) # Double events option_add( keys='Dungeon.NameAtDoubleCalyx.option', - options=[dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Calyx]) + options=[dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Calyx_Golden] \ + + [dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Calyx_Crimson] + ) option_add( keys='Dungeon.NameAtDoubleRelic.option', options=[dungeon.name for dungeon in DungeonList.instances.values() if dungeon.is_Cavern_of_Corrosion]) @@ -407,9 +413,9 @@ class ConfigGenerator: deep_set(new, keys=['AchievableQuest', quest.name, option], value=value) # Echo of War - from tasks.map.keywords import MapWorld dungeons = [d for d in DungeonList.instances.values() if d.is_Echo_of_War] - for world, dungeon in zip(MapWorld.instances.values(), dungeons): + for dungeon in dungeons: + world = dungeon.plane.world world_name = world.__getattribute__(ingame_lang) dungeon_name = dungeon.__getattribute__(ingame_lang) value = f'{dungeon_name} ({world_name})' diff --git a/tasks/dungeon/keywords/classes.py b/tasks/dungeon/keywords/classes.py index c531cf4cb..e7fa1e9a4 100644 --- a/tasks/dungeon/keywords/classes.py +++ b/tasks/dungeon/keywords/classes.py @@ -20,6 +20,17 @@ class DungeonTab(Keyword): class DungeonList(Keyword): instances: ClassVar = {} + plane_id: int + + @cached_property + def plane(self): + """ + Returns: + MapPlane: MapPlane object or None + """ + from tasks.map.keywords import MapPlane + return MapPlane.find_plane_id(self.plane_id) + @cached_property def is_Calyx_Golden(self): return 'Calyx_Golden' in self.name diff --git a/tasks/dungeon/keywords/dungeon.py b/tasks/dungeon/keywords/dungeon.py index 4ff0259c4..5bb82d5d8 100644 --- a/tasks/dungeon/keywords/dungeon.py +++ b/tasks/dungeon/keywords/dungeon.py @@ -3,435 +3,603 @@ from .classes import DungeonList # This file was auto-generated, do not modify it manually. To generate: # ``` python -m dev_tools.keyword_extract ``` -Calyx_Golden_Memories = DungeonList( +Calyx_Golden_Memories_Jarilo_VI = DungeonList( id=1, - name='Calyx_Golden_Memories', - cn='回忆之蕾•拟造花萼(金)', - cht='回憶之蕾•擬造花萼(金)', - en='Bud of Memories', - jp='疑似花萼(金)・回憶の蕾', - es='Flor de los recuerdos', + name='Calyx_Golden_Memories_Jarilo_VI', + cn='回忆之蕾•雅利洛-Ⅵ', + cht='回憶之蕾•雅利洛-Ⅵ', + en='Bud of Memories (Jarilo-VI)', + jp='回憶の蕾・ヤリーロ-VI', + es='Flor de los recuerdos (Jarilo-VI)', + plane_id=2010101, ) -Calyx_Golden_Aether = DungeonList( +Calyx_Golden_Aether_Jarilo_VI = DungeonList( id=2, - name='Calyx_Golden_Aether', - cn='以太之蕾•拟造花萼(金)', - cht='乙太之蕾•擬造花萼(金)', - en='Bud of Aether', - jp='疑似花萼(金)・エーテルの蕾', - es='Flor de éter', + name='Calyx_Golden_Aether_Jarilo_VI', + cn='以太之蕾•雅利洛-Ⅵ', + cht='乙太之蕾•雅利洛-Ⅵ', + en='Bud of Aether (Jarilo-VI)', + jp='エーテルの蕾・ヤリーロ-VI', + es='Flor de éter (Jarilo-VI)', + plane_id=2011101, ) -Calyx_Golden_Treasures = DungeonList( +Calyx_Golden_Treasures_Jarilo_VI = DungeonList( id=3, - name='Calyx_Golden_Treasures', - cn='藏珍之蕾•拟造花萼(金)', - cht='藏珍之蕾•擬造花萼(金)', - en='Bud of Treasures', - jp='疑似花萼(金)・秘蔵の蕾', - es='Flor de tesoros', + name='Calyx_Golden_Treasures_Jarilo_VI', + cn='藏珍之蕾•雅利洛-Ⅵ', + cht='藏珍之蕾•雅利洛-Ⅵ', + en='Bud of Treasures (Jarilo-VI)', + jp='秘蔵の蕾・ヤリーロ-VI', + es='Flor de tesoros (Jarilo-VI)', + plane_id=2012101, ) -Calyx_Crimson_Destruction = DungeonList( +Calyx_Crimson_Destruction_Herta_StorageZone = DungeonList( id=4, - name='Calyx_Crimson_Destruction', + name='Calyx_Crimson_Destruction_Herta_StorageZone', cn='毁灭之蕾•拟造花萼(赤)', cht='毀滅之蕾•擬造花萼(赤)', en='Bud of Destruction', jp='疑似花萼(赤)・壊滅の蕾', es='Flor de la Destrucción', + plane_id=2000201, ) -Calyx_Crimson_Preservation = DungeonList( +Calyx_Crimson_Preservation_Herta_SupplyZone = DungeonList( id=5, - name='Calyx_Crimson_Preservation', + name='Calyx_Crimson_Preservation_Herta_SupplyZone', cn='存护之蕾•拟造花萼(赤)', cht='存護之蕾•擬造花萼(赤)', en='Bud of Preservation', jp='疑似花萼(赤)・存護の蕾', es='Flor de la Conservación', + plane_id=2000301, ) -Calyx_Crimson_The_Hunt = DungeonList( +Calyx_Crimson_The_Hunt_Jarilo_OutlyingSnowPlains = DungeonList( id=6, - name='Calyx_Crimson_The_Hunt', + name='Calyx_Crimson_The_Hunt_Jarilo_OutlyingSnowPlains', cn='巡猎之蕾•拟造花萼(赤)', cht='巡獵之蕾•擬造花萼(赤)', en='Bud of The Hunt', jp='疑似花萼(赤)・巡狩の蕾', es='Flor de la Cacería', + plane_id=2010101, ) -Calyx_Crimson_Abundance = DungeonList( +Calyx_Crimson_Abundance_Jarilo_BackwaterPass = DungeonList( id=7, - name='Calyx_Crimson_Abundance', + name='Calyx_Crimson_Abundance_Jarilo_BackwaterPass', cn='丰饶之蕾•拟造花萼(赤)', cht='豐饒之蕾•擬造花萼(赤)', en='Bud of Abundance', jp='疑似花萼(赤)・豊穣の蕾', es='Flor de la Abundancia', + plane_id=2011101, ) -Calyx_Crimson_Erudition = DungeonList( +Calyx_Crimson_Erudition_Jarilo_RivetTown = DungeonList( id=8, - name='Calyx_Crimson_Erudition', + name='Calyx_Crimson_Erudition_Jarilo_RivetTown', cn='智识之蕾•拟造花萼(赤)', cht='智識之蕾•擬造花萼(赤)', en='Bud of Erudition', jp='疑似花萼(赤)・知恵の蕾', es='Flor de la Erudición', + plane_id=2012201, ) -Calyx_Crimson_Harmony = DungeonList( +Calyx_Crimson_Harmony_Jarilo_RobotSettlement = DungeonList( id=9, - name='Calyx_Crimson_Harmony', + name='Calyx_Crimson_Harmony_Jarilo_RobotSettlement', cn='同谐之蕾•拟造花萼(赤)', cht='同諧之蕾•擬造花萼(赤)', en='Bud of Harmony', jp='疑似花萼(赤)・調和の蕾', es='Flor de la Armonía', + plane_id=2012301, ) -Calyx_Crimson_Nihility = DungeonList( +Calyx_Crimson_Nihility_Jarilo_GreatMine = DungeonList( id=10, - name='Calyx_Crimson_Nihility', + name='Calyx_Crimson_Nihility_Jarilo_GreatMine', cn='虚无之蕾•拟造花萼(赤)', cht='虛無之蕾•擬造花萼(赤)', en='Bud of Nihility', jp='疑似花萼(赤)・虚無の蕾', es='Flor de la Nihilidad', + plane_id=2012101, +) +Calyx_Golden_Memories_The_Xianzhou_Luofu = DungeonList( + id=11, + name='Calyx_Golden_Memories_The_Xianzhou_Luofu', + cn='回忆之蕾•仙舟「罗浮」', + cht='回憶之蕾•仙舟「羅浮」', + en='Bud of Memories (The Xianzhou Luofu)', + jp='回憶の蕾・仙舟「羅浮」', + es='Flor de los recuerdos (El Luofu de Xianzhou)', + plane_id=2021101, +) +Calyx_Golden_Aether_The_Xianzhou_Luofu = DungeonList( + id=12, + name='Calyx_Golden_Aether_The_Xianzhou_Luofu', + cn='以太之蕾•仙舟「罗浮」', + cht='乙太之蕾•仙舟「羅浮」', + en='Bud of Aether (The Xianzhou Luofu)', + jp='エーテルの蕾・仙舟「羅浮」', + es='Flor de éter (El Luofu de Xianzhou)', + plane_id=2022101, +) +Calyx_Golden_Treasures_The_Xianzhou_Luofu = DungeonList( + id=13, + name='Calyx_Golden_Treasures_The_Xianzhou_Luofu', + cn='藏珍之蕾•仙舟「罗浮」', + cht='藏珍之蕾•仙舟「羅浮」', + en='Bud of Treasures (The Xianzhou Luofu)', + jp='秘蔵の蕾・仙舟「羅浮」', + es='Flor de tesoros (El Luofu de Xianzhou)', + plane_id=2022201, +) +Calyx_Golden_Memories_Penacony = DungeonList( + id=14, + name='Calyx_Golden_Memories_Penacony', + cn='回忆之蕾•匹诺康尼', + cht='回憶之蕾•匹諾康尼', + en='Bud of Memories (Penacony)', + jp='回憶の蕾・ピノコニー', + es='Flor de los recuerdos (Colonipenal)', + plane_id=2031301, +) +Calyx_Golden_Aether_Penacony = DungeonList( + id=15, + name='Calyx_Golden_Aether_Penacony', + cn='以太之蕾•匹诺康尼', + cht='乙太之蕾•匹諾康尼', + en='Bud of Aether (Penacony)', + jp='エーテルの蕾・ピノコニー', + es='Flor de éter (Colonipenal)', + plane_id=2031201, +) +Calyx_Golden_Treasures_Penacony = DungeonList( + id=16, + name='Calyx_Golden_Treasures_Penacony', + cn='藏珍之蕾•匹诺康尼', + cht='藏珍之蕾•匹諾康尼', + en='Bud of Treasures (Penacony)', + jp='秘蔵の蕾・ピノコニー', + es='Flor de tesoros (Colonipenal)', + plane_id=2031101, +) +Calyx_Crimson_Nihility_Luofu_AlchemyCommission = DungeonList( + id=17, + name='Calyx_Crimson_Nihility_Luofu_AlchemyCommission', + cn='虚无之蕾•拟造花萼(赤)', + cht='虛無之蕾•擬造花萼(赤)', + en='Bud of Nihility', + jp='疑似花萼(赤)・虚無の蕾', + es='Flor de la Nihilidad', + plane_id=2023101, +) +Calyx_Crimson_Destruction_Luofu_ScalegorgeWaterscape = DungeonList( + id=18, + name='Calyx_Crimson_Destruction_Luofu_ScalegorgeWaterscape', + cn='毁灭之蕾•拟造花萼(赤)', + cht='毀滅之蕾•擬造花萼(赤)', + en='Bud of Destruction', + jp='疑似花萼(赤)・壊滅の蕾', + es='Flor de la Destrucción', + plane_id=2023201, +) +Calyx_Crimson_Harmony_Penacony_TheReverieDreamscape = DungeonList( + id=19, + name='Calyx_Crimson_Harmony_Penacony_TheReverieDreamscape', + cn='同谐之蕾•拟造花萼(赤)', + cht='同諧之蕾•擬造花萼(赤)', + en='Bud of Harmony', + jp='疑似花萼(赤)・調和の蕾', + es='Flor de la Armonía', + plane_id=2031101, ) Stagnant_Shadow_Quanta = DungeonList( - id=11, + id=20, name='Stagnant_Shadow_Quanta', cn='空海之形•凝滞虚影', cht='空海之形•凝滯虛影', en='Shape of Quanta', jp='凝結虚影・虚海の形', es='Forma del cuanto', + plane_id=2000101, ) Stagnant_Shadow_Gust = DungeonList( - id=12, + id=21, name='Stagnant_Shadow_Gust', cn='巽风之形•凝滞虚影', cht='巽風之形•凝滯虛影', en='Shape of Gust', jp='凝結虚影・薫風の形', es='Forma del aire', + plane_id=2012201, ) Stagnant_Shadow_Fulmination = DungeonList( - id=13, + id=22, name='Stagnant_Shadow_Fulmination', cn='鸣雷之形•凝滞虚影', cht='鳴雷之形•凝滯虛影', en='Shape of Fulmination', jp='凝結虚影・鳴雷の形', es='Forma del trueno', + plane_id=2013201, ) Stagnant_Shadow_Blaze = DungeonList( - id=14, + id=23, name='Stagnant_Shadow_Blaze', cn='炎华之形•凝滞虚影', cht='炎華之形•凝滯虛影', en='Shape of Blaze', jp='凝結虚影・炎華の形', es='Forma de las llamas', + plane_id=2013101, ) Stagnant_Shadow_Spike = DungeonList( - id=15, + id=24, name='Stagnant_Shadow_Spike', cn='锋芒之形•凝滞虚影', cht='鋒芒之形•凝滯虛影', en='Shape of Spike', jp='凝結虚影・切先の形', es='Forma afilada', + plane_id=2012101, ) Stagnant_Shadow_Rime = DungeonList( - id=16, + id=25, name='Stagnant_Shadow_Rime', cn='霜晶之形•凝滞虚影', cht='霜晶之形•凝滯虛影', en='Shape of Rime', jp='凝結虚影・霜晶の形', es='Forma de la escarcha', + plane_id=2013201, ) Stagnant_Shadow_Mirage = DungeonList( - id=17, + id=26, name='Stagnant_Shadow_Mirage', cn='幻光之形•凝滞虚影', cht='幻光之形•凝滯虛影', en='Shape of Mirage', jp='凝結虚影・幻光の形', es='Forma del espejismo', + plane_id=2011101, ) Stagnant_Shadow_Icicle = DungeonList( - id=18, + id=27, name='Stagnant_Shadow_Icicle', cn='冰棱之形•凝滞虚影', cht='冰稜之形•凝滯虛影', en='Shape of Icicle', jp='凝結虚影・氷柱の形', es='Forma del témpano', + plane_id=2021101, ) Stagnant_Shadow_Doom = DungeonList( - id=19, + id=28, name='Stagnant_Shadow_Doom', cn='震厄之形•凝滞虚影', cht='震厄之形•凝滯虛影', en='Shape of Doom', jp='凝結虚影・震厄の形', es='Forma de la perdición', + plane_id=2021201, ) Stagnant_Shadow_Puppetry = DungeonList( - id=20, + id=29, name='Stagnant_Shadow_Puppetry', cn='偃偶之形•凝滞虚影', cht='偃偶之形•凝滯虛影', en='Shape of Puppetry', jp='凝結虚影・傀儡の形', es='Forma de las marionetas', + plane_id=2022201, ) Stagnant_Shadow_Abomination = DungeonList( - id=21, + id=30, name='Stagnant_Shadow_Abomination', cn='孽兽之形•凝滞虚影', cht='孽獸之形•凝滯虛影', en='Shape of Abomination', jp='凝結虚影・厄獣の形', es='Forma de la abominación', + plane_id=2023201, ) Stagnant_Shadow_Scorch = DungeonList( - id=22, + id=31, name='Stagnant_Shadow_Scorch', cn='燔灼之形•凝滞虚影', cht='燔灼之形•凝滯虛影', en='Shape of Scorch', jp='凝結虚影・燔灼の形', es='Forma abrasada', + plane_id=2012101, ) Stagnant_Shadow_Celestial = DungeonList( - id=23, + id=32, name='Stagnant_Shadow_Celestial', cn='天人之形•凝滞虚影', cht='天人之形•凝滯虛影', en='Shape of Celestial', jp='凝結虚影・天人の形', es='Forma de lo celestial', + plane_id=2023101, ) Stagnant_Shadow_Perdition = DungeonList( - id=24, + id=33, name='Stagnant_Shadow_Perdition', cn='幽府之形•凝滞虚影', cht='幽府之形•凝滯虛影', en='Shape of Perdition', jp='凝結虚影・幽府の形', es='Forma del aislamiento', + plane_id=2022301, +) +Stagnant_Shadow_Nectar = DungeonList( + id=34, + name='Stagnant_Shadow_Nectar', + cn='冰酿之形•凝滞虚影', + cht='冰釀之形•凝滯虛影', + en='Shape of Nectar', + jp='凝結虚影・氷醸の形', + es='Forma del néctar', + plane_id=2031101, +) +Stagnant_Shadow_Roast = DungeonList( + id=35, + name='Stagnant_Shadow_Roast', + cn='焦炙之形•凝滞虚影', + cht='焦炙之形•凝滯虛影', + en='Shape of Roast', + jp='凝結虚影・焦灼の形', + es='Forma del agostamiento', + plane_id=2031301, ) Cavern_of_Corrosion_Path_of_Gelid_Wind = DungeonList( - id=25, + id=36, name='Cavern_of_Corrosion_Path_of_Gelid_Wind', cn='霜风之径•侵蚀隧洞', cht='霜風之徑•侵蝕隧洞', en='Path of Gelid Wind', jp='侵蝕トンネル・霜風の路', es='Senda del viento gélido', + plane_id=2000201, ) Cavern_of_Corrosion_Path_of_Jabbing_Punch = DungeonList( - id=26, + id=37, name='Cavern_of_Corrosion_Path_of_Jabbing_Punch', cn='迅拳之径•侵蚀隧洞', cht='迅拳之徑•侵蝕隧洞', en='Path of Jabbing Punch', jp='侵蝕トンネル・迅拳の路', es='Senda de los puños rápidos', + plane_id=2013101, ) Cavern_of_Corrosion_Path_of_Drifting = DungeonList( - id=27, + id=38, name='Cavern_of_Corrosion_Path_of_Drifting', cn='漂泊之径•侵蚀隧洞', cht='漂泊之徑•侵蝕隧洞', en='Path of Drifting', jp='侵蝕トンネル・漂泊の路', es='Senda de la deriva', + plane_id=2013201, ) Cavern_of_Corrosion_Path_of_Providence = DungeonList( - id=28, + id=39, name='Cavern_of_Corrosion_Path_of_Providence', cn='睿治之径•侵蚀隧洞', cht='睿治之徑•侵蝕隧洞', en='Path of Providence', jp='侵蝕トンネル・睿治の路', es='Senda de la providencia', + plane_id=2013401, ) Cavern_of_Corrosion_Path_of_Holy_Hymn = DungeonList( - id=29, + id=40, name='Cavern_of_Corrosion_Path_of_Holy_Hymn', cn='圣颂之径•侵蚀隧洞', cht='聖頌之徑•侵蝕隧洞', en='Path of Holy Hymn', jp='侵蝕トンネル・聖頌の路', es='Senda del himno sagrado', + plane_id=2021101, ) Cavern_of_Corrosion_Path_of_Conflagration = DungeonList( - id=30, + id=41, name='Cavern_of_Corrosion_Path_of_Conflagration', cn='野焰之径•侵蚀隧洞', cht='野焰之徑•侵蝕隧洞', en='Path of Conflagration', jp='侵蝕トンネル・野焔の路', es='Senda de la conflagración', + plane_id=2021201, ) Cavern_of_Corrosion_Path_of_Elixir_Seekers = DungeonList( - id=31, + id=42, name='Cavern_of_Corrosion_Path_of_Elixir_Seekers', cn='药使之径•侵蚀隧洞', cht='藥使之徑•侵蝕隧洞', en='Path of Elixir Seekers', jp='侵蝕トンネル・薬使の路', es='Senda de los elixires', + plane_id=2023101, ) Cavern_of_Corrosion_Path_of_Darkness = DungeonList( - id=32, + id=43, name='Cavern_of_Corrosion_Path_of_Darkness', cn='幽冥之径•侵蚀隧洞', cht='幽冥之徑•侵蝕隧洞', en='Path of Darkness', jp='侵蝕トンネル・幽冥の路', es='Senda de la oscuridad', + plane_id=2022301, +) +Cavern_of_Corrosion_Path_of_Dreamdive = DungeonList( + id=44, + name='Cavern_of_Corrosion_Path_of_Dreamdive', + cn='梦潜之径•侵蚀隧洞', + cht='夢潛之徑•侵蝕隧洞', + en='Path of Dreamdive', + jp='侵蝕トンネル・夢潜の路', + es='Senda de los sueños', + plane_id=2031101, ) Echo_of_War_Destruction_Beginning = DungeonList( - id=33, + id=45, name='Echo_of_War_Destruction_Beginning', cn='毁灭的开端•历战余响', cht='毀滅的開端•歷戰餘響', en="Destruction's Beginning", jp='歴戦余韻・壊滅の始まり', es='El principio de la Destrucción', + plane_id=2000301, ) Echo_of_War_End_of_the_Eternal_Freeze = DungeonList( - id=34, + id=46, name='Echo_of_War_End_of_the_Eternal_Freeze', cn='寒潮的落幕•历战余响', cht='寒潮的落幕•歷戰餘響', en='End of the Eternal Freeze', jp='歴戦余韻・寒波の幕切れ', es='El fin del Hielo Eterno', + plane_id=2013401, ) Echo_of_War_Divine_Seed = DungeonList( - id=35, + id=47, name='Echo_of_War_Divine_Seed', cn='不死的神实•历战余响', cht='不死的神實•歷戰餘響', en='Divine Seed', jp='歴戦余韻・不死の神実', es='Semilla divina', + plane_id=2023201, ) Echo_of_War_Borehole_Planet_Old_Crater = DungeonList( - id=36, + id=48, name='Echo_of_War_Borehole_Planet_Old_Crater', cn='蛀星的旧靥•历战余响', cht='蛀星的舊靨•歷戰餘響', en="Borehole Planet's Old Crater", jp='歴戦余韻・星を蝕む往日の面影', es='Cráter del planeta devorado', + plane_id=2000401, ) Simulated_Universe_World_1 = DungeonList( - id=37, + id=49, name='Simulated_Universe_World_1', cn='第一世界•模拟宇宙', cht='第一世界•模擬宇宙', en='Simulated Universe: World 1', jp='第一世界・模擬宇宙', es='Mundo 1', + plane_id=100000104, ) Simulated_Universe_World_3 = DungeonList( - id=38, + id=50, name='Simulated_Universe_World_3', cn='第三世界•模拟宇宙', cht='第三世界•模擬宇宙', en='Simulated Universe: World 3', jp='第三世界・模擬宇宙', es='Mundo 3', + plane_id=100000104, ) Simulated_Universe_World_4 = DungeonList( - id=39, + id=51, name='Simulated_Universe_World_4', cn='第四世界•模拟宇宙', cht='第四世界•模擬宇宙', en='Simulated Universe: World 4', jp='第四世界・模擬宇宙', es='Mundo 4', + plane_id=100000104, ) Simulated_Universe_World_5 = DungeonList( - id=40, + id=52, name='Simulated_Universe_World_5', cn='第五世界•模拟宇宙', cht='第五世界•模擬宇宙', en='Simulated Universe: World 5', jp='第五世界・模擬宇宙', es='Mundo 5', + plane_id=100000104, ) Simulated_Universe_World_6 = DungeonList( - id=41, + id=53, name='Simulated_Universe_World_6', cn='第六世界•模拟宇宙', cht='第六世界•模擬宇宙', en='Simulated Universe: World 6', jp='第六世界・模擬宇宙', es='Mundo 6', + plane_id=100000104, ) Simulated_Universe_World_7 = DungeonList( - id=42, + id=54, name='Simulated_Universe_World_7', cn='第七世界•模拟宇宙', cht='第七世界•模擬宇宙', en='Simulated Universe: World 7', jp='第七世界・模擬宇宙', es='Mundo 7', + plane_id=100000104, ) Simulated_Universe_World_8 = DungeonList( - id=43, + id=55, name='Simulated_Universe_World_8', cn='第八世界•模拟宇宙', cht='第八世界•模擬宇宙', en='Simulated Universe: World 8', jp='第八世界・模擬宇宙', es='Mundo 8', + plane_id=100000104, ) Simulated_Universe_The_Swarm_Disaster = DungeonList( - id=44, + id=56, name='Simulated_Universe_The_Swarm_Disaster', cn='寰宇蝗灾', cht='寰宇蝗災', en='The Swarm Disaster', jp='宇宙の蝗害', es='La Plaga', + plane_id=-1, ) Simulated_Universe_Gold_and_Gears = DungeonList( - id=45, + id=57, name='Simulated_Universe_Gold_and_Gears', cn='黄金与机械', cht='黃金與機械', en='Gold and Gears', jp='黄金と機械', es='Oro y maquinaria', + plane_id=-1, ) Memory_of_Chaos = DungeonList( - id=46, + id=58, name='Memory_of_Chaos', cn='混沌回忆', cht='混沌回憶', en='Memory of Chaos', jp='混沌の記憶', es='Evocación caótica', + plane_id=-1, ) The_Voyage_of_Navis_Astriger = DungeonList( - id=47, + id=59, name='The_Voyage_of_Navis_Astriger', cn='天艟求仙迷航录', cht='天艟求仙迷航錄', en='The Voyage of Navis Astriger', jp='天艟求仙放浪記', es='El viaje de las naves astriger', + plane_id=-1, ) The_Last_Vestiges_of_Towering_Citadel = DungeonList( - id=48, + id=60, name='The_Last_Vestiges_of_Towering_Citadel', cn='永屹之城遗秘', cht='永屹之城遺秘', en='The Last Vestiges of Towering Citadel', jp='永屹の城の秘密', es='Herencia de la Ciudadela Imponente', + plane_id=-1, ) diff --git a/tasks/dungeon/keywords/dungeon_detailed.py b/tasks/dungeon/keywords/dungeon_detailed.py index 6c752846d..89a905750 100644 --- a/tasks/dungeon/keywords/dungeon_detailed.py +++ b/tasks/dungeon/keywords/dungeon_detailed.py @@ -114,11 +114,11 @@ Stagnant_Shadow_Scorch = DungeonDetailed( Stagnant_Shadow_Celestial = DungeonDetailed( id=13, name='Stagnant_Shadow_Celestial', - cn='角色晋阶材料:风(刃 / 藿藿)', - cht='角色晉階材料:風(刃 / 藿藿)', - en='Ascension: Wind (Blade / Huohuo)', - jp='キャラクター昇格素材:風(刃 / フォフォ)', - es='Ascension: Viento (Blade / Huohuo)', + cn='角色晋阶材料:风(刃 / 藿藿 / 黑天鹅)', + cht='角色晉階材料:風(刃 / 藿藿 / 黑天鵝)', + en='Ascension: Wind (Blade / Huohuo / Black Swan)', + jp='キャラクター昇格素材:風(刃 / フォフォ / ブラックスワン)', + es='Ascension: Viento (Blade / Huohuo / Cisne Negro)', ) Stagnant_Shadow_Perdition = DungeonDetailed( id=14, @@ -129,3 +129,21 @@ Stagnant_Shadow_Perdition = DungeonDetailed( jp='キャラクター昇格素材:物理(寒鴉 / アルジェンティ)', es='Ascension: Físico (Hanya / Argenti)', ) +Stagnant_Shadow_Nectar = DungeonDetailed( + id=15, + name='Stagnant_Shadow_Nectar', + cn='角色晋阶材料:冰(米沙)', + cht='角色晉階材料:冰(米沙)', + en='Ascension: Ice (Misha)', + jp='キャラクター昇格素材:氷(ミーシャ)', + es='Ascension: Hielo (Misha)', +) +Stagnant_Shadow_Roast = DungeonDetailed( + id=16, + name='Stagnant_Shadow_Roast', + cn='角色晋阶材料:量子(花火)', + cht='角色晉階材料:量子(花火)', + en='Ascension: Quantum (Sparkle)', + jp='キャラクター昇格素材:量子(花火)', + es='Ascension: Cuántico (Sparkle)', +)