diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 6021329..54fc7aa 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,4 +5,4 @@ "ms-python.isort", "ms-python.black-formatter" ] -} +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 3d68bd1..badf942 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,11 @@ { "python.languageServer": "Pylance", "python.analysis.typeCheckingMode": "basic", - "cSpell.words": ["enka", "genshin", "genshinuid"], + "cSpell.words": [ + "enka", + "genshin", + "genshinuid" + ], "editor.formatOnSave": true, "[python]": { "editor.defaultFormatter": "ms-python.black-formatter", @@ -10,11 +14,22 @@ "source.organizeImports": "explicit" } }, - "isort.args": ["--profile", "black"], + "isort.args": [ + "--profile", + "black" + ], "python.formatting.provider": "black", "python.linting.flake8Enabled": true, "python.linting.flake8CategorySeverity.W": "Warning", "python.linting.flake8CategorySeverity.F": "Warning", "python.linting.flake8CategorySeverity.E": "Warning", - "python.analysis.extraPaths": ["${workspaceFolder}/../../../../"] -} + "python.analysis.extraPaths": [ + "${workspaceFolder}/../../../" + ], + "python.autoComplete.extraPaths": [ + "${workspaceFolder}/../../../" + ], + "python.analysis.include": [ + "${workspaceFolder}/../../../" + ] +} \ No newline at end of file diff --git a/StarRailUID/starrailuid_charinfo/Excel/SkillData.json b/StarRailUID/starrailuid_charinfo/Excel/SkillData.json index 7b59da5..f2e1474 100644 --- a/StarRailUID/starrailuid_charinfo/Excel/SkillData.json +++ b/StarRailUID/starrailuid_charinfo/Excel/SkillData.json @@ -1205,5 +1205,56 @@ ], "Maze": [20], "Ultra_Use": [120] + }, + "1307": { + "Normal": [ + 0.3000000002793968, 0.3600000003352761, 0.4200000003911555, + 0.48000000044703484, 0.5400000005029142, 0.6000000005587935, + 0.6600000006146729, 0.7200000006705523, 0.7800000007264316 + ], + "BPSkill": [ + 0.45000000041909516, 0.4950000001117587, 0.5400000005029142, + 0.5850000001955777, 0.6300000005867332, 0.6750000002793968, + 0.7312500011175871, 0.7875000005587935, 0.8437500013969839, + 0.9000000008381903, 0.9450000005308539, 0.9900000009220093, + 1.0349999996833503, 1.0800000000745058, 1.1249999997671694 + ], + "BPSkill_D": [ + 0.1479999995790422, 0.1539999998640269, 0.1600000001490116, + 0.1659999997355044, 0.1720000000204891, 0.17799999960698187, + 0.18550000013783574, 0.19299999997019768, 0.20050000050105155, + 0.20799999963492155, 0.21399999991990626, 0.22000000020489097, + 0.22599999979138374, 0.23200000007636845, 0.23799999966286123 + ], + "Ultra_A": [ + 0.1500000001396984, 0.1600000001490116, 0.17000000015832484, + 0.18000000016763806, 0.1900000001769513, 0.20000000018626451, + 0.21250000037252903, 0.2249999998603016, 0.23750000004656613, + 0.25000000023283064, 0.26000000024214387, 0.2700000002514571, + 0.2800000002607703, 0.29000000027008355, 0.3000000002793968 + ], + "Ultra": [ + 0.7200000006705523, 0.7680000001564622, 0.8160000003408641, + 0.8640000005252659, 0.9120000007096678, 0.9600000008940697, + 1.0200000000186265, 1.0800000000745058, 1.1400000001303852, + 1.2000000001862645, 1.2479999996721745, 1.2959999998565763, + 1.3440000000409782, 1.39200000022538, 1.440000000409782 + ], + "Talent": [ + 0.9600000008940697, 1.1183999998029321, 1.2768000003416091, + 1.4352000001817942, 1.5936000007204711, 1.7520000005606562, + 1.8960000004153699, 2.040000000037253, 2.220000000204891, + 2.400000000372529, 2.5200000004842877, 2.6400000005960464, + 2.760000000707805, 2.880000000819564, 3 + ], + "Talent_UP": [ + 0.04799999948590994, 0.0559200004208833, 0.06384000065736473, + 0.07176000089384615, 0.07968000043183565, 0.08759999996982515, + 0.0948000003118068, 0.10199999995529652, 0.11100000003352761, + 0.12000000011175871, 0.12599999969825149, 0.1319999999832362, + 0.13799999956972897, 0.14399999985471368, 0.1500000001396984 + ], + "Maze": [20], + "Ultra_Use": [120] } } diff --git a/StarRailUID/starrailuid_charinfo/__init__.py b/StarRailUID/starrailuid_charinfo/__init__.py index 1b41588..6339585 100644 --- a/StarRailUID/starrailuid_charinfo/__init__.py +++ b/StarRailUID/starrailuid_charinfo/__init__.py @@ -2,20 +2,20 @@ import re from pathlib import Path from typing import Tuple, cast -from gsuid_core.bot import Bot -from gsuid_core.message_models import Button -from gsuid_core.models import Event -from gsuid_core.sv import SV from PIL import Image +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 starrail_damage_cal.map.SR_MAP_PATH import avatarId2Name +from .to_card import api_to_card from ..utils.convert import get_uid +from ..utils.sr_prefix import PREFIX from ..utils.error_reply import UID_HINT +from .get_char_img import draw_char_info_img from ..utils.image.convert import convert_img from ..utils.resource.RESOURCE_PATH import TEMP_PATH -from ..utils.sr_prefix import PREFIX -from .get_char_img import draw_char_info_img -from .to_card import api_to_card sv_char_info_config = SV('sr面板设置', pm=2) sv_get_char_info = SV('sr面板查询', priority=10) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index eafe271..99f7f89 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -5,16 +5,29 @@ import textwrap from pathlib import Path from typing import Dict, Union +from PIL import Image, ImageDraw from gsuid_core.logger import logger +from starrail_damage_cal.to_data import api_to_dict from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.image_tools import draw_text_by_line -from PIL import Image, ImageDraw -from starrail_damage_cal.cal_damage import cal_char_info, cal_info -from starrail_damage_cal.to_data import api_to_dict +from starrail_damage_cal.cal_damage import cal_info, cal_char_info from ..utils.error_reply import CHAR_HINT -from ..utils.excel.read_excel import light_cone_ranks from ..utils.fonts.first_world import fw_font_28 +from ..utils.excel.read_excel import light_cone_ranks +from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name +from ..utils.map.SR_MAP_PATH import ( + RelicId2Rarity, + AvatarRelicScore, + avatarId2Name, +) +from ..utils.resource.RESOURCE_PATH import ( + RELIC_PATH, + SKILL_PATH, + PLAYER_PATH, + WEAPON_PATH, + CHAR_PORTRAIT_PATH, +) from ..utils.fonts.starrail_fonts import ( sr_font_18, sr_font_20, @@ -25,19 +38,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_38, ) -from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id -from ..utils.map.SR_MAP_PATH import ( - AvatarRelicScore, - RelicId2Rarity, - avatarId2Name, -) -from ..utils.resource.RESOURCE_PATH import ( - CHAR_PORTRAIT_PATH, - PLAYER_PATH, - RELIC_PATH, - SKILL_PATH, - WEAPON_PATH, -) Excel_path = Path(__file__).parent with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: @@ -95,7 +95,7 @@ RELIC_CNT = { } -async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): +async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes, str]: if isinstance(char_data, str): return char_data char = await cal_char_info(char_data) @@ -132,9 +132,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): # 放角色名 char_img_draw = ImageDraw.Draw(char_info) - char_img_draw.text( - (620, 207), char.char_name, (255, 255, 255), sr_font_38, 'lm' - ) + char_img_draw.text((620, 207), char.char_name, (255, 255, 255), sr_font_38, 'lm') if hasattr(sr_font_38, 'getsize'): char_name_len = sr_font_38.getsize(char.char_name)[0] # type: ignore else: @@ -180,11 +178,13 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): hp = int(char.base_attributes.get('hp')) add_hp = int( char.add_attr.get('HPDelta', 0) - + hp * char.add_attr.get('HPAddedRatio', 0) - ) - attr_bg_draw.text( - (413, 31), f'{hp + add_hp}', white_color, sr_font_26, 'rm' + + hp + * char.add_attr.get( + 'HPAddedRatio', + 0, + ) ) + attr_bg_draw.text((413, 31), f'{hp + add_hp}', white_color, sr_font_26, 'rm') attr_bg_draw.text( (428, 31), f'(+{round(add_hp)!s})', @@ -275,9 +275,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): 'rm', ) # 效果命中 - status_probability_base = ( - char.add_attr.get('StatusProbabilityBase', 0) * 100 - ) + status_probability_base = char.add_attr.get('StatusProbabilityBase', 0) * 100 attr_bg_draw.text( (500, 31 + 48 * 6), f'{status_probability_base:.1f}%', @@ -402,8 +400,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): weapon_bg.paste(rank_img, (weapon_name_len + 330, 2), rank_img) rarity_img = Image.open( - TEXT_PATH - / f'LightCore_Rarity{char.equipment["equipmentRarity"]}.png' + TEXT_PATH / f'LightCore_Rarity{char.equipment["equipmentRarity"]}.png' ).resize((306, 72)) weapon_bg.paste(rarity_img, (223, 55), rarity_img) weapon_bg_draw.text( @@ -416,9 +413,9 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): # 武器技能 desc = light_cone_ranks[str(char.equipment['equipmentID'])]['desc'] - desc_params = light_cone_ranks[str(char.equipment['equipmentID'])][ - 'params' - ][char.equipment['equipmentRank'] - 1] + desc_params = light_cone_ranks[str(char.equipment['equipmentID'])]['params'][ + char.equipment['equipmentRank'] - 1 + ] for i in range(len(desc_params)): temp = math.floor(desc_params[i] * 1000) / 10 desc = desc.replace(f'#{i + 1}[i]%', f'{temp!s}%') @@ -588,9 +585,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): anchor='rm', ) - char_info.paste( - relic_img, RELIC_POS[str(relic['Type'])], relic_img - ) + char_info.paste(relic_img, RELIC_POS[str(relic['Type'])], relic_img) relic_score += single_relic_score if relic_score > 210: relic_value_level = Image.open(TEXT_PATH / 'CommonIconSSS.png') @@ -662,9 +657,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): damage_img = Image.open(TEXT_PATH / 'attack_1.png') else: damage_img = Image.open(TEXT_PATH / 'attack_2.png') - char_info.paste( - damage_img, (0, 2028 + damage_num * 48), damage_img - ) + char_info.paste(damage_img, (0, 2028 + damage_num * 48), damage_img) char_img_draw.text( (55, 2048 + damage_num * 48), f'{damage_info["name"]}', @@ -819,9 +812,7 @@ async def get_relic_score( add_value = subValue * 0.3 * 0.5 * weight_dict['AttackDelta'] * 1.0 relic_score += add_value if subProperty == 'DefenceDelta': - add_value = ( - subValue * 0.3 * 0.5 * weight_dict['DefenceDelta'] * 1.0 - ) + add_value = subValue * 0.3 * 0.5 * weight_dict['DefenceDelta'] * 1.0 relic_score += add_value if subProperty == 'HPDelta': add_value = subValue * 0.158 * 0.5 * weight_dict['HPDelta'] * 1.0 @@ -830,9 +821,7 @@ async def get_relic_score( add_value = subValue * 1.5 * weight_dict['AttackAddedRatio'] * 100 relic_score += add_value if subProperty == 'DefenceAddedRatio': - add_value = ( - subValue * 1.19 * weight_dict['DefenceAddedRatio'] * 100 - ) + add_value = subValue * 1.19 * weight_dict['DefenceAddedRatio'] * 100 relic_score += add_value if subProperty == 'HPAddedRatio': add_value = subValue * 1.5 * weight_dict['HPAddedRatio'] * 100 @@ -841,18 +830,12 @@ async def get_relic_score( add_value = subValue * 2.53 * weight_dict['SpeedDelta'] relic_score += add_value if subProperty == 'BreakDamageAddedRatioBase': - add_value = ( - subValue * 1.0 * weight_dict['BreakDamageAddedRatioBase'] * 100 - ) + add_value = subValue * 1.0 * weight_dict['BreakDamageAddedRatioBase'] * 100 relic_score += add_value if subProperty == 'StatusProbabilityBase': - add_value = ( - subValue * 1.49 * weight_dict['StatusProbabilityBase'] * 100 - ) + add_value = subValue * 1.49 * weight_dict['StatusProbabilityBase'] * 100 relic_score += add_value if subProperty == 'StatusResistanceBase': - add_value = ( - subValue * 1.49 * weight_dict['StatusResistanceBase'] * 100 - ) + add_value = subValue * 1.49 * weight_dict['StatusResistanceBase'] * 100 relic_score += add_value return relic_score diff --git a/StarRailUID/starrailuid_charinfo/get_char_img.py b/StarRailUID/starrailuid_charinfo/get_char_img.py index bca9eb7..976e698 100644 --- a/StarRailUID/starrailuid_charinfo/get_char_img.py +++ b/StarRailUID/starrailuid_charinfo/get_char_img.py @@ -133,17 +133,13 @@ async def get_char_args( if isinstance(char_data, str): return char_data else: - for i, s in enumerate( - ['头部', '手部', '躯干', '腿部', '位面球', '连结绳'] - ): + for i, s in enumerate(['头部', '手部', '躯干', '腿部', '位面球', '连结绳']): if '赤沙' in part: continue if part[-1] in PieceName_ilst[i]: if isinstance(char_data, str): return char_data - char_data = await change_equip( - changeuid, char_data, part, s, i - ) + char_data = await change_equip(changeuid, char_data, part, s, i) if not char_data: change_name = part.replace(part[-1], '') return f'要替换的{change_name}的{s}遗器不存在噢~' @@ -154,9 +150,7 @@ async def get_char_args( return char_data, weapon, weapon_affix, talent_num -async def change_equip( - uid: str, char_data: Dict, part: str, s: str, i: int -) -> Dict: +async def change_equip(uid: str, char_data: Dict, part: str, s: str, i: int) -> Dict: char_name = part.replace(part[-1], '').replace(uid, '') fake_data = await get_char_data(uid, char_name) if isinstance(fake_data, str): @@ -265,28 +259,18 @@ async def make_new_charinfo( char_id = await name_to_avatar_id(fake_name) char_data['avatarId'] = int(char_id) char_data['avatarName'] = fake_name - char_data['avatarElement'] = avatarId2DamageType[ - str(char_data['avatarId']) - ] - char_data['avatarRarity'] = str( - avatarId2Rarity[str(char_data['avatarId'])] - ) + char_data['avatarElement'] = avatarId2DamageType[str(char_data['avatarId'])] + char_data['avatarRarity'] = str(avatarId2Rarity[str(char_data['avatarId'])]) char_data['avatarPromotion'] = 6 char_data['avatarLevel'] = 80 char_data['avatarSkill'] = await get_skill_list(char_data['avatarId']) - char_data['avatarExtraAbility'] = await get_extra_list( - char_data['avatarId'] - ) - char_data['avatarAttributeBonus'] = await get_attribute_list( - char_data['avatarId'] - ) + char_data['avatarExtraAbility'] = await get_extra_list(char_data['avatarId']) + char_data['avatarAttributeBonus'] = await get_attribute_list(char_data['avatarId']) char_data['RelicInfo'] = [] char_data['avatarEnName'] = avatarId2EnName[str(char_data['avatarId'])] char_data['rank'] = 0 char_data['rankList'] = [] - char_data['baseAttributes'] = await get_baseAttributes( - char_data['avatarId'] - ) + char_data['baseAttributes'] = await get_baseAttributes(char_data['avatarId']) char_data['equipmentInfo'] = {} return char_data @@ -316,13 +300,9 @@ async def get_baseAttributes( # 速度 base_attributes['speed'] = avatar_promotion_base.SpeedBase.Value # 暴击率 - base_attributes[ - 'CriticalChanceBase' - ] = avatar_promotion_base.CriticalChance.Value + base_attributes['CriticalChanceBase'] = avatar_promotion_base.CriticalChance.Value # 暴击伤害 - base_attributes[ - 'CriticalDamageBase' - ] = avatar_promotion_base.CriticalDamage.Value + base_attributes['CriticalDamageBase'] = avatar_promotion_base.CriticalDamage.Value # 嘲讽 base_attributes['BaseAggro'] = avatar_promotion_base.BaseAggro.Value return base_attributes @@ -342,9 +322,7 @@ async def get_attribute_list( attribute_bonus_temp['statusAdd'] = {} if status_add: for property_ in status_add: - attribute_bonus_temp['statusAdd']['property'] = property_[ - 'type' - ] + attribute_bonus_temp['statusAdd']['property'] = property_['type'] attribute_bonus_temp['statusAdd']['name'] = Property2Name[ property_['type'] ] @@ -374,9 +352,7 @@ async def get_skill_list( skill_temp['skillId'] = char_id * 100 + skillid skill_temp['skillName'] = skillId2Name[str(skill_temp['skillId'])] skill_temp['skillEffect'] = skillId2Effect[str(skill_temp['skillId'])] - skill_temp['skillAttackType'] = skillId2AttackType[ - str(skill_temp['skillId']) - ] + skill_temp['skillAttackType'] = skillId2AttackType[str(skill_temp['skillId'])] skilllevel = 10 if skillid == 1: skilllevel = 6 @@ -429,9 +405,7 @@ async def get_char( skill_id = item['id'] skill_up_num = item['num'] # 查找skill_id在不在avatarSkill中 - for index, skill_item in enumerate( - char_data['avatarSkill'] - ): + for index, skill_item in enumerate(char_data['avatarSkill']): if str(skill_id) == str(skill_item['skillId']): if skill_id[-1] == 1: skilllevel_max = 7 @@ -439,9 +413,7 @@ async def get_char( skilllevel_max = 12 skilllevel = min( skilllevel_max, - char_data['avatarSkill'][index][ - 'skillLevel' - ] + char_data['avatarSkill'][index]['skillLevel'] + skill_up_num, ) char_data['avatarSkill'][index][ @@ -462,13 +434,11 @@ async def get_char( equipment_info['equipmentLevel'] = 80 equipment_info['equipmentPromotion'] = 6 equipment_info['equipmentRank'] = weapon_affix - equipment_info['equipmentRarity'] = EquipmentID2Rarity[ - str(equipmentid) - ] + equipment_info['equipmentRarity'] = EquipmentID2Rarity[str(equipmentid)] equipment_base_attributes = {} - equipment_promotion_base = EquipmentPromotionConfig.Equipment[ - str(equipmentid) - ]['6'] + equipment_promotion_base = EquipmentPromotionConfig.Equipment[str(equipmentid)][ + '6' + ] # 生命值 equipment_base_attributes['hp'] = ( diff --git a/StarRailUID/starrailuid_charinfo/texture2D/ring_4.png b/StarRailUID/starrailuid_charinfo/texture2D/ring_4.png new file mode 100644 index 0000000..d37964d Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/ring_4.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/ring_5.png b/StarRailUID/starrailuid_charinfo/texture2D/ring_5.png new file mode 100644 index 0000000..79264e1 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/ring_5.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/ring_mask.png b/StarRailUID/starrailuid_charinfo/texture2D/ring_mask.png new file mode 100644 index 0000000..0f0e764 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/ring_mask.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/shin.jpg b/StarRailUID/starrailuid_charinfo/texture2D/shin.jpg new file mode 100644 index 0000000..36d1792 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/shin.jpg differ diff --git a/StarRailUID/starrailuid_charinfo/to_card.py b/StarRailUID/starrailuid_charinfo/to_card.py index a47ca6c..3a305dd 100644 --- a/StarRailUID/starrailuid_charinfo/to_card.py +++ b/StarRailUID/starrailuid_charinfo/to_card.py @@ -2,19 +2,16 @@ import asyncio from pathlib import Path from typing import Dict, List, Tuple, Union -from ..utils.fonts.first_world import fw_font_28 -from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58 -from ..utils.image.convert import convert_img -from ..utils.map.name_covert import avatar_id_to_char_star -from ..utils.resource.RESOURCE_PATH import ( - CHAR_ICON_PATH, - CHAR_PREVIEW_PATH, - PLAYER_PATH, -) - from PIL import Image, ImageDraw -from starrail_damage_cal.map.SR_MAP_PATH import avatarId2Name from starrail_damage_cal.to_data import api_to_dict +from gsuid_core.utils.image.convert import convert_img +from starrail_damage_cal.map.SR_MAP_PATH import avatarId2Name +from gsuid_core.utils.image.image_tools import crop_center_img + +from ..utils.fonts.first_world import fw_font_28 +from ..utils.map.name_covert import avatar_id_to_char_star +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH, CHAR_PREVIEW_PATH +from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58 half_color = (255, 255, 255, 120) first_color = (29, 29, 29) @@ -23,7 +20,7 @@ white_color = (247, 247, 247) gray_color = (175, 175, 175) TEXT_PATH = Path(__file__).parent / 'texture2D' -char_mask = Image.open(TEXT_PATH / 'char_mask.png') +char_mask = Image.open(TEXT_PATH / 'ring_mask.png') char_bg_mask = Image.open(TEXT_PATH / 'char_bg_mask.png') tag = Image.open(TEXT_PATH / 'tag.png') footbar = Image.open(TEXT_PATH / 'footbar.png') @@ -65,29 +62,26 @@ async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0): return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255))) else: line1 = f'UID {uid} 刷新成功' - line2 = ( - f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板' - ) + line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板' char_num = len(char_data_list) if char_num <= 4: based_w, based_h = 1380, 926 show_type = 1 else: show_type = 0 - based_w, based_h = 1380, 660 + (char_num - 5) // 5 * 110 - if (char_num - 5) % 5 >= 4: - based_h += 110 + based_w, based_h = 1380, 310 + (((char_num - 1) // 4) + 1) * 320 - img = Image.open(TEXT_PATH / 'shin-w.jpg').resize((based_w, based_h)) + img = Image.open(TEXT_PATH / 'shin.jpg') + img = crop_center_img(img, based_w, based_h) img.paste(tag, (0, 0), tag) img_draw = ImageDraw.Draw(img, 'RGBA') # 写底层文字 img_draw.text( - (690, based_h - 16), + (690, based_h - 26), '--Created by qwerdvd-Designed By Wuyi-Thank for mihomo.me--', - (0, 0, 255), + (22, 22, 22), fw_font_28, 'mm', ) @@ -151,40 +145,35 @@ async def draw_mihomo_char(index: int, img: Image.Image, char_data: Dict): async def draw_enka_char(index: int, img: Image.Image, char_data: Dict): char_id = char_data['avatarId'] char_star = await avatar_id_to_char_star(str(char_id)) - char_card = Image.open(TEXT_PATH / f'char_card_{char_star}.png') - char_img = ( - Image.open(str(CHAR_ICON_PATH / f'{char_id}.png')) - .convert('RGBA') - .resize((204, 204)) + char_card = Image.open(TEXT_PATH / f'ring_{char_star}.png') + _path = CHAR_PREVIEW_PATH / f'{char_id}.png' + char_img = Image.open(_path).convert('RGBA') + char_img = char_img.resize( + (int(char_img.size[0] * 0.76), int(char_img.size[1] * 0.76)) ) - char_temp = Image.new('RGBA', (220, 220)) - char_temp.paste(char_img, (8, 8), char_img) - char_card.paste(char_temp, (0, 0), char_mask) - if index <= 7: - if img.size[0] <= 1100: - x = 60 + (index % 4) * 220 - else: - x = 160 + (index % 4) * 220 - img.paste( - char_card, - (x, 187 + (index // 4) * 220), - char_card, - ) - elif index <= 12: - img.paste( - char_card, - (50 + (index % 8) * 220, 296), - char_card, - ) - else: - _i = index - 13 - x, y = 50 + (_i % 9) * 220, 512 + (_i // 9) * 220 - if _i % 9 >= 5: - y += 110 - x = 160 + ((_i - 5) % 9) * 220 - img.paste( - char_card, - (x, y), - char_card, - ) + char_temp = Image.new('RGBA', (300, 400)) + card_temp = Image.new('RGBA', (300, 400)) + char_temp.paste(char_img, (19, 57), char_img) + card_temp.paste(char_temp, (0, 0), char_mask) + + char_draw = ImageDraw.Draw(card_temp) + char_draw.text( + (144, 285), + char_data['avatarName'], + 'white', + sr_font_30, + 'mm', + ) + + img.paste( + char_card, + (113 + (index % 4) * 289, 152 + (index // 4) * 336), + char_card, + ) + + img.paste( + card_temp, + (113 + (index % 4) * 289, 152 + (index // 4) * 336), + card_temp, + ) diff --git a/StarRailUID/starrailuid_signin/sign.py b/StarRailUID/starrailuid_signin/sign.py index 3e615dc..24b72f8 100644 --- a/StarRailUID/starrailuid_signin/sign.py +++ b/StarRailUID/starrailuid_signin/sign.py @@ -43,9 +43,9 @@ async def sign_in(sr_uid: str) -> str: if isinstance(sign_data, int): logger.warning(f'[SR签到] {sr_uid} 出错, 请检查Cookies是否过期!') return 'sr签到失败...请检查Cookies是否过期!' - if sign_data.risk_code: + if sign_data.risk_code == 5001 or sign_data.risk_code == 0: # 出现校验码 - if sign_data.risk_code == 5001: + if sign_data.risk_code == 5001 and sign_data.is_risk: if core_plugins_config.get_config('CaptchaPass').data: gt = sign_data.gt ch = sign_data.challenge @@ -76,13 +76,14 @@ async def sign_in(sr_uid: str) -> str: f'[SR签到] [无感验证] {sr_uid} 该用户重试 {index} 次验证成功!' ) break - if (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'): + elif (int(str(sr_uid)[0]) > 5) and (sign_data.code == 'ok'): # 国际服签到无risk_code字段 logger.info(f'[SR国际服签到] {sr_uid} 签到成功!') break # 重试超过阈值 - logger.warning('[SR签到] 超过请求阈值...') - return 'sr签到失败...出现验证码!\n请过段时间使用[签到]或由管理员[全部重签]或手动至米游社进行签到!' + else: + logger.warning('[SR签到] 超过请求阈值...') + return 'sr签到失败...出现验证码!\n请过段时间使用[签到]或由管理员[全部重签]或手动至米游社进行签到!' # 签到失败 else: im = 'sr签到失败!' diff --git a/StarRailUID/utils/map/data/AvatarRelicScore.json b/StarRailUID/utils/map/data/AvatarRelicScore.json index 35b93e5..35f13c2 100644 --- a/StarRailUID/utils/map/data/AvatarRelicScore.json +++ b/StarRailUID/utils/map/data/AvatarRelicScore.json @@ -89,10 +89,64 @@ "StatusResistanceBase": 0.0, "AttributeAddedRatio": 1 }, + { + "role": "黑天鹅", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 1, + "AttackAddedRatio": 1, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0.5, + "CriticalDamageBase": 0.5, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 1, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "花火", + "HPDelta": 0.5, + "HPAddedRatio": 0.5, + "AttackDelta": 0.5, + "AttackAddedRatio": 0.5, + "DefenceDelta": 0.5, + "DefenceAddedRatio": 0.5, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 1.0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0.0 + }, + { + "role": "米沙", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.75, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, { "role": "布洛妮娅", - "HPDelta": 0.75, - "HPAddedRatio": 0.75, + "HPDelta": 0.5, + "HPAddedRatio": 0.5, "AttackDelta": 0.5, "AttackAddedRatio": 0.5, "DefenceDelta": 0.5, diff --git a/StarRailUID/utils/map/data/char_alias.json b/StarRailUID/utils/map/data/char_alias.json index 5b50fba..fb8e840 100644 --- a/StarRailUID/utils/map/data/char_alias.json +++ b/StarRailUID/utils/map/data/char_alias.json @@ -39,6 +39,9 @@ "1302": ["银枝"], "1305": ["真理医生"], "1303": ["阮•梅", "阮梅"], + "1306": ["花火"], + "1307": ["黑天鹅"], + "1312": ["米沙"], "8000": [ "开拓者", "爷", @@ -120,6 +123,14 @@ "21032": ["镂月裁云之意", "镂月裁云"], "21033": ["无处可逃"], "21034": ["今日亦是和平的一日", "和平的一日"], + "21035": ["何物为真"], + "21036": ["美梦小镇大冒险", "大冒险", "美梦小镇"], + "21037": ["最后的赢家"], + "21038": ["在火的远处"], + "21039": ["织造命运之线", "命运之线"], + "21040": ["银河沦陷日"], + "21041": ["好戏开演"], + "21042": ["铭记于心的约定"], "22000": ["新手任务开始前"], "23000": ["银河铁道之夜"], "23001": ["于夜色中", "希儿专武"], @@ -141,6 +152,8 @@ "23018": ["片刻,留在眼底", "片刻留在眼底", "留在眼底"], "23019": ["镜中故我"], "23020": ["纯粹思维的洗礼", "思维的洗礼"], + "23021": ["游戏尘寰", "游戏"], + "23022": ["重塑时光之忆", "时光之忆"], "24000": ["记一位星神的陨落", "星神陨落", "星神的陨落"], "24001": ["星海巡航"], "24002": ["记忆的质料"],