mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-09 05:25:53 +08:00
✨ 新增我的背包
This commit is contained in:
parent
f079984fca
commit
4c3f74c4e7
19
GenshinUID/genshinuid_compute/__init__.py
Normal file
19
GenshinUID/genshinuid_compute/__init__.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from gsuid_core.sv import SV
|
||||||
|
from gsuid_core.bot import Bot
|
||||||
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.utils.error_reply import UID_HINT
|
||||||
|
|
||||||
|
from ..utils.convert import get_uid
|
||||||
|
from .get_my_pack import draw_my_pack
|
||||||
|
|
||||||
|
sv_pack = SV('查询背包')
|
||||||
|
|
||||||
|
|
||||||
|
@sv_pack.on_command(('我的背包'))
|
||||||
|
async def my_bag(bot: Bot, ev: Event):
|
||||||
|
uid, user_id = await get_uid(bot, ev, True)
|
||||||
|
if not uid:
|
||||||
|
return await bot.send(UID_HINT)
|
||||||
|
|
||||||
|
im = await draw_my_pack(uid, ev)
|
||||||
|
await bot.send(im)
|
4922
GenshinUID/genshinuid_compute/aa.json
Normal file
4922
GenshinUID/genshinuid_compute/aa.json
Normal file
File diff suppressed because it is too large
Load Diff
82
GenshinUID/genshinuid_compute/get_my_pack.py
Normal file
82
GenshinUID/genshinuid_compute/get_my_pack.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.utils.cache import gs_cache
|
||||||
|
from gsuid_core.utils.error_reply import get_error
|
||||||
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
|
|
||||||
|
from .utils import get_all_char_dict
|
||||||
|
from ..utils.fonts.genshin_fonts import gs_font_20
|
||||||
|
from ..utils.mys_api import mys_api, get_base_data
|
||||||
|
from ..utils.resource.download_url import download
|
||||||
|
from ..utils.resource.RESOURCE_PATH import ICON_PATH
|
||||||
|
from ..utils.image.image_tools import (
|
||||||
|
get_v4_bg,
|
||||||
|
add_footer,
|
||||||
|
get_avatar,
|
||||||
|
get_v4_title,
|
||||||
|
)
|
||||||
|
|
||||||
|
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||||
|
|
||||||
|
|
||||||
|
@gs_cache(1800)
|
||||||
|
async def draw_my_pack(uid: str, ev: Event) -> Union[str, bytes]:
|
||||||
|
raw = await get_all_char_dict()
|
||||||
|
data = await mys_api.get_batch_compute_info(uid, raw)
|
||||||
|
|
||||||
|
if isinstance(data, int):
|
||||||
|
return get_error(data)
|
||||||
|
|
||||||
|
raw_data = await get_base_data(uid)
|
||||||
|
if isinstance(raw_data, (str, bytes)):
|
||||||
|
return raw_data
|
||||||
|
elif isinstance(raw_data, (bytearray, memoryview)):
|
||||||
|
return bytes(raw_data)
|
||||||
|
|
||||||
|
char_pic = await get_avatar(ev, 377, False)
|
||||||
|
title_img = get_v4_title(char_pic, uid, raw_data)
|
||||||
|
# title_img = title_img.resize((int(1680 * 0.6), int(700 * 0.6)))
|
||||||
|
|
||||||
|
overall_consume = data['overall_consume']
|
||||||
|
bag_len = len(overall_consume)
|
||||||
|
|
||||||
|
w = 1680
|
||||||
|
n = 14
|
||||||
|
up = 713
|
||||||
|
h = (((bag_len - 1) // n) + 1) * 145 + up + 92
|
||||||
|
ox, oy = 110, 145
|
||||||
|
|
||||||
|
img = get_v4_bg(w, h)
|
||||||
|
|
||||||
|
img.paste(title_img, (0, 0), title_img)
|
||||||
|
|
||||||
|
for index, item in enumerate(overall_consume):
|
||||||
|
item_bg = Image.open(TEXT_PATH / 'one.png')
|
||||||
|
item_name = f'UI_ItemIcon_{item["id"]}.png'
|
||||||
|
item_path = ICON_PATH / item_name
|
||||||
|
if not item_path.exists():
|
||||||
|
await download(item['icon'], 8, item_name)
|
||||||
|
item_img = Image.open(item_path)
|
||||||
|
item_img = item_img.resize((80, 80)).convert('RGBA')
|
||||||
|
item_bg.paste(item_img, (15, 20), item_img)
|
||||||
|
item_draw = ImageDraw.Draw(item_bg)
|
||||||
|
bag_num = item['num'] - item['lack_num']
|
||||||
|
item_draw.text(
|
||||||
|
(55, 125),
|
||||||
|
f'{bag_num}',
|
||||||
|
font=gs_font_20,
|
||||||
|
fill='white',
|
||||||
|
anchor='mm',
|
||||||
|
)
|
||||||
|
img.paste(
|
||||||
|
item_bg,
|
||||||
|
(65 + (index % n) * ox, up + (index // n) * oy),
|
||||||
|
item_bg,
|
||||||
|
)
|
||||||
|
|
||||||
|
img = add_footer(img)
|
||||||
|
|
||||||
|
return await convert_img(img)
|
BIN
GenshinUID/genshinuid_compute/texture2d/one.png
Normal file
BIN
GenshinUID/genshinuid_compute/texture2d/one.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 823 B |
157
GenshinUID/genshinuid_compute/utils.py
Normal file
157
GenshinUID/genshinuid_compute/utils.py
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
from typing import Dict, List, Union
|
||||||
|
|
||||||
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
|
from ..utils.map.GS_MAP_PATH import (
|
||||||
|
avatarId2Name,
|
||||||
|
avatarName2Weapon,
|
||||||
|
weaponId2Name_data,
|
||||||
|
)
|
||||||
|
from ..utils.map.name_covert import (
|
||||||
|
name_to_element,
|
||||||
|
avatar_id_to_name,
|
||||||
|
weapon_id_to_name,
|
||||||
|
avatar_id_to_skill_groupId,
|
||||||
|
)
|
||||||
|
|
||||||
|
ELEMENT_MAP = {
|
||||||
|
"Pyro": 1,
|
||||||
|
"Anemo": 2,
|
||||||
|
"Geo": 3,
|
||||||
|
"Dendro": 4,
|
||||||
|
"Electro": 5,
|
||||||
|
"Hydro": 6,
|
||||||
|
"Cryo": 7,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_all_char_dict() -> List[Dict]:
|
||||||
|
result = []
|
||||||
|
weapon_list: Dict[str, List[str]] = {
|
||||||
|
'单手剑': [],
|
||||||
|
'双手剑': [],
|
||||||
|
'弓': [],
|
||||||
|
'法器': [],
|
||||||
|
'长柄武器': [],
|
||||||
|
}
|
||||||
|
|
||||||
|
for weapon_id in weaponId2Name_data:
|
||||||
|
if int(weapon_id[2]) <= 3:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if weapon_id in ['11419', '11420', '11421', '11429', '15513']:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if weapon_id.startswith('11'):
|
||||||
|
weapon_list['单手剑'].append(weapon_id)
|
||||||
|
elif weapon_id.startswith('12'):
|
||||||
|
weapon_list['双手剑'].append(weapon_id)
|
||||||
|
elif weapon_id.startswith('13'):
|
||||||
|
weapon_list['长柄武器'].append(weapon_id)
|
||||||
|
elif weapon_id.startswith('14'):
|
||||||
|
weapon_list['法器'].append(weapon_id)
|
||||||
|
elif weapon_id.startswith('15'):
|
||||||
|
weapon_list['弓'].append(weapon_id)
|
||||||
|
|
||||||
|
for char_id in avatarId2Name:
|
||||||
|
if char_id in ['10000095']:
|
||||||
|
continue
|
||||||
|
|
||||||
|
char_name = await avatar_id_to_name(char_id)
|
||||||
|
if char_name not in avatarName2Weapon:
|
||||||
|
continue
|
||||||
|
char_weapon_type = avatarName2Weapon[char_name]
|
||||||
|
if weapon_list[char_weapon_type]:
|
||||||
|
weapon = weapon_list[char_weapon_type].pop()
|
||||||
|
else:
|
||||||
|
weapon = 0
|
||||||
|
d = await char_id_to_compute_dict(
|
||||||
|
char_id,
|
||||||
|
weapon_id=weapon,
|
||||||
|
)
|
||||||
|
if d is not None:
|
||||||
|
result.append(d)
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
with open(Path(__file__).parent / 'aa.json', 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(result, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
async def char_id_to_compute_dict(
|
||||||
|
char_id: Union[str, int],
|
||||||
|
current_level: int = 1,
|
||||||
|
target_level: int = 90,
|
||||||
|
skill1_current_level: int = 1,
|
||||||
|
skill1_target_level: int = 10,
|
||||||
|
skill2_current_level: int = 1,
|
||||||
|
skill2_target_level: int = 10,
|
||||||
|
skill3_current_level: int = 1,
|
||||||
|
skill3_target_level: int = 10,
|
||||||
|
weapon_id: Union[str, int] = 0,
|
||||||
|
weapon_current_level: int = 1,
|
||||||
|
weapon_target_level: int = 90,
|
||||||
|
):
|
||||||
|
char_id = str(char_id)
|
||||||
|
char_name = await avatar_id_to_name(char_id)
|
||||||
|
element = await name_to_element(char_name)
|
||||||
|
element_id = ELEMENT_MAP[element]
|
||||||
|
|
||||||
|
if char_id in ['10000005', '10000001', '10000007']:
|
||||||
|
return None
|
||||||
|
|
||||||
|
skill_list = await avatar_id_to_skill_groupId(char_id)
|
||||||
|
if not skill_list:
|
||||||
|
logger.debug(f'[char_id_to_compute_dict] {char_id}')
|
||||||
|
raise ValueError("[char_id_to_compute_dict] 未找到该角色技能")
|
||||||
|
|
||||||
|
skill_data = []
|
||||||
|
skill_level = [
|
||||||
|
[skill1_current_level, skill1_target_level],
|
||||||
|
[skill2_current_level, skill2_target_level],
|
||||||
|
[skill3_current_level, skill3_target_level],
|
||||||
|
]
|
||||||
|
|
||||||
|
n = 0
|
||||||
|
for skill_id in skill_list:
|
||||||
|
if skill_id.endswith(('1', '2', '9')):
|
||||||
|
skill_data.append(
|
||||||
|
{
|
||||||
|
"id": skill_id,
|
||||||
|
"group_id": skill_id,
|
||||||
|
"name": skill_list[skill_id],
|
||||||
|
"max_level": 10,
|
||||||
|
"levelRange": skill_level[n],
|
||||||
|
"level_current": skill_level[n][0],
|
||||||
|
"level_target": skill_level[n][1],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
n += 1
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"avatar_id": int(char_id),
|
||||||
|
"avatar_level_current": current_level,
|
||||||
|
"avatar_level_target": target_level,
|
||||||
|
"element_attr_id": element_id,
|
||||||
|
"level": 5,
|
||||||
|
"name": char_name,
|
||||||
|
"skill_list": skill_data,
|
||||||
|
}
|
||||||
|
|
||||||
|
if weapon_id != 0:
|
||||||
|
data['weapon'] = {
|
||||||
|
"id": int(weapon_id),
|
||||||
|
"name": await weapon_id_to_name(str(weapon_id)),
|
||||||
|
"weapon_cat_id": 1,
|
||||||
|
"weapon_level": 5,
|
||||||
|
"max_level": 90,
|
||||||
|
"is_recommend": False,
|
||||||
|
"levelRange": [weapon_current_level, weapon_target_level],
|
||||||
|
"level_current": weapon_current_level,
|
||||||
|
"level_target": weapon_target_level,
|
||||||
|
}
|
||||||
|
|
||||||
|
return data
|
@ -40,6 +40,8 @@ avatarId2Name_fileName = f'avatarId2Name_mapping_{version}.json'
|
|||||||
enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json'
|
enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json'
|
||||||
avatarId2Star_fileName = f'avatarId2Star_mapping_{version}.json'
|
avatarId2Star_fileName = f'avatarId2Star_mapping_{version}.json'
|
||||||
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
||||||
|
avatarId2SkillList_fileName = f'avatarId2SkillList_mapping_{version}.json'
|
||||||
|
weaponId2Name_fileName = f'weaponId2Name_mapping_{version}.json'
|
||||||
|
|
||||||
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
||||||
|
|
||||||
@ -72,6 +74,149 @@ BETA_CHAR = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def weaponId2Name():
|
||||||
|
result = {}
|
||||||
|
print('正在执行weaponId2Name')
|
||||||
|
with open(
|
||||||
|
DATA_PATH / 'WeaponExcelConfigData.json',
|
||||||
|
'r',
|
||||||
|
encoding='UTF-8',
|
||||||
|
) as f:
|
||||||
|
weapon_data = json.load(f)
|
||||||
|
|
||||||
|
for weapon in weapon_data:
|
||||||
|
if str(weapon['nameTextMapHash']) in raw_data:
|
||||||
|
result[weapon['id']] = raw_data[str(weapon['nameTextMapHash'])]
|
||||||
|
|
||||||
|
with open(
|
||||||
|
MAP_PATH / weaponId2Name_fileName,
|
||||||
|
'w',
|
||||||
|
encoding='UTF-8',
|
||||||
|
) as f:
|
||||||
|
json.dump(result, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
|
|
||||||
|
async def avatarId2SkillGroupList():
|
||||||
|
result = {}
|
||||||
|
print('正在执行avatarId2SkillList')
|
||||||
|
with open(
|
||||||
|
MAP_PATH / f'enName2AvatarID_mapping_{version}.json',
|
||||||
|
'r',
|
||||||
|
encoding='UTF-8',
|
||||||
|
) as f:
|
||||||
|
en_name = json.load(f)
|
||||||
|
|
||||||
|
with open(
|
||||||
|
DATA_PATH / 'AvatarSkillExcelConfigData.json',
|
||||||
|
'r',
|
||||||
|
encoding='UTF-8',
|
||||||
|
) as f:
|
||||||
|
skill_data = json.load(f)
|
||||||
|
|
||||||
|
for skill in skill_data:
|
||||||
|
if 'proudSkillGroupId' in skill:
|
||||||
|
if skill['abilityName']:
|
||||||
|
_name = skill['skillIcon'].split('_')[2]
|
||||||
|
count = skill['abilityName'].count('_')
|
||||||
|
|
||||||
|
if 'Diluc' in skill['abilityName']:
|
||||||
|
name = 'Diluc'
|
||||||
|
elif count <= 1:
|
||||||
|
name = skill['abilityName'].split('_')[0]
|
||||||
|
elif count >= 3:
|
||||||
|
if skill['abilityName'].split('_')[1] == _name:
|
||||||
|
name = skill['abilityName'].split('_')[1]
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
name = skill['abilityName'].split('_')[1]
|
||||||
|
|
||||||
|
if (
|
||||||
|
_name != name
|
||||||
|
and skill['skillIcon'].count('_') > 2
|
||||||
|
and 'Catalyst' not in skill['skillIcon']
|
||||||
|
):
|
||||||
|
print(_name)
|
||||||
|
print(name)
|
||||||
|
continue
|
||||||
|
|
||||||
|
else:
|
||||||
|
name = skill['skillIcon'].split('_')[2]
|
||||||
|
|
||||||
|
if not skill['skillIcon'].startswith(
|
||||||
|
('Skill_A', 'Skill_S', 'Skill_E')
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if name not in en_name:
|
||||||
|
name = name.split(' ')[-1]
|
||||||
|
for _en in en_name:
|
||||||
|
en = _en.split(' ')[-1]
|
||||||
|
if en == 'Jean':
|
||||||
|
en = 'Qin'
|
||||||
|
elif en == 'Baizhu':
|
||||||
|
en = 'Baizhuer'
|
||||||
|
elif en == 'Alhaitham':
|
||||||
|
en = 'Alhatham'
|
||||||
|
elif en == 'Jin':
|
||||||
|
en = 'Yunjin'
|
||||||
|
elif en == 'Miko':
|
||||||
|
en = 'Yae'
|
||||||
|
elif en == 'Heizou':
|
||||||
|
en = 'Heizo'
|
||||||
|
elif en == 'Amber':
|
||||||
|
en = 'Ambor'
|
||||||
|
elif en == 'Noelle':
|
||||||
|
en = 'Noel'
|
||||||
|
elif en == 'Yanfei':
|
||||||
|
en = 'Feiyan'
|
||||||
|
elif en == 'Shogun':
|
||||||
|
en = 'Shougun'
|
||||||
|
elif en == 'Lynette':
|
||||||
|
en = 'Linette'
|
||||||
|
elif en == 'Lyney':
|
||||||
|
en = 'Liney'
|
||||||
|
elif en == 'Tao':
|
||||||
|
en = 'Hutao'
|
||||||
|
elif en == 'Thoma':
|
||||||
|
en = 'Tohma'
|
||||||
|
elif en == 'Kirara':
|
||||||
|
en = 'Momoka'
|
||||||
|
elif en == 'Xianyun':
|
||||||
|
en = 'Liuyun'
|
||||||
|
if name == en:
|
||||||
|
avatar_id = en_name[_en]
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if not name.startswith('Player'):
|
||||||
|
print(name)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
avatar_id = en_name[name]
|
||||||
|
|
||||||
|
if str(skill["nameTextMapHash"]) in raw_data:
|
||||||
|
skill_name = raw_data[str(skill["nameTextMapHash"])]
|
||||||
|
else:
|
||||||
|
skill_name = ''
|
||||||
|
|
||||||
|
if avatar_id not in result:
|
||||||
|
result[avatar_id] = {}
|
||||||
|
|
||||||
|
result[avatar_id][skill['proudSkillGroupId']] = skill_name
|
||||||
|
|
||||||
|
result['10000036'] = {
|
||||||
|
"3631": "普通攻击·灭邪四式",
|
||||||
|
"3632": "灵刃·重华叠霜",
|
||||||
|
"3639": "灵刃·云开星落",
|
||||||
|
}
|
||||||
|
with open(
|
||||||
|
MAP_PATH / f'avatarId2SkillList_mapping_{version}.json',
|
||||||
|
'w',
|
||||||
|
encoding='UTF-8',
|
||||||
|
) as f:
|
||||||
|
json.dump(result, f, indent=4, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
async def monster2map():
|
async def monster2map():
|
||||||
print('正在执行monster2map')
|
print('正在执行monster2map')
|
||||||
monster_list = await get_ambr_monster_list()
|
monster_list = await get_ambr_monster_list()
|
||||||
@ -335,14 +480,14 @@ async def artifact2attrJson() -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
await monster2map()
|
|
||||||
await download_new_file()
|
|
||||||
global raw_data
|
global raw_data
|
||||||
try:
|
try:
|
||||||
with open(DATA_PATH / 'TextMapCHS.json', 'r', encoding='UTF-8') as f:
|
with open(DATA_PATH / 'TextMapCHS.json', 'r', encoding='UTF-8') as f:
|
||||||
raw_data = json.load(f)
|
raw_data = json.load(f)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
await monster2map()
|
||||||
|
await download_new_file()
|
||||||
await avatarId2NameJson()
|
await avatarId2NameJson()
|
||||||
await avatarName2ElementJson()
|
await avatarName2ElementJson()
|
||||||
await weaponHash2NameJson()
|
await weaponHash2NameJson()
|
||||||
@ -350,6 +495,8 @@ async def main():
|
|||||||
await talentId2NameJson()
|
await talentId2NameJson()
|
||||||
await weaponHash2TypeJson()
|
await weaponHash2TypeJson()
|
||||||
await artifact2attrJson()
|
await artifact2attrJson()
|
||||||
|
await weaponId2Name()
|
||||||
|
await avatarId2SkillGroupList()
|
||||||
|
|
||||||
|
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
|
@ -99,7 +99,7 @@ def download_namecard_pic():
|
|||||||
elif en == 'Jin':
|
elif en == 'Jin':
|
||||||
en = 'Yunjin'
|
en = 'Yunjin'
|
||||||
elif en == 'Miko':
|
elif en == 'Miko':
|
||||||
en = 'Yae1'
|
en = 'Yae'
|
||||||
elif en == 'Heizou':
|
elif en == 'Heizou':
|
||||||
en = 'Heizo'
|
en = 'Heizo'
|
||||||
elif en == 'Amber':
|
elif en == 'Amber':
|
||||||
|
@ -62,8 +62,14 @@ def get_v4_title(avatar: Image.Image, uid: str, title_data: IndexData):
|
|||||||
return title
|
return title
|
||||||
|
|
||||||
|
|
||||||
def add_footer(img: Image.Image):
|
def add_footer(img: Image.Image, w: int = 0):
|
||||||
footer = Image.open(TEXT_PATH / 'footer.png')
|
footer = Image.open(TEXT_PATH / 'footer.png')
|
||||||
|
|
||||||
|
if w != 0:
|
||||||
|
footer = footer.resize(
|
||||||
|
(w, int(footer.size[1] * w / footer.size[0])),
|
||||||
|
)
|
||||||
|
|
||||||
x, y = (
|
x, y = (
|
||||||
int((img.size[0] - footer.size[0]) / 2),
|
int((img.size[0] - footer.size[0]) / 2),
|
||||||
img.size[1] - footer.size[1] - 20,
|
img.size[1] - footer.size[1] - 20,
|
||||||
|
@ -21,6 +21,8 @@ enName2Id_fileName = f'enName2AvatarID_mapping_{version}.json'
|
|||||||
icon2Name_fileName = f'icon2Name_mapping_{version}.json'
|
icon2Name_fileName = f'icon2Name_mapping_{version}.json'
|
||||||
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
avatarName2Weapon_fileName = f'avatarName2Weapon_mapping_{version}.json'
|
||||||
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
monster2entry_fileName = f'monster2entry_mapping_{version}.json'
|
||||||
|
avatarId2SkillList_fileName = f'avatarId2SkillList_mapping_{version}.json'
|
||||||
|
weaponId2Name_fileName = f'weaponId2Name_mapping_{version}.json'
|
||||||
EXMonster_fileName = 'ExtraMonster.json'
|
EXMonster_fileName = 'ExtraMonster.json'
|
||||||
|
|
||||||
|
|
||||||
@ -79,3 +81,11 @@ with open(MAP / EXMonster_fileName, 'r', encoding='utf8') as f:
|
|||||||
|
|
||||||
with open(MAP / monster2entry_fileName, 'r', encoding='utf8') as f:
|
with open(MAP / monster2entry_fileName, 'r', encoding='utf8') as f:
|
||||||
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||||
|
|
||||||
|
with open(MAP / avatarId2SkillList_fileName, 'r', encoding='utf8') as f:
|
||||||
|
avatarId2SkillList_data = msgjson.decode(
|
||||||
|
f.read(), type=Dict[str, Dict[str, str]]
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(MAP / weaponId2Name_fileName, 'r', encoding='utf8') as f:
|
||||||
|
weaponId2Name_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||||
|
419
GenshinUID/utils/map/data/avatarId2SkillList_mapping_4.7.0.json
Normal file
419
GenshinUID/utils/map/data/avatarId2SkillList_mapping_4.7.0.json
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
{
|
||||||
|
"10000002": {
|
||||||
|
"233": "神里流·霰步",
|
||||||
|
"232": "神里流·冰华",
|
||||||
|
"239": "神里流·霜灭",
|
||||||
|
"231": "普通攻击·神里流·倾"
|
||||||
|
},
|
||||||
|
"10000021": {
|
||||||
|
"2139": "箭雨",
|
||||||
|
"2132": "爆弹玩偶",
|
||||||
|
"2131": "普通攻击·神射手"
|
||||||
|
},
|
||||||
|
"10000003": {
|
||||||
|
"331": "普通攻击·西风剑术",
|
||||||
|
"332": "风压剑",
|
||||||
|
"339": "蒲公英之风"
|
||||||
|
},
|
||||||
|
"10000006": {
|
||||||
|
"431": "普通攻击·指尖雷暴",
|
||||||
|
"432": "苍雷",
|
||||||
|
"439": "蔷薇的雷光"
|
||||||
|
},
|
||||||
|
"10000014": {
|
||||||
|
"1431": "普通攻击·水之浅唱",
|
||||||
|
"1432": "演唱,开始♪",
|
||||||
|
"1439": "闪耀奇迹♪"
|
||||||
|
},
|
||||||
|
"10000015": {
|
||||||
|
"1531": "普通攻击·仪典剑术",
|
||||||
|
"1532": "霜袭",
|
||||||
|
"1539": "凛冽轮舞"
|
||||||
|
},
|
||||||
|
"10000016": {
|
||||||
|
"1631": "普通攻击·淬炼之剑",
|
||||||
|
"1632": "逆焰之刃",
|
||||||
|
"1639": "黎明"
|
||||||
|
},
|
||||||
|
"10000020": {
|
||||||
|
"2031": "普通攻击·钢脊",
|
||||||
|
"2032": "利爪与苍雷",
|
||||||
|
"2039": "雷牙"
|
||||||
|
},
|
||||||
|
"10000022": {
|
||||||
|
"2231": "普通攻击·神代射术",
|
||||||
|
"2232": "高天之歌",
|
||||||
|
"2239": "风神之诗"
|
||||||
|
},
|
||||||
|
"10000023": {
|
||||||
|
"2331": "普通攻击·白案功夫",
|
||||||
|
"2332": "锅巴出击",
|
||||||
|
"2339": "旋火轮"
|
||||||
|
},
|
||||||
|
"10000024": {
|
||||||
|
"2431": "普通攻击·征涛",
|
||||||
|
"2432": "捉浪",
|
||||||
|
"2439": "斫雷"
|
||||||
|
},
|
||||||
|
"10000026": {
|
||||||
|
"2631": "普通攻击·卷积微尘",
|
||||||
|
"2632": "风轮两立",
|
||||||
|
"2639": "靖妖傩舞"
|
||||||
|
},
|
||||||
|
"10000027": {
|
||||||
|
"2731": "普通攻击·千金掷",
|
||||||
|
"2732": "璇玑屏",
|
||||||
|
"2739": "天权崩玉"
|
||||||
|
},
|
||||||
|
"10000029": {
|
||||||
|
"2931": "普通攻击·砰砰",
|
||||||
|
"2932": "蹦蹦炸弹",
|
||||||
|
"2939": "轰轰火花"
|
||||||
|
},
|
||||||
|
"10000030": {
|
||||||
|
"3031": "普通攻击·岩雨",
|
||||||
|
"3032": "地心",
|
||||||
|
"3039": "天星"
|
||||||
|
},
|
||||||
|
"10000031": {
|
||||||
|
"3131": "普通攻击·罪灭之矢",
|
||||||
|
"3132": "夜巡影翼",
|
||||||
|
"3139": "至夜幻现"
|
||||||
|
},
|
||||||
|
"10000032": {
|
||||||
|
"3231": "普通攻击·好运剑",
|
||||||
|
"3232": "热情过载",
|
||||||
|
"3239": "美妙旅程"
|
||||||
|
},
|
||||||
|
"10000033": {
|
||||||
|
"3331": "普通攻击·断雨",
|
||||||
|
"3332": "魔王武装·狂澜",
|
||||||
|
"3339": "极恶技·尽灭闪"
|
||||||
|
},
|
||||||
|
"10000034": {
|
||||||
|
"3431": "普通攻击·西风剑术·女仆",
|
||||||
|
"3432": "护心铠",
|
||||||
|
"3439": "大扫除"
|
||||||
|
},
|
||||||
|
"10000035": {
|
||||||
|
"3531": "普通攻击·云来古剑法",
|
||||||
|
"3532": "仙法·寒病鬼差",
|
||||||
|
"3539": "仙法·救苦度厄"
|
||||||
|
},
|
||||||
|
"10000037": {
|
||||||
|
"3731": "普通攻击·流天射术",
|
||||||
|
"3732": "山泽麟迹",
|
||||||
|
"3739": "降众天华"
|
||||||
|
},
|
||||||
|
"10000025": {
|
||||||
|
"2531": "普通攻击·古华剑法",
|
||||||
|
"2532": "古华剑·画雨笼山",
|
||||||
|
"2539": "古华剑·裁雨留虹"
|
||||||
|
},
|
||||||
|
"10000038": {
|
||||||
|
"3831": "普通攻击·西风剑术·白",
|
||||||
|
"3832": "创生法·拟造阳华",
|
||||||
|
"3839": "诞生式·大地之潮"
|
||||||
|
},
|
||||||
|
"10000039": {
|
||||||
|
"3931": "普通攻击·猎人射术",
|
||||||
|
"3932": "猫爪冻冻",
|
||||||
|
"3939": "最烈特调"
|
||||||
|
},
|
||||||
|
"10000041": {
|
||||||
|
"4131": "普通攻击·因果点破",
|
||||||
|
"4132": "水中幻愿",
|
||||||
|
"4133": "虚实流动",
|
||||||
|
"4139": "星命定轨"
|
||||||
|
},
|
||||||
|
"10000042": {
|
||||||
|
"4231": "普通攻击·云来剑法",
|
||||||
|
"4232": "星斗归位",
|
||||||
|
"4239": "天街巡游"
|
||||||
|
},
|
||||||
|
"10000043": {
|
||||||
|
"4331": "普通攻击·简式风灵作成",
|
||||||
|
"4332": "风灵作成·陆叁零捌",
|
||||||
|
"4339": "禁·风灵作成·柒伍同构贰型"
|
||||||
|
},
|
||||||
|
"10000044": {
|
||||||
|
"4431": "普通攻击·炎舞",
|
||||||
|
"4432": "热情拂扫",
|
||||||
|
"4439": "叛逆刮弦"
|
||||||
|
},
|
||||||
|
"10000045": {
|
||||||
|
"4531": "普通攻击·教会枪术",
|
||||||
|
"4532": "噬罪的告解",
|
||||||
|
"4539": "终命的圣礼"
|
||||||
|
},
|
||||||
|
"10000046": {
|
||||||
|
"4631": "普通攻击·往生秘传枪法",
|
||||||
|
"4632": "蝶引来生",
|
||||||
|
"4639": "安神秘法"
|
||||||
|
},
|
||||||
|
"10000047": {
|
||||||
|
"4731": "普通攻击·我流剑术",
|
||||||
|
"4732": "千早振",
|
||||||
|
"4739": "万叶之一刀"
|
||||||
|
},
|
||||||
|
"10000048": {
|
||||||
|
"4831": "普通攻击·火漆制印",
|
||||||
|
"4832": "丹书立约",
|
||||||
|
"4839": "凭此结契"
|
||||||
|
},
|
||||||
|
"10000049": {
|
||||||
|
"4931": "普通攻击·烟火打扬",
|
||||||
|
"4932": "焰硝庭火舞",
|
||||||
|
"4939": "琉金云间草"
|
||||||
|
},
|
||||||
|
"10000050": {
|
||||||
|
"5031": "普通攻击·迅破枪势",
|
||||||
|
"5032": "烈烧佑命之侍护",
|
||||||
|
"5039": "真红炽火之大铠"
|
||||||
|
},
|
||||||
|
"10000051": {
|
||||||
|
"5131": "普通攻击·西风剑术·宗室",
|
||||||
|
"5132": "冰潮的涡旋",
|
||||||
|
"5139": "凝浪之光剑"
|
||||||
|
},
|
||||||
|
"10000052": {
|
||||||
|
"5231": "普通攻击·源流",
|
||||||
|
"5232": "神变·恶曜开眼",
|
||||||
|
"5239": "奥义·梦想真说"
|
||||||
|
},
|
||||||
|
"10000053": {
|
||||||
|
"5331": "普通攻击·忍刀·终末番",
|
||||||
|
"5332": "呜呼流·风隐急进",
|
||||||
|
"5339": "呜呼流·影貉缭乱"
|
||||||
|
},
|
||||||
|
"10000054": {
|
||||||
|
"5431": "普通攻击·水有常形",
|
||||||
|
"5432": "海月之誓",
|
||||||
|
"5439": "海人化羽"
|
||||||
|
},
|
||||||
|
"10000055": {
|
||||||
|
"5531": "普通攻击·呲牙裂扇箭",
|
||||||
|
"5532": "犬坂吠吠方圆阵",
|
||||||
|
"5539": "兽牙逐突形胜战法"
|
||||||
|
},
|
||||||
|
"10000056": {
|
||||||
|
"5631": "普通攻击·天狗传弓术",
|
||||||
|
"5632": "鸦羽天狗霆雷召咒",
|
||||||
|
"5639": "煌煌千道镇式"
|
||||||
|
},
|
||||||
|
"10000057": {
|
||||||
|
"5731": "普通攻击· 喧哗屋传说",
|
||||||
|
"5732": "魔杀绝技·赤牛发破!",
|
||||||
|
"5739": "最恶鬼王·一斗轰临!!"
|
||||||
|
},
|
||||||
|
"10000058": {
|
||||||
|
"5831": "普通攻击·狐灵食罪式",
|
||||||
|
"5832": "野干役咒·杀生樱",
|
||||||
|
"5839": "大密法·天狐显真"
|
||||||
|
},
|
||||||
|
"10000059": {
|
||||||
|
"5931": "普通攻击·不动流格斗术",
|
||||||
|
"5932": "勠心拳",
|
||||||
|
"5939": "聚风蹴"
|
||||||
|
},
|
||||||
|
"10000060": {
|
||||||
|
"6031": "普通攻击·潜形隐曜弓",
|
||||||
|
"6032": "萦络纵命索",
|
||||||
|
"6039": "渊图玲珑骰"
|
||||||
|
},
|
||||||
|
"10000061": {
|
||||||
|
"6131": "普通攻击·箱纸切削术",
|
||||||
|
"6132": "呜喵町飞足",
|
||||||
|
"6139": "秘法·惊喜特派"
|
||||||
|
},
|
||||||
|
"10000062": {
|
||||||
|
"6231": "普通攻击·快速射击",
|
||||||
|
"6232": "冰尘雪野",
|
||||||
|
"6239": "曙光预言"
|
||||||
|
},
|
||||||
|
"10000063": {
|
||||||
|
"6331": "普通攻击·踏辰摄斗",
|
||||||
|
"6332": "仰灵威召将役咒",
|
||||||
|
"6339": "神女遣灵真诀"
|
||||||
|
},
|
||||||
|
"10000064": {
|
||||||
|
"6431": "普通攻击·拂云出手",
|
||||||
|
"6432": "旋云开相",
|
||||||
|
"6439": "破嶂见旌仪"
|
||||||
|
},
|
||||||
|
"10000065": {
|
||||||
|
"6531": "普通攻击·忍流飞刃斩",
|
||||||
|
"6532": "越祓雷草之轮",
|
||||||
|
"6539": "御咏鸣神刈山祭"
|
||||||
|
},
|
||||||
|
"10000066": {
|
||||||
|
"6631": "普通攻击·神里流·转",
|
||||||
|
"6632": "神里流·镜花",
|
||||||
|
"6639": "神里流·水囿"
|
||||||
|
},
|
||||||
|
"10000067": {
|
||||||
|
"6731": "普通攻击·祈颂射艺",
|
||||||
|
"6732": "拂花偈叶",
|
||||||
|
"6739": "猫猫秘宝"
|
||||||
|
},
|
||||||
|
"10000068": {
|
||||||
|
"6831": "普通攻击·妙显剑舞·改",
|
||||||
|
"6832": "镇灵之灯·烦恼解决炮",
|
||||||
|
"6839": "卡萨扎莱宫的无微不至"
|
||||||
|
},
|
||||||
|
"10000069": {
|
||||||
|
"6931": "普通攻击·藏蕴破障",
|
||||||
|
"6932": "识果种雷",
|
||||||
|
"6939": "造生缠藤箭"
|
||||||
|
},
|
||||||
|
"10000070": {
|
||||||
|
"7031": "普通攻击·弦月舞步",
|
||||||
|
"7032": "七域舞步",
|
||||||
|
"7039": "浮莲舞步·远梦聆泉"
|
||||||
|
},
|
||||||
|
"10000071": {
|
||||||
|
"7131": "普通攻击·七圣枪术",
|
||||||
|
"7132": "秘仪·律渊渡魂",
|
||||||
|
"7139": "圣仪·煟煌随狼行"
|
||||||
|
},
|
||||||
|
"10000072": {
|
||||||
|
"7231": "普通攻击·流耀枪术·守势",
|
||||||
|
"7232": "圣仪·苍鹭庇卫",
|
||||||
|
"7239": "圣仪·灰鸰衒潮"
|
||||||
|
},
|
||||||
|
"10000073": {
|
||||||
|
"7331": "普通攻击·行相",
|
||||||
|
"7332": "所闻遍计",
|
||||||
|
"7339": "心景幻成"
|
||||||
|
},
|
||||||
|
"10000074": {
|
||||||
|
"7431": "普通攻击·熠辉轨度剑",
|
||||||
|
"7432": "垂裳端凝之夜",
|
||||||
|
"7439": "星流摇床之梦"
|
||||||
|
},
|
||||||
|
"10000075": {
|
||||||
|
"7531": "普通攻击·行幡鸣弦",
|
||||||
|
"7532": "羽画·风姿华歌",
|
||||||
|
"7539": "狂言·式乐五番"
|
||||||
|
},
|
||||||
|
"10000076": {
|
||||||
|
"7631": "普通攻击·迴身箭术",
|
||||||
|
"7632": "非想风天",
|
||||||
|
"7639": "抟风秘道"
|
||||||
|
},
|
||||||
|
"10000077": {
|
||||||
|
"7731": "普通攻击·颠扑连环枪",
|
||||||
|
"7732": "云台团团降芦菔",
|
||||||
|
"7739": "玉颗珊珊月中落"
|
||||||
|
},
|
||||||
|
"10000078": {
|
||||||
|
"7831": "普通攻击·溯因反绎法",
|
||||||
|
"7832": "共相·理式摹写",
|
||||||
|
"7839": "殊境·显象缚结"
|
||||||
|
},
|
||||||
|
"10000079": {
|
||||||
|
"7931": "普通攻击·拂金剑斗术",
|
||||||
|
"7932": "熔铁流狱",
|
||||||
|
"7939": "炎啸狮子咬"
|
||||||
|
},
|
||||||
|
"10000080": {
|
||||||
|
"8031": "普通攻击·西风枪术·镝传",
|
||||||
|
"8032": "星霜的流旋",
|
||||||
|
"8039": "苍翎的颂愿"
|
||||||
|
},
|
||||||
|
"10000081": {
|
||||||
|
"8131": "普通攻击·旋规设矩",
|
||||||
|
"8132": "画则巧施",
|
||||||
|
"8139": "繁绘隅穹"
|
||||||
|
},
|
||||||
|
"10000082": {
|
||||||
|
"8231": "普通攻击·金匮针解",
|
||||||
|
"8232": "太素诊要",
|
||||||
|
"8239": "愈气全形论"
|
||||||
|
},
|
||||||
|
"10000083": {
|
||||||
|
"8331": "普通攻击·迅捷礼刺剑",
|
||||||
|
"8332": "谜影障身法",
|
||||||
|
"8339": "魔术·运变惊奇"
|
||||||
|
},
|
||||||
|
"10000084": {
|
||||||
|
"8431": "普通攻击·迫牌易位式",
|
||||||
|
"8432": "眩惑光戏法",
|
||||||
|
"8439": "大魔术·灵迹巡游"
|
||||||
|
},
|
||||||
|
"10000085": {
|
||||||
|
"8531": "普通攻击·洑流剑",
|
||||||
|
"8532": "浮冰增压",
|
||||||
|
"8539": "猎影潜袭"
|
||||||
|
},
|
||||||
|
"10000086": {
|
||||||
|
"8631": "普通攻击·迅烈倾霜拳",
|
||||||
|
"8632": "冰牙突驰",
|
||||||
|
"8639": "黑金狼噬"
|
||||||
|
},
|
||||||
|
"10000087": {
|
||||||
|
"8731": "普通攻击·如水从平",
|
||||||
|
"8732": "泪水啊,我必偿还",
|
||||||
|
"8739": "潮水啊,我已归来"
|
||||||
|
},
|
||||||
|
"10000088": {
|
||||||
|
"8831": "普通攻击·冷色摄影律",
|
||||||
|
"8832": "取景·冰点构图法",
|
||||||
|
"8839": "定格·全方位确证"
|
||||||
|
},
|
||||||
|
"10000089": {
|
||||||
|
"8931": "普通攻击·独舞之邀",
|
||||||
|
"8932": "孤心沙龙",
|
||||||
|
"8939": "万众狂欢"
|
||||||
|
},
|
||||||
|
"10000090": {
|
||||||
|
"9031": "普通攻击·线列枪刺·改",
|
||||||
|
"9032": "近迫式急促拦射",
|
||||||
|
"9039": "圆阵掷弹爆轰术"
|
||||||
|
},
|
||||||
|
"10000091": {
|
||||||
|
"9131": "普通攻击·直率的辞绝",
|
||||||
|
"9132": "典仪式晶火",
|
||||||
|
"9139": "如霰澄天的鸣礼"
|
||||||
|
},
|
||||||
|
"10000092": {
|
||||||
|
"9231": "普通攻击·刃爪悬星",
|
||||||
|
"9232": "瑞兽登高楼",
|
||||||
|
"9239": "璨焰金猊舞"
|
||||||
|
},
|
||||||
|
"10000093": {
|
||||||
|
"9331": "普通攻击·清风散花词",
|
||||||
|
"9332": "朝起鹤云",
|
||||||
|
"9339": "暮集竹星"
|
||||||
|
},
|
||||||
|
"10000094": {
|
||||||
|
"9431": "普通攻击·心织刀流",
|
||||||
|
"9432": "羽袖一触",
|
||||||
|
"9439": "二刀之形·比翼"
|
||||||
|
},
|
||||||
|
"10000095": {
|
||||||
|
"9531": "普通攻击·靶向治疗",
|
||||||
|
"9532": "弹跳水疗法",
|
||||||
|
"9539": "过饱和心意注射"
|
||||||
|
},
|
||||||
|
"10000096": {
|
||||||
|
"9631": "普通攻击·斩首之邀",
|
||||||
|
"9632": "万相化灰",
|
||||||
|
"9639": "厄月将升"
|
||||||
|
},
|
||||||
|
"10000097": {
|
||||||
|
"9731": "普通攻击·王家苇箭术",
|
||||||
|
"9732": "古仪·鸣砂掣雷",
|
||||||
|
"9739": "秘仪·瞑光贯影"
|
||||||
|
},
|
||||||
|
"10000098": {
|
||||||
|
"9831": "普通攻击·逐影之誓",
|
||||||
|
"9832": "狩夜之巡",
|
||||||
|
"9839": "残光将终"
|
||||||
|
},
|
||||||
|
"10000036": {
|
||||||
|
"3631": "普通攻击·灭邪四式",
|
||||||
|
"3632": "灵刃·重华叠霜",
|
||||||
|
"3639": "灵刃·云开星落"
|
||||||
|
}
|
||||||
|
}
|
202
GenshinUID/utils/map/data/weaponId2Name_mapping_4.7.0.json
Normal file
202
GenshinUID/utils/map/data/weaponId2Name_mapping_4.7.0.json
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
{
|
||||||
|
"11101": "无锋剑",
|
||||||
|
"11201": "银剑",
|
||||||
|
"11301": "冷刃",
|
||||||
|
"11302": "黎明神剑",
|
||||||
|
"11303": "旅行剑",
|
||||||
|
"11304": "暗铁剑",
|
||||||
|
"11305": "吃虎鱼刀",
|
||||||
|
"11306": "飞天御剑",
|
||||||
|
"11401": "西风剑",
|
||||||
|
"11402": "笛剑",
|
||||||
|
"11403": "祭礼剑",
|
||||||
|
"11404": "宗室长剑",
|
||||||
|
"11405": "匣里龙吟",
|
||||||
|
"11406": "试作斩岩",
|
||||||
|
"11407": "铁蜂刺",
|
||||||
|
"11408": "黑岩长剑",
|
||||||
|
"11409": "黑剑",
|
||||||
|
"11410": "暗巷闪光",
|
||||||
|
"11412": "降临之剑",
|
||||||
|
"11413": "腐殖之剑",
|
||||||
|
"11414": "天目影打刀",
|
||||||
|
"11415": "辰砂之纺锤",
|
||||||
|
"11416": "笼钓瓶一心",
|
||||||
|
"11417": "原木刀",
|
||||||
|
"11418": "西福斯的月光",
|
||||||
|
"11419": "「一心传」名刀",
|
||||||
|
"11420": "「一心传」名刀",
|
||||||
|
"11421": "「一心传」名刀",
|
||||||
|
"11422": "东花坊时雨",
|
||||||
|
"11424": "狼牙",
|
||||||
|
"11425": "海渊终曲",
|
||||||
|
"11426": "灰河渡手",
|
||||||
|
"11427": "船坞长剑",
|
||||||
|
"11428": "水仙十字之剑",
|
||||||
|
"11429": "水仙十字之剑",
|
||||||
|
"11501": "风鹰剑",
|
||||||
|
"11502": "天空之刃",
|
||||||
|
"11503": "苍古自由之誓",
|
||||||
|
"11504": "斫峰之刃",
|
||||||
|
"11505": "磐岩结绿",
|
||||||
|
"11509": "雾切之回光",
|
||||||
|
"11510": "波乱月白经津",
|
||||||
|
"11511": "圣显之钥",
|
||||||
|
"11512": "裁叶萃光",
|
||||||
|
"11513": "静水流涌之辉",
|
||||||
|
"11514": "有乐御簾切",
|
||||||
|
"11515": "赦罪",
|
||||||
|
"12101": "训练大剑",
|
||||||
|
"12201": "佣兵重剑",
|
||||||
|
"12301": "铁影阔剑",
|
||||||
|
"12302": "沐浴龙血的剑",
|
||||||
|
"12303": "白铁大剑",
|
||||||
|
"12304": "石英大剑",
|
||||||
|
"12305": "以理服人",
|
||||||
|
"12306": "飞天大御剑",
|
||||||
|
"12401": "西风大剑",
|
||||||
|
"12402": "钟剑",
|
||||||
|
"12403": "祭礼大剑",
|
||||||
|
"12404": "宗室大剑",
|
||||||
|
"12405": "雨裁",
|
||||||
|
"12406": "试作古华",
|
||||||
|
"12407": "白影剑",
|
||||||
|
"12408": "黑岩斩刀",
|
||||||
|
"12409": "螭骨剑",
|
||||||
|
"12410": "千岩古剑",
|
||||||
|
"12411": "雪葬的星银",
|
||||||
|
"12412": "衔珠海皇",
|
||||||
|
"12414": "桂木斩长正",
|
||||||
|
"12415": "玛海菈的水色",
|
||||||
|
"12416": "恶王丸",
|
||||||
|
"12417": "森林王器",
|
||||||
|
"12418": "饰铁之花",
|
||||||
|
"12424": "聊聊棒",
|
||||||
|
"12425": "浪影阔剑",
|
||||||
|
"12426": "「究极霸王超级魔剑」",
|
||||||
|
"12427": "便携动力锯",
|
||||||
|
"12501": "天空之傲",
|
||||||
|
"12502": "狼的末路",
|
||||||
|
"12503": "松籁响起之时",
|
||||||
|
"12504": "无工之剑",
|
||||||
|
"12510": "赤角石溃杵",
|
||||||
|
"12511": "苇海信标",
|
||||||
|
"12512": "裁断",
|
||||||
|
"13101": "新手长枪",
|
||||||
|
"13201": "铁尖枪",
|
||||||
|
"13301": "白缨枪",
|
||||||
|
"13302": "钺矛",
|
||||||
|
"13303": "黑缨枪",
|
||||||
|
"13304": "「旗杆」",
|
||||||
|
"13401": "匣里灭辰",
|
||||||
|
"13402": "试作星镰",
|
||||||
|
"13403": "流月针",
|
||||||
|
"13404": "黑岩刺枪",
|
||||||
|
"13405": "决斗之枪",
|
||||||
|
"13406": "千岩长枪",
|
||||||
|
"13407": "西风长枪",
|
||||||
|
"13408": "宗室猎枪",
|
||||||
|
"13409": "龙脊长枪",
|
||||||
|
"13414": "喜多院十文字",
|
||||||
|
"13415": "「渔获」",
|
||||||
|
"13416": "断浪长鳍",
|
||||||
|
"13417": "贯月矢",
|
||||||
|
"13419": "风信之锋",
|
||||||
|
"13424": "峡湾长歌",
|
||||||
|
"13425": "公义的酬报",
|
||||||
|
"13426": "沙中伟贤的对答",
|
||||||
|
"13427": "勘探钻机",
|
||||||
|
"13501": "护摩之杖",
|
||||||
|
"13502": "天空之脊",
|
||||||
|
"13504": "贯虹之槊",
|
||||||
|
"13505": "和璞鸢",
|
||||||
|
"13507": "息灾",
|
||||||
|
"13509": "薙草之稻光",
|
||||||
|
"13511": "赤沙之杖",
|
||||||
|
"13512": "赤月之形",
|
||||||
|
"14101": "学徒笔记",
|
||||||
|
"14201": "口袋魔导书",
|
||||||
|
"14301": "魔导绪论",
|
||||||
|
"14302": "讨龙英杰谭",
|
||||||
|
"14303": "异世界行记",
|
||||||
|
"14304": "翡玉法球",
|
||||||
|
"14305": "甲级宝珏",
|
||||||
|
"14306": "琥珀玥",
|
||||||
|
"14401": "西风秘典",
|
||||||
|
"14402": "流浪乐章",
|
||||||
|
"14403": "祭礼残章",
|
||||||
|
"14404": "宗室秘法录",
|
||||||
|
"14405": "匣里日月",
|
||||||
|
"14406": "试作金珀",
|
||||||
|
"14407": "万国诸海图谱",
|
||||||
|
"14408": "黑岩绯玉",
|
||||||
|
"14409": "昭心",
|
||||||
|
"14410": "暗巷的酒与诗",
|
||||||
|
"14412": "忍冬之果",
|
||||||
|
"14413": "嘟嘟可故事集",
|
||||||
|
"14414": "白辰之环",
|
||||||
|
"14415": "证誓之明瞳",
|
||||||
|
"14416": "流浪的晚星",
|
||||||
|
"14417": "盈满之实",
|
||||||
|
"14424": "遗祀玉珑",
|
||||||
|
"14425": "纯水流华",
|
||||||
|
"14426": "无垠蔚蓝之歌",
|
||||||
|
"14501": "天空之卷",
|
||||||
|
"14502": "四风原典",
|
||||||
|
"14504": "尘世之锁",
|
||||||
|
"14505": "碧落之珑",
|
||||||
|
"14506": "不灭月华",
|
||||||
|
"14509": "神乐之真意",
|
||||||
|
"14511": "千夜浮梦",
|
||||||
|
"14512": "图莱杜拉的回忆",
|
||||||
|
"14513": "金流监督",
|
||||||
|
"14514": "万世流涌大典",
|
||||||
|
"14515": "鹤鸣余音",
|
||||||
|
"15101": "猎弓",
|
||||||
|
"15201": "历练的猎弓",
|
||||||
|
"15301": "鸦羽弓",
|
||||||
|
"15302": "神射手之誓",
|
||||||
|
"15303": "反曲弓",
|
||||||
|
"15304": "弹弓",
|
||||||
|
"15305": "信使",
|
||||||
|
"15306": "黑檀弓",
|
||||||
|
"15401": "西风猎弓",
|
||||||
|
"15402": "绝弦",
|
||||||
|
"15403": "祭礼弓",
|
||||||
|
"15404": "宗室长弓",
|
||||||
|
"15405": "弓藏",
|
||||||
|
"15406": "试作澹月",
|
||||||
|
"15407": "钢轮弓",
|
||||||
|
"15408": "黑岩战弓",
|
||||||
|
"15409": "苍翠猎弓",
|
||||||
|
"15410": "暗巷猎手",
|
||||||
|
"15411": "落霞",
|
||||||
|
"15412": "幽夜华尔兹",
|
||||||
|
"15413": "风花之颂",
|
||||||
|
"15414": "破魔之弓",
|
||||||
|
"15415": "掠食者",
|
||||||
|
"15416": "曚云之月",
|
||||||
|
"15417": "王下近侍",
|
||||||
|
"15418": "竭泽",
|
||||||
|
"15419": "鹮穿之喙",
|
||||||
|
"15424": "烈阳之嗣",
|
||||||
|
"15425": "静谧之曲",
|
||||||
|
"15426": "筑云",
|
||||||
|
"15427": "测距规",
|
||||||
|
"15501": "天空之翼",
|
||||||
|
"15502": "阿莫斯之弓",
|
||||||
|
"15503": "终末嗟叹之诗",
|
||||||
|
"15507": "冬极白星",
|
||||||
|
"15508": "若水",
|
||||||
|
"15509": "飞雷之弦振",
|
||||||
|
"15511": "猎人之径",
|
||||||
|
"15512": "最初的大魔术",
|
||||||
|
"15513": "白雨心弦",
|
||||||
|
"20001": "(test)竿测试",
|
||||||
|
"10002": "(test)穿模测试",
|
||||||
|
"10003": "(test)穿模测试",
|
||||||
|
"10004": "(test)穿模测试",
|
||||||
|
"10005": "(test)穿模测试",
|
||||||
|
"10006": "(test)穿模测试",
|
||||||
|
"10008": "(test)穿模测试"
|
||||||
|
}
|
@ -1,11 +1,47 @@
|
|||||||
|
from typing import Dict, Optional
|
||||||
|
|
||||||
from .GS_MAP_PATH import (
|
from .GS_MAP_PATH import (
|
||||||
alias_data,
|
alias_data,
|
||||||
avatarId2Name,
|
avatarId2Name,
|
||||||
avatarId2Star_data,
|
avatarId2Star_data,
|
||||||
|
avatarName2Element,
|
||||||
|
weaponId2Name_data,
|
||||||
|
avatarId2SkillList_data,
|
||||||
enName_to_avatarId_data,
|
enName_to_avatarId_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def weapon_id_to_name(weapon_id: str) -> str:
|
||||||
|
if weapon_id in weaponId2Name_data:
|
||||||
|
return weaponId2Name_data[weapon_id]
|
||||||
|
else:
|
||||||
|
return '未知'
|
||||||
|
|
||||||
|
|
||||||
|
async def name_to_weapon_id(weapon_name: str) -> str:
|
||||||
|
for _id in weaponId2Name_data:
|
||||||
|
if weapon_name == weaponId2Name_data[_id]:
|
||||||
|
return _id
|
||||||
|
else:
|
||||||
|
return '11509'
|
||||||
|
|
||||||
|
|
||||||
|
async def avatar_id_to_skill_groupId(
|
||||||
|
avatar_id: str,
|
||||||
|
) -> Optional[Dict[str, str]]:
|
||||||
|
if avatar_id in avatarId2SkillList_data:
|
||||||
|
return avatarId2SkillList_data[avatar_id]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
async def name_to_element(name: str) -> str:
|
||||||
|
if name in avatarName2Element:
|
||||||
|
return avatarName2Element[name]
|
||||||
|
else:
|
||||||
|
return 'Cryo'
|
||||||
|
|
||||||
|
|
||||||
async def avatar_id_to_name(avatar_id: str) -> str:
|
async def avatar_id_to_name(avatar_id: str) -> str:
|
||||||
char_name = avatarId2Name[avatar_id]
|
char_name = avatarId2Name[avatar_id]
|
||||||
return char_name
|
return char_name
|
||||||
|
@ -83,6 +83,7 @@ async def download_file(
|
|||||||
name: str,
|
name: str,
|
||||||
sess: Optional[ClientSession] = None,
|
sess: Optional[ClientSession] = None,
|
||||||
) -> Optional[Tuple[str, int, str]]:
|
) -> Optional[Tuple[str, int, str]]:
|
||||||
|
logger.info(f"开始下载: [{name}] - {url}")
|
||||||
if sess is None:
|
if sess is None:
|
||||||
sess = ClientSession()
|
sess = ClientSession()
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user