diff --git a/.gitignore b/.gitignore index 12bb89c..a799a2c 100644 --- a/.gitignore +++ b/.gitignore @@ -665,9 +665,8 @@ FodyWeavers.xsd ### CI ### result.txt -### GenshinUID ### -*.xlsx -all_image +### BADATA ### +SchaleDB ### Debug ### testnb2/ diff --git a/BlueArchiveUID/bauid_info/__init__.py b/BlueArchiveUID/bauid_info/__init__.py new file mode 100644 index 0000000..a573bf2 --- /dev/null +++ b/BlueArchiveUID/bauid_info/__init__.py @@ -0,0 +1,31 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.utils.database.api import get_uid + +from ..utils.database.models import BaBind +from .draw_user_info_pic import draw_user_info_img + +ba_user_info = SV('ba用户信息') + + +@ba_user_info.on_command(('ba查询'), block=True) +async def send_ba_user_info(bot: Bot, ev: Event): + fcode, user_id = await get_uid( + bot, ev, BaBind, partten=r'[A-Za-z0-9::]+', get_user_id=True + ) + + if not fcode: + return await bot.send( + '未绑定好友码, 请先使用[ba绑定vlhy4mw]绑定好友码...\n如需临时查询,请使用[ba查询vlhy4mw:1]' + ) + + fcode = fcode.replace(':', ':') + + if ':' not in fcode or not fcode.endswith(('1', '2')): + return await bot.send( + '好友码需在末尾携带:符号以确认服务器\n:1为官服,:2为b服\n例如ba查询vlhy4mw:1即为查询官服vlhy4mw好友码' + ) + + im = await draw_user_info_img(fcode, ev, user_id) + await bot.send(im) diff --git a/BlueArchiveUID/bauid_info/draw_user_info_pic.py b/BlueArchiveUID/bauid_info/draw_user_info_pic.py new file mode 100644 index 0000000..4d035f0 --- /dev/null +++ b/BlueArchiveUID/bauid_info/draw_user_info_pic.py @@ -0,0 +1,240 @@ +from pathlib import Path +from typing import Union + +from PIL import Image, ImageDraw +from gsuid_core.models import Event +from gsuid_core.utils.image.convert import convert_img +from gsuid_core.utils.fonts.fonts import core_font as cf +from gsuid_core.utils.image.image_tools import ( + crop_center_img, + get_event_avatar, + draw_pic_with_ring, +) + +from ..utils.ba_api import xtzx_api +from ..utils.error_reply import get_error +from ..utils.resource_path import ( + SKILL_ICON_PATH, + WEAPON_ICON_PATH, + EQUIPMENT_ICON_PATH, + STUDENT_COLLECTION_PATH, +) +from ..utils.ba_map import ( + equipId2Icon, + weaponId2Nmae, + studentId2Name, + studentId2Type, + studentSkill2Icon, + studentId2weaponIcon, +) + +TEXT_PATH = Path(__file__).parent / 'texture2d' +BLACK = (37, 37, 37) +GREY = (95, 102, 110) +weapon_star_full = Image.open(TEXT_PATH / 'weapon_star_full.png') +weapon_star_empty = Image.open(TEXT_PATH / 'weapon_star_empty.png') +footer = Image.open(TEXT_PATH / 'footer.png') + +COLOR_MAP = { + 'explosion': (144, 1, 8), + 'pierce': (218, 160, 39), + 'mystic': (34, 111, 155), + 'sonic': (103, 79, 167), +} + + +async def draw_user_info_img( + _fcode: str, ev: Event, user_id: str +) -> Union[str, bytes]: + fcode, server = _fcode.split(':') + data = await xtzx_api.get_xtzx_friend_data(fcode, server) + + if isinstance(data, int): + return get_error(data) + + w, h = 1100, 2880 + img = crop_center_img(Image.open(TEXT_PATH / 'bg.jpg'), w, h) + img = img.convert('RGBA') + + title = Image.open(TEXT_PATH / 'title.png') + title_draw = ImageDraw.Draw(title) + avatar = await get_event_avatar(ev) + avatar = await draw_pic_with_ring(avatar, 308) + title.paste(avatar, (396, 57), avatar) + title_draw.text((550, 432), f'UserID: {user_id}', BLACK, cf(30), 'mm') + + img.paste(title, (0, 0), title) + + bar1 = Image.open(TEXT_PATH / 'bar.png') + bar2 = Image.open(TEXT_PATH / 'bar.png') + bar3 = Image.open(TEXT_PATH / 'bar.png') + bar1draw = ImageDraw.Draw(bar1) + bar2draw = ImageDraw.Draw(bar2) + bar3draw = ImageDraw.Draw(bar3) + bar1draw.text((550, 40), '基本信息', BLACK, cf(34), 'mm') + bar2draw.text((550, 40), '总力助战', BLACK, cf(34), 'mm') + bar3draw.text((550, 40), '演习助战', BLACK, cf(34), 'mm') + + img.paste(bar1, (0, 475), bar1) + img.paste(bar2, (0, 865), bar2) + img.paste(bar3, (0, 1845), bar3) + + avatar_card = Image.open(TEXT_PATH / 'avatar_card.png') + + game_avatar_id = data['representCharacterUniqueId'] + avatar_path = STUDENT_COLLECTION_PATH / f'{game_avatar_id}.webp' + game_avatar = Image.open(avatar_path).convert('RGBA') + + game_nickname = data['nickname'] + game_comment = data['comment'] + game_level = str(data['level']) + friend_count = str(data['friendCount']) + count_str = f'好友数 {friend_count}/30' + + avatar_card_draw = ImageDraw.Draw(avatar_card) + avatar_card.paste(game_avatar, (58, 87), game_avatar) + + avatar_card_draw.text((308, 177), game_nickname, GREY, cf(44), 'lm') + avatar_card_draw.text((308, 284), game_comment, GREY, cf(28), 'lm') + + avatar_card_draw.text((497, 118), count_str, BLACK, cf(25), 'mm') + avatar_card_draw.text((669, 118), f'{fcode}', BLACK, cf(25), 'mm') + avatar_card_draw.text((816, 118), f'等级{game_level}', BLACK, cf(25), 'mm') + + img.paste(avatar_card, (0, 491), avatar_card) + + assist_list = data['assistInfoList'] + + _assist_list = [] + for i in assist_list: + if i['echelonType'] == 2: + _assist_list.append(i) + else: + while len(_assist_list) < 2: + _assist_list.append({}) + for i in assist_list: + if i['echelonType'] == 15: + _assist_list.append(i) + else: + while len(_assist_list) < 4: + _assist_list.append({}) + + for index, assist in enumerate(_assist_list): + assist_card = Image.open(TEXT_PATH / 'assist_bg.png') + if assist: + assist_draw = ImageDraw.Draw(assist_card) + + student_id = assist['uniqueId'] + student_star = assist['starGrade'] + student_level = assist['level'] + student_star_pic = Image.open( + TEXT_PATH / f'star{student_star}.png' + ) + student_star_pic = student_star_pic.convert('RGBA') + student_name = studentId2Name[str(student_id)] + student_type = studentId2Type[str(student_id)] + + student_pic = Image.open( + STUDENT_COLLECTION_PATH / f'{student_id}.webp' + ) + student_color = COLOR_MAP[student_type] + student_color_pic = Image.new( + 'RGBA', student_pic.size, student_color + ) + + favor_rank = assist['favorRank'] + ex = assist['exSkillLevel'] + nm = assist['publicSkillLevel'] + ps = assist['passiveSkillLevel'] + sub = assist['extraPassiveSkillLevel'] + + skill_data = { + 'ex': ex, + 'nm': nm, + 'ps': ps, + 'sub': sub, + } + for sindex, s in enumerate(skill_data): + skill_bg = Image.open( + TEXT_PATH / f'{student_type}_skill_bg.png' + ) + skill_draw = ImageDraw.Draw(skill_bg) + + skill_icon = studentSkill2Icon[str(student_id)][s] + skill_path = SKILL_ICON_PATH / f'{skill_icon}.webp' + skill_pic = Image.open(skill_path).resize((36, 38)) + + skill = skill_data[s] if skill_data[s] != 10 else 'M' + skill_bg.paste(skill_pic, (25, 21), skill_pic) + skill_draw.text((71, 40), f'等级{skill}', GREY, cf(34), 'lm') + assist_card.paste(skill_bg, (312 + 172 * sindex, 96), skill_bg) + + assist_card.paste(student_color_pic, (66, 108), student_pic) + assist_card.paste(student_pic, (68, 96), student_pic) + assist_card.paste(student_star_pic, (228, 390), student_star_pic) + assist_draw.text((146, 364), student_name, GREY, cf(32), 'mm') + assist_draw.text( + (251, 361), str(favor_rank), 'white', cf(25), 'mm' + ) + assist_draw.text( + (151, 414), f'等级{student_level}', BLACK, cf(25), 'mm' + ) + + weapon_bg = Image.open(TEXT_PATH / 'weapon_bar.png') + if assist['weapon']: + weapon_draw = ImageDraw.Draw(weapon_bg) + + weapon_star = assist['weaponStartGrade'] + weapon_name = weaponId2Nmae[str(student_id)] + weapon_level = assist['weaponLevel'] + weapon_icon_id = studentId2weaponIcon[str(student_id)] + weapon_path = WEAPON_ICON_PATH / f'{weapon_icon_id}.webp' + weapon_icon = Image.open(weapon_path).resize((400, 102)) + + weapon_bg.paste(weapon_icon, (11, 42), weapon_icon) + weapon_draw.text( + (470, 70), f'等级{weapon_level}', BLACK, cf(25), 'mm' + ) + weapon_draw.text((486, 115), weapon_name, BLACK, cf(38), 'lm') + + for i in range(5): + if i < weapon_star: + star_pic = weapon_star_full + else: + star_pic = weapon_star_empty + weapon_bg.paste(star_pic, (227 + 29 * i, 110), star_pic) + + assist_card.paste(weapon_bg, (275, 147), weapon_bg) + + equip_fg = Image.open(TEXT_PATH / 'equip_fg.png') + for eindex, equip in enumerate(assist['equipment']): + equip_bg = Image.open(TEXT_PATH / 'equip_bg.png') + equip_id = equip['UniqueId'] + equip_icon = equipId2Icon[str(equip_id)] + equip_pic = Image.open( + EQUIPMENT_ICON_PATH / f'{equip_icon}.webp' + ) + equip_level = equip['Level'] + # equip_tier = equip['Tier'] + + equip_bg.paste(equip_pic, (2, 17), equip_pic) + equip_bg.paste(equip_fg, (0, 0), equip_fg) + equip_bg_draw = ImageDraw.Draw(equip_bg) + equip_bg_draw.text( + (75, 124), + f'等级{equip_level}', + 'white', + cf(24), + 'mm', + ) + assist_card.paste( + equip_bg, (304 + eindex * 131, 306), equip_bg + ) + + x = 80 if index >= 2 else 0 + img.paste(assist_card, (0, 884 + 450 * index + x), assist_card) + + img.paste(footer, (0, h - 50), footer) + im = await convert_img(img) + + return im diff --git a/BlueArchiveUID/bauid_info/texture2d/assist_bg.png b/BlueArchiveUID/bauid_info/texture2d/assist_bg.png new file mode 100644 index 0000000..bbe23b8 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/assist_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/avatar_card.png b/BlueArchiveUID/bauid_info/texture2d/avatar_card.png new file mode 100644 index 0000000..c28b0e0 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/avatar_card.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/bar.png b/BlueArchiveUID/bauid_info/texture2d/bar.png new file mode 100644 index 0000000..827421d Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/bar.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/bg.jpg b/BlueArchiveUID/bauid_info/texture2d/bg.jpg new file mode 100644 index 0000000..b88932b Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/bg.jpg differ diff --git a/BlueArchiveUID/bauid_info/texture2d/equip_bg.png b/BlueArchiveUID/bauid_info/texture2d/equip_bg.png new file mode 100644 index 0000000..c5aa4d0 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/equip_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/equip_fg.png b/BlueArchiveUID/bauid_info/texture2d/equip_fg.png new file mode 100644 index 0000000..6dadc13 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/equip_fg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/explosion_skill_bg.png b/BlueArchiveUID/bauid_info/texture2d/explosion_skill_bg.png new file mode 100644 index 0000000..f0dc638 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/explosion_skill_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/footer.png b/BlueArchiveUID/bauid_info/texture2d/footer.png new file mode 100644 index 0000000..844d2f1 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/footer.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/mystic_skill_bg.png b/BlueArchiveUID/bauid_info/texture2d/mystic_skill_bg.png new file mode 100644 index 0000000..a8f51a1 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/mystic_skill_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/pierce_skill_bg.png b/BlueArchiveUID/bauid_info/texture2d/pierce_skill_bg.png new file mode 100644 index 0000000..8ed5851 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/pierce_skill_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/sonic_skill_bg.png b/BlueArchiveUID/bauid_info/texture2d/sonic_skill_bg.png new file mode 100644 index 0000000..fd70973 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/sonic_skill_bg.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/star1.png b/BlueArchiveUID/bauid_info/texture2d/star1.png new file mode 100644 index 0000000..f9971a5 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/star1.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/star2.png b/BlueArchiveUID/bauid_info/texture2d/star2.png new file mode 100644 index 0000000..09e3a89 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/star2.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/star3.png b/BlueArchiveUID/bauid_info/texture2d/star3.png new file mode 100644 index 0000000..8835161 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/star3.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/star4.png b/BlueArchiveUID/bauid_info/texture2d/star4.png new file mode 100644 index 0000000..3f2cd76 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/star4.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/star5.png b/BlueArchiveUID/bauid_info/texture2d/star5.png new file mode 100644 index 0000000..9ac8051 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/star5.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/title.png b/BlueArchiveUID/bauid_info/texture2d/title.png new file mode 100644 index 0000000..55134c8 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/title.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/weapon_bar.png b/BlueArchiveUID/bauid_info/texture2d/weapon_bar.png new file mode 100644 index 0000000..7b0297b Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/weapon_bar.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/weapon_star_empty.png b/BlueArchiveUID/bauid_info/texture2d/weapon_star_empty.png new file mode 100644 index 0000000..f0ec864 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/weapon_star_empty.png differ diff --git a/BlueArchiveUID/bauid_info/texture2d/weapon_star_full.png b/BlueArchiveUID/bauid_info/texture2d/weapon_star_full.png new file mode 100644 index 0000000..4f3cc72 Binary files /dev/null and b/BlueArchiveUID/bauid_info/texture2d/weapon_star_full.png differ diff --git a/BlueArchiveUID/bauid_user/__init__.py b/BlueArchiveUID/bauid_user/__init__.py new file mode 100644 index 0000000..77ca7ee --- /dev/null +++ b/BlueArchiveUID/bauid_user/__init__.py @@ -0,0 +1,75 @@ +from gsuid_core.sv import SV +from gsuid_core.bot import Bot +from gsuid_core.models import Event +from gsuid_core.utils.message import send_diff_msg + +from ..utils.database.models import BaBind + +ba_user_bind = SV('ba用户绑定') + + +@ba_user_bind.on_command( + ( + 'ba绑定uid', + 'ba绑定UID', + 'ba绑定', + 'ba好友码', + 'ba切换uid', + 'ba切换UID', + 'ba切换', + 'ba删除uid', + 'ba删除UID', + 'ba删除', + ), + block=True, +) +async def send_ba_bind_uid_msg(bot: Bot, ev: Event): + uid = ( + ev.text.strip() + .replace(':', ':') + .replace('好友', '') + .replace('码', '') + ) + + if not uid: + return await bot.send('该命令需要带上正确的好友码!') + + if ':' not in uid or not uid.endswith(('1', '2')): + return await bot.send( + '好友码需在末尾携带:符号以确认服务器\n:1为官服,:2为b服\n例如ba绑定vlhy4mw:1即为绑定官服vlhy4mw好友码' + ) + + await bot.logger.info('[Ba] 开始执行[绑定/解绑用户信息]') + qid = ev.user_id + await bot.logger.info('[Ba] [绑定/解绑]UserID: {}'.format(qid)) + + if '绑定' in ev.command: + data = await BaBind.insert_uid( + qid, ev.bot_id, uid, ev.group_id, is_digit=False + ) + return await send_diff_msg( + bot, + data, + { + 0: f'[Ba] 绑定好友码{uid}成功!如绑定错误需删除,请使用命令:ba删除好友码', + -1: f'[Ba] 好友码{uid}的位数不正确!', + -2: f'[Ba] 好友码{uid}已经绑定过了!', + -3: '[Ba] 你输入了错误的格式!', + }, + ) + elif '切换' in ev.command: + retcode = await BaBind.switch_uid_by_game(qid, ev.bot_id, uid) + if retcode == 0: + return await bot.send(f'[Ba] 切换好友码{uid}成功!') + else: + return await bot.send(f'[Ba] 尚未绑定该好友码{uid}') + else: + data = await BaBind.delete_uid(qid, ev.bot_id, uid) + return await send_diff_msg( + bot, + data, + { + 0: f'[Ba] 删除好友码{uid}成功!', + -1: f'[Ba] 该好友码{uid}不在已绑定列表中!', + }, + ) diff --git a/BlueArchiveUID/tools/make_map.py b/BlueArchiveUID/tools/make_map.py new file mode 100644 index 0000000..2ca0435 --- /dev/null +++ b/BlueArchiveUID/tools/make_map.py @@ -0,0 +1,96 @@ +import json +from pathlib import Path +from typing import Any, Dict, List + +from msgspec import json as msgjson + +schale_db = Path(__file__).parent / "SchaleDB" +MAP = Path(__file__).parents[1] / 'utils' / "map" + +student_data_path = schale_db / "students.json" +equip_data_path = schale_db / "equipment.json" + +studentId2Name_path = MAP / "studentId2Name_map.json" +studentId2Type_path = MAP / "studentId2Type_map.json" +studentId2weaponIcon_path = MAP / "studentId2weaponIcon_map.json" +equipId2Icon_path = MAP / "equipId2Icon_map.json" +studentSkill2Icon_path = MAP / "studentSkill2Icon_map.json" +weaponId2Nmae_path = MAP / "weaponId2Nmae_map.json" + +with open(student_data_path, 'r', encoding='UTF-8') as f: + student_data = msgjson.decode( + f.read(), + type=List[Dict[str, Any]], + ) + +with open(equip_data_path, 'r', encoding='UTF-8') as f: + equip_data = msgjson.decode( + f.read(), + type=List[Dict[str, Any]], + ) + + +def make_id2name(): + result = {} + result2 = {} + result3 = {} + + for student in student_data: + result[student['Id']] = student['FamilyName'] + student['PersonalName'] + result2[student['Id']] = student['BulletType'].lower() + result3[student['Id']] = student['WeaponImg'] + + with open(studentId2Name_path, 'w', encoding='UTF-8') as f: + json.dump(result, f, indent=4, ensure_ascii=False) + + with open(studentId2Type_path, 'w', encoding='UTF-8') as f: + json.dump(result2, f, indent=4, ensure_ascii=False) + + with open(studentId2weaponIcon_path, 'w', encoding='UTF-8') as f: + json.dump(result3, f, indent=4, ensure_ascii=False) + + +def make_weaponId2Nmae(): + result = {} + for student in student_data: + result[student['Id']] = student['Weapon']['Name'] + with open(weaponId2Nmae_path, 'w', encoding='UTF-8') as f: + json.dump(result, f, indent=4, ensure_ascii=False) + + +def make_equipId2Icon(): + result = {} + for equip in equip_data: + result[equip['Id']] = equip['Icon'] + with open(equipId2Icon_path, 'w', encoding='UTF-8') as f: + json.dump(result, f, indent=4, ensure_ascii=False) + + +def make_studentSkill2Icon(): + result = {} + for student in student_data: + _r = {} + skills = student['Skills'] + for skill in skills: + if skill['SkillType'] == 'ex': + _r['ex'] = skill['Icon'] + elif skill['SkillType'] == 'normal': + _r['nm'] = skill['Icon'] + elif skill['SkillType'] == 'passive': + _r['ps'] = skill['Icon'] + elif skill['SkillType'] == 'sub': + _r['sub'] = skill['Icon'] + result[student['Id']] = _r + with open(studentSkill2Icon_path, 'w', encoding='UTF-8') as f: + json.dump(result, f, indent=4, ensure_ascii=False) + + +def make_map(): + make_id2name() + make_equipId2Icon() + make_studentSkill2Icon() + make_weaponId2Nmae() + + +if __name__ == '__main__': + make_map() diff --git a/BlueArchiveUID/utils/api/api.py b/BlueArchiveUID/utils/api/api.py index 10f3990..882b301 100644 --- a/BlueArchiveUID/utils/api/api.py +++ b/BlueArchiveUID/utils/api/api.py @@ -14,3 +14,6 @@ XTZX_RAID_TOP = XTZX_API + '/api/v2/rank/list_top' XTZX_RAID_CHART_PERSON = XTZX_API + '/api/v2/rank/season/lastRank/charts' XTZX_RAID_CHART = XTZX_API + '/raid/new/charts/{}?s={}' +XTZX_FRIEND_DATA = XTZX_API + '/api/friends/find' +XTZX_FRIEND_REFRESH = XTZX_API + '/api/friends/refresh' +XTZX_ASSIST = XTZX_API + 'api/friends/assist_query' diff --git a/BlueArchiveUID/utils/api/models.py b/BlueArchiveUID/utils/api/models.py new file mode 100644 index 0000000..3833bd9 --- /dev/null +++ b/BlueArchiveUID/utils/api/models.py @@ -0,0 +1,53 @@ +from typing import List, TypedDict + + +class FriendData(TypedDict): + server: int + friendCode: str + friendCount: int + nickname: str + representCharacterUniqueId: int + clanName: str + comment: str + level: int + db: str + updateTime: int + maxFavorRank: int + echelonType: int + assistInfoList: List['AssistInfo'] + + +class AssistInfo(TypedDict): + baRank: dict[str, int] + baGlobalRank: dict[str, int] + type: int + uniqueId: int + bulletType: str + tacticRole: str + echelonType: int + level: int + slotIndex: int + starGrade: int + favorRank: int + publicSkillLevel: int + exSkillLevel: int + passiveSkillLevel: int + extraPassiveSkillLevel: int + equipment: List['Equipment'] + weapon: str + weaponUniqueId: int + weaponType: int + weaponLevel: int + weaponStartGrade: int + + +class Equipment(TypedDict): + Type: int + ServerId: int + UniqueId: int + StackCount: int + Level: int + Tier: int + BoundCharacterServerId: int + isNew: bool + IsLocked: bool diff --git a/BlueArchiveUID/utils/api/request.py b/BlueArchiveUID/utils/api/request.py index 05da89b..72025d9 100644 --- a/BlueArchiveUID/utils/api/request.py +++ b/BlueArchiveUID/utils/api/request.py @@ -1,8 +1,9 @@ -from typing import Any, Dict, List, Union, Literal, Optional +from typing import Any, Dict, List, Union, Literal, Optional, cast from gsuid_core.logger import logger from aiohttp import FormData, TCPConnector, ClientSession, ContentTypeError +from .models import FriendData from ..ba_config import ba_config from .api import ( ARONA_URL, @@ -11,6 +12,7 @@ XTZX_RAID_LIST, XTZX_RAID_RANK, XTZX_RAID_CHART, + XTZX_FRIEND_DATA, XTZX_RAID_CHART_PERSON, ) @@ -175,6 +177,27 @@ async def get_xtzx_raid_ranking( if isinstance(data, Dict) and 'code' in data and data['code'] == 200: return data + async def get_xtzx_friend_data( + self, + friend_code: str, + server_id: Union[str, int] = 1, + ) -> Union[int, FriendData]: + data = await self._ba_request( + XTZX_FRIEND_DATA, + 'POST', + json={ + "server": int(server_id), + "friend": friend_code, + }, + ) + if isinstance(data, Dict) and 'code' in data: + if data['code'] == 200: + return cast(FriendData, data['data']) + else: + return data['code'] + else: + return -500 + async def _ba_request( self, url: str, diff --git a/BlueArchiveUID/utils/ba_map.py b/BlueArchiveUID/utils/ba_map.py new file mode 100644 index 0000000..3984b5c --- /dev/null +++ b/BlueArchiveUID/utils/ba_map.py @@ -0,0 +1,48 @@ +from typing import Dict + +from msgspec import json as msgjson + +from ..tools.make_map import ( + equipId2Icon_path, + weaponId2Nmae_path, + studentId2Name_path, + studentId2Type_path, + studentSkill2Icon_path, + studentId2weaponIcon_path, +) + +with open(studentId2weaponIcon_path, 'r', encoding='UTF-8') as f: + studentId2weaponIcon = msgjson.decode( + f.read(), + type=Dict[str, str], + ) + +with open(studentId2Type_path, 'r', encoding='UTF-8') as f: + studentId2Type = msgjson.decode( + f.read(), + type=Dict[str, str], + ) + +with open(weaponId2Nmae_path, 'r', encoding='UTF-8') as f: + weaponId2Nmae = msgjson.decode( + f.read(), + type=Dict[str, str], + ) + +with open(equipId2Icon_path, 'r', encoding='UTF-8') as f: + equipId2Icon = msgjson.decode( + f.read(), + type=Dict[str, str], + ) + +with open(studentId2Name_path, 'r', encoding='UTF-8') as f: + studentId2Name = msgjson.decode( + f.read(), + type=Dict[str, str], + ) + +with open(studentSkill2Icon_path, 'r', encoding='UTF-8') as f: + studentSkill2Icon = msgjson.decode( + f.read(), + type=Dict[str, Dict[str, str]], + ) diff --git a/BlueArchiveUID/utils/database/models.py b/BlueArchiveUID/utils/database/models.py new file mode 100644 index 0000000..a590631 --- /dev/null +++ b/BlueArchiveUID/utils/database/models.py @@ -0,0 +1,21 @@ +from typing import Optional + +from sqlmodel import Field +from gsuid_core.utils.database.base_models import Bind +from gsuid_core.webconsole.mount_app import PageSchema, GsAdminModel, site + + +class BaBind(Bind, table=True): + uid: Optional[str] = Field(default=None, title='Ba好友码') + + +@site.register_admin +class BaBindadmin(GsAdminModel): + pk_name = 'id' + page_schema = PageSchema( + label='Ba绑定管理', + icon='fa fa-users', + ) # type: ignore + + # 配置管理模型 + model = BaBind diff --git a/BlueArchiveUID/utils/download_resource.py b/BlueArchiveUID/utils/download_resource.py index caafc95..01b5050 100644 --- a/BlueArchiveUID/utils/download_resource.py +++ b/BlueArchiveUID/utils/download_resource.py @@ -1,6 +1,13 @@ from gsuid_core.utils.download_resource.download_core import download_all_file -from .resource_path import HEHEDI_CHAR_GUIDE_PATH, HEHEDI_LEVEL_GUIDE_PATH +from .resource_path import ( + SKILL_ICON_PATH, + WEAPON_ICON_PATH, + EQUIPMENT_ICON_PATH, + HEHEDI_CHAR_GUIDE_PATH, + HEHEDI_LEVEL_GUIDE_PATH, + STUDENT_COLLECTION_PATH, +) async def download_ba_resource(): @@ -9,5 +16,9 @@ async def download_ba_resource(): { 'hehedi_level_guide': HEHEDI_LEVEL_GUIDE_PATH, 'hehedi_char_guide': HEHEDI_CHAR_GUIDE_PATH, + 'resource/equipment_icon': EQUIPMENT_ICON_PATH, + 'resource/weapon_icon': WEAPON_ICON_PATH, + 'resource/skill_icon': SKILL_ICON_PATH, + 'resource/student_collection': STUDENT_COLLECTION_PATH, }, ) diff --git a/BlueArchiveUID/utils/map/equipid2icon_map.json b/BlueArchiveUID/utils/map/equipid2icon_map.json new file mode 100644 index 0000000..11205bf --- /dev/null +++ b/BlueArchiveUID/utils/map/equipid2icon_map.json @@ -0,0 +1,169 @@ +{ + "1": "equipment_icon_exp_0", + "2": "equipment_icon_exp_1", + "3": "equipment_icon_exp_2", + "4": "equipment_icon_exp_3", + "10": "equipment_icon_weaponexpgrowtha_0", + "11": "equipment_icon_weaponexpgrowtha_1", + "12": "equipment_icon_weaponexpgrowtha_2", + "13": "equipment_icon_weaponexpgrowtha_3", + "20": "equipment_icon_weaponexpgrowthb_0", + "21": "equipment_icon_weaponexpgrowthb_1", + "22": "equipment_icon_weaponexpgrowthb_2", + "23": "equipment_icon_weaponexpgrowthb_3", + "30": "equipment_icon_weaponexpgrowthc_0", + "31": "equipment_icon_weaponexpgrowthc_1", + "32": "equipment_icon_weaponexpgrowthc_2", + "33": "equipment_icon_weaponexpgrowthc_3", + "40": "equipment_icon_weaponexpgrowthz_0", + "41": "equipment_icon_weaponexpgrowthz_1", + "42": "equipment_icon_weaponexpgrowthz_2", + "43": "equipment_icon_weaponexpgrowthz_3", + "1000": "equipment_icon_hat_tier1", + "1001": "equipment_icon_hat_tier2", + "1002": "equipment_icon_hat_tier3", + "1003": "equipment_icon_hat_tier4", + "1004": "equipment_icon_hat_tier5", + "1005": "equipment_icon_hat_tier6", + "1006": "equipment_icon_hat_tier7", + "1007": "equipment_icon_hat_tier8", + "1008": "equipment_icon_hat_tier9", + "2000": "equipment_icon_gloves_tier1", + "2001": "equipment_icon_gloves_tier2", + "2002": "equipment_icon_gloves_tier3", + "2003": "equipment_icon_gloves_tier4", + "2004": "equipment_icon_gloves_tier5", + "2005": "equipment_icon_gloves_tier6", + "2006": "equipment_icon_gloves_tier7", + "2007": "equipment_icon_gloves_tier8", + "2008": "equipment_icon_gloves_tier9", + "3000": "equipment_icon_shoes_tier1", + "3001": "equipment_icon_shoes_tier2", + "3002": "equipment_icon_shoes_tier3", + "3003": "equipment_icon_shoes_tier4", + "3004": "equipment_icon_shoes_tier5", + "3005": "equipment_icon_shoes_tier6", + "3006": "equipment_icon_shoes_tier7", + "3007": "equipment_icon_shoes_tier8", + "3008": "equipment_icon_shoes_tier9", + "4000": "equipment_icon_bag_tier1", + "4001": "equipment_icon_bag_tier2", + "4002": "equipment_icon_bag_tier3", + "4003": "equipment_icon_bag_tier4", + "4004": "equipment_icon_bag_tier5", + "4005": "equipment_icon_bag_tier6", + "4006": "equipment_icon_bag_tier7", + "4007": "equipment_icon_bag_tier8", + "4008": "equipment_icon_bag_tier9", + "5000": "equipment_icon_badge_tier1", + "5001": "equipment_icon_badge_tier2", + "5002": "equipment_icon_badge_tier3", + "5003": "equipment_icon_badge_tier4", + "5004": "equipment_icon_badge_tier5", + "5005": "equipment_icon_badge_tier6", + "5006": "equipment_icon_badge_tier7", + "5007": "equipment_icon_badge_tier8", + "5008": "equipment_icon_badge_tier9", + "6000": "equipment_icon_hairpin_tier1", + "6001": "equipment_icon_hairpin_tier2", + "6002": "equipment_icon_hairpin_tier3", + "6003": "equipment_icon_hairpin_tier4", + "6004": "equipment_icon_hairpin_tier5", + "6005": "equipment_icon_hairpin_tier6", + "6006": "equipment_icon_hairpin_tier7", + "6007": "equipment_icon_hairpin_tier8", + "6008": "equipment_icon_hairpin_tier9", + "7000": "equipment_icon_charm_tier1", + "7001": "equipment_icon_charm_tier2", + "7002": "equipment_icon_charm_tier3", + "7003": "equipment_icon_charm_tier4", + "7004": "equipment_icon_charm_tier5", + "7005": "equipment_icon_charm_tier6", + "7006": "equipment_icon_charm_tier7", + "7007": "equipment_icon_charm_tier8", + "8000": "equipment_icon_watch_tier1", + "8001": "equipment_icon_watch_tier2", + "8002": "equipment_icon_watch_tier3", + "8003": "equipment_icon_watch_tier4", + "8004": "equipment_icon_watch_tier5", + "8005": "equipment_icon_watch_tier6", + "8006": "equipment_icon_watch_tier7", + "8007": "equipment_icon_watch_tier8", + "9000": "equipment_icon_necklace_tier1", + "9001": "equipment_icon_necklace_tier2", + "9002": "equipment_icon_necklace_tier3", + "9003": "equipment_icon_necklace_tier4", + "9004": "equipment_icon_necklace_tier5", + "9005": "equipment_icon_necklace_tier6", + "9006": "equipment_icon_necklace_tier7", + "9007": "equipment_icon_necklace_tier8", + "101001": "equipment_icon_hat_tier2_piece", + "101002": "equipment_icon_hat_tier3_piece", + "101003": "equipment_icon_hat_tier4_piece", + "101004": "equipment_icon_hat_tier5_piece", + "101005": "equipment_icon_hat_tier6_piece", + "101006": "equipment_icon_hat_tier7_piece", + "101007": "equipment_icon_hat_tier8_piece", + "101008": "equipment_icon_hat_tier9_piece", + "102001": "equipment_icon_gloves_tier2_piece", + "102002": "equipment_icon_gloves_tier3_piece", + "102003": "equipment_icon_gloves_tier4_piece", + "102004": "equipment_icon_gloves_tier5_piece", + "102005": "equipment_icon_gloves_tier6_piece", + "102006": "equipment_icon_gloves_tier7_piece", + "102007": "equipment_icon_gloves_tier8_piece", + "102008": "equipment_icon_gloves_tier9_piece", + "103001": "equipment_icon_shoes_tier2_piece", + "103002": "equipment_icon_shoes_tier3_piece", + "103003": "equipment_icon_shoes_tier4_piece", + "103004": "equipment_icon_shoes_tier5_piece", + "103005": "equipment_icon_shoes_tier6_piece", + "103006": "equipment_icon_shoes_tier7_piece", + "103007": "equipment_icon_shoes_tier8_piece", + "103008": "equipment_icon_shoes_tier9_piece", + "104001": "equipment_icon_bag_tier2_piece", + "104002": "equipment_icon_bag_tier3_piece", + "104003": "equipment_icon_bag_tier4_piece", + "104004": "equipment_icon_bag_tier5_piece", + "104005": "equipment_icon_bag_tier6_piece", + "104006": "equipment_icon_bag_tier7_piece", + "104007": "equipment_icon_bag_tier8_piece", + "104008": "equipment_icon_bag_tier9_piece", + "105001": "equipment_icon_badge_tier2_piece", + "105002": "equipment_icon_badge_tier3_piece", + "105003": "equipment_icon_badge_tier4_piece", + "105004": "equipment_icon_badge_tier5_piece", + "105005": "equipment_icon_badge_tier6_piece", + "105006": "equipment_icon_badge_tier7_piece", + "105007": "equipment_icon_badge_tier8_piece", + "105008": "equipment_icon_badge_tier9_piece", + "106001": "equipment_icon_hairpin_tier2_piece", + "106002": "equipment_icon_hairpin_tier3_piece", + "106003": "equipment_icon_hairpin_tier4_piece", + "106004": "equipment_icon_hairpin_tier5_piece", + "106005": "equipment_icon_hairpin_tier6_piece", + "106006": "equipment_icon_hairpin_tier7_piece", + "106007": "equipment_icon_hairpin_tier8_piece", + "106008": "equipment_icon_hairpin_tier9_piece", + "107001": "equipment_icon_charm_tier2_piece", + "107002": "equipment_icon_charm_tier3_piece", + "107003": "equipment_icon_charm_tier4_piece", + "107004": "equipment_icon_charm_tier5_piece", + "107005": "equipment_icon_charm_tier6_piece", + "107006": "equipment_icon_charm_tier7_piece", + "107007": "equipment_icon_charm_tier8_piece", + "108001": "equipment_icon_watch_tier2_piece", + "108002": "equipment_icon_watch_tier3_piece", + "108003": "equipment_icon_watch_tier4_piece", + "108004": "equipment_icon_watch_tier5_piece", + "108005": "equipment_icon_watch_tier6_piece", + "108006": "equipment_icon_watch_tier7_piece", + "108007": "equipment_icon_watch_tier8_piece", + "109001": "equipment_icon_necklace_tier2_piece", + "109002": "equipment_icon_necklace_tier3_piece", + "109003": "equipment_icon_necklace_tier4_piece", + "109004": "equipment_icon_necklace_tier5_piece", + "109005": "equipment_icon_necklace_tier6_piece", + "109006": "equipment_icon_necklace_tier7_piece", + "109007": "equipment_icon_necklace_tier8_piece" +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/map/studentid2name_map.json b/BlueArchiveUID/utils/map/studentid2name_map.json new file mode 100644 index 0000000..a89ce6e --- /dev/null +++ b/BlueArchiveUID/utils/map/studentid2name_map.json @@ -0,0 +1,177 @@ +{ + "10000": "陆八魔阿露", + "10001": "和泉元艾米", + "10002": "黑馆晴奈", + "10003": "阿慈谷日富美", + "10004": "空崎日奈", + "10005": "小鸟游星野", + "10006": "银镜伊织", + "10007": "小涂真纪", + "10008": "美甘尼露", + "10009": "狮子堂泉", + "10010": "砂狼白子", + "10011": "春原瞬", + "10012": "乙花堇", + "10013": "剑先鹤城", + "13000": "室笠茜", + "13001": "和乐千世", + "13002": "鳄渕明里", + "13003": "羽川莲见", + "13004": "十六夜野宫", + "13005": "鬼方佳代子", + "13006": "浅黄睦月", + "13007": "赤司纯子", + "13008": "黑见芹香", + "13009": "春日椿", + "13010": "早濑优香", + "16000": "伊草遥香", + "16001": "一之濑明日奈", + "16002": "丰见琴里", + "16003": "守月铃美", + "16004": "朝比奈菲娜", + "20000": "猫冢响", + "20001": "角楯花凛", + "20002": "药子纱绫", + "23000": "栗村爱莉", + "23001": "爱清枫香", + "23002": "朝颜花江", + "23003": "小钩晴", + "23004": "白石歌原", + "23005": "奥空绫音", + "26000": "火宫千夏", + "26001": "音濑小玉", + "26002": "牛牧茱莉", + "26003": "鹫见芹娜", + "26004": "圆堂志美子", + "26005": "伊原木好美", + "20003": "静山真白", + "10014": "久田泉奈", + "23006": "河和静子", + "10015": "天童爱丽丝", + "10016": "才羽绿", + "13011": "才羽桃井", + "10017": "连河切里诺", + "26006": "天见和香", + "10018": "花冈柚子", + "10019": "白洲梓", + "23007": "浦和花子", + "10020": "下江小春", + "10021": "白洲梓", + "20004": "静山真白", + "16005": "剑先鹤城", + "20005": "阿慈谷日富美", + "10022": "空崎日奈", + "10023": "银镜伊织", + "16006": "狮子堂泉", + "10024": "砂狼白子", + "10025": "春原瞬", + "13012": "中务桐乃", + "20006": "药子纱绫", + "10026": "美甘尼露", + "10027": "角楯花凛", + "10028": "一之濑明日奈", + "10029": "柚鸟夏", + "23008": "伊落玛丽", + "20007": "初音未来", + "20008": "天雨亚子", + "20009": "连河切里诺", + "10030": "火宫千夏", + "16007": "佐城智惠", + "20010": "天见和香", + "10031": "陆八魔阿露", + "10032": "浅黄睦月", + "20011": "黑见芹香", + "10033": "狐坂若藻", + "16008": "合欢垣吹雪", + "20012": "冰室濑名", + "20013": "各务千寻", + "10034": "水羽三森", + "10035": "古关忧", + "10036": "若叶日向", + "10037": "池仓玛利娜", + "10038": "月雪宫子", + "20014": "空井咲", + "10039": "霞泽美游", + "20015": "勇美枫", + "20016": "枣伊吕波", + "16009": "千鸟满", + "10040": "大野月咏", + "10041": "戒野美咲", + "20017": "槌永日和", + "10042": "秤亚津子", + "10043": "狐坂若藻", + "10044": "十六夜野宫", + "26007": "奥空绫音", + "10045": "小鸟游星野", + "26008": "河和静子", + "10046": "久田泉奈", + "10047": "和乐千世", + "10048": "锭前纱织", + "20018": "风仓萌绘", + "10049": "杏山和纱", + "10050": "春原心奈", + "10051": "白石歌原", + "10052": "生盐诺亚", + "16010": "猫冢响", + "20019": "室笠茜", + "10053": "早濑优香", + "10054": "伊落玛丽", + "16011": "羽川莲见", + "20020": "明星日鞠", + "10055": "间宵时雨", + "10056": "鹫见芹娜", + "20021": "朝颜花江", + "10057": "黑馆晴奈", + "20022": "爱清枫香", + "16012": "赤司纯子", + "10058": "苍森美祢", + "10059": "圣园未花", + "10060": "下仓惠", + "20023": "尾刃叶渚", + "10061": "歌住樱子", + "10062": "飞鸟马时", + "20024": "桐藤渚", + "10063": "黑崎小雪", + "10064": "鬼方佳代子", + "20025": "伊草遥香", + "10065": "桑上果穗", + "10066": "天童爱丽丝", + "10067": "飞鸟马时", + "26009": "花冈柚子", + "10068": "宇泽玲纱", + "10069": "朱城瑠美", + "10070": "近卫弥奈", + "20026": "安守实里", + "10071": "月雪宫子", + "10072": "空井咲", + "26010": "霞泽美游", + "20027": "砂狼白子", + "10073": "古关忧", + "20028": "若叶日向", + "16013": "下江小春", + "10074": "浦和花子", + "20029": "水羽三森", + "10075": "姬木芽瑠", + "13013": "秋泉红叶", + "10076": "丰见琴里", + "20030": "黑馆晴奈", + "10077": "仲正一花", + "10078": "鬼怒川霞", + "20031": "间宵时雨", + "10079": "御坂美琴", + "10080": "食蜂操祈", + "26011": "佐天泪子", + "10081": "勘解由小路紫草", + "10082": "不破莲华", + "10083": "桐生桔梗", + "20032": "和泉元艾米", + "10084": "音濑小玉", + "10085": "小钩晴", + "10087": "天雨亚子", + "16014": "丹花伊吹", + "20033": "羽沼真琴", + "10086": "空崎日奈", + "10088": "鬼方佳代子", + "10089": "陆八魔阿露", + "20034": "鳄渕明里" +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/map/studentid2type_map.json b/BlueArchiveUID/utils/map/studentid2type_map.json new file mode 100644 index 0000000..a8f4c97 --- /dev/null +++ b/BlueArchiveUID/utils/map/studentid2type_map.json @@ -0,0 +1,177 @@ +{ + "10000": "explosion", + "10001": "explosion", + "10002": "mystic", + "10003": "pierce", + "10004": "explosion", + "10005": "pierce", + "10006": "pierce", + "10007": "pierce", + "10008": "pierce", + "10009": "explosion", + "10010": "explosion", + "10011": "explosion", + "10012": "pierce", + "10013": "pierce", + "13000": "pierce", + "13001": "mystic", + "13002": "explosion", + "13003": "pierce", + "13004": "pierce", + "13005": "explosion", + "13006": "explosion", + "13007": "pierce", + "13008": "explosion", + "13009": "pierce", + "13010": "explosion", + "16000": "explosion", + "16001": "mystic", + "16002": "pierce", + "16003": "explosion", + "16004": "pierce", + "20000": "explosion", + "20001": "pierce", + "20002": "explosion", + "23000": "explosion", + "23001": "explosion", + "23002": "explosion", + "23003": "explosion", + "23004": "pierce", + "23005": "pierce", + "26000": "pierce", + "26001": "explosion", + "26002": "explosion", + "26003": "mystic", + "26004": "explosion", + "26005": "pierce", + "20003": "explosion", + "10014": "mystic", + "23006": "mystic", + "10015": "mystic", + "10016": "pierce", + "13011": "pierce", + "10017": "pierce", + "26006": "explosion", + "10018": "pierce", + "10019": "explosion", + "23007": "pierce", + "10020": "explosion", + "10021": "mystic", + "20004": "mystic", + "16005": "mystic", + "20005": "pierce", + "10022": "explosion", + "10023": "explosion", + "16006": "explosion", + "10024": "mystic", + "10025": "explosion", + "13012": "explosion", + "20006": "pierce", + "10026": "explosion", + "10027": "mystic", + "10028": "mystic", + "10029": "mystic", + "23008": "mystic", + "20007": "explosion", + "20008": "mystic", + "20009": "explosion", + "10030": "mystic", + "16007": "pierce", + "20010": "explosion", + "10031": "pierce", + "10032": "mystic", + "20011": "pierce", + "10033": "mystic", + "16008": "pierce", + "20012": "mystic", + "20013": "pierce", + "10034": "mystic", + "10035": "explosion", + "10036": "mystic", + "10037": "pierce", + "10038": "pierce", + "20014": "pierce", + "10039": "pierce", + "20015": "explosion", + "20016": "mystic", + "16009": "mystic", + "10040": "mystic", + "10041": "explosion", + "20017": "explosion", + "10042": "explosion", + "10043": "pierce", + "10044": "explosion", + "26007": "pierce", + "10045": "explosion", + "26008": "mystic", + "10046": "mystic", + "10047": "mystic", + "10048": "explosion", + "20018": "pierce", + "10049": "pierce", + "10050": "pierce", + "10051": "mystic", + "10052": "mystic", + "16010": "explosion", + "20019": "mystic", + "10053": "mystic", + "10054": "mystic", + "16011": "mystic", + "20020": "pierce", + "10055": "explosion", + "10056": "pierce", + "20021": "mystic", + "10057": "explosion", + "20022": "pierce", + "16012": "mystic", + "10058": "explosion", + "10059": "pierce", + "10060": "explosion", + "20023": "pierce", + "10061": "mystic", + "10062": "explosion", + "20024": "explosion", + "10063": "mystic", + "10064": "mystic", + "20025": "explosion", + "10065": "mystic", + "10066": "mystic", + "10067": "explosion", + "26009": "explosion", + "10068": "pierce", + "10069": "explosion", + "10070": "explosion", + "20026": "explosion", + "10071": "explosion", + "10072": "explosion", + "26010": "explosion", + "20027": "mystic", + "10073": "pierce", + "20028": "explosion", + "16013": "mystic", + "10074": "sonic", + "20029": "mystic", + "10075": "pierce", + "13013": "sonic", + "10076": "explosion", + "20030": "sonic", + "10077": "sonic", + "10078": "sonic", + "20031": "pierce", + "10079": "pierce", + "10080": "explosion", + "26011": "pierce", + "10081": "sonic", + "10082": "sonic", + "10083": "sonic", + "20032": "mystic", + "10084": "pierce", + "10085": "explosion", + "10087": "explosion", + "16014": "mystic", + "20033": "pierce", + "10086": "explosion", + "10088": "pierce", + "10089": "pierce", + "20034": "mystic" +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/map/studentid2weaponicon_map.json b/BlueArchiveUID/utils/map/studentid2weaponicon_map.json new file mode 100644 index 0000000..43fb7cc --- /dev/null +++ b/BlueArchiveUID/utils/map/studentid2weaponicon_map.json @@ -0,0 +1,177 @@ +{ + "10000": "weapon_icon_10000", + "10001": "weapon_icon_10001", + "10002": "weapon_icon_10002", + "10003": "weapon_icon_10003", + "10004": "weapon_icon_10004", + "10005": "weapon_icon_10005", + "10006": "weapon_icon_10006", + "10007": "weapon_icon_10007", + "10008": "weapon_icon_10008", + "10009": "weapon_icon_10009", + "10010": "weapon_icon_10010", + "10011": "weapon_icon_10011", + "10012": "weapon_icon_10012", + "10013": "weapon_icon_10013", + "13000": "weapon_icon_13000", + "13001": "weapon_icon_13001", + "13002": "weapon_icon_13002", + "13003": "weapon_icon_13003", + "13004": "weapon_icon_13004", + "13005": "weapon_icon_13005", + "13006": "weapon_icon_13006", + "13007": "weapon_icon_13007", + "13008": "weapon_icon_13008", + "13009": "weapon_icon_13009", + "13010": "weapon_icon_13010", + "16000": "weapon_icon_16000", + "16001": "weapon_icon_16001", + "16002": "weapon_icon_16002", + "16003": "weapon_icon_16003", + "16004": "weapon_icon_16004", + "20000": "weapon_icon_20000", + "20001": "weapon_icon_20001", + "20002": "weapon_icon_20002", + "23000": "weapon_icon_23000", + "23001": "weapon_icon_23001", + "23002": "weapon_icon_23002", + "23003": "weapon_icon_23003", + "23004": "weapon_icon_23004", + "23005": "weapon_icon_23005", + "26000": "weapon_icon_26000", + "26001": "weapon_icon_26001", + "26002": "weapon_icon_26002", + "26003": "weapon_icon_26003", + "26004": "weapon_icon_26004", + "26005": "weapon_icon_26005", + "20003": "weapon_icon_20003", + "10014": "weapon_icon_10014", + "23006": "weapon_icon_23006", + "10015": "weapon_icon_10015", + "10016": "weapon_icon_10016", + "13011": "weapon_icon_13011", + "10017": "weapon_icon_10017", + "26006": "weapon_icon_26006", + "10018": "weapon_icon_10018", + "10019": "weapon_icon_10019", + "23007": "weapon_icon_23007", + "10020": "weapon_icon_10020", + "10021": "weapon_icon_10019", + "20004": "weapon_icon_20003", + "16005": "weapon_icon_10013", + "20005": "weapon_icon_10003", + "10022": "weapon_icon_10004", + "10023": "weapon_icon_10006", + "16006": "weapon_icon_10009", + "10024": "weapon_icon_10010", + "10025": "weapon_icon_10011", + "13012": "weapon_icon_13012", + "20006": "weapon_icon_20002", + "10026": "weapon_icon_10008", + "10027": "weapon_icon_20001", + "10028": "weapon_icon_16001", + "10029": "weapon_icon_10029", + "23008": "weapon_icon_23008", + "20007": "weapon_icon_20007", + "20008": "weapon_icon_20008", + "20009": "weapon_icon_10017", + "10030": "weapon_icon_26000", + "16007": "weapon_icon_16007", + "20010": "weapon_icon_26006", + "10031": "weapon_icon_10000", + "10032": "weapon_icon_13006", + "20011": "weapon_icon_13008", + "10033": "weapon_icon_10033", + "16008": "weapon_icon_16008", + "20012": "weapon_icon_20012", + "20013": "weapon_icon_20013", + "10034": "weapon_icon_10034", + "10035": "weapon_icon_ch0169", + "10036": "weapon_icon_ch0073", + "10037": "weapon_icon_ch0119", + "10038": "weapon_icon_ch0142", + "20014": "weapon_icon_ch0144", + "10039": "weapon_icon_ch0145", + "20015": "weapon_icon_ch0116", + "20016": "weapon_icon_ch0156", + "16009": "weapon_icon_ch0113", + "10040": "weapon_icon_ch0114", + "10041": "weapon_icon_ch0105", + "20017": "weapon_icon_ch0106", + "10042": "weapon_icon_ch0104", + "10043": "weapon_icon_ch0175", + "10044": "weapon_icon_ch0092", + "26007": "weapon_icon_23005", + "10045": "weapon_icon_10005", + "26008": "weapon_icon_23006", + "10046": "weapon_icon_10014", + "10047": "weapon_icon_13001", + "10048": "weapon_icon_ch0103", + "20018": "weapon_icon_ch0143", + "10049": "weapon_icon_ch0075", + "10050": "weapon_icon_ch0137", + "10051": "weapon_icon_23004", + "10052": "weapon_icon_ch0095", + "16010": "weapon_icon_ch0181", + "20019": "weapon_icon_13000", + "10053": "weapon_icon_13010", + "10054": "weapon_icon_23008", + "16011": "weapon_icon_13003", + "20020": "weapon_icon_ch0159", + "10055": "weapon_icon_shigure", + "10056": "weapon_icon_26003", + "20021": "weapon_icon_23002", + "10057": "weapon_icon_10002", + "20022": "weapon_icon_23001", + "16012": "weapon_icon_13007", + "10058": "weapon_icon_ch0152", + "10059": "weapon_icon_ch0069", + "10060": "weapon_icon_ch0088", + "20023": "weapon_icon_ch0170", + "10061": "weapon_icon_sakurako", + "10062": "weapon_icon_ch0187", + "20024": "weapon_icon_nagisa", + "10063": "weapon_icon_ch0198", + "10064": "weapon_icon_13005", + "20025": "weapon_icon_16000", + "10065": "weapon_icon_ch0107", + "10066": "weapon_icon_10015", + "10067": "weapon_icon_ch0187", + "26009": "weapon_icon_10018", + "10068": "weapon_icon_ch0167", + "10069": "weapon_icon_ch0135", + "10070": "weapon_icon_ch0138", + "20026": "weapon_icon_ch0214", + "10071": "weapon_icon_ch0142", + "10072": "weapon_icon_ch0144", + "26010": "weapon_icon_ch0145", + "20027": "weapon_icon_10010", + "10073": "weapon_icon_ch0169", + "20028": "weapon_icon_ch0073", + "16013": "weapon_icon_10020", + "10074": "weapon_icon_23007", + "20029": "weapon_icon_10034", + "10075": "weapon_icon_ch0124", + "13013": "weapon_icon_momiji", + "10076": "weapon_icon_ch0185", + "20030": "weapon_icon_10002", + "10077": "weapon_icon_ch0071", + "10078": "weapon_icon_ch0089", + "20031": "weapon_icon_shigure", + "10079": "weapon_icon_ch9998", + "10080": "weapon_icon_ch9997", + "26011": "weapon_icon_ch9996", + "10081": "weapon_icon_ch0161", + "10082": "weapon_icon_ch0224", + "10083": "weapon_icon_ch0225", + "20032": "weapon_icon_ch0219", + "10084": "weapon_icon_26001", + "10085": "weapon_icon_23003", + "10087": "weapon_icon_20008", + "16014": "weapon_icon_ibuki", + "20033": "weapon_icon_ch0079", + "10086": "weapon_icon_10004", + "10088": "weapon_icon_13005", + "10089": "weapon_icon_10000", + "20034": "weapon_icon_13002" +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/map/studentskill2icon_map.json b/BlueArchiveUID/utils/map/studentskill2icon_map.json new file mode 100644 index 0000000..08cc099 --- /dev/null +++ b/BlueArchiveUID/utils/map/studentskill2icon_map.json @@ -0,0 +1,1052 @@ +{ + "10000": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10001": { + "ex": "COMMON_SKILLICON_DOTHEAL", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10002": { + "ex": "COMMON_SKILLICON_LINE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10003": { + "ex": "SKILLICON_HIHUMI_EXSKILL", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "10004": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_RELOAD", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10005": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_DOTHEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_SHIELD" + }, + "10006": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10007": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_MARK", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10008": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_FURY", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10009": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10010": { + "ex": "SKILLICON_SHIROKO_EXSKILL", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10011": { + "ex": "COMMON_SKILLICON_FORMCHANGE", + "nm": "COMMON_SKILLICON_REGENCOST", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10012": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10013": { + "ex": "COMMON_SKILLICON_FORMCHANGE", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_RELOAD" + }, + "13000": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATDEBUFF" + }, + "13001": { + "ex": "COMMON_SKILLICON_ZONE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BURNNIG" + }, + "13002": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "13003": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_RELOAD", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "13004": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "13005": { + "ex": "COMMON_SKILLICON_FEAR", + "nm": "COMMON_SKILLICON_FEAR", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "13006": { + "ex": "SKILLICON_MUTSUKI_EXSKILL", + "nm": "COMMON_SKILLICON_BATTLEITEM", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "13007": { + "ex": "COMMON_SKILLICON_LINE", + "nm": "COMMON_SKILLICON_IMMORTAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "13008": { + "ex": "COMMON_SKILLICON_RELOAD", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "13009": { + "ex": "COMMON_SKILLICON_PROVOKE", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "13010": { + "ex": "COMMON_SKILLICON_SHIELD", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_HEAL" + }, + "16000": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "16001": { + "ex": "COMMON_SKILLICON_EVASION", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16002": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16003": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "16004": { + "ex": "COMMON_SKILLICON_IGNOREDELAY", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20000": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20001": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20002": { + "ex": "COMMON_SKILLICON_ZONE", + "nm": "COMMON_SKILLICON_POISON", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "23000": { + "ex": "SKILLICON_AIRI_EXSKILL", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "23001": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "23002": { + "ex": "COMMON_SKILLICON_DOTHEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "23003": { + "ex": "COMMON_SKILLICON_STUNNED", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "23004": { + "ex": "SKILLICON_UTAHA_EXSKILL", + "nm": "SKILLICON_UTAHA_EXSKILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "23005": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "26000": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "26001": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "26002": { + "ex": "COMMON_SKILLICON_FOODDEBUFF", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "26003": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "26004": { + "ex": "COMMON_SKILLICON_OBSTACLE", + "nm": "COMMON_SKILLICON_SHIELD", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "26005": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "20003": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10014": { + "ex": "COMMON_SKILLICON_EVASION", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "23006": { + "ex": "COMMON_SKILLICON_OBSTACLE", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10015": { + "ex": "COMMON_SKILLICON_BEAM", + "nm": "SKILLICON_ARIS_PUBLICSKILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_ARIS_EXTRAPASSIVESKILL" + }, + "10016": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_MIDORI_EXTRAPASSIVESKILL" + }, + "13011": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_MOMOI_EXTRAPASSIVESKILL" + }, + "10017": { + "ex": "SKILLICON_CHERINO_EXSKILL", + "nm": "COMMON_SKILLICON_MARK", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CHERINO_EXTRAPASSIVESKILL" + }, + "26006": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10018": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10019": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "23007": { + "ex": "COMMON_SKILLICON_DOTHEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10020": { + "ex": "SKILLICON_KOHARU_EXSKILL", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10021": { + "ex": "COMMON_SKILLICON_CHILL", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATDEBUFF" + }, + "20004": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16005": { + "ex": "COMMON_SKILLICON_FORMCHANGE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20005": { + "ex": "SKILLICON_CH0058_EXSKILL", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10022": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_STUNNED", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10023": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CHILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_CHILL" + }, + "16006": { + "ex": "COMMON_SKILLICON_STUNNED", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STUNNED" + }, + "10024": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_LINE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10025": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0066_EXTRAPASSIVESKILL" + }, + "13012": { + "ex": "COMMON_SKILLICON_CLOUD", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATDEBUFF" + }, + "20006": { + "ex": "COMMON_SKILLICON_RECZONE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10026": { + "ex": "COMMON_SKILLICON_EVASION", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10027": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10028": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10029": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "23008": { + "ex": "COMMON_SKILLICON_SHIELD", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "20007": { + "ex": "SKILLICON_CH9999_EXSKILL", + "nm": "SKILLICON_CH9999_PUBLICSKILL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "SKILLICON_CH9999_EXTRAPASSIVESKILL" + }, + "20008": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20009": { + "ex": "SKILLICON_CH0164_EXSKILL", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10030": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_SHIELD" + }, + "16007": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "20010": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10031": { + "ex": "COMMON_SKILLICON_BOUNCEPROJECTILE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "SKILLICON_ARUNEWYEAR_EXTRAPASSIVESKILL" + }, + "10032": { + "ex": "COMMON_SKILLICON_DONUT", + "nm": "COMMON_SKILLICON_LINE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_MUSTUKINEWYEAR_EXTRAPASSIVESKILL" + }, + "20011": { + "ex": "COMMON_SKILLICON_DONUT", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10033": { + "ex": "SKILLICON_WAKAMO_EXSKILL", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "16008": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20012": { + "ex": "COMMON_SKILLICON_TRUCK", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20013": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10034": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10035": { + "ex": "COMMON_SKILLICON_COSTDECREASE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10036": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10037": { + "ex": "COMMON_SKILLICON_DONUT", + "nm": "COMMON_SKILLICON_IMMORTAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10038": { + "ex": "COMMON_SKILLICON_STUNNED", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "20014": { + "ex": "COMMON_SKILLICON_STUNNED", + "nm": "COMMON_SKILLICON_BURNNIG", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10039": { + "ex": "COMMON_SKILLICON_DAMAGEBYHIT_DAMAGED", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20015": { + "ex": "COMMON_SKILLICON_SHIELD", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "20016": { + "ex": "SKILLICON_CH0156_EXSKILL", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16009": { + "ex": "COMMON_SKILLICON_BURNNIG", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0113_EXTRAPASSIVE" + }, + "10040": { + "ex": "SKILLICON_CH0114_EXSKILL", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_HEAL" + }, + "10041": { + "ex": "COMMON_SKILLICON_ZONE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "20017": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10042": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_CLOUD", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10043": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "SKILLICON_CH0175_PUBLICSKILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10044": { + "ex": "COMMON_SKILLICON_FORMCHANGE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "26007": { + "ex": "SKILLICON_CH0176_EXSKILL", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10045": { + "ex": "COMMON_SKILLICON_BULLETTYPEBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_DUALBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "26008": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10046": { + "ex": "COMMON_SKILLICON_MARK", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10047": { + "ex": "COMMON_SKILLICON_STUNNED", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_CHILL" + }, + "10048": { + "ex": "COMMON_SKILLICON_AlWAYSCRITICAL", + "nm": "COMMON_SKILLICON_AlWAYSCRITICAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20018": { + "ex": "COMMON_SKILLICON_RECZONE", + "nm": "COMMON_SKILLICON_STUNNED", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10049": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONDUALEFFECT" + }, + "10050": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "SKILLICON_CH0137_EXTRAPASSIVESKILL" + }, + "10051": { + "ex": "COMMON_SKILLICON_FORMCHANGE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10052": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "16010": { + "ex": "SKILLICON_CH0181_EXSKILL", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONDUALEFFECT", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "20019": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10053": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_SHIELD", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "10054": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_HEAL" + }, + "16011": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "20020": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "10055": { + "ex": "COMMON_SKILLICON_RECZONE", + "nm": "COMMON_SKILLICON_WEAPONDUALEFFECT", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_CIRCLERADIUSINCREASE" + }, + "10056": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "20021": { + "ex": "COMMON_SKILLICON_DOTHEAL", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10057": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATDEBUFF" + }, + "20022": { + "ex": "COMMON_SKILLICON_COSTDECREASE", + "nm": "COMMON_SKILLICON_SHIELD", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16012": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10058": { + "ex": "COMMON_SKILLICON_EVASION", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_STATBUFF" + }, + "10059": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0069_EXTRAPASSIVESKILL" + }, + "10060": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_ZONE", + "ps": "COMMON_SKILLICON_DUALBUFF", + "sub": "COMMON_SKILLICON_HEAL" + }, + "20023": { + "ex": "COMMON_SKILLICON_ACCUMULATE", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10061": { + "ex": "COMMON_SKILLICON_MARK", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10062": { + "ex": "SKILLICON_CH0187_EXSKILL", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "20024": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10063": { + "ex": "SKILLICON_CH0198_EXSKILL", + "nm": "COMMON_SKILLICON_BOUNCEPROJECTILE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10064": { + "ex": "COMMON_SKILLICON_BULLETTYPEBUFF", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "20025": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "10065": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10066": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_BULLETTYPEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0200_EXTRAPASSIVE" + }, + "10067": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "26009": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10068": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_DOTHEAL", + "ps": "COMMON_SKILLICON_DUALBUFF", + "sub": "COMMON_SKILLICON_PROVOKE" + }, + "10069": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_DUALBUFF", + "sub": "COMMON_SKILLICON_DOTHEAL" + }, + "10070": { + "ex": "COMMON_SKILLICON_WEAPONDEBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20026": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "10071": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "10072": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "26010": { + "ex": "COMMON_SKILLICON_AlWAYSCRITICAL", + "nm": "COMMON_SKILLICON_FAN", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20027": { + "ex": "COMMON_SKILLICON_STATDEBUFF", + "nm": "COMMON_SKILLICON_COSTDECREASE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_REGENCOST" + }, + "10073": { + "ex": "COMMON_SKILLICON_BULLETTYPEBUFF", + "nm": "COMMON_SKILLICON_BULLETTYPEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20028": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_BOUNCEPROJECTILE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "16013": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10074": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0209_EXTRAPASSIVESKILL" + }, + "20029": { + "ex": "COMMON_SKILLICON_OBSTACLE", + "nm": "COMMON_SKILLICON_SHIELD", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10075": { + "ex": "COMMON_SKILLICON_DAMAGEBYHIT_DAMAGED", + "nm": "COMMON_SKILLICON_BURNNIG", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "13013": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10076": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "20030": { + "ex": "SKILLICON_CH0193_EXSKILL", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10077": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "COMMON_SKILLICON_BULLETTYPEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10078": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0089_EXTRAPASSIVESKILL" + }, + "20031": { + "ex": "COMMON_SKILLICON_HEAL", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10079": { + "ex": "SKILLICON_CH9998_EXSKILL", + "nm": "SKILLICON_CH9998_PUBLICSKILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10080": { + "ex": "SKILLICON_CH9997_EXSKILL", + "nm": "COMMON_SKILLICON_CIRCLE", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "SKILLICON_CH9997_EXSKILL" + }, + "26011": { + "ex": "SKILLICON_CH9996_EXSKILL", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10081": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0161_EXTRAPASSIVESKILL" + }, + "10082": { + "ex": "COMMON_SKILLICON_FAN", + "nm": "SKILLICON_CH0224_PUBLICSKILL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10083": { + "ex": "COMMON_SKILLICON_CROSS", + "nm": "COMMON_SKILLICON_BULLETTYPEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0225_EXTRAPASSIVESKILL" + }, + "20032": { + "ex": "COMMON_SKILLICON_BATTLEITEM", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_WEAPONBUFF" + }, + "10084": { + "ex": "COMMON_SKILLICON_CONFUSION", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_EXTRADAMAGE" + }, + "10085": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0233_ExtraPassive" + }, + "10087": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_TARGET", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "SKILLICON_CH0231_EXTRAPASSIVESKILL" + }, + "16014": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_WEAPONDEBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_HEAL" + }, + "20033": { + "ex": "COMMON_SKILLICON_CIRCLE", + "nm": "COMMON_SKILLICON_STATDEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "10086": { + "ex": "SKILLICON_CH0230_EXSKILL", + "nm": "COMMON_SKILLICON_BULLETTYPEBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + }, + "10088": { + "ex": "COMMON_SKILLICON_TARGET", + "nm": "COMMON_SKILLICON_WEAPONBUFF", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "SKILLICON_CH0239_EXTRAPASSIVESKILL" + }, + "10089": { + "ex": "COMMON_SKILLICON_WEAPONBUFF", + "nm": "COMMON_SKILLICON_HEAL", + "ps": "COMMON_SKILLICON_WEAPONBUFF", + "sub": "COMMON_SKILLICON_STATDEBUFF" + }, + "20034": { + "ex": "COMMON_SKILLICON_TRUCK", + "nm": "COMMON_SKILLICON_STATBUFF", + "ps": "COMMON_SKILLICON_STATBUFF", + "sub": "COMMON_SKILLICON_BULLETTYPEBUFF" + } +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/map/weaponid2nmae_map.json b/BlueArchiveUID/utils/map/weaponid2nmae_map.json new file mode 100644 index 0000000..11d57c4 --- /dev/null +++ b/BlueArchiveUID/utils/map/weaponid2nmae_map.json @@ -0,0 +1,177 @@ +{ + "10000": "酒红仰慕", + "10001": "多维战术", + "10002": "理想", + "10003": "我的必需品", + "10004": "终幕:破坏者", + "10005": "荷鲁斯之眼", + "10006": "神枪手", + "10007": "自动喷漆器", + "10008": "双龙", + "10009": "日常餐具", + "10010": "白牙 465", + "10011": "爱之教鞭", + "10012": "千年制最新型哑铃", + "10013": "血&火药", + "13000": "静谧解法", + "13001": "五七五式榴弹炮", + "13002": "无底", + "13003": "穿刺", + "13004": "小小机枪V", + "13005": "恶魔咆哮", + "13006": "给了糖也捣蛋", + "13007": "餐厅暴徒", + "13008": "真诚", + "13009": "安眠陪伴II", + "13010": "逻辑&理性", + "16000": "驱散", + "16001": "惊喜派对", + "16002": "K教授", + "16003": "安全", + "16004": "无义交火", + "20000": "幻光", + "20001": "鹰眼", + "20002": "本大人特制手枪", + "23000": "清爽薄荷巧克力", + "23001": "供餐部防身用枪TypeA", + "23002": "幸福微笑", + "23003": "自瞄器", + "23004": "大师零", + "23005": "常识", + "26000": "支援向导", + "26001": "回音链接", + "26002": "供餐部防身用枪TypeB", + "26003": "战术疗法", + "26004": "图书馆守则", + "26005": "甜品驱动", + "20003": "正义之显现", + "10014": "泉奈流超级忍具", + "23006": "樱花嘭嘭", + "10015": "光之剑:超新星", + "10016": "新奇灵感", + "13011": "独一构想", + "10017": "肃清", + "26006": "人马座之夜", + "10018": "彩虹猫冲刺", + "10019": "万物皆虚", + "23007": "诚挚祝愿", + "10020": "漆黑正义", + "10021": "万物皆虚", + "20004": "正义之显现", + "16005": "血&火药", + "20005": "我的必需品", + "10022": "终幕:破坏者", + "10023": "神枪手", + "16006": "日常餐具", + "10024": "白牙 465", + "10025": "爱之教鞭", + "13012": "第3号瓦尔基里制式手枪", + "20006": "本大人特制手枪", + "10026": "双龙", + "10027": "鹰眼", + "10028": "惊喜派对", + "10029": "光之彼岸", + "23008": "虔诚", + "20007": "演唱会用空气炮", + "20008": "成功人士", + "20009": "肃清", + "10030": "支援向导", + "16007": "忠诚", + "20010": "人马座之夜", + "10031": "酒红仰慕", + "10032": "给了糖也捣蛋", + "20011": "真诚", + "10033": "绯红灾厄", + "16008": "第14号瓦尔基里制式步枪", + "20012": "急救用突入套件", + "20013": "后门", + "10034": "温柔决意", + "10035": "音量抑制器", + "10036": "祝福", + "10037": "巴拉莱卡", + "10038": "RABBIT-31式冲锋枪", + "20014": "RABBIT-26式机枪", + "10039": "RABBIT-39式步枪", + "20015": "滑稽烟花", + "20016": "万魔殿制式手枪", + "16009": "满流溢散 霰弹枪", + "10040": "月咏流冲锋枪", + "10041": "神圣捕食者", + "20017": "身份", + "10042": "天蝎座", + "10043": "绯红灾厄", + "10044": "小小机枪Ⅴ", + "26007": "常识", + "10045": "荷鲁斯之眼", + "26008": "樱花嘭嘭", + "10046": "泉奈流超级忍具", + "10047": "五七五式榴弹炮", + "10048": "阿里乌斯制突击步枪", + "20018": "RABBIT-224式手枪", + "10049": "马比诺吉昂", + "10050": "淑女的气质", + "10051": "大师零", + "10052": "书记的表决", + "16010": "幻光", + "20019": "静谧解法", + "10053": "逻辑&理性", + "10054": "虔诚", + "16011": "穿刺", + "20020": "高岭之花", + "10055": "弹簧拳", + "10056": "战术疗法", + "20021": "幸福微笑", + "10057": "理想", + "20022": "供餐部防身用枪TypeA", + "16012": "餐厅暴徒", + "10058": "救护证明", + "10059": "孰与神似", + "10060": "熔岩恩惠!", + "20023": "第17号瓦尔基里制式手枪", + "10061": "净化援手", + "10062": "秘密时刻", + "20024": "皇室调制", + "10063": "再来一发", + "10064": "恶魔咆哮", + "20025": "驱散", + "10065": "战略领袖的诀窍", + "10066": "光之剑:超新星", + "10067": "秘密时刻", + "26009": "彩虹猫冲刺", + "10068": "流☆星", + "10069": "温故知新", + "10070": "玄龙&白虎", + "20026": "钢铁火炬", + "10071": "RABBIT-31式冲锋枪", + "10072": "RABBIT-26式机枪", + "26010": "RABBIT-39式步枪", + "20027": "白牙 465", + "10073": "音量抑制器", + "20028": "祝福", + "16013": "漆黑正义", + "10074": "诚挚祝愿", + "20029": "温柔决意", + "10075": "创作的……苦痛!", + "13013": "图书馆使用规则第7号", + "10076": "K教授", + "20030": "理想", + "10077": "红龙", + "10078": "红·莱克托", + "20031": "弹簧拳", + "10079": "刚巴尔特", + "10080": "精神向导", + "26011": "子弹球棒", + "10081": "百花缭乱制式步枪-少女决意", + "10082": "百花缭乱制式步枪-青春火花", + "10083": "百花缭乱制式步枪-深蓝智慧", + "20032": "多维战术", + "10084": "回音链接", + "10085": "自瞄器", + "10087": "成功人士", + "16014": "砰砰!酱", + "20033": "唯我独尊", + "10086": "终幕:破坏者", + "10088": "恶魔咆哮", + "10089": "酒红仰慕", + "20034": "无底" +} \ No newline at end of file diff --git a/BlueArchiveUID/utils/resource_path.py b/BlueArchiveUID/utils/resource_path.py index 25025b4..5a35aca 100644 --- a/BlueArchiveUID/utils/resource_path.py +++ b/BlueArchiveUID/utils/resource_path.py @@ -10,6 +10,12 @@ HEHEDI_LEVEL_GUIDE_PATH = MAIN_PATH / 'hehedi_level_guide' HEHEDI_CHAR_GUIDE_PATH = MAIN_PATH / 'hehedi_char_guide' +RESOURCE_PATH = MAIN_PATH / 'resource' +EQUIPMENT_ICON_PATH = RESOURCE_PATH / 'equipment_icon' +SKILL_ICON_PATH = RESOURCE_PATH / 'skill_icon' +STUDENT_COLLECTION_PATH = RESOURCE_PATH / 'student_collection' +WEAPON_ICON_PATH = RESOURCE_PATH / 'weapon_icon' + def init_dir(): for i in [ @@ -19,6 +25,11 @@ def init_dir(): CHAR_PATH, HEHEDI_LEVEL_GUIDE_PATH, HEHEDI_CHAR_GUIDE_PATH, + RESOURCE_PATH, + EQUIPMENT_ICON_PATH, + SKILL_ICON_PATH, + STUDENT_COLLECTION_PATH, + WEAPON_ICON_PATH, ]: i.mkdir(parents=True, exist_ok=True)