BIN
assets/character/Jade.png
Normal file
After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
BIN
assets/character/Yunli.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
assets/share/combat/support/COMBAT_SUPPORT_LIST.SEARCH.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 11 KiB |
@ -124,6 +124,10 @@ class KeywordExtract:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
quest_data = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'QuestData.json'))
|
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]
|
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]))
|
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)
|
self.load_keywords(quest_keywords, lang)
|
||||||
@ -140,12 +144,15 @@ class KeywordExtract:
|
|||||||
old_quest = [
|
old_quest = [
|
||||||
"Go_on_assignment_1_time", # -> Dispatch_1_assignments
|
"Go_on_assignment_1_time", # -> Dispatch_1_assignments
|
||||||
"Complete_Simulated_Universe_1_times", # same
|
"Complete_Simulated_Universe_1_times", # same
|
||||||
"Complete_1_stage_in_Simulated_Universe_Any_world", # -> Complete_Divergent_Universe_or_Simulated_Universe_1_times
|
"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
|
"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
|
"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
|
"Use_Technique_2_times", # -> Use_Technique_1_times
|
||||||
"Destroy_3_destructible_objects", # -> Destroy_1_destructible_objects
|
"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
|
"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_character_1_time", # -> Level_up_any_character_1_times
|
||||||
"Level_up_any_Light_Cone_1_time", # -> Level_up_any_Light_Cone_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_Consumable_1_time", # -> Use_the_Omni_Synthesizer_1_times
|
||||||
@ -170,7 +177,8 @@ class KeywordExtract:
|
|||||||
"Consume_1_Trailblaze_Power": 120
|
"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 = replace_templates(text)
|
||||||
text = text.replace('1', f'{correct_time}')
|
text = text.replace('1', f'{correct_time}')
|
||||||
return text
|
return text
|
||||||
@ -187,7 +195,8 @@ class KeywordExtract:
|
|||||||
gen.ObjectAttr(key='id', value=index + last_id + 1)
|
gen.ObjectAttr(key='id', value=index + last_id + 1)
|
||||||
gen.ObjectAttr(key='name', value=name)
|
gen.ObjectAttr(key='name', value=name)
|
||||||
for lang in UI_LANGUAGES:
|
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
|
gen.last_id = index + last_id + 1
|
||||||
|
|
||||||
output_file = './tasks/daily/keywords/daily_quest.py'
|
output_file = './tasks/daily/keywords/daily_quest.py'
|
||||||
@ -198,14 +207,14 @@ class KeywordExtract:
|
|||||||
|
|
||||||
def generate_daily_quests(self):
|
def generate_daily_quests(self):
|
||||||
daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json'))
|
daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json'))
|
||||||
self.load_quests(daily_quest.keys())
|
self.load_quests([str(deep_get(data, 'DailyID')) for data in daily_quest])
|
||||||
self.write_daily_quest_keywords()
|
self.write_daily_quest_keywords()
|
||||||
|
|
||||||
def load_character_name_keywords(self, lang='en'):
|
def load_character_name_keywords(self, lang='en'):
|
||||||
file_name = 'ItemConfigAvatarPlayerIcon.json'
|
file_name = 'ItemConfigAvatarPlayerIcon.json'
|
||||||
path = os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', file_name)
|
path = os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', file_name)
|
||||||
character_data = read_file(path)
|
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]
|
text_map = self.text_map[lang]
|
||||||
keywords_id = sorted(
|
keywords_id = sorted(
|
||||||
@ -216,36 +225,45 @@ class KeywordExtract:
|
|||||||
def generate_shadow_with_characters(self):
|
def generate_shadow_with_characters(self):
|
||||||
# Damage type -> damage hash
|
# Damage type -> damage hash
|
||||||
damage_info = dict()
|
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',
|
TextMap.DATA_FOLDER, 'ExcelOutput',
|
||||||
'DamageType.json'
|
'DamageType.json'
|
||||||
)).items():
|
)):
|
||||||
|
type_name = deep_get(data, 'ID', 0)
|
||||||
damage_info[type_name] = deep_get(data, 'DamageTypeName.Hash')
|
damage_info[type_name] = deep_get(data, 'DamageTypeName.Hash')
|
||||||
# Character id -> character hash & damage type
|
# Character id -> character hash & damage type
|
||||||
character_info = dict()
|
character_info = dict()
|
||||||
for data in read_file(os.path.join(
|
for data in read_file(os.path.join(
|
||||||
TextMap.DATA_FOLDER, 'ExcelOutput',
|
TextMap.DATA_FOLDER, 'ExcelOutput',
|
||||||
'AvatarConfig.json'
|
'AvatarConfig.json'
|
||||||
)).values():
|
)):
|
||||||
name_hash = deep_get(data, 'AvatarName.Hash')
|
name_hash = deep_get(data, 'AvatarName.Hash')
|
||||||
damage_type = deep_get(data, 'DamageType')
|
damage_type = deep_get(data, 'DamageType')
|
||||||
character_info[data['AvatarID']] = (
|
character_info[data['AvatarID']] = (
|
||||||
name_hash, damage_info[damage_type])
|
name_hash, damage_info[damage_type])
|
||||||
# Item id -> character id
|
# Item id -> character id
|
||||||
promotion_info = defaultdict(list)
|
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',
|
TextMap.DATA_FOLDER, 'ExcelOutput',
|
||||||
'AvatarPromotionConfig.json'
|
'AvatarPromotionConfig.json'
|
||||||
)).values():
|
)), keyword='AvatarID'):
|
||||||
character_id = deep_get(data, '0.AvatarID')
|
character_id = deep_get(data, '0.AvatarID')
|
||||||
item_id = deep_get(data, '2.PromotionCostList')[-1]['ItemID']
|
item_id = deep_get(data, '2.PromotionCostList')[-1]['ItemID']
|
||||||
promotion_info[item_id].append(character_info[character_id])
|
promotion_info[item_id].append(character_info[character_id])
|
||||||
# Shadow hash -> item id
|
# Shadow hash -> item id
|
||||||
shadow_info = dict()
|
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',
|
TextMap.DATA_FOLDER, 'ExcelOutput',
|
||||||
'MappingInfo.json'
|
'MappingInfo.json'
|
||||||
)).values():
|
)), keyword='ID'):
|
||||||
farm_type = deep_get(data, '0.FarmType')
|
farm_type = deep_get(data, '0.FarmType')
|
||||||
if farm_type != 'ELEMENT':
|
if farm_type != 'ELEMENT':
|
||||||
continue
|
continue
|
||||||
@ -273,10 +291,12 @@ class KeywordExtract:
|
|||||||
gen.ObjectAttr(key='id', value=index + 1)
|
gen.ObjectAttr(key='id', value=index + 1)
|
||||||
gen.ObjectAttr(key='name', value=name)
|
gen.ObjectAttr(key='name', value=name)
|
||||||
for lang in UI_LANGUAGES:
|
for lang in UI_LANGUAGES:
|
||||||
character_names = ' / '.join([
|
character_names = [
|
||||||
replace_templates(self.find_keyword(c[0], lang)[1])
|
replace_templates(self.find_keyword(c[0], lang)[1])
|
||||||
for c in characters
|
for c in characters
|
||||||
])
|
]
|
||||||
|
character_names = list(dict.fromkeys(character_names))
|
||||||
|
character_names = ' / '.join(character_names)
|
||||||
damage_type = self.find_keyword(characters[0][1], lang)[1]
|
damage_type = self.find_keyword(characters[0][1], lang)[1]
|
||||||
if lang in {'en', 'es'}:
|
if lang in {'en', 'es'}:
|
||||||
value = f'{prefix_dict[lang]}{damage_type} ({character_names})'
|
value = f'{prefix_dict[lang]}{damage_type} ({character_names})'
|
||||||
@ -351,7 +371,7 @@ class KeywordExtract:
|
|||||||
|
|
||||||
def generate_battle_pass_quests(self):
|
def generate_battle_pass_quests(self):
|
||||||
battle_pass_quests = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'BattlePassConfig.json'))
|
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_quest_list = deep_get(latest_quests, "WeekQuestList")
|
||||||
week_order1 = deep_get(latest_quests, "WeekOrder1")
|
week_order1 = deep_get(latest_quests, "WeekOrder1")
|
||||||
week_chain_quest_list = deep_get(latest_quests, "WeekChainQuestList")
|
week_chain_quest_list = deep_get(latest_quests, "WeekChainQuestList")
|
||||||
@ -362,30 +382,38 @@ class KeywordExtract:
|
|||||||
def generate_rogue_buff(self):
|
def generate_rogue_buff(self):
|
||||||
# paths
|
# paths
|
||||||
aeons = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueAeonDisplay.json'))
|
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.keywords_id = aeons_hash
|
||||||
self.write_keywords(keyword_class='RoguePath', output_file='./tasks/rogue/keywords/path.py')
|
self.write_keywords(keyword_class='RoguePath', output_file='./tasks/rogue/keywords/path.py')
|
||||||
|
|
||||||
# blessings
|
# blessings
|
||||||
blessings_info = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueBuff.json'))
|
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_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()
|
blessings_name_map = {
|
||||||
if not deep_get(blessing, '1.AeonID')][1:]
|
deep_get(data, 'ID'): data
|
||||||
resonances_id = [deep_get(blessing, '1.MazeBuffID') for blessing in blessings_info.values()
|
for data in blessings_name_map
|
||||||
if deep_get(blessing, '1.AeonID')]
|
}
|
||||||
|
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
|
# ignore endless buffs
|
||||||
endless_buffs = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueEndlessMegaBuffDesc.json'))
|
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]
|
blessings_id = [id_ for id_ in blessings_id if id_ not in endless_buff_ids]
|
||||||
|
|
||||||
def get_blessing_infos(id_list, with_enhancement: bool):
|
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]
|
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
|
# 119 is the magic number make type match with path in keyword above
|
||||||
for blessing_hash, blessing_id in zip(blessings_hash, id_list)}
|
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)}
|
for blessing_hash, blessing_id in zip(blessings_hash, id_list)}
|
||||||
category_map = {
|
category_map = {
|
||||||
"Common": 1,
|
"Common": 1,
|
||||||
@ -418,8 +446,8 @@ class KeywordExtract:
|
|||||||
'RogueTalkNameConfig.json'
|
'RogueTalkNameConfig.json'
|
||||||
)
|
)
|
||||||
event_title_ids = {
|
event_title_ids = {
|
||||||
id_: deep_get(data, 'Name.Hash')
|
str(deep_get(data, 'TalkNameID')): deep_get(data, 'Name.Hash')
|
||||||
for id_, data in read_file(event_title_file).items()
|
for data in read_file(event_title_file)
|
||||||
}
|
}
|
||||||
event_title_texts = defaultdict(list)
|
event_title_texts = defaultdict(list)
|
||||||
for title_id, title_hash in event_title_ids.items():
|
for title_id, title_hash in event_title_ids.items():
|
||||||
@ -432,8 +460,8 @@ class KeywordExtract:
|
|||||||
'RogueDialogueOptionDisplay.json'
|
'RogueDialogueOptionDisplay.json'
|
||||||
)
|
)
|
||||||
option_ids = {
|
option_ids = {
|
||||||
id_: deep_get(data, 'OptionTitle.Hash')
|
str(deep_get(data, 'OptionDisplayID')): deep_get(data, 'OptionTitle.Hash')
|
||||||
for id_, data in read_file(option_file).items()
|
for data in read_file(option_file)
|
||||||
}
|
}
|
||||||
# Key: event name hash, value: list of option id/hash
|
# Key: event name hash, value: list of option id/hash
|
||||||
options_grouped = dict()
|
options_grouped = dict()
|
||||||
@ -503,7 +531,9 @@ class KeywordExtract:
|
|||||||
if option_dup_count[option_var] > 1:
|
if option_dup_count[option_var] > 1:
|
||||||
option_var = f'{option_var}_{option_md5[:md5_prefix_len]}'
|
option_var = f'{option_var}_{option_md5[:md5_prefix_len]}'
|
||||||
return option_var
|
return option_var
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
option_gen = None
|
option_gen = None
|
||||||
option_hash_to_keyword_id = dict() # option hash -> option keyword id
|
option_hash_to_keyword_id = dict() # option hash -> option keyword id
|
||||||
for i, (option_md5, option_hash) in enumerate(option_md5s.items(), start=1):
|
for i, (option_md5, option_hash) in enumerate(option_md5s.items(), start=1):
|
||||||
@ -543,9 +573,9 @@ class KeywordExtract:
|
|||||||
logger.critical(
|
logger.critical(
|
||||||
f'Importing preset strategies fails, probably due to changes in {output_file}')
|
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()
|
visited = set()
|
||||||
for data in file.values():
|
for data in file:
|
||||||
hash_ = deep_get(data, keys=keys)
|
hash_ = deep_get(data, keys=keys)
|
||||||
_, name = self.find_keyword(hash_, lang='cn')
|
_, name = self.find_keyword(hash_, lang='cn')
|
||||||
if name in visited:
|
if name in visited:
|
||||||
|
@ -30,25 +30,26 @@ def get_assignment_entry_data():
|
|||||||
"""
|
"""
|
||||||
expedition_namehash_to_id = {
|
expedition_namehash_to_id = {
|
||||||
deep_get(expedition, 'Name.Hash'): deep_get(expedition, 'ExpeditionID')
|
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 = {v: k for k, v in expedition_namehash_to_id.items()}
|
||||||
rev = resort(rev)
|
rev = resort(rev)
|
||||||
expedition_namehash_to_id = {v: k for k, v in rev.items()}
|
expedition_namehash_to_id = {v: k for k, v in rev.items()}
|
||||||
expedition_id_to_reward_id = {
|
expedition_id_to_reward_id = {
|
||||||
deep_get(expedition, '4.2.ExpeditionID'): deep_get(expedition, '4.2.RewardID')
|
deep_get(expedition, 'ExpeditionID'): deep_get(expedition, 'RewardID')
|
||||||
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json').values()
|
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 = {
|
reward_id_to_item_ids = {
|
||||||
deep_get(reward, 'RewardID'): [
|
deep_get(reward, 'RewardID'): [
|
||||||
v for k, v in reward.items()
|
v for k, v in reward.items()
|
||||||
if k.startswith('ItemID')
|
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 = {
|
item_id_to_namehash = {
|
||||||
deep_get(item, 'ID'): deep_get(item, 'ItemName.Hash')
|
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 = {
|
item_name_remap = {
|
||||||
'旅情见闻': '角色经验材料',
|
'旅情见闻': '角色经验材料',
|
||||||
@ -81,7 +82,7 @@ class GenerateAssignmentGroup(GenerateKeyword):
|
|||||||
output_file = './tasks/assignment/keywords/group.py'
|
output_file = './tasks/assignment/keywords/group.py'
|
||||||
|
|
||||||
def iter_keywords(self) -> Iterable[dict]:
|
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'))
|
yield dict(text_id=deep_get(group, 'Name.Hash'))
|
||||||
|
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ class GenerateAssignmentEventEntry(GenerateKeyword):
|
|||||||
output_file = './tasks/assignment/keywords/event_entry.py'
|
output_file = './tasks/assignment/keywords/event_entry.py'
|
||||||
|
|
||||||
def iter_keywords(self) -> Iterable[dict]:
|
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'))
|
yield dict(text_id=deep_get(expedition, 'Name.Hash'))
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,13 +92,13 @@ class GenerateKeyword:
|
|||||||
text_map['cn'] = TextMap('chs')
|
text_map['cn'] = TextMap('chs')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def read_file(file: str) -> dict:
|
def read_file(file: str) -> list:
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
file: ./ExcelOutput/GameplayGuideData.json
|
file: ./ExcelOutput/GameplayGuideData.json
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict:
|
list
|
||||||
"""
|
"""
|
||||||
file = os.path.join(TextMap.DATA_FOLDER, file)
|
file = os.path.join(TextMap.DATA_FOLDER, file)
|
||||||
return read_file(file)
|
return read_file(file)
|
||||||
|
@ -41,7 +41,7 @@ class GenerateDungeonList(GenerateKeyword):
|
|||||||
|
|
||||||
def iter_dungeon(self):
|
def iter_dungeon(self):
|
||||||
temp_save = ""
|
temp_save = ""
|
||||||
for data in self.data.values():
|
for data in self.data:
|
||||||
dungeon_id = data.get('ID', 0)
|
dungeon_id = data.get('ID', 0)
|
||||||
text_id = deep_get(data, keys='Name.Hash')
|
text_id = deep_get(data, keys='Name.Hash')
|
||||||
plane_id = deep_get(data, 'MapEntranceID', 0)
|
plane_id = deep_get(data, 'MapEntranceID', 0)
|
||||||
|
@ -10,7 +10,7 @@ class GenerateItemBase(GenerateKeyword):
|
|||||||
blacklist = []
|
blacklist = []
|
||||||
|
|
||||||
def iter_items(self) -> t.Iterable[dict]:
|
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)
|
item_id = data.get('ID', 0)
|
||||||
text_id = deep_get(data, keys='ItemName.Hash')
|
text_id = deep_get(data, keys='ItemName.Hash')
|
||||||
subtype = data.get('ItemSubType', 0)
|
subtype = data.get('ItemSubType', 0)
|
||||||
@ -50,12 +50,11 @@ class GenerateItemBase(GenerateKeyword):
|
|||||||
data
|
data
|
||||||
"""
|
"""
|
||||||
dic = {}
|
dic = {}
|
||||||
for level_data in SHARE_DATA.MappingInfo.values():
|
for dungeon_data in SHARE_DATA.MappingInfo:
|
||||||
# Use the highest level
|
# Use the highest level
|
||||||
# And must contain:
|
# And must contain:
|
||||||
# "Type": "FARM_ENTRANCE",
|
# "Type": "FARM_ENTRANCE",
|
||||||
# "FarmType": "COCOON",
|
# "FarmType": "COCOON",
|
||||||
for dungeon_data in level_data.values():
|
|
||||||
if dungeon_data.get('Type') != 'FARM_ENTRANCE':
|
if dungeon_data.get('Type') != 'FARM_ENTRANCE':
|
||||||
continue
|
continue
|
||||||
# parse
|
# parse
|
||||||
|
@ -13,8 +13,8 @@ class GenerateMapPlane(GenerateKeyword):
|
|||||||
return self.read_file('./ExcelOutput/AreaMapConfig.json')
|
return self.read_file('./ExcelOutput/AreaMapConfig.json')
|
||||||
|
|
||||||
def iter_planes(self) -> t.Iterable[dict]:
|
def iter_planes(self) -> t.Iterable[dict]:
|
||||||
for plane_id, data in self.data.items():
|
for data in self.data:
|
||||||
plane_id = int(plane_id)
|
plane_id = int(deep_get(data, 'ID', 0))
|
||||||
world_id = int(str(plane_id)[-5])
|
world_id = int(str(plane_id)[-5])
|
||||||
sort_id = int(deep_get(data, 'MenuSortID', 0))
|
sort_id = int(deep_get(data, 'MenuSortID', 0))
|
||||||
text_id = deep_get(data, 'Name.Hash')
|
text_id = deep_get(data, 'Name.Hash')
|
||||||
|
@ -672,13 +672,15 @@
|
|||||||
"Himeko",
|
"Himeko",
|
||||||
"Hook",
|
"Hook",
|
||||||
"Huohuo",
|
"Huohuo",
|
||||||
|
"Jade",
|
||||||
"JingYuan",
|
"JingYuan",
|
||||||
"Jingliu",
|
"Jingliu",
|
||||||
"Kafka",
|
"Kafka",
|
||||||
"Luka",
|
"Luka",
|
||||||
"Luocha",
|
"Luocha",
|
||||||
"Lynx",
|
"Lynx",
|
||||||
"March7th",
|
"March7thPreservation",
|
||||||
|
"March7thTheHunt",
|
||||||
"Misha",
|
"Misha",
|
||||||
"Natasha",
|
"Natasha",
|
||||||
"Pela",
|
"Pela",
|
||||||
@ -699,7 +701,8 @@
|
|||||||
"Welt",
|
"Welt",
|
||||||
"Xueyi",
|
"Xueyi",
|
||||||
"Yanqing",
|
"Yanqing",
|
||||||
"Yukong"
|
"Yukong",
|
||||||
|
"Yunli"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1238,13 +1241,15 @@
|
|||||||
"Himeko",
|
"Himeko",
|
||||||
"Hook",
|
"Hook",
|
||||||
"Huohuo",
|
"Huohuo",
|
||||||
|
"Jade",
|
||||||
"JingYuan",
|
"JingYuan",
|
||||||
"Jingliu",
|
"Jingliu",
|
||||||
"Kafka",
|
"Kafka",
|
||||||
"Luka",
|
"Luka",
|
||||||
"Luocha",
|
"Luocha",
|
||||||
"Lynx",
|
"Lynx",
|
||||||
"March7th",
|
"March7thPreservation",
|
||||||
|
"March7thTheHunt",
|
||||||
"Misha",
|
"Misha",
|
||||||
"Natasha",
|
"Natasha",
|
||||||
"Pela",
|
"Pela",
|
||||||
@ -1265,7 +1270,8 @@
|
|||||||
"Welt",
|
"Welt",
|
||||||
"Xueyi",
|
"Xueyi",
|
||||||
"Yanqing",
|
"Yanqing",
|
||||||
"Yukong"
|
"Yukong",
|
||||||
|
"Yunli"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1522,13 +1528,15 @@
|
|||||||
"Himeko",
|
"Himeko",
|
||||||
"Hook",
|
"Hook",
|
||||||
"Huohuo",
|
"Huohuo",
|
||||||
|
"Jade",
|
||||||
"JingYuan",
|
"JingYuan",
|
||||||
"Jingliu",
|
"Jingliu",
|
||||||
"Kafka",
|
"Kafka",
|
||||||
"Luka",
|
"Luka",
|
||||||
"Luocha",
|
"Luocha",
|
||||||
"Lynx",
|
"Lynx",
|
||||||
"March7th",
|
"March7thPreservation",
|
||||||
|
"March7thTheHunt",
|
||||||
"Misha",
|
"Misha",
|
||||||
"Natasha",
|
"Natasha",
|
||||||
"Pela",
|
"Pela",
|
||||||
@ -1549,7 +1557,8 @@
|
|||||||
"Welt",
|
"Welt",
|
||||||
"Xueyi",
|
"Xueyi",
|
||||||
"Yanqing",
|
"Yanqing",
|
||||||
"Yukong"
|
"Yukong",
|
||||||
|
"Yunli"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -53,7 +53,7 @@ class GeneratedConfig:
|
|||||||
|
|
||||||
# Group `DungeonSupport`
|
# Group `DungeonSupport`
|
||||||
DungeonSupport_Use = 'when_daily' # always_use, when_daily, do_not_use
|
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, Jade, 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`
|
# Group `DungeonStorage`
|
||||||
DungeonStorage_TrailblazePower = {}
|
DungeonStorage_TrailblazePower = {}
|
||||||
|
@ -100,7 +100,7 @@ class ConfigGenerator:
|
|||||||
option_add(keys='Ornament.Dungeon.option', options=ornament)
|
option_add(keys='Ornament.Dungeon.option', options=ornament)
|
||||||
# Insert characters
|
# Insert characters
|
||||||
from tasks.character.keywords import CharacterList
|
from tasks.character.keywords import CharacterList
|
||||||
unsupported_characters = ["Jade"]
|
unsupported_characters = ["Jiaoqiu"]
|
||||||
characters = [character.name for character in CharacterList.instances.values()
|
characters = [character.name for character in CharacterList.instances.values()
|
||||||
if character.name not in unsupported_characters]
|
if character.name not in unsupported_characters]
|
||||||
option_add(keys='DungeonSupport.Character.option', options=characters)
|
option_add(keys='DungeonSupport.Character.option', options=characters)
|
||||||
|
@ -263,10 +263,10 @@
|
|||||||
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Trace: Nihility (Alchemy Commission)",
|
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Trace: Nihility (Alchemy Commission)",
|
||||||
"Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)",
|
"Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)",
|
||||||
"Stagnant_Shadow_Perdition": "Ascension: Physical (Hanya / Argenti)",
|
"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_Blaze": "Ascension: Fire (Himeko / Asta / Hook)",
|
||||||
"Stagnant_Shadow_Scorch": "Ascension: Fire (Guinaifen / Topaz & Numby)",
|
"Stagnant_Shadow_Scorch": "Ascension: Fire (Guinaifen / Topaz & Numby)",
|
||||||
"Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher)",
|
"Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)",
|
||||||
"Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)",
|
"Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)",
|
||||||
"Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing / Jingliu / Ruan Mei)",
|
"Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing / Jingliu / Ruan Mei)",
|
||||||
"Stagnant_Shadow_Nectar": "Ascension: Ice (Misha)",
|
"Stagnant_Shadow_Nectar": "Ascension: Ice (Misha)",
|
||||||
@ -403,13 +403,15 @@
|
|||||||
"Himeko": "Himeko",
|
"Himeko": "Himeko",
|
||||||
"Hook": "Hook",
|
"Hook": "Hook",
|
||||||
"Huohuo": "Huohuo",
|
"Huohuo": "Huohuo",
|
||||||
|
"Jade": "Jade",
|
||||||
"JingYuan": "Jing Yuan",
|
"JingYuan": "Jing Yuan",
|
||||||
"Jingliu": "Jingliu",
|
"Jingliu": "Jingliu",
|
||||||
"Kafka": "Kafka",
|
"Kafka": "Kafka",
|
||||||
"Luka": "Luka",
|
"Luka": "Luka",
|
||||||
"Luocha": "Luocha",
|
"Luocha": "Luocha",
|
||||||
"Lynx": "Lynx",
|
"Lynx": "Lynx",
|
||||||
"March7th": "March 7th",
|
"March7thPreservation": "March 7th: Preservation",
|
||||||
|
"March7thTheHunt": "March 7th: The Hunt",
|
||||||
"Misha": "Misha",
|
"Misha": "Misha",
|
||||||
"Natasha": "Natasha",
|
"Natasha": "Natasha",
|
||||||
"Pela": "Pela",
|
"Pela": "Pela",
|
||||||
@ -430,7 +432,8 @@
|
|||||||
"Welt": "Welt",
|
"Welt": "Welt",
|
||||||
"Xueyi": "Xueyi",
|
"Xueyi": "Xueyi",
|
||||||
"Yanqing": "Yanqing",
|
"Yanqing": "Yanqing",
|
||||||
"Yukong": "Yukong"
|
"Yukong": "Yukong",
|
||||||
|
"Yunli": "Yunli"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DungeonStorage": {
|
"DungeonStorage": {
|
||||||
@ -555,11 +558,11 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_IPC_Work_Permit": {
|
"Item_IPC_Work_Permit": {
|
||||||
"name": "Ascension: Physical (Boothill / Robin)",
|
"name": "Ascension: Physical (Boothill / Robin / Yunli)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Raging_Heart": {
|
"Item_Raging_Heart": {
|
||||||
"name": "Ascension: Fire (Firefly / Gallagher)",
|
"name": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Dream_Fridge": {
|
"Item_Dream_Fridge": {
|
||||||
|
@ -263,10 +263,10 @@
|
|||||||
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Rastros: Nihilidad (Comisión de Alquimia)",
|
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Rastros: Nihilidad (Comisión de Alquimia)",
|
||||||
"Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)",
|
"Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)",
|
||||||
"Stagnant_Shadow_Perdition": "Ascension: Físico (Hanya / Argenti)",
|
"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_Blaze": "Ascension: Fuego (Himeko / Asta / Hook)",
|
||||||
"Stagnant_Shadow_Scorch": "Ascension: Fuego (Guinaifen / Topaz y Conti)",
|
"Stagnant_Shadow_Scorch": "Ascension: Fuego (Guinaifen / Topaz y Conti)",
|
||||||
"Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher)",
|
"Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)",
|
||||||
"Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)",
|
"Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)",
|
||||||
"Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing / Jingliu / Ruan Mei)",
|
"Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing / Jingliu / Ruan Mei)",
|
||||||
"Stagnant_Shadow_Nectar": "Ascension: Hielo (Misha)",
|
"Stagnant_Shadow_Nectar": "Ascension: Hielo (Misha)",
|
||||||
@ -288,7 +288,7 @@
|
|||||||
"Cavern_of_Corrosion_Path_of_Elixir_Seekers": "Artefactos: HP y SPD (Senda de los elixires)",
|
"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_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_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": {
|
"NameAtDoubleCalyx": {
|
||||||
"name": "En los eventos de x2 de Cáliz",
|
"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_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_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_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": {
|
"Team": {
|
||||||
"name": "Equipo de mazmorra",
|
"name": "Equipo de mazmorra",
|
||||||
@ -403,13 +403,15 @@
|
|||||||
"Himeko": "Himeko",
|
"Himeko": "Himeko",
|
||||||
"Hook": "Hook",
|
"Hook": "Hook",
|
||||||
"Huohuo": "Huohuo",
|
"Huohuo": "Huohuo",
|
||||||
|
"Jade": "Jade",
|
||||||
"JingYuan": "Jing Yuan",
|
"JingYuan": "Jing Yuan",
|
||||||
"Jingliu": "Jingliu",
|
"Jingliu": "Jingliu",
|
||||||
"Kafka": "Kafka",
|
"Kafka": "Kafka",
|
||||||
"Luka": "Luka",
|
"Luka": "Luka",
|
||||||
"Luocha": "Luocha",
|
"Luocha": "Luocha",
|
||||||
"Lynx": "Lynx",
|
"Lynx": "Lynx",
|
||||||
"March7th": "Siete de Marzo",
|
"March7thPreservation": "Siete de Marzo: Conservación",
|
||||||
|
"March7thTheHunt": "Siete de Marzo: Cacería",
|
||||||
"Misha": "Misha",
|
"Misha": "Misha",
|
||||||
"Natasha": "Natasha",
|
"Natasha": "Natasha",
|
||||||
"Pela": "Pela",
|
"Pela": "Pela",
|
||||||
@ -430,7 +432,8 @@
|
|||||||
"Welt": "Welt",
|
"Welt": "Welt",
|
||||||
"Xueyi": "Xueyi",
|
"Xueyi": "Xueyi",
|
||||||
"Yanqing": "Yanqing",
|
"Yanqing": "Yanqing",
|
||||||
"Yukong": "Yukong"
|
"Yukong": "Yukong",
|
||||||
|
"Yunli": "Yunli"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DungeonStorage": {
|
"DungeonStorage": {
|
||||||
@ -555,11 +558,11 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_IPC_Work_Permit": {
|
"Item_IPC_Work_Permit": {
|
||||||
"name": "Ascension: Físico (Boothill / Robin)",
|
"name": "Ascension: Físico (Boothill / Robin / Yunli)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Raging_Heart": {
|
"Item_Raging_Heart": {
|
||||||
"name": "Ascension: Fuego (Luciérnaga / Gallagher)",
|
"name": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Dream_Fridge": {
|
"Item_Dream_Fridge": {
|
||||||
@ -647,7 +650,7 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Lost_Echo_of_the_Shared_Wish": {
|
"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": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Squirming_Core": {
|
"Item_Squirming_Core": {
|
||||||
@ -695,7 +698,7 @@
|
|||||||
"Echo_of_War_End_of_the_Eternal_Freeze": "El fin del Hielo Eterno (Jarilo-VI)",
|
"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_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_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": {
|
"Team": {
|
||||||
"name": "Equipo de mazmorra",
|
"name": "Equipo de mazmorra",
|
||||||
|
@ -263,10 +263,10 @@
|
|||||||
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "軌跡素材:虚無(丹鼎司)",
|
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "軌跡素材:虚無(丹鼎司)",
|
||||||
"Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)",
|
"Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)",
|
||||||
"Stagnant_Shadow_Perdition": "キャラクター昇格素材:物理(寒鴉 / アルジェンティ)",
|
"Stagnant_Shadow_Perdition": "キャラクター昇格素材:物理(寒鴉 / アルジェンティ)",
|
||||||
"Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン)",
|
"Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)",
|
||||||
"Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)",
|
"Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)",
|
||||||
"Stagnant_Shadow_Scorch": "キャラクター昇格素材:炎(桂乃芬 / トパーズ&カブ)",
|
"Stagnant_Shadow_Scorch": "キャラクター昇格素材:炎(桂乃芬 / トパーズ&カブ)",
|
||||||
"Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー)",
|
"Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)",
|
||||||
"Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)",
|
"Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)",
|
||||||
"Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿 / 鏡流 / ルアン・メェイ)",
|
"Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿 / 鏡流 / ルアン・メェイ)",
|
||||||
"Stagnant_Shadow_Nectar": "キャラクター昇格素材:氷(ミーシャ)",
|
"Stagnant_Shadow_Nectar": "キャラクター昇格素材:氷(ミーシャ)",
|
||||||
@ -403,13 +403,15 @@
|
|||||||
"Himeko": "姫子",
|
"Himeko": "姫子",
|
||||||
"Hook": "フック",
|
"Hook": "フック",
|
||||||
"Huohuo": "フォフォ",
|
"Huohuo": "フォフォ",
|
||||||
|
"Jade": "ジェイド",
|
||||||
"JingYuan": "景元",
|
"JingYuan": "景元",
|
||||||
"Jingliu": "鏡流",
|
"Jingliu": "鏡流",
|
||||||
"Kafka": "カフカ",
|
"Kafka": "カフカ",
|
||||||
"Luka": "ルカ",
|
"Luka": "ルカ",
|
||||||
"Luocha": "羅刹",
|
"Luocha": "羅刹",
|
||||||
"Lynx": "リンクス",
|
"Lynx": "リンクス",
|
||||||
"March7th": "三月なのか",
|
"March7thPreservation": "三月なのか・存護",
|
||||||
|
"March7thTheHunt": "三月なのか・巡狩",
|
||||||
"Misha": "ミーシャ",
|
"Misha": "ミーシャ",
|
||||||
"Natasha": "ナターシャ",
|
"Natasha": "ナターシャ",
|
||||||
"Pela": "ペラ",
|
"Pela": "ペラ",
|
||||||
@ -430,7 +432,8 @@
|
|||||||
"Welt": "ヴェルト",
|
"Welt": "ヴェルト",
|
||||||
"Xueyi": "雪衣",
|
"Xueyi": "雪衣",
|
||||||
"Yanqing": "彦卿",
|
"Yanqing": "彦卿",
|
||||||
"Yukong": "御空"
|
"Yukong": "御空",
|
||||||
|
"Yunli": "雲璃"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DungeonStorage": {
|
"DungeonStorage": {
|
||||||
@ -555,11 +558,11 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_IPC_Work_Permit": {
|
"Item_IPC_Work_Permit": {
|
||||||
"name": "キャラクター昇格素材:物理(ブートヒル / ロビン)",
|
"name": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Raging_Heart": {
|
"Item_Raging_Heart": {
|
||||||
"name": "キャラクター昇格素材:炎(ホタル / ギャラガー)",
|
"name": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Dream_Fridge": {
|
"Item_Dream_Fridge": {
|
||||||
|
@ -263,10 +263,10 @@
|
|||||||
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行迹材料:虚无(丹鼎司)",
|
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行迹材料:虚无(丹鼎司)",
|
||||||
"Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)",
|
"Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)",
|
||||||
"Stagnant_Shadow_Perdition": "角色晋阶材料:物理(寒鸦 / 银枝)",
|
"Stagnant_Shadow_Perdition": "角色晋阶材料:物理(寒鸦 / 银枝)",
|
||||||
"Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟)",
|
"Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)",
|
||||||
"Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)",
|
"Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)",
|
||||||
"Stagnant_Shadow_Scorch": "角色晋阶材料:火(桂乃芬 / 托帕&账账)",
|
"Stagnant_Shadow_Scorch": "角色晋阶材料:火(桂乃芬 / 托帕&账账)",
|
||||||
"Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫)",
|
"Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)",
|
||||||
"Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)",
|
"Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)",
|
||||||
"Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿 / 镜流 / 阮•梅)",
|
"Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿 / 镜流 / 阮•梅)",
|
||||||
"Stagnant_Shadow_Nectar": "角色晋阶材料:冰(米沙)",
|
"Stagnant_Shadow_Nectar": "角色晋阶材料:冰(米沙)",
|
||||||
@ -403,13 +403,15 @@
|
|||||||
"Himeko": "姬子",
|
"Himeko": "姬子",
|
||||||
"Hook": "虎克",
|
"Hook": "虎克",
|
||||||
"Huohuo": "藿藿",
|
"Huohuo": "藿藿",
|
||||||
|
"Jade": "翡翠",
|
||||||
"JingYuan": "景元",
|
"JingYuan": "景元",
|
||||||
"Jingliu": "镜流",
|
"Jingliu": "镜流",
|
||||||
"Kafka": "卡芙卡",
|
"Kafka": "卡芙卡",
|
||||||
"Luka": "卢卡",
|
"Luka": "卢卡",
|
||||||
"Luocha": "罗刹",
|
"Luocha": "罗刹",
|
||||||
"Lynx": "玲可",
|
"Lynx": "玲可",
|
||||||
"March7th": "三月七",
|
"March7thPreservation": "三月七•存护",
|
||||||
|
"March7thTheHunt": "三月七•巡猎",
|
||||||
"Misha": "米沙",
|
"Misha": "米沙",
|
||||||
"Natasha": "娜塔莎",
|
"Natasha": "娜塔莎",
|
||||||
"Pela": "佩拉",
|
"Pela": "佩拉",
|
||||||
@ -430,7 +432,8 @@
|
|||||||
"Welt": "瓦尔特",
|
"Welt": "瓦尔特",
|
||||||
"Xueyi": "雪衣",
|
"Xueyi": "雪衣",
|
||||||
"Yanqing": "彦卿",
|
"Yanqing": "彦卿",
|
||||||
"Yukong": "驭空"
|
"Yukong": "驭空",
|
||||||
|
"Yunli": "云璃"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DungeonStorage": {
|
"DungeonStorage": {
|
||||||
@ -555,11 +558,11 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_IPC_Work_Permit": {
|
"Item_IPC_Work_Permit": {
|
||||||
"name": "角色晋阶材料:物理(波提欧 / 知更鸟)",
|
"name": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Raging_Heart": {
|
"Item_Raging_Heart": {
|
||||||
"name": "角色晋阶材料:火(流萤 / 加拉赫)",
|
"name": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Dream_Fridge": {
|
"Item_Dream_Fridge": {
|
||||||
|
@ -263,10 +263,10 @@
|
|||||||
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行跡材料:虛無(丹鼎司)",
|
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行跡材料:虛無(丹鼎司)",
|
||||||
"Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)",
|
"Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)",
|
||||||
"Stagnant_Shadow_Perdition": "角色晉階材料:物理(寒鴉 / 銀枝)",
|
"Stagnant_Shadow_Perdition": "角色晉階材料:物理(寒鴉 / 銀枝)",
|
||||||
"Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥)",
|
"Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)",
|
||||||
"Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)",
|
"Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)",
|
||||||
"Stagnant_Shadow_Scorch": "角色晉階材料:火(桂乃芬 / 托帕&帳帳)",
|
"Stagnant_Shadow_Scorch": "角色晉階材料:火(桂乃芬 / 托帕&帳帳)",
|
||||||
"Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫)",
|
"Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘)",
|
||||||
"Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)",
|
"Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)",
|
||||||
"Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿 / 鏡流 / 阮•梅)",
|
"Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿 / 鏡流 / 阮•梅)",
|
||||||
"Stagnant_Shadow_Nectar": "角色晉階材料:冰(米沙)",
|
"Stagnant_Shadow_Nectar": "角色晉階材料:冰(米沙)",
|
||||||
@ -403,13 +403,15 @@
|
|||||||
"Himeko": "姬子",
|
"Himeko": "姬子",
|
||||||
"Hook": "虎克",
|
"Hook": "虎克",
|
||||||
"Huohuo": "藿藿",
|
"Huohuo": "藿藿",
|
||||||
|
"Jade": "翡翠",
|
||||||
"JingYuan": "景元",
|
"JingYuan": "景元",
|
||||||
"Jingliu": "鏡流",
|
"Jingliu": "鏡流",
|
||||||
"Kafka": "卡芙卡",
|
"Kafka": "卡芙卡",
|
||||||
"Luka": "盧卡",
|
"Luka": "盧卡",
|
||||||
"Luocha": "羅剎",
|
"Luocha": "羅剎",
|
||||||
"Lynx": "玲可",
|
"Lynx": "玲可",
|
||||||
"March7th": "三月七",
|
"March7thPreservation": "三月七•存護",
|
||||||
|
"March7thTheHunt": "三月七•巡獵",
|
||||||
"Misha": "米沙",
|
"Misha": "米沙",
|
||||||
"Natasha": "娜塔莎",
|
"Natasha": "娜塔莎",
|
||||||
"Pela": "佩拉",
|
"Pela": "佩拉",
|
||||||
@ -430,7 +432,8 @@
|
|||||||
"Welt": "瓦爾特",
|
"Welt": "瓦爾特",
|
||||||
"Xueyi": "雪衣",
|
"Xueyi": "雪衣",
|
||||||
"Yanqing": "彥卿",
|
"Yanqing": "彥卿",
|
||||||
"Yukong": "馭空"
|
"Yukong": "馭空",
|
||||||
|
"Yunli": "雲璃"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DungeonStorage": {
|
"DungeonStorage": {
|
||||||
@ -555,11 +558,11 @@
|
|||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_IPC_Work_Permit": {
|
"Item_IPC_Work_Permit": {
|
||||||
"name": "角色晉階材料:物理(波提歐 / 知更鳥)",
|
"name": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Raging_Heart": {
|
"Item_Raging_Heart": {
|
||||||
"name": "角色晉階材料:火(流螢 / 加拉赫)",
|
"name": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘)",
|
||||||
"help": ""
|
"help": ""
|
||||||
},
|
},
|
||||||
"Item_Dream_Fridge": {
|
"Item_Dream_Fridge": {
|
||||||
|
@ -23,7 +23,7 @@ DICT_SORTED_RANGES = {
|
|||||||
Boothill,
|
Boothill,
|
||||||
Yukong,
|
Yukong,
|
||||||
TopazNumby,
|
TopazNumby,
|
||||||
March7th,
|
March7thPreservation,
|
||||||
Bronya,
|
Bronya,
|
||||||
Asta,
|
Asta,
|
||||||
Pela,
|
Pela,
|
||||||
|
@ -228,8 +228,17 @@ Jade = CharacterList(
|
|||||||
jp='ジェイド',
|
jp='ジェイド',
|
||||||
es='Jade',
|
es='Jade',
|
||||||
)
|
)
|
||||||
JingYuan = CharacterList(
|
Jiaoqiu = CharacterList(
|
||||||
id=26,
|
id=26,
|
||||||
|
name='Jiaoqiu',
|
||||||
|
cn='椒丘',
|
||||||
|
cht='椒丘',
|
||||||
|
en='Jiaoqiu',
|
||||||
|
jp='椒丘',
|
||||||
|
es='Jiaoqiu',
|
||||||
|
)
|
||||||
|
JingYuan = CharacterList(
|
||||||
|
id=27,
|
||||||
name='JingYuan',
|
name='JingYuan',
|
||||||
cn='景元',
|
cn='景元',
|
||||||
cht='景元',
|
cht='景元',
|
||||||
@ -238,7 +247,7 @@ JingYuan = CharacterList(
|
|||||||
es='Jing Yuan',
|
es='Jing Yuan',
|
||||||
)
|
)
|
||||||
Jingliu = CharacterList(
|
Jingliu = CharacterList(
|
||||||
id=27,
|
id=28,
|
||||||
name='Jingliu',
|
name='Jingliu',
|
||||||
cn='镜流',
|
cn='镜流',
|
||||||
cht='鏡流',
|
cht='鏡流',
|
||||||
@ -247,7 +256,7 @@ Jingliu = CharacterList(
|
|||||||
es='Jingliu',
|
es='Jingliu',
|
||||||
)
|
)
|
||||||
Kafka = CharacterList(
|
Kafka = CharacterList(
|
||||||
id=28,
|
id=29,
|
||||||
name='Kafka',
|
name='Kafka',
|
||||||
cn='卡芙卡',
|
cn='卡芙卡',
|
||||||
cht='卡芙卡',
|
cht='卡芙卡',
|
||||||
@ -256,7 +265,7 @@ Kafka = CharacterList(
|
|||||||
es='Kafka',
|
es='Kafka',
|
||||||
)
|
)
|
||||||
Luka = CharacterList(
|
Luka = CharacterList(
|
||||||
id=29,
|
id=30,
|
||||||
name='Luka',
|
name='Luka',
|
||||||
cn='卢卡',
|
cn='卢卡',
|
||||||
cht='盧卡',
|
cht='盧卡',
|
||||||
@ -265,7 +274,7 @@ Luka = CharacterList(
|
|||||||
es='Luka',
|
es='Luka',
|
||||||
)
|
)
|
||||||
Luocha = CharacterList(
|
Luocha = CharacterList(
|
||||||
id=30,
|
id=31,
|
||||||
name='Luocha',
|
name='Luocha',
|
||||||
cn='罗刹',
|
cn='罗刹',
|
||||||
cht='羅剎',
|
cht='羅剎',
|
||||||
@ -274,7 +283,7 @@ Luocha = CharacterList(
|
|||||||
es='Luocha',
|
es='Luocha',
|
||||||
)
|
)
|
||||||
Lynx = CharacterList(
|
Lynx = CharacterList(
|
||||||
id=31,
|
id=32,
|
||||||
name='Lynx',
|
name='Lynx',
|
||||||
cn='玲可',
|
cn='玲可',
|
||||||
cht='玲可',
|
cht='玲可',
|
||||||
@ -282,17 +291,26 @@ Lynx = CharacterList(
|
|||||||
jp='リンクス',
|
jp='リンクス',
|
||||||
es='Lynx',
|
es='Lynx',
|
||||||
)
|
)
|
||||||
March7th = CharacterList(
|
March7thPreservation = CharacterList(
|
||||||
id=32,
|
id=33,
|
||||||
name='March7th',
|
name='March7thPreservation',
|
||||||
cn='三月七',
|
cn='三月七•存护',
|
||||||
cht='三月七',
|
cht='三月七•存護',
|
||||||
en='March 7th',
|
en='March 7th: Preservation',
|
||||||
jp='三月なのか',
|
jp='三月なのか・存護',
|
||||||
es='Siete de Marzo',
|
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(
|
Misha = CharacterList(
|
||||||
id=33,
|
id=35,
|
||||||
name='Misha',
|
name='Misha',
|
||||||
cn='米沙',
|
cn='米沙',
|
||||||
cht='米沙',
|
cht='米沙',
|
||||||
@ -301,7 +319,7 @@ Misha = CharacterList(
|
|||||||
es='Misha',
|
es='Misha',
|
||||||
)
|
)
|
||||||
Natasha = CharacterList(
|
Natasha = CharacterList(
|
||||||
id=34,
|
id=36,
|
||||||
name='Natasha',
|
name='Natasha',
|
||||||
cn='娜塔莎',
|
cn='娜塔莎',
|
||||||
cht='娜塔莎',
|
cht='娜塔莎',
|
||||||
@ -310,7 +328,7 @@ Natasha = CharacterList(
|
|||||||
es='Natasha',
|
es='Natasha',
|
||||||
)
|
)
|
||||||
Pela = CharacterList(
|
Pela = CharacterList(
|
||||||
id=35,
|
id=37,
|
||||||
name='Pela',
|
name='Pela',
|
||||||
cn='佩拉',
|
cn='佩拉',
|
||||||
cht='佩拉',
|
cht='佩拉',
|
||||||
@ -319,7 +337,7 @@ Pela = CharacterList(
|
|||||||
es='Pela',
|
es='Pela',
|
||||||
)
|
)
|
||||||
Qingque = CharacterList(
|
Qingque = CharacterList(
|
||||||
id=36,
|
id=38,
|
||||||
name='Qingque',
|
name='Qingque',
|
||||||
cn='青雀',
|
cn='青雀',
|
||||||
cht='青雀',
|
cht='青雀',
|
||||||
@ -328,7 +346,7 @@ Qingque = CharacterList(
|
|||||||
es='Qingque',
|
es='Qingque',
|
||||||
)
|
)
|
||||||
Robin = CharacterList(
|
Robin = CharacterList(
|
||||||
id=37,
|
id=39,
|
||||||
name='Robin',
|
name='Robin',
|
||||||
cn='知更鸟',
|
cn='知更鸟',
|
||||||
cht='知更鳥',
|
cht='知更鳥',
|
||||||
@ -337,7 +355,7 @@ Robin = CharacterList(
|
|||||||
es='Robin',
|
es='Robin',
|
||||||
)
|
)
|
||||||
RuanMei = CharacterList(
|
RuanMei = CharacterList(
|
||||||
id=38,
|
id=40,
|
||||||
name='RuanMei',
|
name='RuanMei',
|
||||||
cn='阮•梅',
|
cn='阮•梅',
|
||||||
cht='阮•梅',
|
cht='阮•梅',
|
||||||
@ -346,7 +364,7 @@ RuanMei = CharacterList(
|
|||||||
es='Ruan Mei',
|
es='Ruan Mei',
|
||||||
)
|
)
|
||||||
Sampo = CharacterList(
|
Sampo = CharacterList(
|
||||||
id=39,
|
id=41,
|
||||||
name='Sampo',
|
name='Sampo',
|
||||||
cn='桑博',
|
cn='桑博',
|
||||||
cht='桑博',
|
cht='桑博',
|
||||||
@ -355,7 +373,7 @@ Sampo = CharacterList(
|
|||||||
es='Sampo',
|
es='Sampo',
|
||||||
)
|
)
|
||||||
Seele = CharacterList(
|
Seele = CharacterList(
|
||||||
id=40,
|
id=42,
|
||||||
name='Seele',
|
name='Seele',
|
||||||
cn='希儿',
|
cn='希儿',
|
||||||
cht='希兒',
|
cht='希兒',
|
||||||
@ -364,7 +382,7 @@ Seele = CharacterList(
|
|||||||
es='Seele',
|
es='Seele',
|
||||||
)
|
)
|
||||||
Serval = CharacterList(
|
Serval = CharacterList(
|
||||||
id=41,
|
id=43,
|
||||||
name='Serval',
|
name='Serval',
|
||||||
cn='希露瓦',
|
cn='希露瓦',
|
||||||
cht='希露瓦',
|
cht='希露瓦',
|
||||||
@ -373,7 +391,7 @@ Serval = CharacterList(
|
|||||||
es='Serval',
|
es='Serval',
|
||||||
)
|
)
|
||||||
SilverWolf = CharacterList(
|
SilverWolf = CharacterList(
|
||||||
id=42,
|
id=44,
|
||||||
name='SilverWolf',
|
name='SilverWolf',
|
||||||
cn='银狼',
|
cn='银狼',
|
||||||
cht='銀狼',
|
cht='銀狼',
|
||||||
@ -382,7 +400,7 @@ SilverWolf = CharacterList(
|
|||||||
es='Silver Wolf',
|
es='Silver Wolf',
|
||||||
)
|
)
|
||||||
Sparkle = CharacterList(
|
Sparkle = CharacterList(
|
||||||
id=43,
|
id=45,
|
||||||
name='Sparkle',
|
name='Sparkle',
|
||||||
cn='花火',
|
cn='花火',
|
||||||
cht='花火',
|
cht='花火',
|
||||||
@ -391,7 +409,7 @@ Sparkle = CharacterList(
|
|||||||
es='Sparkle',
|
es='Sparkle',
|
||||||
)
|
)
|
||||||
Sushang = CharacterList(
|
Sushang = CharacterList(
|
||||||
id=44,
|
id=46,
|
||||||
name='Sushang',
|
name='Sushang',
|
||||||
cn='素裳',
|
cn='素裳',
|
||||||
cht='素裳',
|
cht='素裳',
|
||||||
@ -400,7 +418,7 @@ Sushang = CharacterList(
|
|||||||
es='Sushang',
|
es='Sushang',
|
||||||
)
|
)
|
||||||
Tingyun = CharacterList(
|
Tingyun = CharacterList(
|
||||||
id=45,
|
id=47,
|
||||||
name='Tingyun',
|
name='Tingyun',
|
||||||
cn='停云',
|
cn='停云',
|
||||||
cht='停雲',
|
cht='停雲',
|
||||||
@ -409,7 +427,7 @@ Tingyun = CharacterList(
|
|||||||
es='Tingyun',
|
es='Tingyun',
|
||||||
)
|
)
|
||||||
TopazNumby = CharacterList(
|
TopazNumby = CharacterList(
|
||||||
id=46,
|
id=48,
|
||||||
name='TopazNumby',
|
name='TopazNumby',
|
||||||
cn='托帕&账账',
|
cn='托帕&账账',
|
||||||
cht='托帕&帳帳',
|
cht='托帕&帳帳',
|
||||||
@ -418,7 +436,7 @@ TopazNumby = CharacterList(
|
|||||||
es='Topaz y Conti',
|
es='Topaz y Conti',
|
||||||
)
|
)
|
||||||
TrailblazerDestruction = CharacterList(
|
TrailblazerDestruction = CharacterList(
|
||||||
id=47,
|
id=49,
|
||||||
name='TrailblazerDestruction',
|
name='TrailblazerDestruction',
|
||||||
cn='Trailblazer•毁灭',
|
cn='Trailblazer•毁灭',
|
||||||
cht='Trailblazer•毀滅',
|
cht='Trailblazer•毀滅',
|
||||||
@ -427,7 +445,7 @@ TrailblazerDestruction = CharacterList(
|
|||||||
es='Trailblazer: Destrucción',
|
es='Trailblazer: Destrucción',
|
||||||
)
|
)
|
||||||
TrailblazerHarmony = CharacterList(
|
TrailblazerHarmony = CharacterList(
|
||||||
id=48,
|
id=50,
|
||||||
name='TrailblazerHarmony',
|
name='TrailblazerHarmony',
|
||||||
cn='Trailblazer•同谐',
|
cn='Trailblazer•同谐',
|
||||||
cht='Trailblazer•同諧',
|
cht='Trailblazer•同諧',
|
||||||
@ -436,7 +454,7 @@ TrailblazerHarmony = CharacterList(
|
|||||||
es='Trailblazer: Armonía',
|
es='Trailblazer: Armonía',
|
||||||
)
|
)
|
||||||
TrailblazerPreservation = CharacterList(
|
TrailblazerPreservation = CharacterList(
|
||||||
id=49,
|
id=51,
|
||||||
name='TrailblazerPreservation',
|
name='TrailblazerPreservation',
|
||||||
cn='Trailblazer•存护',
|
cn='Trailblazer•存护',
|
||||||
cht='Trailblazer•存護',
|
cht='Trailblazer•存護',
|
||||||
@ -445,7 +463,7 @@ TrailblazerPreservation = CharacterList(
|
|||||||
es='Trailblazer: Conservación',
|
es='Trailblazer: Conservación',
|
||||||
)
|
)
|
||||||
Welt = CharacterList(
|
Welt = CharacterList(
|
||||||
id=50,
|
id=52,
|
||||||
name='Welt',
|
name='Welt',
|
||||||
cn='瓦尔特',
|
cn='瓦尔特',
|
||||||
cht='瓦爾特',
|
cht='瓦爾特',
|
||||||
@ -454,7 +472,7 @@ Welt = CharacterList(
|
|||||||
es='Welt',
|
es='Welt',
|
||||||
)
|
)
|
||||||
Xueyi = CharacterList(
|
Xueyi = CharacterList(
|
||||||
id=51,
|
id=53,
|
||||||
name='Xueyi',
|
name='Xueyi',
|
||||||
cn='雪衣',
|
cn='雪衣',
|
||||||
cht='雪衣',
|
cht='雪衣',
|
||||||
@ -463,7 +481,7 @@ Xueyi = CharacterList(
|
|||||||
es='Xueyi',
|
es='Xueyi',
|
||||||
)
|
)
|
||||||
Yanqing = CharacterList(
|
Yanqing = CharacterList(
|
||||||
id=52,
|
id=54,
|
||||||
name='Yanqing',
|
name='Yanqing',
|
||||||
cn='彦卿',
|
cn='彦卿',
|
||||||
cht='彥卿',
|
cht='彥卿',
|
||||||
@ -472,7 +490,7 @@ Yanqing = CharacterList(
|
|||||||
es='Yanqing',
|
es='Yanqing',
|
||||||
)
|
)
|
||||||
Yukong = CharacterList(
|
Yukong = CharacterList(
|
||||||
id=53,
|
id=55,
|
||||||
name='Yukong',
|
name='Yukong',
|
||||||
cn='驭空',
|
cn='驭空',
|
||||||
cht='馭空',
|
cht='馭空',
|
||||||
@ -480,3 +498,12 @@ Yukong = CharacterList(
|
|||||||
jp='御空',
|
jp='御空',
|
||||||
es='Yukong',
|
es='Yukong',
|
||||||
)
|
)
|
||||||
|
Yunli = CharacterList(
|
||||||
|
id=56,
|
||||||
|
name='Yunli',
|
||||||
|
cn='云璃',
|
||||||
|
cht='雲璃',
|
||||||
|
en='Yunli',
|
||||||
|
jp='雲璃',
|
||||||
|
es='Yunli',
|
||||||
|
)
|
||||||
|
@ -13,7 +13,6 @@ CHARACTER_HEIGHT = {
|
|||||||
'Tingyun': 'Maid',
|
'Tingyun': 'Maid',
|
||||||
'Sushang': 'Maid',
|
'Sushang': 'Maid',
|
||||||
'Seele': 'Maid',
|
'Seele': 'Maid',
|
||||||
'March7th': 'Maid',
|
|
||||||
'Jingliu': 'Maid',
|
'Jingliu': 'Maid',
|
||||||
'Bronya': 'Maid',
|
'Bronya': 'Maid',
|
||||||
'Asta': 'Maid',
|
'Asta': 'Maid',
|
||||||
|
@ -18,7 +18,7 @@ COMBAT_SUPPORT_LIST = ButtonWrapper(
|
|||||||
share=Button(
|
share=Button(
|
||||||
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST.png',
|
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST.png',
|
||||||
area=(39, 645, 65, 669),
|
area=(39, 645, 65, 669),
|
||||||
search=(19, 625, 85, 689),
|
search=(32, 643, 72, 683),
|
||||||
color=(204, 206, 206),
|
color=(204, 206, 206),
|
||||||
button=(39, 645, 65, 669),
|
button=(39, 645, 65, 669),
|
||||||
),
|
),
|
||||||
@ -27,10 +27,10 @@ COMBAT_SUPPORT_LIST_GRID = ButtonWrapper(
|
|||||||
name='COMBAT_SUPPORT_LIST_GRID',
|
name='COMBAT_SUPPORT_LIST_GRID',
|
||||||
share=Button(
|
share=Button(
|
||||||
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST_GRID.png',
|
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST_GRID.png',
|
||||||
area=(36, 148, 128, 629),
|
area=(26, 109, 131, 634),
|
||||||
search=(16, 128, 148, 649),
|
search=(6, 89, 151, 654),
|
||||||
color=(135, 124, 133),
|
color=(101, 87, 99),
|
||||||
button=(36, 148, 128, 629),
|
button=(26, 109, 131, 634),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
COMBAT_SUPPORT_LIST_SCROLL = ButtonWrapper(
|
COMBAT_SUPPORT_LIST_SCROLL = ButtonWrapper(
|
||||||
|
@ -17,10 +17,10 @@ DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE = ButtonWrapper(
|
|||||||
name='DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE',
|
name='DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE',
|
||||||
share=Button(
|
share=Button(
|
||||||
file='./assets/share/dungeon/ui_rogue/DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE.png',
|
file='./assets/share/dungeon/ui_rogue/DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE.png',
|
||||||
area=(437, 316, 1169, 378),
|
area=(592, 174, 636, 331),
|
||||||
search=(417, 296, 1189, 398),
|
search=(572, 154, 656, 351),
|
||||||
color=(197, 105, 95),
|
color=(140, 82, 83),
|
||||||
button=(437, 316, 1169, 378),
|
button=(592, 174, 636, 331),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
LAST_TELEPORT = ButtonWrapper(
|
LAST_TELEPORT = ButtonWrapper(
|
||||||
@ -47,10 +47,10 @@ SURVIVAL_INDEX_OE_LOADED = ButtonWrapper(
|
|||||||
name='SURVIVAL_INDEX_OE_LOADED',
|
name='SURVIVAL_INDEX_OE_LOADED',
|
||||||
share=Button(
|
share=Button(
|
||||||
file='./assets/share/dungeon/ui_rogue/SURVIVAL_INDEX_OE_LOADED.png',
|
file='./assets/share/dungeon/ui_rogue/SURVIVAL_INDEX_OE_LOADED.png',
|
||||||
area=(473, 207, 498, 232),
|
area=(455, 208, 485, 338),
|
||||||
search=(468, 193, 503, 283),
|
search=(460, 238, 480, 268),
|
||||||
color=(185, 135, 74),
|
color=(130, 116, 91),
|
||||||
button=(473, 207, 498, 232),
|
button=(455, 208, 485, 338),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
SURVIVAL_INDEX_SU_LOADED = ButtonWrapper(
|
SURVIVAL_INDEX_SU_LOADED = ButtonWrapper(
|
||||||
|
@ -164,7 +164,7 @@ Calyx_Crimson_The_Hunt_Penacony_SoulGladScorchsandAuditionVenue = DungeonList(
|
|||||||
cht='巡獵之蕾•擬造花萼(赤)',
|
cht='巡獵之蕾•擬造花萼(赤)',
|
||||||
en='Calyx (Crimson): Bud of The Hunt',
|
en='Calyx (Crimson): Bud of The Hunt',
|
||||||
jp='疑似花萼(赤)・巡狩の蕾',
|
jp='疑似花萼(赤)・巡狩の蕾',
|
||||||
es='Cáliz (carmesí): Flor de la Cacería',
|
es='Flor de la Cacería',
|
||||||
dungeon_id=1022,
|
dungeon_id=1022,
|
||||||
plane_id=2033101,
|
plane_id=2033101,
|
||||||
)
|
)
|
||||||
@ -208,7 +208,7 @@ Calyx_Crimson_Erudition_Penacony_PenaconyGrandTheater = DungeonList(
|
|||||||
cht='智識之蕾•擬造花萼(赤)',
|
cht='智識之蕾•擬造花萼(赤)',
|
||||||
en='Calyx (Crimson): Bud of Erudition',
|
en='Calyx (Crimson): Bud of Erudition',
|
||||||
jp='疑似花萼(赤)・知恵の蕾',
|
jp='疑似花萼(赤)・知恵の蕾',
|
||||||
es='Cáliz (carmesí): Flor de la Erudición',
|
es='Flor de la Erudición',
|
||||||
dungeon_id=1023,
|
dungeon_id=1023,
|
||||||
plane_id=2033201,
|
plane_id=2033201,
|
||||||
)
|
)
|
||||||
@ -450,7 +450,7 @@ Stagnant_Shadow_Duty = DungeonList(
|
|||||||
cht='職司之形•凝滯虛影',
|
cht='職司之形•凝滯虛影',
|
||||||
en='Stagnant Shadow: Shape of Duty',
|
en='Stagnant Shadow: Shape of Duty',
|
||||||
jp='凝結虚影・職掌の形',
|
jp='凝結虚影・職掌の形',
|
||||||
es='Sombra paralizada: Forma del deber',
|
es='Forma del deber',
|
||||||
dungeon_id=1118,
|
dungeon_id=1118,
|
||||||
plane_id=2032101,
|
plane_id=2032101,
|
||||||
)
|
)
|
||||||
@ -560,7 +560,7 @@ Cavern_of_Corrosion_Path_of_Cavalier = DungeonList(
|
|||||||
cht='勇騎之徑•侵蝕隧洞',
|
cht='勇騎之徑•侵蝕隧洞',
|
||||||
en='Cavern of Corrosion: Path of Cavalier',
|
en='Cavern of Corrosion: Path of Cavalier',
|
||||||
jp='侵蝕トンネル・勇騎の路',
|
jp='侵蝕トンネル・勇騎の路',
|
||||||
es='Caverna de la corrosión: Senda del caballero',
|
es='Senda del caballero',
|
||||||
dungeon_id=1210,
|
dungeon_id=1210,
|
||||||
plane_id=2033201,
|
plane_id=2033201,
|
||||||
)
|
)
|
||||||
@ -615,7 +615,7 @@ Echo_of_War_Salutations_of_Ashen_Dreams = DungeonList(
|
|||||||
cht='塵夢的讚禮•歷戰餘響',
|
cht='塵夢的讚禮•歷戰餘響',
|
||||||
en='Echo of War: Salutations of Ashen Dreams',
|
en='Echo of War: Salutations of Ashen Dreams',
|
||||||
jp='歴戦余韻・現世の夢の礼賛',
|
jp='歴戦余韻・現世の夢の礼賛',
|
||||||
es='Ecos de la guerra: Tributo del sueño ceniciento',
|
es='Tributo del sueño ceniciento',
|
||||||
dungeon_id=1305,
|
dungeon_id=1305,
|
||||||
plane_id=2033201,
|
plane_id=2033201,
|
||||||
)
|
)
|
||||||
@ -714,7 +714,7 @@ Divergent_Universe_Eternal_Comedy = DungeonList(
|
|||||||
cht='永恆笑劇•差分宇宙',
|
cht='永恆笑劇•差分宇宙',
|
||||||
en='Divergent Universe: Eternal Comedy',
|
en='Divergent Universe: Eternal Comedy',
|
||||||
jp='階差宇宙・永遠の喜劇',
|
jp='階差宇宙・永遠の喜劇',
|
||||||
es='Universo Diferenciado: Comedia eterna',
|
es='Comedia eterna',
|
||||||
dungeon_id=300,
|
dungeon_id=300,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -725,7 +725,7 @@ Divergent_Universe_To_Sweet_Dreams = DungeonList(
|
|||||||
cht='伴你入眠•差分宇宙',
|
cht='伴你入眠•差分宇宙',
|
||||||
en='Divergent Universe: To Sweet Dreams',
|
en='Divergent Universe: To Sweet Dreams',
|
||||||
jp='階差宇宙・寄り添い眠る',
|
jp='階差宇宙・寄り添い眠る',
|
||||||
es='Hasta los dulces sueños: Universo Diferenciado',
|
es='Hasta los dulces sueños',
|
||||||
dungeon_id=290,
|
dungeon_id=290,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -736,7 +736,7 @@ Divergent_Universe_Pouring_Blades = DungeonList(
|
|||||||
cht='天劍如雨•差分宇宙',
|
cht='天劍如雨•差分宇宙',
|
||||||
en='Divergent Universe: Pouring Blades',
|
en='Divergent Universe: Pouring Blades',
|
||||||
jp='階差宇宙・剣の雨',
|
jp='階差宇宙・剣の雨',
|
||||||
es='Lluvia de espadas: Universo Diferenciado',
|
es='Lluvia de espadas',
|
||||||
dungeon_id=280,
|
dungeon_id=280,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -747,7 +747,7 @@ Divergent_Universe_Fruit_of_Evil = DungeonList(
|
|||||||
cht='孽果盤生•差分宇宙',
|
cht='孽果盤生•差分宇宙',
|
||||||
en='Divergent Universe: Fruit of Evil',
|
en='Divergent Universe: Fruit of Evil',
|
||||||
jp='階差宇宙・渦巻く罪',
|
jp='階差宇宙・渦巻く罪',
|
||||||
es='Fruta del desastre: Universo Diferenciado',
|
es='Fruta del desastre',
|
||||||
dungeon_id=270,
|
dungeon_id=270,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -758,7 +758,7 @@ Divergent_Universe_Permafrost = DungeonList(
|
|||||||
cht='百年凍土•差分宇宙',
|
cht='百年凍土•差分宇宙',
|
||||||
en='Divergent Universe: Permafrost',
|
en='Divergent Universe: Permafrost',
|
||||||
jp='階差宇宙・永久凍土',
|
jp='階差宇宙・永久凍土',
|
||||||
es='Permafrost: Universo Diferenciado',
|
es='Permafrost',
|
||||||
dungeon_id=260,
|
dungeon_id=260,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -769,7 +769,7 @@ Divergent_Universe_Gentle_Words = DungeonList(
|
|||||||
cht='溫柔話語•差分宇宙',
|
cht='溫柔話語•差分宇宙',
|
||||||
en='Divergent Universe: Gentle Words',
|
en='Divergent Universe: Gentle Words',
|
||||||
jp='階差宇宙・優しい言葉',
|
jp='階差宇宙・優しい言葉',
|
||||||
es='Palabras amables: Universo Diferenciado',
|
es='Palabras amables',
|
||||||
dungeon_id=250,
|
dungeon_id=250,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -780,7 +780,7 @@ Divergent_Universe_Smelted_Heart = DungeonList(
|
|||||||
cht='浴火鋼心•差分宇宙',
|
cht='浴火鋼心•差分宇宙',
|
||||||
en='Divergent Universe: Smelted Heart',
|
en='Divergent Universe: Smelted Heart',
|
||||||
jp='階差宇宙・鋼の意志',
|
jp='階差宇宙・鋼の意志',
|
||||||
es='Corazón de fundición: Universo Diferenciado',
|
es='Corazón de fundición',
|
||||||
dungeon_id=240,
|
dungeon_id=240,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
@ -791,7 +791,7 @@ Divergent_Universe_Untoppled_Walls = DungeonList(
|
|||||||
cht='堅城不倒•差分宇宙',
|
cht='堅城不倒•差分宇宙',
|
||||||
en='Divergent Universe: Untoppled Walls',
|
en='Divergent Universe: Untoppled Walls',
|
||||||
jp='階差宇宙・不動の砦',
|
jp='階差宇宙・不動の砦',
|
||||||
es='Muros inquebrantables: Universo Diferenciado',
|
es='Muros inquebrantables',
|
||||||
dungeon_id=230,
|
dungeon_id=230,
|
||||||
plane_id=0,
|
plane_id=0,
|
||||||
)
|
)
|
||||||
|
@ -150,18 +150,18 @@ Stagnant_Shadow_Roast = DungeonDetailed(
|
|||||||
Stagnant_Shadow_Ire = DungeonDetailed(
|
Stagnant_Shadow_Ire = DungeonDetailed(
|
||||||
id=17,
|
id=17,
|
||||||
name='Stagnant_Shadow_Ire',
|
name='Stagnant_Shadow_Ire',
|
||||||
cn='角色晋阶材料:火(流萤 / 加拉赫)',
|
cn='角色晋阶材料:火(流萤 / 加拉赫 / 椒丘)',
|
||||||
cht='角色晉階材料:火(流螢 / 加拉赫)',
|
cht='角色晉階材料:火(流螢 / 加拉赫 / 椒丘)',
|
||||||
en='Ascension: Fire (Firefly / Gallagher)',
|
en='Ascension: Fire (Firefly / Gallagher / Jiaoqiu)',
|
||||||
jp='キャラクター昇格素材:炎(ホタル / ギャラガー)',
|
jp='キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘)',
|
||||||
es='Ascension: Fuego (Luciérnaga / Gallagher)',
|
es='Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)',
|
||||||
)
|
)
|
||||||
Stagnant_Shadow_Duty = DungeonDetailed(
|
Stagnant_Shadow_Duty = DungeonDetailed(
|
||||||
id=18,
|
id=18,
|
||||||
name='Stagnant_Shadow_Duty',
|
name='Stagnant_Shadow_Duty',
|
||||||
cn='角色晋阶材料:物理(波提欧 / 知更鸟)',
|
cn='角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃)',
|
||||||
cht='角色晉階材料:物理(波提歐 / 知更鳥)',
|
cht='角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃)',
|
||||||
en='Ascension: Physical (Boothill / Robin)',
|
en='Ascension: Physical (Boothill / Robin / Yunli)',
|
||||||
jp='キャラクター昇格素材:物理(ブートヒル / ロビン)',
|
jp='キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃)',
|
||||||
es='Ascension: Físico (Boothill / Robin)',
|
es='Ascension: Físico (Boothill / Robin / Yunli)',
|
||||||
)
|
)
|
||||||
|
@ -72,7 +72,7 @@ class XPath:
|
|||||||
悬浮窗及侧边栏元素
|
悬浮窗及侧边栏元素
|
||||||
"""
|
"""
|
||||||
# 悬浮窗
|
# 悬浮窗
|
||||||
FLOAT_WINDOW = '//*[@package="com.miHoYo.cloudgames.hkrpg" and @class="android.widget.ImageView"]'
|
FLOAT_WINDOW = '//*[@package="com.miHoYo.cloudgames.hkrpg" and @class="android.widget.LinearLayout"]'
|
||||||
# 退出按钮,返回登录页面
|
# 退出按钮,返回登录页面
|
||||||
FLOAT_EXIT = '//*[@resource-id="com.miHoYo.cloudgames.hkrpg:id/iv_exit"]'
|
FLOAT_EXIT = '//*[@resource-id="com.miHoYo.cloudgames.hkrpg:id/iv_exit"]'
|
||||||
# 弹出侧边栏的 节点信息
|
# 弹出侧边栏的 节点信息
|
||||||
@ -159,6 +159,16 @@ class LoginAndroidCloud(ModuleBase):
|
|||||||
season_pass = int(res.group(1))
|
season_pass = int(res.group(1))
|
||||||
else:
|
else:
|
||||||
season_pass = 0
|
season_pass = 0
|
||||||
|
# 42 天
|
||||||
|
# 5 小时
|
||||||
|
if '天' in text:
|
||||||
|
pass
|
||||||
|
elif '小时' in text:
|
||||||
|
season_pass = round(season_pass / 24, 2)
|
||||||
|
elif '分钟' in text:
|
||||||
|
season_pass = round(season_pass / 24 / 60, 3)
|
||||||
|
else:
|
||||||
|
logger.error(f'Unexpected season pass text: {text}')
|
||||||
|
|
||||||
text = self.xpath(XPath.REMAIN_PAID).text
|
text = self.xpath(XPath.REMAIN_PAID).text
|
||||||
logger.info(f'Remain paid: {text}')
|
logger.info(f'Remain paid: {text}')
|
||||||
|
@ -102,12 +102,12 @@ Rogue_DomainTransaction = MapPlane(
|
|||||||
world_id=-2,
|
world_id=-2,
|
||||||
plane_id=7,
|
plane_id=7,
|
||||||
)
|
)
|
||||||
Penacony_RadiantFeldspar = MapPlane(
|
Penacony_TheRadiantFeldspar = MapPlane(
|
||||||
id=10,
|
id=10,
|
||||||
name='Penacony_RadiantFeldspar',
|
name='Penacony_TheRadiantFeldspar',
|
||||||
cn='晖长石号',
|
cn='晖长石号',
|
||||||
cht='暉長石號',
|
cht='暉長石號',
|
||||||
en='Radiant Feldspar',
|
en='The Radiant Feldspar',
|
||||||
jp='暉長石号',
|
jp='暉長石号',
|
||||||
es='Feldespato Radiante',
|
es='Feldespato Radiante',
|
||||||
world_id=3,
|
world_id=3,
|
||||||
@ -454,8 +454,19 @@ Luofu_ScalegorgeWaterscape = MapPlane(
|
|||||||
world_id=2,
|
world_id=2,
|
||||||
plane_id=2023201,
|
plane_id=2023201,
|
||||||
)
|
)
|
||||||
Penacony_TheReverieReality = MapPlane(
|
Luofu_TheShacklingPrison = MapPlane(
|
||||||
id=42,
|
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',
|
name='Penacony_TheReverieReality',
|
||||||
cn='「白日梦」酒店-现实',
|
cn='「白日梦」酒店-现实',
|
||||||
cht='「白日夢」飯店-現實',
|
cht='「白日夢」飯店-現實',
|
||||||
@ -466,7 +477,7 @@ Penacony_TheReverieReality = MapPlane(
|
|||||||
plane_id=1030501,
|
plane_id=1030501,
|
||||||
)
|
)
|
||||||
Penacony_GoldenHour = MapPlane(
|
Penacony_GoldenHour = MapPlane(
|
||||||
id=43,
|
id=44,
|
||||||
name='Penacony_GoldenHour',
|
name='Penacony_GoldenHour',
|
||||||
cn='黄金的时刻',
|
cn='黄金的时刻',
|
||||||
cht='黃金的時刻',
|
cht='黃金的時刻',
|
||||||
@ -477,7 +488,7 @@ Penacony_GoldenHour = MapPlane(
|
|||||||
plane_id=1030101,
|
plane_id=1030101,
|
||||||
)
|
)
|
||||||
Penacony_DreamEdge = MapPlane(
|
Penacony_DreamEdge = MapPlane(
|
||||||
id=44,
|
id=45,
|
||||||
name='Penacony_DreamEdge',
|
name='Penacony_DreamEdge',
|
||||||
cn='筑梦边境',
|
cn='筑梦边境',
|
||||||
cht='築夢邊境',
|
cht='築夢邊境',
|
||||||
@ -488,7 +499,7 @@ Penacony_DreamEdge = MapPlane(
|
|||||||
plane_id=2031301,
|
plane_id=2031301,
|
||||||
)
|
)
|
||||||
Penacony_AChildDream = MapPlane(
|
Penacony_AChildDream = MapPlane(
|
||||||
id=45,
|
id=46,
|
||||||
name='Penacony_AChildDream',
|
name='Penacony_AChildDream',
|
||||||
cn='稚子的梦',
|
cn='稚子的梦',
|
||||||
cht='稚子的夢',
|
cht='稚子的夢',
|
||||||
@ -499,7 +510,7 @@ Penacony_AChildDream = MapPlane(
|
|||||||
plane_id=2031201,
|
plane_id=2031201,
|
||||||
)
|
)
|
||||||
Penacony_TheReverieDreamscape = MapPlane(
|
Penacony_TheReverieDreamscape = MapPlane(
|
||||||
id=46,
|
id=47,
|
||||||
name='Penacony_TheReverieDreamscape',
|
name='Penacony_TheReverieDreamscape',
|
||||||
cn='「白日梦」酒店-梦境',
|
cn='「白日梦」酒店-梦境',
|
||||||
cht='「白日夢」飯店-夢境',
|
cht='「白日夢」飯店-夢境',
|
||||||
@ -510,7 +521,7 @@ Penacony_TheReverieDreamscape = MapPlane(
|
|||||||
plane_id=2031101,
|
plane_id=2031101,
|
||||||
)
|
)
|
||||||
Penacony_DewlightPavilion = MapPlane(
|
Penacony_DewlightPavilion = MapPlane(
|
||||||
id=47,
|
id=48,
|
||||||
name='Penacony_DewlightPavilion',
|
name='Penacony_DewlightPavilion',
|
||||||
cn='朝露公馆',
|
cn='朝露公馆',
|
||||||
cht='朝露公館',
|
cht='朝露公館',
|
||||||
@ -521,7 +532,7 @@ Penacony_DewlightPavilion = MapPlane(
|
|||||||
plane_id=2032201,
|
plane_id=2032201,
|
||||||
)
|
)
|
||||||
Penacony_ClockStudiosThemePark = MapPlane(
|
Penacony_ClockStudiosThemePark = MapPlane(
|
||||||
id=48,
|
id=49,
|
||||||
name='Penacony_ClockStudiosThemePark',
|
name='Penacony_ClockStudiosThemePark',
|
||||||
cn='克劳克影视乐园',
|
cn='克劳克影视乐园',
|
||||||
cht='克勞克影視樂園',
|
cht='克勞克影視樂園',
|
||||||
@ -532,7 +543,7 @@ Penacony_ClockStudiosThemePark = MapPlane(
|
|||||||
plane_id=2032101,
|
plane_id=2032101,
|
||||||
)
|
)
|
||||||
Penacony_DreamfluxReef = MapPlane(
|
Penacony_DreamfluxReef = MapPlane(
|
||||||
id=49,
|
id=50,
|
||||||
name='Penacony_DreamfluxReef',
|
name='Penacony_DreamfluxReef',
|
||||||
cn='流梦礁',
|
cn='流梦礁',
|
||||||
cht='流夢礁',
|
cht='流夢礁',
|
||||||
@ -543,7 +554,7 @@ Penacony_DreamfluxReef = MapPlane(
|
|||||||
plane_id=1030401,
|
plane_id=1030401,
|
||||||
)
|
)
|
||||||
Penacony_SoulGladScorchsandAuditionVenue = MapPlane(
|
Penacony_SoulGladScorchsandAuditionVenue = MapPlane(
|
||||||
id=50,
|
id=51,
|
||||||
name='Penacony_SoulGladScorchsandAuditionVenue',
|
name='Penacony_SoulGladScorchsandAuditionVenue',
|
||||||
cn='苏乐达热砂海选会场',
|
cn='苏乐达热砂海选会场',
|
||||||
cht='蘇樂達熱砂海選會場',
|
cht='蘇樂達熱砂海選會場',
|
||||||
@ -554,7 +565,7 @@ Penacony_SoulGladScorchsandAuditionVenue = MapPlane(
|
|||||||
plane_id=2033101,
|
plane_id=2033101,
|
||||||
)
|
)
|
||||||
Penacony_PenaconyGrandTheater = MapPlane(
|
Penacony_PenaconyGrandTheater = MapPlane(
|
||||||
id=51,
|
id=52,
|
||||||
name='Penacony_PenaconyGrandTheater',
|
name='Penacony_PenaconyGrandTheater',
|
||||||
cn='匹诺康尼大剧院',
|
cn='匹诺康尼大剧院',
|
||||||
cht='匹諾康尼大劇院',
|
cht='匹諾康尼大劇院',
|
||||||
|
@ -20,7 +20,7 @@ class Ornament(OrnamentCombat):
|
|||||||
# Check save file before entering
|
# Check save file before entering
|
||||||
if self.image_color_count(
|
if self.image_color_count(
|
||||||
DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE,
|
DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE,
|
||||||
color=(195, 89, 79), threshold=221, count=1000,
|
color=(140, 19, 26), threshold=221, count=1000,
|
||||||
):
|
):
|
||||||
logger.error(
|
logger.error(
|
||||||
'Divergent Universe save unavailable, '
|
'Divergent Universe save unavailable, '
|
||||||
|
@ -210,3 +210,39 @@ Fountain_of_Youth = RogueBonus(
|
|||||||
jp='不老の泉',
|
jp='不老の泉',
|
||||||
es='Fuente de la juventud',
|
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',
|
||||||
|
)
|
||||||
|
@ -835,7 +835,7 @@ Pick_Sal = RogueEventOption(
|
|||||||
id=93,
|
id=93,
|
||||||
name='Pick_Sal',
|
name='Pick_Sal',
|
||||||
cn='选择萨里。',
|
cn='选择萨里。',
|
||||||
cht='選擇薩里。',
|
cht='選擇薩李。',
|
||||||
en='Pick Sal.',
|
en='Pick Sal.',
|
||||||
jp='サリを選ぶ',
|
jp='サリを選ぶ',
|
||||||
es='Elige a Sal.',
|
es='Elige a Sal.',
|
||||||
@ -862,7 +862,7 @@ Let_Sal_out = RogueEventOption(
|
|||||||
id=96,
|
id=96,
|
||||||
name='Let_Sal_out',
|
name='Let_Sal_out',
|
||||||
cn='让萨里出来吧。',
|
cn='让萨里出来吧。',
|
||||||
cht='讓薩里出來吧。',
|
cht='讓薩李出來吧。',
|
||||||
en='Let Sal out.',
|
en='Let Sal out.',
|
||||||
jp='サリに出てきてもらう',
|
jp='サリに出てきてもらう',
|
||||||
es='Deja salir a Sal.',
|
es='Deja salir a Sal.',
|
||||||
@ -2319,8 +2319,8 @@ You_can_also_smash_the_cup = RogueEventOption(
|
|||||||
I_m_voting_for_Oswaldo_Schneider = RogueEventOption(
|
I_m_voting_for_Oswaldo_Schneider = RogueEventOption(
|
||||||
id=258,
|
id=258,
|
||||||
name='I_m_voting_for_Oswaldo_Schneider',
|
name='I_m_voting_for_Oswaldo_Schneider',
|
||||||
cn='我要为「奥施瓦尔多·施耐德」的竞选投票!',
|
cn='我要为「奥斯瓦尔多·施耐德」的竞选投票!',
|
||||||
cht='我要為「奧施瓦爾多•施耐德」的競選投票!',
|
cht='我要為「奧斯瓦爾多•施耐德」的競選投票!',
|
||||||
en='I\'m voting for "Oswaldo Schneider"!',
|
en='I\'m voting for "Oswaldo Schneider"!',
|
||||||
jp='「オスワルド・シュナイダー」に投票する!',
|
jp='「オスワルド・シュナイダー」に投票する!',
|
||||||
es='¡Voto por Oswaldo Schneider!',
|
es='¡Voto por Oswaldo Schneider!',
|
||||||
|
@ -217,7 +217,7 @@ Saleo_I = RogueEventTitle(
|
|||||||
id=22,
|
id=22,
|
||||||
name='Saleo_I',
|
name='Saleo_I',
|
||||||
cn='萨里奥(其一)',
|
cn='萨里奥(其一)',
|
||||||
cht='薩里奧(其一)',
|
cht='薩李奧(其一)',
|
||||||
en='Saleo (I)',
|
en='Saleo (I)',
|
||||||
jp='サリオ(その1)',
|
jp='サリオ(その1)',
|
||||||
es='Saleo (I)',
|
es='Saleo (I)',
|
||||||
@ -227,7 +227,7 @@ Sal_II = RogueEventTitle(
|
|||||||
id=23,
|
id=23,
|
||||||
name='Sal_II',
|
name='Sal_II',
|
||||||
cn='萨里(其二)',
|
cn='萨里(其二)',
|
||||||
cht='薩里(其二)',
|
cht='薩李(其二)',
|
||||||
en='Sal (II)',
|
en='Sal (II)',
|
||||||
jp='サリ(その2)',
|
jp='サリ(その2)',
|
||||||
es='Sal (II)',
|
es='Sal (II)',
|
||||||
@ -237,7 +237,7 @@ Leo_III = RogueEventTitle(
|
|||||||
id=24,
|
id=24,
|
||||||
name='Leo_III',
|
name='Leo_III',
|
||||||
cn='里奥(其三)',
|
cn='里奥(其三)',
|
||||||
cht='里奧(其三)',
|
cht='李奧(其三)',
|
||||||
en='Leo (III)',
|
en='Leo (III)',
|
||||||
jp='リオ(その3)',
|
jp='リオ(その3)',
|
||||||
es='Leo (III)',
|
es='Leo (III)',
|
||||||
@ -1119,7 +1119,7 @@ Insights_from_the_Universal_Dancer = RogueEventTitle(
|
|||||||
cn='寰宇舞者的启示',
|
cn='寰宇舞者的启示',
|
||||||
cht='寰宇舞者的啟示',
|
cht='寰宇舞者的啟示',
|
||||||
en='Insights from the Universal Dancer',
|
en='Insights from the Universal Dancer',
|
||||||
jp='世界の踊り手の啓示',
|
jp='宇宙の踊り手の啓示',
|
||||||
es='Reflexiones de la bailarina universal',
|
es='Reflexiones de la bailarina universal',
|
||||||
option_ids=[323, 324],
|
option_ids=[323, 324],
|
||||||
)
|
)
|
||||||
|