Add: Extract keywords of dungeon list

This commit is contained in:
LmeSzinc 2023-06-13 00:43:57 +08:00
parent 9775c8bac9
commit c567a773e3
8 changed files with 421 additions and 61 deletions

View File

@ -4,13 +4,30 @@ import typing as t
from functools import cached_property
from module.base.code_generator import CodeGenerator
from module.config.utils import read_file
from module.config.utils import deep_get, read_file
from module.logger import logger
from module.ocr.keyword import text_to_variable
UI_LANGUAGES = ['cn', 'cht', 'en', 'jp']
def text_to_variable(text):
text = re.sub("'s |s' ", '_', text)
text = re.sub('[ \-—:\']+', '_', text)
text = re.sub(r'[(),#]|</?\w+>', '', text)
# text = re.sub(r'[#_]?\d+(_times?)?', '', text)
return text
def dungeon_name(name: str) -> str:
name = text_to_variable(name)
name = re.sub('Bud_of_(Memories|Aether|Treasures)', r'Calyx_Golden_\1', name)
name = re.sub('Bud_of_(.*)', r'Calyx_Crimson_\1', name)
name = re.sub('Shape_of_(.*)', r'Stagnant_Shadow_\1', name)
if name in ['Destructions_Beginning', 'End_of_the_Eternal_Freeze']:
name = 'Echo_of_War_' + name
return name
class TextMap:
DATA_FOLDER = ''
@ -19,12 +36,13 @@ class TextMap:
@cached_property
def data(self) -> dict[int, str]:
if not TextMap.DATA_FOLDER:
logger.critical('`TextMap.DATA_FOLDER` is empty, please set it to your path to StarRailData')
if not os.path.exists(TextMap.DATA_FOLDER):
logger.critical('`TextMap.DATA_FOLDER` does not exist, please set it to your path to StarRailData')
exit(1)
file = os.path.join(TextMap.DATA_FOLDER, 'TextMap', f'TextMap{self.lang.upper()}.json')
data = {}
for id_, text in read_file(file).items():
text = text.replace('\u00A0', '')
data[int(id_)] = text
return data
@ -73,11 +91,29 @@ class KeywordExtract:
self.text_map: dict[str, TextMap] = {lang: TextMap(lang) for lang in UI_LANGUAGES}
self.keywords_id: list[int] = []
def find_keyword(self, keyword, lang):
def iter_guide(self) -> t.Iterable[int]:
file = os.path.join(TextMap.DATA_FOLDER, './ExcelOutput/GameplayGuideData.json')
for data in read_file(file).values():
hash_ = deep_get(data, keys='Name.Hash')
_, name = self.find_keyword(hash_, lang='cn')
if '忘却之庭' in name or '遗秘' in name:
continue
yield hash_
def find_keyword(self, keyword, lang) -> tuple[int, str]:
"""
Args:
keyword: text string or text id
lang: Language to find
Returns:
text id (hash in TextMap)
text
"""
text_map = self.text_map[lang]
return text_map.find(keyword)
def load_keywords(self, keywords: list[str], lang='cn'):
def load_keywords(self, keywords: list[str | int], lang='cn'):
text_map = self.text_map[lang]
self.keywords_id = [text_map.find(keyword)[0] for keyword in keywords]
self.keywords_id = [keyword for keyword in self.keywords_id if keyword != 0]
@ -85,13 +121,14 @@ class KeywordExtract:
def write_keywords(
self,
keyword_class,
output_file: str
output_file: str,
text_convert=text_to_variable,
):
"""
Args:
keyword_class:
keyword_import:
output_file:
text_convert:
"""
gen = CodeGenerator()
gen.Import(f"""
@ -99,13 +136,15 @@ class KeywordExtract:
""")
gen.CommentAutoGenerage('dev_tools.keyword_extract')
for index, keyword in enumerate(self.keywords_id):
_, en = self.find_keyword(keyword, lang='en')
en = text_to_variable(en)
with gen.Object(key=en, object_class=keyword_class):
_, name = self.find_keyword(keyword, lang='en')
name = text_convert(replace_templates(name))
with gen.Object(key=name, object_class=keyword_class):
gen.ObjectAttr(key='id', value=index + 1)
gen.ObjectAttr(key='name', value=name)
for lang in UI_LANGUAGES:
gen.ObjectAttr(key=lang, value=replace_templates(self.find_keyword(keyword, lang=lang)[1]))
print(f'Write {output_file}')
gen.write(output_file)
def load_daily_quests_keywords(self, lang='cn'):
@ -115,17 +154,18 @@ class KeywordExtract:
quest_keywords = [self.text_map[lang].find(quest_hash)[1] for quest_hash in quests_hash]
self.load_keywords(quest_keywords, lang)
def generate():
ex = KeywordExtract()
ex.load_keywords(['模拟宇宙', '拟造花萼(金)', '拟造花萼(赤)', '凝滞虚影', '侵蚀隧洞', '历战余响', '忘却之庭'])
ex.write_keywords(keyword_class='DungeonNav', output_file='./tasks/dungeon/keywords/nav.py')
ex.load_keywords(['行动摘要', '生存索引', '每日实训'])
ex.write_keywords(keyword_class='DungeonTab', output_file='./tasks/dungeon/keywords/tab.py')
ex.load_daily_quests_keywords()
ex.write_keywords(keyword_class='DailyQuest', output_file='./tasks/daily/keywords/daily_quest.py')
def generate(self):
self.load_keywords(['模拟宇宙', '拟造花萼(金)', '拟造花萼(赤)', '凝滞虚影', '侵蚀隧洞', '历战余响', '忘却之庭'])
self.write_keywords(keyword_class='DungeonNav', output_file='./tasks/dungeon/keywords/nav.py')
self.load_keywords(['行动摘要', '生存索引', '每日实训'])
self.write_keywords(keyword_class='DungeonTab', output_file='./tasks/dungeon/keywords/tab.py')
self.load_daily_quests_keywords()
self.write_keywords(keyword_class='DailyQuest', output_file='./tasks/daily/keywords/daily_quest.py')
self.load_keywords(list(self.iter_guide()))
self.write_keywords(keyword_class='DungeonList', output_file='./tasks/dungeon/keywords/dungeon.py',
text_convert=dungeon_name)
if __name__ == '__main__':
TextMap.DATA_FOLDER = r''
generate()
TextMap.DATA_FOLDER = '../StarRailData'
KeywordExtract().generate()

