From 9bcb3156158bd19038c59b443e65d5cf8b9f3c3a Mon Sep 17 00:00:00 2001 From: Zero Date: Wed, 31 Jul 2024 14:28:28 +0800 Subject: [PATCH 1/3] Upd: keyword_extract and i18n --- ...{March7th.png => March7thPreservation.png} | Bin dev_tools/keyword_extract.py | 71 ++++++++----- dev_tools/keywords/assignment.py | 15 +-- dev_tools/keywords/base.py | 4 +- dev_tools/keywords/dungeon_list.py | 2 +- dev_tools/keywords/item.py | 21 ++-- dev_tools/keywords/map_plane.py | 4 +- module/config/argument/args.json | 18 ++-- module/config/config_generated.py | 2 +- module/config/config_updater.py | 2 +- module/config/i18n/en-US.json | 18 ++-- module/config/i18n/es-ES.json | 26 ++--- module/config/i18n/ja-JP.json | 18 ++-- module/config/i18n/zh-CN.json | 18 ++-- module/config/i18n/zh-TW.json | 18 ++-- tasks/character/keywords/__init__.py | 2 +- tasks/character/keywords/character_list.py | 97 +++++++++++------- tasks/character/keywords/height.py | 2 +- tasks/dungeon/keywords/dungeon.py | 26 ++--- tasks/dungeon/keywords/dungeon_detailed.py | 30 +++--- tasks/map/keywords/plane.py | 37 ++++--- tasks/rogue/keywords/bonus.py | 36 +++++++ tasks/rogue/keywords/event_option.py | 8 +- tasks/rogue/keywords/event_title.py | 8 +- 24 files changed, 297 insertions(+), 186 deletions(-) rename assets/character/{March7th.png => March7thPreservation.png} (100%) diff --git a/assets/character/March7th.png b/assets/character/March7thPreservation.png similarity index 100% rename from assets/character/March7th.png rename to assets/character/March7thPreservation.png diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index bae260569..34c608e3a 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -124,6 +124,10 @@ class KeywordExtract: """ quest_data = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'QuestData.json')) + quest_data = { + str(deep_get(data, 'QuestID')): data + for data in quest_data + } quests_hash = [quest_data[str(quest_id)]["QuestTitle"]["Hash"] for quest_id in quests] quest_keywords = list(dict.fromkeys([self.text_map[lang].find(quest_hash)[1] for quest_hash in quests_hash])) self.load_keywords(quest_keywords, lang) @@ -198,14 +202,14 @@ class KeywordExtract: def generate_daily_quests(self): daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json')) - self.load_quests(daily_quest.keys()) + self.load_quests([deep_get(data, 'DailyID') for data in daily_quest]) self.write_daily_quest_keywords() def load_character_name_keywords(self, lang='en'): file_name = 'ItemConfigAvatarPlayerIcon.json' path = os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', file_name) character_data = read_file(path) - characters_hash = [character_data[key]["ItemName"]["Hash"] for key in character_data] + characters_hash = [data["ItemName"]["Hash"] for data in character_data] text_map = self.text_map[lang] keywords_id = sorted( @@ -216,36 +220,45 @@ class KeywordExtract: def generate_shadow_with_characters(self): # Damage type -> damage hash damage_info = dict() - for type_name, data in read_file(os.path.join( + for data in read_file(os.path.join( TextMap.DATA_FOLDER, 'ExcelOutput', 'DamageType.json' - )).items(): + )): + type_name = deep_get(data, 'ID', 0) 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( + + def merge_same(data: list[dict],keyword) -> list: + mp = defaultdict(dict) + for d in data: + length = len(mp[d[keyword]]) + mp[d[keyword]][str(length)] = d + return mp.values() + + for data in merge_same(read_file(os.path.join( TextMap.DATA_FOLDER, 'ExcelOutput', 'AvatarPromotionConfig.json' - )).values(): + )),keyword='AvatarID'): 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( + for data in merge_same(read_file(os.path.join( TextMap.DATA_FOLDER, 'ExcelOutput', 'MappingInfo.json' - )).values(): + )),keyword='ID'): farm_type = deep_get(data, '0.FarmType') if farm_type != 'ELEMENT': continue @@ -351,7 +364,7 @@ class KeywordExtract: def generate_battle_pass_quests(self): battle_pass_quests = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'BattlePassConfig.json')) - latest_quests = list(battle_pass_quests.values())[-1] + latest_quests = list(battle_pass_quests)[-1] week_quest_list = deep_get(latest_quests, "WeekQuestList") week_order1 = deep_get(latest_quests, "WeekOrder1") week_chain_quest_list = deep_get(latest_quests, "WeekChainQuestList") @@ -362,30 +375,38 @@ class KeywordExtract: def generate_rogue_buff(self): # paths aeons = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueAeonDisplay.json')) - aeons_hash = [deep_get(aeon, 'RogueAeonPathName2.Hash') for aeon in aeons.values()] + aeons_hash = [deep_get(aeon, 'RogueAeonPathName2.Hash') for aeon in aeons] self.keywords_id = aeons_hash self.write_keywords(keyword_class='RoguePath', output_file='./tasks/rogue/keywords/path.py') # blessings blessings_info = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueBuff.json')) blessings_name_map = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueMazeBuff.json')) - blessings_id = [deep_get(blessing, '1.MazeBuffID') for blessing in blessings_info.values() - if not deep_get(blessing, '1.AeonID')][1:] - resonances_id = [deep_get(blessing, '1.MazeBuffID') for blessing in blessings_info.values() - if deep_get(blessing, '1.AeonID')] + blessings_name_map = { + deep_get(data, 'ID'): data + for data in blessings_name_map + } + blessings_id = [deep_get(blessing, 'MazeBuffID') for blessing in blessings_info + if not deep_get(blessing, 'AeonID')][1:] + resonances_id = [deep_get(blessing, 'MazeBuffID') for blessing in blessings_info + if deep_get(blessing, 'AeonID')] + blessings_info = { + str(deep_get(data, 'MazeBuffID')): data + for data in blessings_info if deep_get(data, 'MazeBuffLevel') == 1 + } # ignore endless buffs endless_buffs = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueEndlessMegaBuffDesc.json')) - endless_buff_ids = [int(id_) for id_ in endless_buffs] + endless_buff_ids = [int(deep_get(data,'MazeBuffID')) for data in endless_buffs] blessings_id = [id_ for id_ in blessings_id if id_ not in endless_buff_ids] def get_blessing_infos(id_list, with_enhancement: bool): - blessings_hash = [deep_get(blessings_name_map, f"{blessing_id}.1.BuffName.Hash") + blessings_hash = [deep_get(blessings_name_map, f"{blessing_id}.BuffName.Hash") for blessing_id in id_list] - blessings_path_id = {blessing_hash: int(deep_get(blessings_info, f'{blessing_id}.1.RogueBuffType')) - 119 + blessings_path_id = {blessing_hash: int(deep_get(blessings_info, f'{blessing_id}.RogueBuffType')) - 119 # 119 is the magic number make type match with path in keyword above for blessing_hash, blessing_id in zip(blessings_hash, id_list)} - blessings_category = {blessing_hash: deep_get(blessings_info, f'{blessing_id}.1.RogueBuffCategory') + blessings_category = {blessing_hash: deep_get(blessings_info, f'{blessing_id}.RogueBuffCategory') for blessing_hash, blessing_id in zip(blessings_hash, id_list)} category_map = { "Common": 1, @@ -418,8 +439,8 @@ class KeywordExtract: 'RogueTalkNameConfig.json' ) event_title_ids = { - id_: deep_get(data, 'Name.Hash') - for id_, data in read_file(event_title_file).items() + str(deep_get(data, 'TalkNameID')): deep_get(data, 'Name.Hash') + for data in read_file(event_title_file) } event_title_texts = defaultdict(list) for title_id, title_hash in event_title_ids.items(): @@ -432,8 +453,8 @@ class KeywordExtract: 'RogueDialogueOptionDisplay.json' ) option_ids = { - id_: deep_get(data, 'OptionTitle.Hash') - for id_, data in read_file(option_file).items() + str(deep_get(data, 'OptionDisplayID')): deep_get(data, 'OptionTitle.Hash') + for data in read_file(option_file) } # Key: event name hash, value: list of option id/hash options_grouped = dict() @@ -543,9 +564,9 @@ class KeywordExtract: logger.critical( f'Importing preset strategies fails, probably due to changes in {output_file}') - def iter_without_duplication(self, file: dict, keys): + def iter_without_duplication(self, file: list, keys): visited = set() - for data in file.values(): + for data in file: hash_ = deep_get(data, keys=keys) _, name = self.find_keyword(hash_, lang='cn') if name in visited: diff --git a/dev_tools/keywords/assignment.py b/dev_tools/keywords/assignment.py index 218fe79ef..5dac448dc 100644 --- a/dev_tools/keywords/assignment.py +++ b/dev_tools/keywords/assignment.py @@ -30,25 +30,26 @@ def get_assignment_entry_data(): """ expedition_namehash_to_id = { deep_get(expedition, 'Name.Hash'): deep_get(expedition, 'ExpeditionID') - for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionData.json').values() + for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionData.json') } rev = {v: k for k, v in expedition_namehash_to_id.items()} rev = resort(rev) expedition_namehash_to_id = {v: k for k, v in rev.items()} expedition_id_to_reward_id = { - deep_get(expedition, '4.2.ExpeditionID'): deep_get(expedition, '4.2.RewardID') - for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json').values() + deep_get(expedition, 'ExpeditionID'): deep_get(expedition, 'RewardID') + for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json') + if deep_get(expedition, 'Duration') == 4 and deep_get(expedition, 'AvatarNum') == 2 } reward_id_to_item_ids = { deep_get(reward, 'RewardID'): [ v for k, v in reward.items() if k.startswith('ItemID') ] - for reward in GenerateKeyword.read_file('./ExcelOutput/RewardData.json').values() + for reward in GenerateKeyword.read_file('./ExcelOutput/RewardData.json') } item_id_to_namehash = { deep_get(item, 'ID'): deep_get(item, 'ItemName.Hash') - for item in GenerateKeyword.read_file('./ExcelOutput/ItemConfig.json').values() + for item in GenerateKeyword.read_file('./ExcelOutput/ItemConfig.json') } item_name_remap = { '旅情见闻': '角色经验材料', @@ -81,7 +82,7 @@ class GenerateAssignmentGroup(GenerateKeyword): output_file = './tasks/assignment/keywords/group.py' def iter_keywords(self) -> Iterable[dict]: - for group in self.read_file('./ExcelOutput/ExpeditionGroup.json').values(): + for group in self.read_file('./ExcelOutput/ExpeditionGroup.json'): yield dict(text_id=deep_get(group, 'Name.Hash')) @@ -133,7 +134,7 @@ class GenerateAssignmentEventEntry(GenerateKeyword): output_file = './tasks/assignment/keywords/event_entry.py' def iter_keywords(self) -> Iterable[dict]: - for expedition in self.read_file('./ExcelOutput/ActivityExpedition.json').values(): + for expedition in self.read_file('./ExcelOutput/ActivityExpedition.json'): yield dict(text_id=deep_get(expedition, 'Name.Hash')) diff --git a/dev_tools/keywords/base.py b/dev_tools/keywords/base.py index 92864e541..221c2e0c4 100644 --- a/dev_tools/keywords/base.py +++ b/dev_tools/keywords/base.py @@ -92,13 +92,13 @@ class GenerateKeyword: text_map['cn'] = TextMap('chs') @staticmethod - def read_file(file: str) -> dict: + def read_file(file: str) -> list: """ Args: file: ./ExcelOutput/GameplayGuideData.json Returns: - dict: + list """ file = os.path.join(TextMap.DATA_FOLDER, file) return read_file(file) diff --git a/dev_tools/keywords/dungeon_list.py b/dev_tools/keywords/dungeon_list.py index deb90ce2e..658ef4bdf 100644 --- a/dev_tools/keywords/dungeon_list.py +++ b/dev_tools/keywords/dungeon_list.py @@ -41,7 +41,7 @@ class GenerateDungeonList(GenerateKeyword): def iter_dungeon(self): temp_save = "" - for data in self.data.values(): + for data in self.data: dungeon_id = data.get('ID', 0) text_id = deep_get(data, keys='Name.Hash') plane_id = deep_get(data, 'MapEntranceID', 0) diff --git a/dev_tools/keywords/item.py b/dev_tools/keywords/item.py index 87fc9758f..4f1fbcfce 100644 --- a/dev_tools/keywords/item.py +++ b/dev_tools/keywords/item.py @@ -10,7 +10,7 @@ class GenerateItemBase(GenerateKeyword): blacklist = [] def iter_items(self) -> t.Iterable[dict]: - for data in SHARE_DATA.ItemConfig.values(): + for data in SHARE_DATA.ItemConfig: item_id = data.get('ID', 0) text_id = deep_get(data, keys='ItemName.Hash') subtype = data.get('ItemSubType', 0) @@ -50,21 +50,20 @@ class GenerateItemBase(GenerateKeyword): data """ dic = {} - for level_data in SHARE_DATA.MappingInfo.values(): + for dungeon_data in SHARE_DATA.MappingInfo: # Use the highest level # And must contain: # "Type": "FARM_ENTRANCE", # "FarmType": "COCOON", - for dungeon_data in level_data.values(): - if dungeon_data.get('Type') != 'FARM_ENTRANCE': + if dungeon_data.get('Type') != 'FARM_ENTRANCE': + continue + # parse + dungeon_id = dungeon_data.get('ID', 0) + for item_data in dungeon_data.get('DisplayItemList', []): + item_id = item_data.get('ItemID', 0) + if item_id < 100: continue - # parse - dungeon_id = dungeon_data.get('ID', 0) - for item_data in dungeon_data.get('DisplayItemList', []): - item_id = item_data.get('ItemID', 0) - if item_id < 100: - continue - dic.setdefault(item_id, dungeon_id) + dic.setdefault(item_id, dungeon_id) # Credict dic.setdefault(2, 1003) diff --git a/dev_tools/keywords/map_plane.py b/dev_tools/keywords/map_plane.py index 5f2cf39fd..598248fb3 100644 --- a/dev_tools/keywords/map_plane.py +++ b/dev_tools/keywords/map_plane.py @@ -13,8 +13,8 @@ class GenerateMapPlane(GenerateKeyword): return self.read_file('./ExcelOutput/AreaMapConfig.json') def iter_planes(self) -> t.Iterable[dict]: - for plane_id, data in self.data.items(): - plane_id = int(plane_id) + for data in self.data: + plane_id = int(deep_get(data, 'ID', 0)) world_id = int(str(plane_id)[-5]) sort_id = int(deep_get(data, 'MenuSortID', 0)) text_id = deep_get(data, 'Name.Hash') diff --git a/module/config/argument/args.json b/module/config/argument/args.json index cfc1ed4f6..9dec37746 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -678,7 +678,8 @@ "Luka", "Luocha", "Lynx", - "March7th", + "March7thPreservation", + "March7thTheHunt", "Misha", "Natasha", "Pela", @@ -699,7 +700,8 @@ "Welt", "Xueyi", "Yanqing", - "Yukong" + "Yukong", + "Yunli" ] } }, @@ -1244,7 +1246,8 @@ "Luka", "Luocha", "Lynx", - "March7th", + "March7thPreservation", + "March7thTheHunt", "Misha", "Natasha", "Pela", @@ -1265,7 +1268,8 @@ "Welt", "Xueyi", "Yanqing", - "Yukong" + "Yukong", + "Yunli" ] } } @@ -1528,7 +1532,8 @@ "Luka", "Luocha", "Lynx", - "March7th", + "March7thPreservation", + "March7thTheHunt", "Misha", "Natasha", "Pela", @@ -1549,7 +1554,8 @@ "Welt", "Xueyi", "Yanqing", - "Yukong" + "Yukong", + "Yunli" ] } }, diff --git a/module/config/config_generated.py b/module/config/config_generated.py index f9dd18ef4..98bd69e02 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -53,7 +53,7 @@ class GeneratedConfig: # Group `DungeonSupport` DungeonSupport_Use = 'when_daily' # always_use, when_daily, do_not_use - DungeonSupport_Character = 'FirstCharacter' # FirstCharacter, Acheron, Argenti, Arlan, Asta, Aventurine, Bailu, BlackSwan, Blade, Boothill, Bronya, Clara, DanHeng, DanHengImbibitorLunae, DrRatio, Firefly, FuXuan, Gallagher, Gepard, Guinaifen, Hanya, Herta, Himeko, Hook, Huohuo, JingYuan, Jingliu, Kafka, Luka, Luocha, Lynx, March7th, Misha, Natasha, Pela, Qingque, Robin, RuanMei, Sampo, Seele, Serval, SilverWolf, Sparkle, Sushang, Tingyun, TopazNumby, TrailblazerDestruction, TrailblazerHarmony, TrailblazerPreservation, Welt, Xueyi, Yanqing, Yukong + DungeonSupport_Character = 'FirstCharacter' # FirstCharacter, Acheron, Argenti, Arlan, Asta, Aventurine, Bailu, BlackSwan, Blade, Boothill, Bronya, Clara, DanHeng, DanHengImbibitorLunae, DrRatio, Firefly, FuXuan, Gallagher, Gepard, Guinaifen, Hanya, Herta, Himeko, Hook, Huohuo, JingYuan, Jingliu, Kafka, Luka, Luocha, Lynx, March7thPreservation, March7thTheHunt, Misha, Natasha, Pela, Qingque, Robin, RuanMei, Sampo, Seele, Serval, SilverWolf, Sparkle, Sushang, Tingyun, TopazNumby, TrailblazerDestruction, TrailblazerHarmony, TrailblazerPreservation, Welt, Xueyi, Yanqing, Yukong, Yunli # Group `DungeonStorage` DungeonStorage_TrailblazePower = {} diff --git a/module/config/config_updater.py b/module/config/config_updater.py index 532aef18d..db163cf26 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -100,7 +100,7 @@ class ConfigGenerator: option_add(keys='Ornament.Dungeon.option', options=ornament) # Insert characters from tasks.character.keywords import CharacterList - unsupported_characters = ["Jade"] + unsupported_characters = ["Jade", "Jiaoqiu"] characters = [character.name for character in CharacterList.instances.values() if character.name not in unsupported_characters] option_add(keys='DungeonSupport.Character.option', options=characters) diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 2acdccb59..facbf1e9a 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -263,11 +263,11 @@ "Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Trace: Nihility (Alchemy Commission)", "Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)", "Stagnant_Shadow_Perdition": "Ascension: Physical (Hanya / Argenti)", - "Stagnant_Shadow_Duty": "Ascension: Physical (Boothill / Robin)", + "Stagnant_Shadow_Duty": "Ascension: Physical (Boothill / Robin / Yunli)", "Stagnant_Shadow_Blaze": "Ascension: Fire (Himeko / Asta / Hook)", "Stagnant_Shadow_Scorch": "Ascension: Fire (Guinaifen / Topaz & Numby)", - "Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher)", - "Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)", + "Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)", + "Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela / March 7th)", "Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing / Jingliu / Ruan Mei)", "Stagnant_Shadow_Nectar": "Ascension: Ice (Misha)", "Stagnant_Shadow_Fulmination": "Ascension: Lightning (Arlan / Serval / Tingyun / Bailu)", @@ -409,7 +409,8 @@ "Luka": "Luka", "Luocha": "Luocha", "Lynx": "Lynx", - "March7th": "March 7th", + "March7thPreservation": "March 7th: Preservation", + "March7thTheHunt": "March 7th: The Hunt", "Misha": "Misha", "Natasha": "Natasha", "Pela": "Pela", @@ -430,7 +431,8 @@ "Welt": "Welt", "Xueyi": "Xueyi", "Yanqing": "Yanqing", - "Yukong": "Yukong" + "Yukong": "Yukong", + "Yunli": "Yunli" } }, "DungeonStorage": { @@ -507,7 +509,7 @@ "help": "" }, "Item_Horn_of_Snow": { - "name": "Ascension: Ice (March 7th / Herta / Gepard / Pela)", + "name": "Ascension: Ice (March 7th / Herta / Gepard / Pela / March 7th)", "help": "" }, "Item_Lightning_Crown_of_the_Past_Shadow": { @@ -555,11 +557,11 @@ "help": "" }, "Item_IPC_Work_Permit": { - "name": "Ascension: Physical (Boothill / Robin)", + "name": "Ascension: Physical (Boothill / Robin / Yunli)", "help": "" }, "Item_Raging_Heart": { - "name": "Ascension: Fire (Firefly / Gallagher)", + "name": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)", "help": "" }, "Item_Dream_Fridge": { diff --git a/module/config/i18n/es-ES.json b/module/config/i18n/es-ES.json index 833fadeca..d592ddbf9 100644 --- a/module/config/i18n/es-ES.json +++ b/module/config/i18n/es-ES.json @@ -263,11 +263,11 @@ "Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Rastros: Nihilidad (Comisión de Alquimia)", "Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)", "Stagnant_Shadow_Perdition": "Ascension: Físico (Hanya / Argenti)", - "Stagnant_Shadow_Duty": "Ascension: Físico (Boothill / Robin)", + "Stagnant_Shadow_Duty": "Ascension: Físico (Boothill / Robin / Yunli)", "Stagnant_Shadow_Blaze": "Ascension: Fuego (Himeko / Asta / Hook)", "Stagnant_Shadow_Scorch": "Ascension: Fuego (Guinaifen / Topaz y Conti)", - "Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher)", - "Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)", + "Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)", + "Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela / Siete de Marzo)", "Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing / Jingliu / Ruan Mei)", "Stagnant_Shadow_Nectar": "Ascension: Hielo (Misha)", "Stagnant_Shadow_Fulmination": "Ascension: Rayo (Arlan / Serval / Tingyun / Bailu)", @@ -288,7 +288,7 @@ "Cavern_of_Corrosion_Path_of_Elixir_Seekers": "Artefactos: HP y SPD (Senda de los elixires)", "Cavern_of_Corrosion_Path_of_Darkness": "Artefactos: Persecución y Dot (Senda de la oscuridad)", "Cavern_of_Corrosion_Path_of_Dreamdive": "Artefactos: Debuff y Efecto de Ruptura (Senda de los sueños)", - "Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero)" + "Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero) (Senda del caballero)" }, "NameAtDoubleCalyx": { "name": "En los eventos de x2 de Cáliz", @@ -329,7 +329,7 @@ "Cavern_of_Corrosion_Path_of_Elixir_Seekers": "Artefactos: HP y SPD (Senda de los elixires)", "Cavern_of_Corrosion_Path_of_Darkness": "Artefactos: Persecución y Dot (Senda de la oscuridad)", "Cavern_of_Corrosion_Path_of_Dreamdive": "Artefactos: Debuff y Efecto de Ruptura (Senda de los sueños)", - "Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero)" + "Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero) (Senda del caballero)" }, "Team": { "name": "Equipo de mazmorra", @@ -409,7 +409,8 @@ "Luka": "Luka", "Luocha": "Luocha", "Lynx": "Lynx", - "March7th": "Siete de Marzo", + "March7thPreservation": "Siete de Marzo: Conservación", + "March7thTheHunt": "Siete de Marzo: Cacería", "Misha": "Misha", "Natasha": "Natasha", "Pela": "Pela", @@ -430,7 +431,8 @@ "Welt": "Welt", "Xueyi": "Xueyi", "Yanqing": "Yanqing", - "Yukong": "Yukong" + "Yukong": "Yukong", + "Yunli": "Yunli" } }, "DungeonStorage": { @@ -507,7 +509,7 @@ "help": "" }, "Item_Horn_of_Snow": { - "name": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)", + "name": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela / Siete de Marzo)", "help": "" }, "Item_Lightning_Crown_of_the_Past_Shadow": { @@ -555,11 +557,11 @@ "help": "" }, "Item_IPC_Work_Permit": { - "name": "Ascension: Físico (Boothill / Robin)", + "name": "Ascension: Físico (Boothill / Robin / Yunli)", "help": "" }, "Item_Raging_Heart": { - "name": "Ascension: Fuego (Luciérnaga / Gallagher)", + "name": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)", "help": "" }, "Item_Dream_Fridge": { @@ -647,7 +649,7 @@ "help": "" }, "Item_Lost_Echo_of_the_Shared_Wish": { - "name": "Ecos de la guerra: Tributo del sueño ceniciento (Colonipenal)", + "name": "Tributo del sueño ceniciento (Colonipenal)", "help": "" }, "Item_Squirming_Core": { @@ -695,7 +697,7 @@ "Echo_of_War_End_of_the_Eternal_Freeze": "El fin del Hielo Eterno (Jarilo-VI)", "Echo_of_War_Divine_Seed": "Semilla divina (El Luofu de Xianzhou)", "Echo_of_War_Borehole_Planet_Old_Crater": "Cráter del planeta devorado (Estación Espacial Herta)", - "Echo_of_War_Salutations_of_Ashen_Dreams": "Ecos de la guerra: Tributo del sueño ceniciento (Colonipenal)" + "Echo_of_War_Salutations_of_Ashen_Dreams": "Tributo del sueño ceniciento (Colonipenal)" }, "Team": { "name": "Equipo de mazmorra", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 75952b0b7..e337f5746 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -263,11 +263,11 @@ "Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "軌跡素材:虚無(丹鼎司)", "Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)", "Stagnant_Shadow_Perdition": "キャラクター昇格素材:物理(寒鴉 / アルジェンティ)", - "Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン)", + "Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)", "Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)", "Stagnant_Shadow_Scorch": "キャラクター昇格素材:炎(桂乃芬 / トパーズ&カブ)", - "Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー)", - "Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)", + "Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)", + "Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ / 三月なのか)", "Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿 / 鏡流 / ルアン・メェイ)", "Stagnant_Shadow_Nectar": "キャラクター昇格素材:氷(ミーシャ)", "Stagnant_Shadow_Fulmination": "キャラクター昇格素材:雷(アーラン / セーバル / 停雲 / 白露)", @@ -409,7 +409,8 @@ "Luka": "ルカ", "Luocha": "羅刹", "Lynx": "リンクス", - "March7th": "三月なのか", + "March7thPreservation": "三月なのか・存護", + "March7thTheHunt": "三月なのか・巡狩", "Misha": "ミーシャ", "Natasha": "ナターシャ", "Pela": "ペラ", @@ -430,7 +431,8 @@ "Welt": "ヴェルト", "Xueyi": "雪衣", "Yanqing": "彦卿", - "Yukong": "御空" + "Yukong": "御空", + "Yunli": "雲璃" } }, "DungeonStorage": { @@ -507,7 +509,7 @@ "help": "" }, "Item_Horn_of_Snow": { - "name": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)", + "name": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ / 三月なのか)", "help": "" }, "Item_Lightning_Crown_of_the_Past_Shadow": { @@ -555,11 +557,11 @@ "help": "" }, "Item_IPC_Work_Permit": { - "name": "キャラクター昇格素材:物理(ブートヒル / ロビン)", + "name": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)", "help": "" }, "Item_Raging_Heart": { - "name": "キャラクター昇格素材:炎(ホタル / ギャラガー)", + "name": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)", "help": "" }, "Item_Dream_Fridge": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b00f69610..8df29837c 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -263,11 +263,11 @@ "Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行迹材料:虚无(丹鼎司)", "Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)", "Stagnant_Shadow_Perdition": "角色晋阶材料:物理(寒鸦 / 银枝)", - "Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟)", + "Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)", "Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)", "Stagnant_Shadow_Scorch": "角色晋阶材料:火(桂乃芬 / 托帕&账账)", - "Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫)", - "Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)", + "Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)", + "Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉 / 三月七)", "Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿 / 镜流 / 阮•梅)", "Stagnant_Shadow_Nectar": "角色晋阶材料:冰(米沙)", "Stagnant_Shadow_Fulmination": "角色晋阶材料:雷(阿兰 / 希露瓦 / 停云 / 白露)", @@ -409,7 +409,8 @@ "Luka": "卢卡", "Luocha": "罗刹", "Lynx": "玲可", - "March7th": "三月七", + "March7thPreservation": "三月七•存护", + "March7thTheHunt": "三月七•巡猎", "Misha": "米沙", "Natasha": "娜塔莎", "Pela": "佩拉", @@ -430,7 +431,8 @@ "Welt": "瓦尔特", "Xueyi": "雪衣", "Yanqing": "彦卿", - "Yukong": "驭空" + "Yukong": "驭空", + "Yunli": "云璃" } }, "DungeonStorage": { @@ -507,7 +509,7 @@ "help": "" }, "Item_Horn_of_Snow": { - "name": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)", + "name": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉 / 三月七)", "help": "" }, "Item_Lightning_Crown_of_the_Past_Shadow": { @@ -555,11 +557,11 @@ "help": "" }, "Item_IPC_Work_Permit": { - "name": "角色晋阶材料:物理(波提欧 / 知更鸟)", + "name": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)", "help": "" }, "Item_Raging_Heart": { - "name": "角色晋阶材料:火(流萤 / 加拉赫)", + "name": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)", "help": "" }, "Item_Dream_Fridge": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index ad1c59e42..931ac8e05 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -263,11 +263,11 @@ "Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行跡材料:虛無(丹鼎司)", "Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)", "Stagnant_Shadow_Perdition": "角色晉階材料:物理(寒鴉 / 銀枝)", - "Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥)", + "Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)", "Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)", "Stagnant_Shadow_Scorch": "角色晉階材料:火(桂乃芬 / 托帕&帳帳)", - "Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫)", - "Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)", + "Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘)", + "Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉 / 三月七)", "Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿 / 鏡流 / 阮•梅)", "Stagnant_Shadow_Nectar": "角色晉階材料:冰(米沙)", "Stagnant_Shadow_Fulmination": "角色晉階材料:雷(阿蘭 / 希露瓦 / 停雲 / 白露)", @@ -409,7 +409,8 @@ "Luka": "盧卡", "Luocha": "羅剎", "Lynx": "玲可", - "March7th": "三月七", + "March7thPreservation": "三月七•存護", + "March7thTheHunt": "三月七•巡獵", "Misha": "米沙", "Natasha": "娜塔莎", "Pela": "佩拉", @@ -430,7 +431,8 @@ "Welt": "瓦爾特", "Xueyi": "雪衣", "Yanqing": "彥卿", - "Yukong": "馭空" + "Yukong": "馭空", + "Yunli": "雲璃" } }, "DungeonStorage": { @@ -507,7 +509,7 @@ "help": "" }, "Item_Horn_of_Snow": { - "name": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)", + "name": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉 / 三月七)", "help": "" }, "Item_Lightning_Crown_of_the_Past_Shadow": { @@ -555,11 +557,11 @@ "help": "" }, "Item_IPC_Work_Permit": { - "name": "角色晉階材料:物理(波提歐 / 知更鳥)", + "name": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)", "help": "" }, "Item_Raging_Heart": { - "name": "角色晉階材料:火(流螢 / 加拉赫)", + "name": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘)", "help": "" }, "Item_Dream_Fridge": { diff --git a/tasks/character/keywords/__init__.py b/tasks/character/keywords/__init__.py index f165ab606..5574c4835 100644 --- a/tasks/character/keywords/__init__.py +++ b/tasks/character/keywords/__init__.py @@ -23,7 +23,7 @@ DICT_SORTED_RANGES = { Boothill, Yukong, TopazNumby, - March7th, + March7thPreservation, Bronya, Asta, Pela, diff --git a/tasks/character/keywords/character_list.py b/tasks/character/keywords/character_list.py index 8f7645ab7..269c219dd 100644 --- a/tasks/character/keywords/character_list.py +++ b/tasks/character/keywords/character_list.py @@ -228,8 +228,17 @@ Jade = CharacterList( jp='ジェイド', es='Jade', ) -JingYuan = CharacterList( +Jiaoqiu = CharacterList( id=26, + name='Jiaoqiu', + cn='椒丘', + cht='椒丘', + en='Jiaoqiu', + jp='椒丘', + es='Jiaoqiu', +) +JingYuan = CharacterList( + id=27, name='JingYuan', cn='景元', cht='景元', @@ -238,7 +247,7 @@ JingYuan = CharacterList( es='Jing Yuan', ) Jingliu = CharacterList( - id=27, + id=28, name='Jingliu', cn='镜流', cht='鏡流', @@ -247,7 +256,7 @@ Jingliu = CharacterList( es='Jingliu', ) Kafka = CharacterList( - id=28, + id=29, name='Kafka', cn='卡芙卡', cht='卡芙卡', @@ -256,7 +265,7 @@ Kafka = CharacterList( es='Kafka', ) Luka = CharacterList( - id=29, + id=30, name='Luka', cn='卢卡', cht='盧卡', @@ -265,7 +274,7 @@ Luka = CharacterList( es='Luka', ) Luocha = CharacterList( - id=30, + id=31, name='Luocha', cn='罗刹', cht='羅剎', @@ -274,7 +283,7 @@ Luocha = CharacterList( es='Luocha', ) Lynx = CharacterList( - id=31, + id=32, name='Lynx', cn='玲可', cht='玲可', @@ -282,17 +291,26 @@ Lynx = CharacterList( jp='リンクス', es='Lynx', ) -March7th = CharacterList( - id=32, - name='March7th', - cn='三月七', - cht='三月七', - en='March 7th', - jp='三月なのか', - es='Siete de Marzo', +March7thPreservation = CharacterList( + id=33, + name='March7thPreservation', + cn='三月七•存护', + cht='三月七•存護', + en='March 7th: Preservation', + jp='三月なのか・存護', + es='Siete de Marzo: Conservación', +) +March7thTheHunt = CharacterList( + id=34, + name='March7thTheHunt', + cn='三月七•巡猎', + cht='三月七•巡獵', + en='March 7th: The Hunt', + jp='三月なのか・巡狩', + es='Siete de Marzo: Cacería', ) Misha = CharacterList( - id=33, + id=35, name='Misha', cn='米沙', cht='米沙', @@ -301,7 +319,7 @@ Misha = CharacterList( es='Misha', ) Natasha = CharacterList( - id=34, + id=36, name='Natasha', cn='娜塔莎', cht='娜塔莎', @@ -310,7 +328,7 @@ Natasha = CharacterList( es='Natasha', ) Pela = CharacterList( - id=35, + id=37, name='Pela', cn='佩拉', cht='佩拉', @@ -319,7 +337,7 @@ Pela = CharacterList( es='Pela', ) Qingque = CharacterList( - id=36, + id=38, name='Qingque', cn='青雀', cht='青雀', @@ -328,7 +346,7 @@ Qingque = CharacterList( es='Qingque', ) Robin = CharacterList( - id=37, + id=39, name='Robin', cn='知更鸟', cht='知更鳥', @@ -337,7 +355,7 @@ Robin = CharacterList( es='Robin', ) RuanMei = CharacterList( - id=38, + id=40, name='RuanMei', cn='阮•梅', cht='阮•梅', @@ -346,7 +364,7 @@ RuanMei = CharacterList( es='Ruan Mei', ) Sampo = CharacterList( - id=39, + id=41, name='Sampo', cn='桑博', cht='桑博', @@ -355,7 +373,7 @@ Sampo = CharacterList( es='Sampo', ) Seele = CharacterList( - id=40, + id=42, name='Seele', cn='希儿', cht='希兒', @@ -364,7 +382,7 @@ Seele = CharacterList( es='Seele', ) Serval = CharacterList( - id=41, + id=43, name='Serval', cn='希露瓦', cht='希露瓦', @@ -373,7 +391,7 @@ Serval = CharacterList( es='Serval', ) SilverWolf = CharacterList( - id=42, + id=44, name='SilverWolf', cn='银狼', cht='銀狼', @@ -382,7 +400,7 @@ SilverWolf = CharacterList( es='Silver Wolf', ) Sparkle = CharacterList( - id=43, + id=45, name='Sparkle', cn='花火', cht='花火', @@ -391,7 +409,7 @@ Sparkle = CharacterList( es='Sparkle', ) Sushang = CharacterList( - id=44, + id=46, name='Sushang', cn='素裳', cht='素裳', @@ -400,7 +418,7 @@ Sushang = CharacterList( es='Sushang', ) Tingyun = CharacterList( - id=45, + id=47, name='Tingyun', cn='停云', cht='停雲', @@ -409,7 +427,7 @@ Tingyun = CharacterList( es='Tingyun', ) TopazNumby = CharacterList( - id=46, + id=48, name='TopazNumby', cn='托帕&账账', cht='托帕&帳帳', @@ -418,7 +436,7 @@ TopazNumby = CharacterList( es='Topaz y Conti', ) TrailblazerDestruction = CharacterList( - id=47, + id=49, name='TrailblazerDestruction', cn='Trailblazer•毁灭', cht='Trailblazer•毀滅', @@ -427,7 +445,7 @@ TrailblazerDestruction = CharacterList( es='Trailblazer: Destrucción', ) TrailblazerHarmony = CharacterList( - id=48, + id=50, name='TrailblazerHarmony', cn='Trailblazer•同谐', cht='Trailblazer•同諧', @@ -436,7 +454,7 @@ TrailblazerHarmony = CharacterList( es='Trailblazer: Armonía', ) TrailblazerPreservation = CharacterList( - id=49, + id=51, name='TrailblazerPreservation', cn='Trailblazer•存护', cht='Trailblazer•存護', @@ -445,7 +463,7 @@ TrailblazerPreservation = CharacterList( es='Trailblazer: Conservación', ) Welt = CharacterList( - id=50, + id=52, name='Welt', cn='瓦尔特', cht='瓦爾特', @@ -454,7 +472,7 @@ Welt = CharacterList( es='Welt', ) Xueyi = CharacterList( - id=51, + id=53, name='Xueyi', cn='雪衣', cht='雪衣', @@ -463,7 +481,7 @@ Xueyi = CharacterList( es='Xueyi', ) Yanqing = CharacterList( - id=52, + id=54, name='Yanqing', cn='彦卿', cht='彥卿', @@ -472,7 +490,7 @@ Yanqing = CharacterList( es='Yanqing', ) Yukong = CharacterList( - id=53, + id=55, name='Yukong', cn='驭空', cht='馭空', @@ -480,3 +498,12 @@ Yukong = CharacterList( jp='御空', es='Yukong', ) +Yunli = CharacterList( + id=56, + name='Yunli', + cn='云璃', + cht='雲璃', + en='Yunli', + jp='雲璃', + es='Yunli', +) diff --git a/tasks/character/keywords/height.py b/tasks/character/keywords/height.py index d1b79ee91..a8d75132f 100644 --- a/tasks/character/keywords/height.py +++ b/tasks/character/keywords/height.py @@ -13,7 +13,7 @@ CHARACTER_HEIGHT = { 'Tingyun': 'Maid', 'Sushang': 'Maid', 'Seele': 'Maid', - 'March7th': 'Maid', + 'March7thPreservation': 'Maid', 'Jingliu': 'Maid', 'Bronya': 'Maid', 'Asta': 'Maid', diff --git a/tasks/dungeon/keywords/dungeon.py b/tasks/dungeon/keywords/dungeon.py index 12540eecf..90c4c95f9 100644 --- a/tasks/dungeon/keywords/dungeon.py +++ b/tasks/dungeon/keywords/dungeon.py @@ -164,7 +164,7 @@ Calyx_Crimson_The_Hunt_Penacony_SoulGladScorchsandAuditionVenue = DungeonList( cht='巡獵之蕾•擬造花萼(赤)', en='Calyx (Crimson): Bud of The Hunt', jp='疑似花萼(赤)・巡狩の蕾', - es='Cáliz (carmesí): Flor de la Cacería', + es='Flor de la Cacería', dungeon_id=1022, plane_id=2033101, ) @@ -208,7 +208,7 @@ Calyx_Crimson_Erudition_Penacony_PenaconyGrandTheater = DungeonList( cht='智識之蕾•擬造花萼(赤)', en='Calyx (Crimson): Bud of Erudition', jp='疑似花萼(赤)・知恵の蕾', - es='Cáliz (carmesí): Flor de la Erudición', + es='Flor de la Erudición', dungeon_id=1023, plane_id=2033201, ) @@ -450,7 +450,7 @@ Stagnant_Shadow_Duty = DungeonList( cht='職司之形•凝滯虛影', en='Stagnant Shadow: Shape of Duty', jp='凝結虚影・職掌の形', - es='Sombra paralizada: Forma del deber', + es='Forma del deber', dungeon_id=1118, plane_id=2032101, ) @@ -560,7 +560,7 @@ Cavern_of_Corrosion_Path_of_Cavalier = DungeonList( cht='勇騎之徑•侵蝕隧洞', en='Cavern of Corrosion: Path of Cavalier', jp='侵蝕トンネル・勇騎の路', - es='Caverna de la corrosión: Senda del caballero', + es='Senda del caballero', dungeon_id=1210, plane_id=2033201, ) @@ -615,7 +615,7 @@ Echo_of_War_Salutations_of_Ashen_Dreams = DungeonList( cht='塵夢的讚禮•歷戰餘響', en='Echo of War: Salutations of Ashen Dreams', jp='歴戦余韻・現世の夢の礼賛', - es='Ecos de la guerra: Tributo del sueño ceniciento', + es='Tributo del sueño ceniciento', dungeon_id=1305, plane_id=2033201, ) @@ -714,7 +714,7 @@ Divergent_Universe_Eternal_Comedy = DungeonList( cht='永恆笑劇•差分宇宙', en='Divergent Universe: Eternal Comedy', jp='階差宇宙・永遠の喜劇', - es='Universo Diferenciado: Comedia eterna', + es='Comedia eterna', dungeon_id=300, plane_id=0, ) @@ -725,7 +725,7 @@ Divergent_Universe_To_Sweet_Dreams = DungeonList( cht='伴你入眠•差分宇宙', en='Divergent Universe: To Sweet Dreams', jp='階差宇宙・寄り添い眠る', - es='Hasta los dulces sueños: Universo Diferenciado', + es='Hasta los dulces sueños', dungeon_id=290, plane_id=0, ) @@ -736,7 +736,7 @@ Divergent_Universe_Pouring_Blades = DungeonList( cht='天劍如雨•差分宇宙', en='Divergent Universe: Pouring Blades', jp='階差宇宙・剣の雨', - es='Lluvia de espadas: Universo Diferenciado', + es='Lluvia de espadas', dungeon_id=280, plane_id=0, ) @@ -747,7 +747,7 @@ Divergent_Universe_Fruit_of_Evil = DungeonList( cht='孽果盤生•差分宇宙', en='Divergent Universe: Fruit of Evil', jp='階差宇宙・渦巻く罪', - es='Fruta del desastre: Universo Diferenciado', + es='Fruta del desastre', dungeon_id=270, plane_id=0, ) @@ -758,7 +758,7 @@ Divergent_Universe_Permafrost = DungeonList( cht='百年凍土•差分宇宙', en='Divergent Universe: Permafrost', jp='階差宇宙・永久凍土', - es='Permafrost: Universo Diferenciado', + es='Permafrost', dungeon_id=260, plane_id=0, ) @@ -769,7 +769,7 @@ Divergent_Universe_Gentle_Words = DungeonList( cht='溫柔話語•差分宇宙', en='Divergent Universe: Gentle Words', jp='階差宇宙・優しい言葉', - es='Palabras amables: Universo Diferenciado', + es='Palabras amables', dungeon_id=250, plane_id=0, ) @@ -780,7 +780,7 @@ Divergent_Universe_Smelted_Heart = DungeonList( cht='浴火鋼心•差分宇宙', en='Divergent Universe: Smelted Heart', jp='階差宇宙・鋼の意志', - es='Corazón de fundición: Universo Diferenciado', + es='Corazón de fundición', dungeon_id=240, plane_id=0, ) @@ -791,7 +791,7 @@ Divergent_Universe_Untoppled_Walls = DungeonList( cht='堅城不倒•差分宇宙', en='Divergent Universe: Untoppled Walls', jp='階差宇宙・不動の砦', - es='Muros inquebrantables: Universo Diferenciado', + es='Muros inquebrantables', dungeon_id=230, plane_id=0, ) diff --git a/tasks/dungeon/keywords/dungeon_detailed.py b/tasks/dungeon/keywords/dungeon_detailed.py index 05fed19fb..dc1c00125 100644 --- a/tasks/dungeon/keywords/dungeon_detailed.py +++ b/tasks/dungeon/keywords/dungeon_detailed.py @@ -51,11 +51,11 @@ Stagnant_Shadow_Spike = DungeonDetailed( 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)', + cn='角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉 / 三月七)', + cht='角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉 / 三月七)', + en='Ascension: Ice (March 7th / Herta / Gepard / Pela / March 7th)', + jp='キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ / 三月なのか)', + es='Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela / Siete de Marzo)', ) Stagnant_Shadow_Mirage = DungeonDetailed( id=7, @@ -150,18 +150,18 @@ Stagnant_Shadow_Roast = DungeonDetailed( Stagnant_Shadow_Ire = DungeonDetailed( id=17, name='Stagnant_Shadow_Ire', - cn='角色晋阶材料:火(流萤 / 加拉赫)', - cht='角色晉階材料:火(流螢 / 加拉赫)', - en='Ascension: Fire (Firefly / Gallagher)', - jp='キャラクター昇格素材:炎(ホタル / ギャラガー)', - es='Ascension: Fuego (Luciérnaga / Gallagher)', + cn='角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)', + cht='角色晉階材料:火(流螢 / 加拉赫 / 椒丘)', + en='Ascension: Fire (Firefly / Gallagher / Jiaoqiu)', + jp='キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)', + es='Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)', ) Stagnant_Shadow_Duty = DungeonDetailed( id=18, name='Stagnant_Shadow_Duty', - cn='角色晋阶材料:物理(波提欧 / 知更鸟)', - cht='角色晉階材料:物理(波提歐 / 知更鳥)', - en='Ascension: Physical (Boothill / Robin)', - jp='キャラクター昇格素材:物理(ブートヒル / ロビン)', - es='Ascension: Físico (Boothill / Robin)', + cn='角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)', + cht='角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)', + en='Ascension: Physical (Boothill / Robin / Yunli)', + jp='キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)', + es='Ascension: Físico (Boothill / Robin / Yunli)', ) diff --git a/tasks/map/keywords/plane.py b/tasks/map/keywords/plane.py index c6bd02006..cd478717b 100644 --- a/tasks/map/keywords/plane.py +++ b/tasks/map/keywords/plane.py @@ -102,12 +102,12 @@ Rogue_DomainTransaction = MapPlane( world_id=-2, plane_id=7, ) -Penacony_RadiantFeldspar = MapPlane( +Penacony_TheRadiantFeldspar = MapPlane( id=10, - name='Penacony_RadiantFeldspar', + name='Penacony_TheRadiantFeldspar', cn='晖长石号', cht='暉長石號', - en='Radiant Feldspar', + en='The Radiant Feldspar', jp='暉長石号', es='Feldespato Radiante', world_id=3, @@ -454,8 +454,19 @@ Luofu_ScalegorgeWaterscape = MapPlane( world_id=2, plane_id=2023201, ) -Penacony_TheReverieReality = MapPlane( +Luofu_TheShacklingPrison = MapPlane( id=42, + name='Luofu_TheShacklingPrison', + cn='幽囚狱', + cht='幽囚獄', + en='The Shackling Prison', + jp='幽囚獄', + es='Prisión de los encadenados', + world_id=2, + plane_id=2024101, +) +Penacony_TheReverieReality = MapPlane( + id=43, name='Penacony_TheReverieReality', cn='「白日梦」酒店-现实', cht='「白日夢」飯店-現實', @@ -466,7 +477,7 @@ Penacony_TheReverieReality = MapPlane( plane_id=1030501, ) Penacony_GoldenHour = MapPlane( - id=43, + id=44, name='Penacony_GoldenHour', cn='黄金的时刻', cht='黃金的時刻', @@ -477,7 +488,7 @@ Penacony_GoldenHour = MapPlane( plane_id=1030101, ) Penacony_DreamEdge = MapPlane( - id=44, + id=45, name='Penacony_DreamEdge', cn='筑梦边境', cht='築夢邊境', @@ -488,7 +499,7 @@ Penacony_DreamEdge = MapPlane( plane_id=2031301, ) Penacony_AChildDream = MapPlane( - id=45, + id=46, name='Penacony_AChildDream', cn='稚子的梦', cht='稚子的夢', @@ -499,7 +510,7 @@ Penacony_AChildDream = MapPlane( plane_id=2031201, ) Penacony_TheReverieDreamscape = MapPlane( - id=46, + id=47, name='Penacony_TheReverieDreamscape', cn='「白日梦」酒店-梦境', cht='「白日夢」飯店-夢境', @@ -510,7 +521,7 @@ Penacony_TheReverieDreamscape = MapPlane( plane_id=2031101, ) Penacony_DewlightPavilion = MapPlane( - id=47, + id=48, name='Penacony_DewlightPavilion', cn='朝露公馆', cht='朝露公館', @@ -521,7 +532,7 @@ Penacony_DewlightPavilion = MapPlane( plane_id=2032201, ) Penacony_ClockStudiosThemePark = MapPlane( - id=48, + id=49, name='Penacony_ClockStudiosThemePark', cn='克劳克影视乐园', cht='克勞克影視樂園', @@ -532,7 +543,7 @@ Penacony_ClockStudiosThemePark = MapPlane( plane_id=2032101, ) Penacony_DreamfluxReef = MapPlane( - id=49, + id=50, name='Penacony_DreamfluxReef', cn='流梦礁', cht='流夢礁', @@ -543,7 +554,7 @@ Penacony_DreamfluxReef = MapPlane( plane_id=1030401, ) Penacony_SoulGladScorchsandAuditionVenue = MapPlane( - id=50, + id=51, name='Penacony_SoulGladScorchsandAuditionVenue', cn='苏乐达热砂海选会场', cht='蘇樂達熱砂海選會場', @@ -554,7 +565,7 @@ Penacony_SoulGladScorchsandAuditionVenue = MapPlane( plane_id=2033101, ) Penacony_PenaconyGrandTheater = MapPlane( - id=51, + id=52, name='Penacony_PenaconyGrandTheater', cn='匹诺康尼大剧院', cht='匹諾康尼大劇院', diff --git a/tasks/rogue/keywords/bonus.py b/tasks/rogue/keywords/bonus.py index 49aabb87f..f3f5be344 100644 --- a/tasks/rogue/keywords/bonus.py +++ b/tasks/rogue/keywords/bonus.py @@ -210,3 +210,39 @@ Fountain_of_Youth = RogueBonus( jp='不老の泉', es='Fuente de la juventud', ) +Reimbursement_Form = RogueBonus( + id=24, + name='Reimbursement_Form', + cn='报销单', + cht='報銷單', + en='Reimbursement Form', + jp='清算書', + es='Formulario de reembolso', +) +Sea_of_Forgetfulness = RogueBonus( + id=25, + name='Sea_of_Forgetfulness', + cn='遗忘海', + cht='遺忘海', + en='Sea of Forgetfulness', + jp='忘却の海', + es='Mar del olvido', +) +Phenomenal_Field = RogueBonus( + id=26, + name='Phenomenal_Field', + cn='现象场', + cht='現象場', + en='Phenomenal Field', + jp='現象の場', + es='Campo fenomenal', +) +Lying_Cap = RogueBonus( + id=27, + name='Lying_Cap', + cn='说谎帽', + cht='說謊帽', + en='Lying Cap', + jp='ペテンハット', + es='Sombrero mentiroso', +) diff --git a/tasks/rogue/keywords/event_option.py b/tasks/rogue/keywords/event_option.py index b808375c2..64808b8fe 100644 --- a/tasks/rogue/keywords/event_option.py +++ b/tasks/rogue/keywords/event_option.py @@ -835,7 +835,7 @@ Pick_Sal = RogueEventOption( id=93, name='Pick_Sal', cn='选择萨里。', - cht='選擇薩里。', + cht='選擇薩李。', en='Pick Sal.', jp='サリを選ぶ', es='Elige a Sal.', @@ -862,7 +862,7 @@ Let_Sal_out = RogueEventOption( id=96, name='Let_Sal_out', cn='让萨里出来吧。', - cht='讓薩里出來吧。', + cht='讓薩李出來吧。', en='Let Sal out.', jp='サリに出てきてもらう', es='Deja salir a Sal.', @@ -2319,8 +2319,8 @@ You_can_also_smash_the_cup = RogueEventOption( I_m_voting_for_Oswaldo_Schneider = RogueEventOption( id=258, name='I_m_voting_for_Oswaldo_Schneider', - cn='我要为「奥施瓦尔多·施耐德」的竞选投票!', - cht='我要為「奧施瓦爾多•施耐德」的競選投票!', + cn='我要为「奥斯瓦尔多·施耐德」的竞选投票!', + cht='我要為「奧斯瓦爾多•施耐德」的競選投票!', en='I\'m voting for "Oswaldo Schneider"!', jp='「オスワルド・シュナイダー」に投票する!', es='¡Voto por Oswaldo Schneider!', diff --git a/tasks/rogue/keywords/event_title.py b/tasks/rogue/keywords/event_title.py index bd0749810..6d9ea82a6 100644 --- a/tasks/rogue/keywords/event_title.py +++ b/tasks/rogue/keywords/event_title.py @@ -217,7 +217,7 @@ Saleo_I = RogueEventTitle( id=22, name='Saleo_I', cn='萨里奥(其一)', - cht='薩里奧(其一)', + cht='薩李奧(其一)', en='Saleo (I)', jp='サリオ(その1)', es='Saleo (I)', @@ -227,7 +227,7 @@ Sal_II = RogueEventTitle( id=23, name='Sal_II', cn='萨里(其二)', - cht='薩里(其二)', + cht='薩李(其二)', en='Sal (II)', jp='サリ(その2)', es='Sal (II)', @@ -237,7 +237,7 @@ Leo_III = RogueEventTitle( id=24, name='Leo_III', cn='里奥(其三)', - cht='里奧(其三)', + cht='李奧(其三)', en='Leo (III)', jp='リオ(その3)', es='Leo (III)', @@ -1119,7 +1119,7 @@ Insights_from_the_Universal_Dancer = RogueEventTitle( cn='寰宇舞者的启示', cht='寰宇舞者的啟示', en='Insights from the Universal Dancer', - jp='世界の踊り手の啓示', + jp='宇宙の踊り手の啓示', es='Reflexiones de la bailarina universal', option_ids=[323, 324], ) From ee256ad325d532e6bd7681cfe8ffc0d68c248e26 Mon Sep 17 00:00:00 2001 From: Zero Date: Wed, 31 Jul 2024 14:56:38 +0800 Subject: [PATCH 2/3] Fix: Convert DailyID to string in generate_daily_quests --- dev_tools/keyword_extract.py | 2 +- tasks/character/keywords/height.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index 34c608e3a..373753595 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -202,7 +202,7 @@ class KeywordExtract: def generate_daily_quests(self): daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json')) - self.load_quests([deep_get(data, 'DailyID') for data in daily_quest]) + self.load_quests([str(deep_get(data, 'DailyID')) for data in daily_quest]) self.write_daily_quest_keywords() def load_character_name_keywords(self, lang='en'): diff --git a/tasks/character/keywords/height.py b/tasks/character/keywords/height.py index a8d75132f..969b9e87b 100644 --- a/tasks/character/keywords/height.py +++ b/tasks/character/keywords/height.py @@ -13,7 +13,6 @@ CHARACTER_HEIGHT = { 'Tingyun': 'Maid', 'Sushang': 'Maid', 'Seele': 'Maid', - 'March7thPreservation': 'Maid', 'Jingliu': 'Maid', 'Bronya': 'Maid', 'Asta': 'Maid', From bdcf57375085d00d78c839bf5416e98bff292d83 Mon Sep 17 00:00:00 2001 From: Zero Date: Wed, 31 Jul 2024 15:03:51 +0800 Subject: [PATCH 3/3] format code for consistency --- dev_tools/keyword_extract.py | 87 +++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index 373753595..63f50815b 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -142,39 +142,43 @@ class KeywordExtract: gen.CommentAutoGenerage('dev_tools.keyword_extract') old_quest = [ - "Go_on_assignment_1_time", # -> Dispatch_1_assignments - "Complete_Simulated_Universe_1_times", # same - "Complete_1_stage_in_Simulated_Universe_Any_world", # -> Complete_Divergent_Universe_or_Simulated_Universe_1_times - "Complete_Calyx_Crimson_1_time", # -> Clear_Calyx_Crimson_1_times - "Enter_combat_by_attacking_enemy_Weakness_and_win_3_times", # -> Enter_combat_by_attacking_enemie_Weakness_and_win_1_times - "Use_Technique_2_times", # -> Use_Technique_1_times - "Destroy_3_destructible_objects", # -> Destroy_1_destructible_objects - "Obtain_victory_in_combat_with_Support_Characters_1_time", # -> Obtain_victory_in_combat_with_Support_Characters_1_times - "Level_up_any_character_1_time", # -> Level_up_any_character_1_times - "Level_up_any_Light_Cone_1_time", # -> Level_up_any_Light_Cone_1_times - "Synthesize_Consumable_1_time", # -> Use_the_Omni_Synthesizer_1_times - "Synthesize_material_1_time", # -> Use_the_Omni_Synthesizer_1_times - "Take_1_photo", # -> Take_photos_1_times - "Level_up_any_Relic_1_time", # -> Level_up_any_Relic_1_times + "Go_on_assignment_1_time", # -> Dispatch_1_assignments + "Complete_Simulated_Universe_1_times", # same + "Complete_1_stage_in_Simulated_Universe_Any_world", + # -> Complete_Divergent_Universe_or_Simulated_Universe_1_times + "Complete_Calyx_Crimson_1_time", # -> Clear_Calyx_Crimson_1_times + "Enter_combat_by_attacking_enemy_Weakness_and_win_3_times", + # -> Enter_combat_by_attacking_enemie_Weakness_and_win_1_times + "Use_Technique_2_times", # -> Use_Technique_1_times + "Destroy_3_destructible_objects", # -> Destroy_1_destructible_objects + "Obtain_victory_in_combat_with_Support_Characters_1_time", + # -> Obtain_victory_in_combat_with_Support_Characters_1_times + "Level_up_any_character_1_time", # -> Level_up_any_character_1_times + "Level_up_any_Light_Cone_1_time", # -> Level_up_any_Light_Cone_1_times + "Synthesize_Consumable_1_time", # -> Use_the_Omni_Synthesizer_1_times + "Synthesize_material_1_time", # -> Use_the_Omni_Synthesizer_1_times + "Take_1_photo", # -> Take_photos_1_times + "Level_up_any_Relic_1_time", # -> Level_up_any_Relic_1_times ] correct_times = { - # "Dispatch_1_assignments": 1, - # "Complete_Divergent_Universe_or_Simulated_Universe_1_times": 1, - # "Clear_Calyx_Crimson_1_times": 1, + # "Dispatch_1_assignments": 1, + # "Complete_Divergent_Universe_or_Simulated_Universe_1_times": 1, + # "Clear_Calyx_Crimson_1_times": 1, "Enter_combat_by_attacking_enemie_Weakness_and_win_1_times": 3, "Use_Technique_1_times": 2, "Destroy_1_destructible_objects": 3, - # "Obtain_victory_in_combat_with_Support_Characters_1_times": 1, - # "Level_up_any_character_1_times": 1, - # "Level_up_any_Light_Cone_1_times": 1, - # "Use_the_Omni_Synthesizer_1_times": 1, - # "Take_photos_1_times": 1, - # "Level_up_any_Relic_1_times": 1, + # "Obtain_victory_in_combat_with_Support_Characters_1_times": 1, + # "Level_up_any_character_1_times": 1, + # "Level_up_any_Light_Cone_1_times": 1, + # "Use_the_Omni_Synthesizer_1_times": 1, + # "Take_photos_1_times": 1, + # "Level_up_any_Relic_1_times": 1, "Consume_1_Trailblaze_Power": 120 } - def replace_templates_quest(text: str, correct_time = 1) -> str: + + def replace_templates_quest(text: str, correct_time=1) -> str: text = replace_templates(text) text = text.replace('1', f'{correct_time}') return text @@ -191,7 +195,8 @@ class KeywordExtract: gen.ObjectAttr(key='id', value=index + last_id + 1) gen.ObjectAttr(key='name', value=name) for lang in UI_LANGUAGES: - gen.ObjectAttr(key=lang, value=replace_templates_quest(self.find_keyword(keyword, lang=lang)[1], correct_times.setdefault(old_name, 1))) + gen.ObjectAttr(key=lang, value=replace_templates_quest(self.find_keyword(keyword, lang=lang)[1], + correct_times.setdefault(old_name, 1))) gen.last_id = index + last_id + 1 output_file = './tasks/daily/keywords/daily_quest.py' @@ -221,16 +226,16 @@ class KeywordExtract: # Damage type -> damage hash damage_info = dict() for data in read_file(os.path.join( - TextMap.DATA_FOLDER, 'ExcelOutput', - 'DamageType.json' + TextMap.DATA_FOLDER, 'ExcelOutput', + 'DamageType.json' )): type_name = deep_get(data, 'ID', 0) 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' + TextMap.DATA_FOLDER, 'ExcelOutput', + 'AvatarConfig.json' )): name_hash = deep_get(data, 'AvatarName.Hash') damage_type = deep_get(data, 'DamageType') @@ -238,27 +243,27 @@ class KeywordExtract: name_hash, damage_info[damage_type]) # Item id -> character id promotion_info = defaultdict(list) - - def merge_same(data: list[dict],keyword) -> list: + + def merge_same(data: list[dict], keyword) -> list: mp = defaultdict(dict) for d in data: length = len(mp[d[keyword]]) mp[d[keyword]][str(length)] = d return mp.values() - + for data in merge_same(read_file(os.path.join( - TextMap.DATA_FOLDER, 'ExcelOutput', - 'AvatarPromotionConfig.json' - )),keyword='AvatarID'): + TextMap.DATA_FOLDER, 'ExcelOutput', + 'AvatarPromotionConfig.json' + )), keyword='AvatarID'): 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 merge_same(read_file(os.path.join( - TextMap.DATA_FOLDER, 'ExcelOutput', - 'MappingInfo.json' - )),keyword='ID'): + TextMap.DATA_FOLDER, 'ExcelOutput', + 'MappingInfo.json' + )), keyword='ID'): farm_type = deep_get(data, '0.FarmType') if farm_type != 'ELEMENT': continue @@ -397,7 +402,7 @@ class KeywordExtract: # ignore endless buffs endless_buffs = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueEndlessMegaBuffDesc.json')) - endless_buff_ids = [int(deep_get(data,'MazeBuffID')) for data in endless_buffs] + endless_buff_ids = [int(deep_get(data, 'MazeBuffID')) for data in endless_buffs] blessings_id = [id_ for id_ in blessings_id if id_ not in endless_buff_ids] def get_blessing_infos(id_list, with_enhancement: bool): @@ -407,7 +412,7 @@ class KeywordExtract: # 119 is the magic number make type match with path in keyword above for blessing_hash, blessing_id in zip(blessings_hash, id_list)} blessings_category = {blessing_hash: deep_get(blessings_info, f'{blessing_id}.RogueBuffCategory') - for blessing_hash, blessing_id in zip(blessings_hash, id_list)} + for blessing_hash, blessing_id in zip(blessings_hash, id_list)} category_map = { "Common": 1, "Rare": 2, @@ -524,7 +529,9 @@ class KeywordExtract: if option_dup_count[option_var] > 1: option_var = f'{option_var}_{option_md5[:md5_prefix_len]}' return option_var + return wrapper + option_gen = None option_hash_to_keyword_id = dict() # option hash -> option keyword id for i, (option_md5, option_hash) in enumerate(option_md5s.items(), start=1):