From f05148fcf874cbb3e6584eb7f34fcf6019d744aa Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 11 May 2024 18:21:28 +0800 Subject: [PATCH] Dev: Extract item keywords --- dev_tools/keyword_extract.py | 2 + dev_tools/keywords/base.py | 18 + dev_tools/keywords/dungeon_list.py | 7 +- dev_tools/keywords/item.py | 109 +++++ tasks/dungeon/keywords/classes.py | 16 +- tasks/dungeon/keywords/dungeon.py | 67 +++ tasks/planner/keywords/__init__.py | 9 + tasks/planner/keywords/classes.py | 59 +++ tasks/planner/keywords/item_ascension.py | 252 +++++++++++ tasks/planner/keywords/item_calyx.py | 317 ++++++++++++++ tasks/planner/keywords/item_currency.py | 226 ++++++++++ tasks/planner/keywords/item_exp.py | 135 ++++++ tasks/planner/keywords/item_trace.py | 525 +++++++++++++++++++++++ tasks/planner/keywords/item_weekly.py | 83 ++++ 14 files changed, 1822 insertions(+), 3 deletions(-) create mode 100644 dev_tools/keywords/item.py create mode 100644 tasks/planner/keywords/__init__.py create mode 100644 tasks/planner/keywords/classes.py create mode 100644 tasks/planner/keywords/item_ascension.py create mode 100644 tasks/planner/keywords/item_calyx.py create mode 100644 tasks/planner/keywords/item_currency.py create mode 100644 tasks/planner/keywords/item_exp.py create mode 100644 tasks/planner/keywords/item_trace.py create mode 100644 tasks/planner/keywords/item_weekly.py diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index d98d6a865..106e395f8 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -576,6 +576,8 @@ class KeywordExtract: self.load_keywords(['养成材料', '光锥', '遗器', '其他材料', '消耗品', '任务', '贵重物']) self.write_keywords(keyword_class='ItemTab', text_convert=lambda name: name.replace(' ', ''), output_file='./tasks/item/keywords/tab.py') + from dev_tools.keywords.item import generate_items + generate_items() self.generate_rogue_buff() self.load_keywords(['已强化']) self.write_keywords(keyword_class='RogueEnhancement', output_file='./tasks/rogue/keywords/enhancement.py') diff --git a/dev_tools/keywords/base.py b/dev_tools/keywords/base.py index f9c147b3f..d3549c606 100644 --- a/dev_tools/keywords/base.py +++ b/dev_tools/keywords/base.py @@ -159,6 +159,7 @@ class GenerateKeyword: base = self.keyword_format.copy() text_id = keyword.pop('text_id') if text_id is None: + logger.warning(f'Empty text_id in {keyword}') return # id self.keyword_index += 1 @@ -191,3 +192,20 @@ class GenerateKeyword: def __call__(self, *args, **kwargs): self.generate() + + +class ShareData(GenerateKeyword): + @cached_property + def GameplayGuideData(self): + return self.read_file('./ExcelOutput/GameplayGuideData.json') + + @cached_property + def MappingInfo(self): + return self.read_file('./ExcelOutput/MappingInfo.json') + + @cached_property + def ItemConfig(self): + return self.read_file('./ExcelOutput/ItemConfig.json') + + +SHARE_DATA = ShareData() diff --git a/dev_tools/keywords/dungeon_list.py b/dev_tools/keywords/dungeon_list.py index 35221f9da..10f362a87 100644 --- a/dev_tools/keywords/dungeon_list.py +++ b/dev_tools/keywords/dungeon_list.py @@ -1,7 +1,7 @@ import re import typing as t -from dev_tools.keywords.base import GenerateKeyword, text_to_variable +from dev_tools.keywords.base import GenerateKeyword, SHARE_DATA, text_to_variable from module.base.decorator import cached_property from module.config.utils import deep_get @@ -26,13 +26,14 @@ class GenerateDungeonList(GenerateKeyword): @cached_property def data(self): - return self.read_file('./ExcelOutput/GameplayGuideData.json') + return SHARE_DATA.GameplayGuideData 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], + dungeon_id=-1, plane_id=-1, ) else: @@ -41,6 +42,7 @@ class GenerateDungeonList(GenerateKeyword): def iter_dungeon(self): temp_save = "" for data in self.data.values(): + dungeon_id = data.get('ID', 0) text_id = deep_get(data, keys='Name.Hash') plane_id = deep_get(data, 'MapEntranceID', 0) _, name = self.find_keyword(text_id, lang='cn') @@ -51,6 +53,7 @@ class GenerateDungeonList(GenerateKeyword): continue yield dict( text_id=text_id, + dungeon_id=dungeon_id, plane_id=plane_id, ) if temp_save: diff --git a/dev_tools/keywords/item.py b/dev_tools/keywords/item.py new file mode 100644 index 000000000..e6b26be7e --- /dev/null +++ b/dev_tools/keywords/item.py @@ -0,0 +1,109 @@ +import typing as t + +from dev_tools.keywords.base import GenerateKeyword, SHARE_DATA +from module.base.decorator import cached_property +from module.config.utils import deep_get + + +class GenerateItemBase(GenerateKeyword): + purpose_type = [] + + def iter_items(self) -> t.Iterable[dict]: + for data in SHARE_DATA.ItemConfig.values(): + item_id = data.get('ID', 0) + text_id = deep_get(data, keys='ItemName.Hash') + subtype = data.get('ItemSubType', 0) + rarity = data.get('Rarity', 0) + purpose = data.get('PurposeType', 0) + item_group = data.get('ItemGroup', 0) + yield dict( + text_id=text_id, + rarity=rarity, + item_id=item_id, + item_group=item_group, + dungeon_id=-1, + subtype=subtype, + purpose=purpose, + ) + + def iter_keywords(self) -> t.Iterable[dict]: + for data in self.iter_items(): + if data['subtype'] == 'Material' and data['purpose'] in self.purpose_type: + data['dungeon_id'] = self.dict_itemid_to_dungeonid.get(data['item_id'], -1) + yield data + + def iter_rows(self) -> t.Iterable[dict]: + for data in super().iter_rows(): + data.pop('subtype') + data.pop('purpose') + yield data + + @cached_property + def dict_itemid_to_dungeonid(self): + """ + MappingInfo is like + dungeon_id: + dungeon_level: + data + """ + dic = {} + for level_data in SHARE_DATA.MappingInfo.values(): + # 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': + 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) + + return dic + + +class GenerateItemCurrency(GenerateItemBase): + output_file = './tasks/planner/keywords/item_currency.py' + + def iter_keywords(self) -> t.Iterable[dict]: + for data in self.iter_items(): + if data['subtype'] == 'Virtual' and data['item_id'] < 100: + yield data + + +class GenerateItemExp(GenerateItemBase): + output_file = './tasks/planner/keywords/item_exp.py' + purpose_type = [1, 5, 6] + + +class GenerateItemAscension(GenerateItemBase): + output_file = './tasks/planner/keywords/item_ascension.py' + purpose_type = [2] + + +class GenerateItemTrace(GenerateItemBase): + output_file = './tasks/planner/keywords/item_trace.py' + purpose_type = [3] + + +class GenerateItemWeekly(GenerateItemBase): + output_file = './tasks/planner/keywords/item_weekly.py' + purpose_type = [4] + + +class GenerateItemCalyx(GenerateItemBase): + output_file = './tasks/planner/keywords/item_calyx.py' + purpose_type = [7] + + +def generate_items(): + GenerateItemCurrency()() + GenerateItemExp()() + GenerateItemAscension()() + GenerateItemTrace()() + GenerateItemWeekly()() + GenerateItemCalyx()() diff --git a/tasks/dungeon/keywords/classes.py b/tasks/dungeon/keywords/classes.py index 5b9da5a36..d9c504aa2 100644 --- a/tasks/dungeon/keywords/classes.py +++ b/tasks/dungeon/keywords/classes.py @@ -20,6 +20,7 @@ class DungeonTab(Keyword): class DungeonList(Keyword): instances: ClassVar = {} + dungeon_id: int plane_id: int @cached_property @@ -183,6 +184,20 @@ class DungeonList(Keyword): else: return '' + @classmethod + def find_dungeon_id(cls, dungeon_id): + """ + Args: + dungeon_id: + + Returns: + DungeonList: DungeonList object or None + """ + for instance in cls.instances.values(): + if instance.dungeon_id == dungeon_id: + return instance + return None + @classmethod def find_dungeon_by_string(cls, cn='', en='', **kwargs): """ @@ -225,7 +240,6 @@ class DungeonList(Keyword): return None - @dataclass(repr=False) class DungeonEntrance(Keyword): instances: ClassVar = {} diff --git a/tasks/dungeon/keywords/dungeon.py b/tasks/dungeon/keywords/dungeon.py index c4301cba0..52bf89da9 100644 --- a/tasks/dungeon/keywords/dungeon.py +++ b/tasks/dungeon/keywords/dungeon.py @@ -11,6 +11,7 @@ Calyx_Golden_Memories_Jarilo_VI = DungeonList( en='Bud of Memories (Jarilo-Ⅵ)', jp='回憶の蕾・ヤリーロ-Ⅵ', es='Flor de los recuerdos (Jarilo-Ⅵ)', + dungeon_id=1001, plane_id=2010101, ) Calyx_Golden_Aether_Jarilo_VI = DungeonList( @@ -21,6 +22,7 @@ Calyx_Golden_Aether_Jarilo_VI = DungeonList( en='Bud of Aether (Jarilo-Ⅵ)', jp='エーテルの蕾・ヤリーロ-Ⅵ', es='Flor de éter (Jarilo-Ⅵ)', + dungeon_id=1002, plane_id=2011101, ) Calyx_Golden_Treasures_Jarilo_VI = DungeonList( @@ -31,6 +33,7 @@ Calyx_Golden_Treasures_Jarilo_VI = DungeonList( en='Bud of Treasures (Jarilo-Ⅵ)', jp='秘蔵の蕾・ヤリーロ-Ⅵ', es='Flor de tesoros (Jarilo-Ⅵ)', + dungeon_id=1003, plane_id=2012101, ) Calyx_Golden_Memories_The_Xianzhou_Luofu = DungeonList( @@ -41,6 +44,7 @@ Calyx_Golden_Memories_The_Xianzhou_Luofu = DungeonList( en='Bud of Memories (The Xianzhou Luofu)', jp='回憶の蕾・仙舟「羅浮」', es='Flor de los recuerdos (El Luofu de Xianzhou)', + dungeon_id=1011, plane_id=2021101, ) Calyx_Golden_Aether_The_Xianzhou_Luofu = DungeonList( @@ -51,6 +55,7 @@ Calyx_Golden_Aether_The_Xianzhou_Luofu = DungeonList( en='Bud of Aether (The Xianzhou Luofu)', jp='エーテルの蕾・仙舟「羅浮」', es='Flor de éter (El Luofu de Xianzhou)', + dungeon_id=1012, plane_id=2022101, ) Calyx_Golden_Treasures_The_Xianzhou_Luofu = DungeonList( @@ -61,6 +66,7 @@ Calyx_Golden_Treasures_The_Xianzhou_Luofu = DungeonList( en='Bud of Treasures (The Xianzhou Luofu)', jp='秘蔵の蕾・仙舟「羅浮」', es='Flor de tesoros (El Luofu de Xianzhou)', + dungeon_id=1013, plane_id=2022201, ) Calyx_Golden_Memories_Penacony = DungeonList( @@ -71,6 +77,7 @@ Calyx_Golden_Memories_Penacony = DungeonList( en='Bud of Memories (Penacony)', jp='回憶の蕾・ピノコニー', es='Flor de los recuerdos (Colonipenal)', + dungeon_id=1014, plane_id=2031301, ) Calyx_Golden_Aether_Penacony = DungeonList( @@ -81,6 +88,7 @@ Calyx_Golden_Aether_Penacony = DungeonList( en='Bud of Aether (Penacony)', jp='エーテルの蕾・ピノコニー', es='Flor de éter (Colonipenal)', + dungeon_id=1015, plane_id=2031201, ) Calyx_Golden_Treasures_Penacony = DungeonList( @@ -91,6 +99,7 @@ Calyx_Golden_Treasures_Penacony = DungeonList( en='Bud of Treasures (Penacony)', jp='秘蔵の蕾・ピノコニー', es='Flor de tesoros (Colonipenal)', + dungeon_id=1016, plane_id=2031101, ) Calyx_Crimson_Destruction_Herta_StorageZone = DungeonList( @@ -101,6 +110,7 @@ Calyx_Crimson_Destruction_Herta_StorageZone = DungeonList( en='Calyx (Crimson): Bud of Destruction', jp='疑似花萼(赤)・壊滅の蕾', es='Flor de la Destrucción', + dungeon_id=1004, plane_id=2000201, ) Calyx_Crimson_Destruction_Luofu_ScalegorgeWaterscape = DungeonList( @@ -111,6 +121,7 @@ Calyx_Crimson_Destruction_Luofu_ScalegorgeWaterscape = DungeonList( en='Calyx (Crimson): Bud of Destruction', jp='疑似花萼(赤)・壊滅の蕾', es='Flor de la Destrucción', + dungeon_id=1018, plane_id=2023201, ) Calyx_Crimson_Preservation_Herta_SupplyZone = DungeonList( @@ -121,6 +132,7 @@ Calyx_Crimson_Preservation_Herta_SupplyZone = DungeonList( en='Calyx (Crimson): Bud of Preservation', jp='疑似花萼(赤)・存護の蕾', es='Flor de la Conservación', + dungeon_id=1005, plane_id=2000301, ) Calyx_Crimson_Preservation_Penacony_ClockStudiosThemePark = DungeonList( @@ -131,6 +143,7 @@ Calyx_Crimson_Preservation_Penacony_ClockStudiosThemePark = DungeonList( en='Calyx (Crimson): Bud of Preservation', jp='疑似花萼(赤)・存護の蕾', es='Flor de la Conservación', + dungeon_id=1020, plane_id=2032101, ) Calyx_Crimson_The_Hunt_Jarilo_OutlyingSnowPlains = DungeonList( @@ -141,6 +154,7 @@ Calyx_Crimson_The_Hunt_Jarilo_OutlyingSnowPlains = DungeonList( en='Calyx (Crimson): Bud of The Hunt', jp='疑似花萼(赤)・巡狩の蕾', es='Flor de la Cacería', + dungeon_id=1006, plane_id=2010101, ) Calyx_Crimson_The_Hunt_Penacony_SoulGladScorchsandAuditionVenue = DungeonList( @@ -151,6 +165,7 @@ Calyx_Crimson_The_Hunt_Penacony_SoulGladScorchsandAuditionVenue = DungeonList( en='Calyx (Crimson): Bud of The Hunt', jp='疑似花萼(赤)・巡狩の蕾', es='Cáliz (carmesí): Flor de la Cacería', + dungeon_id=1022, plane_id=2033101, ) Calyx_Crimson_Abundance_Jarilo_BackwaterPass = DungeonList( @@ -161,6 +176,7 @@ Calyx_Crimson_Abundance_Jarilo_BackwaterPass = DungeonList( en='Calyx (Crimson): Bud of Abundance', jp='疑似花萼(赤)・豊穣の蕾', es='Flor de la Abundancia', + dungeon_id=1007, plane_id=2011101, ) Calyx_Crimson_Abundance_Luofu_FyxestrollGarden = DungeonList( @@ -171,6 +187,7 @@ Calyx_Crimson_Abundance_Luofu_FyxestrollGarden = DungeonList( en='Calyx (Crimson): Bud of Abundance', jp='疑似花萼(赤)・豊穣の蕾', es='Flor de la Abundancia', + dungeon_id=1021, plane_id=2022301, ) Calyx_Crimson_Erudition_Jarilo_RivetTown = DungeonList( @@ -181,6 +198,7 @@ Calyx_Crimson_Erudition_Jarilo_RivetTown = DungeonList( en='Calyx (Crimson): Bud of Erudition', jp='疑似花萼(赤)・知恵の蕾', es='Flor de la Erudición', + dungeon_id=1008, plane_id=2012201, ) Calyx_Crimson_Harmony_Jarilo_RobotSettlement = DungeonList( @@ -191,6 +209,7 @@ Calyx_Crimson_Harmony_Jarilo_RobotSettlement = DungeonList( en='Calyx (Crimson): Bud of Harmony', jp='疑似花萼(赤)・調和の蕾', es='Flor de la Armonía', + dungeon_id=1009, plane_id=2012301, ) Calyx_Crimson_Harmony_Penacony_TheReverieDreamscape = DungeonList( @@ -201,6 +220,7 @@ Calyx_Crimson_Harmony_Penacony_TheReverieDreamscape = DungeonList( en='Calyx (Crimson): Bud of Harmony', jp='疑似花萼(赤)・調和の蕾', es='Flor de la Armonía', + dungeon_id=1019, plane_id=2031101, ) Calyx_Crimson_Nihility_Jarilo_GreatMine = DungeonList( @@ -211,6 +231,7 @@ Calyx_Crimson_Nihility_Jarilo_GreatMine = DungeonList( en='Calyx (Crimson): Bud of Nihility', jp='疑似花萼(赤)・虚無の蕾', es='Flor de la Nihilidad', + dungeon_id=1010, plane_id=2012101, ) Calyx_Crimson_Nihility_Luofu_AlchemyCommission = DungeonList( @@ -221,6 +242,7 @@ Calyx_Crimson_Nihility_Luofu_AlchemyCommission = DungeonList( en='Calyx (Crimson): Bud of Nihility', jp='疑似花萼(赤)・虚無の蕾', es='Flor de la Nihilidad', + dungeon_id=1017, plane_id=2023101, ) Stagnant_Shadow_Quanta = DungeonList( @@ -231,6 +253,7 @@ Stagnant_Shadow_Quanta = DungeonList( en='Stagnant Shadow: Shape of Quanta', jp='凝結虚影・虚海の形', es='Forma del cuanto', + dungeon_id=1101, plane_id=2000101, ) Stagnant_Shadow_Gust = DungeonList( @@ -241,6 +264,7 @@ Stagnant_Shadow_Gust = DungeonList( en='Stagnant Shadow: Shape of Gust', jp='凝結虚影・薫風の形', es='Forma del aire', + dungeon_id=1102, plane_id=2012201, ) Stagnant_Shadow_Fulmination = DungeonList( @@ -251,6 +275,7 @@ Stagnant_Shadow_Fulmination = DungeonList( en='Stagnant Shadow: Shape of Fulmination', jp='凝結虚影・鳴雷の形', es='Forma del trueno', + dungeon_id=1103, plane_id=2013201, ) Stagnant_Shadow_Blaze = DungeonList( @@ -261,6 +286,7 @@ Stagnant_Shadow_Blaze = DungeonList( en='Stagnant Shadow: Shape of Blaze', jp='凝結虚影・炎華の形', es='Forma de las llamas', + dungeon_id=1104, plane_id=2013101, ) Stagnant_Shadow_Spike = DungeonList( @@ -271,6 +297,7 @@ Stagnant_Shadow_Spike = DungeonList( en='Stagnant Shadow: Shape of Spike', jp='凝結虚影・切先の形', es='Forma afilada', + dungeon_id=1105, plane_id=2012101, ) Stagnant_Shadow_Rime = DungeonList( @@ -281,6 +308,7 @@ Stagnant_Shadow_Rime = DungeonList( en='Stagnant Shadow: Shape of Rime', jp='凝結虚影・霜晶の形', es='Forma de la escarcha', + dungeon_id=1106, plane_id=2013201, ) Stagnant_Shadow_Mirage = DungeonList( @@ -291,6 +319,7 @@ Stagnant_Shadow_Mirage = DungeonList( en='Stagnant Shadow: Shape of Mirage', jp='凝結虚影・幻光の形', es='Forma del espejismo', + dungeon_id=1107, plane_id=2011101, ) Stagnant_Shadow_Icicle = DungeonList( @@ -301,6 +330,7 @@ Stagnant_Shadow_Icicle = DungeonList( en='Stagnant Shadow: Shape of Icicle', jp='凝結虚影・氷柱の形', es='Forma del témpano', + dungeon_id=1108, plane_id=2021101, ) Stagnant_Shadow_Doom = DungeonList( @@ -311,6 +341,7 @@ Stagnant_Shadow_Doom = DungeonList( en='Stagnant Shadow: Shape of Doom', jp='凝結虚影・震厄の形', es='Forma de la perdición', + dungeon_id=1109, plane_id=2021201, ) Stagnant_Shadow_Puppetry = DungeonList( @@ -321,6 +352,7 @@ Stagnant_Shadow_Puppetry = DungeonList( en='Stagnant Shadow: Shape of Puppetry', jp='凝結虚影・傀儡の形', es='Forma de las marionetas', + dungeon_id=1110, plane_id=2022201, ) Stagnant_Shadow_Abomination = DungeonList( @@ -331,6 +363,7 @@ Stagnant_Shadow_Abomination = DungeonList( en='Stagnant Shadow: Shape of Abomination', jp='凝結虚影・厄獣の形', es='Forma de la abominación', + dungeon_id=1111, plane_id=2023201, ) Stagnant_Shadow_Scorch = DungeonList( @@ -341,6 +374,7 @@ Stagnant_Shadow_Scorch = DungeonList( en='Stagnant Shadow: Shape of Scorch', jp='凝結虚影・燔灼の形', es='Forma abrasada', + dungeon_id=1112, plane_id=2012101, ) Stagnant_Shadow_Celestial = DungeonList( @@ -351,6 +385,7 @@ Stagnant_Shadow_Celestial = DungeonList( en='Stagnant Shadow: Shape of Celestial', jp='凝結虚影・天人の形', es='Forma de lo celestial', + dungeon_id=1113, plane_id=2023101, ) Stagnant_Shadow_Perdition = DungeonList( @@ -361,6 +396,7 @@ Stagnant_Shadow_Perdition = DungeonList( en='Stagnant Shadow: Shape of Perdition', jp='凝結虚影・幽府の形', es='Forma del aislamiento', + dungeon_id=1114, plane_id=2022301, ) Stagnant_Shadow_Nectar = DungeonList( @@ -371,6 +407,7 @@ Stagnant_Shadow_Nectar = DungeonList( en='Stagnant Shadow: Shape of Nectar', jp='凝結虚影・氷醸の形', es='Forma del néctar', + dungeon_id=1115, plane_id=2031101, ) Stagnant_Shadow_Roast = DungeonList( @@ -381,6 +418,7 @@ Stagnant_Shadow_Roast = DungeonList( en='Stagnant Shadow: Shape of Roast', jp='凝結虚影・焦灼の形', es='Forma del agostamiento', + dungeon_id=1116, plane_id=2031301, ) Stagnant_Shadow_Ire = DungeonList( @@ -391,6 +429,7 @@ Stagnant_Shadow_Ire = DungeonList( en='Stagnant Shadow: Shape of Ire', jp='凝結虚影・憤怒の形', es='Forma de la ira', + dungeon_id=1117, plane_id=2032201, ) Stagnant_Shadow_Duty = DungeonList( @@ -401,6 +440,7 @@ Stagnant_Shadow_Duty = DungeonList( en='Stagnant Shadow: Shape of Duty', jp='凝結虚影・職掌の形', es='Sombra paralizada: Forma del deber', + dungeon_id=1118, plane_id=2032101, ) Cavern_of_Corrosion_Path_of_Gelid_Wind = DungeonList( @@ -411,6 +451,7 @@ Cavern_of_Corrosion_Path_of_Gelid_Wind = DungeonList( en='Cavern of Corrosion: Path of Gelid Wind', jp='侵蝕トンネル・霜風の路', es='Senda del viento gélido', + dungeon_id=1201, plane_id=2000201, ) Cavern_of_Corrosion_Path_of_Jabbing_Punch = DungeonList( @@ -421,6 +462,7 @@ Cavern_of_Corrosion_Path_of_Jabbing_Punch = DungeonList( en='Cavern of Corrosion: Path of Jabbing Punch', jp='侵蝕トンネル・迅拳の路', es='Senda de los puños rápidos', + dungeon_id=1202, plane_id=2013101, ) Cavern_of_Corrosion_Path_of_Drifting = DungeonList( @@ -431,6 +473,7 @@ Cavern_of_Corrosion_Path_of_Drifting = DungeonList( en='Cavern of Corrosion: Path of Drifting', jp='侵蝕トンネル・漂泊の路', es='Senda de la deriva', + dungeon_id=1203, plane_id=2013201, ) Cavern_of_Corrosion_Path_of_Providence = DungeonList( @@ -441,6 +484,7 @@ Cavern_of_Corrosion_Path_of_Providence = DungeonList( en='Cavern of Corrosion: Path of Providence', jp='侵蝕トンネル・睿治の路', es='Senda de la providencia', + dungeon_id=1204, plane_id=2013401, ) Cavern_of_Corrosion_Path_of_Holy_Hymn = DungeonList( @@ -451,6 +495,7 @@ Cavern_of_Corrosion_Path_of_Holy_Hymn = DungeonList( en='Cavern of Corrosion: Path of Holy Hymn', jp='侵蝕トンネル・聖頌の路', es='Senda del himno sagrado', + dungeon_id=1205, plane_id=2021101, ) Cavern_of_Corrosion_Path_of_Conflagration = DungeonList( @@ -461,6 +506,7 @@ Cavern_of_Corrosion_Path_of_Conflagration = DungeonList( en='Cavern of Corrosion: Path of Conflagration', jp='侵蝕トンネル・野焔の路', es='Senda de la conflagración', + dungeon_id=1206, plane_id=2021201, ) Cavern_of_Corrosion_Path_of_Elixir_Seekers = DungeonList( @@ -471,6 +517,7 @@ Cavern_of_Corrosion_Path_of_Elixir_Seekers = DungeonList( en='Cavern of Corrosion: Path of Elixir Seekers', jp='侵蝕トンネル・薬使の路', es='Senda de los elixires', + dungeon_id=1207, plane_id=2023101, ) Cavern_of_Corrosion_Path_of_Darkness = DungeonList( @@ -481,6 +528,7 @@ Cavern_of_Corrosion_Path_of_Darkness = DungeonList( en='Cavern of Corrosion: Path of Darkness', jp='侵蝕トンネル・幽冥の路', es='Senda de la oscuridad', + dungeon_id=1208, plane_id=2022301, ) Cavern_of_Corrosion_Path_of_Dreamdive = DungeonList( @@ -491,6 +539,7 @@ Cavern_of_Corrosion_Path_of_Dreamdive = DungeonList( en='Cavern of Corrosion: Path of Dreamdive', jp='侵蝕トンネル・夢潜の路', es='Senda de los sueños', + dungeon_id=1209, plane_id=2031101, ) Echo_of_War_Destruction_Beginning = DungeonList( @@ -501,6 +550,7 @@ Echo_of_War_Destruction_Beginning = DungeonList( en="Echo of War: Destruction's Beginning", jp='歴戦余韻・壊滅の始まり', es='El principio de la Destrucción', + dungeon_id=1301, plane_id=2000301, ) Echo_of_War_End_of_the_Eternal_Freeze = DungeonList( @@ -511,6 +561,7 @@ Echo_of_War_End_of_the_Eternal_Freeze = DungeonList( en='Echo of War: End of the Eternal Freeze', jp='歴戦余韻・寒波の幕切れ', es='El fin del Hielo Eterno', + dungeon_id=1302, plane_id=2013401, ) Echo_of_War_Divine_Seed = DungeonList( @@ -521,6 +572,7 @@ Echo_of_War_Divine_Seed = DungeonList( en='Echo of War: Divine Seed', jp='歴戦余韻・不死の神実', es='Semilla divina', + dungeon_id=1303, plane_id=2023201, ) Echo_of_War_Borehole_Planet_Old_Crater = DungeonList( @@ -531,6 +583,7 @@ Echo_of_War_Borehole_Planet_Old_Crater = DungeonList( en="Echo of War: Borehole Planet's Old Crater", jp='歴戦余韻・星を蝕む往日の面影', es='Cráter del planeta devorado', + dungeon_id=1304, plane_id=2000401, ) Echo_of_War_Salutations_of_Ashen_Dreams = DungeonList( @@ -541,6 +594,7 @@ Echo_of_War_Salutations_of_Ashen_Dreams = DungeonList( en='Echo of War: Salutations of Ashen Dreams', jp='歴戦余韻・現世の夢の礼賛', es='Ecos de la guerra: Tributo del sueño ceniciento', + dungeon_id=1305, plane_id=2033201, ) Simulated_Universe_World_1 = DungeonList( @@ -551,6 +605,7 @@ Simulated_Universe_World_1 = DungeonList( en='Simulated Universe: World 1', jp='第一世界・模擬宇宙', es='Mundo 1', + dungeon_id=110, plane_id=100000104, ) Simulated_Universe_World_3 = DungeonList( @@ -561,6 +616,7 @@ Simulated_Universe_World_3 = DungeonList( en='Simulated Universe: World 3', jp='第三世界・模擬宇宙', es='Mundo 3', + dungeon_id=130, plane_id=100000104, ) Simulated_Universe_World_4 = DungeonList( @@ -571,6 +627,7 @@ Simulated_Universe_World_4 = DungeonList( en='Simulated Universe: World 4', jp='第四世界・模擬宇宙', es='Mundo 4', + dungeon_id=140, plane_id=100000104, ) Simulated_Universe_World_5 = DungeonList( @@ -581,6 +638,7 @@ Simulated_Universe_World_5 = DungeonList( en='Simulated Universe: World 5', jp='第五世界・模擬宇宙', es='Mundo 5', + dungeon_id=150, plane_id=100000104, ) Simulated_Universe_World_6 = DungeonList( @@ -591,6 +649,7 @@ Simulated_Universe_World_6 = DungeonList( en='Simulated Universe: World 6', jp='第六世界・模擬宇宙', es='Mundo 6', + dungeon_id=160, plane_id=100000104, ) Simulated_Universe_World_7 = DungeonList( @@ -601,6 +660,7 @@ Simulated_Universe_World_7 = DungeonList( en='Simulated Universe: World 7', jp='第七世界・模擬宇宙', es='Mundo 7', + dungeon_id=170, plane_id=100000104, ) Simulated_Universe_World_8 = DungeonList( @@ -611,6 +671,7 @@ Simulated_Universe_World_8 = DungeonList( en='Simulated Universe: World 8', jp='第八世界・模擬宇宙', es='Mundo 8', + dungeon_id=180, plane_id=100000104, ) Simulated_Universe_World_9 = DungeonList( @@ -621,6 +682,7 @@ Simulated_Universe_World_9 = DungeonList( en='Simulated Universe: World 9', jp='第九世界・模擬宇宙', es='Mundo 9', + dungeon_id=190, plane_id=100000104, ) Simulated_Universe_The_Swarm_Disaster = DungeonList( @@ -631,6 +693,7 @@ Simulated_Universe_The_Swarm_Disaster = DungeonList( en='The Swarm Disaster', jp='宇宙の蝗害', es='La Plaga', + dungeon_id=-1, plane_id=-1, ) Simulated_Universe_Gold_and_Gears = DungeonList( @@ -641,6 +704,7 @@ Simulated_Universe_Gold_and_Gears = DungeonList( en='Gold and Gears', jp='黄金と機械', es='Oro y maquinaria', + dungeon_id=-1, plane_id=-1, ) Memory_of_Chaos = DungeonList( @@ -651,6 +715,7 @@ Memory_of_Chaos = DungeonList( en='Memory of Chaos', jp='混沌の記憶', es='Evocación caótica', + dungeon_id=-1, plane_id=-1, ) The_Voyage_of_Navis_Astriger = DungeonList( @@ -661,6 +726,7 @@ The_Voyage_of_Navis_Astriger = DungeonList( en='The Voyage of Navis Astriger', jp='天艟求仙放浪記', es='El viaje de las naves astriger', + dungeon_id=-1, plane_id=-1, ) The_Last_Vestiges_of_Towering_Citadel = DungeonList( @@ -671,5 +737,6 @@ The_Last_Vestiges_of_Towering_Citadel = DungeonList( en='The Last Vestiges of Towering Citadel', jp='永屹の城の秘密', es='Herencia de la Ciudadela Imponente', + dungeon_id=-1, plane_id=-1, ) diff --git a/tasks/planner/keywords/__init__.py b/tasks/planner/keywords/__init__.py new file mode 100644 index 000000000..81a8d2fc4 --- /dev/null +++ b/tasks/planner/keywords/__init__.py @@ -0,0 +1,9 @@ +import tasks.planner.keywords.item_ascension as KEYWORDS_ITEM_ASCENSION +import tasks.planner.keywords.item_calyx as KEYWORDS_ITEM_CALYX +import tasks.planner.keywords.item_currency as KEYWORDS_ITEM_CURRENCY +import tasks.planner.keywords.item_exp as KEYWORDS_ITEM_EXP +import tasks.planner.keywords.item_trace as KEYWORDS_ITEM_TRACE +import tasks.planner.keywords.item_weekly as KEYWORDS_ITEM_WEEKLY +from tasks.planner.keywords.classes import ItemAscension, ItemCalyx, ItemCurrency, ItemExp, ItemTrace, ItemWeekly + +ITEM_CLASSES = [ItemAscension, ItemCalyx, ItemCurrency, ItemExp, ItemTrace, ItemWeekly] diff --git a/tasks/planner/keywords/classes.py b/tasks/planner/keywords/classes.py new file mode 100644 index 000000000..2066209ed --- /dev/null +++ b/tasks/planner/keywords/classes.py @@ -0,0 +1,59 @@ +from dataclasses import dataclass +from functools import cached_property +from typing import ClassVar + +from module.ocr.keyword import Keyword + + +@dataclass(repr=False) +class ItemBase(Keyword): + instances: ClassVar = {} + + rarity: str + item_id: int + item_group: int + dungeon_id: int + + @cached_property + def dungeon(self): + """ + Dungeon that drops this item + + Returns: + DungeonList: DungeonList object or None + """ + if self.dungeon_id > 0: + from tasks.dungeon.keywords.classes import DungeonList + return DungeonList.find_dungeon_id(self.dungeon_id) + else: + return None + + +@dataclass(repr=False) +class ItemAscension(ItemBase): + instances: ClassVar = {} + + +@dataclass(repr=False) +class ItemCalyx(ItemBase): + instances: ClassVar = {} + + +@dataclass(repr=False) +class ItemCurrency(ItemBase): + instances: ClassVar = {} + + +@dataclass(repr=False) +class ItemExp(ItemBase): + instances: ClassVar = {} + + +@dataclass(repr=False) +class ItemTrace(ItemBase): + instances: ClassVar = {} + + +@dataclass(repr=False) +class ItemWeekly(ItemBase): + instances: ClassVar = {} diff --git a/tasks/planner/keywords/item_ascension.py b/tasks/planner/keywords/item_ascension.py new file mode 100644 index 000000000..1da25b870 --- /dev/null +++ b/tasks/planner/keywords/item_ascension.py @@ -0,0 +1,252 @@ +from .classes import ItemAscension + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Enigmatic_Ectostella = ItemAscension( + id=1, + name='Enigmatic_Ectostella', + cn='深邃的星外质', + cht='深邃的星外質', + en='Enigmatic Ectostella', + jp='深邃な星外物質', + es='Ectoestela profunda', + rarity='VeryRare', + item_id=110400, + item_group=1100, + dungeon_id=-1, +) +Broken_Teeth_of_Iron_Wolf = ItemAscension( + id=2, + name='Broken_Teeth_of_Iron_Wolf', + cn='铁狼碎齿', + cht='鐵狼碎齒', + en='Broken Teeth of Iron Wolf', + jp='鉄狼の砕けた刃', + es='Dientes rotos del huargo férreo', + rarity='VeryRare', + item_id=110401, + item_group=1100, + dungeon_id=1105, +) +Endotherm_Chitin = ItemAscension( + id=3, + name='Endotherm_Chitin', + cn='恒温晶壳', + cht='恆溫晶殼', + en='Endotherm Chitin', + jp='恒温晶殻', + es='Quitina endoterma', + rarity='VeryRare', + item_id=110402, + item_group=1100, + dungeon_id=1104, +) +Horn_of_Snow = ItemAscension( + id=4, + name='Horn_of_Snow', + cn='风雪之角', + cht='風雪之角', + en='Horn of Snow', + jp='吹雪の角', + es='Cuerno de nieve', + rarity='VeryRare', + item_id=110403, + item_group=1100, + dungeon_id=1106, +) +Lightning_Crown_of_the_Past_Shadow = ItemAscension( + id=5, + name='Lightning_Crown_of_the_Past_Shadow', + cn='往日之影的雷冠', + cht='往日之影的雷冠', + en='Lightning Crown of the Past Shadow', + jp='過去の影の雷冠', + es='Corona de rayos de la sombra del pasado', + rarity='VeryRare', + item_id=110404, + item_group=1100, + dungeon_id=1103, +) +Storm_Eye = ItemAscension( + id=6, + name='Storm_Eye', + cn='暴风之眼', + cht='暴風之眼', + en='Storm Eye', + jp='暴風の眼', + es='Ojo del vendaval', + rarity='VeryRare', + item_id=110405, + item_group=1100, + dungeon_id=1102, +) +Void_Cast_Iron = ItemAscension( + id=7, + name='Void_Cast_Iron', + cn='虚幻铸铁', + cht='虛幻鑄鐵', + en='Void Cast Iron', + jp='虚幻鋳鉄', + es='Hierro forjado del Vacío', + rarity='VeryRare', + item_id=110406, + item_group=1100, + dungeon_id=1101, +) +Golden_Crown_of_the_Past_Shadow = ItemAscension( + id=8, + name='Golden_Crown_of_the_Past_Shadow', + cn='往日之影的金饰', + cht='往日之影的金飾', + en='Golden Crown of the Past Shadow', + jp='過去の影の金装飾', + es='Corona dorada de la sombra del pasado', + rarity='VeryRare', + item_id=110407, + item_group=1100, + dungeon_id=1107, +) +Netherworld_Token = ItemAscension( + id=9, + name='Netherworld_Token', + cn='幽府通令', + cht='幽府通令', + en='Netherworld Token', + jp='幽府通令', + es='Pase del inframundo', + rarity='VeryRare', + item_id=110411, + item_group=1100, + dungeon_id=1114, +) +Searing_Steel_Blade = ItemAscension( + id=10, + name='Searing_Steel_Blade', + cn='过热钢刃', + cht='過熱鋼刃', + en='Searing Steel Blade', + jp='灼熱の鋼刃', + es='Hoja de acero sobrecalentado', + rarity='VeryRare', + item_id=110412, + item_group=1100, + dungeon_id=1112, +) +Gelid_Chitin = ItemAscension( + id=11, + name='Gelid_Chitin', + cn='苦寒晶壳', + cht='苦寒晶殼', + en='Gelid Chitin', + jp='苦寒晶殻', + es='Quitina gélida', + rarity='VeryRare', + item_id=110413, + item_group=1100, + dungeon_id=1108, +) +Shape_Shifter_Lightning_Staff = ItemAscension( + id=12, + name='Shape_Shifter_Lightning_Staff', + cn='炼形者雷枝', + cht='煉形者雷枝', + en="Shape Shifter's Lightning Staff", + jp='鍛錬者の雷枝', + es='Báculo del Cambiaformas', + rarity='VeryRare', + item_id=110414, + item_group=1100, + dungeon_id=1109, +) +Ascendant_Debris = ItemAscension( + id=13, + name='Ascendant_Debris', + cn='天人遗垢', + cht='天人遺垢', + en='Ascendant Debris', + jp='天人の残穢', + es='Vestigios elevados', + rarity='VeryRare', + item_id=110415, + item_group=1100, + dungeon_id=1113, +) +Nail_of_the_Ape = ItemAscension( + id=14, + name='Nail_of_the_Ape', + cn='苍猿之钉', + cht='蒼猿之釘', + en='Nail of the Ape', + jp='蒼猿の釘', + es='Clavo del simio', + rarity='VeryRare', + item_id=110416, + item_group=1100, + dungeon_id=1111, +) +Suppressing_Edict = ItemAscension( + id=15, + name='Suppressing_Edict', + cn='镇灵敕符', + cht='鎮靈敕符', + en='Suppressing Edict', + jp='霊鎮めの勅符', + es='Edicto de la contención', + rarity='VeryRare', + item_id=110417, + item_group=1100, + dungeon_id=1110, +) +IPC_Work_Permit = ItemAscension( + id=16, + name='IPC_Work_Permit', + cn='星际和平工作证', + cht='星際和平工作證', + en='IPC Work Permit', + jp='スターピース社員証', + es='Permiso de trabajo de la Corporación', + rarity='VeryRare', + item_id=110421, + item_group=1100, + dungeon_id=1118, +) +Raging_Heart = ItemAscension( + id=17, + name='Raging_Heart', + cn='忿火之心', + cht='忿火之心', + en='Raging Heart', + jp='憤怒の心', + es='Corazón ardiente', + rarity='VeryRare', + item_id=110422, + item_group=1100, + dungeon_id=1117, +) +Dream_Fridge = ItemAscension( + id=18, + name='Dream_Fridge', + cn='冷藏梦箱', + cht='冷藏夢箱', + en='Dream Fridge', + jp='夢の冷蔵庫', + es='Nevera de sueños', + rarity='VeryRare', + item_id=110423, + item_group=1100, + dungeon_id=1115, +) +Dream_Flamer = ItemAscension( + id=19, + name='Dream_Flamer', + cn='炙梦喷枪', + cht='炙夢噴槍', + en='Dream Flamer', + jp='夢を炙るトーチバーナー', + es='Soplete de ensueño', + rarity='VeryRare', + item_id=110426, + item_group=1100, + dungeon_id=1116, +) diff --git a/tasks/planner/keywords/item_calyx.py b/tasks/planner/keywords/item_calyx.py new file mode 100644 index 000000000..d46e7be26 --- /dev/null +++ b/tasks/planner/keywords/item_calyx.py @@ -0,0 +1,317 @@ +from .classes import ItemCalyx + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Extinguished_Core = ItemCalyx( + id=1, + name='Extinguished_Core', + cn='熄灭原核', + cht='熄滅原核', + en='Extinguished Core', + jp='消滅した原核', + es='Núcleo apagado', + rarity='NotNormal', + item_id=111001, + item_group=1401, + dungeon_id=1011, +) +Glimmering_Core = ItemCalyx( + id=2, + name='Glimmering_Core', + cn='微光原核', + cht='微光原核', + en='Glimmering Core', + jp='微かに光る原核', + es='Núcleo reluciente', + rarity='Rare', + item_id=111002, + item_group=1401, + dungeon_id=-1, +) +Squirming_Core = ItemCalyx( + id=3, + name='Squirming_Core', + cn='蠢动原核', + cht='蠢動原核', + en='Squirming Core', + jp='脈動する原核', + es='Núcleo serpenteante', + rarity='VeryRare', + item_id=111003, + item_group=1401, + dungeon_id=-1, +) +Thief_Instinct = ItemCalyx( + id=4, + name='Thief_Instinct', + cn='掠夺的本能', + cht='掠奪的本能', + en="Thief's Instinct", + jp='略奪の本能', + es='Instinto del ladrón', + rarity='NotNormal', + item_id=111011, + item_group=1402, + dungeon_id=1001, +) +Usurper_Scheme = ItemCalyx( + id=5, + name='Usurper_Scheme', + cn='篡改的野心', + cht='篡改的野心', + en="Usurper's Scheme", + jp='改ざんの野心', + es='Ambición distorsionada', + rarity='Rare', + item_id=111012, + item_group=1402, + dungeon_id=-1, +) +Conqueror_Will = ItemCalyx( + id=6, + name='Conqueror_Will', + cn='践踏的意志', + cht='踐踏的意志', + en="Conqueror's Will", + jp='踏みにじる意志', + es='Voluntad de conquista', + rarity='VeryRare', + item_id=111013, + item_group=1402, + dungeon_id=-1, +) +Silvermane_Badge = ItemCalyx( + id=7, + name='Silvermane_Badge', + cn='铁卫扣饰', + cht='鐵衛扣飾', + en='Silvermane Badge', + jp='シルバーメインの釦', + es='Pin del guardia', + rarity='NotNormal', + item_id=112001, + item_group=1403, + dungeon_id=1001, +) +Silvermane_Insignia = ItemCalyx( + id=8, + name='Silvermane_Insignia', + cn='铁卫军徽', + cht='鐵衛軍徽', + en='Silvermane Insignia', + jp='シルバーメインの記章', + es='Insignia del guardia', + rarity='Rare', + item_id=112002, + item_group=1403, + dungeon_id=-1, +) +Silvermane_Medal = ItemCalyx( + id=9, + name='Silvermane_Medal', + cn='铁卫勋章', + cht='鐵衛勳章', + en='Silvermane Medal', + jp='シルバーメインの勲章', + es='Medalla del guardia', + rarity='VeryRare', + item_id=112003, + item_group=1403, + dungeon_id=-1, +) +Ancient_Part = ItemCalyx( + id=10, + name='Ancient_Part', + cn='古代零件', + cht='古代零件', + en='Ancient Part', + jp='古代パーツ', + es='Componente antiguo', + rarity='NotNormal', + item_id=112011, + item_group=1404, + dungeon_id=1001, +) +Ancient_Spindle = ItemCalyx( + id=11, + name='Ancient_Spindle', + cn='古代转轴', + cht='古代轉軸', + en='Ancient Spindle', + jp='古代シャフト', + es='Eje antiguo', + rarity='Rare', + item_id=112012, + item_group=1404, + dungeon_id=-1, +) +Ancient_Engine = ItemCalyx( + id=12, + name='Ancient_Engine', + cn='古代引擎', + cht='古代引擎', + en='Ancient Engine', + jp='古代エンジン', + es='Motor antiguo', + rarity='VeryRare', + item_id=112013, + item_group=1404, + dungeon_id=-1, +) +Immortal_Scionette = ItemCalyx( + id=13, + name='Immortal_Scionette', + cn='永寿幼芽', + cht='永壽幼芽', + en='Immortal Scionette', + jp='永寿の萌芽', + es='Brote verde inmortal', + rarity='NotNormal', + item_id=113001, + item_group=1405, + dungeon_id=1011, +) +Immortal_Aeroblossom = ItemCalyx( + id=14, + name='Immortal_Aeroblossom', + cn='永寿天华', + cht='永壽天華', + en='Immortal Aeroblossom', + jp='永寿の天華', + es='Flor etérea inmortal', + rarity='Rare', + item_id=113002, + item_group=1405, + dungeon_id=-1, +) +Immortal_Lumintwig = ItemCalyx( + id=15, + name='Immortal_Lumintwig', + cn='永寿荣枝', + cht='永壽榮枝', + en='Immortal Lumintwig', + jp='永寿の栄枝', + es='Rama gloriosa inmortal', + rarity='VeryRare', + item_id=113003, + item_group=1405, + dungeon_id=-1, +) +Artifex_Module = ItemCalyx( + id=16, + name='Artifex_Module', + cn='工造机杼', + cht='工造機杼', + en="Artifex's Module", + jp='工造機関', + es='Componente artificial mecánico', + rarity='NotNormal', + item_id=113011, + item_group=1406, + dungeon_id=1011, +) +Artifex_Cogwheel = ItemCalyx( + id=17, + name='Artifex_Cogwheel', + cn='工造迴轮', + cht='工造迴輪', + en="Artifex's Cogwheel", + jp='工造迴輪', + es='Engranaje cilíndrico mecánico', + rarity='Rare', + item_id=113012, + item_group=1406, + dungeon_id=-1, +) +Artifex_Gyreheart = ItemCalyx( + id=18, + name='Artifex_Gyreheart', + cn='工造浑心', + cht='工造渾心', + en="Artifex's Gyreheart", + jp='工造渾心', + es='Corazón armonioso mecánico', + rarity='VeryRare', + item_id=113013, + item_group=1406, + dungeon_id=-1, +) +Dream_Collection_Component = ItemCalyx( + id=19, + name='Dream_Collection_Component', + cn='蓄梦元件', + cht='蓄夢元件', + en='Dream Collection Component', + jp='ドリームコレクションパーツ', + es='Componente del acumulador de sueños', + rarity='NotNormal', + item_id=114001, + item_group=1407, + dungeon_id=1014, +) +Dream_Flow_Valve = ItemCalyx( + id=20, + name='Dream_Flow_Valve', + cn='流梦阀门', + cht='流夢閥門', + en='Dream Flow Valve', + jp='ドリームフローバルブ', + es='Válvula del flujo de sueños', + rarity='Rare', + item_id=114002, + item_group=1407, + dungeon_id=-1, +) +Dream_Making_Engine = ItemCalyx( + id=21, + name='Dream_Making_Engine', + cn='造梦马达', + cht='造夢馬達', + en='Dream Making Engine', + jp='ドリームメイキングモーター', + es='Motor creasueños', + rarity='VeryRare', + item_id=114003, + item_group=1407, + dungeon_id=-1, +) +Tatters_of_Thought = ItemCalyx( + id=22, + name='Tatters_of_Thought', + cn='思绪末屑', + cht='思緒末屑', + en='Tatters of Thought', + jp='思考の粉末', + es='Jirones de pensamientos', + rarity='NotNormal', + item_id=114011, + item_group=1408, + dungeon_id=1014, +) +Fragments_of_Impression = ItemCalyx( + id=23, + name='Fragments_of_Impression', + cn='印象残晶', + cht='印象殘晶', + en='Fragments of Impression', + jp='印象の残晶', + es='Fragmento de impresiones', + rarity='Rare', + item_id=114012, + item_group=1408, + dungeon_id=-1, +) +Shards_of_Desires = ItemCalyx( + id=24, + name='Shards_of_Desires', + cn='欲念碎镜', + cht='欲念碎鏡', + en='Shards of Desires', + jp='砕けた欲望の鏡', + es='Fragmento de deseos', + rarity='VeryRare', + item_id=114013, + item_group=1408, + dungeon_id=-1, +) diff --git a/tasks/planner/keywords/item_currency.py b/tasks/planner/keywords/item_currency.py new file mode 100644 index 000000000..90514f8ed --- /dev/null +++ b/tasks/planner/keywords/item_currency.py @@ -0,0 +1,226 @@ +from .classes import ItemCurrency + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Stellar_Jade = ItemCurrency( + id=1, + name='Stellar_Jade', + cn='星琼', + cht='星瓊', + en='Stellar Jade', + jp='星玉', + es='Jade estelar', + rarity='SuperRare', + item_id=1, + item_group=0, + dungeon_id=-1, +) +Credit = ItemCurrency( + id=2, + name='Credit', + cn='信用点', + cht='信用點', + en='Credit', + jp='信用ポイント', + es='Crédito', + rarity='Rare', + item_id=2, + item_group=0, + dungeon_id=-1, +) +Oneiric_Shard = ItemCurrency( + id=3, + name='Oneiric_Shard', + cn='古老梦华', + cht='古老夢華', + en='Oneiric Shard', + jp='往日の夢華', + es='Esquirla onírica', + rarity='SuperRare', + item_id=3, + item_group=0, + dungeon_id=-1, +) +Trailblaze_Power = ItemCurrency( + id=4, + name='Trailblaze_Power', + cn='开拓力', + cht='開拓力', + en='Trailblaze Power', + jp='開拓力', + es='Poder trazacaminos', + rarity='VeryRare', + item_id=11, + item_group=0, + dungeon_id=-1, +) +Reserved_Trailblaze_Power = ItemCurrency( + id=5, + name='Reserved_Trailblaze_Power', + cn='后备开拓力', + cht='後備開拓力', + en='Reserved Trailblaze Power', + jp='予備開拓力', + es='Poder trazacaminos de reserva', + rarity='VeryRare', + item_id=12, + item_group=0, + dungeon_id=-1, +) +EXP = ItemCurrency( + id=6, + name='EXP', + cn='经验', + cht='經驗', + en='EXP', + jp='経験', + es='EXP', + rarity='Rare', + item_id=21, + item_group=0, + dungeon_id=-1, +) +Trailblaze_EXP = ItemCurrency( + id=7, + name='Trailblaze_EXP', + cn='里程', + cht='里程', + en='Trailblaze EXP', + jp='マイレージ', + es='EXP trazacaminos', + rarity='Rare', + item_id=22, + item_group=0, + dungeon_id=-1, +) +Activity = ItemCurrency( + id=8, + name='Activity', + cn='活跃度', + cht='活躍度', + en='Activity', + jp='アクティブ度', + es='Actividad', + rarity='Rare', + item_id=23, + item_group=0, + dungeon_id=-1, +) +Trailblaze_Timer = ItemCurrency( + id=9, + name='Trailblaze_Timer', + cn='开拓进行时', + cht='開拓進行時', + en='Trailblaze Timer', + jp='開拓進行計', + es='Trazascopio', + rarity='SuperRare', + item_id=24, + item_group=0, + dungeon_id=-1, +) +The_Returning_Trail = ItemCurrency( + id=10, + name='The_Returning_Trail', + cn='归程轨迹', + cht='歸程軌跡', + en='The Returning Trail', + jp='帰還の軌跡', + es='Trayectoria de regreso', + rarity='Rare', + item_id=25, + item_group=0, + dungeon_id=-1, +) +Cosmic_Fragment = ItemCurrency( + id=11, + name='Cosmic_Fragment', + cn='宇宙碎片', + cht='宇宙碎片', + en='Cosmic Fragment', + jp='宇宙の欠片', + es='Fragmentos cósmicos', + rarity='Rare', + item_id=31, + item_group=0, + dungeon_id=-1, +) +Ability_Point = ItemCurrency( + id=12, + name='Ability_Point', + cn='技能点', + cht='技能點', + en='Ability Point', + jp='アビリティポイント', + es='Punto de habilidad', + rarity='Rare', + item_id=32, + item_group=0, + dungeon_id=-1, +) +Immersifier = ItemCurrency( + id=13, + name='Immersifier', + cn='沉浸器', + cht='沉浸器', + en='Immersifier', + jp='没入器', + es='Inmersor', + rarity='VeryRare', + item_id=33, + item_group=0, + dungeon_id=-1, +) +Achievement_Points = ItemCurrency( + id=14, + name='Achievement_Points', + cn='成就点数', + cht='成就點數', + en='Achievement Points', + jp='アチーブメントポイント', + es='Puntos de logro', + rarity='Rare', + item_id=41, + item_group=0, + dungeon_id=-1, +) +The_Nameless_EXP = ItemCurrency( + id=15, + name='The_Nameless_EXP', + cn='无名客的经验', + cht='無名客的經驗', + en='The Nameless EXP', + jp='ナナシビトの経験', + es='EXP anónima', + rarity='Rare', + item_id=51, + item_group=0, + dungeon_id=-1, +) +The_Nameless_EXP = ItemCurrency( + id=16, + name='The_Nameless_EXP', + cn='无名客的经验', + cht='無名客的經驗', + en='The Nameless EXP', + jp='ナナシビトの経験', + es='EXP anónima', + rarity='Rare', + item_id=52, + item_group=0, + dungeon_id=-1, +) +Development_Fund = ItemCurrency( + id=17, + name='Development_Fund', + cn='发展资金', + cht='發展資金', + en='Development Fund', + jp='発展資金', + es='Fondos de desarrollo', + rarity='Rare', + item_id=53, + item_group=0, + dungeon_id=-1, +) diff --git a/tasks/planner/keywords/item_exp.py b/tasks/planner/keywords/item_exp.py new file mode 100644 index 000000000..b1d81fc29 --- /dev/null +++ b/tasks/planner/keywords/item_exp.py @@ -0,0 +1,135 @@ +from .classes import ItemExp + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Travel_Encounters = ItemExp( + id=1, + name='Travel_Encounters', + cn='旅情见闻', + cht='旅情見聞', + en='Travel Encounters', + jp='旅の見聞', + es='Noticias del viaje', + rarity='NotNormal', + item_id=211, + item_group=1010, + dungeon_id=1001, +) +Adventure_Log = ItemExp( + id=2, + name='Adventure_Log', + cn='冒险记录', + cht='冒險紀錄', + en='Adventure Log', + jp='冒険記録', + es='Registro de aventuras', + rarity='Rare', + item_id=212, + item_group=1010, + dungeon_id=1001, +) +Traveler_Guide = ItemExp( + id=3, + name='Traveler_Guide', + cn='漫游指南', + cht='漫遊指南', + en="Traveler's Guide", + jp='漫遊指南', + es='Guía del espíritu viajero', + rarity='VeryRare', + item_id=213, + item_group=1010, + dungeon_id=1001, +) +Sparse_Aether = ItemExp( + id=4, + name='Sparse_Aether', + cn='稀薄以太', + cht='稀薄乙太', + en='Sparse Aether', + jp='希薄なエーテル', + es='Éter disperso', + rarity='NotNormal', + item_id=221, + item_group=1020, + dungeon_id=1002, +) +Condensed_Aether = ItemExp( + id=5, + name='Condensed_Aether', + cn='凝缩以太', + cht='凝縮乙太', + en='Condensed Aether', + jp='濃縮エーテル', + es='Éter condensado', + rarity='Rare', + item_id=222, + item_group=1020, + dungeon_id=1002, +) +Refined_Aether = ItemExp( + id=6, + name='Refined_Aether', + cn='提纯以太', + cht='精煉乙太', + en='Refined Aether', + jp='精製エーテル', + es='Éter refinado', + rarity='VeryRare', + item_id=223, + item_group=1020, + dungeon_id=1002, +) +Lost_Lightdust = ItemExp( + id=7, + name='Lost_Lightdust', + cn='遗失光尘', + cht='遺失光塵', + en='Lost Lightdust', + jp='遺失光塵', + es='Polvo luminoso perdido', + rarity='NotNormal', + item_id=231, + item_group=1030, + dungeon_id=-1, +) +Lost_Gold_Fragment = ItemExp( + id=8, + name='Lost_Gold_Fragment', + cn='遗失碎金', + cht='遺失碎金', + en='Lost Gold Fragment', + jp='遺失砕金', + es='Fragmento dorado perdido', + rarity='Rare', + item_id=232, + item_group=1030, + dungeon_id=-1, +) +Lost_Crystal = ItemExp( + id=9, + name='Lost_Crystal', + cn='遗失晶块', + cht='遺失晶塊', + en='Lost Crystal', + jp='遺失晶塊', + es='Cristal perdido', + rarity='VeryRare', + item_id=233, + item_group=1030, + dungeon_id=-1, +) +Lost_Essence = ItemExp( + id=10, + name='Lost_Essence', + cn='遗失精粹', + cht='遺失精粹', + en='Lost Essence', + jp='遺失精華', + es='Esencia perdida', + rarity='SuperRare', + item_id=234, + item_group=1030, + dungeon_id=-1, +) diff --git a/tasks/planner/keywords/item_trace.py b/tasks/planner/keywords/item_trace.py new file mode 100644 index 000000000..a8ee7bc4e --- /dev/null +++ b/tasks/planner/keywords/item_trace.py @@ -0,0 +1,525 @@ +from .classes import ItemTrace + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Tears_of_Dreams = ItemTrace( + id=1, + name='Tears_of_Dreams', + cn='梦之珠泪', + cht='夢之珠淚', + en='Tears of Dreams', + jp='夢の涙', + es='Lágrima de los sueños', + rarity='VeryRare', + item_id=110101, + item_group=1200, + dungeon_id=-1, +) +Shattered_Blade = ItemTrace( + id=2, + name='Shattered_Blade', + cn='破碎残刃', + cht='破碎殘刃', + en='Shattered Blade', + jp='破砕の刃切', + es='Espada rota', + rarity='NotNormal', + item_id=110111, + item_group=1201, + dungeon_id=1004, +) +Lifeless_Blade = ItemTrace( + id=3, + name='Lifeless_Blade', + cn='无生残刃', + cht='無生殘刃', + en='Lifeless Blade', + jp='無生の刃切', + es='Espada inerte', + rarity='Rare', + item_id=110112, + item_group=1201, + dungeon_id=1004, +) +Worldbreaker_Blade = ItemTrace( + id=4, + name='Worldbreaker_Blade', + cn='净世残刃', + cht='淨世殘刃', + en='Worldbreaker Blade', + jp='浄世の刃切', + es='Espada rompemundos', + rarity='VeryRare', + item_id=110113, + item_group=1201, + dungeon_id=1004, +) +Arrow_of_the_Beast_Hunter = ItemTrace( + id=5, + name='Arrow_of_the_Beast_Hunter', + cn='猎兽之矢', + cht='獵獸之矢', + en='Arrow of the Beast Hunter', + jp='狩獣の矢', + es='Flecha del cazabestias', + rarity='NotNormal', + item_id=110121, + item_group=1202, + dungeon_id=1006, +) +Arrow_of_the_Demon_Slayer = ItemTrace( + id=6, + name='Arrow_of_the_Demon_Slayer', + cn='屠魔之矢', + cht='屠魔之矢', + en='Arrow of the Demon Slayer', + jp='屠魔の矢', + es='Flecha del matademonios', + rarity='Rare', + item_id=110122, + item_group=1202, + dungeon_id=1006, +) +Arrow_of_the_Starchaser = ItemTrace( + id=7, + name='Arrow_of_the_Starchaser', + cn='逐星之矢', + cht='逐星之矢', + en='Arrow of the Starchaser', + jp='逐星の矢', + es='Flecha del persigueestrellas', + rarity='VeryRare', + item_id=110123, + item_group=1202, + dungeon_id=1006, +) +Key_of_Inspiration = ItemTrace( + id=8, + name='Key_of_Inspiration', + cn='灵感之钥', + cht='靈感之鑰', + en='Key of Inspiration', + jp='着想のカギ', + es='Llave de la inspiración', + rarity='NotNormal', + item_id=110131, + item_group=1203, + dungeon_id=1008, +) +Key_of_Knowledge = ItemTrace( + id=9, + name='Key_of_Knowledge', + cn='启迪之钥', + cht='啟迪之鑰', + en='Key of Knowledge', + jp='啓発のカギ', + es='Llave del conocimiento', + rarity='Rare', + item_id=110132, + item_group=1203, + dungeon_id=1008, +) +Key_of_Wisdom = ItemTrace( + id=10, + name='Key_of_Wisdom', + cn='智识之钥', + cht='智識之鑰', + en='Key of Wisdom', + jp='叡智のカギ', + es='Llave de la sabiduría', + rarity='VeryRare', + item_id=110133, + item_group=1203, + dungeon_id=1008, +) +Endurance_of_Bronze = ItemTrace( + id=11, + name='Endurance_of_Bronze', + cn='青铜的执着', + cht='青銅的執著', + en='Endurance of Bronze', + jp='青銅の執着', + es='Persistencia del bronce', + rarity='NotNormal', + item_id=110141, + item_group=1204, + dungeon_id=1005, +) +Oath_of_Steel = ItemTrace( + id=12, + name='Oath_of_Steel', + cn='寒铁的誓言', + cht='寒鐵的誓言', + en='Oath of Steel', + jp='寒鉄の誓い', + es='Juramento de acero', + rarity='Rare', + item_id=110142, + item_group=1204, + dungeon_id=1005, +) +Safeguard_of_Amber = ItemTrace( + id=13, + name='Safeguard_of_Amber', + cn='琥珀的坚守', + cht='琥珀的堅守', + en='Safeguard of Amber', + jp='琥珀の堅守', + es='Custodia de ámbar', + rarity='VeryRare', + item_id=110143, + item_group=1204, + dungeon_id=1005, +) +Obsidian_of_Dread = ItemTrace( + id=14, + name='Obsidian_of_Dread', + cn='黯淡黑曜', + cht='黯淡黑曜', + en='Obsidian of Dread', + jp='黯淡な黒曜', + es='Obsidiana lúgubre', + rarity='NotNormal', + item_id=110151, + item_group=1205, + dungeon_id=1010, +) +Obsidian_of_Desolation = ItemTrace( + id=15, + name='Obsidian_of_Desolation', + cn='虚空黑曜', + cht='虛空黑曜', + en='Obsidian of Desolation', + jp='虚空の黒曜', + es='Obsidiana del vacío', + rarity='Rare', + item_id=110152, + item_group=1205, + dungeon_id=1010, +) +Obsidian_of_Obsession = ItemTrace( + id=16, + name='Obsidian_of_Obsession', + cn='沉沦黑曜', + cht='沉淪黑曜', + en='Obsidian of Obsession', + jp='沈淪せし黒曜', + es='Obsidiana de la obsesión', + rarity='VeryRare', + item_id=110153, + item_group=1205, + dungeon_id=1010, +) +Harmonic_Tune = ItemTrace( + id=17, + name='Harmonic_Tune', + cn='谐乐小调', + cht='諧樂小調', + en='Harmonic Tune', + jp='調和のハーモニー', + es='Melodía armónica', + rarity='NotNormal', + item_id=110161, + item_group=1206, + dungeon_id=1009, +) +Ancestral_Hymn = ItemTrace( + id=18, + name='Ancestral_Hymn', + cn='家族颂歌', + cht='家族頌歌', + en='Ancestral Hymn', + jp='ファミリー賛歌', + es='Himno del acervo', + rarity='Rare', + item_id=110162, + item_group=1206, + dungeon_id=1009, +) +Stellaris_Symphony = ItemTrace( + id=19, + name='Stellaris_Symphony', + cn='群星乐章', + cht='群星樂章', + en='Stellaris Symphony', + jp='群星の楽章', + es='Opus Stellaris', + rarity='VeryRare', + item_id=110163, + item_group=1206, + dungeon_id=1009, +) +Seed_of_Abundance = ItemTrace( + id=20, + name='Seed_of_Abundance', + cn='丰饶之种', + cht='豐饒之種', + en='Seed of Abundance', + jp='豊穣の種', + es='Semilla de la abundancia', + rarity='NotNormal', + item_id=110171, + item_group=1207, + dungeon_id=1007, +) +Sprout_of_Life = ItemTrace( + id=21, + name='Sprout_of_Life', + cn='生命之芽', + cht='生命之芽', + en='Sprout of Life', + jp='生命の芽', + es='Brote de la vida', + rarity='Rare', + item_id=110172, + item_group=1207, + dungeon_id=1007, +) +Flower_of_Eternity = ItemTrace( + id=22, + name='Flower_of_Eternity', + cn='永恒之花', + cht='永恆之花', + en='Flower of Eternity', + jp='永久の花', + es='Flor de la eternidad', + rarity='VeryRare', + item_id=110173, + item_group=1207, + dungeon_id=1007, +) +Borisin_Teeth = ItemTrace( + id=23, + name='Borisin_Teeth', + cn='步离犬牙', + cht='步離犬牙', + en='Borisin Teeth', + jp='歩離の犬牙', + es='Canino de borisin', + rarity='NotNormal', + item_id=110181, + item_group=1211, + dungeon_id=1018, +) +Lupitoxin_Sawteeth = ItemTrace( + id=24, + name='Lupitoxin_Sawteeth', + cn='狼毒锯牙', + cht='狼毒鋸牙', + en='Lupitoxin Sawteeth', + jp='狼毒の牙', + es='Diente serrado con lupitoxina', + rarity='Rare', + item_id=110182, + item_group=1211, + dungeon_id=1018, +) +Moon_Madness_Fang = ItemTrace( + id=25, + name='Moon_Madness_Fang', + cn='月狂獠牙', + cht='月狂獠牙', + en='Moon Madness Fang', + jp='月狂いの凶牙', + es='Colmillo de la locura lunar', + rarity='VeryRare', + item_id=110183, + item_group=1211, + dungeon_id=1018, +) +Meteoric_Bullet = ItemTrace( + id=26, + name='Meteoric_Bullet', + cn='陨铁弹丸', + cht='隕鐵彈丸', + en='Meteoric Bullet', + jp='隕鉄の弾丸', + es='Perdigón meteórico', + rarity='NotNormal', + item_id=110191, + item_group=1212, + dungeon_id=1022, +) +Destined_Expiration = ItemTrace( + id=27, + name='Destined_Expiration', + cn='命定死因', + cht='命定死因', + en='Destined Expiration', + jp='定められた死因', + es='Deceso predestinado', + rarity='Rare', + item_id=110192, + item_group=1212, + dungeon_id=1022, +) +Countertemporal_Shot = ItemTrace( + id=28, + name='Countertemporal_Shot', + cn='逆时一击', + cht='逆時一擊', + en='Countertemporal Shot', + jp='時に抗う一撃', + es='Disparo antitemporal', + rarity='VeryRare', + item_id=110193, + item_group=1212, + dungeon_id=1022, +) +Scattered_Stardust = ItemTrace( + id=29, + name='Scattered_Stardust', + cn='散逸星砂', + cht='散逸星砂', + en='Scattered Stardust', + jp='散らばった星の砂', + es='Polvo estelar disperso', + rarity='NotNormal', + item_id=110211, + item_group=1214, + dungeon_id=1020, +) +Crystal_Meteorites = ItemTrace( + id=30, + name='Crystal_Meteorites', + cn='流星棱晶', + cht='流星稜晶', + en='Crystal Meteorites', + jp='流星プリズム', + es='Meteoritos de cristal', + rarity='Rare', + item_id=110212, + item_group=1214, + dungeon_id=1020, +) +Divine_Amber = ItemTrace( + id=31, + name='Divine_Amber', + cn='神体琥珀', + cht='神體琥珀', + en='Divine Amber', + jp='聖なる琥珀', + es='Ámbar divino', + rarity='VeryRare', + item_id=110213, + item_group=1214, + dungeon_id=1020, +) +Fiery_Spirit = ItemTrace( + id=32, + name='Fiery_Spirit', + cn='炽情之灵', + cht='熾情之靈', + en='Fiery Spirit', + jp='熾烈の霊', + es='Espíritu ardiente', + rarity='NotNormal', + item_id=110221, + item_group=1215, + dungeon_id=1017, +) +Starfire_Essence = ItemTrace( + id=33, + name='Starfire_Essence', + cn='星火之精', + cht='星火之精', + en='Starfire Essence', + jp='星火の精', + es='Esencia de fuego estelar', + rarity='Rare', + item_id=110222, + item_group=1215, + dungeon_id=1017, +) +Heaven_Incinerator = ItemTrace( + id=34, + name='Heaven_Incinerator', + cn='焚天之魔', + cht='焚天之魔', + en='Heaven Incinerator', + jp='焼天の魔', + es='Incinerador divino', + rarity='VeryRare', + item_id=110223, + item_group=1215, + dungeon_id=1017, +) +Firmament_Note = ItemTrace( + id=35, + name='Firmament_Note', + cn='云际音符', + cht='雲際音符', + en='Firmament Note', + jp='雲端の音符', + es='Nota del firmamento', + rarity='NotNormal', + item_id=110231, + item_group=1216, + dungeon_id=1019, +) +Celestial_Section = ItemTrace( + id=36, + name='Celestial_Section', + cn='空际小节', + cht='空際小節', + en='Celestial Section', + jp='空際の小節', + es='Compás celestial', + rarity='Rare', + item_id=110232, + item_group=1216, + dungeon_id=1019, +) +Heavenly_Melody = ItemTrace( + id=37, + name='Heavenly_Melody', + cn='天外乐章', + cht='天外樂章', + en='Heavenly Melody', + jp='天外の楽章', + es='Movimiento celestial', + rarity='VeryRare', + item_id=110233, + item_group=1216, + dungeon_id=1019, +) +Alien_Tree_Seed = ItemTrace( + id=38, + name='Alien_Tree_Seed', + cn='异木种籽', + cht='異木種籽', + en='Alien Tree Seed', + jp='珍木の種', + es='Semilla del árbol extraño', + rarity='NotNormal', + item_id=110241, + item_group=1217, + dungeon_id=1021, +) +Nourishing_Honey = ItemTrace( + id=39, + name='Nourishing_Honey', + cn='滋长花蜜', + cht='滋長花蜜', + en='Nourishing Honey', + jp='育みの蜜', + es='Miel nutricia', + rarity='Rare', + item_id=110242, + item_group=1217, + dungeon_id=1021, +) +Myriad_Fruit = ItemTrace( + id=40, + name='Myriad_Fruit', + cn='万相果实', + cht='萬相果實', + en='Myriad Fruit', + jp='森羅の果実', + es='Fruta del sinfín', + rarity='VeryRare', + item_id=110243, + item_group=1217, + dungeon_id=1021, +) diff --git a/tasks/planner/keywords/item_weekly.py b/tasks/planner/keywords/item_weekly.py new file mode 100644 index 000000000..7e8c35f5c --- /dev/null +++ b/tasks/planner/keywords/item_weekly.py @@ -0,0 +1,83 @@ +from .classes import ItemWeekly + +# This file was auto-generated, do not modify it manually. To generate: +# ``` python -m dev_tools.keyword_extract ``` + +Tracks_of_Destiny = ItemWeekly( + id=1, + name='Tracks_of_Destiny', + cn='命运的足迹', + cht='命運的足跡', + en='Tracks of Destiny', + jp='運命の足跡', + es='Huellas del destino', + rarity='SuperRare', + item_id=241, + item_group=1300, + dungeon_id=-1, +) +Destroyer_Final_Road = ItemWeekly( + id=2, + name='Destroyer_Final_Road', + cn='毁灭者的末路', + cht='毀滅者的末路', + en="Destroyer's Final Road", + jp='壊滅者の末路', + es='Senda final del destructor', + rarity='VeryRare', + item_id=110501, + item_group=1310, + dungeon_id=1301, +) +Guardian_Lament = ItemWeekly( + id=3, + name='Guardian_Lament', + cn='守护者的悲愿', + cht='守護者的悲願', + en="Guardian's Lament", + jp='守護者の悲願', + es='Lamento de la Guardiana', + rarity='VeryRare', + item_id=110502, + item_group=1310, + dungeon_id=1302, +) +Regret_of_Infinite_Ochema = ItemWeekly( + id=4, + name='Regret_of_Infinite_Ochema', + cn='无穷假身的遗恨', + cht='無窮假身的遺恨', + en='Regret of Infinite Ochema', + jp='無窮なる仮身の遺恨', + es='Arrepentimiento del eterno vehículo del alma', + rarity='VeryRare', + item_id=110503, + item_group=1310, + dungeon_id=1303, +) +Past_Evils_of_the_Borehole_Planet_Disaster = ItemWeekly( + id=5, + name='Past_Evils_of_the_Borehole_Planet_Disaster', + cn='蛀星孕灾的旧恶', + cht='蛀星孕災的舊惡', + en='Past Evils of the Borehole Planet Disaster', + jp='星を蝕む古の悪', + es='Agravios pasados de la catástrofe devoraplanetas', + rarity='VeryRare', + item_id=110504, + item_group=1310, + dungeon_id=1304, +) +Lost_Echo_of_the_Shared_Wish = ItemWeekly( + id=6, + name='Lost_Echo_of_the_Shared_Wish', + cn='同愿的遗音', + cht='同願的遺音', + en='Lost Echo of the Shared Wish', + jp='同願の遺音', + es='Eco perdido del deseo compartido', + rarity='VeryRare', + item_id=110505, + item_group=1310, + dungeon_id=1305, +)