diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 90f5893..0229e58 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -418,10 +418,14 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): desc = desc.replace(f'#{i + 1}[f1]%', f'{temp!s}%') for i in range(len(desc_params)): desc = desc.replace(f'#{i + 1}[i]', str(desc_params[i])) - draw_text_by_line( - weapon_bg, (210, 115), desc, sr_font_24, '#F9F9F9', 350 - ) - char_info.paste(weapon_bg, (-10, 870), weapon_bg) + desclist = desc.split() + desctexty = 115 + for desctext in desclist: + desctexty = draw_text_by_line( + weapon_bg, (210, desctexty), desctext, sr_font_24, '#F9F9F9', 370 + ) + desctexty += 28 + char_info.paste(weapon_bg, (0, 855), weapon_bg) else: char_img_draw.text( (525, 1005), diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json index dabdfe4..1eae5d7 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json @@ -642,6 +642,17 @@ 0.08000000022351742 ] } + }, + "23012": { + "Param": { + "CriticalChance": [ + 0.36000000011175871, + 0.4200000001396984, + 0.48000000016763806, + 0.54000000019557774, + 0.60000000022351742 + ] + } }, "21031": { "enable": false diff --git a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py index 5ba66e0..a29175b 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py +++ b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py @@ -1680,6 +1680,32 @@ class Thisbodyisasword(BaseWeapon): return attribute_bonus +# 如泥酣眠 +class SleepLiketheDead(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 当装备者的普攻或战技伤害未造成暴击时,使自身暴击率提高36% + return True + + async def weapon_ability( + self, + Ultra_Use: float, + base_attr: Dict[str, float], + attribute_bonus: Dict[str, float], + ): + if await self.check(): + critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) + attribute_bonus['CriticalChanceBase'] = ( + critical_chance_base + + weapon_effect['23012']['Param']['CriticalChance'][ + self.weapon_rank - 1 + ] + ) + return attribute_bonus class Weapon: @classmethod @@ -1744,6 +1770,8 @@ class Weapon: 20006, 23014, ]: + if weapon.id_ == 23012: + return SleepLiketheDead(weapon) if weapon.id_ == 23014: return Thisbodyisasword(weapon) if weapon.id_ == 20006: diff --git a/StarRailUID/starrailuid_charinfo/get_char_img.py b/StarRailUID/starrailuid_charinfo/get_char_img.py index c61b794..c784393 100644 --- a/StarRailUID/starrailuid_charinfo/get_char_img.py +++ b/StarRailUID/starrailuid_charinfo/get_char_img.py @@ -103,23 +103,13 @@ async def get_char_args( if index == 0: fake_name, talent_num = await get_fake_char_str(part) # 判断是否开启fake_char - if '遗器' in msg: - char_data = await get_fake_char_data( - char_data, fake_name, changeuid - ) - else: - char_data = await get_char_data(uid, fake_name) + char_data = await get_char_data(uid, fake_name) if isinstance(char_data, str): return char_data continue if '遗器' in part: - fake_data = await get_char_data( - changeuid, part.replace('遗器', '').replace(changeuid, '') - ) - if isinstance(fake_data, str): - return fake_data - char_data = await get_fake_char_data(fake_data, fake_name, uid) + char_data = await get_fake_char_data(char_data, part.replace('遗器', '').replace(changeuid, ''), changeuid) if isinstance(char_data, str): return char_data else: @@ -188,38 +178,13 @@ async def get_fake_weapon_str(msg: str) -> Tuple[str, Optional[int]]: async def get_fake_char_data( - char_data: Dict, fake_name: str, uid: str + char_data: Dict, change_name: str, changeuid: str ) -> Union[Dict, str]: - fake_name = await alias_to_char_name(fake_name) - original_data = await get_char_data(uid, fake_name) + original_data = await get_char_data(changeuid, change_name) if isinstance(original_data, str): return original_data if isinstance(original_data, Dict): char_data['RelicInfo'] = original_data['RelicInfo'] - char_data['avatarAttributeBonus'] = original_data[ - 'avatarAttributeBonus' - ] - char_data['rankList'] = original_data['rankList'] - char_data['avatarSkill'] = original_data['avatarSkill'] - char_data['avatarExtraAbility'] = original_data['avatarExtraAbility'] - char_data['equipmentInfo'] = original_data['equipmentInfo'] - char_data['baseAttributes'] = original_data['baseAttributes'] - char_data['uid'] = original_data['uid'] - char_data['rank'] = original_data['rank'] - char_data['nickName'] = original_data['nickName'] - char_data['avatarRarity'] = original_data['avatarRarity'] - char_data['avatarPromotion'] = original_data['avatarPromotion'] - char_data['avatarName'] = fake_name - char_data['avatarId'] = await name_to_avatar_id(fake_name) - en_name: str = avatarId2EnName(char_data['avatarId']) # type: ignore - char_data['avatarEnName'] = en_name - if str(char_data['avatarId']) in avatarId2DamageType: - char_data['avatarElement'] = avatarId2DamageType[ - str(char_data['avatarId']) - ] - else: - return '要查询的角色不存在...' - char_data['avatarLevel'] = '80' return char_data @@ -263,6 +228,19 @@ async def get_char_data( return json.load(fp) +async def get_rank_list( + char_id: str, + talent_num: int, +): + rank_temp = [] + for index in range(talent_num): + rankTemp = {} + rank_id = int(str(char_id) + '0' + str(index + 1)) + rankTemp['rankId'] = rank_id + rankTemp['rankName'] = rankId2Name[str(rank_id)] + rank_temp.append(rankTemp) + return rank_temp + async def get_char( char_data: dict, weapon: Optional[str] = None, diff --git a/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png b/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png index be0e2e9..62e1fba 100644 Binary files a/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png and b/StarRailUID/starrailuid_charinfo/texture2D/weapon_bg.png differ