Compare commits
22 Commits
pre-commit
...
v4
Author | SHA1 | Date | |
---|---|---|---|
2d041b3c70 | |||
0a50c1bcb9 | |||
9f9eac5a7f | |||
e5da44ced1 | |||
c8909416ad | |||
80301fa807 | |||
af2d0be884 | |||
e58c4bd6ae | |||
0efe113164 | |||
6063eb56f9 | |||
ff6ddeebd1 | |||
1fd2e0aae3 | |||
e7e9778af4 | |||
84aa293bc1 | |||
bee6087b87 | |||
d77db758d4 | |||
2bc6f4280e | |||
22b7e23d02 | |||
cf37708a0f | |||
6884266b21 | |||
a800644f8b | |||
67b80f5c02 |
@ -18,7 +18,7 @@ repos:
|
||||
- id: black
|
||||
|
||||
- repo: https://github.com/pycqa/flake8
|
||||
rev: 7.1.2
|
||||
rev: 7.2.0
|
||||
hooks:
|
||||
- id: flake8
|
||||
|
||||
|
1
.vscode/settings.json
vendored
@ -18,4 +18,5 @@
|
||||
"basedpyright.analysis.extraPaths": [
|
||||
"${workspaceFolder}/../../../"
|
||||
],
|
||||
"python.analysis.typeCheckingMode": "off",
|
||||
}
|
@ -3,11 +3,11 @@ import re
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_abyss_card import draw_abyss_img
|
||||
from ..utils.message import GButton as Button
|
||||
|
||||
sv_abyss = SV('查询深渊')
|
||||
|
||||
|
@ -9,6 +9,7 @@ from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import get_error_img
|
||||
from gsuid_core.utils.api.mys.models import AbyssBattleAvatar
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..utils.mys_api import mys_api
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.resource.download_url import download_file
|
||||
@ -45,12 +46,9 @@ async def get_abyss_star_pic(star: int) -> Image.Image:
|
||||
return star_pic
|
||||
|
||||
|
||||
async def _draw_abyss_card(
|
||||
async def _draw_char_card(
|
||||
char: AbyssBattleAvatar,
|
||||
talent_num: str,
|
||||
floor_pic: Image.Image,
|
||||
index_char: int,
|
||||
index_part: int,
|
||||
talent_num: Union[str, int],
|
||||
):
|
||||
char_id = char['id']
|
||||
# 确认角色头像路径
|
||||
@ -71,6 +69,17 @@ async def _draw_abyss_card(
|
||||
anchor='mm',
|
||||
)
|
||||
char_card = char_card.resize((128, 160), Image.Resampling.LANCZOS)
|
||||
return char_card
|
||||
|
||||
|
||||
async def _draw_abyss_card(
|
||||
char: AbyssBattleAvatar,
|
||||
talent_num: str,
|
||||
floor_pic: Image.Image,
|
||||
index_char: int,
|
||||
index_part: int,
|
||||
):
|
||||
char_card = await _draw_char_card(char, talent_num)
|
||||
floor_pic.paste(
|
||||
char_card,
|
||||
(70 + 147 * index_char, 39 + index_part * 170),
|
||||
@ -147,7 +156,7 @@ async def draw_abyss_img(
|
||||
return '你还没有挑战过该层深渊!'
|
||||
else:
|
||||
if len(raw_abyss_data['floors']) == 0:
|
||||
return '你还没有挑战本期深渊!\n可以使用[上期深渊]命令查询上期~'
|
||||
return f'你还没有挑战本期深渊!\n可以使用[{PREFIX}上期深渊]命令查询上期~'
|
||||
floors_data = raw_abyss_data['floors'][-1]
|
||||
|
||||
if floors_data['levels'][-1]['battles']:
|
||||
|
@ -2,9 +2,9 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_achi import draw_achi_img
|
||||
from .get_achi_desc import get_achi, get_daily_achi
|
||||
|
||||
|
@ -1,12 +1,26 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
path = Path(__file__).parent
|
||||
with open(path / 'all_achi.json', "r", encoding='UTF-8') as f:
|
||||
all_achi = json.load(f)
|
||||
import aiofiles
|
||||
from gsuid_core.server import on_core_start
|
||||
|
||||
path = Path(__file__).parent
|
||||
all_achi = {}
|
||||
daily_achi = {}
|
||||
|
||||
|
||||
@on_core_start
|
||||
async def load_data():
|
||||
async with aiofiles.open(
|
||||
path / 'all_achi.json', "r", encoding='UTF-8'
|
||||
) as f:
|
||||
all_achi.update(json.loads(await f.read()))
|
||||
|
||||
async with aiofiles.open(
|
||||
path / 'daily_achi.json', "r", encoding='UTF-8'
|
||||
) as f:
|
||||
daily_achi.update(json.loads(await f.read()))
|
||||
|
||||
with open(path / 'daily_achi.json', "r", encoding='UTF-8') as f:
|
||||
daily_achi = json.load(f)
|
||||
|
||||
daily_template = '''任务:【{}】
|
||||
成就:【{}】
|
||||
|
@ -8,10 +8,10 @@ from gsuid_core.models import Event
|
||||
from gsuid_core.aps import scheduler
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.subscribe import gs_subscribe
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from .util import black_ids
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .main import ann, consume_remind
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
|
@ -1,5 +1,6 @@
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from PIL import Image, ImageOps, ImageDraw
|
||||
@ -18,13 +19,22 @@ from ..utils.image.image_tools import (
|
||||
|
||||
assets_dir = Path(__file__).parent / 'assets'
|
||||
|
||||
list_head = Image.open(assets_dir / 'list.png')
|
||||
list_item = (
|
||||
Image.open(assets_dir / 'item.png').resize((384, 96)).convert('RGBA')
|
||||
)
|
||||
list_head: Optional[Image.Image] = None
|
||||
list_item: Optional[Image.Image] = None
|
||||
|
||||
|
||||
async def ann_list_card() -> bytes:
|
||||
global list_head, list_item
|
||||
if not list_head:
|
||||
list_head = Image.open(assets_dir / 'list.png')
|
||||
|
||||
if not list_item:
|
||||
list_item = (
|
||||
Image.open(assets_dir / 'item.png')
|
||||
.resize((384, 96))
|
||||
.convert('RGBA')
|
||||
)
|
||||
|
||||
ann_list = await ann().get_ann_list()
|
||||
if not ann_list:
|
||||
raise Exception('获取游戏公告失败,请检查接口是否正常')
|
||||
@ -159,7 +169,7 @@ async def ann_detail_card(ann_id):
|
||||
bbox = gs_font_26.getbbox('囗')
|
||||
_x, _y = bbox[2] - bbox[0], bbox[3] - bbox[1]
|
||||
|
||||
padding = (_x, _y, _x, _y)
|
||||
padding = (int(_x), int(_y), int(_x), int(_y))
|
||||
im = ImageOps.expand(im, padding, '#f9f6f2')
|
||||
|
||||
return await convert_img(im)
|
||||
|
@ -27,7 +27,6 @@ def cache(ttl=datetime.timedelta(hours=1), **kwargs):
|
||||
|
||||
@functools.wraps(func)
|
||||
async def wrapped(*args, **kw):
|
||||
nonlocal cache_data
|
||||
bound = inspect.signature(func).bind(*args, **kw)
|
||||
bound.apply_defaults()
|
||||
ins_key = '|'.join(
|
||||
|
@ -2,10 +2,11 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_cale_pic import draw_cale_img
|
||||
from ..utils.buttons import a, b, c, s, t, u, v, x, y
|
||||
|
||||
sv_cale = SV('个人日历')
|
||||
|
||||
@ -20,4 +21,4 @@ async def send_cale_pic(bot: Bot, ev: Event):
|
||||
logger.info(f'[个人日历] uid: {uid}')
|
||||
|
||||
im = await draw_cale_img(ev, uid)
|
||||
await bot.send_option(im)
|
||||
await bot.send_option(im, [[a, b, c], [t, s, u], [v, x, y]])
|
||||
|
@ -1,10 +1,10 @@
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from ..utils.message import GButton as Button
|
||||
from .draw_new_collection_card import draw_explore
|
||||
from .draw_collection_card import draw_explora_img, draw_collection_img
|
||||
|
||||
|
@ -14,17 +14,17 @@ yyy_data = {
|
||||
}
|
||||
'''
|
||||
|
||||
# 5.5影月月数据
|
||||
# 2025.3.27
|
||||
# 5.7影月月数据
|
||||
# 2025.5.18
|
||||
yyy_data = {
|
||||
'成就': 1458,
|
||||
'华丽的宝箱': 325,
|
||||
'珍贵的宝箱': 851,
|
||||
'精致的宝箱': 2714,
|
||||
'普通的宝箱': 3317,
|
||||
'精致的宝箱': 2717,
|
||||
'普通的宝箱': 3318,
|
||||
'奇馈宝箱': 316,
|
||||
'解锁传送点': 580,
|
||||
'解锁秘境': 63,
|
||||
'解锁传送点': 584,
|
||||
'解锁秘境': 64,
|
||||
}
|
||||
|
||||
# 影月月没收集到的数据
|
||||
|
@ -3,9 +3,11 @@ from typing import Dict, Tuple, Union, Literal
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
|
||||
from ..utils.mys_api import get_base_data
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.map.GS_MAP_PATH import avatarId2Name
|
||||
from .const import max_data, award_data, expmax_data
|
||||
from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40
|
||||
from ..utils.image.image_tools import draw_bar, get_avatar, get_color_bg
|
||||
@ -33,6 +35,8 @@ async def get_explore_data(
|
||||
if isinstance(raw_data, (str, bytes, bytearray, memoryview)):
|
||||
return raw_data
|
||||
|
||||
expmax_data['获得角色数'] = len(avatarId2Name) - 2
|
||||
|
||||
# 处理数据
|
||||
data: Dict[str, int] = {
|
||||
'获得角色数': raw_data['stats']['avatar_number'],
|
||||
@ -142,6 +146,7 @@ async def draw_base_img(
|
||||
img.paste(title, (0, 0), title)
|
||||
img.paste(char_pic, (241, 40), char_pic)
|
||||
|
||||
logger.debug(percent_data)
|
||||
for index, name in enumerate(percent_data):
|
||||
percent = percent_data[name]
|
||||
value = value_data[name]
|
||||
@ -161,3 +166,4 @@ async def draw_base_img(
|
||||
|
||||
def _f(value: float) -> str:
|
||||
return '{:.2f}%'.format(value)
|
||||
return '{:.2f}%'.format(value)
|
||||
|
@ -255,6 +255,10 @@ async def _draw_explore(raw_data: IndexData):
|
||||
)
|
||||
|
||||
for index, world in enumerate(worlds):
|
||||
if world['name'] == '远古圣山':
|
||||
icon_ = 'community-game-records/images/world-logo-16.1c751ac9.png'
|
||||
world['icon'] = f'https://webstatic.mihoyo.com/app/{icon_}'
|
||||
|
||||
icon = await get_image(world['icon'], ICON_PATH)
|
||||
icon = icon.resize((150, 150)).convert('RGBA')
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
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 ..utils.message import UID_HINT
|
||||
from .get_my_pack import draw_my_pack
|
||||
|
||||
sv_pack = SV('查询背包')
|
||||
|
@ -4,9 +4,9 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
from gsuid_core.utils.database.models import GsBind
|
||||
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_config_card import draw_config_img
|
||||
from .set_config import set_push_value, set_config_func
|
||||
|
||||
|
@ -8,18 +8,18 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from .to_data import switch_api
|
||||
from .to_card import enka_to_card
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .get_akasha_data import get_rank
|
||||
from .start import refresh_player_list
|
||||
from .to_data_by_mys import mys_to_card
|
||||
from .draw_artifacts_lib import draw_lib
|
||||
from .draw_rank_list import draw_rank_img
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.message import GButton as Button
|
||||
from ..utils.map.GS_MAP_PATH import alias_data
|
||||
from .draw_arti_rank import draw_arti_rank_img
|
||||
from .draw_char_info import draw_all_char_list
|
||||
@ -343,7 +343,6 @@ async def send_card_info(bot: Bot, ev: Event):
|
||||
im = await enka_to_card(uid)
|
||||
else:
|
||||
im = await enka_to_card(uid)
|
||||
logger.info(f'UID{uid}获取角色数据成功!')
|
||||
|
||||
if isinstance(im, Tuple):
|
||||
buttons = [
|
||||
|
@ -7,6 +7,7 @@ from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
|
||||
from .etc.etc import TEXT_PATH
|
||||
from ..utils.message import PREFIX
|
||||
from .start import refresh_player_list
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.image.image_tools import get_avatar
|
||||
@ -40,7 +41,9 @@ async def get_artifacts_lib_data(uid: str) -> Optional[Dict]:
|
||||
async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]:
|
||||
data = await get_artifacts_lib_data(uid)
|
||||
if data is None:
|
||||
return '你还没有圣遗物数据...请尝试使用[刷新圣遗物仓库]获取数据!'
|
||||
return (
|
||||
f'你还没有圣遗物数据...请尝试使用[{PREFIX}刷新圣遗物仓库]获取数据!'
|
||||
)
|
||||
|
||||
all_list = [x for v in data['data'].values() for x in v]
|
||||
all_list.sort(key=lambda x: x['cv_score'], reverse=True)
|
||||
|
@ -3,6 +3,7 @@ from typing import Union, Optional
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.utils.image.convert import convert_img
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..utils.colors import get_color
|
||||
from .draw_rank_list import RANK_TEXT
|
||||
from .get_akasha_data import _get_rank
|
||||
@ -53,7 +54,7 @@ async def draw_role_rank_img(
|
||||
if isinstance(rank_data, str):
|
||||
return rank_data
|
||||
if char_id not in rank_data:
|
||||
return f'你还暂无{char_name}的数据, 请先[强制刷新]...'
|
||||
return f'你还暂无{char_name}的数据, 请先[{PREFIX}强制刷新]...'
|
||||
|
||||
fit = rank_data[char_id]['calculations']['fit']
|
||||
calculation_id = fit['calculationId']
|
||||
|
@ -17744,7 +17744,7 @@
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"80.0%",
|
||||
"86.6%",
|
||||
"86.5%",
|
||||
"93.1%",
|
||||
"102.4%",
|
||||
"108.9%",
|
||||
@ -19543,5 +19543,646 @@
|
||||
"956.3%"
|
||||
]
|
||||
}
|
||||
},
|
||||
"爱可菲": {
|
||||
"A一段伤害": {
|
||||
"name": "A一段伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"51.6%",
|
||||
"55.7%",
|
||||
"59.9%",
|
||||
"65.9%",
|
||||
"70.1%",
|
||||
"74.9%",
|
||||
"81.5%",
|
||||
"88.1%",
|
||||
"94.7%",
|
||||
"101.9%",
|
||||
"109.1%",
|
||||
"116.3%",
|
||||
"123.5%",
|
||||
"130.7%",
|
||||
"137.9%"
|
||||
]
|
||||
},
|
||||
"A重击伤害": {
|
||||
"name": "A重击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"115.4%",
|
||||
"124.8%",
|
||||
"134.2%",
|
||||
"147.6%",
|
||||
"157.0%",
|
||||
"167.8%",
|
||||
"182.5%",
|
||||
"197.3%",
|
||||
"212.0%",
|
||||
"228.1%",
|
||||
"244.2%",
|
||||
"260.3%",
|
||||
"276.5%",
|
||||
"292.6%",
|
||||
"308.7%"
|
||||
]
|
||||
},
|
||||
"A高空下落伤害": {
|
||||
"name": "A高空下落伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"160%",
|
||||
"173%",
|
||||
"186%",
|
||||
"204%",
|
||||
"217%",
|
||||
"232%",
|
||||
"253%",
|
||||
"273%",
|
||||
"293%",
|
||||
"316%",
|
||||
"338%",
|
||||
"360%",
|
||||
"382%",
|
||||
"405%",
|
||||
"427%"
|
||||
]
|
||||
},
|
||||
"E伤害": {
|
||||
"name": "E伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"50.4%",
|
||||
"54.2%",
|
||||
"58.0%",
|
||||
"63.0%",
|
||||
"66.8%",
|
||||
"70.6%",
|
||||
"75.6%",
|
||||
"80.6%",
|
||||
"85.7%",
|
||||
"90.7%",
|
||||
"95.8%",
|
||||
"100.8%",
|
||||
"107.1%",
|
||||
"113.4%",
|
||||
"119.7%"
|
||||
]
|
||||
},
|
||||
"E冻霜芭菲伤害": {
|
||||
"name": "E冻霜芭菲伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"120.0%",
|
||||
"129.0%",
|
||||
"138.0%",
|
||||
"150.0%",
|
||||
"159.0%",
|
||||
"168.0%",
|
||||
"180.0%",
|
||||
"192.0%",
|
||||
"204.0%",
|
||||
"216.0%",
|
||||
"228.0%",
|
||||
"240.0%",
|
||||
"255.0%",
|
||||
"270.0%",
|
||||
"285.0%"
|
||||
]
|
||||
},
|
||||
"E流涌之刃伤害": {
|
||||
"name": "E流涌之刃伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"33.6%",
|
||||
"36.1%",
|
||||
"38.6%",
|
||||
"42.0%",
|
||||
"44.5%",
|
||||
"47.0%",
|
||||
"50.4%",
|
||||
"53.8%",
|
||||
"57.1%",
|
||||
"60.5%",
|
||||
"63.8%",
|
||||
"67.2%",
|
||||
"71.4%",
|
||||
"75.6%",
|
||||
"79.8%"
|
||||
]
|
||||
},
|
||||
"Q伤害": {
|
||||
"name": "Q伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"592.8%",
|
||||
"637.3%",
|
||||
"681.7%",
|
||||
"741.0%",
|
||||
"785.5%",
|
||||
"829.9%",
|
||||
"889.2%",
|
||||
"948.5%",
|
||||
"1007.8%",
|
||||
"1067.0%",
|
||||
"1126.3%",
|
||||
"1185.6%",
|
||||
"1259.7%",
|
||||
"1333.8%",
|
||||
"1407.9%"
|
||||
]
|
||||
},
|
||||
"Q治疗量": {
|
||||
"name": "Q治疗量",
|
||||
"type": "攻击",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"172.0%+1078.53",
|
||||
"184.9%+1186.39",
|
||||
"197.8%+1303.25",
|
||||
"215.0%+1429.10",
|
||||
"227.9%+1563.93",
|
||||
"240.8%+1707.75",
|
||||
"258.0%+1860.57",
|
||||
"275.3%+2022.37",
|
||||
"292.5%+2193.16",
|
||||
"309.7%+2372.94",
|
||||
"326.9%+2561.70",
|
||||
"344.1%+2759.46",
|
||||
"365.6%+2966.21",
|
||||
"387.1%+3181.94",
|
||||
"408.6%+3406.67"
|
||||
]
|
||||
}
|
||||
},
|
||||
"伊法": {
|
||||
"A扩散伤害": {
|
||||
"name": "A扩散伤害",
|
||||
"type": "扩散",
|
||||
"plus": 0,
|
||||
"value": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10"
|
||||
]
|
||||
},
|
||||
"A一段伤害": {
|
||||
"name": "A一段伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"53.6%",
|
||||
"57.6%",
|
||||
"61.6%",
|
||||
"67.0%",
|
||||
"71.0%",
|
||||
"75.1%",
|
||||
"80.4%",
|
||||
"85.8%",
|
||||
"91.1%",
|
||||
"96.5%",
|
||||
"101.9%",
|
||||
"107.2%",
|
||||
"113.9%",
|
||||
"120.6%",
|
||||
"127.3%"
|
||||
]
|
||||
},
|
||||
"A重击伤害": {
|
||||
"name": "A重击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"147.0%",
|
||||
"158.1%",
|
||||
"169.1%",
|
||||
"183.8%",
|
||||
"194.8%",
|
||||
"205.9%",
|
||||
"220.6%",
|
||||
"235.3%",
|
||||
"250.0%",
|
||||
"264.7%",
|
||||
"279.4%",
|
||||
"294.1%",
|
||||
"312.5%",
|
||||
"330.8%",
|
||||
"349.2%"
|
||||
]
|
||||
},
|
||||
"A高空下落伤害": {
|
||||
"name": "A高空下落伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"142%",
|
||||
"153%",
|
||||
"165%",
|
||||
"182%",
|
||||
"193%",
|
||||
"206%",
|
||||
"224%",
|
||||
"243%",
|
||||
"261%",
|
||||
"281%",
|
||||
"300%",
|
||||
"320%",
|
||||
"340%",
|
||||
"360%",
|
||||
"380%"
|
||||
]
|
||||
},
|
||||
"E秘药弹伤害": {
|
||||
"name": "E秘药弹伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"133.4%",
|
||||
"143.4%",
|
||||
"153.4%",
|
||||
"166.7%",
|
||||
"176.7%",
|
||||
"186.7%",
|
||||
"200.0%",
|
||||
"213.4%",
|
||||
"226.7%",
|
||||
"240.0%",
|
||||
"253.4%",
|
||||
"266.7%",
|
||||
"283.4%",
|
||||
"300.1%",
|
||||
"316.7%"
|
||||
]
|
||||
},
|
||||
"E秘药弹命中治疗量": {
|
||||
"name": "E秘药弹命中治疗量",
|
||||
"type": "元素精通",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"20.2%+48.1",
|
||||
"21.7%+53.0",
|
||||
"23.2%+58.2",
|
||||
"25.2%+63.8",
|
||||
"26.7%+69.8",
|
||||
"28.2%+76.2",
|
||||
"30.2%+83.1",
|
||||
"32.3%+90.3",
|
||||
"34.3%+97.9",
|
||||
"36.3%+105.9",
|
||||
"38.3%+114.4",
|
||||
"40.3%+123.2",
|
||||
"42.8%+132.4",
|
||||
"45.4%+142.1",
|
||||
"47.9%+152.1"
|
||||
]
|
||||
},
|
||||
"Q伤害": {
|
||||
"name": "Q伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"508.5%",
|
||||
"546.6%",
|
||||
"584.8%",
|
||||
"635.6%",
|
||||
"673.7%",
|
||||
"711.9%",
|
||||
"762.7%",
|
||||
"813.6%",
|
||||
"864.4%",
|
||||
"915.3%",
|
||||
"966.1%",
|
||||
"1017.0%",
|
||||
"1080.5%",
|
||||
"1144.1%",
|
||||
"1207.6%"
|
||||
]
|
||||
},
|
||||
"Q镇静标记伤害": {
|
||||
"name": "Q镇静标记伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"109.0%",
|
||||
"117.1%",
|
||||
"125.3%",
|
||||
"136.2%",
|
||||
"144.4%",
|
||||
"152.5%",
|
||||
"163.4%",
|
||||
"174.3%",
|
||||
"185.2%",
|
||||
"196.1%",
|
||||
"207.0%",
|
||||
"217.9%",
|
||||
"231.5%",
|
||||
"245.2%",
|
||||
"258.8%"
|
||||
]
|
||||
}
|
||||
},
|
||||
"丝柯克": {
|
||||
"A一段伤害": {
|
||||
"name": "A一段伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"54.5%",
|
||||
"59.0%",
|
||||
"63.4%",
|
||||
"69.7%",
|
||||
"74.2%",
|
||||
"79.2%",
|
||||
"86.2%",
|
||||
"93.2%",
|
||||
"100.2%",
|
||||
"107.8%",
|
||||
"115.4%",
|
||||
"123.0%",
|
||||
"130.6%",
|
||||
"138.2%",
|
||||
"145.8%"
|
||||
]
|
||||
},
|
||||
"A重击伤害": {
|
||||
"name": "A重击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 2,
|
||||
"value": [
|
||||
"66.8%",
|
||||
"72.3%",
|
||||
"77.7%",
|
||||
"85.5%",
|
||||
"90.9%",
|
||||
"97.1%",
|
||||
"105.7%",
|
||||
"114.2%",
|
||||
"122.8%",
|
||||
"132.1%",
|
||||
"141.4%",
|
||||
"150.7%",
|
||||
"160.1%",
|
||||
"169.4%",
|
||||
"178.7%"
|
||||
]
|
||||
},
|
||||
"A高空下落伤害": {
|
||||
"name": "A高空下落伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"160%",
|
||||
"173%",
|
||||
"186%",
|
||||
"204%",
|
||||
"217%",
|
||||
"232%",
|
||||
"253%",
|
||||
"273%",
|
||||
"293%",
|
||||
"316%",
|
||||
"338%",
|
||||
"360%",
|
||||
"382%",
|
||||
"405%",
|
||||
"427%"
|
||||
]
|
||||
},
|
||||
"E一段伤害": {
|
||||
"name": "E一段伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"132.8%",
|
||||
"143.6%",
|
||||
"154.4%",
|
||||
"169.9%",
|
||||
"180.7%",
|
||||
"193.1%",
|
||||
"210.0%",
|
||||
"227.0%",
|
||||
"244.0%",
|
||||
"262.6%",
|
||||
"281.1%",
|
||||
"299.6%",
|
||||
"318.2%",
|
||||
"336.7%",
|
||||
"355.2%"
|
||||
]
|
||||
},
|
||||
"E重击伤害": {
|
||||
"name": "E重击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 3,
|
||||
"value": [
|
||||
"44.5%",
|
||||
"48.2%",
|
||||
"51.8%",
|
||||
"57.0%",
|
||||
"60.6%",
|
||||
"64.8%",
|
||||
"70.4%",
|
||||
"76.1%",
|
||||
"81.8%",
|
||||
"88.1%",
|
||||
"94.3%",
|
||||
"100.5%",
|
||||
"106.7%",
|
||||
"112.9%",
|
||||
"119.1%"
|
||||
]
|
||||
},
|
||||
"E高空下落伤害": {
|
||||
"name": "E高空下落伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"160%",
|
||||
"173%",
|
||||
"186%",
|
||||
"204%",
|
||||
"217%",
|
||||
"232%",
|
||||
"253%",
|
||||
"273%",
|
||||
"293%",
|
||||
"316%",
|
||||
"338%",
|
||||
"360%",
|
||||
"382%",
|
||||
"405%",
|
||||
"427%"
|
||||
]
|
||||
},
|
||||
"Q斩击伤害": {
|
||||
"name": "Q斩击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 5,
|
||||
"value": [
|
||||
"122.8%",
|
||||
"132.0%",
|
||||
"141.2%",
|
||||
"153.4%",
|
||||
"162.7%",
|
||||
"171.9%",
|
||||
"184.1%",
|
||||
"196.4%",
|
||||
"208.7%",
|
||||
"221.0%",
|
||||
"233.2%",
|
||||
"245.5%",
|
||||
"260.9%",
|
||||
"276.2%",
|
||||
"291.6%"
|
||||
]
|
||||
}
|
||||
},
|
||||
"塔利雅": {
|
||||
"A一段伤害": {
|
||||
"name": "A一段伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"43.5%",
|
||||
"47.1%",
|
||||
"50.6%",
|
||||
"55.7%",
|
||||
"59.2%",
|
||||
"63.3%",
|
||||
"68.9%",
|
||||
"74.4%",
|
||||
"80.0%",
|
||||
"86.1%",
|
||||
"92.2%",
|
||||
"98.2%",
|
||||
"104.3%",
|
||||
"110.4%",
|
||||
"116.5%"
|
||||
]
|
||||
},
|
||||
"A重击伤害": {
|
||||
"name": "A重击伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"39.9%+55.1%",
|
||||
"43.1%+59.5%",
|
||||
"46.4%+64.0%",
|
||||
"51.0%+70.4%",
|
||||
"54.3%+74.9%",
|
||||
"58.0%+80.0%",
|
||||
"63.1%+87.1%",
|
||||
"68.2%+94.1%",
|
||||
"73.3%+101.2%",
|
||||
"78.8%+108.9%",
|
||||
"84.4%+116.5%",
|
||||
"90.0%+124.2%",
|
||||
"95.5%+131.9%",
|
||||
"101.1%+139.6%",
|
||||
"106.6%+147.3%"
|
||||
]
|
||||
},
|
||||
"A高空下落伤害": {
|
||||
"name": "A高空下落伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"160%",
|
||||
"173%",
|
||||
"186%",
|
||||
"204%",
|
||||
"217%",
|
||||
"232%",
|
||||
"253%",
|
||||
"273%",
|
||||
"293%",
|
||||
"316%",
|
||||
"338%",
|
||||
"360%",
|
||||
"382%",
|
||||
"405%",
|
||||
"427%"
|
||||
]
|
||||
},
|
||||
"E伤害": {
|
||||
"name": "E伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"232.8%",
|
||||
"250.3%",
|
||||
"267.7%",
|
||||
"291.0%",
|
||||
"308.5%",
|
||||
"325.9%",
|
||||
"349.2%",
|
||||
"372.5%",
|
||||
"395.8%",
|
||||
"419.0%",
|
||||
"442.3%",
|
||||
"465.6%",
|
||||
"494.7%",
|
||||
"523.8%",
|
||||
"552.9%"
|
||||
]
|
||||
},
|
||||
"Q伤害": {
|
||||
"name": "Q伤害",
|
||||
"type": "攻击力",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"406.4%",
|
||||
"436.9%",
|
||||
"467.4%",
|
||||
"508.0%",
|
||||
"538.5%",
|
||||
"569.0%",
|
||||
"609.6%",
|
||||
"650.2%",
|
||||
"690.9%",
|
||||
"731.5%",
|
||||
"772.2%",
|
||||
"812.8%",
|
||||
"863.6%",
|
||||
"914.4%",
|
||||
"965.2%"
|
||||
]
|
||||
},
|
||||
"Q圣眷护盾吸收量": {
|
||||
"name": "Q圣眷护盾吸收量",
|
||||
"type": "生命值",
|
||||
"plus": 1,
|
||||
"value": [
|
||||
"3.4%+323.56",
|
||||
"3.6%+355.92",
|
||||
"3.9%+390.97",
|
||||
"4.2%+428.73",
|
||||
"4.5%+469.18",
|
||||
"4.7%+512.33",
|
||||
"5.0%+558.17",
|
||||
"5.4%+606.71",
|
||||
"5.7%+657.95",
|
||||
"6.0%+711.88",
|
||||
"6.4%+768.51",
|
||||
"6.7%+827.84",
|
||||
"7.1%+889.86",
|
||||
"7.6%+954.58",
|
||||
"8.0%+1022.00"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,172 @@
|
||||
{
|
||||
"丝柯克": {
|
||||
"normal": {
|
||||
"normal_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"normal_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_skill": {
|
||||
"50": "E:extraBonus+70;Q:extraBonus+60",
|
||||
"70": ""
|
||||
},
|
||||
"fight_talent": {
|
||||
"1": "",
|
||||
"2": "addAtk+70",
|
||||
"3": "",
|
||||
"4": "addAtk+40",
|
||||
"5": "",
|
||||
"6": ""
|
||||
},
|
||||
"group_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"group_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"塔利雅": {
|
||||
"normal": {
|
||||
"normal_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"normal_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"fight_talent": {
|
||||
"1": "",
|
||||
"2": "shieldBonus+25",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
},
|
||||
"group_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"group_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"爱可菲": {
|
||||
"normal": {
|
||||
"normal_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"normal_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_skill": {
|
||||
"50": "",
|
||||
"70": "HydroResist+-55;CryoResist+-55"
|
||||
},
|
||||
"fight_talent": {
|
||||
"1": "EQ:critDmg+60",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
},
|
||||
"group_skill": {
|
||||
"50": "",
|
||||
"70": "HydroResist+-55;CryoResist+-55"
|
||||
},
|
||||
"group_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"伊法": {
|
||||
"normal": {
|
||||
"normal_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"normal_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_skill": {
|
||||
"50": "elementalMastery+80",
|
||||
"70": ""
|
||||
},
|
||||
"fight_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "elementalMastery+100",
|
||||
"5": "",
|
||||
"6": ""
|
||||
},
|
||||
"group_skill": {
|
||||
"50": "",
|
||||
"70": ""
|
||||
},
|
||||
"group_talent": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": "",
|
||||
"6": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"伊安珊": {
|
||||
"normal": {
|
||||
"normal_skill": {
|
||||
|
@ -378,5 +378,21 @@
|
||||
"瓦雷莎": [
|
||||
"Q",
|
||||
"A"
|
||||
],
|
||||
"爱可菲": [
|
||||
"E",
|
||||
"Q"
|
||||
],
|
||||
"伊法": [
|
||||
"E",
|
||||
"Q"
|
||||
],
|
||||
"丝柯克": [
|
||||
"Q",
|
||||
"E"
|
||||
],
|
||||
"塔利雅": [
|
||||
"Q",
|
||||
"E"
|
||||
]
|
||||
}
|
@ -405,7 +405,8 @@
|
||||
"芙宁娜": [
|
||||
"血量",
|
||||
"暴击率",
|
||||
"暴击伤害"
|
||||
"暴击伤害",
|
||||
"元素充能效率"
|
||||
],
|
||||
"娜维娅": [
|
||||
"攻击力",
|
||||
@ -489,9 +490,35 @@
|
||||
"暴击率",
|
||||
"元素充能效率"
|
||||
],
|
||||
"玛薇卡": [
|
||||
"攻击力",
|
||||
"暴击率",
|
||||
"暴击伤害",
|
||||
"元素精通"
|
||||
],
|
||||
"瓦雷莎": [
|
||||
"攻击力",
|
||||
"暴击率",
|
||||
"暴击伤害"
|
||||
],
|
||||
"爱可菲": [
|
||||
"攻击力",
|
||||
"元素充能效率",
|
||||
"血量"
|
||||
],
|
||||
"伊法": [
|
||||
"攻击力",
|
||||
"暴击率",
|
||||
"暴击伤害",
|
||||
"元素充能效率"
|
||||
],
|
||||
"丝柯克": [
|
||||
"攻击力",
|
||||
"暴击率",
|
||||
"暴击伤害"
|
||||
],
|
||||
"塔利雅": [
|
||||
"元素充能效率",
|
||||
"血量"
|
||||
]
|
||||
}
|
@ -1,4 +1,128 @@
|
||||
{
|
||||
"苍耀": {
|
||||
"normal": {
|
||||
"normal_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_effect": {
|
||||
"1": "addAtk+48;critDmg+40",
|
||||
"2": "addAtk+60;critDmg+50",
|
||||
"3": "addAtk+72;critDmg+60",
|
||||
"4": "addAtk+84;critDmg+70",
|
||||
"5": "addAtk+96;critDmg+80"
|
||||
},
|
||||
"group_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
},
|
||||
"time": 12,
|
||||
"extra": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"香韵奏者": {
|
||||
"normal": {
|
||||
"normal_effect": {
|
||||
"1": "addAtk+12",
|
||||
"2": "addAtk+15",
|
||||
"3": "addAtk+18",
|
||||
"4": "addAtk+21",
|
||||
"5": "addAtk+24"
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_effect": {
|
||||
"1": "addAtk+44",
|
||||
"2": "addAtk+55",
|
||||
"3": "addAtk+66",
|
||||
"4": "addAtk+77",
|
||||
"5": "addAtk+88"
|
||||
},
|
||||
"group_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
},
|
||||
"time": 3,
|
||||
"extra": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"柔灯挽歌": {
|
||||
"normal": {
|
||||
"normal_effect": {
|
||||
"1": "addAtk+15",
|
||||
"2": "addAtk+19",
|
||||
"3": "addAtk+23",
|
||||
"4": "addAtk+27",
|
||||
"5": "addAtk+31"
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_effect": {
|
||||
"1": "dmgBonus+36",
|
||||
"2": "dmgBonus+46",
|
||||
"3": "dmgBonus+56",
|
||||
"4": "dmgBonus+66",
|
||||
"5": "dmgBonus+76"
|
||||
},
|
||||
"group_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
},
|
||||
"time": 8,
|
||||
"extra": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"冷寂迸音": {
|
||||
"normal": {
|
||||
"normal_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
}
|
||||
},
|
||||
"fight": {
|
||||
"fight_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
},
|
||||
"group_effect": {
|
||||
"1": "",
|
||||
"2": "",
|
||||
"3": "",
|
||||
"4": "",
|
||||
"5": ""
|
||||
},
|
||||
"time": 10,
|
||||
"extra": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"溢彩心念": {
|
||||
"normal": {
|
||||
"normal_effect": {
|
||||
|
@ -3,6 +3,7 @@ from typing import Dict, Union
|
||||
|
||||
import aiofiles
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
from ..utils.map.name_covert import avatar_id_to_name
|
||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||
@ -15,13 +16,13 @@ async def _get_rank(uid: str) -> Union[Dict, str]:
|
||||
return '未开启排名系统...'
|
||||
path = PLAYER_PATH / uid / 'rank.json'
|
||||
if not path.exists():
|
||||
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
|
||||
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
|
||||
|
||||
async with aiofiles.open(path, 'r', encoding='UTF-8') as file:
|
||||
rank_data = json.loads(await file.read())
|
||||
|
||||
if len(rank_data) == 0:
|
||||
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
|
||||
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
|
||||
|
||||
return rank_data
|
||||
|
||||
|
@ -6,6 +6,7 @@ from PIL import Image
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import CHAR_HINT
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from .to_card import draw_enka_card
|
||||
from .draw_char_card import draw_char_img
|
||||
from .draw_group_dmg import draw_group_dmg_img
|
||||
@ -136,7 +137,7 @@ async def get_showcase(uid: str) -> Union[bytes, str]:
|
||||
if '\u4e00' <= file_name[0] <= '\u9fff':
|
||||
char_list.append(file_name.split('.')[0])
|
||||
if char_list == []:
|
||||
return '您还没有已缓存的角色噢~\n请先使用[强制刷新]命令缓存~'
|
||||
return f'您还没有已缓存的角色噢~\n请先使用[{PREFIX}强制刷新]命令缓存~'
|
||||
img = await draw_enka_card(uid=uid, char_list=char_list)
|
||||
return img
|
||||
|
||||
|
@ -392,6 +392,7 @@ class Character:
|
||||
prop['sp'] = []
|
||||
prop['baseArea'] = 1
|
||||
prop['powerPlus'] = 1
|
||||
prop['extraBonus'] = 0
|
||||
if prop['baseHp'] + prop['addHp'] == prop['hp']:
|
||||
prop['exHp'] = prop['addHp']
|
||||
prop['exAtk'] = prop['addAtk']
|
||||
|
@ -352,6 +352,8 @@ class Fight:
|
||||
|
||||
base_area_plus = await self.get_base_area_plus(char)
|
||||
|
||||
extra_bonus = char.fight_prop['extraBonus'] + 1
|
||||
|
||||
# 对草神进行特殊计算
|
||||
if '灭净三业' in power.name or '业障除' in power.name:
|
||||
base = await self.get_sp_base(power, char)
|
||||
@ -367,6 +369,7 @@ class Fight:
|
||||
|
||||
# 基本乘区 = 有效数值(例如攻击力) * 倍率 + 固定值 + 激化区 + 额外加成值 + 特殊加成值
|
||||
base_area = base + reaction_power + add_dmg + char.sp.addDmg
|
||||
base_area *= extra_bonus
|
||||
if base_area_plus != 1:
|
||||
base_area_plus -= 1
|
||||
base_area = base_area_plus * base_area
|
||||
|
@ -6,6 +6,7 @@ from copy import deepcopy
|
||||
import aiofiles
|
||||
from gsuid_core.logger import logger
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||
from .to_data import ARTIFACT_DATA, input_artifacts_data
|
||||
|
||||
@ -15,7 +16,7 @@ pattern = r'^[\u4e00-\u9fa5]'
|
||||
async def refresh_player_list(uid: str, is_force: bool = False) -> str:
|
||||
player = PLAYER_PATH / uid
|
||||
if not player.exists():
|
||||
return f'该UID{uid}对应面板数据不存在, 请先进行 [刷新面板]!'
|
||||
return f'该UID{uid}对应面板数据不存在, 请先进行 [{PREFIX}刷新面板]!'
|
||||
|
||||
path = player / 'artifacts.json'
|
||||
all_artifacts = deepcopy(ARTIFACT_DATA)
|
||||
|
@ -3,6 +3,7 @@ from pathlib import Path
|
||||
from typing import Dict, List, Tuple, Union, Optional
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.api.enka.models import EnkaData
|
||||
|
||||
from .to_data import enka_to_dict
|
||||
@ -42,6 +43,7 @@ async def enka_to_card(
|
||||
return await convert_img(pic_500)
|
||||
|
||||
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
|
||||
logger.info(f'[强制刷新] UID{uid}成功!')
|
||||
return img, char_data_list
|
||||
|
||||
|
||||
@ -72,7 +74,7 @@ async def draw_enka_card(
|
||||
if char_num <= 8:
|
||||
based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220
|
||||
else:
|
||||
based_w, based_h = 1200, 660 + (char_num - 5) // 5 * 110
|
||||
based_w, based_h = 1200, 660 + (char_num - 5) // 5 * 113
|
||||
if (char_num - 5) % 5 >= 4:
|
||||
based_h += 110
|
||||
|
||||
|
@ -7,10 +7,10 @@ from typing import Dict, List, Union, Literal, Optional
|
||||
|
||||
import aiofiles
|
||||
from httpx import ReadTimeout
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
from gsuid_core.utils.api.enka.models import EnkaData
|
||||
from gsuid_core.utils.api.enka.request import get_enka_info
|
||||
|
||||
from ..utils.message import UID_HINT
|
||||
from .mono.Character import Character
|
||||
from ..utils.api.cv.request import _CvApi
|
||||
from .draw_normal import get_artifact_score_data
|
||||
|
@ -137,6 +137,12 @@ async def mys_to_data(uid: str):
|
||||
}
|
||||
)
|
||||
|
||||
if len(avatar_skill) > 4:
|
||||
# 移除最后两个元素
|
||||
avatar_skill.pop()
|
||||
avatar_skill.pop()
|
||||
break
|
||||
|
||||
weapon = char['weapon']
|
||||
weapon_main = weapon['main_property']
|
||||
main_prop_id = Id2PropId[str(weapon_main['property_type'])]
|
||||
@ -308,4 +314,3 @@ async def mys_to_card(uid: str) -> Union[str, bytes, Tuple[bytes, List[Dict]]]:
|
||||
|
||||
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
|
||||
return img, char_data_list
|
||||
return img, char_data_list
|
||||
|
@ -3,10 +3,10 @@ from pathlib import Path
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.message_models import Button
|
||||
|
||||
from ..version import Genshin_version
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.message import GButton as Button
|
||||
|
||||
PRIMOGEMS_DATA_PATH = Path(__file__).parent / 'primogems_data'
|
||||
IMG_PATH = Path(__file__).parent / 'img_data'
|
||||
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 505 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 460 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.7 MiB |
@ -2,9 +2,9 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.aps import scheduler
|
||||
from gsuid_core.message_models import Button
|
||||
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.message import GButton as Button
|
||||
from .draw_event_img import get_event_img, get_all_event_img
|
||||
|
||||
sv_event_list = SV('活动列表')
|
||||
|
@ -2,12 +2,12 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.segment import MessageSegment
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
from gsuid_core.utils.database.models import GsBind
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from ..utils.message import GButton as Button
|
||||
from .draw_gachalogs import draw_gachalogs_img
|
||||
from .get_gachalogs import save_gachalogs, get_full_gachalog
|
||||
from .export_and_import import export_gachalogs, import_gachalogs
|
||||
|
@ -9,6 +9,7 @@ from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..utils.map.GS_MAP_PATH import charList
|
||||
from ..utils.image.convert import convert_img
|
||||
from .get_gachalogs import all_gacha_type_name
|
||||
@ -60,8 +61,9 @@ NORMAL_LIST = [
|
||||
|
||||
UP_LIST = {
|
||||
'刻晴': [(2021, 2, 17, 18, 0, 0), (2021, 3, 2, 15, 59, 59)],
|
||||
'提纳里': [(2022, 8, 24, 11, 0, 0), (2022, 9, 9, 17, 59, 59)],
|
||||
'迪希雅': [(2023, 3, 1, 11, 0, 0), (2023, 3, 21, 17, 59, 59)],
|
||||
'提纳里': [(2022, 8, 24, 9, 0, 0), (2022, 9, 9, 17, 59, 59)],
|
||||
'迪希雅': [(2023, 3, 1, 9, 0, 0), (2023, 3, 21, 17, 59, 59)],
|
||||
'梦见月瑞希': [(2025, 2, 12, 9, 0, 0), (2025, 3, 4, 17, 59, 59)],
|
||||
}
|
||||
|
||||
|
||||
@ -141,7 +143,7 @@ def check_up(name: str, _time: str) -> bool:
|
||||
async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]:
|
||||
path = PLAYER_PATH / str(uid) / 'gacha_logs.json'
|
||||
if not path.exists():
|
||||
return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~'
|
||||
return f'你还没有祈愿数据噢~\n请添加Stoken后使用命令`{PREFIX}刷新抽卡记录`更新祈愿数据~'
|
||||
with open(path, 'r', encoding='UTF-8') as f:
|
||||
gacha_data = json.load(f)
|
||||
|
||||
|
@ -2,12 +2,12 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_gcgdesk import draw_deck_img
|
||||
from .draw_gcginfo import draw_gcg_info
|
||||
from ..utils.message import GButton as Button
|
||||
|
||||
sv_gcg = SV('查询七圣')
|
||||
|
||||
|
@ -5,7 +5,6 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.segment import MessageSegment
|
||||
|
||||
from .get_guide import get_gs_guide
|
||||
@ -13,6 +12,7 @@ from ..version import Genshin_version
|
||||
|
||||
# from .get_abyss_data import get_review
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.message import GButton as Button
|
||||
from .get_new_abyss_data import get_review_data
|
||||
from ..utils.resource.RESOURCE_PATH import REF_PATH
|
||||
from .get_bbs_post_guide import get_material_way_post
|
||||
|
38
GenshinUID/genshinuid_hard_challenge/__init__.py
Normal file
@ -0,0 +1,38 @@
|
||||
import re
|
||||
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_hard_challenge import draw_hard_challenge_img
|
||||
|
||||
sv_hard_abyss = SV('查询幽境危战')
|
||||
|
||||
|
||||
@sv_hard_abyss.on_command(
|
||||
(
|
||||
'查询幽境危战',
|
||||
'幽境危战',
|
||||
'肃靖险乱',
|
||||
'新新深渊',
|
||||
'三路深渊',
|
||||
'yjwz',
|
||||
),
|
||||
block=True,
|
||||
)
|
||||
async def send_hard_abyss_info(bot: Bot, ev: Event):
|
||||
name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text))
|
||||
if name:
|
||||
return
|
||||
|
||||
await bot.logger.info('开始执行[幽境危战]')
|
||||
uid, user_id = await get_uid(bot, ev, True)
|
||||
if uid is None:
|
||||
return await bot.send(UID_HINT)
|
||||
await bot.logger.info('[幽境危战]uid: {}'.format(uid))
|
||||
|
||||
im = await draw_hard_challenge_img(uid, ev)
|
||||
|
||||
await bot.send(im)
|
168
GenshinUID/genshinuid_hard_challenge/draw_hard_challenge.py
Normal file
@ -0,0 +1,168 @@
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Union
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.utils.error_reply import get_error
|
||||
from gsuid_core.utils.api.mys.models import AbyssBattleAvatar
|
||||
from gsuid_core.utils.image.image_tools import get_avatar_with_ring
|
||||
|
||||
from ..utils.mys_api import mys_api
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.image.image_tools import add_footer
|
||||
from ..utils.resource.download_url import download_file
|
||||
from ..genshinuid_abyss.draw_abyss_card import _draw_char_card
|
||||
from ..utils.resource.RESOURCE_PATH import ICON_PATH, CHAR_SIDE_PATH
|
||||
from ..utils.fonts.genshin_fonts import (
|
||||
gs_font_22,
|
||||
gs_font_26,
|
||||
gs_font_32,
|
||||
gs_font_36,
|
||||
)
|
||||
|
||||
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||
|
||||
|
||||
async def draw_hard_challenge_img(uid: str, ev: Event) -> Union[str, bytes]:
|
||||
data = await mys_api.get_hard_challenge_data(uid)
|
||||
if isinstance(data, int):
|
||||
return get_error(data)
|
||||
|
||||
schedule = data['data'][0]['schedule']
|
||||
sdata = data['data'][0]['single']
|
||||
|
||||
start_time: str = datetime.fromtimestamp(
|
||||
int(schedule['start_time'])
|
||||
).strftime('%Y/%m/%d')
|
||||
end_time: str = datetime.fromtimestamp(int(schedule['end_time'])).strftime(
|
||||
'%Y/%m/%d'
|
||||
)
|
||||
time_range = f"{start_time} ~ {end_time}"
|
||||
|
||||
img = Image.open(TEXT_PATH / 'bg.jpg').convert('RGBA')
|
||||
|
||||
title = Image.open(TEXT_PATH / 'title.png')
|
||||
title_draw = ImageDraw.Draw(title)
|
||||
avatar = await get_avatar_with_ring(ev, 278)
|
||||
title.paste(avatar, (315, 50), avatar)
|
||||
title_draw.text((450, 380), f'UID {uid}', 'white', gs_font_26, 'mm')
|
||||
title_draw.text((450, 422), time_range, (199, 199, 199), gs_font_22, 'mm')
|
||||
img.paste(title, (0, 0), title)
|
||||
|
||||
best_data = sdata['best']
|
||||
if not best_data:
|
||||
return '你还没有挑战过[肃靖险乱]噢!(或需要等待数据同步后重试)'
|
||||
|
||||
challenge: List[Dict] = sdata['challenge']
|
||||
|
||||
banner = Image.open(TEXT_PATH / 'banner.png')
|
||||
medal = (
|
||||
Image.open(TEXT_PATH / f'medal_{best_data["difficulty"]}.png')
|
||||
.resize((84, 84))
|
||||
.convert('RGBA')
|
||||
)
|
||||
banner_draw = ImageDraw.Draw(banner)
|
||||
banner_draw.text(
|
||||
(820, 51), f'{best_data["second"]}秒', 'white', gs_font_32, 'rm'
|
||||
)
|
||||
banner.paste(medal, (636, 9), medal)
|
||||
img.paste(banner, (0, 470), banner)
|
||||
|
||||
card_fg = Image.open(TEXT_PATH / 'card_fg.png')
|
||||
for findex, floor in enumerate(challenge):
|
||||
card = Image.open(TEXT_PATH / 'card.png')
|
||||
card_draw = ImageDraw.Draw(card)
|
||||
name: str = floor['name']
|
||||
sec: int = floor['second']
|
||||
monster: Dict = floor['monster']
|
||||
best_avatar: List[Dict] = floor['best_avatar']
|
||||
teams: List[Dict] = floor['teams']
|
||||
|
||||
card_draw.text((59, 63), name, 'white', gs_font_36, 'lm')
|
||||
card_draw.text((79, 123), '战斗用时', 'white', gs_font_26, 'lm')
|
||||
card_draw.text((456, 123), f'{sec}秒', 'white', gs_font_26, 'rm')
|
||||
|
||||
monster_bg = monster['icon']
|
||||
monster_name = f"js_{monster['name']}.png"
|
||||
|
||||
mpath = ICON_PATH / monster_name
|
||||
if not mpath.exists():
|
||||
await download_file(monster_bg, 8, monster_name)
|
||||
monster_img = Image.open(mpath).resize((563, 563))
|
||||
card.paste(monster_img, (425, -73), monster_img)
|
||||
card_draw.rounded_rectangle((726, 31, 826, 68), 5, (192, 24, 24))
|
||||
card_draw.text(
|
||||
(776, 50), f'Lv{monster["level"]}', 'white', gs_font_26, 'mm'
|
||||
)
|
||||
|
||||
card.paste(card_fg, (0, 0), card_fg)
|
||||
|
||||
for aindex, avatar in enumerate(teams):
|
||||
avatar_data: AbyssBattleAvatar = {
|
||||
'id': avatar['avatar_id'],
|
||||
'icon': avatar['image'],
|
||||
'level': avatar['level'],
|
||||
'rarity': avatar['rarity'],
|
||||
}
|
||||
avatar_card = await _draw_char_card(avatar_data, avatar['rank'])
|
||||
avatar_card = avatar_card.resize((102, 124))
|
||||
card.paste(avatar_card, (111 * aindex + 58, 171), avatar_card)
|
||||
|
||||
side_path_name_1 = f"{best_avatar[0]['avatar_id']}.png"
|
||||
side_path_1 = CHAR_SIDE_PATH / side_path_name_1
|
||||
if not side_path_1.exists():
|
||||
await download_file(
|
||||
best_avatar[0]['side_icon'],
|
||||
3,
|
||||
side_path_name_1,
|
||||
)
|
||||
side_img_1 = Image.open(side_path_1).resize((83, 83))
|
||||
|
||||
side_path_name_2 = f"{best_avatar[1]['avatar_id']}.png"
|
||||
side_path_2 = CHAR_SIDE_PATH / side_path_name_2
|
||||
if not side_path_2.exists():
|
||||
await download_file(
|
||||
best_avatar[1]['side_icon'],
|
||||
3,
|
||||
side_path_name_2,
|
||||
)
|
||||
side_img_2 = Image.open(side_path_2).resize((83, 83))
|
||||
|
||||
card.paste(side_img_1, (54, 291), side_img_1)
|
||||
card.paste(side_img_2, (435, 291), side_img_2)
|
||||
card_draw.text(
|
||||
(141, 354),
|
||||
'最强一击',
|
||||
'white',
|
||||
gs_font_26,
|
||||
'lm',
|
||||
)
|
||||
card_draw.text(
|
||||
(426, 354),
|
||||
best_avatar[0]['dps'],
|
||||
'white',
|
||||
gs_font_26,
|
||||
'rm',
|
||||
)
|
||||
|
||||
card_draw.text(
|
||||
(521, 354),
|
||||
'最高总伤',
|
||||
'white',
|
||||
gs_font_26,
|
||||
'lm',
|
||||
)
|
||||
card_draw.text(
|
||||
(806, 354),
|
||||
best_avatar[1]['dps'],
|
||||
'white',
|
||||
gs_font_26,
|
||||
'rm',
|
||||
)
|
||||
|
||||
img.paste(card, (0, 576 + findex * 420), card)
|
||||
|
||||
img = add_footer(img, 800, 0)
|
||||
|
||||
return await convert_img(img)
|
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/banner.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/bg.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/card.png
Normal file
After Width: | Height: | Size: 252 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/card_fg.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/medal_3.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/medal_4.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/medal_5.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/medal_6.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
GenshinUID/genshinuid_hard_challenge/texture2d/title.png
Normal file
After Width: | Height: | Size: 13 KiB |
@ -1,9 +1,9 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Dict, Union
|
||||
|
||||
import aiofiles
|
||||
from PIL import Image
|
||||
from msgspec import json as msgjson
|
||||
from gsuid_core.help.model import PluginHelp
|
||||
from gsuid_core.help.draw_plugin_help import get_help
|
||||
from gsuid_core.sv import get_plugin_available_prefix
|
||||
@ -26,7 +26,7 @@ BANNER_BG = Image.open(TEXT_PATH / 'banner_bg.jpg')
|
||||
|
||||
async def get_help_data() -> Dict[str, PluginHelp]:
|
||||
async with aiofiles.open(HELP_DATA, 'rb') as file:
|
||||
return msgjson.decode(await file.read(), type=Dict[str, PluginHelp])
|
||||
return json.loads(await file.read())
|
||||
|
||||
|
||||
async def get_core_help() -> Union[bytes, str]:
|
||||
|
@ -18,6 +18,14 @@
|
||||
"need_sk": false,
|
||||
"need_admin": false
|
||||
},
|
||||
{
|
||||
"name": "[上期]幽境危战/yjwz",
|
||||
"desc": "肃靖险乱信息一览",
|
||||
"eg": "新新深渊",
|
||||
"need_ck": true,
|
||||
"need_sk": false,
|
||||
"need_admin": false
|
||||
},
|
||||
{
|
||||
"name": "幻想真境剧诗",
|
||||
"desc": "新深渊信息一览,后可跟UID",
|
||||
|
@ -1,11 +1,11 @@
|
||||
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 gsuid_core.utils.database.models import GsBind
|
||||
|
||||
from .note_text import award
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .draw_note_card import draw_note_img
|
||||
|
||||
sv_get_monthly_data = SV('查询札记')
|
||||
|
@ -3,16 +3,27 @@ import re
|
||||
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 ..utils.message import UID_HINT
|
||||
from .draw_poetry_abyss import draw_poetry_abyss_img
|
||||
|
||||
sv_poetry_abyss = SV('查询幻想真境剧诗')
|
||||
|
||||
|
||||
@sv_poetry_abyss.on_command(
|
||||
('查询幻想真境剧诗', '幻想真境剧诗', '新深渊', '查询新深渊', '真剧诗'),
|
||||
(
|
||||
'查询幻想真境剧诗',
|
||||
'幻想真境剧诗',
|
||||
'新深渊',
|
||||
'查询新深渊',
|
||||
'真剧诗',
|
||||
'查询上期幻想真境剧诗',
|
||||
'上期幻想真境剧诗',
|
||||
'上期新深渊',
|
||||
'查询上期新深渊',
|
||||
'上期真剧诗',
|
||||
),
|
||||
block=True,
|
||||
)
|
||||
async def send_poetry_abyss_info(bot: Bot, ev: Event):
|
||||
@ -26,6 +37,10 @@ async def send_poetry_abyss_info(bot: Bot, ev: Event):
|
||||
return await bot.send(UID_HINT)
|
||||
await bot.logger.info('[幻想真境剧诗]uid: {}'.format(uid))
|
||||
|
||||
im = await draw_poetry_abyss_img(uid, ev)
|
||||
if '上期' in ev.command:
|
||||
active = 2
|
||||
else:
|
||||
active = None
|
||||
im = await draw_poetry_abyss_img(uid, ev, active)
|
||||
|
||||
await bot.send(im)
|
||||
|
@ -1,6 +1,6 @@
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from typing import List, Union
|
||||
from typing import List, Union, Optional
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
@ -63,15 +63,21 @@ async def draw_buff(
|
||||
)
|
||||
|
||||
|
||||
async def draw_poetry_abyss_img(uid: str, ev: Event) -> Union[str, bytes]:
|
||||
data = await mys_api.get_poetry_abyss_data(uid)
|
||||
async def draw_poetry_abyss_img(
|
||||
uid: str, ev: Event, active: Optional[int] = None
|
||||
) -> Union[str, bytes]:
|
||||
data = await mys_api.get_poetry_abyss_data(uid, active)
|
||||
if isinstance(data, int):
|
||||
return get_error(data)
|
||||
|
||||
if not data['is_unlock'] or not data['data']:
|
||||
return '[幻想真境剧诗] 你还没有解锁该模式!'
|
||||
|
||||
data = data['data'][0]
|
||||
if active:
|
||||
data = data['data'][-1]
|
||||
else:
|
||||
data = data['data'][0]
|
||||
|
||||
round_data = data['detail']['rounds_data']
|
||||
stat_data = data['stat']
|
||||
|
||||
|
@ -2,10 +2,10 @@ from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.aps import scheduler
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
from gsuid_core.utils.database.models import GsBind
|
||||
|
||||
from .get_draw import post_my_draw
|
||||
from ..utils.message import UID_HINT
|
||||
from .daily_check_draw import daily_get_draw
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
|
||||
|
@ -8,9 +8,9 @@ from gsuid_core.aps import scheduler
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.models import Event, Message
|
||||
from gsuid_core.segment import MessageSegment
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
|
||||
from ..utils.convert import get_uid
|
||||
from ..utils.message import UID_HINT
|
||||
from .resin_text import get_resin_text
|
||||
from .draw_resin_card import get_resin_img
|
||||
from .notice import MR_NOTICE, get_notice_list
|
||||
@ -61,7 +61,7 @@ async def notice_job(force: bool = False):
|
||||
msg_list, 'direct', user_id, bot_id, '', ''
|
||||
)
|
||||
await asyncio.sleep(0.5)
|
||||
logger.info('[推送检查] 私聊推送完成')
|
||||
logger.info('✅[推送检查] 私聊推送完成')
|
||||
for gid in result[bot_id]['group']:
|
||||
msg_list = [
|
||||
MessageSegment.text('✅[原神] 推送提醒:\n'),
|
||||
@ -72,12 +72,17 @@ async def notice_job(force: bool = False):
|
||||
msg_list.append(MessageSegment.text(msg))
|
||||
msg_list.append(MessageSegment.text(MR_NOTICE))
|
||||
await bot.target_send(
|
||||
msg_list, 'group', gid, bot_id, '', ''
|
||||
msg_list,
|
||||
'group',
|
||||
gid,
|
||||
bot_id,
|
||||
'',
|
||||
'',
|
||||
)
|
||||
await asyncio.sleep(0.5)
|
||||
logger.info('[推送检查] 群聊推送完成')
|
||||
logger.info('✅[推送检查] 群聊推送完成')
|
||||
else:
|
||||
logger.info('[推送检查] 已关闭全局推送, 停止任务...')
|
||||
logger.info('✅[推送检查] 已关闭全局推送, 停止任务...')
|
||||
|
||||
|
||||
@sv_get_resin.on_fullmatch(('每日', 'mr', '实时便笺', '便笺', '便签'))
|
||||
|
@ -5,11 +5,12 @@ from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.api.mys.models import DailyNoteData
|
||||
from gsuid_core.utils.database.models import GsPush, GsUser
|
||||
|
||||
from ..utils.message import PREFIX
|
||||
from ..utils.mys_api import mys_api
|
||||
from ..utils.api.mys.models import WidgetResin
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
|
||||
MR_NOTICE = '\n✅可发送[mr]或者[每日]来查看更多信息!\n'
|
||||
MR_NOTICE = f'\n✅可发送[{PREFIX}mr]或者[{PREFIX}每日]来查看更多信息!\n'
|
||||
|
||||
NOTICE = {
|
||||
'coin': '💰你的洞天宝钱快满啦!',
|
||||
|
@ -3,9 +3,9 @@ import re
|
||||
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 ..utils.message import UID_HINT
|
||||
from .get_regtime import calc_reg_time
|
||||
from .draw_all_char import draw_char_pic
|
||||
from .draw_roleinfo_card import draw_pic
|
||||
|
@ -3,11 +3,11 @@ from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.aps import scheduler
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import UID_HINT
|
||||
from gsuid_core.utils.database.models import GsBind
|
||||
from gsuid_core.utils.sign.sign import sign_in, daily_sign
|
||||
from gsuid_core.utils.boardcast.send_msg import send_board_cast_msg
|
||||
|
||||
from ..utils.message import UID_HINT
|
||||
from ..genshinuid_config.gs_config import gsconfig
|
||||
|
||||
SIGN_TIME = gsconfig.get_config('SignTime').data
|
||||
|
@ -1,7 +1,5 @@
|
||||
import asyncio
|
||||
import threading
|
||||
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.server import on_core_start
|
||||
|
||||
from ..genshinuid_resource import startup
|
||||
|
||||
@ -11,12 +9,16 @@ from ..genshinuid_guide.get_new_abyss_data import download_Oceanid
|
||||
# from ..genshinuid_enka.start import check_artifacts_list
|
||||
# from ..genshinuid_guide.get_abyss_data import generate_data
|
||||
from ..utils.resource.generate_char_card import create_all_char_card
|
||||
|
||||
'''
|
||||
from ..genshinuid_xkdata.get_all_char_data import (
|
||||
save_all_char_info,
|
||||
save_all_abyss_rank,
|
||||
)
|
||||
'''
|
||||
|
||||
|
||||
@on_core_start
|
||||
async def all_start():
|
||||
try:
|
||||
await download_Oceanid()
|
||||
@ -25,10 +27,7 @@ async def all_start():
|
||||
await create_all_char_card()
|
||||
# await draw_teyvat_abyss_img()
|
||||
# await generate_data()
|
||||
await save_all_char_info()
|
||||
await save_all_abyss_rank()
|
||||
# await save_all_char_info()
|
||||
# await save_all_abyss_rank()
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
|
||||
|
||||
threading.Thread(target=lambda: asyncio.run(all_start()), daemon=True).start()
|
||||
|
@ -1,12 +1,12 @@
|
||||
from gsuid_core.sv import SV
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.message_models import Button
|
||||
from gsuid_core.segment import MessageSegment
|
||||
from gsuid_core.utils.database.models import GsBind
|
||||
|
||||
from .get_ck_help_msg import get_ck_help
|
||||
from ..utils.message import send_diff_msg
|
||||
from ..utils.message import GButton as Button
|
||||
|
||||
sv_user_info = SV('用户信息')
|
||||
sv_user_help = SV('绑定帮助')
|
||||
|
@ -2,7 +2,9 @@ from typing import List
|
||||
|
||||
from gsuid_core.models import Message
|
||||
|
||||
CK_QRCODE_LOGIN = '''先发送【绑定uidxxx】绑定UID,
|
||||
from ..utils.message import PREFIX
|
||||
|
||||
CK_QRCODE_LOGIN = f'''先发送【{PREFIX}绑定uidxxx】绑定UID,
|
||||
然后发送【扫码登陆】, 使用米游社APP扫码完成绑定, 【[或者]】选择以下方法
|
||||
'''
|
||||
|
||||
|
@ -115,7 +115,14 @@ async def avatarId2SkillGroupList():
|
||||
for skill in skill_data:
|
||||
if 'proudSkillGroupId' in skill:
|
||||
if skill['abilityName']:
|
||||
_name = skill['skillIcon'].split('_')[2]
|
||||
_name = ''
|
||||
if (
|
||||
'skillIcon' in skill
|
||||
and skill['skillIcon']
|
||||
and skill['skillIcon'].count('_') >= 2
|
||||
):
|
||||
_name = skill['skillIcon'].split('_')[2]
|
||||
|
||||
count = skill['abilityName'].count('_')
|
||||
|
||||
if 'Diluc' in skill['abilityName']:
|
||||
@ -135,12 +142,18 @@ async def avatarId2SkillGroupList():
|
||||
and skill['skillIcon'].count('_') > 2
|
||||
and 'Catalyst' not in skill['skillIcon']
|
||||
):
|
||||
print(_name)
|
||||
print(name)
|
||||
continue
|
||||
|
||||
else:
|
||||
name = skill['skillIcon'].split('_')[2]
|
||||
if (
|
||||
'skillIcon' in skill
|
||||
and skill['skillIcon']
|
||||
and skill['skillIcon'].count('_') >= 2
|
||||
):
|
||||
print(skill)
|
||||
name = skill['skillIcon'].split('_')[2]
|
||||
else:
|
||||
continue
|
||||
|
||||
if not skill['skillIcon'].startswith(
|
||||
('Skill_A', 'Skill_S', 'Skill_E')
|
||||
@ -584,7 +597,7 @@ async def save_char_talent_num():
|
||||
|
||||
|
||||
async def main():
|
||||
# await download_new_file()
|
||||
await download_new_file()
|
||||
await restore_mysData()
|
||||
await restore_hakush_data()
|
||||
await monster2map()
|
||||
|
@ -9,12 +9,12 @@ from PIL import Image
|
||||
|
||||
MAP_PATH = Path(__file__).parent.parent / 'utils' / 'map' / 'data'
|
||||
|
||||
with open(MAP_PATH / 'enName2AvatarID_mapping_5.4.0.json') as f:
|
||||
with open(MAP_PATH / 'enName2AvatarID_mapping_5.6.0.json') as f:
|
||||
enmap: Dict[str, str] = json.load(f)
|
||||
|
||||
suffix = 'webp'
|
||||
|
||||
char_list = ['Varesa', 'Iansan']
|
||||
char_list = ['SkirkNew', 'Dahlia']
|
||||
base = 'https://api.hakush.in/gi/UI'
|
||||
# title = 'https://enka.network/ui/{}'
|
||||
# hakush = 'https://api.hakush.in/gi/UI/'
|
||||
|
@ -13,6 +13,7 @@ sys.path.append(str(Path(__file__).parents[5]))
|
||||
__package__ = 'GenshinUID.tools'
|
||||
from ..utils.ambr_to_minigg import convert_ambr_to_talent # noqa: E402
|
||||
from ..utils.map.GS_MAP_PATH import ( # noqa: E402
|
||||
load_map,
|
||||
avatarId2Name,
|
||||
avatarName2Element,
|
||||
)
|
||||
@ -329,6 +330,7 @@ def find_tag(labels: List, index: int, char: str, parameters: dict) -> dict:
|
||||
|
||||
|
||||
async def main():
|
||||
await load_map()
|
||||
with open(
|
||||
str(
|
||||
Path(__file__).parents[1]
|
||||
@ -398,6 +400,7 @@ async def main():
|
||||
continue
|
||||
|
||||
if talent_data is None:
|
||||
print('未找到角色天赋')
|
||||
continue
|
||||
result = {}
|
||||
for i in range(1, 4):
|
||||
|
@ -3,3 +3,4 @@ new_abyss_url = '/game_record/app/genshin/api/role_combat'
|
||||
char_detail_url = '/game_record/app/genshin/api/character/detail'
|
||||
|
||||
calendar_url = '/game_record/app/genshin/api/act_calendar'
|
||||
hard_challenge_url = '/game_record/app/genshin/api/hard_challenge'
|
||||
|
@ -1,12 +1,18 @@
|
||||
from copy import deepcopy
|
||||
from typing import Dict, List, Union, cast
|
||||
from typing import Dict, List, Union, Optional, cast
|
||||
|
||||
from gsuid_core.utils.api.mys_api import _MysApi
|
||||
from gsuid_core.utils.api.mys.api import RECORD_BASE, RECORD_BASE_OS
|
||||
from gsuid_core.utils.api.mys.tools import get_ds_token, get_web_ds_token
|
||||
|
||||
from .api import widget_url, calendar_url, new_abyss_url, char_detail_url
|
||||
from .models import Character, WidgetResin, CalendarData, PoetryAbyssDatas
|
||||
from .api import (
|
||||
widget_url,
|
||||
calendar_url,
|
||||
new_abyss_url,
|
||||
char_detail_url,
|
||||
hard_challenge_url,
|
||||
)
|
||||
|
||||
|
||||
class GsMysAPI(_MysApi):
|
||||
@ -15,6 +21,31 @@ class GsMysAPI(_MysApi):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
async def get_hard_challenge_data(self, uid: str) -> Union[Dict, int]:
|
||||
server_id = self.RECOGNIZE_SERVER.get(uid[0], 'cn_gf01')
|
||||
HEADER = deepcopy(self._HEADER)
|
||||
ck = await self.get_ck(uid, 'OWNER')
|
||||
if ck is None:
|
||||
return -51
|
||||
HEADER['Cookie'] = ck
|
||||
|
||||
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
|
||||
data = await self._mys_request(
|
||||
hard_challenge_url,
|
||||
'GET',
|
||||
HEADER,
|
||||
data={
|
||||
"role_id": uid,
|
||||
"server": server_id,
|
||||
"need_detail": True,
|
||||
},
|
||||
base_url=base,
|
||||
)
|
||||
|
||||
if isinstance(data, Dict):
|
||||
data = cast(Dict, data['data'])
|
||||
return data
|
||||
|
||||
async def get_calendar_data(self, uid: str) -> Union[CalendarData, int]:
|
||||
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
||||
header = deepcopy(self._HEADER)
|
||||
@ -56,7 +87,9 @@ class GsMysAPI(_MysApi):
|
||||
return data
|
||||
|
||||
async def get_poetry_abyss_data(
|
||||
self, uid: str
|
||||
self,
|
||||
uid: str,
|
||||
active: Optional[int] = None,
|
||||
) -> Union[PoetryAbyssDatas, int]:
|
||||
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
||||
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
|
||||
@ -70,6 +103,8 @@ class GsMysAPI(_MysApi):
|
||||
'role_id': uid,
|
||||
'need_detail': True,
|
||||
}
|
||||
if active:
|
||||
params['active'] = active
|
||||
HEADER['DS'] = get_ds_token(
|
||||
'&'.join([f'{k}={v}' for k, v in params.items()])
|
||||
)
|
||||
|
@ -1,4 +1,4 @@
|
||||
from gsuid_core.message_models import Button
|
||||
from ..utils.message import GButton as Button
|
||||
|
||||
a = Button('🔍查询探索', '查询探索')
|
||||
b = Button('🔍查询收集', '查询收集')
|
||||
|
@ -1,8 +1,10 @@
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, TypedDict
|
||||
|
||||
import aiofiles
|
||||
from msgspec import json as msgjson
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.server import on_core_start
|
||||
|
||||
from ...version import Genshin_version
|
||||
|
||||
@ -38,89 +40,201 @@ class TS(TypedDict):
|
||||
Icon: Dict[str, str]
|
||||
|
||||
|
||||
try:
|
||||
with open(MAP / charList_fileName, 'r', encoding='UTF-8') as f:
|
||||
charList = msgjson.decode(f.read(), type=Dict)
|
||||
charList: Dict[str, str] = {}
|
||||
weaponList: Dict[str, str] = {}
|
||||
avatarId2Name: Dict[str, str] = {}
|
||||
icon2Name: Dict[str, str] = {}
|
||||
artifact2attr: Dict[str, str] = {}
|
||||
name2Icon: Dict[str, str] = {}
|
||||
avatarName2Element: Dict[str, str] = {}
|
||||
avatarName2Weapon: Dict[str, str] = {}
|
||||
mysData: Dict = {}
|
||||
propId2Name: Dict[str, str] = {}
|
||||
Id2PropId: Dict[str, str] = {}
|
||||
artifactId2Piece: Dict[str, List[str]] = {}
|
||||
skillId2Name: TS = {'Name': {}, 'Icon': {}}
|
||||
talentId2Name: TS = {'Name': {}, 'Icon': {}}
|
||||
weaponHash2Name: Dict[str, str] = {}
|
||||
weaponHash2Type: Dict[str, str] = {}
|
||||
alias_data: Dict[str, List[str]] = {}
|
||||
avatarId2Star_data: Dict[str, str] = {}
|
||||
enName_to_avatarId_data: Dict[str, str] = {}
|
||||
ex_monster_data: Dict[str, Dict] = {}
|
||||
monster2entry_data: Dict[str, Dict] = {}
|
||||
avatarId2SkillList_data: Dict[str, Dict[str, str]] = {}
|
||||
weaponId2Name_data: Dict[str, str] = {}
|
||||
CharId2TalentIcon_data: Dict[str, List[str]] = {}
|
||||
|
||||
with open(MAP / weaponList_fileName, 'r', encoding='UTF-8') as f:
|
||||
weaponList = msgjson.decode(f.read(), type=Dict)
|
||||
|
||||
with open(MAP / avatarId2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
avatarId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
@on_core_start
|
||||
async def load_map():
|
||||
logger.info('[GenshinUID MAP] 正在加载资源文件...')
|
||||
|
||||
with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
try:
|
||||
async with aiofiles.open(
|
||||
MAP / charList_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
charList.update(msgjson.decode(await f.read(), type=Dict))
|
||||
|
||||
with open(MAP / artifact2attr_fileName, 'r', encoding='UTF-8') as f:
|
||||
artifact2attr = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / weaponList_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
weaponList.update(msgjson.decode(await f.read(), type=Dict))
|
||||
|
||||
with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / avatarId2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
avatarId2Name.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / name2Icon_fileName, 'r', encoding='UTF-8') as f:
|
||||
name2Icon = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / icon2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
icon2Name.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8') as f:
|
||||
propId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / artifact2attr_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
artifact2attr.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / 'Id2propId_mapping.json', 'r', encoding='UTF-8') as f:
|
||||
Id2PropId = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / icon2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
icon2Name.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / weaponHash2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
weaponHash2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / name2Icon_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
name2Icon.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / weaponHash2Type_fileName, 'r', encoding='UTF-8') as f:
|
||||
weaponHash2Type = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
propId2Name.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(
|
||||
MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
artifactId2Piece = msgjson.decode(f.read(), type=Dict[str, List[str]])
|
||||
async with aiofiles.open(
|
||||
MAP / 'Id2propId_mapping.json', 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
Id2PropId.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / skillId2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
skillId2Name = msgjson.decode(f.read(), type=TS)
|
||||
async with aiofiles.open(
|
||||
MAP / weaponHash2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
weaponHash2Name.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / talentId2Name_fileName, 'r', encoding='UTF-8') as f:
|
||||
talentId2Name = msgjson.decode(f.read(), type=TS)
|
||||
async with aiofiles.open(
|
||||
MAP / weaponHash2Type_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
weaponHash2Type.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / avatarName2Element_fileName, 'r', encoding='UTF-8') as f:
|
||||
avatarName2Element = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
artifactId2Piece.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, List[str]])
|
||||
)
|
||||
|
||||
with open(MAP / avatarName2Weapon_fileName, 'r', encoding='UTF-8') as f:
|
||||
avatarName2Weapon = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / skillId2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
skillId2Name.update(msgjson.decode(await f.read(), type=TS))
|
||||
|
||||
with open(MAP / 'char_alias.json', 'r', encoding='UTF-8') as f:
|
||||
alias_data = msgjson.decode(f.read(), type=Dict[str, List[str]])
|
||||
async with aiofiles.open(
|
||||
MAP / talentId2Name_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
talentId2Name.update(msgjson.decode(await f.read(), type=TS))
|
||||
|
||||
with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f:
|
||||
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / avatarName2Element_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
avatarName2Element.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f:
|
||||
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / avatarName2Weapon_fileName, 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
avatarName2Weapon.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / enName2Id_fileName, 'r', encoding='utf8') as f:
|
||||
enName_to_avatarId_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / 'char_alias.json', 'r', encoding='UTF-8'
|
||||
) as f:
|
||||
alias_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, List[str]])
|
||||
)
|
||||
|
||||
with open(MAP / EXMonster_fileName, 'r', encoding='utf8') as f:
|
||||
ex_monster_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
async with aiofiles.open(
|
||||
MAP / avatarId2Star_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
avatarId2Star_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / monster2entry_fileName, 'r', encoding='utf8') as f:
|
||||
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||
async with aiofiles.open(
|
||||
MAP / enName2Id_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
enName_to_avatarId_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
with open(MAP / avatarId2SkillList_fileName, 'r', encoding='utf8') as f:
|
||||
avatarId2SkillList_data = msgjson.decode(
|
||||
f.read(), type=Dict[str, Dict[str, str]]
|
||||
)
|
||||
async with aiofiles.open(
|
||||
MAP / EXMonster_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
ex_monster_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, Dict])
|
||||
)
|
||||
|
||||
with open(MAP / weaponId2Name_fileName, 'r', encoding='utf8') as f:
|
||||
weaponId2Name_data = msgjson.decode(f.read(), type=Dict[str, str])
|
||||
async with aiofiles.open(
|
||||
MAP / monster2entry_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
monster2entry_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, Dict])
|
||||
)
|
||||
|
||||
with open(MAP / mysData_fileName, 'r', encoding='utf8') as f:
|
||||
mysData = msgjson.decode(f.read(), type=Dict)
|
||||
async with aiofiles.open(
|
||||
MAP / avatarId2SkillList_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
avatarId2SkillList_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, Dict[str, str]])
|
||||
)
|
||||
|
||||
with open(MAP / CharId2TalentIcon_fileName, 'r', encoding='utf8') as f:
|
||||
CharId2TalentIcon_data = msgjson.decode(
|
||||
f.read(), type=Dict[str, List[str]]
|
||||
)
|
||||
except FileNotFoundError:
|
||||
logger.error('[GenshinUID] 未找到对应版本的映射文件')
|
||||
async with aiofiles.open(
|
||||
MAP / weaponId2Name_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
weaponId2Name_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||
)
|
||||
|
||||
async with aiofiles.open(
|
||||
MAP / mysData_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
mysData.update(msgjson.decode(await f.read(), type=Dict))
|
||||
|
||||
async with aiofiles.open(
|
||||
MAP / CharId2TalentIcon_fileName, 'r', encoding='utf8'
|
||||
) as f:
|
||||
CharId2TalentIcon_data.update(
|
||||
msgjson.decode(await f.read(), type=Dict[str, List[str]])
|
||||
)
|
||||
logger.success('[GenshinUID MAP] 资源文件加载完成')
|
||||
except FileNotFoundError:
|
||||
logger.error('[GenshinUID] 未找到对应版本的映射文件')
|
||||
|
@ -1 +0,0 @@
|
||||
{"10000001": "火神(测试)", "10000002": "神里绫华", "10000003": "琴", "10000005": "旅行者", "10000006": "丽莎", "10000007": "旅行者", "10000014": "芭芭拉", "10000015": "凯亚", "10000016": "迪卢克", "10000020": "雷泽", "10000021": "安柏", "10000022": "温迪", "10000023": "香菱", "10000024": "北斗", "10000025": "行秋", "10000026": "魈", "10000027": "凝光", "10000029": "可莉", "10000030": "钟离", "10000031": "菲谢尔", "10000032": "班尼特", "10000033": "达达利亚", "10000034": "诺艾尔", "10000035": "七七", "10000036": "重云", "10000037": "甘雨", "10000038": "阿贝多", "10000039": "迪奥娜", "10000041": "莫娜", "10000042": "刻晴", "10000043": "砂糖", "10000044": "辛焱", "10000045": "罗莎莉亚", "10000046": "胡桃", "10000047": "枫原万叶", "10000048": "烟绯", "10000049": "宵宫", "10000050": "托马", "10000051": "优菈", "10000052": "雷电将军", "10000053": "早柚", "10000054": "珊瑚宫心海", "10000055": "五郎", "10000056": "九条裟罗", "10000057": "荒泷一斗", "10000058": "八重神子", "10000059": "鹿野院平藏", "10000060": "夜兰", "10000061": "绮良良", "10000062": "埃洛伊", "10000063": "申鹤", "10000064": "云堇", "10000065": "久岐忍", "10000066": "神里绫人", "10000067": "柯莱", "10000068": "多莉", "10000069": "提纳里", "10000070": "妮露", "10000071": "赛诺", "10000072": "坎蒂丝", "10000073": "纳西妲", "10000074": "莱依拉", "10000075": "流浪者", "10000076": "珐露珊", "10000077": "瑶瑶", "10000078": "艾尔海森", "10000079": "迪希雅", "10000080": "米卡", "10000081": "卡维", "10000082": "白术", "10000083": "琳妮特", "10000084": "林尼", "10000085": "菲米尼", "10000086": "莱欧斯利", "10000087": "那维莱特", "10000088": "夏洛蒂", "10000089": "芙宁娜", "10000090": "夏沃蕾", "10000091": "娜维娅", "10000092": "嘉明", "10000093": "闲云", "10000094": "千织", "10000095": "希格雯", "10000096": "阿蕾奇诺", "10000097": "赛索斯", "10000098": "克洛琳德", "10000099": "艾梅莉埃", "10000100": "卡齐娜", "10000101": "基尼奇", "10000102": "玛拉妮", "10000103": "希诺宁", "10000104": "恰斯卡", "10000105": "欧洛伦", "10000106": "玛薇卡", "10000107": "茜特菈莉", "10000108": "蓝砚", "10000109": "梦见月瑞希", "10000110": "伊安珊", "10000111": "瓦雷莎"}
|
@ -0,0 +1 @@
|
||||
{"10000001": "凯特", "10000002": "神里绫华", "10000003": "琴", "10000005": "旅行者", "10000006": "丽莎", "10000007": "旅行者", "10000014": "芭芭拉", "10000015": "凯亚", "10000016": "迪卢克", "10000020": "雷泽", "10000021": "安柏", "10000022": "温迪", "10000023": "香菱", "10000024": "北斗", "10000025": "行秋", "10000026": "魈", "10000027": "凝光", "10000029": "可莉", "10000030": "钟离", "10000031": "菲谢尔", "10000032": "班尼特", "10000033": "达达利亚", "10000034": "诺艾尔", "10000035": "七七", "10000036": "重云", "10000037": "甘雨", "10000038": "阿贝多", "10000039": "迪奥娜", "10000041": "莫娜", "10000042": "刻晴", "10000043": "砂糖", "10000044": "辛焱", "10000045": "罗莎莉亚", "10000046": "胡桃", "10000047": "枫原万叶", "10000048": "烟绯", "10000049": "宵宫", "10000050": "托马", "10000051": "优菈", "10000052": "雷电将军", "10000053": "早柚", "10000054": "珊瑚宫心海", "10000055": "五郎", "10000056": "九条裟罗", "10000057": "荒泷一斗", "10000058": "八重神子", "10000059": "鹿野院平藏", "10000060": "夜兰", "10000061": "绮良良", "10000062": "埃洛伊", "10000063": "申鹤", "10000064": "云堇", "10000065": "久岐忍", "10000066": "神里绫人", "10000067": "柯莱", "10000068": "多莉", "10000069": "提纳里", "10000070": "妮露", "10000071": "赛诺", "10000072": "坎蒂丝", "10000073": "纳西妲", "10000074": "莱依拉", "10000075": "流浪者", "10000076": "珐露珊", "10000077": "瑶瑶", "10000078": "艾尔海森", "10000079": "迪希雅", "10000080": "米卡", "10000081": "卡维", "10000082": "白术", "10000083": "琳妮特", "10000084": "林尼", "10000085": "菲米尼", "10000086": "莱欧斯利", "10000087": "那维莱特", "10000088": "夏洛蒂", "10000089": "芙宁娜", "10000090": "夏沃蕾", "10000091": "娜维娅", "10000092": "嘉明", "10000093": "闲云", "10000094": "千织", "10000095": "希格雯", "10000096": "阿蕾奇诺", "10000097": "赛索斯", "10000098": "克洛琳德", "10000099": "艾梅莉埃", "10000100": "卡齐娜", "10000101": "基尼奇", "10000102": "玛拉妮", "10000103": "希诺宁", "10000104": "恰斯卡", "10000105": "欧洛伦", "10000106": "玛薇卡", "10000107": "茜特菈莉", "10000108": "蓝砚", "10000109": "梦见月瑞希", "10000110": "伊安珊", "10000111": "瓦雷莎", "10000112": "爱可菲", "10000113": "伊法", "10000114": "丝柯克", "10000115": "塔利雅"}
|
@ -1,479 +1,556 @@
|
||||
{
|
||||
"10000002": {
|
||||
"233": "神里流·霰步",
|
||||
"0": "雷主角小技能白盒测试1",
|
||||
"232": "神里流·冰华",
|
||||
"239": "神里流·霜灭",
|
||||
"231": "普通攻击·神里流·倾"
|
||||
"231": "神里流·倾"
|
||||
},
|
||||
"10000003": {
|
||||
"0": "琴队伍机制",
|
||||
"331": "西风剑术",
|
||||
"332": "风压剑",
|
||||
"339": "蒲公英之风"
|
||||
},
|
||||
"10000021": {
|
||||
"2139": "箭雨",
|
||||
"2132": "爆弹玩偶",
|
||||
"2131": "普通攻击·神射手"
|
||||
},
|
||||
"10000003": {
|
||||
"331": "普通攻击·西风剑术",
|
||||
"332": "风压剑",
|
||||
"339": "蒲公英之风"
|
||||
"2131": "神射手",
|
||||
"0": "菲谢尔小技能"
|
||||
},
|
||||
"10000006": {
|
||||
"431": "普通攻击·指尖雷暴",
|
||||
"431": "指尖雷暴",
|
||||
"432": "苍雷",
|
||||
"439": "蔷薇的雷光"
|
||||
},
|
||||
"10000014": {
|
||||
"1431": "普通攻击·水之浅唱",
|
||||
"1431": "水之浅唱",
|
||||
"1432": "演唱,开始♪",
|
||||
"1439": "闪耀奇迹♪"
|
||||
"1439": "闪耀奇迹♪",
|
||||
"0": "Barbara天赋技能"
|
||||
},
|
||||
"10000015": {
|
||||
"1531": "普通攻击·仪典剑术",
|
||||
"1531": "仪典剑术",
|
||||
"1532": "霜袭",
|
||||
"1539": "凛冽轮舞"
|
||||
},
|
||||
"10000016": {
|
||||
"1631": "普通攻击·淬炼之剑",
|
||||
"1631": "淬炼之剑",
|
||||
"1632": "逆焰之刃",
|
||||
"0": "Diluc队伍机制",
|
||||
"1639": "黎明"
|
||||
},
|
||||
"10000020": {
|
||||
"2031": "普通攻击·钢脊",
|
||||
"2031": "钢脊",
|
||||
"2032": "利爪与苍雷",
|
||||
"2039": "雷牙"
|
||||
"2039": "雷牙",
|
||||
"0": "Rx白盒测试技能2"
|
||||
},
|
||||
"10000022": {
|
||||
"2231": "普通攻击·神代射术",
|
||||
"2231": "神代射术",
|
||||
"0": "温迪长按瞄准",
|
||||
"2232": "高天之歌",
|
||||
"2239": "风神之诗"
|
||||
},
|
||||
"10000023": {
|
||||
"2331": "普通攻击·白案功夫",
|
||||
"2331": "白案功夫",
|
||||
"2332": "锅巴出击",
|
||||
"2339": "旋火轮"
|
||||
},
|
||||
"10000024": {
|
||||
"2431": "普通攻击·征涛",
|
||||
"2431": "征涛",
|
||||
"2432": "捉浪",
|
||||
"2439": "斫雷"
|
||||
"2439": "斫雷",
|
||||
"0": "菲谢尔充能技"
|
||||
},
|
||||
"10000026": {
|
||||
"2631": "普通攻击·卷积微尘",
|
||||
"2631": "卷积微尘",
|
||||
"2632": "风轮两立",
|
||||
"0": "魈冲抓(空中)",
|
||||
"2639": "靖妖傩舞"
|
||||
},
|
||||
"10000027": {
|
||||
"2731": "普通攻击·千金掷",
|
||||
"2731": "千金掷",
|
||||
"2732": "璇玑屏",
|
||||
"0": "凝光小技能替换技能",
|
||||
"2739": "天权崩玉"
|
||||
},
|
||||
"10000029": {
|
||||
"2931": "普通攻击·砰砰",
|
||||
"2931": "砰砰",
|
||||
"2932": "蹦蹦炸弹",
|
||||
"2939": "轰轰火花"
|
||||
},
|
||||
"10000030": {
|
||||
"3031": "普通攻击·岩雨",
|
||||
"3031": "岩雨",
|
||||
"3032": "地心",
|
||||
"3039": "天星"
|
||||
},
|
||||
"10000031": {
|
||||
"3131": "普通攻击·罪灭之矢",
|
||||
"3131": "罪灭之矢",
|
||||
"3132": "夜巡影翼",
|
||||
"3139": "至夜幻现"
|
||||
"3139": "至夜幻现",
|
||||
"0": "菲谢尔小技能-重置乌鸦位置"
|
||||
},
|
||||
"10000032": {
|
||||
"3231": "普通攻击·好运剑",
|
||||
"3231": "好运剑",
|
||||
"3232": "热情过载",
|
||||
"3239": "美妙旅程"
|
||||
},
|
||||
"10000033": {
|
||||
"3331": "普通攻击·断雨",
|
||||
"3331": "断雨",
|
||||
"3332": "魔王武装·狂澜",
|
||||
"3339": "极恶技·尽灭闪"
|
||||
"3339": "极恶技·尽灭闪",
|
||||
"0": "达达利亚近战姿态普攻"
|
||||
},
|
||||
"10000034": {
|
||||
"3431": "普通攻击·西风剑术·女仆",
|
||||
"3431": "西风剑术·女仆",
|
||||
"3432": "护心铠",
|
||||
"3439": "大扫除"
|
||||
},
|
||||
"10000035": {
|
||||
"3531": "普通攻击·云来古剑法",
|
||||
"3531": "云来古剑法",
|
||||
"3532": "仙法·寒病鬼差",
|
||||
"3539": "仙法·救苦度厄"
|
||||
"3539": "仙法·救苦度厄",
|
||||
"0": "七七复活技能"
|
||||
},
|
||||
"10000037": {
|
||||
"3731": "普通攻击·流天射术",
|
||||
"3731": "流天射术",
|
||||
"3732": "山泽麟迹",
|
||||
"3739": "降众天华"
|
||||
"3739": "降众天华",
|
||||
"0": "柯莱瞄准模式"
|
||||
},
|
||||
"10000025": {
|
||||
"2531": "普通攻击·古华剑法",
|
||||
"2531": "古华剑法",
|
||||
"2532": "古华剑·画雨笼山",
|
||||
"2539": "古华剑·裁雨留虹"
|
||||
},
|
||||
"10000038": {
|
||||
"3831": "普通攻击·西风剑术·白",
|
||||
"3831": "西风剑术·白",
|
||||
"3832": "创生法·拟造阳华",
|
||||
"3839": "诞生式·大地之潮"
|
||||
},
|
||||
"10000039": {
|
||||
"3931": "普通攻击·猎人射术",
|
||||
"3931": "猎人射术",
|
||||
"3932": "猫爪冻冻",
|
||||
"0": "迪奥娜长按瞄准",
|
||||
"3939": "最烈特调"
|
||||
},
|
||||
"10000041": {
|
||||
"4131": "普通攻击·因果点破",
|
||||
"4131": "因果点破",
|
||||
"4132": "水中幻愿",
|
||||
"4133": "虚实流动",
|
||||
"4139": "星命定轨"
|
||||
},
|
||||
"10000042": {
|
||||
"4231": "普通攻击·云来剑法",
|
||||
"4231": "云来剑法",
|
||||
"4232": "星斗归位",
|
||||
"0": "星斗归位",
|
||||
"4239": "天街巡游"
|
||||
},
|
||||
"10000043": {
|
||||
"4331": "普通攻击·简式风灵作成",
|
||||
"4331": "简式风灵作成",
|
||||
"4332": "风灵作成·陆叁零捌",
|
||||
"0": "砂糖空中跳跃(伪)",
|
||||
"4339": "禁·风灵作成·柒伍同构贰型"
|
||||
},
|
||||
"10000044": {
|
||||
"4431": "普通攻击·炎舞",
|
||||
"4431": "炎舞",
|
||||
"4432": "热情拂扫",
|
||||
"4439": "叛逆刮弦"
|
||||
},
|
||||
"10000045": {
|
||||
"4531": "普通攻击·教会枪术",
|
||||
"4531": "教会枪术",
|
||||
"4532": "噬罪的告解",
|
||||
"4539": "终命的圣礼"
|
||||
},
|
||||
"10000046": {
|
||||
"4631": "普通攻击·往生秘传枪法",
|
||||
"4631": "往生秘传枪法",
|
||||
"4632": "蝶引来生",
|
||||
"4639": "安神秘法"
|
||||
},
|
||||
"10000047": {
|
||||
"4731": "普通攻击·我流剑术",
|
||||
"4731": "我流剑术",
|
||||
"4732": "千早振",
|
||||
"0": "下落攻击·乱岚拨止",
|
||||
"4739": "万叶之一刀"
|
||||
},
|
||||
"10000048": {
|
||||
"4831": "普通攻击·火漆制印",
|
||||
"4831": "火漆制印",
|
||||
"4832": "丹书立约",
|
||||
"4839": "凭此结契"
|
||||
},
|
||||
"10000049": {
|
||||
"4931": "普通攻击·烟火打扬",
|
||||
"4931": "烟火打扬",
|
||||
"4932": "焰硝庭火舞",
|
||||
"0": "宵宫长按瞄准/瞄准模式",
|
||||
"4939": "琉金云间草"
|
||||
},
|
||||
"10000050": {
|
||||
"5031": "普通攻击·迅破枪势",
|
||||
"5031": "迅破枪势",
|
||||
"5032": "烈烧佑命之侍护",
|
||||
"5039": "真红炽火之大铠"
|
||||
},
|
||||
"10000051": {
|
||||
"5131": "普通攻击·西风剑术·宗室",
|
||||
"5131": "西风剑术·宗室",
|
||||
"5132": "冰潮的涡旋",
|
||||
"5139": "凝浪之光剑"
|
||||
},
|
||||
"10000052": {
|
||||
"5231": "普通攻击·源流",
|
||||
"5231": "源流",
|
||||
"5232": "神变·恶曜开眼",
|
||||
"5239": "奥义·梦想真说"
|
||||
},
|
||||
"10000053": {
|
||||
"5331": "普通攻击·忍刀·终末番",
|
||||
"5331": "忍刀·终末番",
|
||||
"5332": "呜呼流·风隐急进",
|
||||
"0": "呜呼流·风隐急进",
|
||||
"5339": "呜呼流·影貉缭乱"
|
||||
},
|
||||
"10000054": {
|
||||
"5431": "普通攻击·水有常形",
|
||||
"5431": "水有常形",
|
||||
"5432": "海月之誓",
|
||||
"5439": "海人化羽"
|
||||
},
|
||||
"10000055": {
|
||||
"5531": "普通攻击·呲牙裂扇箭",
|
||||
"5531": "呲牙裂扇箭",
|
||||
"5532": "犬坂吠吠方圆阵",
|
||||
"0": "五郎长按瞄准",
|
||||
"5539": "兽牙逐突形胜战法"
|
||||
},
|
||||
"10000056": {
|
||||
"5631": "普通攻击·天狗传弓术",
|
||||
"5631": "天狗传弓术",
|
||||
"5632": "鸦羽天狗霆雷召咒",
|
||||
"0": "九条裟罗长按瞄准",
|
||||
"5639": "煌煌千道镇式"
|
||||
},
|
||||
"10000057": {
|
||||
"5731": "普通攻击· 喧哗屋传说",
|
||||
"5731": "喧哗屋传说",
|
||||
"5732": "魔杀绝技·赤牛发破!",
|
||||
"5739": "最恶鬼王·一斗轰临!!"
|
||||
},
|
||||
"10000058": {
|
||||
"5831": "普通攻击·狐灵食罪式",
|
||||
"5831": "狐灵食罪式",
|
||||
"5832": "野干役咒·杀生樱",
|
||||
"5839": "大密法·天狐显真"
|
||||
},
|
||||
"10000059": {
|
||||
"5931": "普通攻击·不动流格斗术",
|
||||
"5931": "不动流格斗术",
|
||||
"5932": "勠心拳",
|
||||
"5939": "聚风蹴"
|
||||
},
|
||||
"10000060": {
|
||||
"6031": "普通攻击·潜形隐曜弓",
|
||||
"6031": "潜形隐曜弓",
|
||||
"6032": "萦络纵命索",
|
||||
"0": "夜兰-元素战技",
|
||||
"6039": "渊图玲珑骰"
|
||||
},
|
||||
"10000061": {
|
||||
"6131": "普通攻击·箱纸切削术",
|
||||
"6131": "箱纸切削术",
|
||||
"6132": "呜喵町飞足",
|
||||
"0": "测试占位",
|
||||
"6139": "秘法·惊喜特派"
|
||||
},
|
||||
"10000062": {
|
||||
"6231": "普通攻击·快速射击",
|
||||
"6231": "快速射击",
|
||||
"6232": "冰尘雪野",
|
||||
"0": "埃洛伊瞄准射击",
|
||||
"6239": "曙光预言"
|
||||
},
|
||||
"10000063": {
|
||||
"6331": "普通攻击·踏辰摄斗",
|
||||
"6331": "踏辰摄斗",
|
||||
"6332": "仰灵威召将役咒",
|
||||
"6339": "神女遣灵真诀"
|
||||
},
|
||||
"10000064": {
|
||||
"6431": "普通攻击·拂云出手",
|
||||
"6431": "拂云出手",
|
||||
"6432": "旋云开相",
|
||||
"6439": "破嶂见旌仪"
|
||||
},
|
||||
"10000065": {
|
||||
"6531": "普通攻击·忍流飞刃斩",
|
||||
"6531": "忍流飞刃斩",
|
||||
"6532": "越祓雷草之轮",
|
||||
"6539": "御咏鸣神刈山祭"
|
||||
},
|
||||
"10000066": {
|
||||
"6631": "普通攻击·神里流·转",
|
||||
"6631": "神里流·转",
|
||||
"6632": "神里流·镜花",
|
||||
"6639": "神里流·水囿"
|
||||
},
|
||||
"10000067": {
|
||||
"6731": "普通攻击·祈颂射艺",
|
||||
"6731": "祈颂射艺",
|
||||
"6732": "拂花偈叶",
|
||||
"6739": "猫猫秘宝"
|
||||
},
|
||||
"10000068": {
|
||||
"6831": "普通攻击·妙显剑舞·改",
|
||||
"6831": "妙显剑舞·改",
|
||||
"6832": "镇灵之灯·烦恼解决炮",
|
||||
"6839": "卡萨扎莱宫的无微不至"
|
||||
},
|
||||
"10000069": {
|
||||
"6931": "普通攻击·藏蕴破障",
|
||||
"6931": "藏蕴破障",
|
||||
"6932": "识果种雷",
|
||||
"0": "提纳里长按/瞄准模式",
|
||||
"6939": "造生缠藤箭"
|
||||
},
|
||||
"10000070": {
|
||||
"7031": "普通攻击·弦月舞步",
|
||||
"7031": "弦月舞步",
|
||||
"7032": "七域舞步",
|
||||
"0": "妮露元素战技1命六用",
|
||||
"7039": "浮莲舞步·远梦聆泉"
|
||||
},
|
||||
"10000071": {
|
||||
"7131": "普通攻击·七圣枪术",
|
||||
"7131": "七圣枪术",
|
||||
"7132": "秘仪·律渊渡魂",
|
||||
"0": "赛诺元素战技开大后",
|
||||
"7139": "圣仪·煟煌随狼行"
|
||||
},
|
||||
"10000072": {
|
||||
"7231": "普通攻击·流耀枪术·守势",
|
||||
"7231": "流耀枪术·守势",
|
||||
"7232": "圣仪·苍鹭庇卫",
|
||||
"7239": "圣仪·灰鸰衒潮"
|
||||
},
|
||||
"10000073": {
|
||||
"7331": "普通攻击·行相",
|
||||
"7331": "行相",
|
||||
"7332": "所闻遍计",
|
||||
"7339": "心景幻成"
|
||||
},
|
||||
"10000074": {
|
||||
"7431": "普通攻击·熠辉轨度剑",
|
||||
"7431": "熠辉轨度剑",
|
||||
"7432": "垂裳端凝之夜",
|
||||
"7439": "星流摇床之梦"
|
||||
},
|
||||
"10000075": {
|
||||
"7531": "普通攻击·行幡鸣弦",
|
||||
"7531": "行幡鸣弦",
|
||||
"7532": "羽画·风姿华歌",
|
||||
"0": "流浪者元素战技",
|
||||
"7539": "狂言·式乐五番"
|
||||
},
|
||||
"10000076": {
|
||||
"7631": "普通攻击·迴身箭术",
|
||||
"7631": "迴身箭术",
|
||||
"7632": "非想风天",
|
||||
"0": "珐露珊长按/瞄准模式",
|
||||
"7639": "抟风秘道"
|
||||
},
|
||||
"10000077": {
|
||||
"7731": "普通攻击·颠扑连环枪",
|
||||
"7731": "颠扑连环枪",
|
||||
"7732": "云台团团降芦菔",
|
||||
"7739": "玉颗珊珊月中落"
|
||||
},
|
||||
"10000078": {
|
||||
"7831": "普通攻击·溯因反绎法",
|
||||
"7831": "溯因反绎法",
|
||||
"7832": "共相·理式摹写",
|
||||
"7839": "殊境·显象缚结"
|
||||
},
|
||||
"10000079": {
|
||||
"7931": "普通攻击·拂金剑斗术",
|
||||
"7931": "拂金剑斗术",
|
||||
"7932": "熔铁流狱",
|
||||
"0": "迪希雅元素爆发_QTE",
|
||||
"7939": "炎啸狮子咬"
|
||||
},
|
||||
"10000080": {
|
||||
"8031": "普通攻击·西风枪术·镝传",
|
||||
"8031": "西风枪术·镝传",
|
||||
"8032": "星霜的流旋",
|
||||
"8039": "苍翎的颂愿"
|
||||
},
|
||||
"10000081": {
|
||||
"8131": "普通攻击·旋规设矩",
|
||||
"8131": "旋规设矩",
|
||||
"8132": "画则巧施",
|
||||
"8139": "繁绘隅穹"
|
||||
},
|
||||
"10000082": {
|
||||
"8231": "普通攻击·金匮针解",
|
||||
"8231": "金匮针解",
|
||||
"8232": "太素诊要",
|
||||
"8239": "愈气全形论"
|
||||
},
|
||||
"10000083": {
|
||||
"8331": "普通攻击·迅捷礼刺剑",
|
||||
"8331": "迅捷礼刺剑",
|
||||
"8332": "谜影障身法",
|
||||
"0": "琳妮特元素战技",
|
||||
"8339": "魔术·运变惊奇"
|
||||
},
|
||||
"10000084": {
|
||||
"8431": "普通攻击·迫牌易位式",
|
||||
"8431": "迫牌易位式",
|
||||
"8432": "眩惑光戏法",
|
||||
"0": "林尼瞄准射击",
|
||||
"8439": "大魔术·灵迹巡游"
|
||||
},
|
||||
"10000085": {
|
||||
"8531": "普通攻击·洑流剑",
|
||||
"8531": "洑流剑",
|
||||
"8532": "浮冰增压",
|
||||
"0": "菲米尼浮冰增压3段(E3)",
|
||||
"8539": "猎影潜袭"
|
||||
},
|
||||
"10000086": {
|
||||
"8631": "普通攻击·迅烈倾霜拳",
|
||||
"8631": "迅烈倾霜拳",
|
||||
"8632": "冰牙突驰",
|
||||
"8639": "黑金狼噬"
|
||||
},
|
||||
"10000087": {
|
||||
"8731": "普通攻击·如水从平",
|
||||
"8731": "如水从平",
|
||||
"8732": "泪水啊,我必偿还",
|
||||
"8739": "潮水啊,我已归来"
|
||||
},
|
||||
"10000088": {
|
||||
"8831": "普通攻击·冷色摄影律",
|
||||
"8831": "冷色摄影律",
|
||||
"8832": "取景·冰点构图法",
|
||||
"8839": "定格·全方位确证"
|
||||
},
|
||||
"10000089": {
|
||||
"8931": "普通攻击·独舞之邀",
|
||||
"8931": "独舞之邀",
|
||||
"8932": "孤心沙龙",
|
||||
"0": "芙宁娜元素战技-芒",
|
||||
"8939": "万众狂欢"
|
||||
},
|
||||
"10000090": {
|
||||
"9031": "普通攻击·线列枪刺·改",
|
||||
"9031": "线列枪刺·改",
|
||||
"9032": "近迫式急促拦射",
|
||||
"9039": "圆阵掷弹爆轰术"
|
||||
},
|
||||
"10000091": {
|
||||
"9131": "普通攻击·直率的辞绝",
|
||||
"9131": "直率的辞绝",
|
||||
"9132": "典仪式晶火",
|
||||
"9139": "如霰澄天的鸣礼"
|
||||
},
|
||||
"10000092": {
|
||||
"9231": "普通攻击·刃爪悬星",
|
||||
"9231": "刃爪悬星",
|
||||
"9232": "瑞兽登高楼",
|
||||
"0": "嘉明元素战技.下落攻击",
|
||||
"9239": "璨焰金猊舞"
|
||||
},
|
||||
"10000093": {
|
||||
"9331": "普通攻击·清风散花词",
|
||||
"9331": "清风散花词",
|
||||
"9332": "朝起鹤云",
|
||||
"0": "留云元素战技_鹤形追击",
|
||||
"9339": "暮集竹星"
|
||||
},
|
||||
"10000094": {
|
||||
"9431": "普通攻击·心织刀流",
|
||||
"9431": "心织刀流",
|
||||
"9432": "羽袖一触",
|
||||
"0": "千织二段E后-技能替换",
|
||||
"9439": "二刀之形·比翼"
|
||||
},
|
||||
"10000095": {
|
||||
"9531": "普通攻击·靶向治疗",
|
||||
"9531": "靶向治疗",
|
||||
"9532": "弹跳水疗法",
|
||||
"0": "希格雯长按瞄准",
|
||||
"9539": "过饱和心意注射"
|
||||
},
|
||||
"10000096": {
|
||||
"9631": "普通攻击·斩首之邀",
|
||||
"9631": "斩首之邀",
|
||||
"9632": "万相化灰",
|
||||
"0": "元素战技替换技能",
|
||||
"9639": "厄月将升"
|
||||
},
|
||||
"10000097": {
|
||||
"9731": "普通攻击·王家苇箭术",
|
||||
"9731": "王家苇箭术",
|
||||
"9732": "古仪·鸣砂掣雷",
|
||||
"0": "赛索斯瞄准射击",
|
||||
"9739": "秘仪·瞑光贯影"
|
||||
},
|
||||
"10000098": {
|
||||
"9831": "普通攻击·逐影之誓",
|
||||
"9831": "逐影之誓",
|
||||
"9832": "狩夜之巡",
|
||||
"0": "克洛琳德元素战技-闪避",
|
||||
"9839": "残光将终"
|
||||
},
|
||||
"10000099": {
|
||||
"9931": "普通攻击·逐影枪术·改",
|
||||
"9931": "逐影枪术·改",
|
||||
"9932": "撷萃调香",
|
||||
"9939": "香氛演绎"
|
||||
},
|
||||
"10000100": {
|
||||
"10031": "普通攻击·嵴之啮咬",
|
||||
"10031": "嵴之啮咬",
|
||||
"10032": "出击,冲天转转!",
|
||||
"0": "卡齐娜夜魂接力技",
|
||||
"10039": "现在,认真时间!"
|
||||
},
|
||||
"10000101": {
|
||||
"10131": "普通攻击·夜阳斗技",
|
||||
"10131": "夜阳斗技",
|
||||
"10132": "悬猎·游骋高狩",
|
||||
"0": "基尼奇空中喷射",
|
||||
"10139": "向伟大圣龙致意"
|
||||
},
|
||||
"10000103": {
|
||||
"10331": "普通攻击·锐锋攫猎",
|
||||
"10331": "锐锋攫猎",
|
||||
"10332": "音火锻淬",
|
||||
"10339": "豹烈律动!"
|
||||
"10339": "豹烈律动!",
|
||||
"0": "希诺宁-夜魂接力技"
|
||||
},
|
||||
"10000104": {
|
||||
"10431": "普通攻击·迷羽流击",
|
||||
"10431": "迷羽流击",
|
||||
"10432": "灵缰追影",
|
||||
"0": "恰斯卡浮空冲刺",
|
||||
"10439": "索魂命袭"
|
||||
},
|
||||
"10000106": {
|
||||
"10631": "普通攻击·以火织命",
|
||||
"10631": "以火织命",
|
||||
"10632": "称名之刻",
|
||||
"0": "玛薇卡空中攻击",
|
||||
"10639": "燔天之时"
|
||||
},
|
||||
"10000107": {
|
||||
"10731": "普通攻击·宿灵捕影",
|
||||
"10731": "宿灵捕影",
|
||||
"10732": "霜昼黑星",
|
||||
"0": "茜特菈莉特殊跳跃",
|
||||
"10739": "诸曜饬令"
|
||||
},
|
||||
"10000108": {
|
||||
"10831": "普通攻击·玄鸾画水",
|
||||
"10831": "玄鸾画水",
|
||||
"10832": "凤缕随翦舞",
|
||||
"0": "蓝砚元素战技替换",
|
||||
"10839": "鹍弦踏月出"
|
||||
},
|
||||
"10000109": {
|
||||
"10931": "普通攻击·梦我梦心",
|
||||
"10931": "梦我梦心",
|
||||
"10932": "秋沙歌枕巡礼",
|
||||
"0": "梦见月浮游受身",
|
||||
"10939": "安乐秘汤疗法"
|
||||
},
|
||||
"10000110": {
|
||||
"11031": "普通攻击·负重锥击",
|
||||
"11031": "负重锥击",
|
||||
"11032": "电掣雷驰",
|
||||
"0": "伊安珊夜魂态冲刺,仅换图标用",
|
||||
"11039": "力的三原理"
|
||||
},
|
||||
"10000111": {
|
||||
"11131": "普通攻击·角力搏摔",
|
||||
"11131": "角力搏摔",
|
||||
"11132": "夜虹逐跃",
|
||||
"11139": "闪烈降临!"
|
||||
"11139": "闪烈降临!",
|
||||
"0": "瓦雷莎二段冲刺期间-元素战技替换"
|
||||
},
|
||||
"10000112": {
|
||||
"11231": "后厨手艺",
|
||||
"11232": "低温烹饪",
|
||||
"11239": "花刀技法"
|
||||
},
|
||||
"10000113": {
|
||||
"11331": "祛风妙仪",
|
||||
"11332": "空天疾护",
|
||||
"0": "伊法夜魂接力战技",
|
||||
"11339": "复合镇静域"
|
||||
},
|
||||
"10000114": {
|
||||
"11431": "极恶技·断",
|
||||
"11432": "极恶技·闪",
|
||||
"11439": "极恶技·灭",
|
||||
"0": "丝柯克元素爆发替换"
|
||||
},
|
||||
"10000115": {
|
||||
"11531": "西风剑术·祭仪",
|
||||
"11532": "圣浸的礼典",
|
||||
"11539": "纯耀的祷咏",
|
||||
"0": "塔利雅命6复活技"
|
||||
},
|
||||
"10000102": {
|
||||
"10231": "普通攻击·降温处理",
|
||||
"10231": "降温处理",
|
||||
"10232": "踏鲨破浪",
|
||||
"0": "游猎S弧光空中攻击技",
|
||||
"10239": "爆瀑飞弹"
|
||||
},
|
||||
"10000105": {
|
||||
"10531": "普通攻击·宿灵闪箭",
|
||||
"10531": "宿灵闪箭",
|
||||
"10532": "暝色缒索",
|
||||
"0": "特殊跳跃",
|
||||
"10539": "黯声回响"
|
||||
},
|
||||
"10000036": {
|
@ -1 +1 @@
|
||||
{"10000002": "5", "10000003": "5", "10000006": "4", "10000014": "4", "10000015": "4", "10000016": "5", "10000020": "4", "10000021": "4", "10000022": "5", "10000023": "4", "10000024": "4", "10000025": "4", "10000026": "5", "10000027": "4", "10000029": "5", "10000030": "5", "10000031": "4", "10000032": "4", "10000033": "5", "10000034": "4", "10000035": "5", "10000036": "4", "10000037": "5", "10000038": "5", "10000039": "4", "10000041": "5", "10000042": "5", "10000043": "4", "10000044": "4", "10000045": "4", "10000046": "5", "10000047": "5", "10000048": "4", "10000049": "5", "10000050": "4", "10000051": "5", "10000052": "5", "10000053": "4", "10000054": "5", "10000055": "4", "10000056": "4", "10000057": "5", "10000058": "5", "10000059": "4", "10000060": "5", "10000061": "4", "10000062": "5", "10000063": "5", "10000064": "4", "10000065": "4", "10000066": "5", "10000067": "4", "10000068": "4", "10000069": "5", "10000070": "5", "10000071": "5", "10000072": "4", "10000073": "5", "10000074": "4", "10000075": "5", "10000076": "4", "10000077": "4", "10000078": "5", "10000079": "5", "10000080": "4", "10000081": "4", "10000082": "5", "10000083": "4", "10000084": "5", "10000085": "4", "10000086": "5", "10000087": "5", "10000088": "4", "10000089": "5", "10000090": "4", "10000091": "5", "10000092": "4", "10000093": "5", "10000094": "5", "10000095": "5", "10000096": "5", "10000097": "4", "10000098": "5", "10000099": "5", "10000100": "4", "10000101": "5", "10000102": "5", "10000103": "5", "10000104": "5", "10000105": "4", "10000106": "5", "10000107": "5", "10000108": "4", "10000109": "5", "10000110": "4", "10000111": "5", "10000005": "5", "10000007": "5"}
|
||||
{"10000002": "5", "10000003": "5", "10000006": "4", "10000014": "4", "10000015": "4", "10000016": "5", "10000020": "4", "10000021": "4", "10000022": "5", "10000023": "4", "10000024": "4", "10000025": "4", "10000026": "5", "10000027": "4", "10000029": "5", "10000030": "5", "10000031": "4", "10000032": "4", "10000033": "5", "10000034": "4", "10000035": "5", "10000036": "4", "10000037": "5", "10000038": "5", "10000039": "4", "10000041": "5", "10000042": "5", "10000043": "4", "10000044": "4", "10000045": "4", "10000046": "5", "10000047": "5", "10000048": "4", "10000049": "5", "10000050": "4", "10000051": "5", "10000052": "5", "10000053": "4", "10000054": "5", "10000055": "4", "10000056": "4", "10000057": "5", "10000058": "5", "10000059": "4", "10000060": "5", "10000061": "4", "10000062": "5", "10000063": "5", "10000064": "4", "10000065": "4", "10000066": "5", "10000067": "4", "10000068": "4", "10000069": "5", "10000070": "5", "10000071": "5", "10000072": "4", "10000073": "5", "10000074": "4", "10000075": "5", "10000076": "4", "10000077": "4", "10000078": "5", "10000079": "5", "10000080": "4", "10000081": "4", "10000082": "5", "10000083": "4", "10000084": "5", "10000085": "4", "10000086": "5", "10000087": "5", "10000088": "4", "10000089": "5", "10000090": "4", "10000091": "5", "10000092": "4", "10000093": "5", "10000094": "5", "10000095": "5", "10000096": "5", "10000097": "4", "10000098": "5", "10000099": "5", "10000100": "4", "10000101": "5", "10000102": "5", "10000103": "5", "10000104": "5", "10000105": "4", "10000106": "5", "10000107": "5", "10000108": "4", "10000109": "5", "10000110": "4", "10000111": "5", "10000112": "5", "10000113": "4", "10000114": "5", "10000115": "4", "10000005": "5", "10000007": "5"}
|
@ -1 +1 @@
|
||||
{"神里绫华": "Cryo", "琴": "Anemo", "丽莎": "Electro", "芭芭拉": "Hydro", "凯亚": "Cryo", "迪卢克": "Pyro", "雷泽": "Electro", "安柏": "Pyro", "温迪": "Anemo", "香菱": "Pyro", "北斗": "Electro", "行秋": "Hydro", "魈": "Anemo", "凝光": "Geo", "可莉": "Pyro", "钟离": "Geo", "菲谢尔": "Electro", "班尼特": "Pyro", "达达利亚": "Hydro", "诺艾尔": "Geo", "七七": "Cryo", "重云": "Cryo", "甘雨": "Cryo", "阿贝多": "Geo", "迪奥娜": "Cryo", "莫娜": "Hydro", "刻晴": "Electro", "砂糖": "Anemo", "辛焱": "Pyro", "罗莎莉亚": "Cryo", "胡桃": "Pyro", "枫原万叶": "Anemo", "烟绯": "Pyro", "宵宫": "Pyro", "托马": "Pyro", "优菈": "Cryo", "雷电将军": "Electro", "早柚": "Anemo", "珊瑚宫心海": "Hydro", "五郎": "Geo", "九条裟罗": "Electro", "荒泷一斗": "Geo", "八重神子": "Electro", "鹿野院平藏": "Anemo", "夜兰": "Hydro", "绮良良": "Dendro", "埃洛伊": "Cryo", "申鹤": "Cryo", "云堇": "Geo", "久岐忍": "Electro", "神里绫人": "Hydro", "柯莱": "Dendro", "多莉": "Electro", "提纳里": "Dendro", "妮露": "Hydro", "赛诺": "Electro", "坎蒂丝": "Hydro", "纳西妲": "Dendro", "莱依拉": "Cryo", "流浪者": "Anemo", "珐露珊": "Anemo", "瑶瑶": "Dendro", "艾尔海森": "Dendro", "迪希雅": "Pyro", "米卡": "Cryo", "卡维": "Dendro", "白术": "Dendro", "琳妮特": "Anemo", "林尼": "Pyro", "菲米尼": "Cryo", "莱欧斯利": "Cryo", "那维莱特": "Hydro", "夏洛蒂": "Cryo", "芙宁娜": "Hydro", "夏沃蕾": "Pyro", "娜维娅": "Geo", "嘉明": "Pyro", "闲云": "Anemo", "千织": "Geo", "希格雯": "Hydro", "阿蕾奇诺": "Pyro", "赛索斯": "Electro", "克洛琳德": "Electro", "艾梅莉埃": "Dendro", "卡齐娜": "Geo", "基尼奇": "Dendro", "玛拉妮": "Hydro", "希诺宁": "Geo", "恰斯卡": "Anemo", "欧洛伦": "Electro", "玛薇卡": "Pyro", "茜特菈莉": "Cryo", "蓝砚": "Anemo", "梦见月瑞希": "Anemo", "伊安珊": "Electro", "瓦雷莎": "Electro"}
|
||||
{"神里绫华": "Cryo", "琴": "Anemo", "丽莎": "Electro", "芭芭拉": "Hydro", "凯亚": "Cryo", "迪卢克": "Pyro", "雷泽": "Electro", "安柏": "Pyro", "温迪": "Anemo", "香菱": "Pyro", "北斗": "Electro", "行秋": "Hydro", "魈": "Anemo", "凝光": "Geo", "可莉": "Pyro", "钟离": "Geo", "菲谢尔": "Electro", "班尼特": "Pyro", "达达利亚": "Hydro", "诺艾尔": "Geo", "七七": "Cryo", "重云": "Cryo", "甘雨": "Cryo", "阿贝多": "Geo", "迪奥娜": "Cryo", "莫娜": "Hydro", "刻晴": "Electro", "砂糖": "Anemo", "辛焱": "Pyro", "罗莎莉亚": "Cryo", "胡桃": "Pyro", "枫原万叶": "Anemo", "烟绯": "Pyro", "宵宫": "Pyro", "托马": "Pyro", "优菈": "Cryo", "雷电将军": "Electro", "早柚": "Anemo", "珊瑚宫心海": "Hydro", "五郎": "Geo", "九条裟罗": "Electro", "荒泷一斗": "Geo", "八重神子": "Electro", "鹿野院平藏": "Anemo", "夜兰": "Hydro", "绮良良": "Dendro", "埃洛伊": "Cryo", "申鹤": "Cryo", "云堇": "Geo", "久岐忍": "Electro", "神里绫人": "Hydro", "柯莱": "Dendro", "多莉": "Electro", "提纳里": "Dendro", "妮露": "Hydro", "赛诺": "Electro", "坎蒂丝": "Hydro", "纳西妲": "Dendro", "莱依拉": "Cryo", "流浪者": "Anemo", "珐露珊": "Anemo", "瑶瑶": "Dendro", "艾尔海森": "Dendro", "迪希雅": "Pyro", "米卡": "Cryo", "卡维": "Dendro", "白术": "Dendro", "琳妮特": "Anemo", "林尼": "Pyro", "菲米尼": "Cryo", "莱欧斯利": "Cryo", "那维莱特": "Hydro", "夏洛蒂": "Cryo", "芙宁娜": "Hydro", "夏沃蕾": "Pyro", "娜维娅": "Geo", "嘉明": "Pyro", "闲云": "Anemo", "千织": "Geo", "希格雯": "Hydro", "阿蕾奇诺": "Pyro", "赛索斯": "Electro", "克洛琳德": "Electro", "艾梅莉埃": "Dendro", "卡齐娜": "Geo", "基尼奇": "Dendro", "玛拉妮": "Hydro", "希诺宁": "Geo", "恰斯卡": "Anemo", "欧洛伦": "Electro", "玛薇卡": "Pyro", "茜特菈莉": "Cryo", "蓝砚": "Anemo", "梦见月瑞希": "Anemo", "伊安珊": "Electro", "瓦雷莎": "Electro", "爱可菲": "Cryo", "伊法": "Anemo", "丝柯克": "Cryo", "塔利雅": "Hydro"}
|
@ -1 +1 @@
|
||||
{"神里绫华": "单手剑", "琴": "单手剑", "丽莎": "法器", "芭芭拉": "法器", "凯亚": "单手剑", "迪卢克": "双手剑", "雷泽": "双手剑", "安柏": "弓", "温迪": "弓", "香菱": "长柄武器", "北斗": "双手剑", "行秋": "单手剑", "魈": "长柄武器", "凝光": "法器", "可莉": "法器", "钟离": "长柄武器", "菲谢尔": "弓", "班尼特": "单手剑", "达达利亚": "弓", "诺艾尔": "双手剑", "七七": "单手剑", "重云": "双手剑", "甘雨": "弓", "阿贝多": "单手剑", "迪奥娜": "弓", "莫娜": "法器", "刻晴": "单手剑", "砂糖": "法器", "辛焱": "双手剑", "罗莎莉亚": "长柄武器", "胡桃": "长柄武器", "枫原万叶": "单手剑", "烟绯": "法器", "宵宫": "弓", "托马": "长柄武器", "优菈": "双手剑", "雷电将军": "长柄武器", "早柚": "双手剑", "珊瑚宫心海": "法器", "五郎": "弓", "九条裟罗": "弓", "荒泷一斗": "双手剑", "八重神子": "法器", "鹿野院平藏": "法器", "夜兰": "弓", "绮良良": "单手剑", "埃洛伊": "弓", "申鹤": "长柄武器", "云堇": "长柄武器", "久岐忍": "单手剑", "神里绫人": "单手剑", "柯莱": "弓", "多莉": "双手剑", "提纳里": "弓", "妮露": "单手剑", "赛诺": "长柄武器", "坎蒂丝": "长柄武器", "纳西妲": "法器", "莱依拉": "单手剑", "流浪者": "法器", "珐露珊": "弓", "瑶瑶": "长柄武器", "艾尔海森": "单手剑", "迪希雅": "双手剑", "米卡": "长柄武器", "卡维": "双手剑", "白术": "法器", "琳妮特": "单手剑", "林尼": "弓", "菲米尼": "双手剑", "莱欧斯利": "法器", "那维莱特": "法器", "夏洛蒂": "法器", "芙宁娜": "单手剑", "夏沃蕾": "长柄武器", "娜维娅": "双手剑", "嘉明": "双手剑", "闲云": "法器", "千织": "单手剑", "希格雯": "弓", "阿蕾奇诺": "长柄武器", "赛索斯": "弓", "克洛琳德": "单手剑", "艾梅莉埃": "长柄武器", "卡齐娜": "长柄武器", "基尼奇": "双手剑", "玛拉妮": "法器", "希诺宁": "单手剑", "恰斯卡": "弓", "欧洛伦": "弓", "玛薇卡": "双手剑", "茜特菈莉": "法器", "蓝砚": "法器", "梦见月瑞希": "法器", "伊安珊": "长柄武器", "瓦雷莎": "法器", "旅行者": "单手剑"}
|
||||
{"神里绫华": "单手剑", "琴": "单手剑", "丽莎": "法器", "芭芭拉": "法器", "凯亚": "单手剑", "迪卢克": "双手剑", "雷泽": "双手剑", "安柏": "弓", "温迪": "弓", "香菱": "长柄武器", "北斗": "双手剑", "行秋": "单手剑", "魈": "长柄武器", "凝光": "法器", "可莉": "法器", "钟离": "长柄武器", "菲谢尔": "弓", "班尼特": "单手剑", "达达利亚": "弓", "诺艾尔": "双手剑", "七七": "单手剑", "重云": "双手剑", "甘雨": "弓", "阿贝多": "单手剑", "迪奥娜": "弓", "莫娜": "法器", "刻晴": "单手剑", "砂糖": "法器", "辛焱": "双手剑", "罗莎莉亚": "长柄武器", "胡桃": "长柄武器", "枫原万叶": "单手剑", "烟绯": "法器", "宵宫": "弓", "托马": "长柄武器", "优菈": "双手剑", "雷电将军": "长柄武器", "早柚": "双手剑", "珊瑚宫心海": "法器", "五郎": "弓", "九条裟罗": "弓", "荒泷一斗": "双手剑", "八重神子": "法器", "鹿野院平藏": "法器", "夜兰": "弓", "绮良良": "单手剑", "埃洛伊": "弓", "申鹤": "长柄武器", "云堇": "长柄武器", "久岐忍": "单手剑", "神里绫人": "单手剑", "柯莱": "弓", "多莉": "双手剑", "提纳里": "弓", "妮露": "单手剑", "赛诺": "长柄武器", "坎蒂丝": "长柄武器", "纳西妲": "法器", "莱依拉": "单手剑", "流浪者": "法器", "珐露珊": "弓", "瑶瑶": "长柄武器", "艾尔海森": "单手剑", "迪希雅": "双手剑", "米卡": "长柄武器", "卡维": "双手剑", "白术": "法器", "琳妮特": "单手剑", "林尼": "弓", "菲米尼": "双手剑", "莱欧斯利": "法器", "那维莱特": "法器", "夏洛蒂": "法器", "芙宁娜": "单手剑", "夏沃蕾": "长柄武器", "娜维娅": "双手剑", "嘉明": "双手剑", "闲云": "法器", "千织": "单手剑", "希格雯": "弓", "阿蕾奇诺": "长柄武器", "赛索斯": "弓", "克洛琳德": "单手剑", "艾梅莉埃": "长柄武器", "卡齐娜": "长柄武器", "基尼奇": "双手剑", "玛拉妮": "法器", "希诺宁": "单手剑", "恰斯卡": "弓", "欧洛伦": "弓", "玛薇卡": "双手剑", "茜特菈莉": "法器", "蓝砚": "法器", "梦见月瑞希": "法器", "伊安珊": "长柄武器", "瓦雷莎": "法器", "爱可菲": "长柄武器", "伊法": "法器", "丝柯克": "单手剑", "塔利雅": "单手剑", "旅行者": "单手剑"}
|
1
GenshinUID/utils/map/data/charList_5.7.0.json
Normal file
@ -937,5 +937,34 @@
|
||||
"瓦蕾沙",
|
||||
"瓦雷莎",
|
||||
"瓦雷沙"
|
||||
],
|
||||
"爱可菲": [
|
||||
"厨娘",
|
||||
"艾克非",
|
||||
"艾克飞",
|
||||
"爱可非",
|
||||
"爱克菲"
|
||||
],
|
||||
"伊法": [
|
||||
"哥们",
|
||||
"依法",
|
||||
"哥门",
|
||||
"ifa",
|
||||
"一法"
|
||||
],
|
||||
"塔利雅": [
|
||||
"塔利亚",
|
||||
"塔莉亚",
|
||||
"塔莉娅",
|
||||
"塔利娅"
|
||||
],
|
||||
"丝柯克": [
|
||||
"skk",
|
||||
"斯柯克",
|
||||
"蛇",
|
||||
"柯克",
|
||||
"思科克",
|
||||
"丝珂克",
|
||||
"丝珂珂"
|
||||
]
|
||||
}
|
@ -1 +1 @@
|
||||
{"Ayaka": "10000002", "Kamisato Ayaka": "10000002", "Qin": "10000003", "Jean": "10000003", "Lisa": "10000006", "Barbara": "10000014", "Kaeya": "10000015", "Diluc": "10000016", "Razor": "10000020", "Ambor": "10000021", "Amber": "10000021", "Venti": "10000022", "Xiangling": "10000023", "Beidou": "10000024", "Xingqiu": "10000025", "Xiao": "10000026", "Ningguang": "10000027", "Klee": "10000029", "Zhongli": "10000030", "Fischl": "10000031", "Bennett": "10000032", "Tartaglia": "10000033", "Noel": "10000034", "Noelle": "10000034", "Qiqi": "10000035", "Chongyun": "10000036", "Ganyu": "10000037", "Albedo": "10000038", "Diona": "10000039", "Mona": "10000041", "Keqing": "10000042", "Sucrose": "10000043", "Xinyan": "10000044", "Rosaria": "10000045", "Hutao": "10000046", "Hu Tao": "10000046", "Kazuha": "10000047", "Kaedehara Kazuha": "10000047", "Feiyan": "10000048", "Yanfei": "10000048", "Yoimiya": "10000049", "Tohma": "10000050", "Thoma": "10000050", "Eula": "10000051", "Shougun": "10000052", "Raiden Shogun": "10000052", "Sayu": "10000053", "Kokomi": "10000054", "Sangonomiya Kokomi": "10000054", "Gorou": "10000055", "Sara": "10000056", "Kujou Sara": "10000056", "Itto": "10000057", "Arataki Itto": "10000057", "Yae": "10000058", "Yae Miko": "10000058", "Heizo": "10000059", "Shikanoin Heizou": "10000059", "Yelan": "10000060", "Momoka": "10000061", "Kirara": "10000061", "Aloy": "10000062", "Shenhe": "10000063", "Yunjin": "10000064", "Yun Jin": "10000064", "Shinobu": "10000065", "Kuki Shinobu": "10000065", "Ayato": "10000066", "Kamisato Ayato": "10000066", "Collei": "10000067", "Dori": "10000068", "Tighnari": "10000069", "Nilou": "10000070", "Cyno": "10000071", "Candace": "10000072", "Nahida": "10000073", "Layla": "10000074", "Wanderer": "10000075", "Faruzan": "10000076", "Yaoyao": "10000077", "Alhatham": "10000078", "Alhaitham": "10000078", "Dehya": "10000079", "Mika": "10000080", "Kaveh": "10000081", "Baizhuer": "10000082", "Baizhu": "10000082", "Linette": "10000083", "Lynette": "10000083", "Liney": "10000084", "Lyney": "10000084", "Freminet": "10000085", "Wriothesley": "10000086", "Neuvillette": "10000087", "Charlotte": "10000088", "Furina": "10000089", "Chevreuse": "10000090", "Navia": "10000091", "Gaming": "10000092", "Liuyun": "10000093", "Xianyun": "10000093", "Chiori": "10000094", "Sigewinne": "10000095", "Arlecchino": "10000096", "Sethos": "10000097", "Clorinde": "10000098", "Emilie": "10000099", "Kachina": "10000100", "Kinich": "10000101", "Mualani": "10000102", "Xilonen": "10000103", "Chasca": "10000104", "Olorun": "10000105", "Ororon": "10000105", "Mavuika": "10000106", "Citlali": "10000107", "Lanyan": "10000108", "Lan Yan": "10000108", "Mizuki": "10000109", "Yumemizuki Mizuki": "10000109", "Iansan": "10000110", "Varesa": "10000111"}
|
||||
{"Ayaka": "10000002", "Kamisato Ayaka": "10000002", "Qin": "10000003", "Jean": "10000003", "Lisa": "10000006", "Barbara": "10000014", "Kaeya": "10000015", "Diluc": "10000016", "Razor": "10000020", "Ambor": "10000021", "Amber": "10000021", "Venti": "10000022", "Xiangling": "10000023", "Beidou": "10000024", "Xingqiu": "10000025", "Xiao": "10000026", "Ningguang": "10000027", "Klee": "10000029", "Zhongli": "10000030", "Fischl": "10000031", "Bennett": "10000032", "Tartaglia": "10000033", "Noel": "10000034", "Noelle": "10000034", "Qiqi": "10000035", "Chongyun": "10000036", "Ganyu": "10000037", "Albedo": "10000038", "Diona": "10000039", "Mona": "10000041", "Keqing": "10000042", "Sucrose": "10000043", "Xinyan": "10000044", "Rosaria": "10000045", "Hutao": "10000046", "Hu Tao": "10000046", "Kazuha": "10000047", "Kaedehara Kazuha": "10000047", "Feiyan": "10000048", "Yanfei": "10000048", "Yoimiya": "10000049", "Tohma": "10000050", "Thoma": "10000050", "Eula": "10000051", "Shougun": "10000052", "Raiden Shogun": "10000052", "Sayu": "10000053", "Kokomi": "10000054", "Sangonomiya Kokomi": "10000054", "Gorou": "10000055", "Sara": "10000056", "Kujou Sara": "10000056", "Itto": "10000057", "Arataki Itto": "10000057", "Yae": "10000058", "Yae Miko": "10000058", "Heizo": "10000059", "Shikanoin Heizou": "10000059", "Yelan": "10000060", "Momoka": "10000061", "Kirara": "10000061", "Aloy": "10000062", "Shenhe": "10000063", "Yunjin": "10000064", "Yun Jin": "10000064", "Shinobu": "10000065", "Kuki Shinobu": "10000065", "Ayato": "10000066", "Kamisato Ayato": "10000066", "Collei": "10000067", "Dori": "10000068", "Tighnari": "10000069", "Nilou": "10000070", "Cyno": "10000071", "Candace": "10000072", "Nahida": "10000073", "Layla": "10000074", "Wanderer": "10000075", "Faruzan": "10000076", "Yaoyao": "10000077", "Alhatham": "10000078", "Alhaitham": "10000078", "Dehya": "10000079", "Mika": "10000080", "Kaveh": "10000081", "Baizhuer": "10000082", "Baizhu": "10000082", "Linette": "10000083", "Lynette": "10000083", "Liney": "10000084", "Lyney": "10000084", "Freminet": "10000085", "Wriothesley": "10000086", "Neuvillette": "10000087", "Charlotte": "10000088", "Furina": "10000089", "Chevreuse": "10000090", "Navia": "10000091", "Gaming": "10000092", "Liuyun": "10000093", "Xianyun": "10000093", "Chiori": "10000094", "Sigewinne": "10000095", "Arlecchino": "10000096", "Sethos": "10000097", "Clorinde": "10000098", "Emilie": "10000099", "Kachina": "10000100", "Kinich": "10000101", "Mualani": "10000102", "Xilonen": "10000103", "Chasca": "10000104", "Olorun": "10000105", "Ororon": "10000105", "Mavuika": "10000106", "Citlali": "10000107", "Lanyan": "10000108", "Lan Yan": "10000108", "Mizuki": "10000109", "Yumemizuki Mizuki": "10000109", "Iansan": "10000110", "Varesa": "10000111", "Escoffier": "10000112", "Ifa": "10000113", "SkirkNew": "10000114", "Skirk": "10000114", "Dahlia": "10000115"}
|
@ -34033,6 +34033,155 @@
|
||||
"route": "Secret Source Automaton: Configuration Device",
|
||||
"icon": "UI_MonsterIcon_DragonClaw"
|
||||
},
|
||||
"24090501": {
|
||||
"id": 24090501,
|
||||
"type": "MONSTER_BOSS",
|
||||
"affix": null,
|
||||
"hpDrops": [
|
||||
{
|
||||
"id": 22010030,
|
||||
"hpPercent": 75
|
||||
},
|
||||
{
|
||||
"id": 22010030,
|
||||
"hpPercent": 50
|
||||
},
|
||||
{
|
||||
"id": 22010030,
|
||||
"hpPercent": 25
|
||||
}
|
||||
],
|
||||
"prop": [
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_HP",
|
||||
"initValue": 293.4144,
|
||||
"type": "GROW_CURVE_HP_2"
|
||||
},
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_ATTACK",
|
||||
"initValue": 100.48,
|
||||
"type": "GROW_CURVE_ATTACK_2"
|
||||
},
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_DEFENSE",
|
||||
"initValue": 500,
|
||||
"type": "GROW_CURVE_DEFENSE"
|
||||
}
|
||||
],
|
||||
"resistance": {
|
||||
"fireSubHurt": 0.1,
|
||||
"grassSubHurt": 0.1,
|
||||
"waterSubHurt": 0.1,
|
||||
"elecSubHurt": 0.1,
|
||||
"windSubHurt": 0.1,
|
||||
"iceSubHurt": 0.1,
|
||||
"rockSubHurt": 0.1,
|
||||
"physicalSubHurt": 0.1
|
||||
},
|
||||
"fundamentalForce": null,
|
||||
"reward": {
|
||||
"102": {
|
||||
"name": "冒险阅历",
|
||||
"rank": 3,
|
||||
"icon": "UI_ItemIcon_102",
|
||||
"count": "200"
|
||||
},
|
||||
"105": {
|
||||
"name": "好感经验",
|
||||
"rank": 3,
|
||||
"icon": "UI_ItemIcon_105"
|
||||
},
|
||||
"202": {
|
||||
"name": "摩拉",
|
||||
"rank": 3,
|
||||
"icon": "UI_ItemIcon_202"
|
||||
},
|
||||
"104121": {
|
||||
"name": "涤净青金碎屑",
|
||||
"rank": 2,
|
||||
"icon": "UI_ItemIcon_104121"
|
||||
},
|
||||
"104122": {
|
||||
"name": "涤净青金断片",
|
||||
"rank": 3,
|
||||
"icon": "UI_ItemIcon_104122"
|
||||
},
|
||||
"104123": {
|
||||
"name": "涤净青金块",
|
||||
"rank": 4,
|
||||
"icon": "UI_ItemIcon_104123"
|
||||
},
|
||||
"104124": {
|
||||
"name": "涤净青金",
|
||||
"rank": 5,
|
||||
"icon": "UI_ItemIcon_104124"
|
||||
},
|
||||
"113076": {
|
||||
"name": "秘源积气喉",
|
||||
"rank": 4,
|
||||
"icon": "UI_ItemIcon_113076",
|
||||
"count": "2.5556"
|
||||
},
|
||||
"400022": {
|
||||
"name": "战狂",
|
||||
"rank": 3,
|
||||
"icon": "UI_RelicIcon_10005_4"
|
||||
},
|
||||
"400023": {
|
||||
"name": "战狂",
|
||||
"rank": 4,
|
||||
"icon": "UI_RelicIcon_10005_4"
|
||||
},
|
||||
"400042": {
|
||||
"name": "流放者",
|
||||
"rank": 3,
|
||||
"icon": "UI_RelicIcon_10009_4"
|
||||
},
|
||||
"400043": {
|
||||
"name": "流放者",
|
||||
"rank": 4,
|
||||
"icon": "UI_RelicIcon_10009_4"
|
||||
},
|
||||
"400047": {
|
||||
"name": "冒险家",
|
||||
"rank": 3,
|
||||
"icon": "UI_RelicIcon_10010_4"
|
||||
},
|
||||
"400088": {
|
||||
"name": "角斗士的终幕礼",
|
||||
"rank": 4,
|
||||
"icon": "UI_RelicIcon_15001_4"
|
||||
},
|
||||
"400089": {
|
||||
"name": "角斗士的终幕礼",
|
||||
"rank": 5,
|
||||
"icon": "UI_RelicIcon_15001_4"
|
||||
},
|
||||
"400098": {
|
||||
"name": "流浪大地的乐团",
|
||||
"rank": 4,
|
||||
"icon": "UI_RelicIcon_15003_4"
|
||||
},
|
||||
"400099": {
|
||||
"name": "流浪大地的乐团",
|
||||
"rank": 5,
|
||||
"icon": "UI_RelicIcon_15003_4"
|
||||
},
|
||||
"400132": {
|
||||
"name": "祭水之人",
|
||||
"rank": 3,
|
||||
"icon": "UI_RelicIcon_15010_3"
|
||||
},
|
||||
"400133": {
|
||||
"name": "祭水之人",
|
||||
"rank": 4,
|
||||
"icon": "UI_RelicIcon_15010_3"
|
||||
}
|
||||
},
|
||||
"name": "秘源机兵·统御械",
|
||||
"route": "Secret Source Automaton: Overseer Device",
|
||||
"icon": "UI_MonsterIcon_DragonCollar"
|
||||
},
|
||||
"25010201": {
|
||||
"id": 25010201,
|
||||
"type": "MONSTER_ORDINARY",
|
||||
@ -59867,5 +60016,43 @@
|
||||
"name": "蚀灭的源焰之主",
|
||||
"route": "Lord of Eroded Primal Fire",
|
||||
"icon": "UI_MonsterIcon_TheAbyssXiuhcoatl"
|
||||
},
|
||||
"29122000": {
|
||||
"id": 29122000,
|
||||
"type": "MONSTER_BOSS",
|
||||
"affix": null,
|
||||
"hpDrops": null,
|
||||
"prop": [
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_HP",
|
||||
"initValue": 679.2,
|
||||
"type": "GROW_CURVE_HP_2"
|
||||
},
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_ATTACK",
|
||||
"initValue": 125.6,
|
||||
"type": "GROW_CURVE_ATTACK_2"
|
||||
},
|
||||
{
|
||||
"propType": "FIGHT_PROP_BASE_DEFENSE",
|
||||
"initValue": 500,
|
||||
"type": "GROW_CURVE_DEFENSE"
|
||||
}
|
||||
],
|
||||
"resistance": {
|
||||
"fireSubHurt": 0.1,
|
||||
"grassSubHurt": 0.1,
|
||||
"waterSubHurt": 0.1,
|
||||
"elecSubHurt": 0.7,
|
||||
"windSubHurt": 0.7,
|
||||
"iceSubHurt": 0.1,
|
||||
"rockSubHurt": 0.1,
|
||||
"physicalSubHurt": 0.1
|
||||
},
|
||||
"fundamentalForce": null,
|
||||
"reward": null,
|
||||
"name": "门扉前的弈局",
|
||||
"route": "The Game Before the Gate",
|
||||
"icon": "UI_MonsterIcon_GiantChess"
|
||||
}
|
||||
}
|