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 |
1
.vscode/settings.json
vendored
@ -18,4 +18,5 @@
|
|||||||
"basedpyright.analysis.extraPaths": [
|
"basedpyright.analysis.extraPaths": [
|
||||||
"${workspaceFolder}/../../../"
|
"${workspaceFolder}/../../../"
|
||||||
],
|
],
|
||||||
|
"python.analysis.typeCheckingMode": "off",
|
||||||
}
|
}
|
@ -3,11 +3,11 @@ import re
|
|||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
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.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_abyss_card import draw_abyss_img
|
from .draw_abyss_card import draw_abyss_img
|
||||||
|
from ..utils.message import GButton as Button
|
||||||
|
|
||||||
sv_abyss = SV('查询深渊')
|
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.error_reply import get_error_img
|
||||||
from gsuid_core.utils.api.mys.models import AbyssBattleAvatar
|
from gsuid_core.utils.api.mys.models import AbyssBattleAvatar
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..utils.resource.download_url import download_file
|
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
|
return star_pic
|
||||||
|
|
||||||
|
|
||||||
async def _draw_abyss_card(
|
async def _draw_char_card(
|
||||||
char: AbyssBattleAvatar,
|
char: AbyssBattleAvatar,
|
||||||
talent_num: str,
|
talent_num: Union[str, int],
|
||||||
floor_pic: Image.Image,
|
|
||||||
index_char: int,
|
|
||||||
index_part: int,
|
|
||||||
):
|
):
|
||||||
char_id = char['id']
|
char_id = char['id']
|
||||||
# 确认角色头像路径
|
# 确认角色头像路径
|
||||||
@ -71,6 +69,17 @@ async def _draw_abyss_card(
|
|||||||
anchor='mm',
|
anchor='mm',
|
||||||
)
|
)
|
||||||
char_card = char_card.resize((128, 160), Image.Resampling.LANCZOS)
|
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(
|
floor_pic.paste(
|
||||||
char_card,
|
char_card,
|
||||||
(70 + 147 * index_char, 39 + index_part * 170),
|
(70 + 147 * index_char, 39 + index_part * 170),
|
||||||
@ -147,7 +156,7 @@ async def draw_abyss_img(
|
|||||||
return '你还没有挑战过该层深渊!'
|
return '你还没有挑战过该层深渊!'
|
||||||
else:
|
else:
|
||||||
if len(raw_abyss_data['floors']) == 0:
|
if len(raw_abyss_data['floors']) == 0:
|
||||||
return '你还没有挑战本期深渊!\n可以使用[上期深渊]命令查询上期~'
|
return f'你还没有挑战本期深渊!\n可以使用[{PREFIX}上期深渊]命令查询上期~'
|
||||||
floors_data = raw_abyss_data['floors'][-1]
|
floors_data = raw_abyss_data['floors'][-1]
|
||||||
|
|
||||||
if floors_data['levels'][-1]['battles']:
|
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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_achi import draw_achi_img
|
from .draw_achi import draw_achi_img
|
||||||
from .get_achi_desc import get_achi, get_daily_achi
|
from .get_achi_desc import get_achi, get_daily_achi
|
||||||
|
|
||||||
|
@ -1,12 +1,26 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
path = Path(__file__).parent
|
import aiofiles
|
||||||
with open(path / 'all_achi.json', "r", encoding='UTF-8') as f:
|
from gsuid_core.server import on_core_start
|
||||||
all_achi = json.load(f)
|
|
||||||
|
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 = '''任务:【{}】
|
daily_template = '''任务:【{}】
|
||||||
成就:【{}】
|
成就:【{}】
|
||||||
|
@ -8,10 +8,10 @@ from gsuid_core.models import Event
|
|||||||
from gsuid_core.aps import scheduler
|
from gsuid_core.aps import scheduler
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.subscribe import gs_subscribe
|
from gsuid_core.subscribe import gs_subscribe
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from .util import black_ids
|
from .util import black_ids
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .main import ann, consume_remind
|
from .main import ann, consume_remind
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..genshinuid_config.gs_config import gsconfig
|
from ..genshinuid_config.gs_config import gsconfig
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from PIL import Image, ImageOps, ImageDraw
|
from PIL import Image, ImageOps, ImageDraw
|
||||||
@ -18,13 +19,22 @@ from ..utils.image.image_tools import (
|
|||||||
|
|
||||||
assets_dir = Path(__file__).parent / 'assets'
|
assets_dir = Path(__file__).parent / 'assets'
|
||||||
|
|
||||||
list_head = Image.open(assets_dir / 'list.png')
|
list_head: Optional[Image.Image] = None
|
||||||
list_item = (
|
list_item: Optional[Image.Image] = None
|
||||||
Image.open(assets_dir / 'item.png').resize((384, 96)).convert('RGBA')
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def ann_list_card() -> bytes:
|
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()
|
ann_list = await ann().get_ann_list()
|
||||||
if not ann_list:
|
if not ann_list:
|
||||||
raise Exception('获取游戏公告失败,请检查接口是否正常')
|
raise Exception('获取游戏公告失败,请检查接口是否正常')
|
||||||
@ -159,7 +169,7 @@ async def ann_detail_card(ann_id):
|
|||||||
bbox = gs_font_26.getbbox('囗')
|
bbox = gs_font_26.getbbox('囗')
|
||||||
_x, _y = bbox[2] - bbox[0], bbox[3] - bbox[1]
|
_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')
|
im = ImageOps.expand(im, padding, '#f9f6f2')
|
||||||
|
|
||||||
return await convert_img(im)
|
return await convert_img(im)
|
||||||
|
@ -27,7 +27,6 @@ def cache(ttl=datetime.timedelta(hours=1), **kwargs):
|
|||||||
|
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
async def wrapped(*args, **kw):
|
async def wrapped(*args, **kw):
|
||||||
nonlocal cache_data
|
|
||||||
bound = inspect.signature(func).bind(*args, **kw)
|
bound = inspect.signature(func).bind(*args, **kw)
|
||||||
bound.apply_defaults()
|
bound.apply_defaults()
|
||||||
ins_key = '|'.join(
|
ins_key = '|'.join(
|
||||||
|
@ -2,10 +2,11 @@ from gsuid_core.sv import SV
|
|||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_cale_pic import draw_cale_img
|
from .draw_cale_pic import draw_cale_img
|
||||||
|
from ..utils.buttons import a, b, c, s, t, u, v, x, y
|
||||||
|
|
||||||
sv_cale = SV('个人日历')
|
sv_cale = SV('个人日历')
|
||||||
|
|
||||||
@ -20,4 +21,4 @@ async def send_cale_pic(bot: Bot, ev: Event):
|
|||||||
logger.info(f'[个人日历] uid: {uid}')
|
logger.info(f'[个人日历] uid: {uid}')
|
||||||
|
|
||||||
im = await draw_cale_img(ev, 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.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
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.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_new_collection_card import draw_explore
|
||||||
from .draw_collection_card import draw_explora_img, draw_collection_img
|
from .draw_collection_card import draw_explora_img, draw_collection_img
|
||||||
|
|
||||||
|
@ -14,17 +14,17 @@ yyy_data = {
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# 5.5影月月数据
|
# 5.7影月月数据
|
||||||
# 2025.3.27
|
# 2025.5.18
|
||||||
yyy_data = {
|
yyy_data = {
|
||||||
'成就': 1458,
|
'成就': 1458,
|
||||||
'华丽的宝箱': 325,
|
'华丽的宝箱': 325,
|
||||||
'珍贵的宝箱': 851,
|
'珍贵的宝箱': 851,
|
||||||
'精致的宝箱': 2714,
|
'精致的宝箱': 2717,
|
||||||
'普通的宝箱': 3317,
|
'普通的宝箱': 3318,
|
||||||
'奇馈宝箱': 316,
|
'奇馈宝箱': 316,
|
||||||
'解锁传送点': 580,
|
'解锁传送点': 584,
|
||||||
'解锁秘境': 63,
|
'解锁秘境': 64,
|
||||||
}
|
}
|
||||||
|
|
||||||
# 影月月没收集到的数据
|
# 影月月没收集到的数据
|
||||||
|
@ -3,9 +3,11 @@ from typing import Dict, Tuple, Union, Literal
|
|||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from ..utils.mys_api import get_base_data
|
from ..utils.mys_api import get_base_data
|
||||||
from ..utils.image.convert import convert_img
|
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 .const import max_data, award_data, expmax_data
|
||||||
from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40
|
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
|
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)):
|
if isinstance(raw_data, (str, bytes, bytearray, memoryview)):
|
||||||
return raw_data
|
return raw_data
|
||||||
|
|
||||||
|
expmax_data['获得角色数'] = len(avatarId2Name) - 2
|
||||||
|
|
||||||
# 处理数据
|
# 处理数据
|
||||||
data: Dict[str, int] = {
|
data: Dict[str, int] = {
|
||||||
'获得角色数': raw_data['stats']['avatar_number'],
|
'获得角色数': raw_data['stats']['avatar_number'],
|
||||||
@ -142,6 +146,7 @@ async def draw_base_img(
|
|||||||
img.paste(title, (0, 0), title)
|
img.paste(title, (0, 0), title)
|
||||||
img.paste(char_pic, (241, 40), char_pic)
|
img.paste(char_pic, (241, 40), char_pic)
|
||||||
|
|
||||||
|
logger.debug(percent_data)
|
||||||
for index, name in enumerate(percent_data):
|
for index, name in enumerate(percent_data):
|
||||||
percent = percent_data[name]
|
percent = percent_data[name]
|
||||||
value = value_data[name]
|
value = value_data[name]
|
||||||
@ -161,3 +166,4 @@ async def draw_base_img(
|
|||||||
|
|
||||||
def _f(value: float) -> str:
|
def _f(value: float) -> str:
|
||||||
return '{:.2f}%'.format(value)
|
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):
|
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 = await get_image(world['icon'], ICON_PATH)
|
||||||
icon = icon.resize((150, 150)).convert('RGBA')
|
icon = icon.resize((150, 150)).convert('RGBA')
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .get_my_pack import draw_my_pack
|
from .get_my_pack import draw_my_pack
|
||||||
|
|
||||||
sv_pack = SV('查询背包')
|
sv_pack = SV('查询背包')
|
||||||
|
@ -4,9 +4,9 @@ from gsuid_core.sv import SV
|
|||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
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.database.models import GsBind
|
||||||
|
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_config_card import draw_config_img
|
from .draw_config_card import draw_config_img
|
||||||
from .set_config import set_push_value, set_config_func
|
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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
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_data import switch_api
|
||||||
from .to_card import enka_to_card
|
from .to_card import enka_to_card
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .get_akasha_data import get_rank
|
from .get_akasha_data import get_rank
|
||||||
from .start import refresh_player_list
|
from .start import refresh_player_list
|
||||||
from .to_data_by_mys import mys_to_card
|
from .to_data_by_mys import mys_to_card
|
||||||
from .draw_artifacts_lib import draw_lib
|
from .draw_artifacts_lib import draw_lib
|
||||||
from .draw_rank_list import draw_rank_img
|
from .draw_rank_list import draw_rank_img
|
||||||
from ..utils.image.convert import convert_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 ..utils.map.GS_MAP_PATH import alias_data
|
||||||
from .draw_arti_rank import draw_arti_rank_img
|
from .draw_arti_rank import draw_arti_rank_img
|
||||||
from .draw_char_info import draw_all_char_list
|
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)
|
im = await enka_to_card(uid)
|
||||||
else:
|
else:
|
||||||
im = await enka_to_card(uid)
|
im = await enka_to_card(uid)
|
||||||
logger.info(f'UID{uid}获取角色数据成功!')
|
|
||||||
|
|
||||||
if isinstance(im, Tuple):
|
if isinstance(im, Tuple):
|
||||||
buttons = [
|
buttons = [
|
||||||
|
@ -7,6 +7,7 @@ from PIL import Image, ImageDraw
|
|||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
|
|
||||||
from .etc.etc import TEXT_PATH
|
from .etc.etc import TEXT_PATH
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from .start import refresh_player_list
|
from .start import refresh_player_list
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..utils.image.image_tools import get_avatar
|
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]:
|
async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]:
|
||||||
data = await get_artifacts_lib_data(uid)
|
data = await get_artifacts_lib_data(uid)
|
||||||
if data is None:
|
if data is None:
|
||||||
return '你还没有圣遗物数据...请尝试使用[刷新圣遗物仓库]获取数据!'
|
return (
|
||||||
|
f'你还没有圣遗物数据...请尝试使用[{PREFIX}刷新圣遗物仓库]获取数据!'
|
||||||
|
)
|
||||||
|
|
||||||
all_list = [x for v in data['data'].values() for x in v]
|
all_list = [x for v in data['data'].values() for x in v]
|
||||||
all_list.sort(key=lambda x: x['cv_score'], reverse=True)
|
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 PIL import Image, ImageDraw
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..utils.colors import get_color
|
from ..utils.colors import get_color
|
||||||
from .draw_rank_list import RANK_TEXT
|
from .draw_rank_list import RANK_TEXT
|
||||||
from .get_akasha_data import _get_rank
|
from .get_akasha_data import _get_rank
|
||||||
@ -53,7 +54,7 @@ async def draw_role_rank_img(
|
|||||||
if isinstance(rank_data, str):
|
if isinstance(rank_data, str):
|
||||||
return rank_data
|
return rank_data
|
||||||
if char_id not in 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']
|
fit = rank_data[char_id]['calculations']['fit']
|
||||||
calculation_id = fit['calculationId']
|
calculation_id = fit['calculationId']
|
||||||
|
@ -17744,7 +17744,7 @@
|
|||||||
"plus": 1,
|
"plus": 1,
|
||||||
"value": [
|
"value": [
|
||||||
"80.0%",
|
"80.0%",
|
||||||
"86.6%",
|
"86.5%",
|
||||||
"93.1%",
|
"93.1%",
|
||||||
"102.4%",
|
"102.4%",
|
||||||
"108.9%",
|
"108.9%",
|
||||||
@ -19543,5 +19543,646 @@
|
|||||||
"956.3%"
|
"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": {
|
||||||
"normal_skill": {
|
"normal_skill": {
|
||||||
|
@ -378,5 +378,21 @@
|
|||||||
"瓦雷莎": [
|
"瓦雷莎": [
|
||||||
"Q",
|
"Q",
|
||||||
"A"
|
"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": {
|
||||||
"normal_effect": {
|
"normal_effect": {
|
||||||
|
@ -3,6 +3,7 @@ from typing import Dict, Union
|
|||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..genshinuid_config.gs_config import gsconfig
|
from ..genshinuid_config.gs_config import gsconfig
|
||||||
from ..utils.map.name_covert import avatar_id_to_name
|
from ..utils.map.name_covert import avatar_id_to_name
|
||||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||||
@ -15,13 +16,13 @@ async def _get_rank(uid: str) -> Union[Dict, str]:
|
|||||||
return '未开启排名系统...'
|
return '未开启排名系统...'
|
||||||
path = PLAYER_PATH / uid / 'rank.json'
|
path = PLAYER_PATH / uid / 'rank.json'
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
|
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
|
||||||
|
|
||||||
async with aiofiles.open(path, 'r', encoding='UTF-8') as file:
|
async with aiofiles.open(path, 'r', encoding='UTF-8') as file:
|
||||||
rank_data = json.loads(await file.read())
|
rank_data = json.loads(await file.read())
|
||||||
|
|
||||||
if len(rank_data) == 0:
|
if len(rank_data) == 0:
|
||||||
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
|
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
|
||||||
|
|
||||||
return rank_data
|
return rank_data
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ from PIL import Image
|
|||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import CHAR_HINT
|
from gsuid_core.utils.error_reply import CHAR_HINT
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from .to_card import draw_enka_card
|
from .to_card import draw_enka_card
|
||||||
from .draw_char_card import draw_char_img
|
from .draw_char_card import draw_char_img
|
||||||
from .draw_group_dmg import draw_group_dmg_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':
|
if '\u4e00' <= file_name[0] <= '\u9fff':
|
||||||
char_list.append(file_name.split('.')[0])
|
char_list.append(file_name.split('.')[0])
|
||||||
if char_list == []:
|
if char_list == []:
|
||||||
return '您还没有已缓存的角色噢~\n请先使用[强制刷新]命令缓存~'
|
return f'您还没有已缓存的角色噢~\n请先使用[{PREFIX}强制刷新]命令缓存~'
|
||||||
img = await draw_enka_card(uid=uid, char_list=char_list)
|
img = await draw_enka_card(uid=uid, char_list=char_list)
|
||||||
return img
|
return img
|
||||||
|
|
||||||
|
@ -392,6 +392,7 @@ class Character:
|
|||||||
prop['sp'] = []
|
prop['sp'] = []
|
||||||
prop['baseArea'] = 1
|
prop['baseArea'] = 1
|
||||||
prop['powerPlus'] = 1
|
prop['powerPlus'] = 1
|
||||||
|
prop['extraBonus'] = 0
|
||||||
if prop['baseHp'] + prop['addHp'] == prop['hp']:
|
if prop['baseHp'] + prop['addHp'] == prop['hp']:
|
||||||
prop['exHp'] = prop['addHp']
|
prop['exHp'] = prop['addHp']
|
||||||
prop['exAtk'] = prop['addAtk']
|
prop['exAtk'] = prop['addAtk']
|
||||||
|
@ -352,6 +352,8 @@ class Fight:
|
|||||||
|
|
||||||
base_area_plus = await self.get_base_area_plus(char)
|
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:
|
if '灭净三业' in power.name or '业障除' in power.name:
|
||||||
base = await self.get_sp_base(power, char)
|
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 = base + reaction_power + add_dmg + char.sp.addDmg
|
||||||
|
base_area *= extra_bonus
|
||||||
if base_area_plus != 1:
|
if base_area_plus != 1:
|
||||||
base_area_plus -= 1
|
base_area_plus -= 1
|
||||||
base_area = base_area_plus * base_area
|
base_area = base_area_plus * base_area
|
||||||
|
@ -6,6 +6,7 @@ from copy import deepcopy
|
|||||||
import aiofiles
|
import aiofiles
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||||
from .to_data import ARTIFACT_DATA, input_artifacts_data
|
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:
|
async def refresh_player_list(uid: str, is_force: bool = False) -> str:
|
||||||
player = PLAYER_PATH / uid
|
player = PLAYER_PATH / uid
|
||||||
if not player.exists():
|
if not player.exists():
|
||||||
return f'该UID{uid}对应面板数据不存在, 请先进行 [刷新面板]!'
|
return f'该UID{uid}对应面板数据不存在, 请先进行 [{PREFIX}刷新面板]!'
|
||||||
|
|
||||||
path = player / 'artifacts.json'
|
path = player / 'artifacts.json'
|
||||||
all_artifacts = deepcopy(ARTIFACT_DATA)
|
all_artifacts = deepcopy(ARTIFACT_DATA)
|
||||||
|
@ -3,6 +3,7 @@ from pathlib import Path
|
|||||||
from typing import Dict, List, Tuple, Union, Optional
|
from typing import Dict, List, Tuple, Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.api.enka.models import EnkaData
|
from gsuid_core.utils.api.enka.models import EnkaData
|
||||||
|
|
||||||
from .to_data import enka_to_dict
|
from .to_data import enka_to_dict
|
||||||
@ -42,6 +43,7 @@ async def enka_to_card(
|
|||||||
return await convert_img(pic_500)
|
return await convert_img(pic_500)
|
||||||
|
|
||||||
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
|
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
|
||||||
|
logger.info(f'[强制刷新] UID{uid}成功!')
|
||||||
return img, char_data_list
|
return img, char_data_list
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +74,7 @@ async def draw_enka_card(
|
|||||||
if char_num <= 8:
|
if char_num <= 8:
|
||||||
based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220
|
based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220
|
||||||
else:
|
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:
|
if (char_num - 5) % 5 >= 4:
|
||||||
based_h += 110
|
based_h += 110
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@ from typing import Dict, List, Union, Literal, Optional
|
|||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
from httpx import ReadTimeout
|
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.models import EnkaData
|
||||||
from gsuid_core.utils.api.enka.request import get_enka_info
|
from gsuid_core.utils.api.enka.request import get_enka_info
|
||||||
|
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .mono.Character import Character
|
from .mono.Character import Character
|
||||||
from ..utils.api.cv.request import _CvApi
|
from ..utils.api.cv.request import _CvApi
|
||||||
from .draw_normal import get_artifact_score_data
|
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 = char['weapon']
|
||||||
weapon_main = weapon['main_property']
|
weapon_main = weapon['main_property']
|
||||||
main_prop_id = Id2PropId[str(weapon_main['property_type'])]
|
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)
|
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
|
||||||
return img, 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.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.message_models import Button
|
|
||||||
|
|
||||||
from ..version import Genshin_version
|
from ..version import Genshin_version
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
|
from ..utils.message import GButton as Button
|
||||||
|
|
||||||
PRIMOGEMS_DATA_PATH = Path(__file__).parent / 'primogems_data'
|
PRIMOGEMS_DATA_PATH = Path(__file__).parent / 'primogems_data'
|
||||||
IMG_PATH = Path(__file__).parent / 'img_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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.aps import scheduler
|
from gsuid_core.aps import scheduler
|
||||||
from gsuid_core.message_models import Button
|
|
||||||
|
|
||||||
from ..utils.image.convert import convert_img
|
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
|
from .draw_event_img import get_event_img, get_all_event_img
|
||||||
|
|
||||||
sv_event_list = SV('活动列表')
|
sv_event_list = SV('活动列表')
|
||||||
|
@ -2,12 +2,12 @@ from gsuid_core.sv import SV
|
|||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.message_models import Button
|
|
||||||
from gsuid_core.segment import MessageSegment
|
from gsuid_core.segment import MessageSegment
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
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 .draw_gachalogs import draw_gachalogs_img
|
||||||
from .get_gachalogs import save_gachalogs, get_full_gachalog
|
from .get_gachalogs import save_gachalogs, get_full_gachalog
|
||||||
from .export_and_import import export_gachalogs, import_gachalogs
|
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.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..utils.map.GS_MAP_PATH import charList
|
from ..utils.map.GS_MAP_PATH import charList
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from .get_gachalogs import all_gacha_type_name
|
from .get_gachalogs import all_gacha_type_name
|
||||||
@ -60,8 +61,9 @@ NORMAL_LIST = [
|
|||||||
|
|
||||||
UP_LIST = {
|
UP_LIST = {
|
||||||
'刻晴': [(2021, 2, 17, 18, 0, 0), (2021, 3, 2, 15, 59, 59)],
|
'刻晴': [(2021, 2, 17, 18, 0, 0), (2021, 3, 2, 15, 59, 59)],
|
||||||
'提纳里': [(2022, 8, 24, 11, 0, 0), (2022, 9, 9, 17, 59, 59)],
|
'提纳里': [(2022, 8, 24, 9, 0, 0), (2022, 9, 9, 17, 59, 59)],
|
||||||
'迪希雅': [(2023, 3, 1, 11, 0, 0), (2023, 3, 21, 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]:
|
async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]:
|
||||||
path = PLAYER_PATH / str(uid) / 'gacha_logs.json'
|
path = PLAYER_PATH / str(uid) / 'gacha_logs.json'
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~'
|
return f'你还没有祈愿数据噢~\n请添加Stoken后使用命令`{PREFIX}刷新抽卡记录`更新祈愿数据~'
|
||||||
with open(path, 'r', encoding='UTF-8') as f:
|
with open(path, 'r', encoding='UTF-8') as f:
|
||||||
gacha_data = json.load(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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
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.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_gcgdesk import draw_deck_img
|
from .draw_gcgdesk import draw_deck_img
|
||||||
from .draw_gcginfo import draw_gcg_info
|
from .draw_gcginfo import draw_gcg_info
|
||||||
|
from ..utils.message import GButton as Button
|
||||||
|
|
||||||
sv_gcg = SV('查询七圣')
|
sv_gcg = SV('查询七圣')
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ from gsuid_core.sv import SV
|
|||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.message_models import Button
|
|
||||||
from gsuid_core.segment import MessageSegment
|
from gsuid_core.segment import MessageSegment
|
||||||
|
|
||||||
from .get_guide import get_gs_guide
|
from .get_guide import get_gs_guide
|
||||||
@ -13,6 +12,7 @@ from ..version import Genshin_version
|
|||||||
|
|
||||||
# from .get_abyss_data import get_review
|
# from .get_abyss_data import get_review
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
|
from ..utils.message import GButton as Button
|
||||||
from .get_new_abyss_data import get_review_data
|
from .get_new_abyss_data import get_review_data
|
||||||
from ..utils.resource.RESOURCE_PATH import REF_PATH
|
from ..utils.resource.RESOURCE_PATH import REF_PATH
|
||||||
from .get_bbs_post_guide import get_material_way_post
|
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 pathlib import Path
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from msgspec import json as msgjson
|
|
||||||
from gsuid_core.help.model import PluginHelp
|
from gsuid_core.help.model import PluginHelp
|
||||||
from gsuid_core.help.draw_plugin_help import get_help
|
from gsuid_core.help.draw_plugin_help import get_help
|
||||||
from gsuid_core.sv import get_plugin_available_prefix
|
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 def get_help_data() -> Dict[str, PluginHelp]:
|
||||||
async with aiofiles.open(HELP_DATA, 'rb') as file:
|
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]:
|
async def get_core_help() -> Union[bytes, str]:
|
||||||
|
@ -18,6 +18,14 @@
|
|||||||
"need_sk": false,
|
"need_sk": false,
|
||||||
"need_admin": false
|
"need_admin": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "[上期]幽境危战/yjwz",
|
||||||
|
"desc": "肃靖险乱信息一览",
|
||||||
|
"eg": "新新深渊",
|
||||||
|
"need_ck": true,
|
||||||
|
"need_sk": false,
|
||||||
|
"need_admin": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "幻想真境剧诗",
|
"name": "幻想真境剧诗",
|
||||||
"desc": "新深渊信息一览,后可跟UID",
|
"desc": "新深渊信息一览,后可跟UID",
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from .note_text import award
|
from .note_text import award
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_note_card import draw_note_img
|
from .draw_note_card import draw_note_img
|
||||||
|
|
||||||
sv_get_monthly_data = SV('查询札记')
|
sv_get_monthly_data = SV('查询札记')
|
||||||
|
@ -3,16 +3,27 @@ import re
|
|||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .draw_poetry_abyss import draw_poetry_abyss_img
|
from .draw_poetry_abyss import draw_poetry_abyss_img
|
||||||
|
|
||||||
sv_poetry_abyss = SV('查询幻想真境剧诗')
|
sv_poetry_abyss = SV('查询幻想真境剧诗')
|
||||||
|
|
||||||
|
|
||||||
@sv_poetry_abyss.on_command(
|
@sv_poetry_abyss.on_command(
|
||||||
('查询幻想真境剧诗', '幻想真境剧诗', '新深渊', '查询新深渊', '真剧诗'),
|
(
|
||||||
|
'查询幻想真境剧诗',
|
||||||
|
'幻想真境剧诗',
|
||||||
|
'新深渊',
|
||||||
|
'查询新深渊',
|
||||||
|
'真剧诗',
|
||||||
|
'查询上期幻想真境剧诗',
|
||||||
|
'上期幻想真境剧诗',
|
||||||
|
'上期新深渊',
|
||||||
|
'查询上期新深渊',
|
||||||
|
'上期真剧诗',
|
||||||
|
),
|
||||||
block=True,
|
block=True,
|
||||||
)
|
)
|
||||||
async def send_poetry_abyss_info(bot: Bot, ev: Event):
|
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)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info('[幻想真境剧诗]uid: {}'.format(uid))
|
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)
|
await bot.send(im)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List, Union
|
from typing import List, Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
from gsuid_core.models import Event
|
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]:
|
async def draw_poetry_abyss_img(
|
||||||
data = await mys_api.get_poetry_abyss_data(uid)
|
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):
|
if isinstance(data, int):
|
||||||
return get_error(data)
|
return get_error(data)
|
||||||
|
|
||||||
if not data['is_unlock'] or not data['data']:
|
if not data['is_unlock'] or not data['data']:
|
||||||
return '[幻想真境剧诗] 你还没有解锁该模式!'
|
return '[幻想真境剧诗] 你还没有解锁该模式!'
|
||||||
|
|
||||||
data = data['data'][0]
|
if active:
|
||||||
|
data = data['data'][-1]
|
||||||
|
else:
|
||||||
|
data = data['data'][0]
|
||||||
|
|
||||||
round_data = data['detail']['rounds_data']
|
round_data = data['detail']['rounds_data']
|
||||||
stat_data = data['stat']
|
stat_data = data['stat']
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@ from gsuid_core.sv import SV
|
|||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.aps import scheduler
|
from gsuid_core.aps import scheduler
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from .get_draw import post_my_draw
|
from .get_draw import post_my_draw
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .daily_check_draw import daily_get_draw
|
from .daily_check_draw import daily_get_draw
|
||||||
from ..genshinuid_config.gs_config import gsconfig
|
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.logger import logger
|
||||||
from gsuid_core.models import Event, Message
|
from gsuid_core.models import Event, Message
|
||||||
from gsuid_core.segment import MessageSegment
|
from gsuid_core.segment import MessageSegment
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .resin_text import get_resin_text
|
from .resin_text import get_resin_text
|
||||||
from .draw_resin_card import get_resin_img
|
from .draw_resin_card import get_resin_img
|
||||||
from .notice import MR_NOTICE, get_notice_list
|
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, '', ''
|
msg_list, 'direct', user_id, bot_id, '', ''
|
||||||
)
|
)
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
logger.info('[推送检查] 私聊推送完成')
|
logger.info('✅[推送检查] 私聊推送完成')
|
||||||
for gid in result[bot_id]['group']:
|
for gid in result[bot_id]['group']:
|
||||||
msg_list = [
|
msg_list = [
|
||||||
MessageSegment.text('✅[原神] 推送提醒:\n'),
|
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(msg))
|
||||||
msg_list.append(MessageSegment.text(MR_NOTICE))
|
msg_list.append(MessageSegment.text(MR_NOTICE))
|
||||||
await bot.target_send(
|
await bot.target_send(
|
||||||
msg_list, 'group', gid, bot_id, '', ''
|
msg_list,
|
||||||
|
'group',
|
||||||
|
gid,
|
||||||
|
bot_id,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
)
|
)
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
logger.info('[推送检查] 群聊推送完成')
|
logger.info('✅[推送检查] 群聊推送完成')
|
||||||
else:
|
else:
|
||||||
logger.info('[推送检查] 已关闭全局推送, 停止任务...')
|
logger.info('✅[推送检查] 已关闭全局推送, 停止任务...')
|
||||||
|
|
||||||
|
|
||||||
@sv_get_resin.on_fullmatch(('每日', 'mr', '实时便笺', '便笺', '便签'))
|
@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.api.mys.models import DailyNoteData
|
||||||
from gsuid_core.utils.database.models import GsPush, GsUser
|
from gsuid_core.utils.database.models import GsPush, GsUser
|
||||||
|
|
||||||
|
from ..utils.message import PREFIX
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
from ..utils.api.mys.models import WidgetResin
|
from ..utils.api.mys.models import WidgetResin
|
||||||
from ..genshinuid_config.gs_config import gsconfig
|
from ..genshinuid_config.gs_config import gsconfig
|
||||||
|
|
||||||
MR_NOTICE = '\n✅可发送[mr]或者[每日]来查看更多信息!\n'
|
MR_NOTICE = f'\n✅可发送[{PREFIX}mr]或者[{PREFIX}每日]来查看更多信息!\n'
|
||||||
|
|
||||||
NOTICE = {
|
NOTICE = {
|
||||||
'coin': '💰你的洞天宝钱快满啦!',
|
'coin': '💰你的洞天宝钱快满啦!',
|
||||||
|
@ -3,9 +3,9 @@ import re
|
|||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
from ..utils.message import UID_HINT
|
||||||
from .get_regtime import calc_reg_time
|
from .get_regtime import calc_reg_time
|
||||||
from .draw_all_char import draw_char_pic
|
from .draw_all_char import draw_char_pic
|
||||||
from .draw_roleinfo_card import draw_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.models import Event
|
||||||
from gsuid_core.aps import scheduler
|
from gsuid_core.aps import scheduler
|
||||||
from gsuid_core.logger import logger
|
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.database.models import GsBind
|
||||||
from gsuid_core.utils.sign.sign import sign_in, daily_sign
|
from gsuid_core.utils.sign.sign import sign_in, daily_sign
|
||||||
from gsuid_core.utils.boardcast.send_msg import send_board_cast_msg
|
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
|
from ..genshinuid_config.gs_config import gsconfig
|
||||||
|
|
||||||
SIGN_TIME = gsconfig.get_config('SignTime').data
|
SIGN_TIME = gsconfig.get_config('SignTime').data
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
import asyncio
|
|
||||||
import threading
|
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
from gsuid_core.server import on_core_start
|
||||||
|
|
||||||
from ..genshinuid_resource import startup
|
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_enka.start import check_artifacts_list
|
||||||
# from ..genshinuid_guide.get_abyss_data import generate_data
|
# from ..genshinuid_guide.get_abyss_data import generate_data
|
||||||
from ..utils.resource.generate_char_card import create_all_char_card
|
from ..utils.resource.generate_char_card import create_all_char_card
|
||||||
|
|
||||||
|
'''
|
||||||
from ..genshinuid_xkdata.get_all_char_data import (
|
from ..genshinuid_xkdata.get_all_char_data import (
|
||||||
save_all_char_info,
|
save_all_char_info,
|
||||||
save_all_abyss_rank,
|
save_all_abyss_rank,
|
||||||
)
|
)
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
@on_core_start
|
||||||
async def all_start():
|
async def all_start():
|
||||||
try:
|
try:
|
||||||
await download_Oceanid()
|
await download_Oceanid()
|
||||||
@ -25,10 +27,7 @@ async def all_start():
|
|||||||
await create_all_char_card()
|
await create_all_char_card()
|
||||||
# await draw_teyvat_abyss_img()
|
# await draw_teyvat_abyss_img()
|
||||||
# await generate_data()
|
# await generate_data()
|
||||||
await save_all_char_info()
|
# await save_all_char_info()
|
||||||
await save_all_abyss_rank()
|
# await save_all_abyss_rank()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(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.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.message_models import Button
|
|
||||||
from gsuid_core.segment import MessageSegment
|
from gsuid_core.segment import MessageSegment
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from .get_ck_help_msg import get_ck_help
|
from .get_ck_help_msg import get_ck_help
|
||||||
from ..utils.message import send_diff_msg
|
from ..utils.message import send_diff_msg
|
||||||
|
from ..utils.message import GButton as Button
|
||||||
|
|
||||||
sv_user_info = SV('用户信息')
|
sv_user_info = SV('用户信息')
|
||||||
sv_user_help = SV('绑定帮助')
|
sv_user_help = SV('绑定帮助')
|
||||||
|
@ -2,7 +2,9 @@ from typing import List
|
|||||||
|
|
||||||
from gsuid_core.models import Message
|
from gsuid_core.models import Message
|
||||||
|
|
||||||
CK_QRCODE_LOGIN = '''先发送【绑定uidxxx】绑定UID,
|
from ..utils.message import PREFIX
|
||||||
|
|
||||||
|
CK_QRCODE_LOGIN = f'''先发送【{PREFIX}绑定uidxxx】绑定UID,
|
||||||
然后发送【扫码登陆】, 使用米游社APP扫码完成绑定, 【[或者]】选择以下方法
|
然后发送【扫码登陆】, 使用米游社APP扫码完成绑定, 【[或者]】选择以下方法
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -115,7 +115,14 @@ async def avatarId2SkillGroupList():
|
|||||||
for skill in skill_data:
|
for skill in skill_data:
|
||||||
if 'proudSkillGroupId' in skill:
|
if 'proudSkillGroupId' in skill:
|
||||||
if skill['abilityName']:
|
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('_')
|
count = skill['abilityName'].count('_')
|
||||||
|
|
||||||
if 'Diluc' in skill['abilityName']:
|
if 'Diluc' in skill['abilityName']:
|
||||||
@ -135,12 +142,18 @@ async def avatarId2SkillGroupList():
|
|||||||
and skill['skillIcon'].count('_') > 2
|
and skill['skillIcon'].count('_') > 2
|
||||||
and 'Catalyst' not in skill['skillIcon']
|
and 'Catalyst' not in skill['skillIcon']
|
||||||
):
|
):
|
||||||
print(_name)
|
|
||||||
print(name)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
else:
|
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(
|
if not skill['skillIcon'].startswith(
|
||||||
('Skill_A', 'Skill_S', 'Skill_E')
|
('Skill_A', 'Skill_S', 'Skill_E')
|
||||||
@ -584,7 +597,7 @@ async def save_char_talent_num():
|
|||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
# await download_new_file()
|
await download_new_file()
|
||||||
await restore_mysData()
|
await restore_mysData()
|
||||||
await restore_hakush_data()
|
await restore_hakush_data()
|
||||||
await monster2map()
|
await monster2map()
|
||||||
|
@ -9,12 +9,12 @@ from PIL import Image
|
|||||||
|
|
||||||
MAP_PATH = Path(__file__).parent.parent / 'utils' / 'map' / 'data'
|
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)
|
enmap: Dict[str, str] = json.load(f)
|
||||||
|
|
||||||
suffix = 'webp'
|
suffix = 'webp'
|
||||||
|
|
||||||
char_list = ['Varesa', 'Iansan']
|
char_list = ['SkirkNew', 'Dahlia']
|
||||||
base = 'https://api.hakush.in/gi/UI'
|
base = 'https://api.hakush.in/gi/UI'
|
||||||
# title = 'https://enka.network/ui/{}'
|
# title = 'https://enka.network/ui/{}'
|
||||||
# hakush = 'https://api.hakush.in/gi/UI/'
|
# hakush = 'https://api.hakush.in/gi/UI/'
|
||||||
|
@ -13,6 +13,7 @@ sys.path.append(str(Path(__file__).parents[5]))
|
|||||||
__package__ = 'GenshinUID.tools'
|
__package__ = 'GenshinUID.tools'
|
||||||
from ..utils.ambr_to_minigg import convert_ambr_to_talent # noqa: E402
|
from ..utils.ambr_to_minigg import convert_ambr_to_talent # noqa: E402
|
||||||
from ..utils.map.GS_MAP_PATH import ( # noqa: E402
|
from ..utils.map.GS_MAP_PATH import ( # noqa: E402
|
||||||
|
load_map,
|
||||||
avatarId2Name,
|
avatarId2Name,
|
||||||
avatarName2Element,
|
avatarName2Element,
|
||||||
)
|
)
|
||||||
@ -329,6 +330,7 @@ def find_tag(labels: List, index: int, char: str, parameters: dict) -> dict:
|
|||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
|
await load_map()
|
||||||
with open(
|
with open(
|
||||||
str(
|
str(
|
||||||
Path(__file__).parents[1]
|
Path(__file__).parents[1]
|
||||||
@ -398,6 +400,7 @@ async def main():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if talent_data is None:
|
if talent_data is None:
|
||||||
|
print('未找到角色天赋')
|
||||||
continue
|
continue
|
||||||
result = {}
|
result = {}
|
||||||
for i in range(1, 4):
|
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'
|
char_detail_url = '/game_record/app/genshin/api/character/detail'
|
||||||
|
|
||||||
calendar_url = '/game_record/app/genshin/api/act_calendar'
|
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 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 _MysApi
|
||||||
from gsuid_core.utils.api.mys.api import RECORD_BASE, RECORD_BASE_OS
|
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 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 .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):
|
class GsMysAPI(_MysApi):
|
||||||
@ -15,6 +21,31 @@ class GsMysAPI(_MysApi):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*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]:
|
async def get_calendar_data(self, uid: str) -> Union[CalendarData, int]:
|
||||||
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
||||||
header = deepcopy(self._HEADER)
|
header = deepcopy(self._HEADER)
|
||||||
@ -56,7 +87,9 @@ class GsMysAPI(_MysApi):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
async def get_poetry_abyss_data(
|
async def get_poetry_abyss_data(
|
||||||
self, uid: str
|
self,
|
||||||
|
uid: str,
|
||||||
|
active: Optional[int] = None,
|
||||||
) -> Union[PoetryAbyssDatas, int]:
|
) -> Union[PoetryAbyssDatas, int]:
|
||||||
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
server_id = self.RECOGNIZE_SERVER.get(uid[0])
|
||||||
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
|
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
|
||||||
@ -70,6 +103,8 @@ class GsMysAPI(_MysApi):
|
|||||||
'role_id': uid,
|
'role_id': uid,
|
||||||
'need_detail': True,
|
'need_detail': True,
|
||||||
}
|
}
|
||||||
|
if active:
|
||||||
|
params['active'] = active
|
||||||
HEADER['DS'] = get_ds_token(
|
HEADER['DS'] = get_ds_token(
|
||||||
'&'.join([f'{k}={v}' for k, v in params.items()])
|
'&'.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('🔍查询探索', '查询探索')
|
a = Button('🔍查询探索', '查询探索')
|
||||||
b = Button('🔍查询收集', '查询收集')
|
b = Button('🔍查询收集', '查询收集')
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, TypedDict
|
from typing import Dict, List, TypedDict
|
||||||
|
|
||||||
|
import aiofiles
|
||||||
from msgspec import json as msgjson
|
from msgspec import json as msgjson
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
from gsuid_core.server import on_core_start
|
||||||
|
|
||||||
from ...version import Genshin_version
|
from ...version import Genshin_version
|
||||||
|
|
||||||
@ -38,89 +40,201 @@ class TS(TypedDict):
|
|||||||
Icon: Dict[str, str]
|
Icon: Dict[str, str]
|
||||||
|
|
||||||
|
|
||||||
try:
|
charList: Dict[str, str] = {}
|
||||||
with open(MAP / charList_fileName, 'r', encoding='UTF-8') as f:
|
weaponList: Dict[str, str] = {}
|
||||||
charList = msgjson.decode(f.read(), type=Dict)
|
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:
|
@on_core_start
|
||||||
avatarId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
async def load_map():
|
||||||
|
logger.info('[GenshinUID MAP] 正在加载资源文件...')
|
||||||
|
|
||||||
with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f:
|
try:
|
||||||
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
artifact2attr = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
name2Icon = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
propId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
Id2PropId = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
weaponHash2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
weaponHash2Type = msgjson.decode(f.read(), type=Dict[str, str])
|
MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8'
|
||||||
|
) as f:
|
||||||
|
propId2Name.update(
|
||||||
|
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||||
|
)
|
||||||
|
|
||||||
with open(
|
async with aiofiles.open(
|
||||||
MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8'
|
MAP / 'Id2propId_mapping.json', 'r', encoding='UTF-8'
|
||||||
) as f:
|
) as f:
|
||||||
artifactId2Piece = msgjson.decode(f.read(), type=Dict[str, List[str]])
|
Id2PropId.update(
|
||||||
|
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||||
|
)
|
||||||
|
|
||||||
with open(MAP / skillId2Name_fileName, 'r', encoding='UTF-8') as f:
|
async with aiofiles.open(
|
||||||
skillId2Name = msgjson.decode(f.read(), type=TS)
|
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:
|
async with aiofiles.open(
|
||||||
talentId2Name = msgjson.decode(f.read(), type=TS)
|
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:
|
async with aiofiles.open(
|
||||||
avatarName2Element = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
avatarName2Weapon = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
alias_data = msgjson.decode(f.read(), type=Dict[str, List[str]])
|
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:
|
async with aiofiles.open(
|
||||||
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
enName_to_avatarId_data = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
ex_monster_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
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:
|
async with aiofiles.open(
|
||||||
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
|
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:
|
async with aiofiles.open(
|
||||||
avatarId2SkillList_data = msgjson.decode(
|
MAP / EXMonster_fileName, 'r', encoding='utf8'
|
||||||
f.read(), type=Dict[str, Dict[str, str]]
|
) 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:
|
async with aiofiles.open(
|
||||||
weaponId2Name_data = msgjson.decode(f.read(), type=Dict[str, str])
|
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:
|
async with aiofiles.open(
|
||||||
mysData = msgjson.decode(f.read(), type=Dict)
|
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:
|
async with aiofiles.open(
|
||||||
CharId2TalentIcon_data = msgjson.decode(
|
MAP / weaponId2Name_fileName, 'r', encoding='utf8'
|
||||||
f.read(), type=Dict[str, List[str]]
|
) as f:
|
||||||
)
|
weaponId2Name_data.update(
|
||||||
except FileNotFoundError:
|
msgjson.decode(await f.read(), type=Dict[str, str])
|
||||||
logger.error('[GenshinUID] 未找到对应版本的映射文件')
|
)
|
||||||
|
|
||||||
|
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": {
|
"10000002": {
|
||||||
"233": "神里流·霰步",
|
"233": "神里流·霰步",
|
||||||
|
"0": "雷主角小技能白盒测试1",
|
||||||
"232": "神里流·冰华",
|
"232": "神里流·冰华",
|
||||||
"239": "神里流·霜灭",
|
"239": "神里流·霜灭",
|
||||||
"231": "普通攻击·神里流·倾"
|
"231": "神里流·倾"
|
||||||
|
},
|
||||||
|
"10000003": {
|
||||||
|
"0": "琴队伍机制",
|
||||||
|
"331": "西风剑术",
|
||||||
|
"332": "风压剑",
|
||||||
|
"339": "蒲公英之风"
|
||||||
},
|
},
|
||||||
"10000021": {
|
"10000021": {
|
||||||
"2139": "箭雨",
|
"2139": "箭雨",
|
||||||
"2132": "爆弹玩偶",
|
"2132": "爆弹玩偶",
|
||||||
"2131": "普通攻击·神射手"
|
"2131": "神射手",
|
||||||
},
|
"0": "菲谢尔小技能"
|
||||||
"10000003": {
|
|
||||||
"331": "普通攻击·西风剑术",
|
|
||||||
"332": "风压剑",
|
|
||||||
"339": "蒲公英之风"
|
|
||||||
},
|
},
|
||||||
"10000006": {
|
"10000006": {
|
||||||
"431": "普通攻击·指尖雷暴",
|
"431": "指尖雷暴",
|
||||||
"432": "苍雷",
|
"432": "苍雷",
|
||||||
"439": "蔷薇的雷光"
|
"439": "蔷薇的雷光"
|
||||||
},
|
},
|
||||||
"10000014": {
|
"10000014": {
|
||||||
"1431": "普通攻击·水之浅唱",
|
"1431": "水之浅唱",
|
||||||
"1432": "演唱,开始♪",
|
"1432": "演唱,开始♪",
|
||||||
"1439": "闪耀奇迹♪"
|
"1439": "闪耀奇迹♪",
|
||||||
|
"0": "Barbara天赋技能"
|
||||||
},
|
},
|
||||||
"10000015": {
|
"10000015": {
|
||||||
"1531": "普通攻击·仪典剑术",
|
"1531": "仪典剑术",
|
||||||
"1532": "霜袭",
|
"1532": "霜袭",
|
||||||
"1539": "凛冽轮舞"
|
"1539": "凛冽轮舞"
|
||||||
},
|
},
|
||||||
"10000016": {
|
"10000016": {
|
||||||
"1631": "普通攻击·淬炼之剑",
|
"1631": "淬炼之剑",
|
||||||
"1632": "逆焰之刃",
|
"1632": "逆焰之刃",
|
||||||
|
"0": "Diluc队伍机制",
|
||||||
"1639": "黎明"
|
"1639": "黎明"
|
||||||
},
|
},
|
||||||
"10000020": {
|
"10000020": {
|
||||||
"2031": "普通攻击·钢脊",
|
"2031": "钢脊",
|
||||||
"2032": "利爪与苍雷",
|
"2032": "利爪与苍雷",
|
||||||
"2039": "雷牙"
|
"2039": "雷牙",
|
||||||
|
"0": "Rx白盒测试技能2"
|
||||||
},
|
},
|
||||||
"10000022": {
|
"10000022": {
|
||||||
"2231": "普通攻击·神代射术",
|
"2231": "神代射术",
|
||||||
|
"0": "温迪长按瞄准",
|
||||||
"2232": "高天之歌",
|
"2232": "高天之歌",
|
||||||
"2239": "风神之诗"
|
"2239": "风神之诗"
|
||||||
},
|
},
|
||||||
"10000023": {
|
"10000023": {
|
||||||
"2331": "普通攻击·白案功夫",
|
"2331": "白案功夫",
|
||||||
"2332": "锅巴出击",
|
"2332": "锅巴出击",
|
||||||
"2339": "旋火轮"
|
"2339": "旋火轮"
|
||||||
},
|
},
|
||||||
"10000024": {
|
"10000024": {
|
||||||
"2431": "普通攻击·征涛",
|
"2431": "征涛",
|
||||||
"2432": "捉浪",
|
"2432": "捉浪",
|
||||||
"2439": "斫雷"
|
"2439": "斫雷",
|
||||||
|
"0": "菲谢尔充能技"
|
||||||
},
|
},
|
||||||
"10000026": {
|
"10000026": {
|
||||||
"2631": "普通攻击·卷积微尘",
|
"2631": "卷积微尘",
|
||||||
"2632": "风轮两立",
|
"2632": "风轮两立",
|
||||||
|
"0": "魈冲抓(空中)",
|
||||||
"2639": "靖妖傩舞"
|
"2639": "靖妖傩舞"
|
||||||
},
|
},
|
||||||
"10000027": {
|
"10000027": {
|
||||||
"2731": "普通攻击·千金掷",
|
"2731": "千金掷",
|
||||||
"2732": "璇玑屏",
|
"2732": "璇玑屏",
|
||||||
|
"0": "凝光小技能替换技能",
|
||||||
"2739": "天权崩玉"
|
"2739": "天权崩玉"
|
||||||
},
|
},
|
||||||
"10000029": {
|
"10000029": {
|
||||||
"2931": "普通攻击·砰砰",
|
"2931": "砰砰",
|
||||||
"2932": "蹦蹦炸弹",
|
"2932": "蹦蹦炸弹",
|
||||||
"2939": "轰轰火花"
|
"2939": "轰轰火花"
|
||||||
},
|
},
|
||||||
"10000030": {
|
"10000030": {
|
||||||
"3031": "普通攻击·岩雨",
|
"3031": "岩雨",
|
||||||
"3032": "地心",
|
"3032": "地心",
|
||||||
"3039": "天星"
|
"3039": "天星"
|
||||||
},
|
},
|
||||||
"10000031": {
|
"10000031": {
|
||||||
"3131": "普通攻击·罪灭之矢",
|
"3131": "罪灭之矢",
|
||||||
"3132": "夜巡影翼",
|
"3132": "夜巡影翼",
|
||||||
"3139": "至夜幻现"
|
"3139": "至夜幻现",
|
||||||
|
"0": "菲谢尔小技能-重置乌鸦位置"
|
||||||
},
|
},
|
||||||
"10000032": {
|
"10000032": {
|
||||||
"3231": "普通攻击·好运剑",
|
"3231": "好运剑",
|
||||||
"3232": "热情过载",
|
"3232": "热情过载",
|
||||||
"3239": "美妙旅程"
|
"3239": "美妙旅程"
|
||||||
},
|
},
|
||||||
"10000033": {
|
"10000033": {
|
||||||
"3331": "普通攻击·断雨",
|
"3331": "断雨",
|
||||||
"3332": "魔王武装·狂澜",
|
"3332": "魔王武装·狂澜",
|
||||||
"3339": "极恶技·尽灭闪"
|
"3339": "极恶技·尽灭闪",
|
||||||
|
"0": "达达利亚近战姿态普攻"
|
||||||
},
|
},
|
||||||
"10000034": {
|
"10000034": {
|
||||||
"3431": "普通攻击·西风剑术·女仆",
|
"3431": "西风剑术·女仆",
|
||||||
"3432": "护心铠",
|
"3432": "护心铠",
|
||||||
"3439": "大扫除"
|
"3439": "大扫除"
|
||||||
},
|
},
|
||||||
"10000035": {
|
"10000035": {
|
||||||
"3531": "普通攻击·云来古剑法",
|
"3531": "云来古剑法",
|
||||||
"3532": "仙法·寒病鬼差",
|
"3532": "仙法·寒病鬼差",
|
||||||
"3539": "仙法·救苦度厄"
|
"3539": "仙法·救苦度厄",
|
||||||
|
"0": "七七复活技能"
|
||||||
},
|
},
|
||||||
"10000037": {
|
"10000037": {
|
||||||
"3731": "普通攻击·流天射术",
|
"3731": "流天射术",
|
||||||
"3732": "山泽麟迹",
|
"3732": "山泽麟迹",
|
||||||
"3739": "降众天华"
|
"3739": "降众天华",
|
||||||
|
"0": "柯莱瞄准模式"
|
||||||
},
|
},
|
||||||
"10000025": {
|
"10000025": {
|
||||||
"2531": "普通攻击·古华剑法",
|
"2531": "古华剑法",
|
||||||
"2532": "古华剑·画雨笼山",
|
"2532": "古华剑·画雨笼山",
|
||||||
"2539": "古华剑·裁雨留虹"
|
"2539": "古华剑·裁雨留虹"
|
||||||
},
|
},
|
||||||
"10000038": {
|
"10000038": {
|
||||||
"3831": "普通攻击·西风剑术·白",
|
"3831": "西风剑术·白",
|
||||||
"3832": "创生法·拟造阳华",
|
"3832": "创生法·拟造阳华",
|
||||||
"3839": "诞生式·大地之潮"
|
"3839": "诞生式·大地之潮"
|
||||||
},
|
},
|
||||||
"10000039": {
|
"10000039": {
|
||||||
"3931": "普通攻击·猎人射术",
|
"3931": "猎人射术",
|
||||||
"3932": "猫爪冻冻",
|
"3932": "猫爪冻冻",
|
||||||
|
"0": "迪奥娜长按瞄准",
|
||||||
"3939": "最烈特调"
|
"3939": "最烈特调"
|
||||||
},
|
},
|
||||||
"10000041": {
|
"10000041": {
|
||||||
"4131": "普通攻击·因果点破",
|
"4131": "因果点破",
|
||||||
"4132": "水中幻愿",
|
"4132": "水中幻愿",
|
||||||
"4133": "虚实流动",
|
"4133": "虚实流动",
|
||||||
"4139": "星命定轨"
|
"4139": "星命定轨"
|
||||||
},
|
},
|
||||||
"10000042": {
|
"10000042": {
|
||||||
"4231": "普通攻击·云来剑法",
|
"4231": "云来剑法",
|
||||||
"4232": "星斗归位",
|
"4232": "星斗归位",
|
||||||
|
"0": "星斗归位",
|
||||||
"4239": "天街巡游"
|
"4239": "天街巡游"
|
||||||
},
|
},
|
||||||
"10000043": {
|
"10000043": {
|
||||||
"4331": "普通攻击·简式风灵作成",
|
"4331": "简式风灵作成",
|
||||||
"4332": "风灵作成·陆叁零捌",
|
"4332": "风灵作成·陆叁零捌",
|
||||||
|
"0": "砂糖空中跳跃(伪)",
|
||||||
"4339": "禁·风灵作成·柒伍同构贰型"
|
"4339": "禁·风灵作成·柒伍同构贰型"
|
||||||
},
|
},
|
||||||
"10000044": {
|
"10000044": {
|
||||||
"4431": "普通攻击·炎舞",
|
"4431": "炎舞",
|
||||||
"4432": "热情拂扫",
|
"4432": "热情拂扫",
|
||||||
"4439": "叛逆刮弦"
|
"4439": "叛逆刮弦"
|
||||||
},
|
},
|
||||||
"10000045": {
|
"10000045": {
|
||||||
"4531": "普通攻击·教会枪术",
|
"4531": "教会枪术",
|
||||||
"4532": "噬罪的告解",
|
"4532": "噬罪的告解",
|
||||||
"4539": "终命的圣礼"
|
"4539": "终命的圣礼"
|
||||||
},
|
},
|
||||||
"10000046": {
|
"10000046": {
|
||||||
"4631": "普通攻击·往生秘传枪法",
|
"4631": "往生秘传枪法",
|
||||||
"4632": "蝶引来生",
|
"4632": "蝶引来生",
|
||||||
"4639": "安神秘法"
|
"4639": "安神秘法"
|
||||||
},
|
},
|
||||||
"10000047": {
|
"10000047": {
|
||||||
"4731": "普通攻击·我流剑术",
|
"4731": "我流剑术",
|
||||||
"4732": "千早振",
|
"4732": "千早振",
|
||||||
|
"0": "下落攻击·乱岚拨止",
|
||||||
"4739": "万叶之一刀"
|
"4739": "万叶之一刀"
|
||||||
},
|
},
|
||||||
"10000048": {
|
"10000048": {
|
||||||
"4831": "普通攻击·火漆制印",
|
"4831": "火漆制印",
|
||||||
"4832": "丹书立约",
|
"4832": "丹书立约",
|
||||||
"4839": "凭此结契"
|
"4839": "凭此结契"
|
||||||
},
|
},
|
||||||
"10000049": {
|
"10000049": {
|
||||||
"4931": "普通攻击·烟火打扬",
|
"4931": "烟火打扬",
|
||||||
"4932": "焰硝庭火舞",
|
"4932": "焰硝庭火舞",
|
||||||
|
"0": "宵宫长按瞄准/瞄准模式",
|
||||||
"4939": "琉金云间草"
|
"4939": "琉金云间草"
|
||||||
},
|
},
|
||||||
"10000050": {
|
"10000050": {
|
||||||
"5031": "普通攻击·迅破枪势",
|
"5031": "迅破枪势",
|
||||||
"5032": "烈烧佑命之侍护",
|
"5032": "烈烧佑命之侍护",
|
||||||
"5039": "真红炽火之大铠"
|
"5039": "真红炽火之大铠"
|
||||||
},
|
},
|
||||||
"10000051": {
|
"10000051": {
|
||||||
"5131": "普通攻击·西风剑术·宗室",
|
"5131": "西风剑术·宗室",
|
||||||
"5132": "冰潮的涡旋",
|
"5132": "冰潮的涡旋",
|
||||||
"5139": "凝浪之光剑"
|
"5139": "凝浪之光剑"
|
||||||
},
|
},
|
||||||
"10000052": {
|
"10000052": {
|
||||||
"5231": "普通攻击·源流",
|
"5231": "源流",
|
||||||
"5232": "神变·恶曜开眼",
|
"5232": "神变·恶曜开眼",
|
||||||
"5239": "奥义·梦想真说"
|
"5239": "奥义·梦想真说"
|
||||||
},
|
},
|
||||||
"10000053": {
|
"10000053": {
|
||||||
"5331": "普通攻击·忍刀·终末番",
|
"5331": "忍刀·终末番",
|
||||||
"5332": "呜呼流·风隐急进",
|
"5332": "呜呼流·风隐急进",
|
||||||
|
"0": "呜呼流·风隐急进",
|
||||||
"5339": "呜呼流·影貉缭乱"
|
"5339": "呜呼流·影貉缭乱"
|
||||||
},
|
},
|
||||||
"10000054": {
|
"10000054": {
|
||||||
"5431": "普通攻击·水有常形",
|
"5431": "水有常形",
|
||||||
"5432": "海月之誓",
|
"5432": "海月之誓",
|
||||||
"5439": "海人化羽"
|
"5439": "海人化羽"
|
||||||
},
|
},
|
||||||
"10000055": {
|
"10000055": {
|
||||||
"5531": "普通攻击·呲牙裂扇箭",
|
"5531": "呲牙裂扇箭",
|
||||||
"5532": "犬坂吠吠方圆阵",
|
"5532": "犬坂吠吠方圆阵",
|
||||||
|
"0": "五郎长按瞄准",
|
||||||
"5539": "兽牙逐突形胜战法"
|
"5539": "兽牙逐突形胜战法"
|
||||||
},
|
},
|
||||||
"10000056": {
|
"10000056": {
|
||||||
"5631": "普通攻击·天狗传弓术",
|
"5631": "天狗传弓术",
|
||||||
"5632": "鸦羽天狗霆雷召咒",
|
"5632": "鸦羽天狗霆雷召咒",
|
||||||
|
"0": "九条裟罗长按瞄准",
|
||||||
"5639": "煌煌千道镇式"
|
"5639": "煌煌千道镇式"
|
||||||
},
|
},
|
||||||
"10000057": {
|
"10000057": {
|
||||||
"5731": "普通攻击· 喧哗屋传说",
|
"5731": "喧哗屋传说",
|
||||||
"5732": "魔杀绝技·赤牛发破!",
|
"5732": "魔杀绝技·赤牛发破!",
|
||||||
"5739": "最恶鬼王·一斗轰临!!"
|
"5739": "最恶鬼王·一斗轰临!!"
|
||||||
},
|
},
|
||||||
"10000058": {
|
"10000058": {
|
||||||
"5831": "普通攻击·狐灵食罪式",
|
"5831": "狐灵食罪式",
|
||||||
"5832": "野干役咒·杀生樱",
|
"5832": "野干役咒·杀生樱",
|
||||||
"5839": "大密法·天狐显真"
|
"5839": "大密法·天狐显真"
|
||||||
},
|
},
|
||||||
"10000059": {
|
"10000059": {
|
||||||
"5931": "普通攻击·不动流格斗术",
|
"5931": "不动流格斗术",
|
||||||
"5932": "勠心拳",
|
"5932": "勠心拳",
|
||||||
"5939": "聚风蹴"
|
"5939": "聚风蹴"
|
||||||
},
|
},
|
||||||
"10000060": {
|
"10000060": {
|
||||||
"6031": "普通攻击·潜形隐曜弓",
|
"6031": "潜形隐曜弓",
|
||||||
"6032": "萦络纵命索",
|
"6032": "萦络纵命索",
|
||||||
|
"0": "夜兰-元素战技",
|
||||||
"6039": "渊图玲珑骰"
|
"6039": "渊图玲珑骰"
|
||||||
},
|
},
|
||||||
"10000061": {
|
"10000061": {
|
||||||
"6131": "普通攻击·箱纸切削术",
|
"6131": "箱纸切削术",
|
||||||
"6132": "呜喵町飞足",
|
"6132": "呜喵町飞足",
|
||||||
|
"0": "测试占位",
|
||||||
"6139": "秘法·惊喜特派"
|
"6139": "秘法·惊喜特派"
|
||||||
},
|
},
|
||||||
"10000062": {
|
"10000062": {
|
||||||
"6231": "普通攻击·快速射击",
|
"6231": "快速射击",
|
||||||
"6232": "冰尘雪野",
|
"6232": "冰尘雪野",
|
||||||
|
"0": "埃洛伊瞄准射击",
|
||||||
"6239": "曙光预言"
|
"6239": "曙光预言"
|
||||||
},
|
},
|
||||||
"10000063": {
|
"10000063": {
|
||||||
"6331": "普通攻击·踏辰摄斗",
|
"6331": "踏辰摄斗",
|
||||||
"6332": "仰灵威召将役咒",
|
"6332": "仰灵威召将役咒",
|
||||||
"6339": "神女遣灵真诀"
|
"6339": "神女遣灵真诀"
|
||||||
},
|
},
|
||||||
"10000064": {
|
"10000064": {
|
||||||
"6431": "普通攻击·拂云出手",
|
"6431": "拂云出手",
|
||||||
"6432": "旋云开相",
|
"6432": "旋云开相",
|
||||||
"6439": "破嶂见旌仪"
|
"6439": "破嶂见旌仪"
|
||||||
},
|
},
|
||||||
"10000065": {
|
"10000065": {
|
||||||
"6531": "普通攻击·忍流飞刃斩",
|
"6531": "忍流飞刃斩",
|
||||||
"6532": "越祓雷草之轮",
|
"6532": "越祓雷草之轮",
|
||||||
"6539": "御咏鸣神刈山祭"
|
"6539": "御咏鸣神刈山祭"
|
||||||
},
|
},
|
||||||
"10000066": {
|
"10000066": {
|
||||||
"6631": "普通攻击·神里流·转",
|
"6631": "神里流·转",
|
||||||
"6632": "神里流·镜花",
|
"6632": "神里流·镜花",
|
||||||
"6639": "神里流·水囿"
|
"6639": "神里流·水囿"
|
||||||
},
|
},
|
||||||
"10000067": {
|
"10000067": {
|
||||||
"6731": "普通攻击·祈颂射艺",
|
"6731": "祈颂射艺",
|
||||||
"6732": "拂花偈叶",
|
"6732": "拂花偈叶",
|
||||||
"6739": "猫猫秘宝"
|
"6739": "猫猫秘宝"
|
||||||
},
|
},
|
||||||
"10000068": {
|
"10000068": {
|
||||||
"6831": "普通攻击·妙显剑舞·改",
|
"6831": "妙显剑舞·改",
|
||||||
"6832": "镇灵之灯·烦恼解决炮",
|
"6832": "镇灵之灯·烦恼解决炮",
|
||||||
"6839": "卡萨扎莱宫的无微不至"
|
"6839": "卡萨扎莱宫的无微不至"
|
||||||
},
|
},
|
||||||
"10000069": {
|
"10000069": {
|
||||||
"6931": "普通攻击·藏蕴破障",
|
"6931": "藏蕴破障",
|
||||||
"6932": "识果种雷",
|
"6932": "识果种雷",
|
||||||
|
"0": "提纳里长按/瞄准模式",
|
||||||
"6939": "造生缠藤箭"
|
"6939": "造生缠藤箭"
|
||||||
},
|
},
|
||||||
"10000070": {
|
"10000070": {
|
||||||
"7031": "普通攻击·弦月舞步",
|
"7031": "弦月舞步",
|
||||||
"7032": "七域舞步",
|
"7032": "七域舞步",
|
||||||
|
"0": "妮露元素战技1命六用",
|
||||||
"7039": "浮莲舞步·远梦聆泉"
|
"7039": "浮莲舞步·远梦聆泉"
|
||||||
},
|
},
|
||||||
"10000071": {
|
"10000071": {
|
||||||
"7131": "普通攻击·七圣枪术",
|
"7131": "七圣枪术",
|
||||||
"7132": "秘仪·律渊渡魂",
|
"7132": "秘仪·律渊渡魂",
|
||||||
|
"0": "赛诺元素战技开大后",
|
||||||
"7139": "圣仪·煟煌随狼行"
|
"7139": "圣仪·煟煌随狼行"
|
||||||
},
|
},
|
||||||
"10000072": {
|
"10000072": {
|
||||||
"7231": "普通攻击·流耀枪术·守势",
|
"7231": "流耀枪术·守势",
|
||||||
"7232": "圣仪·苍鹭庇卫",
|
"7232": "圣仪·苍鹭庇卫",
|
||||||
"7239": "圣仪·灰鸰衒潮"
|
"7239": "圣仪·灰鸰衒潮"
|
||||||
},
|
},
|
||||||
"10000073": {
|
"10000073": {
|
||||||
"7331": "普通攻击·行相",
|
"7331": "行相",
|
||||||
"7332": "所闻遍计",
|
"7332": "所闻遍计",
|
||||||
"7339": "心景幻成"
|
"7339": "心景幻成"
|
||||||
},
|
},
|
||||||
"10000074": {
|
"10000074": {
|
||||||
"7431": "普通攻击·熠辉轨度剑",
|
"7431": "熠辉轨度剑",
|
||||||
"7432": "垂裳端凝之夜",
|
"7432": "垂裳端凝之夜",
|
||||||
"7439": "星流摇床之梦"
|
"7439": "星流摇床之梦"
|
||||||
},
|
},
|
||||||
"10000075": {
|
"10000075": {
|
||||||
"7531": "普通攻击·行幡鸣弦",
|
"7531": "行幡鸣弦",
|
||||||
"7532": "羽画·风姿华歌",
|
"7532": "羽画·风姿华歌",
|
||||||
|
"0": "流浪者元素战技",
|
||||||
"7539": "狂言·式乐五番"
|
"7539": "狂言·式乐五番"
|
||||||
},
|
},
|
||||||
"10000076": {
|
"10000076": {
|
||||||
"7631": "普通攻击·迴身箭术",
|
"7631": "迴身箭术",
|
||||||
"7632": "非想风天",
|
"7632": "非想风天",
|
||||||
|
"0": "珐露珊长按/瞄准模式",
|
||||||
"7639": "抟风秘道"
|
"7639": "抟风秘道"
|
||||||
},
|
},
|
||||||
"10000077": {
|
"10000077": {
|
||||||
"7731": "普通攻击·颠扑连环枪",
|
"7731": "颠扑连环枪",
|
||||||
"7732": "云台团团降芦菔",
|
"7732": "云台团团降芦菔",
|
||||||
"7739": "玉颗珊珊月中落"
|
"7739": "玉颗珊珊月中落"
|
||||||
},
|
},
|
||||||
"10000078": {
|
"10000078": {
|
||||||
"7831": "普通攻击·溯因反绎法",
|
"7831": "溯因反绎法",
|
||||||
"7832": "共相·理式摹写",
|
"7832": "共相·理式摹写",
|
||||||
"7839": "殊境·显象缚结"
|
"7839": "殊境·显象缚结"
|
||||||
},
|
},
|
||||||
"10000079": {
|
"10000079": {
|
||||||
"7931": "普通攻击·拂金剑斗术",
|
"7931": "拂金剑斗术",
|
||||||
"7932": "熔铁流狱",
|
"7932": "熔铁流狱",
|
||||||
|
"0": "迪希雅元素爆发_QTE",
|
||||||
"7939": "炎啸狮子咬"
|
"7939": "炎啸狮子咬"
|
||||||
},
|
},
|
||||||
"10000080": {
|
"10000080": {
|
||||||
"8031": "普通攻击·西风枪术·镝传",
|
"8031": "西风枪术·镝传",
|
||||||
"8032": "星霜的流旋",
|
"8032": "星霜的流旋",
|
||||||
"8039": "苍翎的颂愿"
|
"8039": "苍翎的颂愿"
|
||||||
},
|
},
|
||||||
"10000081": {
|
"10000081": {
|
||||||
"8131": "普通攻击·旋规设矩",
|
"8131": "旋规设矩",
|
||||||
"8132": "画则巧施",
|
"8132": "画则巧施",
|
||||||
"8139": "繁绘隅穹"
|
"8139": "繁绘隅穹"
|
||||||
},
|
},
|
||||||
"10000082": {
|
"10000082": {
|
||||||
"8231": "普通攻击·金匮针解",
|
"8231": "金匮针解",
|
||||||
"8232": "太素诊要",
|
"8232": "太素诊要",
|
||||||
"8239": "愈气全形论"
|
"8239": "愈气全形论"
|
||||||
},
|
},
|
||||||
"10000083": {
|
"10000083": {
|
||||||
"8331": "普通攻击·迅捷礼刺剑",
|
"8331": "迅捷礼刺剑",
|
||||||
"8332": "谜影障身法",
|
"8332": "谜影障身法",
|
||||||
|
"0": "琳妮特元素战技",
|
||||||
"8339": "魔术·运变惊奇"
|
"8339": "魔术·运变惊奇"
|
||||||
},
|
},
|
||||||
"10000084": {
|
"10000084": {
|
||||||
"8431": "普通攻击·迫牌易位式",
|
"8431": "迫牌易位式",
|
||||||
"8432": "眩惑光戏法",
|
"8432": "眩惑光戏法",
|
||||||
|
"0": "林尼瞄准射击",
|
||||||
"8439": "大魔术·灵迹巡游"
|
"8439": "大魔术·灵迹巡游"
|
||||||
},
|
},
|
||||||
"10000085": {
|
"10000085": {
|
||||||
"8531": "普通攻击·洑流剑",
|
"8531": "洑流剑",
|
||||||
"8532": "浮冰增压",
|
"8532": "浮冰增压",
|
||||||
|
"0": "菲米尼浮冰增压3段(E3)",
|
||||||
"8539": "猎影潜袭"
|
"8539": "猎影潜袭"
|
||||||
},
|
},
|
||||||
"10000086": {
|
"10000086": {
|
||||||
"8631": "普通攻击·迅烈倾霜拳",
|
"8631": "迅烈倾霜拳",
|
||||||
"8632": "冰牙突驰",
|
"8632": "冰牙突驰",
|
||||||
"8639": "黑金狼噬"
|
"8639": "黑金狼噬"
|
||||||
},
|
},
|
||||||
"10000087": {
|
"10000087": {
|
||||||
"8731": "普通攻击·如水从平",
|
"8731": "如水从平",
|
||||||
"8732": "泪水啊,我必偿还",
|
"8732": "泪水啊,我必偿还",
|
||||||
"8739": "潮水啊,我已归来"
|
"8739": "潮水啊,我已归来"
|
||||||
},
|
},
|
||||||
"10000088": {
|
"10000088": {
|
||||||
"8831": "普通攻击·冷色摄影律",
|
"8831": "冷色摄影律",
|
||||||
"8832": "取景·冰点构图法",
|
"8832": "取景·冰点构图法",
|
||||||
"8839": "定格·全方位确证"
|
"8839": "定格·全方位确证"
|
||||||
},
|
},
|
||||||
"10000089": {
|
"10000089": {
|
||||||
"8931": "普通攻击·独舞之邀",
|
"8931": "独舞之邀",
|
||||||
"8932": "孤心沙龙",
|
"8932": "孤心沙龙",
|
||||||
|
"0": "芙宁娜元素战技-芒",
|
||||||
"8939": "万众狂欢"
|
"8939": "万众狂欢"
|
||||||
},
|
},
|
||||||
"10000090": {
|
"10000090": {
|
||||||
"9031": "普通攻击·线列枪刺·改",
|
"9031": "线列枪刺·改",
|
||||||
"9032": "近迫式急促拦射",
|
"9032": "近迫式急促拦射",
|
||||||
"9039": "圆阵掷弹爆轰术"
|
"9039": "圆阵掷弹爆轰术"
|
||||||
},
|
},
|
||||||
"10000091": {
|
"10000091": {
|
||||||
"9131": "普通攻击·直率的辞绝",
|
"9131": "直率的辞绝",
|
||||||
"9132": "典仪式晶火",
|
"9132": "典仪式晶火",
|
||||||
"9139": "如霰澄天的鸣礼"
|
"9139": "如霰澄天的鸣礼"
|
||||||
},
|
},
|
||||||
"10000092": {
|
"10000092": {
|
||||||
"9231": "普通攻击·刃爪悬星",
|
"9231": "刃爪悬星",
|
||||||
"9232": "瑞兽登高楼",
|
"9232": "瑞兽登高楼",
|
||||||
|
"0": "嘉明元素战技.下落攻击",
|
||||||
"9239": "璨焰金猊舞"
|
"9239": "璨焰金猊舞"
|
||||||
},
|
},
|
||||||
"10000093": {
|
"10000093": {
|
||||||
"9331": "普通攻击·清风散花词",
|
"9331": "清风散花词",
|
||||||
"9332": "朝起鹤云",
|
"9332": "朝起鹤云",
|
||||||
|
"0": "留云元素战技_鹤形追击",
|
||||||
"9339": "暮集竹星"
|
"9339": "暮集竹星"
|
||||||
},
|
},
|
||||||
"10000094": {
|
"10000094": {
|
||||||
"9431": "普通攻击·心织刀流",
|
"9431": "心织刀流",
|
||||||
"9432": "羽袖一触",
|
"9432": "羽袖一触",
|
||||||
|
"0": "千织二段E后-技能替换",
|
||||||
"9439": "二刀之形·比翼"
|
"9439": "二刀之形·比翼"
|
||||||
},
|
},
|
||||||
"10000095": {
|
"10000095": {
|
||||||
"9531": "普通攻击·靶向治疗",
|
"9531": "靶向治疗",
|
||||||
"9532": "弹跳水疗法",
|
"9532": "弹跳水疗法",
|
||||||
|
"0": "希格雯长按瞄准",
|
||||||
"9539": "过饱和心意注射"
|
"9539": "过饱和心意注射"
|
||||||
},
|
},
|
||||||
"10000096": {
|
"10000096": {
|
||||||
"9631": "普通攻击·斩首之邀",
|
"9631": "斩首之邀",
|
||||||
"9632": "万相化灰",
|
"9632": "万相化灰",
|
||||||
|
"0": "元素战技替换技能",
|
||||||
"9639": "厄月将升"
|
"9639": "厄月将升"
|
||||||
},
|
},
|
||||||
"10000097": {
|
"10000097": {
|
||||||
"9731": "普通攻击·王家苇箭术",
|
"9731": "王家苇箭术",
|
||||||
"9732": "古仪·鸣砂掣雷",
|
"9732": "古仪·鸣砂掣雷",
|
||||||
|
"0": "赛索斯瞄准射击",
|
||||||
"9739": "秘仪·瞑光贯影"
|
"9739": "秘仪·瞑光贯影"
|
||||||
},
|
},
|
||||||
"10000098": {
|
"10000098": {
|
||||||
"9831": "普通攻击·逐影之誓",
|
"9831": "逐影之誓",
|
||||||
"9832": "狩夜之巡",
|
"9832": "狩夜之巡",
|
||||||
|
"0": "克洛琳德元素战技-闪避",
|
||||||
"9839": "残光将终"
|
"9839": "残光将终"
|
||||||
},
|
},
|
||||||
"10000099": {
|
"10000099": {
|
||||||
"9931": "普通攻击·逐影枪术·改",
|
"9931": "逐影枪术·改",
|
||||||
"9932": "撷萃调香",
|
"9932": "撷萃调香",
|
||||||
"9939": "香氛演绎"
|
"9939": "香氛演绎"
|
||||||
},
|
},
|
||||||
"10000100": {
|
"10000100": {
|
||||||
"10031": "普通攻击·嵴之啮咬",
|
"10031": "嵴之啮咬",
|
||||||
"10032": "出击,冲天转转!",
|
"10032": "出击,冲天转转!",
|
||||||
|
"0": "卡齐娜夜魂接力技",
|
||||||
"10039": "现在,认真时间!"
|
"10039": "现在,认真时间!"
|
||||||
},
|
},
|
||||||
"10000101": {
|
"10000101": {
|
||||||
"10131": "普通攻击·夜阳斗技",
|
"10131": "夜阳斗技",
|
||||||
"10132": "悬猎·游骋高狩",
|
"10132": "悬猎·游骋高狩",
|
||||||
|
"0": "基尼奇空中喷射",
|
||||||
"10139": "向伟大圣龙致意"
|
"10139": "向伟大圣龙致意"
|
||||||
},
|
},
|
||||||
"10000103": {
|
"10000103": {
|
||||||
"10331": "普通攻击·锐锋攫猎",
|
"10331": "锐锋攫猎",
|
||||||
"10332": "音火锻淬",
|
"10332": "音火锻淬",
|
||||||
"10339": "豹烈律动!"
|
"10339": "豹烈律动!",
|
||||||
|
"0": "希诺宁-夜魂接力技"
|
||||||
},
|
},
|
||||||
"10000104": {
|
"10000104": {
|
||||||
"10431": "普通攻击·迷羽流击",
|
"10431": "迷羽流击",
|
||||||
"10432": "灵缰追影",
|
"10432": "灵缰追影",
|
||||||
|
"0": "恰斯卡浮空冲刺",
|
||||||
"10439": "索魂命袭"
|
"10439": "索魂命袭"
|
||||||
},
|
},
|
||||||
"10000106": {
|
"10000106": {
|
||||||
"10631": "普通攻击·以火织命",
|
"10631": "以火织命",
|
||||||
"10632": "称名之刻",
|
"10632": "称名之刻",
|
||||||
|
"0": "玛薇卡空中攻击",
|
||||||
"10639": "燔天之时"
|
"10639": "燔天之时"
|
||||||
},
|
},
|
||||||
"10000107": {
|
"10000107": {
|
||||||
"10731": "普通攻击·宿灵捕影",
|
"10731": "宿灵捕影",
|
||||||
"10732": "霜昼黑星",
|
"10732": "霜昼黑星",
|
||||||
|
"0": "茜特菈莉特殊跳跃",
|
||||||
"10739": "诸曜饬令"
|
"10739": "诸曜饬令"
|
||||||
},
|
},
|
||||||
"10000108": {
|
"10000108": {
|
||||||
"10831": "普通攻击·玄鸾画水",
|
"10831": "玄鸾画水",
|
||||||
"10832": "凤缕随翦舞",
|
"10832": "凤缕随翦舞",
|
||||||
|
"0": "蓝砚元素战技替换",
|
||||||
"10839": "鹍弦踏月出"
|
"10839": "鹍弦踏月出"
|
||||||
},
|
},
|
||||||
"10000109": {
|
"10000109": {
|
||||||
"10931": "普通攻击·梦我梦心",
|
"10931": "梦我梦心",
|
||||||
"10932": "秋沙歌枕巡礼",
|
"10932": "秋沙歌枕巡礼",
|
||||||
|
"0": "梦见月浮游受身",
|
||||||
"10939": "安乐秘汤疗法"
|
"10939": "安乐秘汤疗法"
|
||||||
},
|
},
|
||||||
"10000110": {
|
"10000110": {
|
||||||
"11031": "普通攻击·负重锥击",
|
"11031": "负重锥击",
|
||||||
"11032": "电掣雷驰",
|
"11032": "电掣雷驰",
|
||||||
|
"0": "伊安珊夜魂态冲刺,仅换图标用",
|
||||||
"11039": "力的三原理"
|
"11039": "力的三原理"
|
||||||
},
|
},
|
||||||
"10000111": {
|
"10000111": {
|
||||||
"11131": "普通攻击·角力搏摔",
|
"11131": "角力搏摔",
|
||||||
"11132": "夜虹逐跃",
|
"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": {
|
"10000102": {
|
||||||
"10231": "普通攻击·降温处理",
|
"10231": "降温处理",
|
||||||
"10232": "踏鲨破浪",
|
"10232": "踏鲨破浪",
|
||||||
|
"0": "游猎S弧光空中攻击技",
|
||||||
"10239": "爆瀑飞弹"
|
"10239": "爆瀑飞弹"
|
||||||
},
|
},
|
||||||
"10000105": {
|
"10000105": {
|
||||||
"10531": "普通攻击·宿灵闪箭",
|
"10531": "宿灵闪箭",
|
||||||
"10532": "暝色缒索",
|
"10532": "暝色缒索",
|
||||||
|
"0": "特殊跳跃",
|
||||||
"10539": "黯声回响"
|
"10539": "黯声回响"
|
||||||
},
|
},
|
||||||
"10000036": {
|
"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",
|
"route": "Secret Source Automaton: Configuration Device",
|
||||||
"icon": "UI_MonsterIcon_DragonClaw"
|
"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": {
|
"25010201": {
|
||||||
"id": 25010201,
|
"id": 25010201,
|
||||||
"type": "MONSTER_ORDINARY",
|
"type": "MONSTER_ORDINARY",
|
||||||
@ -59867,5 +60016,43 @@
|
|||||||
"name": "蚀灭的源焰之主",
|
"name": "蚀灭的源焰之主",
|
||||||
"route": "Lord of Eroded Primal Fire",
|
"route": "Lord of Eroded Primal Fire",
|
||||||
"icon": "UI_MonsterIcon_TheAbyssXiuhcoatl"
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
1
GenshinUID/utils/map/data/mysData_5.7.0.json
Normal file
@ -50,6 +50,7 @@
|
|||||||
"11514": "有乐御簾切",
|
"11514": "有乐御簾切",
|
||||||
"11515": "赦罪",
|
"11515": "赦罪",
|
||||||
"11516": "岩峰巡歌",
|
"11516": "岩峰巡歌",
|
||||||
|
"11517": "苍耀",
|
||||||
"12101": "训练大剑",
|
"12101": "训练大剑",
|
||||||
"12201": "佣兵重剑",
|
"12201": "佣兵重剑",
|
||||||
"12301": "铁影阔剑",
|
"12301": "铁影阔剑",
|
||||||
@ -126,6 +127,7 @@
|
|||||||
"13511": "赤沙之杖",
|
"13511": "赤沙之杖",
|
||||||
"13512": "赤月之形",
|
"13512": "赤月之形",
|
||||||
"13513": "柔灯挽歌",
|
"13513": "柔灯挽歌",
|
||||||
|
"13514": "香韵奏者",
|
||||||
"14101": "学徒笔记",
|
"14101": "学徒笔记",
|
||||||
"14201": "口袋魔导书",
|
"14201": "口袋魔导书",
|
||||||
"14301": "魔导绪论",
|
"14301": "魔导绪论",
|
||||||
@ -204,6 +206,7 @@
|
|||||||
"15427": "测距规",
|
"15427": "测距规",
|
||||||
"15430": "缀花之翎",
|
"15430": "缀花之翎",
|
||||||
"15431": "碎链",
|
"15431": "碎链",
|
||||||
|
"15432": "冷寂迸音",
|
||||||
"15501": "天空之翼",
|
"15501": "天空之翼",
|
||||||
"15502": "阿莫斯之弓",
|
"15502": "阿莫斯之弓",
|
||||||
"15503": "终末嗟叹之诗",
|
"15503": "终末嗟叹之诗",
|