Merge pull request #598 from LmeSzinc/dev

Bug fix
This commit is contained in:
LmeSzinc 2024-07-31 19:28:04 +08:00 committed by GitHub
commit 0068a2a860
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
35 changed files with 359 additions and 222 deletions

BIN
assets/character/Jade.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

BIN
assets/character/Yunli.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -124,6 +124,10 @@ class KeywordExtract:
"""
quest_data = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'QuestData.json'))
quest_data = {
str(deep_get(data, 'QuestID')): data
for data in quest_data
}
quests_hash = [quest_data[str(quest_id)]["QuestTitle"]["Hash"] for quest_id in quests]
quest_keywords = list(dict.fromkeys([self.text_map[lang].find(quest_hash)[1] for quest_hash in quests_hash]))
self.load_keywords(quest_keywords, lang)
@ -138,39 +142,43 @@ class KeywordExtract:
gen.CommentAutoGenerage('dev_tools.keyword_extract')
old_quest = [
"Go_on_assignment_1_time", # -> Dispatch_1_assignments
"Complete_Simulated_Universe_1_times", # same
"Complete_1_stage_in_Simulated_Universe_Any_world", # -> Complete_Divergent_Universe_or_Simulated_Universe_1_times
"Complete_Calyx_Crimson_1_time", # -> Clear_Calyx_Crimson_1_times
"Enter_combat_by_attacking_enemy_Weakness_and_win_3_times", # -> Enter_combat_by_attacking_enemie_Weakness_and_win_1_times
"Use_Technique_2_times", # -> Use_Technique_1_times
"Destroy_3_destructible_objects", # -> Destroy_1_destructible_objects
"Obtain_victory_in_combat_with_Support_Characters_1_time", # -> Obtain_victory_in_combat_with_Support_Characters_1_times
"Level_up_any_character_1_time", # -> Level_up_any_character_1_times
"Level_up_any_Light_Cone_1_time", # -> Level_up_any_Light_Cone_1_times
"Synthesize_Consumable_1_time", # -> Use_the_Omni_Synthesizer_1_times
"Synthesize_material_1_time", # -> Use_the_Omni_Synthesizer_1_times
"Take_1_photo", # -> Take_photos_1_times
"Level_up_any_Relic_1_time", # -> Level_up_any_Relic_1_times
"Go_on_assignment_1_time", # -> Dispatch_1_assignments
"Complete_Simulated_Universe_1_times", # same
"Complete_1_stage_in_Simulated_Universe_Any_world",
# -> Complete_Divergent_Universe_or_Simulated_Universe_1_times
"Complete_Calyx_Crimson_1_time", # -> Clear_Calyx_Crimson_1_times
"Enter_combat_by_attacking_enemy_Weakness_and_win_3_times",
# -> Enter_combat_by_attacking_enemie_Weakness_and_win_1_times
"Use_Technique_2_times", # -> Use_Technique_1_times
"Destroy_3_destructible_objects", # -> Destroy_1_destructible_objects
"Obtain_victory_in_combat_with_Support_Characters_1_time",
# -> Obtain_victory_in_combat_with_Support_Characters_1_times
"Level_up_any_character_1_time", # -> Level_up_any_character_1_times
"Level_up_any_Light_Cone_1_time", # -> Level_up_any_Light_Cone_1_times
"Synthesize_Consumable_1_time", # -> Use_the_Omni_Synthesizer_1_times
"Synthesize_material_1_time", # -> Use_the_Omni_Synthesizer_1_times
"Take_1_photo", # -> Take_photos_1_times
"Level_up_any_Relic_1_time", # -> Level_up_any_Relic_1_times
]
correct_times = {
# "Dispatch_1_assignments": 1,
# "Complete_Divergent_Universe_or_Simulated_Universe_1_times": 1,
# "Clear_Calyx_Crimson_1_times": 1,
# "Dispatch_1_assignments": 1,
# "Complete_Divergent_Universe_or_Simulated_Universe_1_times": 1,
# "Clear_Calyx_Crimson_1_times": 1,
"Enter_combat_by_attacking_enemie_Weakness_and_win_1_times": 3,
"Use_Technique_1_times": 2,
"Destroy_1_destructible_objects": 3,
# "Obtain_victory_in_combat_with_Support_Characters_1_times": 1,
# "Level_up_any_character_1_times": 1,
# "Level_up_any_Light_Cone_1_times": 1,
# "Use_the_Omni_Synthesizer_1_times": 1,
# "Take_photos_1_times": 1,
# "Level_up_any_Relic_1_times": 1,
# "Obtain_victory_in_combat_with_Support_Characters_1_times": 1,
# "Level_up_any_character_1_times": 1,
# "Level_up_any_Light_Cone_1_times": 1,
# "Use_the_Omni_Synthesizer_1_times": 1,
# "Take_photos_1_times": 1,
# "Level_up_any_Relic_1_times": 1,
"Consume_1_Trailblaze_Power": 120
}
def replace_templates_quest(text: str, correct_time = 1) -> str:
def replace_templates_quest(text: str, correct_time=1) -> str:
text = replace_templates(text)
text = text.replace('1', f'{correct_time}')
return text
@ -187,7 +195,8 @@ class KeywordExtract:
gen.ObjectAttr(key='id', value=index + last_id + 1)
gen.ObjectAttr(key='name', value=name)
for lang in UI_LANGUAGES:
gen.ObjectAttr(key=lang, value=replace_templates_quest(self.find_keyword(keyword, lang=lang)[1], correct_times.setdefault(old_name, 1)))
gen.ObjectAttr(key=lang, value=replace_templates_quest(self.find_keyword(keyword, lang=lang)[1],
correct_times.setdefault(old_name, 1)))
gen.last_id = index + last_id + 1
output_file = './tasks/daily/keywords/daily_quest.py'
@ -198,14 +207,14 @@ class KeywordExtract:
def generate_daily_quests(self):
daily_quest = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'DailyQuest.json'))
self.load_quests(daily_quest.keys())
self.load_quests([str(deep_get(data, 'DailyID')) for data in daily_quest])
self.write_daily_quest_keywords()
def load_character_name_keywords(self, lang='en'):
file_name = 'ItemConfigAvatarPlayerIcon.json'
path = os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', file_name)
character_data = read_file(path)
characters_hash = [character_data[key]["ItemName"]["Hash"] for key in character_data]
characters_hash = [data["ItemName"]["Hash"] for data in character_data]
text_map = self.text_map[lang]
keywords_id = sorted(
@ -216,36 +225,45 @@ class KeywordExtract:
def generate_shadow_with_characters(self):
# Damage type -> damage hash
damage_info = dict()
for type_name, data in read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'DamageType.json'
)).items():
for data in read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'DamageType.json'
)):
type_name = deep_get(data, 'ID', 0)
damage_info[type_name] = deep_get(data, 'DamageTypeName.Hash')
# Character id -> character hash & damage type
character_info = dict()
for data in read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'AvatarConfig.json'
)).values():
TextMap.DATA_FOLDER, 'ExcelOutput',
'AvatarConfig.json'
)):
name_hash = deep_get(data, 'AvatarName.Hash')
damage_type = deep_get(data, 'DamageType')
character_info[data['AvatarID']] = (
name_hash, damage_info[damage_type])
# Item id -> character id
promotion_info = defaultdict(list)
for data in read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'AvatarPromotionConfig.json'
)).values():
def merge_same(data: list[dict], keyword) -> list:
mp = defaultdict(dict)
for d in data:
length = len(mp[d[keyword]])
mp[d[keyword]][str(length)] = d
return mp.values()
for data in merge_same(read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'AvatarPromotionConfig.json'
)), keyword='AvatarID'):
character_id = deep_get(data, '0.AvatarID')
item_id = deep_get(data, '2.PromotionCostList')[-1]['ItemID']
promotion_info[item_id].append(character_info[character_id])
# Shadow hash -> item id
shadow_info = dict()
for data in read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'MappingInfo.json'
)).values():
for data in merge_same(read_file(os.path.join(
TextMap.DATA_FOLDER, 'ExcelOutput',
'MappingInfo.json'
)), keyword='ID'):
farm_type = deep_get(data, '0.FarmType')
if farm_type != 'ELEMENT':
continue
@ -273,10 +291,12 @@ class KeywordExtract:
gen.ObjectAttr(key='id', value=index + 1)
gen.ObjectAttr(key='name', value=name)
for lang in UI_LANGUAGES:
character_names = ' / '.join([
character_names = [
replace_templates(self.find_keyword(c[0], lang)[1])
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]
if lang in {'en', 'es'}:
value = f'{prefix_dict[lang]}{damage_type} ({character_names})'
@ -351,7 +371,7 @@ class KeywordExtract:
def generate_battle_pass_quests(self):
battle_pass_quests = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'BattlePassConfig.json'))
latest_quests = list(battle_pass_quests.values())[-1]
latest_quests = list(battle_pass_quests)[-1]
week_quest_list = deep_get(latest_quests, "WeekQuestList")
week_order1 = deep_get(latest_quests, "WeekOrder1")
week_chain_quest_list = deep_get(latest_quests, "WeekChainQuestList")
@ -362,31 +382,39 @@ class KeywordExtract:
def generate_rogue_buff(self):
# paths
aeons = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueAeonDisplay.json'))
aeons_hash = [deep_get(aeon, 'RogueAeonPathName2.Hash') for aeon in aeons.values()]
aeons_hash = [deep_get(aeon, 'RogueAeonPathName2.Hash') for aeon in aeons]
self.keywords_id = aeons_hash
self.write_keywords(keyword_class='RoguePath', output_file='./tasks/rogue/keywords/path.py')
# blessings
blessings_info = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueBuff.json'))
blessings_name_map = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueMazeBuff.json'))
blessings_id = [deep_get(blessing, '1.MazeBuffID') for blessing in blessings_info.values()
if not deep_get(blessing, '1.AeonID')][1:]
resonances_id = [deep_get(blessing, '1.MazeBuffID') for blessing in blessings_info.values()
if deep_get(blessing, '1.AeonID')]
blessings_name_map = {
deep_get(data, 'ID'): data
for data in blessings_name_map
}
blessings_id = [deep_get(blessing, 'MazeBuffID') for blessing in blessings_info
if not deep_get(blessing, 'AeonID')][1:]
resonances_id = [deep_get(blessing, 'MazeBuffID') for blessing in blessings_info
if deep_get(blessing, 'AeonID')]
blessings_info = {
str(deep_get(data, 'MazeBuffID')): data
for data in blessings_info if deep_get(data, 'MazeBuffLevel') == 1
}
# ignore endless buffs
endless_buffs = read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueEndlessMegaBuffDesc.json'))
endless_buff_ids = [int(id_) for id_ in endless_buffs]
endless_buff_ids = [int(deep_get(data, 'MazeBuffID')) for data in endless_buffs]
blessings_id = [id_ for id_ in blessings_id if id_ not in endless_buff_ids]
def get_blessing_infos(id_list, with_enhancement: bool):
blessings_hash = [deep_get(blessings_name_map, f"{blessing_id}.1.BuffName.Hash")
blessings_hash = [deep_get(blessings_name_map, f"{blessing_id}.BuffName.Hash")
for blessing_id in id_list]
blessings_path_id = {blessing_hash: int(deep_get(blessings_info, f'{blessing_id}.1.RogueBuffType')) - 119
blessings_path_id = {blessing_hash: int(deep_get(blessings_info, f'{blessing_id}.RogueBuffType')) - 119
# 119 is the magic number make type match with path in keyword above
for blessing_hash, blessing_id in zip(blessings_hash, id_list)}
blessings_category = {blessing_hash: deep_get(blessings_info, f'{blessing_id}.1.RogueBuffCategory')
for blessing_hash, blessing_id in zip(blessings_hash, id_list)}
blessings_category = {blessing_hash: deep_get(blessings_info, f'{blessing_id}.RogueBuffCategory')
for blessing_hash, blessing_id in zip(blessings_hash, id_list)}
category_map = {
"Common": 1,
"Rare": 2,
@ -418,8 +446,8 @@ class KeywordExtract:
'RogueTalkNameConfig.json'
)
event_title_ids = {
id_: deep_get(data, 'Name.Hash')
for id_, data in read_file(event_title_file).items()
str(deep_get(data, 'TalkNameID')): deep_get(data, 'Name.Hash')
for data in read_file(event_title_file)
}
event_title_texts = defaultdict(list)
for title_id, title_hash in event_title_ids.items():
@ -432,8 +460,8 @@ class KeywordExtract:
'RogueDialogueOptionDisplay.json'
)
option_ids = {
id_: deep_get(data, 'OptionTitle.Hash')
for id_, data in read_file(option_file).items()
str(deep_get(data, 'OptionDisplayID')): deep_get(data, 'OptionTitle.Hash')
for data in read_file(option_file)
}
# Key: event name hash, value: list of option id/hash
options_grouped = dict()
@ -503,7 +531,9 @@ class KeywordExtract:
if option_dup_count[option_var] > 1:
option_var = f'{option_var}_{option_md5[:md5_prefix_len]}'
return option_var
return wrapper
option_gen = None
option_hash_to_keyword_id = dict() # option hash -> option keyword id
for i, (option_md5, option_hash) in enumerate(option_md5s.items(), start=1):
@ -543,9 +573,9 @@ class KeywordExtract:
logger.critical(
f'Importing preset strategies fails, probably due to changes in {output_file}')
def iter_without_duplication(self, file: dict, keys):
def iter_without_duplication(self, file: list, keys):
visited = set()
for data in file.values():
for data in file:
hash_ = deep_get(data, keys=keys)
_, name = self.find_keyword(hash_, lang='cn')
if name in visited:

View File

@ -30,25 +30,26 @@ def get_assignment_entry_data():
"""
expedition_namehash_to_id = {
deep_get(expedition, 'Name.Hash'): deep_get(expedition, 'ExpeditionID')
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionData.json').values()
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionData.json')
}
rev = {v: k for k, v in expedition_namehash_to_id.items()}
rev = resort(rev)
expedition_namehash_to_id = {v: k for k, v in rev.items()}
expedition_id_to_reward_id = {
deep_get(expedition, '4.2.ExpeditionID'): deep_get(expedition, '4.2.RewardID')
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json').values()
deep_get(expedition, 'ExpeditionID'): deep_get(expedition, 'RewardID')
for expedition in GenerateKeyword.read_file('./ExcelOutput/ExpeditionReward.json')
if deep_get(expedition, 'Duration') == 4 and deep_get(expedition, 'AvatarNum') == 2
}
reward_id_to_item_ids = {
deep_get(reward, 'RewardID'): [
v for k, v in reward.items()
if k.startswith('ItemID')
]
for reward in GenerateKeyword.read_file('./ExcelOutput/RewardData.json').values()
for reward in GenerateKeyword.read_file('./ExcelOutput/RewardData.json')
}
item_id_to_namehash = {
deep_get(item, 'ID'): deep_get(item, 'ItemName.Hash')
for item in GenerateKeyword.read_file('./ExcelOutput/ItemConfig.json').values()
for item in GenerateKeyword.read_file('./ExcelOutput/ItemConfig.json')
}
item_name_remap = {
'旅情见闻': '角色经验材料',
@ -81,7 +82,7 @@ class GenerateAssignmentGroup(GenerateKeyword):
output_file = './tasks/assignment/keywords/group.py'
def iter_keywords(self) -> Iterable[dict]:
for group in self.read_file('./ExcelOutput/ExpeditionGroup.json').values():
for group in self.read_file('./ExcelOutput/ExpeditionGroup.json'):
yield dict(text_id=deep_get(group, 'Name.Hash'))
@ -133,7 +134,7 @@ class GenerateAssignmentEventEntry(GenerateKeyword):
output_file = './tasks/assignment/keywords/event_entry.py'
def iter_keywords(self) -> Iterable[dict]:
for expedition in self.read_file('./ExcelOutput/ActivityExpedition.json').values():
for expedition in self.read_file('./ExcelOutput/ActivityExpedition.json'):
yield dict(text_id=deep_get(expedition, 'Name.Hash'))

View File

@ -92,13 +92,13 @@ class GenerateKeyword:
text_map['cn'] = TextMap('chs')
@staticmethod
def read_file(file: str) -> dict:
def read_file(file: str) -> list:
"""
Args:
file: ./ExcelOutput/GameplayGuideData.json
Returns:
dict:
list
"""
file = os.path.join(TextMap.DATA_FOLDER, file)
return read_file(file)

View File

@ -41,7 +41,7 @@ class GenerateDungeonList(GenerateKeyword):
def iter_dungeon(self):
temp_save = ""
for data in self.data.values():
for data in self.data:
dungeon_id = data.get('ID', 0)
text_id = deep_get(data, keys='Name.Hash')
plane_id = deep_get(data, 'MapEntranceID', 0)

View File

@ -10,7 +10,7 @@ class GenerateItemBase(GenerateKeyword):
blacklist = []
def iter_items(self) -> t.Iterable[dict]:
for data in SHARE_DATA.ItemConfig.values():
for data in SHARE_DATA.ItemConfig:
item_id = data.get('ID', 0)
text_id = deep_get(data, keys='ItemName.Hash')
subtype = data.get('ItemSubType', 0)
@ -50,21 +50,20 @@ class GenerateItemBase(GenerateKeyword):
data
"""
dic = {}
for level_data in SHARE_DATA.MappingInfo.values():
for dungeon_data in SHARE_DATA.MappingInfo:
# Use the highest level
# And must contain:
# "Type": "FARM_ENTRANCE",
# "FarmType": "COCOON",
for dungeon_data in level_data.values():
if dungeon_data.get('Type') != 'FARM_ENTRANCE':
if dungeon_data.get('Type') != 'FARM_ENTRANCE':
continue
# parse
dungeon_id = dungeon_data.get('ID', 0)
for item_data in dungeon_data.get('DisplayItemList', []):
item_id = item_data.get('ItemID', 0)
if item_id < 100:
continue
# parse
dungeon_id = dungeon_data.get('ID', 0)
for item_data in dungeon_data.get('DisplayItemList', []):
item_id = item_data.get('ItemID', 0)
if item_id < 100:
continue
dic.setdefault(item_id, dungeon_id)
dic.setdefault(item_id, dungeon_id)
# Credict
dic.setdefault(2, 1003)

View File

@ -13,8 +13,8 @@ class GenerateMapPlane(GenerateKeyword):
return self.read_file('./ExcelOutput/AreaMapConfig.json')
def iter_planes(self) -> t.Iterable[dict]:
for plane_id, data in self.data.items():
plane_id = int(plane_id)
for data in self.data:
plane_id = int(deep_get(data, 'ID', 0))
world_id = int(str(plane_id)[-5])
sort_id = int(deep_get(data, 'MenuSortID', 0))
text_id = deep_get(data, 'Name.Hash')

View File

@ -672,13 +672,15 @@
"Himeko",
"Hook",
"Huohuo",
"Jade",
"JingYuan",
"Jingliu",
"Kafka",
"Luka",
"Luocha",
"Lynx",
"March7th",
"March7thPreservation",
"March7thTheHunt",
"Misha",
"Natasha",
"Pela",
@ -699,7 +701,8 @@
"Welt",
"Xueyi",
"Yanqing",
"Yukong"
"Yukong",
"Yunli"
]
}
},
@ -1238,13 +1241,15 @@
"Himeko",
"Hook",
"Huohuo",
"Jade",
"JingYuan",
"Jingliu",
"Kafka",
"Luka",
"Luocha",
"Lynx",
"March7th",
"March7thPreservation",
"March7thTheHunt",
"Misha",
"Natasha",
"Pela",
@ -1265,7 +1270,8 @@
"Welt",
"Xueyi",
"Yanqing",
"Yukong"
"Yukong",
"Yunli"
]
}
}
@ -1522,13 +1528,15 @@
"Himeko",
"Hook",
"Huohuo",
"Jade",
"JingYuan",
"Jingliu",
"Kafka",
"Luka",
"Luocha",
"Lynx",
"March7th",
"March7thPreservation",
"March7thTheHunt",
"Misha",
"Natasha",
"Pela",
@ -1549,7 +1557,8 @@
"Welt",
"Xueyi",
"Yanqing",
"Yukong"
"Yukong",
"Yunli"
]
}
},

View File

@ -53,7 +53,7 @@ class GeneratedConfig:
# Group `DungeonSupport`
DungeonSupport_Use = 'when_daily' # always_use, when_daily, do_not_use
DungeonSupport_Character = 'FirstCharacter' # FirstCharacter, Acheron, Argenti, Arlan, Asta, Aventurine, Bailu, BlackSwan, Blade, Boothill, Bronya, Clara, DanHeng, DanHengImbibitorLunae, DrRatio, Firefly, FuXuan, Gallagher, Gepard, Guinaifen, Hanya, Herta, Himeko, Hook, Huohuo, JingYuan, Jingliu, Kafka, Luka, Luocha, Lynx, March7th, Misha, Natasha, Pela, Qingque, Robin, RuanMei, Sampo, Seele, Serval, SilverWolf, Sparkle, Sushang, Tingyun, TopazNumby, TrailblazerDestruction, TrailblazerHarmony, TrailblazerPreservation, Welt, Xueyi, Yanqing, Yukong
DungeonSupport_Character = 'FirstCharacter' # FirstCharacter, Acheron, Argenti, Arlan, Asta, Aventurine, Bailu, BlackSwan, Blade, Boothill, Bronya, Clara, DanHeng, DanHengImbibitorLunae, DrRatio, Firefly, FuXuan, Gallagher, Gepard, Guinaifen, Hanya, Herta, Himeko, Hook, Huohuo, 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`
DungeonStorage_TrailblazePower = {}

View File

@ -100,7 +100,7 @@ class ConfigGenerator:
option_add(keys='Ornament.Dungeon.option', options=ornament)
# Insert characters
from tasks.character.keywords import CharacterList
unsupported_characters = ["Jade"]
unsupported_characters = ["Jiaoqiu"]
characters = [character.name for character in CharacterList.instances.values()
if character.name not in unsupported_characters]
option_add(keys='DungeonSupport.Character.option', options=characters)

View File

@ -263,10 +263,10 @@
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Trace: Nihility (Alchemy Commission)",
"Stagnant_Shadow_Spike": "Ascension: Physical (Natasha / Clara / Luka / Sushang)",
"Stagnant_Shadow_Perdition": "Ascension: Physical (Hanya / Argenti)",
"Stagnant_Shadow_Duty": "Ascension: Physical (Boothill / Robin)",
"Stagnant_Shadow_Duty": "Ascension: Physical (Boothill / Robin / Yunli)",
"Stagnant_Shadow_Blaze": "Ascension: Fire (Himeko / Asta / Hook)",
"Stagnant_Shadow_Scorch": "Ascension: Fire (Guinaifen / Topaz & Numby)",
"Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher)",
"Stagnant_Shadow_Ire": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)",
"Stagnant_Shadow_Rime": "Ascension: Ice (March 7th / Herta / Gepard / Pela)",
"Stagnant_Shadow_Icicle": "Ascension: Ice (Yanqing / Jingliu / Ruan Mei)",
"Stagnant_Shadow_Nectar": "Ascension: Ice (Misha)",
@ -403,13 +403,15 @@
"Himeko": "Himeko",
"Hook": "Hook",
"Huohuo": "Huohuo",
"Jade": "Jade",
"JingYuan": "Jing Yuan",
"Jingliu": "Jingliu",
"Kafka": "Kafka",
"Luka": "Luka",
"Luocha": "Luocha",
"Lynx": "Lynx",
"March7th": "March 7th",
"March7thPreservation": "March 7th: Preservation",
"March7thTheHunt": "March 7th: The Hunt",
"Misha": "Misha",
"Natasha": "Natasha",
"Pela": "Pela",
@ -430,7 +432,8 @@
"Welt": "Welt",
"Xueyi": "Xueyi",
"Yanqing": "Yanqing",
"Yukong": "Yukong"
"Yukong": "Yukong",
"Yunli": "Yunli"
}
},
"DungeonStorage": {
@ -555,11 +558,11 @@
"help": ""
},
"Item_IPC_Work_Permit": {
"name": "Ascension: Physical (Boothill / Robin)",
"name": "Ascension: Physical (Boothill / Robin / Yunli)",
"help": ""
},
"Item_Raging_Heart": {
"name": "Ascension: Fire (Firefly / Gallagher)",
"name": "Ascension: Fire (Firefly / Gallagher / Jiaoqiu)",
"help": ""
},
"Item_Dream_Fridge": {

View File

@ -263,10 +263,10 @@
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "Rastros: Nihilidad (Comisión de Alquimia)",
"Stagnant_Shadow_Spike": "Ascension: Físico (Natasha / Clara / Luka / Sushang)",
"Stagnant_Shadow_Perdition": "Ascension: Físico (Hanya / Argenti)",
"Stagnant_Shadow_Duty": "Ascension: Físico (Boothill / Robin)",
"Stagnant_Shadow_Duty": "Ascension: Físico (Boothill / Robin / Yunli)",
"Stagnant_Shadow_Blaze": "Ascension: Fuego (Himeko / Asta / Hook)",
"Stagnant_Shadow_Scorch": "Ascension: Fuego (Guinaifen / Topaz y Conti)",
"Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher)",
"Stagnant_Shadow_Ire": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)",
"Stagnant_Shadow_Rime": "Ascension: Hielo (Siete de Marzo / Herta / Gepard / Pela)",
"Stagnant_Shadow_Icicle": "Ascension: Hielo (Yanqing / Jingliu / Ruan Mei)",
"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_Darkness": "Artefactos: Persecución y Dot (Senda de la oscuridad)",
"Cavern_of_Corrosion_Path_of_Dreamdive": "Artefactos: Debuff y Efecto de Ruptura (Senda de los sueños)",
"Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero)"
"Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero) (Senda del caballero)"
},
"NameAtDoubleCalyx": {
"name": "En los eventos de x2 de Cáliz",
@ -329,7 +329,7 @@
"Cavern_of_Corrosion_Path_of_Elixir_Seekers": "Artefactos: HP y SPD (Senda de los elixires)",
"Cavern_of_Corrosion_Path_of_Darkness": "Artefactos: Persecución y Dot (Senda de la oscuridad)",
"Cavern_of_Corrosion_Path_of_Dreamdive": "Artefactos: Debuff y Efecto de Ruptura (Senda de los sueños)",
"Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero)"
"Cavern_of_Corrosion_Path_of_Cavalier": "Artefactos: Ultrarruptura y Adicional de Definitiva (Caverna de la corrosión: Senda del caballero) (Senda del caballero)"
},
"Team": {
"name": "Equipo de mazmorra",
@ -403,13 +403,15 @@
"Himeko": "Himeko",
"Hook": "Hook",
"Huohuo": "Huohuo",
"Jade": "Jade",
"JingYuan": "Jing Yuan",
"Jingliu": "Jingliu",
"Kafka": "Kafka",
"Luka": "Luka",
"Luocha": "Luocha",
"Lynx": "Lynx",
"March7th": "Siete de Marzo",
"March7thPreservation": "Siete de Marzo: Conservación",
"March7thTheHunt": "Siete de Marzo: Cacería",
"Misha": "Misha",
"Natasha": "Natasha",
"Pela": "Pela",
@ -430,7 +432,8 @@
"Welt": "Welt",
"Xueyi": "Xueyi",
"Yanqing": "Yanqing",
"Yukong": "Yukong"
"Yukong": "Yukong",
"Yunli": "Yunli"
}
},
"DungeonStorage": {
@ -555,11 +558,11 @@
"help": ""
},
"Item_IPC_Work_Permit": {
"name": "Ascension: Físico (Boothill / Robin)",
"name": "Ascension: Físico (Boothill / Robin / Yunli)",
"help": ""
},
"Item_Raging_Heart": {
"name": "Ascension: Fuego (Luciérnaga / Gallagher)",
"name": "Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)",
"help": ""
},
"Item_Dream_Fridge": {
@ -647,7 +650,7 @@
"help": ""
},
"Item_Lost_Echo_of_the_Shared_Wish": {
"name": "Ecos de la guerra: Tributo del sueño ceniciento (Colonipenal)",
"name": "Tributo del sueño ceniciento (Colonipenal)",
"help": ""
},
"Item_Squirming_Core": {
@ -695,7 +698,7 @@
"Echo_of_War_End_of_the_Eternal_Freeze": "El fin del Hielo Eterno (Jarilo-VI)",
"Echo_of_War_Divine_Seed": "Semilla divina (El Luofu de Xianzhou)",
"Echo_of_War_Borehole_Planet_Old_Crater": "Cráter del planeta devorado (Estación Espacial Herta)",
"Echo_of_War_Salutations_of_Ashen_Dreams": "Ecos de la guerra: Tributo del sueño ceniciento (Colonipenal)"
"Echo_of_War_Salutations_of_Ashen_Dreams": "Tributo del sueño ceniciento (Colonipenal)"
},
"Team": {
"name": "Equipo de mazmorra",

View File

@ -263,10 +263,10 @@
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "軌跡素材:虚無(丹鼎司)",
"Stagnant_Shadow_Spike": "キャラクター昇格素材:物理(ナターシャ / クラーラ / ルカ / 素裳)",
"Stagnant_Shadow_Perdition": "キャラクター昇格素材:物理(寒鴉 / アルジェンティ)",
"Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン",
"Stagnant_Shadow_Duty": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃",
"Stagnant_Shadow_Blaze": "キャラクター昇格素材:炎(姫子 / アスター / フック)",
"Stagnant_Shadow_Scorch": "キャラクター昇格素材:炎(桂乃芬 / トパーズ&カブ)",
"Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー",
"Stagnant_Shadow_Ire": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘",
"Stagnant_Shadow_Rime": "キャラクター昇格素材:氷(三月なのか / ヘルタ / ジェパード / ペラ)",
"Stagnant_Shadow_Icicle": "キャラクター昇格素材:氷(彦卿 / 鏡流 / ルアン・メェイ)",
"Stagnant_Shadow_Nectar": "キャラクター昇格素材:氷(ミーシャ)",
@ -403,13 +403,15 @@
"Himeko": "姫子",
"Hook": "フック",
"Huohuo": "フォフォ",
"Jade": "ジェイド",
"JingYuan": "景元",
"Jingliu": "鏡流",
"Kafka": "カフカ",
"Luka": "ルカ",
"Luocha": "羅刹",
"Lynx": "リンクス",
"March7th": "三月なのか",
"March7thPreservation": "三月なのか・存護",
"March7thTheHunt": "三月なのか・巡狩",
"Misha": "ミーシャ",
"Natasha": "ナターシャ",
"Pela": "ペラ",
@ -430,7 +432,8 @@
"Welt": "ヴェルト",
"Xueyi": "雪衣",
"Yanqing": "彦卿",
"Yukong": "御空"
"Yukong": "御空",
"Yunli": "雲璃"
}
},
"DungeonStorage": {
@ -555,11 +558,11 @@
"help": ""
},
"Item_IPC_Work_Permit": {
"name": "キャラクター昇格素材:物理(ブートヒル / ロビン",
"name": "キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃",
"help": ""
},
"Item_Raging_Heart": {
"name": "キャラクター昇格素材:炎(ホタル / ギャラガー",
"name": "キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘",
"help": ""
},
"Item_Dream_Fridge": {

View File

@ -263,10 +263,10 @@
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行迹材料:虚无(丹鼎司)",
"Stagnant_Shadow_Spike": "角色晋阶材料:物理(娜塔莎 / 克拉拉 / 卢卡 / 素裳)",
"Stagnant_Shadow_Perdition": "角色晋阶材料:物理(寒鸦 / 银枝)",
"Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟",
"Stagnant_Shadow_Duty": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃",
"Stagnant_Shadow_Blaze": "角色晋阶材料:火(姬子 / 艾丝妲 / 虎克)",
"Stagnant_Shadow_Scorch": "角色晋阶材料:火(桂乃芬 / 托帕&账账)",
"Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫",
"Stagnant_Shadow_Ire": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘",
"Stagnant_Shadow_Rime": "角色晋阶材料:冰(三月七 / 黑塔 / 杰帕德 / 佩拉)",
"Stagnant_Shadow_Icicle": "角色晋阶材料:冰(彦卿 / 镜流 / 阮•梅)",
"Stagnant_Shadow_Nectar": "角色晋阶材料:冰(米沙)",
@ -403,13 +403,15 @@
"Himeko": "姬子",
"Hook": "虎克",
"Huohuo": "藿藿",
"Jade": "翡翠",
"JingYuan": "景元",
"Jingliu": "镜流",
"Kafka": "卡芙卡",
"Luka": "卢卡",
"Luocha": "罗刹",
"Lynx": "玲可",
"March7th": "三月七",
"March7thPreservation": "三月七•存护",
"March7thTheHunt": "三月七•巡猎",
"Misha": "米沙",
"Natasha": "娜塔莎",
"Pela": "佩拉",
@ -430,7 +432,8 @@
"Welt": "瓦尔特",
"Xueyi": "雪衣",
"Yanqing": "彦卿",
"Yukong": "驭空"
"Yukong": "驭空",
"Yunli": "云璃"
}
},
"DungeonStorage": {
@ -555,11 +558,11 @@
"help": ""
},
"Item_IPC_Work_Permit": {
"name": "角色晋阶材料:物理(波提欧 / 知更鸟",
"name": "角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃",
"help": ""
},
"Item_Raging_Heart": {
"name": "角色晋阶材料:火(流萤 / 加拉赫",
"name": "角色晋阶材料:火(流萤 / 加拉赫 / 椒丘",
"help": ""
},
"Item_Dream_Fridge": {

View File

@ -263,10 +263,10 @@
"Calyx_Crimson_Nihility_Luofu_AlchemyCommission": "行跡材料:虛無(丹鼎司)",
"Stagnant_Shadow_Spike": "角色晉階材料:物理(娜塔莎 / 克拉拉 / 盧卡 / 素裳)",
"Stagnant_Shadow_Perdition": "角色晉階材料:物理(寒鴉 / 銀枝)",
"Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥",
"Stagnant_Shadow_Duty": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃",
"Stagnant_Shadow_Blaze": "角色晉階材料:火(姬子 / 艾絲妲 / 虎克)",
"Stagnant_Shadow_Scorch": "角色晉階材料:火(桂乃芬 / 托帕&帳帳)",
"Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫",
"Stagnant_Shadow_Ire": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘",
"Stagnant_Shadow_Rime": "角色晉階材料:冰(三月七 / 黑塔 / 傑帕德 / 佩拉)",
"Stagnant_Shadow_Icicle": "角色晉階材料:冰(彥卿 / 鏡流 / 阮•梅)",
"Stagnant_Shadow_Nectar": "角色晉階材料:冰(米沙)",
@ -403,13 +403,15 @@
"Himeko": "姬子",
"Hook": "虎克",
"Huohuo": "藿藿",
"Jade": "翡翠",
"JingYuan": "景元",
"Jingliu": "鏡流",
"Kafka": "卡芙卡",
"Luka": "盧卡",
"Luocha": "羅剎",
"Lynx": "玲可",
"March7th": "三月七",
"March7thPreservation": "三月七•存護",
"March7thTheHunt": "三月七•巡獵",
"Misha": "米沙",
"Natasha": "娜塔莎",
"Pela": "佩拉",
@ -430,7 +432,8 @@
"Welt": "瓦爾特",
"Xueyi": "雪衣",
"Yanqing": "彥卿",
"Yukong": "馭空"
"Yukong": "馭空",
"Yunli": "雲璃"
}
},
"DungeonStorage": {
@ -555,11 +558,11 @@
"help": ""
},
"Item_IPC_Work_Permit": {
"name": "角色晉階材料:物理(波提歐 / 知更鳥",
"name": "角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃",
"help": ""
},
"Item_Raging_Heart": {
"name": "角色晉階材料:火(流螢 / 加拉赫",
"name": "角色晉階材料:火(流螢 / 加拉赫 / 椒丘",
"help": ""
},
"Item_Dream_Fridge": {

View File

@ -23,7 +23,7 @@ DICT_SORTED_RANGES = {
Boothill,
Yukong,
TopazNumby,
March7th,
March7thPreservation,
Bronya,
Asta,
Pela,

View File

@ -228,8 +228,17 @@ Jade = CharacterList(
jp='ジェイド',
es='Jade',
)
JingYuan = CharacterList(
Jiaoqiu = CharacterList(
id=26,
name='Jiaoqiu',
cn='椒丘',
cht='椒丘',
en='Jiaoqiu',
jp='椒丘',
es='Jiaoqiu',
)
JingYuan = CharacterList(
id=27,
name='JingYuan',
cn='景元',
cht='景元',
@ -238,7 +247,7 @@ JingYuan = CharacterList(
es='Jing Yuan',
)
Jingliu = CharacterList(
id=27,
id=28,
name='Jingliu',
cn='镜流',
cht='鏡流',
@ -247,7 +256,7 @@ Jingliu = CharacterList(
es='Jingliu',
)
Kafka = CharacterList(
id=28,
id=29,
name='Kafka',
cn='卡芙卡',
cht='卡芙卡',
@ -256,7 +265,7 @@ Kafka = CharacterList(
es='Kafka',
)
Luka = CharacterList(
id=29,
id=30,
name='Luka',
cn='卢卡',
cht='盧卡',
@ -265,7 +274,7 @@ Luka = CharacterList(
es='Luka',
)
Luocha = CharacterList(
id=30,
id=31,
name='Luocha',
cn='罗刹',
cht='羅剎',
@ -274,7 +283,7 @@ Luocha = CharacterList(
es='Luocha',
)
Lynx = CharacterList(
id=31,
id=32,
name='Lynx',
cn='玲可',
cht='玲可',
@ -282,17 +291,26 @@ Lynx = CharacterList(
jp='リンクス',
es='Lynx',
)
March7th = CharacterList(
id=32,
name='March7th',
cn='三月七',
cht='三月七',
en='March 7th',
jp='三月なのか',
es='Siete de Marzo',
March7thPreservation = CharacterList(
id=33,
name='March7thPreservation',
cn='三月七•存护',
cht='三月七•存護',
en='March 7th: Preservation',
jp='三月なのか・存護',
es='Siete de Marzo: Conservación',
)
March7thTheHunt = CharacterList(
id=34,
name='March7thTheHunt',
cn='三月七•巡猎',
cht='三月七•巡獵',
en='March 7th: The Hunt',
jp='三月なのか・巡狩',
es='Siete de Marzo: Cacería',
)
Misha = CharacterList(
id=33,
id=35,
name='Misha',
cn='米沙',
cht='米沙',
@ -301,7 +319,7 @@ Misha = CharacterList(
es='Misha',
)
Natasha = CharacterList(
id=34,
id=36,
name='Natasha',
cn='娜塔莎',
cht='娜塔莎',
@ -310,7 +328,7 @@ Natasha = CharacterList(
es='Natasha',
)
Pela = CharacterList(
id=35,
id=37,
name='Pela',
cn='佩拉',
cht='佩拉',
@ -319,7 +337,7 @@ Pela = CharacterList(
es='Pela',
)
Qingque = CharacterList(
id=36,
id=38,
name='Qingque',
cn='青雀',
cht='青雀',
@ -328,7 +346,7 @@ Qingque = CharacterList(
es='Qingque',
)
Robin = CharacterList(
id=37,
id=39,
name='Robin',
cn='知更鸟',
cht='知更鳥',
@ -337,7 +355,7 @@ Robin = CharacterList(
es='Robin',
)
RuanMei = CharacterList(
id=38,
id=40,
name='RuanMei',
cn='阮•梅',
cht='阮•梅',
@ -346,7 +364,7 @@ RuanMei = CharacterList(
es='Ruan Mei',
)
Sampo = CharacterList(
id=39,
id=41,
name='Sampo',
cn='桑博',
cht='桑博',
@ -355,7 +373,7 @@ Sampo = CharacterList(
es='Sampo',
)
Seele = CharacterList(
id=40,
id=42,
name='Seele',
cn='希儿',
cht='希兒',
@ -364,7 +382,7 @@ Seele = CharacterList(
es='Seele',
)
Serval = CharacterList(
id=41,
id=43,
name='Serval',
cn='希露瓦',
cht='希露瓦',
@ -373,7 +391,7 @@ Serval = CharacterList(
es='Serval',
)
SilverWolf = CharacterList(
id=42,
id=44,
name='SilverWolf',
cn='银狼',
cht='銀狼',
@ -382,7 +400,7 @@ SilverWolf = CharacterList(
es='Silver Wolf',
)
Sparkle = CharacterList(
id=43,
id=45,
name='Sparkle',
cn='花火',
cht='花火',
@ -391,7 +409,7 @@ Sparkle = CharacterList(
es='Sparkle',
)
Sushang = CharacterList(
id=44,
id=46,
name='Sushang',
cn='素裳',
cht='素裳',
@ -400,7 +418,7 @@ Sushang = CharacterList(
es='Sushang',
)
Tingyun = CharacterList(
id=45,
id=47,
name='Tingyun',
cn='停云',
cht='停雲',
@ -409,7 +427,7 @@ Tingyun = CharacterList(
es='Tingyun',
)
TopazNumby = CharacterList(
id=46,
id=48,
name='TopazNumby',
cn='托帕&账账',
cht='托帕&帳帳',
@ -418,7 +436,7 @@ TopazNumby = CharacterList(
es='Topaz y Conti',
)
TrailblazerDestruction = CharacterList(
id=47,
id=49,
name='TrailblazerDestruction',
cn='Trailblazer•毁灭',
cht='Trailblazer•毀滅',
@ -427,7 +445,7 @@ TrailblazerDestruction = CharacterList(
es='Trailblazer: Destrucción',
)
TrailblazerHarmony = CharacterList(
id=48,
id=50,
name='TrailblazerHarmony',
cn='Trailblazer•同谐',
cht='Trailblazer•同諧',
@ -436,7 +454,7 @@ TrailblazerHarmony = CharacterList(
es='Trailblazer: Armonía',
)
TrailblazerPreservation = CharacterList(
id=49,
id=51,
name='TrailblazerPreservation',
cn='Trailblazer•存护',
cht='Trailblazer•存護',
@ -445,7 +463,7 @@ TrailblazerPreservation = CharacterList(
es='Trailblazer: Conservación',
)
Welt = CharacterList(
id=50,
id=52,
name='Welt',
cn='瓦尔特',
cht='瓦爾特',
@ -454,7 +472,7 @@ Welt = CharacterList(
es='Welt',
)
Xueyi = CharacterList(
id=51,
id=53,
name='Xueyi',
cn='雪衣',
cht='雪衣',
@ -463,7 +481,7 @@ Xueyi = CharacterList(
es='Xueyi',
)
Yanqing = CharacterList(
id=52,
id=54,
name='Yanqing',
cn='彦卿',
cht='彥卿',
@ -472,7 +490,7 @@ Yanqing = CharacterList(
es='Yanqing',
)
Yukong = CharacterList(
id=53,
id=55,
name='Yukong',
cn='驭空',
cht='馭空',
@ -480,3 +498,12 @@ Yukong = CharacterList(
jp='御空',
es='Yukong',
)
Yunli = CharacterList(
id=56,
name='Yunli',
cn='云璃',
cht='雲璃',
en='Yunli',
jp='雲璃',
es='Yunli',
)

View File

@ -13,7 +13,6 @@ CHARACTER_HEIGHT = {
'Tingyun': 'Maid',
'Sushang': 'Maid',
'Seele': 'Maid',
'March7th': 'Maid',
'Jingliu': 'Maid',
'Bronya': 'Maid',
'Asta': 'Maid',

View File

@ -18,7 +18,7 @@ COMBAT_SUPPORT_LIST = ButtonWrapper(
share=Button(
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST.png',
area=(39, 645, 65, 669),
search=(19, 625, 85, 689),
search=(32, 643, 72, 683),
color=(204, 206, 206),
button=(39, 645, 65, 669),
),
@ -27,10 +27,10 @@ COMBAT_SUPPORT_LIST_GRID = ButtonWrapper(
name='COMBAT_SUPPORT_LIST_GRID',
share=Button(
file='./assets/share/combat/support/COMBAT_SUPPORT_LIST_GRID.png',
area=(36, 148, 128, 629),
search=(16, 128, 148, 649),
color=(135, 124, 133),
button=(36, 148, 128, 629),
area=(26, 109, 131, 634),
search=(6, 89, 151, 654),
color=(101, 87, 99),
button=(26, 109, 131, 634),
),
)
COMBAT_SUPPORT_LIST_SCROLL = ButtonWrapper(

View File

@ -17,10 +17,10 @@ DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE = ButtonWrapper(
name='DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE',
share=Button(
file='./assets/share/dungeon/ui_rogue/DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE.png',
area=(437, 316, 1169, 378),
search=(417, 296, 1189, 398),
color=(197, 105, 95),
button=(437, 316, 1169, 378),
area=(592, 174, 636, 331),
search=(572, 154, 656, 351),
color=(140, 82, 83),
button=(592, 174, 636, 331),
),
)
LAST_TELEPORT = ButtonWrapper(
@ -47,10 +47,10 @@ SURVIVAL_INDEX_OE_LOADED = ButtonWrapper(
name='SURVIVAL_INDEX_OE_LOADED',
share=Button(
file='./assets/share/dungeon/ui_rogue/SURVIVAL_INDEX_OE_LOADED.png',
area=(473, 207, 498, 232),
search=(468, 193, 503, 283),
color=(185, 135, 74),
button=(473, 207, 498, 232),
area=(455, 208, 485, 338),
search=(460, 238, 480, 268),
color=(130, 116, 91),
button=(455, 208, 485, 338),
),
)
SURVIVAL_INDEX_SU_LOADED = ButtonWrapper(

View File

@ -164,7 +164,7 @@ Calyx_Crimson_The_Hunt_Penacony_SoulGladScorchsandAuditionVenue = DungeonList(
cht='巡獵之蕾•擬造花萼(赤)',
en='Calyx (Crimson): Bud of The Hunt',
jp='疑似花萼(赤)・巡狩の蕾',
es='Cáliz (carmesí): Flor de la Cacería',
es='Flor de la Cacería',
dungeon_id=1022,
plane_id=2033101,
)
@ -208,7 +208,7 @@ Calyx_Crimson_Erudition_Penacony_PenaconyGrandTheater = DungeonList(
cht='智識之蕾•擬造花萼(赤)',
en='Calyx (Crimson): Bud of Erudition',
jp='疑似花萼(赤)・知恵の蕾',
es='Cáliz (carmesí): Flor de la Erudición',
es='Flor de la Erudición',
dungeon_id=1023,
plane_id=2033201,
)
@ -450,7 +450,7 @@ Stagnant_Shadow_Duty = DungeonList(
cht='職司之形•凝滯虛影',
en='Stagnant Shadow: Shape of Duty',
jp='凝結虚影・職掌の形',
es='Sombra paralizada: Forma del deber',
es='Forma del deber',
dungeon_id=1118,
plane_id=2032101,
)
@ -560,7 +560,7 @@ Cavern_of_Corrosion_Path_of_Cavalier = DungeonList(
cht='勇騎之徑•侵蝕隧洞',
en='Cavern of Corrosion: Path of Cavalier',
jp='侵蝕トンネル・勇騎の路',
es='Caverna de la corrosión: Senda del caballero',
es='Senda del caballero',
dungeon_id=1210,
plane_id=2033201,
)
@ -615,7 +615,7 @@ Echo_of_War_Salutations_of_Ashen_Dreams = DungeonList(
cht='塵夢的讚禮•歷戰餘響',
en='Echo of War: Salutations of Ashen Dreams',
jp='歴戦余韻・現世の夢の礼賛',
es='Ecos de la guerra: Tributo del sueño ceniciento',
es='Tributo del sueño ceniciento',
dungeon_id=1305,
plane_id=2033201,
)
@ -714,7 +714,7 @@ Divergent_Universe_Eternal_Comedy = DungeonList(
cht='永恆笑劇•差分宇宙',
en='Divergent Universe: Eternal Comedy',
jp='階差宇宙・永遠の喜劇',
es='Universo Diferenciado: Comedia eterna',
es='Comedia eterna',
dungeon_id=300,
plane_id=0,
)
@ -725,7 +725,7 @@ Divergent_Universe_To_Sweet_Dreams = DungeonList(
cht='伴你入眠•差分宇宙',
en='Divergent Universe: To Sweet Dreams',
jp='階差宇宙・寄り添い眠る',
es='Hasta los dulces sueños: Universo Diferenciado',
es='Hasta los dulces sueños',
dungeon_id=290,
plane_id=0,
)
@ -736,7 +736,7 @@ Divergent_Universe_Pouring_Blades = DungeonList(
cht='天劍如雨•差分宇宙',
en='Divergent Universe: Pouring Blades',
jp='階差宇宙・剣の雨',
es='Lluvia de espadas: Universo Diferenciado',
es='Lluvia de espadas',
dungeon_id=280,
plane_id=0,
)
@ -747,7 +747,7 @@ Divergent_Universe_Fruit_of_Evil = DungeonList(
cht='孽果盤生•差分宇宙',
en='Divergent Universe: Fruit of Evil',
jp='階差宇宙・渦巻く罪',
es='Fruta del desastre: Universo Diferenciado',
es='Fruta del desastre',
dungeon_id=270,
plane_id=0,
)
@ -758,7 +758,7 @@ Divergent_Universe_Permafrost = DungeonList(
cht='百年凍土•差分宇宙',
en='Divergent Universe: Permafrost',
jp='階差宇宙・永久凍土',
es='Permafrost: Universo Diferenciado',
es='Permafrost',
dungeon_id=260,
plane_id=0,
)
@ -769,7 +769,7 @@ Divergent_Universe_Gentle_Words = DungeonList(
cht='溫柔話語•差分宇宙',
en='Divergent Universe: Gentle Words',
jp='階差宇宙・優しい言葉',
es='Palabras amables: Universo Diferenciado',
es='Palabras amables',
dungeon_id=250,
plane_id=0,
)
@ -780,7 +780,7 @@ Divergent_Universe_Smelted_Heart = DungeonList(
cht='浴火鋼心•差分宇宙',
en='Divergent Universe: Smelted Heart',
jp='階差宇宙・鋼の意志',
es='Corazón de fundición: Universo Diferenciado',
es='Corazón de fundición',
dungeon_id=240,
plane_id=0,
)
@ -791,7 +791,7 @@ Divergent_Universe_Untoppled_Walls = DungeonList(
cht='堅城不倒•差分宇宙',
en='Divergent Universe: Untoppled Walls',
jp='階差宇宙・不動の砦',
es='Muros inquebrantables: Universo Diferenciado',
es='Muros inquebrantables',
dungeon_id=230,
plane_id=0,
)

View File

@ -150,18 +150,18 @@ Stagnant_Shadow_Roast = DungeonDetailed(
Stagnant_Shadow_Ire = DungeonDetailed(
id=17,
name='Stagnant_Shadow_Ire',
cn='角色晋阶材料:火(流萤 / 加拉赫',
cht='角色晉階材料:火(流螢 / 加拉赫',
en='Ascension: Fire (Firefly / Gallagher)',
jp='キャラクター昇格素材:炎(ホタル / ギャラガー',
es='Ascension: Fuego (Luciérnaga / Gallagher)',
cn='角色晋阶材料:火(流萤 / 加拉赫 / 椒丘',
cht='角色晉階材料:火(流螢 / 加拉赫 / 椒丘',
en='Ascension: Fire (Firefly / Gallagher / Jiaoqiu)',
jp='キャラクター昇格素材:炎(ホタル / ギャラガー / 椒丘',
es='Ascension: Fuego (Luciérnaga / Gallagher / Jiaoqiu)',
)
Stagnant_Shadow_Duty = DungeonDetailed(
id=18,
name='Stagnant_Shadow_Duty',
cn='角色晋阶材料:物理(波提欧 / 知更鸟',
cht='角色晉階材料:物理(波提歐 / 知更鳥',
en='Ascension: Physical (Boothill / Robin)',
jp='キャラクター昇格素材:物理(ブートヒル / ロビン',
es='Ascension: Físico (Boothill / Robin)',
cn='角色晋阶材料:物理(波提欧 / 知更鸟 / 云璃',
cht='角色晉階材料:物理(波提歐 / 知更鳥 / 雲璃',
en='Ascension: Physical (Boothill / Robin / Yunli)',
jp='キャラクター昇格素材:物理(ブートヒル / ロビン / 雲璃',
es='Ascension: Físico (Boothill / Robin / Yunli)',
)

View File

@ -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"]'
# 弹出侧边栏的 节点信息
@ -159,6 +159,16 @@ class LoginAndroidCloud(ModuleBase):
season_pass = int(res.group(1))
else:
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
logger.info(f'Remain paid: {text}')

View File

@ -102,12 +102,12 @@ Rogue_DomainTransaction = MapPlane(
world_id=-2,
plane_id=7,
)
Penacony_RadiantFeldspar = MapPlane(
Penacony_TheRadiantFeldspar = MapPlane(
id=10,
name='Penacony_RadiantFeldspar',
name='Penacony_TheRadiantFeldspar',
cn='晖长石号',
cht='暉長石號',
en='Radiant Feldspar',
en='The Radiant Feldspar',
jp='暉長石号',
es='Feldespato Radiante',
world_id=3,
@ -454,8 +454,19 @@ Luofu_ScalegorgeWaterscape = MapPlane(
world_id=2,
plane_id=2023201,
)
Penacony_TheReverieReality = MapPlane(
Luofu_TheShacklingPrison = MapPlane(
id=42,
name='Luofu_TheShacklingPrison',
cn='幽囚狱',
cht='幽囚獄',
en='The Shackling Prison',
jp='幽囚獄',
es='Prisión de los encadenados',
world_id=2,
plane_id=2024101,
)
Penacony_TheReverieReality = MapPlane(
id=43,
name='Penacony_TheReverieReality',
cn='「白日梦」酒店-现实',
cht='「白日夢」飯店-現實',
@ -466,7 +477,7 @@ Penacony_TheReverieReality = MapPlane(
plane_id=1030501,
)
Penacony_GoldenHour = MapPlane(
id=43,
id=44,
name='Penacony_GoldenHour',
cn='黄金的时刻',
cht='黃金的時刻',
@ -477,7 +488,7 @@ Penacony_GoldenHour = MapPlane(
plane_id=1030101,
)
Penacony_DreamEdge = MapPlane(
id=44,
id=45,
name='Penacony_DreamEdge',
cn='筑梦边境',
cht='築夢邊境',
@ -488,7 +499,7 @@ Penacony_DreamEdge = MapPlane(
plane_id=2031301,
)
Penacony_AChildDream = MapPlane(
id=45,
id=46,
name='Penacony_AChildDream',
cn='稚子的梦',
cht='稚子的夢',
@ -499,7 +510,7 @@ Penacony_AChildDream = MapPlane(
plane_id=2031201,
)
Penacony_TheReverieDreamscape = MapPlane(
id=46,
id=47,
name='Penacony_TheReverieDreamscape',
cn='「白日梦」酒店-梦境',
cht='「白日夢」飯店-夢境',
@ -510,7 +521,7 @@ Penacony_TheReverieDreamscape = MapPlane(
plane_id=2031101,
)
Penacony_DewlightPavilion = MapPlane(
id=47,
id=48,
name='Penacony_DewlightPavilion',
cn='朝露公馆',
cht='朝露公館',
@ -521,7 +532,7 @@ Penacony_DewlightPavilion = MapPlane(
plane_id=2032201,
)
Penacony_ClockStudiosThemePark = MapPlane(
id=48,
id=49,
name='Penacony_ClockStudiosThemePark',
cn='克劳克影视乐园',
cht='克勞克影視樂園',
@ -532,7 +543,7 @@ Penacony_ClockStudiosThemePark = MapPlane(
plane_id=2032101,
)
Penacony_DreamfluxReef = MapPlane(
id=49,
id=50,
name='Penacony_DreamfluxReef',
cn='流梦礁',
cht='流夢礁',
@ -543,7 +554,7 @@ Penacony_DreamfluxReef = MapPlane(
plane_id=1030401,
)
Penacony_SoulGladScorchsandAuditionVenue = MapPlane(
id=50,
id=51,
name='Penacony_SoulGladScorchsandAuditionVenue',
cn='苏乐达热砂海选会场',
cht='蘇樂達熱砂海選會場',
@ -554,7 +565,7 @@ Penacony_SoulGladScorchsandAuditionVenue = MapPlane(
plane_id=2033101,
)
Penacony_PenaconyGrandTheater = MapPlane(
id=51,
id=52,
name='Penacony_PenaconyGrandTheater',
cn='匹诺康尼大剧院',
cht='匹諾康尼大劇院',

View File

@ -20,7 +20,7 @@ class Ornament(OrnamentCombat):
# Check save file before entering
if self.image_color_count(
DIVERGENT_UNIVERSE_SAVE_UNAVAILABLE,
color=(195, 89, 79), threshold=221, count=1000,
color=(140, 19, 26), threshold=221, count=1000,
):
logger.error(
'Divergent Universe save unavailable, '

View File

@ -210,3 +210,39 @@ Fountain_of_Youth = RogueBonus(
jp='不老の泉',
es='Fuente de la juventud',
)
Reimbursement_Form = RogueBonus(
id=24,
name='Reimbursement_Form',
cn='报销单',
cht='報銷單',
en='Reimbursement Form',
jp='清算書',
es='Formulario de reembolso',
)
Sea_of_Forgetfulness = RogueBonus(
id=25,
name='Sea_of_Forgetfulness',
cn='遗忘海',
cht='遺忘海',
en='Sea of Forgetfulness',
jp='忘却の海',
es='Mar del olvido',
)
Phenomenal_Field = RogueBonus(
id=26,
name='Phenomenal_Field',
cn='现象场',
cht='現象場',
en='Phenomenal Field',
jp='現象の場',
es='Campo fenomenal',
)
Lying_Cap = RogueBonus(
id=27,
name='Lying_Cap',
cn='说谎帽',
cht='說謊帽',
en='Lying Cap',
jp='ペテンハット',
es='Sombrero mentiroso',
)

View File

@ -835,7 +835,7 @@ Pick_Sal = RogueEventOption(
id=93,
name='Pick_Sal',
cn='选择萨里。',
cht='選擇薩',
cht='選擇薩',
en='Pick Sal.',
jp='サリを選ぶ',
es='Elige a Sal.',
@ -862,7 +862,7 @@ Let_Sal_out = RogueEventOption(
id=96,
name='Let_Sal_out',
cn='让萨里出来吧。',
cht='讓薩出來吧。',
cht='讓薩出來吧。',
en='Let Sal out.',
jp='サリに出てきてもらう',
es='Deja salir a Sal.',
@ -2319,8 +2319,8 @@ You_can_also_smash_the_cup = RogueEventOption(
I_m_voting_for_Oswaldo_Schneider = RogueEventOption(
id=258,
name='I_m_voting_for_Oswaldo_Schneider',
cn='我要为「奥瓦尔多·施耐德」的竞选投票!',
cht='我要為「奧瓦爾多•施耐德」的競選投票!',
cn='我要为「奥瓦尔多·施耐德」的竞选投票!',
cht='我要為「奧瓦爾多•施耐德」的競選投票!',
en='I\'m voting for "Oswaldo Schneider"!',
jp='「オスワルド・シュナイダー」に投票する!',
es='¡Voto por Oswaldo Schneider!',

View File

@ -217,7 +217,7 @@ Saleo_I = RogueEventTitle(
id=22,
name='Saleo_I',
cn='萨里奥(其一)',
cht='奧(其一)',
cht='奧(其一)',
en='Saleo (I)',
jp='サリオその1',
es='Saleo (I)',
@ -227,7 +227,7 @@ Sal_II = RogueEventTitle(
id=23,
name='Sal_II',
cn='萨里(其二)',
cht='(其二)',
cht='(其二)',
en='Sal (II)',
jp='サリその2',
es='Sal (II)',
@ -237,7 +237,7 @@ Leo_III = RogueEventTitle(
id=24,
name='Leo_III',
cn='里奥(其三)',
cht='奧(其三)',
cht='奧(其三)',
en='Leo (III)',
jp='リオその3',
es='Leo (III)',
@ -1119,7 +1119,7 @@ Insights_from_the_Universal_Dancer = RogueEventTitle(
cn='寰宇舞者的启示',
cht='寰宇舞者的啟示',
en='Insights from the Universal Dancer',
jp='世界の踊り手の啓示',
jp='宇宙の踊り手の啓示',
es='Reflexiones de la bailarina universal',
option_ids=[323, 324],
)