22 Commits

Author SHA1 Message Date
2d041b3c70 🐛 修复日期问题 2025-07-01 10:32:22 +08:00
0a50c1bcb9 🐛 修复BUG 2025-07-01 10:29:47 +08:00
9f9eac5a7f 支持查询上期新深渊 2025-07-01 10:21:58 +08:00
e5da44ced1 🍱 更新map 2025-06-27 17:51:26 +08:00
c8909416ad 🎨 肃靖险乱命令更改为幽境危战, 并修复BUG (#688) 2025-06-27 17:46:22 +08:00
80301fa807 初步完成查询肃靖险乱 (新新深渊) 2025-06-26 05:20:56 +08:00
af2d0be884 🍱 更新5.7.0版本数据 2025-06-18 12:58:43 +08:00
e58c4bd6ae 🍱 更新部分资料 2025-06-08 05:56:11 +08:00
0efe113164 🎨 添加梦见月瑞希的up时间 (#685) 2025-05-30 21:06:14 +08:00
6063eb56f9 🐛 修复部分情况下ts功能报错 2025-05-29 17:27:28 +08:00
ff6ddeebd1 🐛 修复BUG 2025-05-18 21:34:45 +08:00
1fd2e0aae3 🍱 更新基础资源, 提高加载速度 2025-05-18 21:12:49 +08:00
e7e9778af4 🐛 修复部分情况下可能造成角色技能等级错误 2025-05-11 01:28:18 +08:00
84aa293bc1 🎨 优化展示 2025-05-08 10:49:49 +08:00
bee6087b87 🐛 修复BUG 2025-05-08 10:24:59 +08:00
d77db758d4 🎨 优化强制刷新 2025-05-08 10:17:44 +08:00
2bc6f4280e 🍱 更新5.6版本的metadata 2025-05-07 14:52:34 +08:00
22b7e23d02 🐛 修改提示语 (#680) 2025-04-27 05:58:34 +08:00
cf37708a0f 🎨 提示添加前缀 (#679) 2025-04-26 22:14:34 +08:00
6884266b21 🐛 为按钮添加前缀 (#679) 2025-04-26 22:03:57 +08:00
a800644f8b ⬆️ pre-commit-ci自动升级 (#677)
updates:
- [github.com/pycqa/flake8: 7.1.2 → 7.2.0](https://github.com/pycqa/flake8/compare/7.1.2...7.2.0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-04-20 20:51:11 +08:00
67b80f5c02 🐛 修复远古圣山的logo下载问题 2025-04-12 04:37:05 +08:00
106 changed files with 7323 additions and 3388 deletions

View File

@ -18,7 +18,7 @@ repos:
- id: black
- repo: https://github.com/pycqa/flake8
rev: 7.1.2
rev: 7.2.0
hooks:
- id: flake8

View File

@ -18,4 +18,5 @@
"basedpyright.analysis.extraPaths": [
"${workspaceFolder}/../../../"
],
"python.analysis.typeCheckingMode": "off",
}

View File

@ -3,11 +3,11 @@ import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.message_models import Button
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_abyss_card import draw_abyss_img
from ..utils.message import GButton as Button
sv_abyss = SV('查询深渊')

View File

@ -9,6 +9,7 @@ from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import get_error_img
from gsuid_core.utils.api.mys.models import AbyssBattleAvatar
from ..utils.message import PREFIX
from ..utils.mys_api import mys_api
from ..utils.image.convert import convert_img
from ..utils.resource.download_url import download_file
@ -45,12 +46,9 @@ async def get_abyss_star_pic(star: int) -> Image.Image:
return star_pic
async def _draw_abyss_card(
async def _draw_char_card(
char: AbyssBattleAvatar,
talent_num: str,
floor_pic: Image.Image,
index_char: int,
index_part: int,
talent_num: Union[str, int],
):
char_id = char['id']
# 确认角色头像路径
@ -71,6 +69,17 @@ async def _draw_abyss_card(
anchor='mm',
)
char_card = char_card.resize((128, 160), Image.Resampling.LANCZOS)
return char_card
async def _draw_abyss_card(
char: AbyssBattleAvatar,
talent_num: str,
floor_pic: Image.Image,
index_char: int,
index_part: int,
):
char_card = await _draw_char_card(char, talent_num)
floor_pic.paste(
char_card,
(70 + 147 * index_char, 39 + index_part * 170),
@ -147,7 +156,7 @@ async def draw_abyss_img(
return '你还没有挑战过该层深渊!'
else:
if len(raw_abyss_data['floors']) == 0:
return '你还没有挑战本期深渊!\n可以使用[上期深渊]命令查询上期~'
return f'你还没有挑战本期深渊!\n可以使用[{PREFIX}上期深渊]命令查询上期~'
floors_data = raw_abyss_data['floors'][-1]
if floors_data['levels'][-1]['battles']:

View File

@ -2,9 +2,9 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_achi import draw_achi_img
from .get_achi_desc import get_achi, get_daily_achi

View File

@ -1,12 +1,26 @@
import json
from pathlib import Path
path = Path(__file__).parent
with open(path / 'all_achi.json', "r", encoding='UTF-8') as f:
all_achi = json.load(f)
import aiofiles
from gsuid_core.server import on_core_start
path = Path(__file__).parent
all_achi = {}
daily_achi = {}
@on_core_start
async def load_data():
async with aiofiles.open(
path / 'all_achi.json', "r", encoding='UTF-8'
) as f:
all_achi.update(json.loads(await f.read()))
async with aiofiles.open(
path / 'daily_achi.json', "r", encoding='UTF-8'
) as f:
daily_achi.update(json.loads(await f.read()))
with open(path / 'daily_achi.json', "r", encoding='UTF-8') as f:
daily_achi = json.load(f)
daily_template = '''任务:【{}
成就:【{}

View File

@ -8,10 +8,10 @@ from gsuid_core.models import Event
from gsuid_core.aps import scheduler
from gsuid_core.logger import logger
from gsuid_core.subscribe import gs_subscribe
from gsuid_core.utils.error_reply import UID_HINT
from .util import black_ids
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .main import ann, consume_remind
from ..utils.image.convert import convert_img
from ..genshinuid_config.gs_config import gsconfig

View File

@ -1,5 +1,6 @@
import re
from pathlib import Path
from typing import Optional
from bs4 import BeautifulSoup
from PIL import Image, ImageOps, ImageDraw
@ -18,13 +19,22 @@ from ..utils.image.image_tools import (
assets_dir = Path(__file__).parent / 'assets'
list_head = Image.open(assets_dir / 'list.png')
list_item = (
Image.open(assets_dir / 'item.png').resize((384, 96)).convert('RGBA')
)
list_head: Optional[Image.Image] = None
list_item: Optional[Image.Image] = None
async def ann_list_card() -> bytes:
global list_head, list_item
if not list_head:
list_head = Image.open(assets_dir / 'list.png')
if not list_item:
list_item = (
Image.open(assets_dir / 'item.png')
.resize((384, 96))
.convert('RGBA')
)
ann_list = await ann().get_ann_list()
if not ann_list:
raise Exception('获取游戏公告失败,请检查接口是否正常')
@ -159,7 +169,7 @@ async def ann_detail_card(ann_id):
bbox = gs_font_26.getbbox('')
_x, _y = bbox[2] - bbox[0], bbox[3] - bbox[1]
padding = (_x, _y, _x, _y)
padding = (int(_x), int(_y), int(_x), int(_y))
im = ImageOps.expand(im, padding, '#f9f6f2')
return await convert_img(im)

View File

@ -27,7 +27,6 @@ def cache(ttl=datetime.timedelta(hours=1), **kwargs):
@functools.wraps(func)
async def wrapped(*args, **kw):
nonlocal cache_data
bound = inspect.signature(func).bind(*args, **kw)
bound.apply_defaults()
ins_key = '|'.join(

View File

@ -2,10 +2,11 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_cale_pic import draw_cale_img
from ..utils.buttons import a, b, c, s, t, u, v, x, y
sv_cale = SV('个人日历')
@ -20,4 +21,4 @@ async def send_cale_pic(bot: Bot, ev: Event):
logger.info(f'[个人日历] uid: {uid}')
im = await draw_cale_img(ev, uid)
await bot.send_option(im)
await bot.send_option(im, [[a, b, c], [t, s, u], [v, x, y]])

View File

@ -1,10 +1,10 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.message_models import Button
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from ..utils.message import GButton as Button
from .draw_new_collection_card import draw_explore
from .draw_collection_card import draw_explora_img, draw_collection_img

View File

@ -14,17 +14,17 @@ yyy_data = {
}
'''
# 5.5影月月数据
# 2025.3.27
# 5.7影月月数据
# 2025.5.18
yyy_data = {
'成就': 1458,
'华丽的宝箱': 325,
'珍贵的宝箱': 851,
'精致的宝箱': 2714,
'普通的宝箱': 3317,
'精致的宝箱': 2717,
'普通的宝箱': 3318,
'奇馈宝箱': 316,
'解锁传送点': 580,
'解锁秘境': 63,
'解锁传送点': 584,
'解锁秘境': 64,
}
# 影月月没收集到的数据

View File

@ -3,9 +3,11 @@ from typing import Dict, Tuple, Union, Literal
from PIL import Image, ImageDraw
from gsuid_core.models import Event
from gsuid_core.logger import logger
from ..utils.mys_api import get_base_data
from ..utils.image.convert import convert_img
from ..utils.map.GS_MAP_PATH import avatarId2Name
from .const import max_data, award_data, expmax_data
from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40
from ..utils.image.image_tools import draw_bar, get_avatar, get_color_bg
@ -33,6 +35,8 @@ async def get_explore_data(
if isinstance(raw_data, (str, bytes, bytearray, memoryview)):
return raw_data
expmax_data['获得角色数'] = len(avatarId2Name) - 2
# 处理数据
data: Dict[str, int] = {
'获得角色数': raw_data['stats']['avatar_number'],
@ -142,6 +146,7 @@ async def draw_base_img(
img.paste(title, (0, 0), title)
img.paste(char_pic, (241, 40), char_pic)
logger.debug(percent_data)
for index, name in enumerate(percent_data):
percent = percent_data[name]
value = value_data[name]
@ -161,3 +166,4 @@ async def draw_base_img(
def _f(value: float) -> str:
return '{:.2f}%'.format(value)
return '{:.2f}%'.format(value)

View File

@ -255,6 +255,10 @@ async def _draw_explore(raw_data: IndexData):
)
for index, world in enumerate(worlds):
if world['name'] == '远古圣山':
icon_ = 'community-game-records/images/world-logo-16.1c751ac9.png'
world['icon'] = f'https://webstatic.mihoyo.com/app/{icon_}'
icon = await get_image(world['icon'], ICON_PATH)
icon = icon.resize((150, 150)).convert('RGBA')

View File

@ -1,9 +1,9 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .get_my_pack import draw_my_pack
sv_pack = SV('查询背包')

View File

@ -4,9 +4,9 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.database.models import GsBind
from ..utils.message import UID_HINT
from .draw_config_card import draw_config_img
from .set_config import set_push_value, set_config_func

View File

@ -8,18 +8,18 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.message_models import Button
from gsuid_core.utils.error_reply import UID_HINT
from .to_data import switch_api
from .to_card import enka_to_card
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .get_akasha_data import get_rank
from .start import refresh_player_list
from .to_data_by_mys import mys_to_card
from .draw_artifacts_lib import draw_lib
from .draw_rank_list import draw_rank_img
from ..utils.image.convert import convert_img
from ..utils.message import GButton as Button
from ..utils.map.GS_MAP_PATH import alias_data
from .draw_arti_rank import draw_arti_rank_img
from .draw_char_info import draw_all_char_list
@ -343,7 +343,6 @@ async def send_card_info(bot: Bot, ev: Event):
im = await enka_to_card(uid)
else:
im = await enka_to_card(uid)
logger.info(f'UID{uid}获取角色数据成功!')
if isinstance(im, Tuple):
buttons = [

View File

@ -7,6 +7,7 @@ from PIL import Image, ImageDraw
from gsuid_core.models import Event
from .etc.etc import TEXT_PATH
from ..utils.message import PREFIX
from .start import refresh_player_list
from ..utils.image.convert import convert_img
from ..utils.image.image_tools import get_avatar
@ -40,7 +41,9 @@ async def get_artifacts_lib_data(uid: str) -> Optional[Dict]:
async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]:
data = await get_artifacts_lib_data(uid)
if data is None:
return '你还没有圣遗物数据...请尝试使用[刷新圣遗物仓库]获取数据!'
return (
f'你还没有圣遗物数据...请尝试使用[{PREFIX}刷新圣遗物仓库]获取数据!'
)
all_list = [x for v in data['data'].values() for x in v]
all_list.sort(key=lambda x: x['cv_score'], reverse=True)

View File

@ -3,6 +3,7 @@ from typing import Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.utils.image.convert import convert_img
from ..utils.message import PREFIX
from ..utils.colors import get_color
from .draw_rank_list import RANK_TEXT
from .get_akasha_data import _get_rank
@ -53,7 +54,7 @@ async def draw_role_rank_img(
if isinstance(rank_data, str):
return rank_data
if char_id not in rank_data:
return f'你还暂无{char_name}的数据, 请先[强制刷新]...'
return f'你还暂无{char_name}的数据, 请先[{PREFIX}强制刷新]...'
fit = rank_data[char_id]['calculations']['fit']
calculation_id = fit['calculationId']

View File

@ -17744,7 +17744,7 @@
"plus": 1,
"value": [
"80.0%",
"86.6%",
"86.5%",
"93.1%",
"102.4%",
"108.9%",
@ -19543,5 +19543,646 @@
"956.3%"
]
}
},
"爱可菲": {
"A一段伤害": {
"name": "A一段伤害",
"type": "攻击力",
"plus": 1,
"value": [
"51.6%",
"55.7%",
"59.9%",
"65.9%",
"70.1%",
"74.9%",
"81.5%",
"88.1%",
"94.7%",
"101.9%",
"109.1%",
"116.3%",
"123.5%",
"130.7%",
"137.9%"
]
},
"A重击伤害": {
"name": "A重击伤害",
"type": "攻击力",
"plus": 1,
"value": [
"115.4%",
"124.8%",
"134.2%",
"147.6%",
"157.0%",
"167.8%",
"182.5%",
"197.3%",
"212.0%",
"228.1%",
"244.2%",
"260.3%",
"276.5%",
"292.6%",
"308.7%"
]
},
"A高空下落伤害": {
"name": "A高空下落伤害",
"type": "攻击力",
"plus": 1,
"value": [
"160%",
"173%",
"186%",
"204%",
"217%",
"232%",
"253%",
"273%",
"293%",
"316%",
"338%",
"360%",
"382%",
"405%",
"427%"
]
},
"E伤害": {
"name": "E伤害",
"type": "攻击力",
"plus": 1,
"value": [
"50.4%",
"54.2%",
"58.0%",
"63.0%",
"66.8%",
"70.6%",
"75.6%",
"80.6%",
"85.7%",
"90.7%",
"95.8%",
"100.8%",
"107.1%",
"113.4%",
"119.7%"
]
},
"E冻霜芭菲伤害": {
"name": "E冻霜芭菲伤害",
"type": "攻击力",
"plus": 1,
"value": [
"120.0%",
"129.0%",
"138.0%",
"150.0%",
"159.0%",
"168.0%",
"180.0%",
"192.0%",
"204.0%",
"216.0%",
"228.0%",
"240.0%",
"255.0%",
"270.0%",
"285.0%"
]
},
"E流涌之刃伤害": {
"name": "E流涌之刃伤害",
"type": "攻击力",
"plus": 1,
"value": [
"33.6%",
"36.1%",
"38.6%",
"42.0%",
"44.5%",
"47.0%",
"50.4%",
"53.8%",
"57.1%",
"60.5%",
"63.8%",
"67.2%",
"71.4%",
"75.6%",
"79.8%"
]
},
"Q伤害": {
"name": "Q伤害",
"type": "攻击力",
"plus": 1,
"value": [
"592.8%",
"637.3%",
"681.7%",
"741.0%",
"785.5%",
"829.9%",
"889.2%",
"948.5%",
"1007.8%",
"1067.0%",
"1126.3%",
"1185.6%",
"1259.7%",
"1333.8%",
"1407.9%"
]
},
"Q治疗量": {
"name": "Q治疗量",
"type": "攻击",
"plus": 1,
"value": [
"172.0%+1078.53",
"184.9%+1186.39",
"197.8%+1303.25",
"215.0%+1429.10",
"227.9%+1563.93",
"240.8%+1707.75",
"258.0%+1860.57",
"275.3%+2022.37",
"292.5%+2193.16",
"309.7%+2372.94",
"326.9%+2561.70",
"344.1%+2759.46",
"365.6%+2966.21",
"387.1%+3181.94",
"408.6%+3406.67"
]
}
},
"伊法": {
"A扩散伤害": {
"name": "A扩散伤害",
"type": "扩散",
"plus": 0,
"value": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"
]
},
"A一段伤害": {
"name": "A一段伤害",
"type": "攻击力",
"plus": 1,
"value": [
"53.6%",
"57.6%",
"61.6%",
"67.0%",
"71.0%",
"75.1%",
"80.4%",
"85.8%",
"91.1%",
"96.5%",
"101.9%",
"107.2%",
"113.9%",
"120.6%",
"127.3%"
]
},
"A重击伤害": {
"name": "A重击伤害",
"type": "攻击力",
"plus": 1,
"value": [
"147.0%",
"158.1%",
"169.1%",
"183.8%",
"194.8%",
"205.9%",
"220.6%",
"235.3%",
"250.0%",
"264.7%",
"279.4%",
"294.1%",
"312.5%",
"330.8%",
"349.2%"
]
},
"A高空下落伤害": {
"name": "A高空下落伤害",
"type": "攻击力",
"plus": 1,
"value": [
"142%",
"153%",
"165%",
"182%",
"193%",
"206%",
"224%",
"243%",
"261%",
"281%",
"300%",
"320%",
"340%",
"360%",
"380%"
]
},
"E秘药弹伤害": {
"name": "E秘药弹伤害",
"type": "攻击力",
"plus": 1,
"value": [
"133.4%",
"143.4%",
"153.4%",
"166.7%",
"176.7%",
"186.7%",
"200.0%",
"213.4%",
"226.7%",
"240.0%",
"253.4%",
"266.7%",
"283.4%",
"300.1%",
"316.7%"
]
},
"E秘药弹命中治疗量": {
"name": "E秘药弹命中治疗量",
"type": "元素精通",
"plus": 1,
"value": [
"20.2%+48.1",
"21.7%+53.0",
"23.2%+58.2",
"25.2%+63.8",
"26.7%+69.8",
"28.2%+76.2",
"30.2%+83.1",
"32.3%+90.3",
"34.3%+97.9",
"36.3%+105.9",
"38.3%+114.4",
"40.3%+123.2",
"42.8%+132.4",
"45.4%+142.1",
"47.9%+152.1"
]
},
"Q伤害": {
"name": "Q伤害",
"type": "攻击力",
"plus": 1,
"value": [
"508.5%",
"546.6%",
"584.8%",
"635.6%",
"673.7%",
"711.9%",
"762.7%",
"813.6%",
"864.4%",
"915.3%",
"966.1%",
"1017.0%",
"1080.5%",
"1144.1%",
"1207.6%"
]
},
"Q镇静标记伤害": {
"name": "Q镇静标记伤害",
"type": "攻击力",
"plus": 1,
"value": [
"109.0%",
"117.1%",
"125.3%",
"136.2%",
"144.4%",
"152.5%",
"163.4%",
"174.3%",
"185.2%",
"196.1%",
"207.0%",
"217.9%",
"231.5%",
"245.2%",
"258.8%"
]
}
},
"丝柯克": {
"A一段伤害": {
"name": "A一段伤害",
"type": "攻击力",
"plus": 1,
"value": [
"54.5%",
"59.0%",
"63.4%",
"69.7%",
"74.2%",
"79.2%",
"86.2%",
"93.2%",
"100.2%",
"107.8%",
"115.4%",
"123.0%",
"130.6%",
"138.2%",
"145.8%"
]
},
"A重击伤害": {
"name": "A重击伤害",
"type": "攻击力",
"plus": 2,
"value": [
"66.8%",
"72.3%",
"77.7%",
"85.5%",
"90.9%",
"97.1%",
"105.7%",
"114.2%",
"122.8%",
"132.1%",
"141.4%",
"150.7%",
"160.1%",
"169.4%",
"178.7%"
]
},
"A高空下落伤害": {
"name": "A高空下落伤害",
"type": "攻击力",
"plus": 1,
"value": [
"160%",
"173%",
"186%",
"204%",
"217%",
"232%",
"253%",
"273%",
"293%",
"316%",
"338%",
"360%",
"382%",
"405%",
"427%"
]
},
"E一段伤害": {
"name": "E一段伤害",
"type": "攻击力",
"plus": 1,
"value": [
"132.8%",
"143.6%",
"154.4%",
"169.9%",
"180.7%",
"193.1%",
"210.0%",
"227.0%",
"244.0%",
"262.6%",
"281.1%",
"299.6%",
"318.2%",
"336.7%",
"355.2%"
]
},
"E重击伤害": {
"name": "E重击伤害",
"type": "攻击力",
"plus": 3,
"value": [
"44.5%",
"48.2%",
"51.8%",
"57.0%",
"60.6%",
"64.8%",
"70.4%",
"76.1%",
"81.8%",
"88.1%",
"94.3%",
"100.5%",
"106.7%",
"112.9%",
"119.1%"
]
},
"E高空下落伤害": {
"name": "E高空下落伤害",
"type": "攻击力",
"plus": 1,
"value": [
"160%",
"173%",
"186%",
"204%",
"217%",
"232%",
"253%",
"273%",
"293%",
"316%",
"338%",
"360%",
"382%",
"405%",
"427%"
]
},
"Q斩击伤害": {
"name": "Q斩击伤害",
"type": "攻击力",
"plus": 5,
"value": [
"122.8%",
"132.0%",
"141.2%",
"153.4%",
"162.7%",
"171.9%",
"184.1%",
"196.4%",
"208.7%",
"221.0%",
"233.2%",
"245.5%",
"260.9%",
"276.2%",
"291.6%"
]
}
},
"塔利雅": {
"A一段伤害": {
"name": "A一段伤害",
"type": "攻击力",
"plus": 1,
"value": [
"43.5%",
"47.1%",
"50.6%",
"55.7%",
"59.2%",
"63.3%",
"68.9%",
"74.4%",
"80.0%",
"86.1%",
"92.2%",
"98.2%",
"104.3%",
"110.4%",
"116.5%"
]
},
"A重击伤害": {
"name": "A重击伤害",
"type": "攻击力",
"plus": 1,
"value": [
"39.9%+55.1%",
"43.1%+59.5%",
"46.4%+64.0%",
"51.0%+70.4%",
"54.3%+74.9%",
"58.0%+80.0%",
"63.1%+87.1%",
"68.2%+94.1%",
"73.3%+101.2%",
"78.8%+108.9%",
"84.4%+116.5%",
"90.0%+124.2%",
"95.5%+131.9%",
"101.1%+139.6%",
"106.6%+147.3%"
]
},
"A高空下落伤害": {
"name": "A高空下落伤害",
"type": "攻击力",
"plus": 1,
"value": [
"160%",
"173%",
"186%",
"204%",
"217%",
"232%",
"253%",
"273%",
"293%",
"316%",
"338%",
"360%",
"382%",
"405%",
"427%"
]
},
"E伤害": {
"name": "E伤害",
"type": "攻击力",
"plus": 1,
"value": [
"232.8%",
"250.3%",
"267.7%",
"291.0%",
"308.5%",
"325.9%",
"349.2%",
"372.5%",
"395.8%",
"419.0%",
"442.3%",
"465.6%",
"494.7%",
"523.8%",
"552.9%"
]
},
"Q伤害": {
"name": "Q伤害",
"type": "攻击力",
"plus": 1,
"value": [
"406.4%",
"436.9%",
"467.4%",
"508.0%",
"538.5%",
"569.0%",
"609.6%",
"650.2%",
"690.9%",
"731.5%",
"772.2%",
"812.8%",
"863.6%",
"914.4%",
"965.2%"
]
},
"Q圣眷护盾吸收量": {
"name": "Q圣眷护盾吸收量",
"type": "生命值",
"plus": 1,
"value": [
"3.4%+323.56",
"3.6%+355.92",
"3.9%+390.97",
"4.2%+428.73",
"4.5%+469.18",
"4.7%+512.33",
"5.0%+558.17",
"5.4%+606.71",
"5.7%+657.95",
"6.0%+711.88",
"6.4%+768.51",
"6.7%+827.84",
"7.1%+889.86",
"7.6%+954.58",
"8.0%+1022.00"
]
}
}
}

View File

@ -1,4 +1,172 @@
{
"丝柯克": {
"normal": {
"normal_skill": {
"50": "",
"70": ""
},
"normal_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
},
"fight": {
"fight_skill": {
"50": "E:extraBonus+70;Q:extraBonus+60",
"70": ""
},
"fight_talent": {
"1": "",
"2": "addAtk+70",
"3": "",
"4": "addAtk+40",
"5": "",
"6": ""
},
"group_skill": {
"50": "",
"70": ""
},
"group_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
}
},
"塔利雅": {
"normal": {
"normal_skill": {
"50": "",
"70": ""
},
"normal_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
},
"fight": {
"fight_skill": {
"50": "",
"70": ""
},
"fight_talent": {
"1": "",
"2": "shieldBonus+25",
"3": "",
"4": "",
"5": "",
"6": ""
},
"group_skill": {
"50": "",
"70": ""
},
"group_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
}
},
"爱可菲": {
"normal": {
"normal_skill": {
"50": "",
"70": ""
},
"normal_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
},
"fight": {
"fight_skill": {
"50": "",
"70": "HydroResist+-55;CryoResist+-55"
},
"fight_talent": {
"1": "EQ:critDmg+60",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
},
"group_skill": {
"50": "",
"70": "HydroResist+-55;CryoResist+-55"
},
"group_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
}
},
"伊法": {
"normal": {
"normal_skill": {
"50": "",
"70": ""
},
"normal_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
},
"fight": {
"fight_skill": {
"50": "elementalMastery+80",
"70": ""
},
"fight_talent": {
"1": "",
"2": "",
"3": "",
"4": "elementalMastery+100",
"5": "",
"6": ""
},
"group_skill": {
"50": "",
"70": ""
},
"group_talent": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": ""
}
}
},
"伊安珊": {
"normal": {
"normal_skill": {

View File

@ -378,5 +378,21 @@
"瓦雷莎": [
"Q",
"A"
],
"爱可菲": [
"E",
"Q"
],
"伊法": [
"E",
"Q"
],
"丝柯克": [
"Q",
"E"
],
"塔利雅": [
"Q",
"E"
]
}

View File

@ -405,7 +405,8 @@
"芙宁娜": [
"血量",
"暴击率",
"暴击伤害"
"暴击伤害",
"元素充能效率"
],
"娜维娅": [
"攻击力",
@ -489,9 +490,35 @@
"暴击率",
"元素充能效率"
],
"玛薇卡": [
"攻击力",
"暴击率",
"暴击伤害",
"元素精通"
],
"瓦雷莎": [
"攻击力",
"暴击率",
"暴击伤害"
],
"爱可菲": [
"攻击力",
"元素充能效率",
"血量"
],
"伊法": [
"攻击力",
"暴击率",
"暴击伤害",
"元素充能效率"
],
"丝柯克": [
"攻击力",
"暴击率",
"暴击伤害"
],
"塔利雅": [
"元素充能效率",
"血量"
]
}

View File

@ -1,4 +1,128 @@
{
"苍耀": {
"normal": {
"normal_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
}
},
"fight": {
"fight_effect": {
"1": "addAtk+48;critDmg+40",
"2": "addAtk+60;critDmg+50",
"3": "addAtk+72;critDmg+60",
"4": "addAtk+84;critDmg+70",
"5": "addAtk+96;critDmg+80"
},
"group_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
},
"time": 12,
"extra": {
}
}
},
"香韵奏者": {
"normal": {
"normal_effect": {
"1": "addAtk+12",
"2": "addAtk+15",
"3": "addAtk+18",
"4": "addAtk+21",
"5": "addAtk+24"
}
},
"fight": {
"fight_effect": {
"1": "addAtk+44",
"2": "addAtk+55",
"3": "addAtk+66",
"4": "addAtk+77",
"5": "addAtk+88"
},
"group_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
},
"time": 3,
"extra": {
}
}
},
"柔灯挽歌": {
"normal": {
"normal_effect": {
"1": "addAtk+15",
"2": "addAtk+19",
"3": "addAtk+23",
"4": "addAtk+27",
"5": "addAtk+31"
}
},
"fight": {
"fight_effect": {
"1": "dmgBonus+36",
"2": "dmgBonus+46",
"3": "dmgBonus+56",
"4": "dmgBonus+66",
"5": "dmgBonus+76"
},
"group_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
},
"time": 8,
"extra": {
}
}
},
"冷寂迸音": {
"normal": {
"normal_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
}
},
"fight": {
"fight_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
},
"group_effect": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": ""
},
"time": 10,
"extra": {
}
}
},
"溢彩心念": {
"normal": {
"normal_effect": {

View File

@ -3,6 +3,7 @@ from typing import Dict, Union
import aiofiles
from ..utils.message import PREFIX
from ..genshinuid_config.gs_config import gsconfig
from ..utils.map.name_covert import avatar_id_to_name
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
@ -15,13 +16,13 @@ async def _get_rank(uid: str) -> Union[Dict, str]:
return '未开启排名系统...'
path = PLAYER_PATH / uid / 'rank.json'
if not path.exists():
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
async with aiofiles.open(path, 'r', encoding='UTF-8') as file:
rank_data = json.loads(await file.read())
if len(rank_data) == 0:
return '你还没有排名缓存, 请使用[强制刷新]生成/刷新数据!'
return f'你还没有排名缓存, 请使用[{PREFIX}强制刷新]生成/刷新数据!'
return rank_data

View File

@ -6,6 +6,7 @@ from PIL import Image
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import CHAR_HINT
from ..utils.message import PREFIX
from .to_card import draw_enka_card
from .draw_char_card import draw_char_img
from .draw_group_dmg import draw_group_dmg_img
@ -136,7 +137,7 @@ async def get_showcase(uid: str) -> Union[bytes, str]:
if '\u4e00' <= file_name[0] <= '\u9fff':
char_list.append(file_name.split('.')[0])
if char_list == []:
return '您还没有已缓存的角色噢~\n请先使用[强制刷新]命令缓存~'
return f'您还没有已缓存的角色噢~\n请先使用[{PREFIX}强制刷新]命令缓存~'
img = await draw_enka_card(uid=uid, char_list=char_list)
return img

View File

@ -392,6 +392,7 @@ class Character:
prop['sp'] = []
prop['baseArea'] = 1
prop['powerPlus'] = 1
prop['extraBonus'] = 0
if prop['baseHp'] + prop['addHp'] == prop['hp']:
prop['exHp'] = prop['addHp']
prop['exAtk'] = prop['addAtk']

View File

@ -352,6 +352,8 @@ class Fight:
base_area_plus = await self.get_base_area_plus(char)
extra_bonus = char.fight_prop['extraBonus'] + 1
# 对草神进行特殊计算
if '灭净三业' in power.name or '业障除' in power.name:
base = await self.get_sp_base(power, char)
@ -367,6 +369,7 @@ class Fight:
# 基本乘区 = 有效数值(例如攻击力) * 倍率 + 固定值 + 激化区 + 额外加成值 + 特殊加成值
base_area = base + reaction_power + add_dmg + char.sp.addDmg
base_area *= extra_bonus
if base_area_plus != 1:
base_area_plus -= 1
base_area = base_area_plus * base_area

View File

@ -6,6 +6,7 @@ from copy import deepcopy
import aiofiles
from gsuid_core.logger import logger
from ..utils.message import PREFIX
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
from .to_data import ARTIFACT_DATA, input_artifacts_data
@ -15,7 +16,7 @@ pattern = r'^[\u4e00-\u9fa5]'
async def refresh_player_list(uid: str, is_force: bool = False) -> str:
player = PLAYER_PATH / uid
if not player.exists():
return f'该UID{uid}对应面板数据不存在, 请先进行 [刷新面板]!'
return f'该UID{uid}对应面板数据不存在, 请先进行 [{PREFIX}刷新面板]!'
path = player / 'artifacts.json'
all_artifacts = deepcopy(ARTIFACT_DATA)

View File

@ -3,6 +3,7 @@ from pathlib import Path
from typing import Dict, List, Tuple, Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.api.enka.models import EnkaData
from .to_data import enka_to_dict
@ -42,6 +43,7 @@ async def enka_to_card(
return await convert_img(pic_500)
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
logger.info(f'[强制刷新] UID{uid}成功!')
return img, char_data_list
@ -72,7 +74,7 @@ async def draw_enka_card(
if char_num <= 8:
based_w, based_h = 1000, 240 + ((char_num + 3) // 4) * 220
else:
based_w, based_h = 1200, 660 + (char_num - 5) // 5 * 110
based_w, based_h = 1200, 660 + (char_num - 5) // 5 * 113
if (char_num - 5) % 5 >= 4:
based_h += 110

View File

@ -7,10 +7,10 @@ from typing import Dict, List, Union, Literal, Optional
import aiofiles
from httpx import ReadTimeout
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.api.enka.models import EnkaData
from gsuid_core.utils.api.enka.request import get_enka_info
from ..utils.message import UID_HINT
from .mono.Character import Character
from ..utils.api.cv.request import _CvApi
from .draw_normal import get_artifact_score_data

View File

@ -137,6 +137,12 @@ async def mys_to_data(uid: str):
}
)
if len(avatar_skill) > 4:
# 移除最后两个元素
avatar_skill.pop()
avatar_skill.pop()
break
weapon = char['weapon']
weapon_main = weapon['main_property']
main_prop_id = Id2PropId[str(weapon_main['property_type'])]
@ -308,4 +314,3 @@ async def mys_to_card(uid: str) -> Union[str, bytes, Tuple[bytes, List[Dict]]]:
img = await draw_enka_card(uid=uid, char_data_list=char_data_list)
return img, char_data_list
return img, char_data_list

View File

@ -3,10 +3,10 @@ from pathlib import Path
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.message_models import Button
from ..version import Genshin_version
from ..utils.image.convert import convert_img
from ..utils.message import GButton as Button
PRIMOGEMS_DATA_PATH = Path(__file__).parent / 'primogems_data'
IMG_PATH = Path(__file__).parent / 'img_data'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -2,9 +2,9 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.aps import scheduler
from gsuid_core.message_models import Button
from ..utils.image.convert import convert_img
from ..utils.message import GButton as Button
from .draw_event_img import get_event_img, get_all_event_img
sv_event_list = SV('活动列表')

View File

@ -2,12 +2,12 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.message_models import Button
from gsuid_core.segment import MessageSegment
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.database.models import GsBind
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from ..utils.message import GButton as Button
from .draw_gachalogs import draw_gachalogs_img
from .get_gachalogs import save_gachalogs, get_full_gachalog
from .export_and_import import export_gachalogs, import_gachalogs

View File

@ -9,6 +9,7 @@ from PIL import Image, ImageDraw
from gsuid_core.models import Event
from gsuid_core.logger import logger
from ..utils.message import PREFIX
from ..utils.map.GS_MAP_PATH import charList
from ..utils.image.convert import convert_img
from .get_gachalogs import all_gacha_type_name
@ -60,8 +61,9 @@ NORMAL_LIST = [
UP_LIST = {
'刻晴': [(2021, 2, 17, 18, 0, 0), (2021, 3, 2, 15, 59, 59)],
'提纳里': [(2022, 8, 24, 11, 0, 0), (2022, 9, 9, 17, 59, 59)],
'迪希雅': [(2023, 3, 1, 11, 0, 0), (2023, 3, 21, 17, 59, 59)],
'提纳里': [(2022, 8, 24, 9, 0, 0), (2022, 9, 9, 17, 59, 59)],
'迪希雅': [(2023, 3, 1, 9, 0, 0), (2023, 3, 21, 17, 59, 59)],
'梦见月瑞希': [(2025, 2, 12, 9, 0, 0), (2025, 3, 4, 17, 59, 59)],
}
@ -141,7 +143,7 @@ def check_up(name: str, _time: str) -> bool:
async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]:
path = PLAYER_PATH / str(uid) / 'gacha_logs.json'
if not path.exists():
return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~'
return f'你还没有祈愿数据噢~\n请添加Stoken后使用命令`{PREFIX}刷新抽卡记录`更新祈愿数据~'
with open(path, 'r', encoding='UTF-8') as f:
gacha_data = json.load(f)

View File

@ -2,12 +2,12 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.message_models import Button
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_gcgdesk import draw_deck_img
from .draw_gcginfo import draw_gcg_info
from ..utils.message import GButton as Button
sv_gcg = SV('查询七圣')

View File

@ -5,7 +5,6 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.message_models import Button
from gsuid_core.segment import MessageSegment
from .get_guide import get_gs_guide
@ -13,6 +12,7 @@ from ..version import Genshin_version
# from .get_abyss_data import get_review
from ..utils.image.convert import convert_img
from ..utils.message import GButton as Button
from .get_new_abyss_data import get_review_data
from ..utils.resource.RESOURCE_PATH import REF_PATH
from .get_bbs_post_guide import get_material_way_post

View 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)

View 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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,9 +1,9 @@
import json
from pathlib import Path
from typing import Dict, Union
import aiofiles
from PIL import Image
from msgspec import json as msgjson
from gsuid_core.help.model import PluginHelp
from gsuid_core.help.draw_plugin_help import get_help
from gsuid_core.sv import get_plugin_available_prefix
@ -26,7 +26,7 @@ BANNER_BG = Image.open(TEXT_PATH / 'banner_bg.jpg')
async def get_help_data() -> Dict[str, PluginHelp]:
async with aiofiles.open(HELP_DATA, 'rb') as file:
return msgjson.decode(await file.read(), type=Dict[str, PluginHelp])
return json.loads(await file.read())
async def get_core_help() -> Union[bytes, str]:

View File

@ -18,6 +18,14 @@
"need_sk": false,
"need_admin": false
},
{
"name": "[上期]幽境危战/yjwz",
"desc": "肃靖险乱信息一览",
"eg": "新新深渊",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "幻想真境剧诗",
"desc": "新深渊信息一览,后可跟UID",

View File

@ -1,11 +1,11 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.database.models import GsBind
from .note_text import award
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_note_card import draw_note_img
sv_get_monthly_data = SV('查询札记')

View File

@ -3,16 +3,27 @@ import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .draw_poetry_abyss import draw_poetry_abyss_img
sv_poetry_abyss = SV('查询幻想真境剧诗')
@sv_poetry_abyss.on_command(
('查询幻想真境剧诗', '幻想真境剧诗', '新深渊', '查询新深渊', '真剧诗'),
(
'查询幻想真境剧诗',
'幻想真境剧诗',
'新深渊',
'查询新深渊',
'真剧诗',
'查询上期幻想真境剧诗',
'上期幻想真境剧诗',
'上期新深渊',
'查询上期新深渊',
'上期真剧诗',
),
block=True,
)
async def send_poetry_abyss_info(bot: Bot, ev: Event):
@ -26,6 +37,10 @@ async def send_poetry_abyss_info(bot: Bot, ev: Event):
return await bot.send(UID_HINT)
await bot.logger.info('[幻想真境剧诗]uid: {}'.format(uid))
im = await draw_poetry_abyss_img(uid, ev)
if '上期' in ev.command:
active = 2
else:
active = None
im = await draw_poetry_abyss_img(uid, ev, active)
await bot.send(im)

View File

@ -1,6 +1,6 @@
from pathlib import Path
from datetime import datetime
from typing import List, Union
from typing import List, Union, Optional
from PIL import Image, ImageDraw
from gsuid_core.models import Event
@ -63,15 +63,21 @@ async def draw_buff(
)
async def draw_poetry_abyss_img(uid: str, ev: Event) -> Union[str, bytes]:
data = await mys_api.get_poetry_abyss_data(uid)
async def draw_poetry_abyss_img(
uid: str, ev: Event, active: Optional[int] = None
) -> Union[str, bytes]:
data = await mys_api.get_poetry_abyss_data(uid, active)
if isinstance(data, int):
return get_error(data)
if not data['is_unlock'] or not data['data']:
return '[幻想真境剧诗] 你还没有解锁该模式!'
data = data['data'][0]
if active:
data = data['data'][-1]
else:
data = data['data'][0]
round_data = data['detail']['rounds_data']
stat_data = data['stat']

View File

@ -2,10 +2,10 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.aps import scheduler
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.database.models import GsBind
from .get_draw import post_my_draw
from ..utils.message import UID_HINT
from .daily_check_draw import daily_get_draw
from ..genshinuid_config.gs_config import gsconfig

View File

@ -8,9 +8,9 @@ from gsuid_core.aps import scheduler
from gsuid_core.logger import logger
from gsuid_core.models import Event, Message
from gsuid_core.segment import MessageSegment
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .resin_text import get_resin_text
from .draw_resin_card import get_resin_img
from .notice import MR_NOTICE, get_notice_list
@ -61,7 +61,7 @@ async def notice_job(force: bool = False):
msg_list, 'direct', user_id, bot_id, '', ''
)
await asyncio.sleep(0.5)
logger.info('[推送检查] 私聊推送完成')
logger.info('[推送检查] 私聊推送完成')
for gid in result[bot_id]['group']:
msg_list = [
MessageSegment.text('✅[原神] 推送提醒:\n'),
@ -72,12 +72,17 @@ async def notice_job(force: bool = False):
msg_list.append(MessageSegment.text(msg))
msg_list.append(MessageSegment.text(MR_NOTICE))
await bot.target_send(
msg_list, 'group', gid, bot_id, '', ''
msg_list,
'group',
gid,
bot_id,
'',
'',
)
await asyncio.sleep(0.5)
logger.info('[推送检查] 群聊推送完成')
logger.info('[推送检查] 群聊推送完成')
else:
logger.info('[推送检查] 已关闭全局推送, 停止任务...')
logger.info('[推送检查] 已关闭全局推送, 停止任务...')
@sv_get_resin.on_fullmatch(('每日', 'mr', '实时便笺', '便笺', '便签'))

View File

@ -5,11 +5,12 @@ from gsuid_core.logger import logger
from gsuid_core.utils.api.mys.models import DailyNoteData
from gsuid_core.utils.database.models import GsPush, GsUser
from ..utils.message import PREFIX
from ..utils.mys_api import mys_api
from ..utils.api.mys.models import WidgetResin
from ..genshinuid_config.gs_config import gsconfig
MR_NOTICE = '\n✅可发送[mr]或者[每日]来查看更多信息!\n'
MR_NOTICE = f'\n✅可发送[{PREFIX}mr]或者[{PREFIX}每日]来查看更多信息!\n'
NOTICE = {
'coin': '💰你的洞天宝钱快满啦!',

View File

@ -3,9 +3,9 @@ import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.utils.error_reply import UID_HINT
from ..utils.convert import get_uid
from ..utils.message import UID_HINT
from .get_regtime import calc_reg_time
from .draw_all_char import draw_char_pic
from .draw_roleinfo_card import draw_pic

View File

@ -3,11 +3,11 @@ from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.aps import scheduler
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import UID_HINT
from gsuid_core.utils.database.models import GsBind
from gsuid_core.utils.sign.sign import sign_in, daily_sign
from gsuid_core.utils.boardcast.send_msg import send_board_cast_msg
from ..utils.message import UID_HINT
from ..genshinuid_config.gs_config import gsconfig
SIGN_TIME = gsconfig.get_config('SignTime').data

View File

@ -1,7 +1,5 @@
import asyncio
import threading
from gsuid_core.logger import logger
from gsuid_core.server import on_core_start
from ..genshinuid_resource import startup
@ -11,12 +9,16 @@ from ..genshinuid_guide.get_new_abyss_data import download_Oceanid
# from ..genshinuid_enka.start import check_artifacts_list
# from ..genshinuid_guide.get_abyss_data import generate_data
from ..utils.resource.generate_char_card import create_all_char_card
'''
from ..genshinuid_xkdata.get_all_char_data import (
save_all_char_info,
save_all_abyss_rank,
)
'''
@on_core_start
async def all_start():
try:
await download_Oceanid()
@ -25,10 +27,7 @@ async def all_start():
await create_all_char_card()
# await draw_teyvat_abyss_img()
# await generate_data()
await save_all_char_info()
await save_all_abyss_rank()
# await save_all_char_info()
# await save_all_abyss_rank()
except Exception as e:
logger.exception(e)
threading.Thread(target=lambda: asyncio.run(all_start()), daemon=True).start()

View File

@ -1,12 +1,12 @@
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.message_models import Button
from gsuid_core.segment import MessageSegment
from gsuid_core.utils.database.models import GsBind
from .get_ck_help_msg import get_ck_help
from ..utils.message import send_diff_msg
from ..utils.message import GButton as Button
sv_user_info = SV('用户信息')
sv_user_help = SV('绑定帮助')

View File

@ -2,7 +2,9 @@ from typing import List
from gsuid_core.models import Message
CK_QRCODE_LOGIN = '''先发送【绑定uidxxx】绑定UID,
from ..utils.message import PREFIX
CK_QRCODE_LOGIN = f'''先发送【{PREFIX}绑定uidxxx】绑定UID,
然后发送【扫码登陆】, 使用米游社APP扫码完成绑定, 【[或者]】选择以下方法
'''

View File

@ -115,7 +115,14 @@ async def avatarId2SkillGroupList():
for skill in skill_data:
if 'proudSkillGroupId' in skill:
if skill['abilityName']:
_name = skill['skillIcon'].split('_')[2]
_name = ''
if (
'skillIcon' in skill
and skill['skillIcon']
and skill['skillIcon'].count('_') >= 2
):
_name = skill['skillIcon'].split('_')[2]
count = skill['abilityName'].count('_')
if 'Diluc' in skill['abilityName']:
@ -135,12 +142,18 @@ async def avatarId2SkillGroupList():
and skill['skillIcon'].count('_') > 2
and 'Catalyst' not in skill['skillIcon']
):
print(_name)
print(name)
continue
else:
name = skill['skillIcon'].split('_')[2]
if (
'skillIcon' in skill
and skill['skillIcon']
and skill['skillIcon'].count('_') >= 2
):
print(skill)
name = skill['skillIcon'].split('_')[2]
else:
continue
if not skill['skillIcon'].startswith(
('Skill_A', 'Skill_S', 'Skill_E')
@ -584,7 +597,7 @@ async def save_char_talent_num():
async def main():
# await download_new_file()
await download_new_file()
await restore_mysData()
await restore_hakush_data()
await monster2map()

View File

@ -9,12 +9,12 @@ from PIL import Image
MAP_PATH = Path(__file__).parent.parent / 'utils' / 'map' / 'data'
with open(MAP_PATH / 'enName2AvatarID_mapping_5.4.0.json') as f:
with open(MAP_PATH / 'enName2AvatarID_mapping_5.6.0.json') as f:
enmap: Dict[str, str] = json.load(f)
suffix = 'webp'
char_list = ['Varesa', 'Iansan']
char_list = ['SkirkNew', 'Dahlia']
base = 'https://api.hakush.in/gi/UI'
# title = 'https://enka.network/ui/{}'
# hakush = 'https://api.hakush.in/gi/UI/'

View File

@ -13,6 +13,7 @@ sys.path.append(str(Path(__file__).parents[5]))
__package__ = 'GenshinUID.tools'
from ..utils.ambr_to_minigg import convert_ambr_to_talent # noqa: E402
from ..utils.map.GS_MAP_PATH import ( # noqa: E402
load_map,
avatarId2Name,
avatarName2Element,
)
@ -329,6 +330,7 @@ def find_tag(labels: List, index: int, char: str, parameters: dict) -> dict:
async def main():
await load_map()
with open(
str(
Path(__file__).parents[1]
@ -398,6 +400,7 @@ async def main():
continue
if talent_data is None:
print('未找到角色天赋')
continue
result = {}
for i in range(1, 4):

File diff suppressed because it is too large Load Diff

View File

@ -3,3 +3,4 @@ new_abyss_url = '/game_record/app/genshin/api/role_combat'
char_detail_url = '/game_record/app/genshin/api/character/detail'
calendar_url = '/game_record/app/genshin/api/act_calendar'
hard_challenge_url = '/game_record/app/genshin/api/hard_challenge'

View File

@ -1,12 +1,18 @@
from copy import deepcopy
from typing import Dict, List, Union, cast
from typing import Dict, List, Union, Optional, cast
from gsuid_core.utils.api.mys_api import _MysApi
from gsuid_core.utils.api.mys.api import RECORD_BASE, RECORD_BASE_OS
from gsuid_core.utils.api.mys.tools import get_ds_token, get_web_ds_token
from .api import widget_url, calendar_url, new_abyss_url, char_detail_url
from .models import Character, WidgetResin, CalendarData, PoetryAbyssDatas
from .api import (
widget_url,
calendar_url,
new_abyss_url,
char_detail_url,
hard_challenge_url,
)
class GsMysAPI(_MysApi):
@ -15,6 +21,31 @@ class GsMysAPI(_MysApi):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
async def get_hard_challenge_data(self, uid: str) -> Union[Dict, int]:
server_id = self.RECOGNIZE_SERVER.get(uid[0], 'cn_gf01')
HEADER = deepcopy(self._HEADER)
ck = await self.get_ck(uid, 'OWNER')
if ck is None:
return -51
HEADER['Cookie'] = ck
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
data = await self._mys_request(
hard_challenge_url,
'GET',
HEADER,
data={
"role_id": uid,
"server": server_id,
"need_detail": True,
},
base_url=base,
)
if isinstance(data, Dict):
data = cast(Dict, data['data'])
return data
async def get_calendar_data(self, uid: str) -> Union[CalendarData, int]:
server_id = self.RECOGNIZE_SERVER.get(uid[0])
header = deepcopy(self._HEADER)
@ -56,7 +87,9 @@ class GsMysAPI(_MysApi):
return data
async def get_poetry_abyss_data(
self, uid: str
self,
uid: str,
active: Optional[int] = None,
) -> Union[PoetryAbyssDatas, int]:
server_id = self.RECOGNIZE_SERVER.get(uid[0])
base = RECORD_BASE_OS if self.check_os(uid) else RECORD_BASE
@ -70,6 +103,8 @@ class GsMysAPI(_MysApi):
'role_id': uid,
'need_detail': True,
}
if active:
params['active'] = active
HEADER['DS'] = get_ds_token(
'&'.join([f'{k}={v}' for k, v in params.items()])
)

View File

@ -1,4 +1,4 @@
from gsuid_core.message_models import Button
from ..utils.message import GButton as Button
a = Button('🔍查询探索', '查询探索')
b = Button('🔍查询收集', '查询收集')

View File

@ -1,8 +1,10 @@
from pathlib import Path
from typing import Dict, List, TypedDict
import aiofiles
from msgspec import json as msgjson
from gsuid_core.logger import logger
from gsuid_core.server import on_core_start
from ...version import Genshin_version
@ -38,89 +40,201 @@ class TS(TypedDict):
Icon: Dict[str, str]
try:
with open(MAP / charList_fileName, 'r', encoding='UTF-8') as f:
charList = msgjson.decode(f.read(), type=Dict)
charList: Dict[str, str] = {}
weaponList: Dict[str, str] = {}
avatarId2Name: Dict[str, str] = {}
icon2Name: Dict[str, str] = {}
artifact2attr: Dict[str, str] = {}
name2Icon: Dict[str, str] = {}
avatarName2Element: Dict[str, str] = {}
avatarName2Weapon: Dict[str, str] = {}
mysData: Dict = {}
propId2Name: Dict[str, str] = {}
Id2PropId: Dict[str, str] = {}
artifactId2Piece: Dict[str, List[str]] = {}
skillId2Name: TS = {'Name': {}, 'Icon': {}}
talentId2Name: TS = {'Name': {}, 'Icon': {}}
weaponHash2Name: Dict[str, str] = {}
weaponHash2Type: Dict[str, str] = {}
alias_data: Dict[str, List[str]] = {}
avatarId2Star_data: Dict[str, str] = {}
enName_to_avatarId_data: Dict[str, str] = {}
ex_monster_data: Dict[str, Dict] = {}
monster2entry_data: Dict[str, Dict] = {}
avatarId2SkillList_data: Dict[str, Dict[str, str]] = {}
weaponId2Name_data: Dict[str, str] = {}
CharId2TalentIcon_data: Dict[str, List[str]] = {}
with open(MAP / weaponList_fileName, 'r', encoding='UTF-8') as f:
weaponList = msgjson.decode(f.read(), type=Dict)
with open(MAP / avatarId2Name_fileName, 'r', encoding='UTF-8') as f:
avatarId2Name = msgjson.decode(f.read(), type=Dict[str, str])
@on_core_start
async def load_map():
logger.info('[GenshinUID MAP] 正在加载资源文件...')
with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f:
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
try:
async with aiofiles.open(
MAP / charList_fileName, 'r', encoding='UTF-8'
) as f:
charList.update(msgjson.decode(await f.read(), type=Dict))
with open(MAP / artifact2attr_fileName, 'r', encoding='UTF-8') as f:
artifact2attr = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / weaponList_fileName, 'r', encoding='UTF-8'
) as f:
weaponList.update(msgjson.decode(await f.read(), type=Dict))
with open(MAP / icon2Name_fileName, 'r', encoding='UTF-8') as f:
icon2Name = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / avatarId2Name_fileName, 'r', encoding='UTF-8'
) as f:
avatarId2Name.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / name2Icon_fileName, 'r', encoding='UTF-8') as f:
name2Icon = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / icon2Name_fileName, 'r', encoding='UTF-8'
) as f:
icon2Name.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8') as f:
propId2Name = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / artifact2attr_fileName, 'r', encoding='UTF-8'
) as f:
artifact2attr.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / 'Id2propId_mapping.json', 'r', encoding='UTF-8') as f:
Id2PropId = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / icon2Name_fileName, 'r', encoding='UTF-8'
) as f:
icon2Name.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / weaponHash2Name_fileName, 'r', encoding='UTF-8') as f:
weaponHash2Name = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / name2Icon_fileName, 'r', encoding='UTF-8'
) as f:
name2Icon.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / weaponHash2Type_fileName, 'r', encoding='UTF-8') as f:
weaponHash2Type = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / 'propId2Name_mapping.json', 'r', encoding='UTF-8'
) as f:
propId2Name.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(
MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8'
) as f:
artifactId2Piece = msgjson.decode(f.read(), type=Dict[str, List[str]])
async with aiofiles.open(
MAP / 'Id2propId_mapping.json', 'r', encoding='UTF-8'
) as f:
Id2PropId.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / skillId2Name_fileName, 'r', encoding='UTF-8') as f:
skillId2Name = msgjson.decode(f.read(), type=TS)
async with aiofiles.open(
MAP / weaponHash2Name_fileName, 'r', encoding='UTF-8'
) as f:
weaponHash2Name.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / talentId2Name_fileName, 'r', encoding='UTF-8') as f:
talentId2Name = msgjson.decode(f.read(), type=TS)
async with aiofiles.open(
MAP / weaponHash2Type_fileName, 'r', encoding='UTF-8'
) as f:
weaponHash2Type.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / avatarName2Element_fileName, 'r', encoding='UTF-8') as f:
avatarName2Element = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / 'artifactId2Piece_mapping.json', 'r', encoding='UTF-8'
) as f:
artifactId2Piece.update(
msgjson.decode(await f.read(), type=Dict[str, List[str]])
)
with open(MAP / avatarName2Weapon_fileName, 'r', encoding='UTF-8') as f:
avatarName2Weapon = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / skillId2Name_fileName, 'r', encoding='UTF-8'
) as f:
skillId2Name.update(msgjson.decode(await f.read(), type=TS))
with open(MAP / 'char_alias.json', 'r', encoding='UTF-8') as f:
alias_data = msgjson.decode(f.read(), type=Dict[str, List[str]])
async with aiofiles.open(
MAP / talentId2Name_fileName, 'r', encoding='UTF-8'
) as f:
talentId2Name.update(msgjson.decode(await f.read(), type=TS))
with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f:
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / avatarName2Element_fileName, 'r', encoding='UTF-8'
) as f:
avatarName2Element.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / avatarId2Star_fileName, 'r', encoding='utf8') as f:
avatarId2Star_data = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / avatarName2Weapon_fileName, 'r', encoding='UTF-8'
) as f:
avatarName2Weapon.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / enName2Id_fileName, 'r', encoding='utf8') as f:
enName_to_avatarId_data = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / 'char_alias.json', 'r', encoding='UTF-8'
) as f:
alias_data.update(
msgjson.decode(await f.read(), type=Dict[str, List[str]])
)
with open(MAP / EXMonster_fileName, 'r', encoding='utf8') as f:
ex_monster_data = msgjson.decode(f.read(), type=Dict[str, Dict])
async with aiofiles.open(
MAP / avatarId2Star_fileName, 'r', encoding='utf8'
) as f:
avatarId2Star_data.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / monster2entry_fileName, 'r', encoding='utf8') as f:
monster2entry_data = msgjson.decode(f.read(), type=Dict[str, Dict])
async with aiofiles.open(
MAP / enName2Id_fileName, 'r', encoding='utf8'
) as f:
enName_to_avatarId_data.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
with open(MAP / avatarId2SkillList_fileName, 'r', encoding='utf8') as f:
avatarId2SkillList_data = msgjson.decode(
f.read(), type=Dict[str, Dict[str, str]]
)
async with aiofiles.open(
MAP / EXMonster_fileName, 'r', encoding='utf8'
) as f:
ex_monster_data.update(
msgjson.decode(await f.read(), type=Dict[str, Dict])
)
with open(MAP / weaponId2Name_fileName, 'r', encoding='utf8') as f:
weaponId2Name_data = msgjson.decode(f.read(), type=Dict[str, str])
async with aiofiles.open(
MAP / monster2entry_fileName, 'r', encoding='utf8'
) as f:
monster2entry_data.update(
msgjson.decode(await f.read(), type=Dict[str, Dict])
)
with open(MAP / mysData_fileName, 'r', encoding='utf8') as f:
mysData = msgjson.decode(f.read(), type=Dict)
async with aiofiles.open(
MAP / avatarId2SkillList_fileName, 'r', encoding='utf8'
) as f:
avatarId2SkillList_data.update(
msgjson.decode(await f.read(), type=Dict[str, Dict[str, str]])
)
with open(MAP / CharId2TalentIcon_fileName, 'r', encoding='utf8') as f:
CharId2TalentIcon_data = msgjson.decode(
f.read(), type=Dict[str, List[str]]
)
except FileNotFoundError:
logger.error('[GenshinUID] 未找到对应版本的映射文件')
async with aiofiles.open(
MAP / weaponId2Name_fileName, 'r', encoding='utf8'
) as f:
weaponId2Name_data.update(
msgjson.decode(await f.read(), type=Dict[str, str])
)
async with aiofiles.open(
MAP / mysData_fileName, 'r', encoding='utf8'
) as f:
mysData.update(msgjson.decode(await f.read(), type=Dict))
async with aiofiles.open(
MAP / CharId2TalentIcon_fileName, 'r', encoding='utf8'
) as f:
CharId2TalentIcon_data.update(
msgjson.decode(await f.read(), type=Dict[str, List[str]])
)
logger.success('[GenshinUID MAP] 资源文件加载完成')
except FileNotFoundError:
logger.error('[GenshinUID] 未找到对应版本的映射文件')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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": "瓦雷莎"}

View File

@ -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": "塔利雅"}

View File

@ -1,479 +1,556 @@
{
"10000002": {
"233": "神里流·霰步",
"0": "雷主角小技能白盒测试1",
"232": "神里流·冰华",
"239": "神里流·霜灭",
"231": "普通攻击·神里流·倾"
"231": "神里流·倾"
},
"10000003": {
"0": "琴队伍机制",
"331": "西风剑术",
"332": "风压剑",
"339": "蒲公英之风"
},
"10000021": {
"2139": "箭雨",
"2132": "爆弹玩偶",
"2131": "普通攻击·神射手"
},
"10000003": {
"331": "普通攻击·西风剑术",
"332": "风压剑",
"339": "蒲公英之风"
"2131": "神射手",
"0": "菲谢尔小技能"
},
"10000006": {
"431": "普通攻击·指尖雷暴",
"431": "指尖雷暴",
"432": "苍雷",
"439": "蔷薇的雷光"
},
"10000014": {
"1431": "普通攻击·水之浅唱",
"1431": "水之浅唱",
"1432": "演唱,开始♪",
"1439": "闪耀奇迹♪"
"1439": "闪耀奇迹♪",
"0": "Barbara天赋技能"
},
"10000015": {
"1531": "普通攻击·仪典剑术",
"1531": "仪典剑术",
"1532": "霜袭",
"1539": "凛冽轮舞"
},
"10000016": {
"1631": "普通攻击·淬炼之剑",
"1631": "淬炼之剑",
"1632": "逆焰之刃",
"0": "Diluc队伍机制",
"1639": "黎明"
},
"10000020": {
"2031": "普通攻击·钢脊",
"2031": "钢脊",
"2032": "利爪与苍雷",
"2039": "雷牙"
"2039": "雷牙",
"0": "Rx白盒测试技能2"
},
"10000022": {
"2231": "普通攻击·神代射术",
"2231": "神代射术",
"0": "温迪长按瞄准",
"2232": "高天之歌",
"2239": "风神之诗"
},
"10000023": {
"2331": "普通攻击·白案功夫",
"2331": "白案功夫",
"2332": "锅巴出击",
"2339": "旋火轮"
},
"10000024": {
"2431": "普通攻击·征涛",
"2431": "征涛",
"2432": "捉浪",
"2439": "斫雷"
"2439": "斫雷",
"0": "菲谢尔充能技"
},
"10000026": {
"2631": "普通攻击·卷积微尘",
"2631": "卷积微尘",
"2632": "风轮两立",
"0": "魈冲抓(空中)",
"2639": "靖妖傩舞"
},
"10000027": {
"2731": "普通攻击·千金掷",
"2731": "千金掷",
"2732": "璇玑屏",
"0": "凝光小技能替换技能",
"2739": "天权崩玉"
},
"10000029": {
"2931": "普通攻击·砰砰",
"2931": "砰砰",
"2932": "蹦蹦炸弹",
"2939": "轰轰火花"
},
"10000030": {
"3031": "普通攻击·岩雨",
"3031": "岩雨",
"3032": "地心",
"3039": "天星"
},
"10000031": {
"3131": "普通攻击·罪灭之矢",
"3131": "罪灭之矢",
"3132": "夜巡影翼",
"3139": "至夜幻现"
"3139": "至夜幻现",
"0": "菲谢尔小技能-重置乌鸦位置"
},
"10000032": {
"3231": "普通攻击·好运剑",
"3231": "好运剑",
"3232": "热情过载",
"3239": "美妙旅程"
},
"10000033": {
"3331": "普通攻击·断雨",
"3331": "断雨",
"3332": "魔王武装·狂澜",
"3339": "极恶技·尽灭闪"
"3339": "极恶技·尽灭闪",
"0": "达达利亚近战姿态普攻"
},
"10000034": {
"3431": "普通攻击·西风剑术·女仆",
"3431": "西风剑术·女仆",
"3432": "护心铠",
"3439": "大扫除"
},
"10000035": {
"3531": "普通攻击·云来古剑法",
"3531": "云来古剑法",
"3532": "仙法·寒病鬼差",
"3539": "仙法·救苦度厄"
"3539": "仙法·救苦度厄",
"0": "七七复活技能"
},
"10000037": {
"3731": "普通攻击·流天射术",
"3731": "流天射术",
"3732": "山泽麟迹",
"3739": "降众天华"
"3739": "降众天华",
"0": "柯莱瞄准模式"
},
"10000025": {
"2531": "普通攻击·古华剑法",
"2531": "古华剑法",
"2532": "古华剑·画雨笼山",
"2539": "古华剑·裁雨留虹"
},
"10000038": {
"3831": "普通攻击·西风剑术·白",
"3831": "西风剑术·白",
"3832": "创生法·拟造阳华",
"3839": "诞生式·大地之潮"
},
"10000039": {
"3931": "普通攻击·猎人射术",
"3931": "猎人射术",
"3932": "猫爪冻冻",
"0": "迪奥娜长按瞄准",
"3939": "最烈特调"
},
"10000041": {
"4131": "普通攻击·因果点破",
"4131": "因果点破",
"4132": "水中幻愿",
"4133": "虚实流动",
"4139": "星命定轨"
},
"10000042": {
"4231": "普通攻击·云来剑法",
"4231": "云来剑法",
"4232": "星斗归位",
"0": "星斗归位",
"4239": "天街巡游"
},
"10000043": {
"4331": "普通攻击·简式风灵作成",
"4331": "简式风灵作成",
"4332": "风灵作成·陆叁零捌",
"0": "砂糖空中跳跃(伪)",
"4339": "禁·风灵作成·柒伍同构贰型"
},
"10000044": {
"4431": "普通攻击·炎舞",
"4431": "炎舞",
"4432": "热情拂扫",
"4439": "叛逆刮弦"
},
"10000045": {
"4531": "普通攻击·教会枪术",
"4531": "教会枪术",
"4532": "噬罪的告解",
"4539": "终命的圣礼"
},
"10000046": {
"4631": "普通攻击·往生秘传枪法",
"4631": "往生秘传枪法",
"4632": "蝶引来生",
"4639": "安神秘法"
},
"10000047": {
"4731": "普通攻击·我流剑术",
"4731": "我流剑术",
"4732": "千早振",
"0": "下落攻击·乱岚拨止",
"4739": "万叶之一刀"
},
"10000048": {
"4831": "普通攻击·火漆制印",
"4831": "火漆制印",
"4832": "丹书立约",
"4839": "凭此结契"
},
"10000049": {
"4931": "普通攻击·烟火打扬",
"4931": "烟火打扬",
"4932": "焰硝庭火舞",
"0": "宵宫长按瞄准/瞄准模式",
"4939": "琉金云间草"
},
"10000050": {
"5031": "普通攻击·迅破枪势",
"5031": "迅破枪势",
"5032": "烈烧佑命之侍护",
"5039": "真红炽火之大铠"
},
"10000051": {
"5131": "普通攻击·西风剑术·宗室",
"5131": "西风剑术·宗室",
"5132": "冰潮的涡旋",
"5139": "凝浪之光剑"
},
"10000052": {
"5231": "普通攻击·源流",
"5231": "源流",
"5232": "神变·恶曜开眼",
"5239": "奥义·梦想真说"
},
"10000053": {
"5331": "普通攻击·忍刀·终末番",
"5331": "忍刀·终末番",
"5332": "呜呼流·风隐急进",
"0": "呜呼流·风隐急进",
"5339": "呜呼流·影貉缭乱"
},
"10000054": {
"5431": "普通攻击·水有常形",
"5431": "水有常形",
"5432": "海月之誓",
"5439": "海人化羽"
},
"10000055": {
"5531": "普通攻击·呲牙裂扇箭",
"5531": "呲牙裂扇箭",
"5532": "犬坂吠吠方圆阵",
"0": "五郎长按瞄准",
"5539": "兽牙逐突形胜战法"
},
"10000056": {
"5631": "普通攻击·天狗传弓术",
"5631": "天狗传弓术",
"5632": "鸦羽天狗霆雷召咒",
"0": "九条裟罗长按瞄准",
"5639": "煌煌千道镇式"
},
"10000057": {
"5731": "普通攻击· 喧哗屋传说",
"5731": "喧哗屋传说",
"5732": "魔杀绝技·赤牛发破!",
"5739": "最恶鬼王·一斗轰临!!"
},
"10000058": {
"5831": "普通攻击·狐灵食罪式",
"5831": "狐灵食罪式",
"5832": "野干役咒·杀生樱",
"5839": "大密法·天狐显真"
},
"10000059": {
"5931": "普通攻击·不动流格斗术",
"5931": "不动流格斗术",
"5932": "勠心拳",
"5939": "聚风蹴"
},
"10000060": {
"6031": "普通攻击·潜形隐曜弓",
"6031": "潜形隐曜弓",
"6032": "萦络纵命索",
"0": "夜兰-元素战技",
"6039": "渊图玲珑骰"
},
"10000061": {
"6131": "普通攻击·箱纸切削术",
"6131": "箱纸切削术",
"6132": "呜喵町飞足",
"0": "测试占位",
"6139": "秘法·惊喜特派"
},
"10000062": {
"6231": "普通攻击·快速射击",
"6231": "快速射击",
"6232": "冰尘雪野",
"0": "埃洛伊瞄准射击",
"6239": "曙光预言"
},
"10000063": {
"6331": "普通攻击·踏辰摄斗",
"6331": "踏辰摄斗",
"6332": "仰灵威召将役咒",
"6339": "神女遣灵真诀"
},
"10000064": {
"6431": "普通攻击·拂云出手",
"6431": "拂云出手",
"6432": "旋云开相",
"6439": "破嶂见旌仪"
},
"10000065": {
"6531": "普通攻击·忍流飞刃斩",
"6531": "忍流飞刃斩",
"6532": "越祓雷草之轮",
"6539": "御咏鸣神刈山祭"
},
"10000066": {
"6631": "普通攻击·神里流·转",
"6631": "神里流·转",
"6632": "神里流·镜花",
"6639": "神里流·水囿"
},
"10000067": {
"6731": "普通攻击·祈颂射艺",
"6731": "祈颂射艺",
"6732": "拂花偈叶",
"6739": "猫猫秘宝"
},
"10000068": {
"6831": "普通攻击·妙显剑舞·改",
"6831": "妙显剑舞·改",
"6832": "镇灵之灯·烦恼解决炮",
"6839": "卡萨扎莱宫的无微不至"
},
"10000069": {
"6931": "普通攻击·藏蕴破障",
"6931": "藏蕴破障",
"6932": "识果种雷",
"0": "提纳里长按/瞄准模式",
"6939": "造生缠藤箭"
},
"10000070": {
"7031": "普通攻击·弦月舞步",
"7031": "弦月舞步",
"7032": "七域舞步",
"0": "妮露元素战技1命六用",
"7039": "浮莲舞步·远梦聆泉"
},
"10000071": {
"7131": "普通攻击·七圣枪术",
"7131": "七圣枪术",
"7132": "秘仪·律渊渡魂",
"0": "赛诺元素战技开大后",
"7139": "圣仪·煟煌随狼行"
},
"10000072": {
"7231": "普通攻击·流耀枪术·守势",
"7231": "流耀枪术·守势",
"7232": "圣仪·苍鹭庇卫",
"7239": "圣仪·灰鸰衒潮"
},
"10000073": {
"7331": "普通攻击·行相",
"7331": "行相",
"7332": "所闻遍计",
"7339": "心景幻成"
},
"10000074": {
"7431": "普通攻击·熠辉轨度剑",
"7431": "熠辉轨度剑",
"7432": "垂裳端凝之夜",
"7439": "星流摇床之梦"
},
"10000075": {
"7531": "普通攻击·行幡鸣弦",
"7531": "行幡鸣弦",
"7532": "羽画·风姿华歌",
"0": "流浪者元素战技",
"7539": "狂言·式乐五番"
},
"10000076": {
"7631": "普通攻击·迴身箭术",
"7631": "迴身箭术",
"7632": "非想风天",
"0": "珐露珊长按/瞄准模式",
"7639": "抟风秘道"
},
"10000077": {
"7731": "普通攻击·颠扑连环枪",
"7731": "颠扑连环枪",
"7732": "云台团团降芦菔",
"7739": "玉颗珊珊月中落"
},
"10000078": {
"7831": "普通攻击·溯因反绎法",
"7831": "溯因反绎法",
"7832": "共相·理式摹写",
"7839": "殊境·显象缚结"
},
"10000079": {
"7931": "普通攻击·拂金剑斗术",
"7931": "拂金剑斗术",
"7932": "熔铁流狱",
"0": "迪希雅元素爆发_QTE",
"7939": "炎啸狮子咬"
},
"10000080": {
"8031": "普通攻击·西风枪术·镝传",
"8031": "西风枪术·镝传",
"8032": "星霜的流旋",
"8039": "苍翎的颂愿"
},
"10000081": {
"8131": "普通攻击·旋规设矩",
"8131": "旋规设矩",
"8132": "画则巧施",
"8139": "繁绘隅穹"
},
"10000082": {
"8231": "普通攻击·金匮针解",
"8231": "金匮针解",
"8232": "太素诊要",
"8239": "愈气全形论"
},
"10000083": {
"8331": "普通攻击·迅捷礼刺剑",
"8331": "迅捷礼刺剑",
"8332": "谜影障身法",
"0": "琳妮特元素战技",
"8339": "魔术·运变惊奇"
},
"10000084": {
"8431": "普通攻击·迫牌易位式",
"8431": "迫牌易位式",
"8432": "眩惑光戏法",
"0": "林尼瞄准射击",
"8439": "大魔术·灵迹巡游"
},
"10000085": {
"8531": "普通攻击·洑流剑",
"8531": "洑流剑",
"8532": "浮冰增压",
"0": "菲米尼浮冰增压3段E3",
"8539": "猎影潜袭"
},
"10000086": {
"8631": "普通攻击·迅烈倾霜拳",
"8631": "迅烈倾霜拳",
"8632": "冰牙突驰",
"8639": "黑金狼噬"
},
"10000087": {
"8731": "普通攻击·如水从平",
"8731": "如水从平",
"8732": "泪水啊,我必偿还",
"8739": "潮水啊,我已归来"
},
"10000088": {
"8831": "普通攻击·冷色摄影律",
"8831": "冷色摄影律",
"8832": "取景·冰点构图法",
"8839": "定格·全方位确证"
},
"10000089": {
"8931": "普通攻击·独舞之邀",
"8931": "独舞之邀",
"8932": "孤心沙龙",
"0": "芙宁娜元素战技-芒",
"8939": "万众狂欢"
},
"10000090": {
"9031": "普通攻击·线列枪刺·改",
"9031": "线列枪刺·改",
"9032": "近迫式急促拦射",
"9039": "圆阵掷弹爆轰术"
},
"10000091": {
"9131": "普通攻击·直率的辞绝",
"9131": "直率的辞绝",
"9132": "典仪式晶火",
"9139": "如霰澄天的鸣礼"
},
"10000092": {
"9231": "普通攻击·刃爪悬星",
"9231": "刃爪悬星",
"9232": "瑞兽登高楼",
"0": "嘉明元素战技.下落攻击",
"9239": "璨焰金猊舞"
},
"10000093": {
"9331": "普通攻击·清风散花词",
"9331": "清风散花词",
"9332": "朝起鹤云",
"0": "留云元素战技_鹤形追击",
"9339": "暮集竹星"
},
"10000094": {
"9431": "普通攻击·心织刀流",
"9431": "心织刀流",
"9432": "羽袖一触",
"0": "千织二段E后-技能替换",
"9439": "二刀之形·比翼"
},
"10000095": {
"9531": "普通攻击·靶向治疗",
"9531": "靶向治疗",
"9532": "弹跳水疗法",
"0": "希格雯长按瞄准",
"9539": "过饱和心意注射"
},
"10000096": {
"9631": "普通攻击·斩首之邀",
"9631": "斩首之邀",
"9632": "万相化灰",
"0": "元素战技替换技能",
"9639": "厄月将升"
},
"10000097": {
"9731": "普通攻击·王家苇箭术",
"9731": "王家苇箭术",
"9732": "古仪·鸣砂掣雷",
"0": "赛索斯瞄准射击",
"9739": "秘仪·瞑光贯影"
},
"10000098": {
"9831": "普通攻击·逐影之誓",
"9831": "逐影之誓",
"9832": "狩夜之巡",
"0": "克洛琳德元素战技-闪避",
"9839": "残光将终"
},
"10000099": {
"9931": "普通攻击·逐影枪术·改",
"9931": "逐影枪术·改",
"9932": "撷萃调香",
"9939": "香氛演绎"
},
"10000100": {
"10031": "普通攻击·嵴之啮咬",
"10031": "嵴之啮咬",
"10032": "出击,冲天转转!",
"0": "卡齐娜夜魂接力技",
"10039": "现在,认真时间!"
},
"10000101": {
"10131": "普通攻击·夜阳斗技",
"10131": "夜阳斗技",
"10132": "悬猎·游骋高狩",
"0": "基尼奇空中喷射",
"10139": "向伟大圣龙致意"
},
"10000103": {
"10331": "普通攻击·锐锋攫猎",
"10331": "锐锋攫猎",
"10332": "音火锻淬",
"10339": "豹烈律动!"
"10339": "豹烈律动!",
"0": "希诺宁-夜魂接力技"
},
"10000104": {
"10431": "普通攻击·迷羽流击",
"10431": "迷羽流击",
"10432": "灵缰追影",
"0": "恰斯卡浮空冲刺",
"10439": "索魂命袭"
},
"10000106": {
"10631": "普通攻击·以火织命",
"10631": "以火织命",
"10632": "称名之刻",
"0": "玛薇卡空中攻击",
"10639": "燔天之时"
},
"10000107": {
"10731": "普通攻击·宿灵捕影",
"10731": "宿灵捕影",
"10732": "霜昼黑星",
"0": "茜特菈莉特殊跳跃",
"10739": "诸曜饬令"
},
"10000108": {
"10831": "普通攻击·玄鸾画水",
"10831": "玄鸾画水",
"10832": "凤缕随翦舞",
"0": "蓝砚元素战技替换",
"10839": "鹍弦踏月出"
},
"10000109": {
"10931": "普通攻击·梦我梦心",
"10931": "梦我梦心",
"10932": "秋沙歌枕巡礼",
"0": "梦见月浮游受身",
"10939": "安乐秘汤疗法"
},
"10000110": {
"11031": "普通攻击·负重锥击",
"11031": "负重锥击",
"11032": "电掣雷驰",
"0": "伊安珊夜魂态冲刺,仅换图标用",
"11039": "力的三原理"
},
"10000111": {
"11131": "普通攻击·角力搏摔",
"11131": "角力搏摔",
"11132": "夜虹逐跃",
"11139": "闪烈降临!"
"11139": "闪烈降临!",
"0": "瓦雷莎二段冲刺期间-元素战技替换"
},
"10000112": {
"11231": "后厨手艺",
"11232": "低温烹饪",
"11239": "花刀技法"
},
"10000113": {
"11331": "祛风妙仪",
"11332": "空天疾护",
"0": "伊法夜魂接力战技",
"11339": "复合镇静域"
},
"10000114": {
"11431": "极恶技·断",
"11432": "极恶技·闪",
"11439": "极恶技·灭",
"0": "丝柯克元素爆发替换"
},
"10000115": {
"11531": "西风剑术·祭仪",
"11532": "圣浸的礼典",
"11539": "纯耀的祷咏",
"0": "塔利雅命6复活技"
},
"10000102": {
"10231": "普通攻击·降温处理",
"10231": "降温处理",
"10232": "踏鲨破浪",
"0": "游猎S弧光空中攻击技",
"10239": "爆瀑飞弹"
},
"10000105": {
"10531": "普通攻击·宿灵闪箭",
"10531": "宿灵闪箭",
"10532": "暝色缒索",
"0": "特殊跳跃",
"10539": "黯声回响"
},
"10000036": {

View File

@ -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"}

View File

@ -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"}

View File

@ -1 +1 @@
{"神里绫华": "单手剑", "琴": "单手剑", "丽莎": "法器", "芭芭拉": "法器", "凯亚": "单手剑", "迪卢克": "双手剑", "雷泽": "双手剑", "安柏": "弓", "温迪": "弓", "香菱": "长柄武器", "北斗": "双手剑", "行秋": "单手剑", "魈": "长柄武器", "凝光": "法器", "可莉": "法器", "钟离": "长柄武器", "菲谢尔": "弓", "班尼特": "单手剑", "达达利亚": "弓", "诺艾尔": "双手剑", "七七": "单手剑", "重云": "双手剑", "甘雨": "弓", "阿贝多": "单手剑", "迪奥娜": "弓", "莫娜": "法器", "刻晴": "单手剑", "砂糖": "法器", "辛焱": "双手剑", "罗莎莉亚": "长柄武器", "胡桃": "长柄武器", "枫原万叶": "单手剑", "烟绯": "法器", "宵宫": "弓", "托马": "长柄武器", "优菈": "双手剑", "雷电将军": "长柄武器", "早柚": "双手剑", "珊瑚宫心海": "法器", "五郎": "弓", "九条裟罗": "弓", "荒泷一斗": "双手剑", "八重神子": "法器", "鹿野院平藏": "法器", "夜兰": "弓", "绮良良": "单手剑", "埃洛伊": "弓", "申鹤": "长柄武器", "云堇": "长柄武器", "久岐忍": "单手剑", "神里绫人": "单手剑", "柯莱": "弓", "多莉": "双手剑", "提纳里": "弓", "妮露": "单手剑", "赛诺": "长柄武器", "坎蒂丝": "长柄武器", "纳西妲": "法器", "莱依拉": "单手剑", "流浪者": "法器", "珐露珊": "弓", "瑶瑶": "长柄武器", "艾尔海森": "单手剑", "迪希雅": "双手剑", "米卡": "长柄武器", "卡维": "双手剑", "白术": "法器", "琳妮特": "单手剑", "林尼": "弓", "菲米尼": "双手剑", "莱欧斯利": "法器", "那维莱特": "法器", "夏洛蒂": "法器", "芙宁娜": "单手剑", "夏沃蕾": "长柄武器", "娜维娅": "双手剑", "嘉明": "双手剑", "闲云": "法器", "千织": "单手剑", "希格雯": "弓", "阿蕾奇诺": "长柄武器", "赛索斯": "弓", "克洛琳德": "单手剑", "艾梅莉埃": "长柄武器", "卡齐娜": "长柄武器", "基尼奇": "双手剑", "玛拉妮": "法器", "希诺宁": "单手剑", "恰斯卡": "弓", "欧洛伦": "弓", "玛薇卡": "双手剑", "茜特菈莉": "法器", "蓝砚": "法器", "梦见月瑞希": "法器", "伊安珊": "长柄武器", "瓦雷莎": "法器", "旅行者": "单手剑"}
{"神里绫华": "单手剑", "琴": "单手剑", "丽莎": "法器", "芭芭拉": "法器", "凯亚": "单手剑", "迪卢克": "双手剑", "雷泽": "双手剑", "安柏": "弓", "温迪": "弓", "香菱": "长柄武器", "北斗": "双手剑", "行秋": "单手剑", "魈": "长柄武器", "凝光": "法器", "可莉": "法器", "钟离": "长柄武器", "菲谢尔": "弓", "班尼特": "单手剑", "达达利亚": "弓", "诺艾尔": "双手剑", "七七": "单手剑", "重云": "双手剑", "甘雨": "弓", "阿贝多": "单手剑", "迪奥娜": "弓", "莫娜": "法器", "刻晴": "单手剑", "砂糖": "法器", "辛焱": "双手剑", "罗莎莉亚": "长柄武器", "胡桃": "长柄武器", "枫原万叶": "单手剑", "烟绯": "法器", "宵宫": "弓", "托马": "长柄武器", "优菈": "双手剑", "雷电将军": "长柄武器", "早柚": "双手剑", "珊瑚宫心海": "法器", "五郎": "弓", "九条裟罗": "弓", "荒泷一斗": "双手剑", "八重神子": "法器", "鹿野院平藏": "法器", "夜兰": "弓", "绮良良": "单手剑", "埃洛伊": "弓", "申鹤": "长柄武器", "云堇": "长柄武器", "久岐忍": "单手剑", "神里绫人": "单手剑", "柯莱": "弓", "多莉": "双手剑", "提纳里": "弓", "妮露": "单手剑", "赛诺": "长柄武器", "坎蒂丝": "长柄武器", "纳西妲": "法器", "莱依拉": "单手剑", "流浪者": "法器", "珐露珊": "弓", "瑶瑶": "长柄武器", "艾尔海森": "单手剑", "迪希雅": "双手剑", "米卡": "长柄武器", "卡维": "双手剑", "白术": "法器", "琳妮特": "单手剑", "林尼": "弓", "菲米尼": "双手剑", "莱欧斯利": "法器", "那维莱特": "法器", "夏洛蒂": "法器", "芙宁娜": "单手剑", "夏沃蕾": "长柄武器", "娜维娅": "双手剑", "嘉明": "双手剑", "闲云": "法器", "千织": "单手剑", "希格雯": "弓", "阿蕾奇诺": "长柄武器", "赛索斯": "弓", "克洛琳德": "单手剑", "艾梅莉埃": "长柄武器", "卡齐娜": "长柄武器", "基尼奇": "双手剑", "玛拉妮": "法器", "希诺宁": "单手剑", "恰斯卡": "弓", "欧洛伦": "弓", "玛薇卡": "双手剑", "茜特菈莉": "法器", "蓝砚": "法器", "梦见月瑞希": "法器", "伊安珊": "长柄武器", "瓦雷莎": "法器", "爱可菲": "长柄武器", "伊法": "法器", "丝柯克": "单手剑", "塔利雅": "单手剑", "旅行者": "单手剑"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -937,5 +937,34 @@
"瓦蕾沙",
"瓦雷莎",
"瓦雷沙"
],
"爱可菲": [
"厨娘",
"艾克非",
"艾克飞",
"爱可非",
"爱克菲"
],
"伊法": [
"哥们",
"依法",
"哥门",
"ifa",
"一法"
],
"塔利雅": [
"塔利亚",
"塔莉亚",
"塔莉娅",
"塔利娅"
],
"丝柯克": [
"skk",
"斯柯克",
"蛇",
"柯克",
"思科克",
"丝珂克",
"丝珂珂"
]
}

View File

@ -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"}

View File

@ -34033,6 +34033,155 @@
"route": "Secret Source Automaton: Configuration Device",
"icon": "UI_MonsterIcon_DragonClaw"
},
"24090501": {
"id": 24090501,
"type": "MONSTER_BOSS",
"affix": null,
"hpDrops": [
{
"id": 22010030,
"hpPercent": 75
},
{
"id": 22010030,
"hpPercent": 50
},
{
"id": 22010030,
"hpPercent": 25
}
],
"prop": [
{
"propType": "FIGHT_PROP_BASE_HP",
"initValue": 293.4144,
"type": "GROW_CURVE_HP_2"
},
{
"propType": "FIGHT_PROP_BASE_ATTACK",
"initValue": 100.48,
"type": "GROW_CURVE_ATTACK_2"
},
{
"propType": "FIGHT_PROP_BASE_DEFENSE",
"initValue": 500,
"type": "GROW_CURVE_DEFENSE"
}
],
"resistance": {
"fireSubHurt": 0.1,
"grassSubHurt": 0.1,
"waterSubHurt": 0.1,
"elecSubHurt": 0.1,
"windSubHurt": 0.1,
"iceSubHurt": 0.1,
"rockSubHurt": 0.1,
"physicalSubHurt": 0.1
},
"fundamentalForce": null,
"reward": {
"102": {
"name": "冒险阅历",
"rank": 3,
"icon": "UI_ItemIcon_102",
"count": "200"
},
"105": {
"name": "好感经验",
"rank": 3,
"icon": "UI_ItemIcon_105"
},
"202": {
"name": "摩拉",
"rank": 3,
"icon": "UI_ItemIcon_202"
},
"104121": {
"name": "涤净青金碎屑",
"rank": 2,
"icon": "UI_ItemIcon_104121"
},
"104122": {
"name": "涤净青金断片",
"rank": 3,
"icon": "UI_ItemIcon_104122"
},
"104123": {
"name": "涤净青金块",
"rank": 4,
"icon": "UI_ItemIcon_104123"
},
"104124": {
"name": "涤净青金",
"rank": 5,
"icon": "UI_ItemIcon_104124"
},
"113076": {
"name": "秘源积气喉",
"rank": 4,
"icon": "UI_ItemIcon_113076",
"count": "2.5556"
},
"400022": {
"name": "战狂",
"rank": 3,
"icon": "UI_RelicIcon_10005_4"
},
"400023": {
"name": "战狂",
"rank": 4,
"icon": "UI_RelicIcon_10005_4"
},
"400042": {
"name": "流放者",
"rank": 3,
"icon": "UI_RelicIcon_10009_4"
},
"400043": {
"name": "流放者",
"rank": 4,
"icon": "UI_RelicIcon_10009_4"
},
"400047": {
"name": "冒险家",
"rank": 3,
"icon": "UI_RelicIcon_10010_4"
},
"400088": {
"name": "角斗士的终幕礼",
"rank": 4,
"icon": "UI_RelicIcon_15001_4"
},
"400089": {
"name": "角斗士的终幕礼",
"rank": 5,
"icon": "UI_RelicIcon_15001_4"
},
"400098": {
"name": "流浪大地的乐团",
"rank": 4,
"icon": "UI_RelicIcon_15003_4"
},
"400099": {
"name": "流浪大地的乐团",
"rank": 5,
"icon": "UI_RelicIcon_15003_4"
},
"400132": {
"name": "祭水之人",
"rank": 3,
"icon": "UI_RelicIcon_15010_3"
},
"400133": {
"name": "祭水之人",
"rank": 4,
"icon": "UI_RelicIcon_15010_3"
}
},
"name": "秘源机兵·统御械",
"route": "Secret Source Automaton: Overseer Device",
"icon": "UI_MonsterIcon_DragonCollar"
},
"25010201": {
"id": 25010201,
"type": "MONSTER_ORDINARY",
@ -59867,5 +60016,43 @@
"name": "蚀灭的源焰之主",
"route": "Lord of Eroded Primal Fire",
"icon": "UI_MonsterIcon_TheAbyssXiuhcoatl"
},
"29122000": {
"id": 29122000,
"type": "MONSTER_BOSS",
"affix": null,
"hpDrops": null,
"prop": [
{
"propType": "FIGHT_PROP_BASE_HP",
"initValue": 679.2,
"type": "GROW_CURVE_HP_2"
},
{
"propType": "FIGHT_PROP_BASE_ATTACK",
"initValue": 125.6,
"type": "GROW_CURVE_ATTACK_2"
},
{
"propType": "FIGHT_PROP_BASE_DEFENSE",
"initValue": 500,
"type": "GROW_CURVE_DEFENSE"
}
],
"resistance": {
"fireSubHurt": 0.1,
"grassSubHurt": 0.1,
"waterSubHurt": 0.1,
"elecSubHurt": 0.7,
"windSubHurt": 0.7,
"iceSubHurt": 0.1,
"rockSubHurt": 0.1,
"physicalSubHurt": 0.1
},
"fundamentalForce": null,
"reward": null,
"name": "门扉前的弈局",
"route": "The Game Before the Gate",
"icon": "UI_MonsterIcon_GiantChess"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More