From f6be3ee23825249788f5e76a72f64b9e89b87431 Mon Sep 17 00:00:00 2001 From: a376148946 <376148946@qq.com> Date: Tue, 19 Sep 2023 12:25:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=9D=A2=E6=9D=BF=E5=85=89?= =?UTF-8?q?=E9=94=A5=E6=8A=80=E8=83=BD=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=B8=8E=E9=83=A8=E5=88=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starrailuid_charinfo/draw_char_img.py | 12 ++-- .../effect/Excel/weapon_effect.json | 11 ++++ .../effect/Weapon/Weapon.py | 28 +++++++++ .../starrailuid_charinfo/get_char_img.py | 56 ++++++------------ .../texture2D/weapon_bg.png | Bin 3639 -> 5099 bytes 5 files changed, 64 insertions(+), 43 deletions(-) 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 be0e2e910159c981a003b59a14c7807ca3ccafd2..62e1fba01fafe2aef250753834b0f148d772c127 100644 GIT binary patch literal 5099 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 literal 3639 zcmeHJ{X5g^AOFyUB1fICsISvX*f9Dam^eGA3v6$Ad@4C*PaIWk7)46}Sulv5K`W`B1~vuUM<_;>*i2fmrs9M+!p4D z=c|thAK$J>5|Ntd|788~<257Ok(9qS1Bbik)?0U;wf4r9tYIeXS7-y*fn2A0_;C+H zy1cUCG+?i7DC#W#)mt&oNBuMipx0V9<$TwbN;ybz`QjsKb}O)r`AA3O!!&nc2Xnve zw5=kGTxd~)P+0_lwlp{OUArj~acbU!oXd|PAoYOfFgMW`>yK=xb3c2pivuAmr4QP} z&*kIzxA_BLKX~Bg$;!%#aj`>Kod=LDMEjU*i?b?_QQl@_3LzBVg@26fK-MEmF_Fb= zb7h2FfKf5pAFtG6S}?Dm7QPNSsGpiO)E}mWzS&T%f1P1Cat?u{WzpE*Dl?f_`2+)L zY7lU?0xAT<{n}Y#Cvrz(a*7(dk6D6x_=|i`ewZ>owMFarZB6Msa0?rCD+rFQP1quC zAVvDaik8h?;-$;g9i@*_8`Z`89hG=yn1C)L)9p|Nyf>KxH^6aKFNO|v@yjlG!GNP1 ze>dy&1?P#wHduWEE+rr(NpNbWI@DS1I`g|+G905kCVv9aKy?ktln^Q(G8zr*gE%W; z;oxUUBiU%e0F)GEILrFA0f)WqSBP`r^wbdHEq*|tc^1B`Ov@TnMfgf&F@qi++B>b>? z%LcF~X|gwDJ4~}@Nt7CkNI!USbSr1fz~42FQCKouVaB~VyH^pfZPiTtMgEb$LLP); z_f6lR0QOi7@NS6XxZAUHE&M=!^ zGeUhuTn_yd7Kpv5Nw~ShV#oCGn*61}31V1eTt^psWnjvge2I;}zR1}r$ThRBWTdtt z!&aFpcpyXwtc65gLyKp^&67oG#>ht9Kh;&5Y~Vd} z*371TpUe2|R`KB*mKKfL=eSZ#(P?w!b#BE%cUd51wH9k;ExIRFx0sMqDIY0{s6=|& zQ{Qm^%wIC>+8oD;{vE0O{-QxY*GS?=wxl5ou(!|;}2{bAzXui2@8kaLZ$r^vzkcoUZ z`c&|n3NjRlx9DVB1)o{d82f_uGHw^LcGOlNegn&nPbL;J=5~dOAJOhx1_`k1U<|v;?QtiPu#4Fh*dC@eQ44y{hz|-}meiAI#(AHn@whVrNt3Il;^j@x{E9 zKZ$W#kSR|IBy$m?61_ALOMI||b7-o9ue7RXslEcN1FQ5m1?Ec?ek}$pw?66(j-^t8 z#;Ohz?@U>UwdhtW++pgB(d#MmV;13X_shaHWe7O(pyVANw@ zj@~olOe9kcoAVYIWAyW-1zPdvd|m}-(82WYlbIE!L{pSOB<=vdCV#hXER*Mgo(Rs48njOF$Z%xP}`69^%XEfT>}8E? zZnVmG3uLSau{v>Gqh9HB!zU)OJA&}EiW#!oVs4H!)?;5;J=UDAEVZFdtV}^~_)0$Q z(#4&Bqqke74fYG7S&hs>|8(b+CBt4$=8BVCVoN26*If7SU0zJcj%bv4wd>daep zE>J-G085!IIIn653jE4fQhu^%thlmtQu!pK_cLMafV7`H@LJ+Xh!hM?CnzEa^x#aO z_G?^IPEoOTt8xEAee|{WJ_rPY>L(CSNl(a%(#+9_TVvMKO=QK1C4A<7OC~FobY38t zc}zAM<}f*CD-rj2>(NJ;nsKJ7ne=1~LW1<#l7-C}1mzp@LP|NxrVXx)Vg981ew~sd zaa1Z8?qlvYgc!kgVcyhK)}Su%K=X4SM{d%UqIOLuEDV77hl74NFnuCGRY!dMlj;$- zsA-sGw%q<^<