View File

@ -14,16 +14,10 @@ def parse_name(n):
return n
def text_to_variable(text):
text = re.sub(r'[ \-]', '_', text)
text = re.sub(r'[(),#]|</?\w+>|\'s', '', text)
text = re.sub(r'[#_]?\d+(_times?)?', '', text)
return text
@dataclass
class Keyword:
id: int
name: str
cn: str
en: str
jp: str
@ -49,10 +43,6 @@ class Keyword:
def cht_parsed(self) -> str:
return parse_name(self.cht)
@cached_property
def name(self) -> str:
return text_to_variable(self.en)
def __str__(self):
return self.name
@ -146,7 +136,12 @@ class Keyword:
return cls.instances[int(name)]
except KeyError:
pass
# Probably a variable name
if isinstance(name, str) and '_' in name:
for instance in cls.instances.values():
if name == instance.name:
return instance
# Probably an in-game name
if ignore_punctuation:
name = parse_name(name)
else:
@ -158,4 +153,5 @@ class Keyword:
if name == keyword:
return instance
# Not found
raise ScriptError(f'Cannot find a {cls.__name__} instance that matches "{name}"')

View File

@ -3,148 +3,169 @@ from .classes import DailyQuest
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Complete_Daily_Mission = DailyQuest(
Complete_1_Daily_Mission = DailyQuest(
id=1,
name='Complete_1_Daily_Mission',
cn='完成1个日常任务',
cht='完成1個每日任務',
en='Complete 1 Daily Mission',
jp='デイリークエストを1回クリアする',
)
Clear_Calyx_Golden = DailyQuest(
Clear_Calyx_Golden_1_times = DailyQuest(
id=2,
name='Clear_Calyx_Golden_1_times',
cn='完成1次「拟造花萼',
cht='完成1次「擬造花萼',
en='Clear Calyx (Golden) 1 time(s)',
jp='「疑似花萼」を1回クリアする',
)
Complete_Calyx_Crimson = DailyQuest(
Complete_Calyx_Crimson_1_time = DailyQuest(
id=3,
name='Complete_Calyx_Crimson_1_time',
cn='完成1次「拟造花萼',
cht='完成1次「擬造花萼',
en='Complete Calyx (Crimson) 1 time',
jp='「疑似花萼」を1回クリアする',
)
Clear_Stagnant_Shadow = DailyQuest(
Clear_Stagnant_Shadow_1_times = DailyQuest(
id=4,
name='Clear_Stagnant_Shadow_1_times',
cn='完成1次「凝滞虚影」',
cht='完成1次「凝滯虛影」',
en='Clear Stagnant Shadow 1 time(s)',
jp='「凝結虚影」を1回クリアする',
)
Clear_Cavern_of_Corrosion = DailyQuest(
Clear_Cavern_of_Corrosion_1_times = DailyQuest(
id=5,
name='Clear_Cavern_of_Corrosion_1_times',
cn='完成1次「侵蚀隧洞」',
cht='完成1次「侵蝕隧洞」',
en='Clear Cavern of Corrosion 1 time(s)',
jp='「侵蝕トンネル」を1回クリアする',
)
In_a_single_battle_inflict_Weakness_Break_of_different_Types = DailyQuest(
In_a_single_battle_inflict_3_Weakness_Break_of_different_Types = DailyQuest(
id=6,
name='In_a_single_battle_inflict_3_Weakness_Break_of_different_Types',
cn='单场战斗中触发3种不同属性的弱点击破',
cht='單場戰鬥中觸發3種不同屬性的弱點擊破',
en='In a single battle, inflict 3 Weakness Break of different Types',
jp='一度の戦闘で、異なる3種の属性の弱点撃破を発動する',
)
Inflict_Weakness_Break = DailyQuest(
Inflict_Weakness_Break_5_times = DailyQuest(
id=7,
name='Inflict_Weakness_Break_5_times',
cn='累计触发弱点击破效果5次',
cht='累積觸發弱點擊破效果5次',
en='Inflict Weakness Break 5 times',
jp='累計で弱点撃破効果を5回発動する',
)
Defeat_a_total_of_enemies = DailyQuest(
Defeat_a_total_of_20_enemies = DailyQuest(
id=8,
name='Defeat_a_total_of_20_enemies',
cn='累计消灭20个敌人',
cht='累積消滅20個敵人',
en='Defeat a total of 20 enemies',
jp='敵を累計で20体倒す',
)
Enter_combat_by_attacking_enemy_Weakness_and_win = DailyQuest(
Enter_combat_by_attacking_enemy_Weakness_and_win_3_times = DailyQuest(
id=9,
name='Enter_combat_by_attacking_enemy_Weakness_and_win_3_times',
cn='利用弱点进入战斗并获胜3次',
cht='利用弱點進入戰鬥並獲勝3次',
en="Enter combat by attacking enemy's Weakness and win 3 times",
jp='弱点を攻撃して戦闘に入り、3回勝利する',
)
Use_Technique = DailyQuest(
Use_Technique_2_times = DailyQuest(
id=10,
name='Use_Technique_2_times',
cn='累计施放2次秘技',
cht='累計施放2次秘技',
en='Use Technique 2 times',
jp='秘技を累計2回発動する',
)
Go_on_assignment = DailyQuest(
Go_on_assignment_1_time = DailyQuest(
id=11,
name='Go_on_assignment_1_time',
cn='派遣1次委托',
cht='派遣1次委託',
en='Go on assignment 1 time',
jp='依頼に1回派遣する',
)
Take_photo = DailyQuest(
Take_1_photo = DailyQuest(
id=12,
name='Take_1_photo',
cn='拍照1次',
cht='拍照1次',
en='Take 1 photo',
jp='1回撮影する',
)
Destroy_destructible_objects = DailyQuest(
Destroy_3_destructible_objects = DailyQuest(
id=13,
name='Destroy_3_destructible_objects',
cn='累计击碎3个可破坏物',
cht='累計擊碎3個可破壞物',
en='Destroy 3 destructible objects',
jp='破壊できるオブジェクトを累計で3つ破壊する',
)
Complete_Forgotten_Hall = DailyQuest(
Complete_Forgotten_Hall_1_time = DailyQuest(
id=14,
name='Complete_Forgotten_Hall_1_time',
cn='完成1次「忘却之庭」',
cht='完成1次「忘卻之庭」',
en='Complete Forgotten Hall 1 time',
jp='「忘却の庭」を1回クリアする',
)
Complete_Echo_of_War = DailyQuest(
Complete_Echo_of_War_1_times = DailyQuest(
id=15,
name='Complete_Echo_of_War_1_times',
cn='完成1次「历战余响」',
cht='完成1次「歷戰餘響」',
en='Complete Echo of War 1 time(s)',
jp='「歴戦余韻」を1回クリアする',
)
Complete_stage_in_Simulated_Universe_Any_world = DailyQuest(
Complete_1_stage_in_Simulated_Universe_Any_world = DailyQuest(
id=16,
name='Complete_1_stage_in_Simulated_Universe_Any_world',
cn='通关「模拟宇宙」任意世界的1个区域',
cht='完成「模擬宇宙」任意世界的1個區域',
en='Complete 1 stage in Simulated Universe (Any world)',
jp='「模擬宇宙」のエリアを1つクリアする任意の世界',
)
Obtain_victory_in_combat_with_support_characters = DailyQuest(
Obtain_victory_in_combat_with_support_characters_1_time = DailyQuest(
id=17,
name='Obtain_victory_in_combat_with_support_characters_1_time',
cn='使用支援角色并获得战斗胜利1次',
cht='使用支援角色並獲得戰鬥勝利1次',
en='Obtain victory in combat with support characters 1 time',
jp='サポートキャラを使い、戦闘に1回勝利する',
)
Use_an_Ultimate_to_deal_the_final_blow = DailyQuest(
Use_an_Ultimate_to_deal_the_final_blow_1_time = DailyQuest(
id=18,
name='Use_an_Ultimate_to_deal_the_final_blow_1_time',
cn='施放终结技造成制胜一击1次',
cht='施放終結技造成制勝一擊1次',
en='Use an Ultimate to deal the final blow 1 time',
jp='必殺技で最後の一撃を1回与える',
)
Level_up_any_character = DailyQuest(
Level_up_any_character_1_time = DailyQuest(
id=19,
name='Level_up_any_character_1_time',
cn='将任意角色等级提升1次',
cht='將任意角色等級提升1次',
en='Level up any character 1 time',
jp='任意のキャラを1回レベルアップする',
)
Level_up_any_Light_Cone = DailyQuest(
Level_up_any_Light_Cone_1_time = DailyQuest(
id=20,
name='Level_up_any_Light_Cone_1_time',
cn='将任意光锥等级提升1次',
cht='將任意光錐等級提升1次',
en='Level up any Light Cone 1 time',
jp='任意の光円錐を1回レベルアップする',
)
Level_up_any_Relic = DailyQuest(
Level_up_any_Relic_1_time = DailyQuest(
id=21,
name='Level_up_any_Relic_1_time',
cn='将任意遗器等级提升1次',
cht='將任意遺器等級提升1次',
en='Level up any Relic 1 time',
@ -152,27 +173,31 @@ Level_up_any_Relic = DailyQuest(
)
Salvage_any_Relic = DailyQuest(
id=22,
name='Salvage_any_Relic',
cn='分解任意1件遗器',
cht='分解任意1件遺器',
en='Salvage any Relic',
jp='任意の遺物1つを分解する',
)
Synthesize_Consumable = DailyQuest(
Synthesize_Consumable_1_time = DailyQuest(
id=23,
name='Synthesize_Consumable_1_time',
cn='合成1次消耗品',
cht='合成1次消耗品',
en='Synthesize Consumable 1 time',
jp='消耗品を1回合成する',
)
Synthesize_material = DailyQuest(
Synthesize_material_1_time = DailyQuest(
id=24,
name='Synthesize_material_1_time',
cn='合成1次材料',
cht='合成1次素材',
en='Synthesize material 1 time',
jp='素材を1回合成する',
)
Use_Consumables = DailyQuest(
Use_Consumables_1_time = DailyQuest(
id=25,
name='Use_Consumables_1_time',
cn='使用1件消耗品',
cht='使用1件消耗品',
en='Use Consumables 1 time',

View File

@ -1,3 +1,4 @@
import tasks.dungeon.keywords.dungeon as KEYWORDS_DUNGEON_LIST
import tasks.dungeon.keywords.nav as KEYWORDS_DUNGEON_NAV
import tasks.dungeon.keywords.tab as KEYWORDS_DUNGEON_TAB
from tasks.dungeon.keywords.classes import DungeonNav, DungeonTab
from tasks.dungeon.keywords.classes import DungeonList, DungeonNav, DungeonTab

View File

@ -7,10 +7,37 @@ from module.ocr.keyword import Keyword
@dataclass
class DungeonNav(Keyword):
instances: ClassVar = {}
pass
@dataclass
class DungeonTab(Keyword):
instances: ClassVar = {}
pass
@dataclass
class DungeonList(Keyword):
instances: ClassVar = {}
@property
def is_Calyx_Golden(self):
return 'Calyx_Golden' in self.name
@property
def is_Calyx_Crimson(self):
return 'Calyx_Crimson' in self.name
@property
def is_Stagnant_Shadow(self):
return 'Stagnant_Shadow' in self.name
@property
def is_Cavern_of_Corrosion(self):
return 'Cavern_of_Corrosion' in self.name
@property
def is_Echo_of_War(self):
return 'Echo_of_War' in self.name
@property
def is_Simulated_Universe(self):
return 'Simulated_Universe' in self.name

View File

@ -0,0 +1,261 @@
from .classes import DungeonList
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Calyx_Golden_Memories = DungeonList(
id=1,
name='Calyx_Golden_Memories',
cn='回忆之蕾•拟造花萼(金)',
cht='回憶之蕾•擬造花萼(金)',
en='Bud of Memories',
jp='疑似花萼(金)・回憶の蕾',
)
Calyx_Golden_Aether = DungeonList(
id=2,
name='Calyx_Golden_Aether',
cn='以太之蕾•拟造花萼(金)',
cht='乙太之蕾•擬造花萼(金)',
en='Bud of Aether',
jp='疑似花萼(金)・エーテルの蕾',
)
Calyx_Golden_Treasures = DungeonList(
id=3,
name='Calyx_Golden_Treasures',
cn='藏珍之蕾•拟造花萼(金)',
cht='藏珍之蕾•擬造花萼(金)',
en='Bud of Treasures',
jp='疑似花萼(金)・秘蔵の蕾',
)
Calyx_Crimson_Destruction = DungeonList(
id=4,
name='Calyx_Crimson_Destruction',
cn='毁灭之蕾•拟造花萼(赤)',
cht='毀滅之蕾•擬造花萼(赤)',
en='Bud of Destruction',
jp='疑似花萼(赤)・壊滅の蕾',
)
Calyx_Crimson_Preservation = DungeonList(
id=5,
name='Calyx_Crimson_Preservation',
cn='存护之蕾•拟造花萼(赤)',
cht='存護之蕾•擬造花萼(赤)',
en='Bud of Preservation',
jp='疑似花萼(赤)・存護の蕾',
)
Calyx_Crimson_Calyx_Crimson_Hunt = DungeonList(
id=6,
name='Calyx_Crimson_Calyx_Crimson_Hunt',
cn='巡猎之蕾•拟造花萼(赤)',
cht='巡獵之蕾•擬造花萼(赤)',
en='Calyx (Crimson): Bud of Hunt',
jp='疑似花萼(赤)・巡狩の蕾',
)
Calyx_Crimson_Abundance = DungeonList(
id=7,
name='Calyx_Crimson_Abundance',
cn='丰饶之蕾•拟造花萼(赤)',
cht='豐饒之蕾•擬造花萼(赤)',
en='Bud of Abundance',
jp='疑似花萼(赤)・豊穣の蕾',
)
Calyx_Crimson_Erudition = DungeonList(
id=8,
name='Calyx_Crimson_Erudition',
cn='智识之蕾•拟造花萼(赤)',
cht='智識之蕾•擬造花萼(赤)',
en='Bud of Erudition',
jp='疑似花萼(赤)・知恵の蕾',
)
Calyx_Crimson_Harmony = DungeonList(
id=9,
name='Calyx_Crimson_Harmony',
cn='同谐之蕾•拟造花萼(赤)',
cht='同諧之蕾•擬造花萼(赤)',
en='Bud of Harmony',
jp='疑似花萼(赤)・調和の蕾',
)
Calyx_Crimson_Nihility = DungeonList(
id=10,
name='Calyx_Crimson_Nihility',
cn='虚无之蕾•拟造花萼(赤)',
cht='虛無之蕾•擬造花萼(赤)',
en='Bud of Nihility',
jp='疑似花萼(赤)・虚無の蕾',
)
Stagnant_Shadow_Quanta = DungeonList(
id=11,
name='Stagnant_Shadow_Quanta',
cn='空海之形•凝滞虚影',
cht='空海之形•凝滯虛影',
en='Shape of Quanta',
jp='凝結虚影・虚海の形',
)
Stagnant_Shadow_Gust = DungeonList(
id=12,
name='Stagnant_Shadow_Gust',
cn='巽风之形•凝滞虚影',
cht='巽風之形•凝滯虛影',
en='Shape of Gust',
jp='凝結虚影・薫風の形',
)
Stagnant_Shadow_Fulmination = DungeonList(
id=13,
name='Stagnant_Shadow_Fulmination',
cn='鸣雷之形•凝滞虚影',
cht='鳴雷之形•凝滯虛影',
en='Shape of Fulmination',
jp='凝結虚影・鳴雷の形',
)
Stagnant_Shadow_Blaze = DungeonList(
id=14,
name='Stagnant_Shadow_Blaze',
cn='炎华之形•凝滞虚影',
cht='炎華之形•凝滯虛影',
en='Shape of Blaze',
jp='凝結虚影・炎華の形',
)
Stagnant_Shadow_Spike = DungeonList(
id=15,
name='Stagnant_Shadow_Spike',
cn='锋芒之形•凝滞虚影',
cht='鋒芒之形•凝滯虛影',
en='Shape of Spike',
jp='凝結虚影・切先の形',
)
Stagnant_Shadow_Rime = DungeonList(
id=16,
name='Stagnant_Shadow_Rime',
cn='霜晶之形•凝滞虚影',
cht='霜晶之形•凝滯虛影',
en='Shape of Rime',
jp='凝結虚影・霜晶の形',
)
Stagnant_Shadow_Mirage = DungeonList(
id=17,
name='Stagnant_Shadow_Mirage',
cn='幻光之形•凝滞虚影',
cht='幻光之形•凝滯虛影',
en='Shape of Mirage',
jp='凝結虚影・幻光の形',
)
Stagnant_Shadow_Icicle = DungeonList(
id=18,
name='Stagnant_Shadow_Icicle',
cn='冰棱之形•凝滞虚影',
cht='冰稜之形•凝滯虛影',
en='Shape of Icicle',
jp='凝結虚影・氷柱の形',
)
Stagnant_Shadow_Doom = DungeonList(
id=19,
name='Stagnant_Shadow_Doom',
cn='震厄之形•凝滞虚影',
cht='震厄之形•凝滯虛影',
en='Shape of Doom',
jp='凝結虚影・震厄の形',
)
Cavern_of_Corrosion_Path_of_Gelid_Wind = DungeonList(
id=20,
name='Cavern_of_Corrosion_Path_of_Gelid_Wind',
cn='霜风之径•侵蚀隧洞',
cht='霜風之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Gelid Wind',
jp='侵蝕トンネル・霜風の路',
)
Cavern_of_Corrosion_Path_of_Jabbing_Punch = DungeonList(
id=21,
name='Cavern_of_Corrosion_Path_of_Jabbing_Punch',
cn='迅拳之径•侵蚀隧洞',
cht='迅拳之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Jabbing Punch',
jp='侵蝕トンネル・迅拳の路',
)
Cavern_of_Corrosion_Path_of_Drifting = DungeonList(
id=22,
name='Cavern_of_Corrosion_Path_of_Drifting',
cn='漂泊之径•侵蚀隧洞',
cht='漂泊之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Drifting',
jp='侵蝕トンネル・漂泊の路',
)
Cavern_of_Corrosion_Path_of_Providence = DungeonList(
id=23,
name='Cavern_of_Corrosion_Path_of_Providence',
cn='睿治之径•侵蚀隧洞',
cht='睿治之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Providence',
jp='侵蝕トンネル・睿治の路',
)
Cavern_of_Corrosion_Path_of_Holy_Hymn = DungeonList(
id=24,
name='Cavern_of_Corrosion_Path_of_Holy_Hymn',
cn='圣颂之径•侵蚀隧洞',
cht='聖頌之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Holy Hymn',
jp='侵蝕トンネル・聖頌の路',
)
Cavern_of_Corrosion_Path_of_Conflagration = DungeonList(
id=25,
name='Cavern_of_Corrosion_Path_of_Conflagration',
cn='野焰之径•侵蚀隧洞',
cht='野焰之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Conflagration',
jp='侵蝕トンネル・野焔の路',
)
Destruction_Beginning = DungeonList(
id=26,
name='Destruction_Beginning',
cn='毁灭的开端•历战余响',
cht='毀滅的開端•歷戰餘響',
en="Destruction's Beginning",
jp='歴戦余韻・壊滅の始まり',
)
Echo_of_War_End_of_the_Eternal_Freeze = DungeonList(
id=27,
name='Echo_of_War_End_of_the_Eternal_Freeze',
cn='寒潮的落幕•历战余响',
cht='寒潮的落幕•歷戰餘響',
en='End of the Eternal Freeze',
jp='歴戦余韻・寒波の幕切れ',
)
Simulated_Universe_World_1 = DungeonList(
id=28,
name='Simulated_Universe_World_1',
cn='第一世界•模拟宇宙',
cht='第一世界•模擬宇宙',
en='Simulated Universe — World 1',
jp='第一世界・模擬宇宙',
)
Simulated_Universe_World_3 = DungeonList(
id=29,
name='Simulated_Universe_World_3',
cn='第三世界•模拟宇宙',
cht='第三世界•模擬宇宙',
en='Simulated Universe — World 3',
jp='第三世界・模擬宇宙',
)
Simulated_Universe_World_4 = DungeonList(
id=30,
name='Simulated_Universe_World_4',
cn='第四世界•模拟宇宙',
cht='第四世界•模擬宇宙',
en='Simulated Universe — World 4',
jp='第四世界・模擬宇宙',
)
Simulated_Universe_World_5 = DungeonList(
id=31,
name='Simulated_Universe_World_5',
cn='第五世界•模拟宇宙',
cht='第五世界•模擬宇宙',
en='Simulated Universe — World 5',
jp='第五世界・模擬宇宙',
)
Simulated_Universe_World_6 = DungeonList(
id=32,
name='Simulated_Universe_World_6',
cn='第六世界•模拟宇宙',
cht='第六世界•模擬宇宙',
en='Simulated Universe — World 6',
jp='第六世界・模擬宇宙',
)

View File

@ -5,6 +5,7 @@ from .classes import DungeonNav
Simulated_Universe = DungeonNav(
id=1,
name='Simulated_Universe',
cn='模拟宇宙',
cht='模擬宇宙',
en='Simulated Universe',
@ -12,6 +13,7 @@ Simulated_Universe = DungeonNav(
)
Calyx_Golden = DungeonNav(
id=2,
name='Calyx_Golden',
cn='拟造花萼(金)',
cht='擬造花萼(金)',
en='Calyx (Golden)',
@ -19,6 +21,7 @@ Calyx_Golden = DungeonNav(
)
Calyx_Crimson = DungeonNav(
id=3,
name='Calyx_Crimson',
cn='拟造花萼(赤)',
cht='擬造花萼(赤)',
en='Calyx (Crimson)',
@ -26,6 +29,7 @@ Calyx_Crimson = DungeonNav(
)
Stagnant_Shadow = DungeonNav(
id=4,
name='Stagnant_Shadow',
cn='凝滞虚影',
cht='凝滯虛影',
en='Stagnant Shadow',
@ -33,6 +37,7 @@ Stagnant_Shadow = DungeonNav(
)
Cavern_of_Corrosion = DungeonNav(
id=5,
name='Cavern_of_Corrosion',
cn='侵蚀隧洞',
cht='侵蝕隧洞',
en='Cavern of Corrosion',
@ -40,6 +45,7 @@ Cavern_of_Corrosion = DungeonNav(
)
Echo_of_War = DungeonNav(
id=6,
name='Echo_of_War',
cn='历战余响',
cht='歷戰餘響',
en='Echo of War',
@ -47,6 +53,7 @@ Echo_of_War = DungeonNav(
)
Forgotten_Hall = DungeonNav(
id=7,
name='Forgotten_Hall',
cn='忘却之庭',
cht='忘卻之庭',
en='Forgotten Hall',

View File

@ -5,6 +5,7 @@ from .classes import DungeonTab
Operation_Briefing = DungeonTab(
id=1,
name='Operation_Briefing',
cn='行动摘要',
cht='行動摘要',
en='Operation Briefing',
@ -12,6 +13,7 @@ Operation_Briefing = DungeonTab(
)
Survival_Index = DungeonTab(
id=2,
name='Survival_Index',
cn='生存索引',
cht='生存索引',
en='Survival Index',
@ -19,6 +21,7 @@ Survival_Index = DungeonTab(
)
Daily_Training = DungeonTab(
id=3,
name='Daily_Training',
cn='每日实训',
cht='每日實訓',
en='Daily Training',