From 50f5ee5d710d7623062b139d09991ae184775d72 Mon Sep 17 00:00:00 2001 From: CMHopeSunshine <277073121@qq.com> Date: Sat, 9 Jul 2022 16:25:15 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0`=E4=BC=98?= =?UTF-8?q?=E8=8F=88=E3=80=81=E8=BE=BE=E8=BE=BE=E5=88=A9=E4=BA=9A=E3=80=81?= =?UTF-8?q?=E8=BF=AA=E5=8D=A2=E5=85=8B=E3=80=81=E5=87=9D=E5=85=89=E3=80=81?= =?UTF-8?q?=E8=8F=B2=E8=B0=A2=E5=B0=94=E3=80=81=E5=8C=97=E6=96=97=E3=80=81?= =?UTF-8?q?=E7=A5=9E=E9=87=8C=E7=BB=AB=E4=BA=BA=E3=80=81=E8=8D=92=E6=B3=B7?= =?UTF-8?q?=E4=B8=80=E6=96=97`=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Paimon_Info/__init__.py | 2 +- Paimon_Info/damage_cal/common.py | 168 +++++++++++++++++++++------ Paimon_Info/damage_cal/damage.py | 193 +++++++++++++------------------ Paimon_Info/draw_role_card.py | 5 +- README.md | 4 +- UPDATE_LOG.md | 4 +- utils/enka_util.py | 3 +- 7 files changed, 230 insertions(+), 149 deletions(-) diff --git a/Paimon_Info/__init__.py b/Paimon_Info/__init__.py index 47079a4..b0ee464 100644 --- a/Paimon_Info/__init__.py +++ b/Paimon_Info/__init__.py @@ -585,7 +585,7 @@ async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()): @role_info.got('uid', prompt='请把要查询的uid给派蒙哦~') -# @exception_handler() +@exception_handler() async def _(event: MessageEvent, state: T_State): uid = transform_uid(state['uid']) if uid: diff --git a/Paimon_Info/damage_cal/common.py b/Paimon_Info/damage_cal/common.py index ad892d7..3a5d7e9 100644 --- a/Paimon_Info/damage_cal/common.py +++ b/Paimon_Info/damage_cal/common.py @@ -485,6 +485,7 @@ def get_damage_multipiler(data: dict) -> dict: level_q = data['天赋'][2]['等级'] - 1 level_e = data['天赋'][1]['等级'] - 1 level_a = data['天赋'][0]['等级'] - 1 + dm = {} if data['名称'] == '钟离': return { '玉璋护盾': (float(skill_data['元素战技·地心']['数值']['护盾附加吸收量'][level_e].replace('%最大生命值', '')) / 100.0, @@ -494,12 +495,13 @@ def get_damage_multipiler(data: dict) -> dict: '踢枪': float(skill_data['普通攻击·岩雨']['数值']['五段伤害'][level_a].replace('%×4', '')) / 100.0 } if data['名称'] == '胡桃': - return { - '攻击力提高': float(skill_data['蝶引来生']['数值']['攻击力提高'][level_e].replace('%生命值上限', '')) / 100.0, - '重击': float(skill_data['普通攻击·往生秘传枪法']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, - '雪梅香': float(skill_data['蝶引来生']['数值']['血梅香伤害'][level_e].replace('%', '')) / 100.0, - '大招': float(skill_data['安神秘法']['数值']['低血量时技能伤害'][level_q].replace('%', '')) / 100.0 - } + dm = {'B:l70-增伤-*': (0.33, '半血以下',)} + dm['B:l1-攻击力'] = (float(skill_data['蝶引来生']['数值']['攻击力提高'][level_e].replace('%生命值上限', '')) / 100.0 * (data['属性']['基础生命'] + data['属性']['额外生命']), '开E后') + dm['AZ-e火:裸重击'] = float(skill_data['普通攻击·往生秘传枪法']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0 + dm['AZ-e火-r蒸发1.5:重击蒸发'] = float(skill_data['普通攻击·往生秘传枪法']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0 + dm['E-e火-r蒸发1.5:雪梅香蒸发'] = float(skill_data['蝶引来生']['数值']['血梅香伤害'][level_e].replace('%', '')) / 100.0 + dm['Q-e火-r蒸发1.5:大招蒸发'] = float(skill_data['安神秘法']['数值']['低血量时技能伤害'][level_q].replace('%', '')) / 100.0 + return dm if data['名称'] == '雷电将军': qa = skill_data['奥义·梦想真说']['数值']['重击伤害'][level_q].split('+') return { @@ -517,15 +519,17 @@ def get_damage_multipiler(data: dict) -> dict: if data['名称'] == '魈': a = skill_data['普通攻击·卷积微尘']['数值']['低空/高空坠地冲击伤害'][level_a].split('/') return { - 'AX:低空下落首戳': float(a[0].replace('%', '')) / 100, - 'AX:高空下落首戳': float(a[1].replace('%', '')) / 100, - 'E:风轮两立': float(skill_data['风轮两立']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, - 'B:靖妖傩舞': float(skill_data['靖妖傩舞']['数值']['普通攻击/重击/下落攻击伤害提升'][level_q].replace('%', '')) / 100 + 'B:l1-增伤-AX': float(skill_data['靖妖傩舞']['数值']['普通攻击/重击/下落攻击伤害提升'][level_q].replace('%', '')) / 100, + 'E-e风:风轮两立': float(skill_data['风轮两立']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, + 'AX-e风:低空下落首戳': float(a[0].replace('%', '')) / 100, + 'AX-e风:高空下落首戳': float(a[1].replace('%', '')) / 100, } if data['名称'] == '香菱': return { - '锅巴喷火': float(skill_data['锅巴出击']['数值']['喷火伤害'][level_e].replace('%', '')) / 100.0, - '旋火轮': float(skill_data['旋火轮']['数值']['旋火轮伤害'][level_q].replace('%', '')) / 100.0 + 'B:c1-减抗-*': (0.15, '锅巴减抗'), + 'E-e火:锅巴喷火': float(skill_data['锅巴出击']['数值']['喷火伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e火:旋火轮': float(skill_data['旋火轮']['数值']['旋火轮伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e火-r蒸发1.5:旋火轮蒸发': float(skill_data['旋火轮']['数值']['旋火轮伤害'][level_q].replace('%', '')) / 100.0 } if data['名称'] == '申鹤': return { @@ -537,51 +541,147 @@ def get_damage_multipiler(data: dict) -> dict: if data['名称'] == '刻晴': az = skill_data['普通攻击·云来剑法']['数值']['重击伤害'][level_a].split('+') return { - 'AZ:重击': (float(az[0].replace('%', '')) / 100.0, float(az[1].replace('%', '')) / 100.0), - 'E:战技斩击': float(skill_data['星斗归位']['数值']['斩击伤害'][level_e].replace('%', '')) / 100.0, - 'Q:大招尾刀': float(skill_data['天街巡游']['数值']['最后一击伤害'][level_q].replace('%', '')) / 100.0 + 'B:l70-暴击率-*': (0.15, ), + 'B:c6-增伤-*': (0.24, '六命满层'), + 'B:c4-攻击力': (data['属性']['基础攻击'] * 0.25, '四命触发'), + 'AZ-e雷:重击': (float(az[0].replace('%', '')) / 100.0, float(az[1].replace('%', '')) / 100.0), + 'E-e雷:战技斩击': float(skill_data['星斗归位']['数值']['斩击伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e雷:大招尾刀': float(skill_data['天街巡游']['数值']['最后一击伤害'][level_q].replace('%', '')) / 100.0 } if data['名称'] == '可莉': return { - '重击': float(skill_data['普通攻击·砰砰']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, - '蹦蹦炸弹': float(skill_data['蹦蹦炸弹']['数值']['蹦蹦炸弹伤害'][level_q].replace('%', '')) / 100.0, - '轰轰火花': float(skill_data['轰轰火花']['数值']['轰轰火花伤害'][level_q].replace('%', '')) / 100.0, + 'B:l40-增伤-AZ': (0.5, '砰砰礼物触发'), + 'B:c2-减防-*': (0.23, '二命减防'), + 'B:c6-增伤-*': (0.1, ), + 'AZ-e火:重击': float(skill_data['普通攻击·砰砰']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, + 'E-e火:蹦蹦炸弹': float(skill_data['蹦蹦炸弹']['数值']['蹦蹦炸弹伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e火:轰轰火花': float(skill_data['轰轰火花']['数值']['轰轰火花伤害'][level_q].replace('%', '')) / 100.0, } if data['名称'] == '八重神子': e = '杀生樱伤害·肆阶' if len(data['命座']) >= 2 else '杀生樱伤害·叁阶' return { - '重击': float(skill_data['普通攻击·狐灵食罪式']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, - '杀生樱': float(skill_data['野干役咒·杀生樱']['数值'][e][level_e].replace('%', '')) / 100.0, - '天狐霆雷': float(skill_data['大密法·天狐显真']['数值']['天狐霆雷伤害'][level_q].replace('%', '')) / 100.0, + 'B:l70-增伤-E': (data['属性']['元素精通'] * 0.0015, ), + 'B:c4-增伤-*': (0.2, ), + 'B:c6-减防-E': (0.6, ), + 'AZ-e雷:重击': float(skill_data['普通攻击·狐灵食罪式']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, + 'E-e雷:杀生樱满阶': float(skill_data['野干役咒·杀生樱']['数值'][e][level_e].replace('%', '')) / 100.0, + 'Q-e雷:天狐霆雷': float(skill_data['大密法·天狐显真']['数值']['天狐霆雷伤害'][level_q].replace('%', '')) / 100.0, } if data['名称'] == '阿贝多': return { - '阳华绽放': float(skill_data['创生法·拟造阳华']['数值']['刹那之花伤害'][level_e].replace('%防御力', '')) / 100.0, - '大招首段': float(skill_data['诞生式·大地之潮']['数值']['爆发伤害'][level_q].replace('%', '')) / 100.0 + 'E-t防御力-e岩:阳华绽放': float(skill_data['创生法·拟造阳华']['数值']['刹那之花伤害'][level_e].replace('%防御力', '')) / 100.0, + 'Q-e岩:大招首段': float(skill_data['诞生式·大地之潮']['数值']['爆发伤害'][level_q].replace('%', '')) / 100.0 } if data['名称'] == '神里绫华': return { - '重击': float(skill_data['普通攻击·神里流·倾']['数值']['重击伤害'][level_a].replace('%*3', '')) / 100.0, - '冰华伤害': float(skill_data['神里流·冰华']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, - '霜灭每段': float(skill_data['神里流·霜灭']['数值']['切割伤害'][level_q].replace('%', '')) / 100.0, + 'B:l40-增伤-AZ': (0.3, ), + 'B:l70-增伤-*': (0.18, ), + 'B:c4-减防-*': (0.3, ), + 'B:c6-增伤-AZ': (2.98, '满命触发'), + 'AZ-n3-e冰:重击': float(skill_data['普通攻击·神里流·倾']['数值']['重击伤害'][level_a].replace('%*3', '')) / 100.0, + 'E-e冰:冰华伤害': float(skill_data['神里流·冰华']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e冰:霜灭每段': float(skill_data['神里流·霜灭']['数值']['切割伤害'][level_q].replace('%', '')) / 100.0, } if data['名称'] == '行秋': e = skill_data['古华剑·画雨笼山']['数值']['技能伤害'][level_e].split('+') + dm = 1.5 if len(data['命座']) >= 4 else 1.0 return { - '画雨笼山': (float(e[0].replace('%', '')) / 100.0, float(e[1].replace('%', '')) / 100.0), - '裁雨留虹每段': float(skill_data['古华剑·裁雨留虹']['数值']['剑雨伤害'][level_e].replace('%', '')) / 100.0 + 'B:l70-增伤-*': (0.2, ), + 'B:c2-减抗-*': (0.15, ), + 'E-e水:画雨笼山': (float(e[0].replace('%', '')) / 100.0 * dm, float(e[1].replace('%', '')) / 100.0 * dm), + 'Q-e水:裁雨留虹每段': float(skill_data['古华剑·裁雨留虹']['数值']['剑雨伤害'][level_e].replace('%', '')) / 100.0 } if data['名称'] == '夜兰': return { - '破局矢': float(skill_data['普通攻击·潜形隐曜弓']['数值']['破局矢伤害'][level_a].replace('%生命值上限', '')) / 100.0, - '元素战技': float(skill_data['萦络纵命索']['数值']['技能伤害'][level_e].replace('%生命值上限', '')) / 100.0, - '大招每段': float(skill_data['渊图玲珑骰']['数值']['玄掷玲珑伤害'][level_q].replace('%生命值上限*3', '')) / 100.0, + 'B:d': ['不计算天赋增伤'], + 'B:l40-生命值': (data['属性']['基础生命'] * 0.18, '天赋按3元素'), + 'AZ-t生命值-e水:破局矢': float(skill_data['普通攻击·潜形隐曜弓']['数值']['破局矢伤害'][level_a].replace('%生命值上限', '')) / 100.0, + 'E-t生命值-e水:元素战技': float(skill_data['萦络纵命索']['数值']['技能伤害'][level_e].replace('%生命值上限', '')) / 100.0, + 'Q-t生命值-e水-n3:大招每段': float(skill_data['渊图玲珑骰']['数值']['玄掷玲珑伤害'][level_q].replace('%生命值上限*3', '')) / 100.0, } if data['名称'] == '甘雨': + dm['B:l40-暴击率-AZ'] = (0.2, ) + dm['B:l70-增伤-AZ'] = (0.2, ) + dm['B:l70-增伤-E'] = (0.2, ) + dm['B:c4-增伤-*'] = (0.25, '四命满层') + dm['B:c1-减抗-*'] = (0.15, ) + dm['AZ-e冰:霜华矢'] = (float(skill_data['普通攻击·流天射术']['数值']['霜华矢命中伤害'][level_a].replace('%', '')) / 100.0, float(skill_data['普通攻击·流天射术']['数值']['霜华矢·霜华绽发伤害'][level_a].replace('%', '')) / 100.0) + dm['AZ-r融化1.5-e冰:霜华矢融化'] = dm['AZ-e冰:霜华矢'] + dm['E-e冰:元素战技'] = float(skill_data['山泽麟迹']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0 + dm['Q-e冰:冰棱伤害'] = float(skill_data['降众天华']['数值']['冰棱伤害'][level_q].replace('%', '')) / 100.0 + return dm + if data['名称'] == '优菈': + n = 26 if len(data['命座']) >= 6 else 13 return { - '霜华矢': (float(skill_data['普通攻击·流天射术']['数值']['霜华矢命中伤害'][level_a].replace('%', '')) / 100.0, float(skill_data['普通攻击·流天射术']['数值']['霜华矢·霜华绽发伤害'][level_a].replace('%', '')) / 100.0), - '元素战技': float(skill_data['山泽麟迹']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, - '冰棱伤害': float(skill_data['降众天华']['数值']['冰棱伤害'][level_q].replace('%', '')) / 100.0, + 'B:c1-增伤-*': (0.3, ), + 'B:c4-增伤-Q': (0.25, '四命触发'), + 'B:l1-减抗-*': (float(skill_data['冰潮的涡旋']['数值']['物理抗性降低'][level_e].replace('%', '')) / 100.0, ), + 'A:普攻第一段': float(skill_data['普通攻击·西风剑术·宗室']['数值']['一段伤害'][level_a].replace('%', '')) / 100.0, + 'E-e冰:战技长按': float(skill_data['冰潮的涡旋']['数值']['长按伤害'][level_e].replace('%', '')) / 100.0, + f'Q:光降之剑{n}层': float(skill_data['凝浪之光剑']['数值']['光降之剑基础伤害'][level_q].replace('%', '')) / 100.0 + float(skill_data['凝浪之光剑']['数值']['每层能量伤害'][level_e].replace('%', '')) / 100.0 * n, + } + if data['名称'] == '达达利亚': + e = skill_data['魔王武装·狂澜']['数值']['重击伤害'][level_e].split('+') + return { + 'E-e水:近战重击': (float(e[0].replace('%', '')), float(e[1].replace('%', ''))), + 'E-e水:断流·斩': float(skill_data['魔王武装·狂澜']['数值']['断流·斩伤害'][level_q].replace('%', '')) / 100.0, + 'A-e水:断流·破': float(skill_data['普通攻击·断雨']['数值']['断流·破 伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e水:近战大招': float(skill_data['极恶技·尽灭闪']['数值']['技能伤害·近战'][level_q].replace('%', '')) / 100.0, + 'Q-e水-r蒸发2.0:近战大招蒸发': float(skill_data['极恶技·尽灭闪']['数值']['技能伤害·近战'][level_q].replace('%', '')) / 100.0, + 'Q-e水:断流·爆': float(skill_data['极恶技·尽灭闪']['数值']['断流·爆'][level_q].replace('%', '')) / 100.0 + } + if data['名称'] == '迪卢克': + return { + 'B:l70-增伤-*': (0.2, ), + 'B:c4-增伤-E': (0.4, '四命增伤'), + 'B:c2-攻击力': (data['属性']['基础攻击'] * 0.3, '二命满层'), + 'B:c1-增伤-*': (0.15, '一命增伤'), + 'E-e火:战技第三段': float(skill_data['逆焰之刃']['数值']['三段伤害'][level_e].replace('%', '')) / 100.0, + 'E-e火-r蒸发1.5:战技第三段蒸发': float(skill_data['逆焰之刃']['数值']['三段伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e火:大招斩击': float(skill_data['黎明']['数值']['斩击伤害'][level_q].replace('%', '')) / 100.0, + 'Q-e火-r蒸发1.5:大招斩击蒸发': float(skill_data['黎明']['数值']['斩击伤害'][level_q].replace('%', '')) / 100.0 + } + if data['名称'] == '凝光': + return { + 'B:l70-增伤-*': (0.12, '穿屏增伤'), + 'AZ-e岩:重击': float(skill_data['普通攻击·千金掷']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, + 'AZ-e岩:星璇伤害': float(skill_data['普通攻击·千金掷']['数值']['星璇伤害'][level_a].replace('%', '').replace('每个', '')) / 100.0, + 'E-e岩:璇玑屏': float(skill_data['璇玑屏']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e岩:大招每段': float(skill_data['天权崩玉']['数值']['每颗宝石伤害'][level_q].replace('%', '').replace('每个', '')) / 100.0, + } + if data['名称'] == '菲谢尔': + dm = {'A:普攻第一段': float(skill_data['普通攻击·罪灭之矢']['数值']['一段伤害'][level_a].replace('%', '')) / 100.0} + dm['E-e雷:奥兹攻击'] = float(skill_data['夜巡影翼']['数值']['奥兹攻击伤害'][level_e].replace('%', '')) / 100.0 + if len(data['命座']) >= 6: + dm['E-e雷:奥兹协同攻击'] = 0.3 + if data['名称'] == '北斗': + return { + 'B:c6-减抗-*': (0.15, '六命减抗'), + 'E-e雷:完美弹反': float(skill_data['捉浪']['数值']['基础伤害'][level_e].replace('%', '')) / 100.0 + 2 * float(skill_data['捉浪']['数值']['每层伤害提升'][level_e].replace('%', '')) / 100.0, + 'Q-e雷:斫雷每段': float(skill_data['斫雷']['数值']['闪电伤害'][level_q].replace('%', '')) / 100.0 + } + # if data['名称'] == '诺艾尔': + # extra = 0.5 if len(data['命座']) >= 6 else 0 + # return { + # 'B:l1-攻击力': (float(skill_data['斫雷']['数值']['闪电伤害'][level_q].replace('%', '')) / 100.0, ), + # } + if data['名称'] == '神里绫人': + n = 2 if data['等级'] >= 40 else 0 + return { + 'B:c1-增伤-A': (0.4, '一命增伤'), + 'B:l1-额外倍率-A': (float(skill_data['神里流·镜花']['数值']['浪闪伤害值提高'][level_e].replace('%最大生命值/层', '')) / 100.0 * n * (data['属性']['基础生命'] + data['属性']['额外生命']), ), + 'B:l1-增伤-A': (float(skill_data['神里流·水囿']['数值']['普通攻击伤害提升'][level_q].replace('%', '')) / 100.0, ), + 'A-e水:瞬水剑第一段': float(skill_data['神里流·镜花']['数值']['一段瞬水剑伤害'][level_e].replace('%', '')) / 100.0, + 'Q-e水:大招每下': float(skill_data['神里流·水囿']['数值']['水花剑伤害'][level_q].replace('%', '')) / 100.0 + } + if data['名称'] == '荒泷一斗': + return { + 'B:d': ['开启大招'], + 'B:l70-额外倍率-AZ': (0.35 * (data['属性']['基础防御'] + data['属性']['额外防御']), ), + 'B:c6-暴击伤害-AZ': (0.7, ), + 'B:l1-攻击力': (float(skill_data['最恶鬼王·一斗轰临!!']['数值']['攻击力提高'][level_q].replace('%防御力', '')) / 100.0 * (data['属性']['基础防御'] + data['属性']['额外防御']), ), + 'AZ-e岩:荒泷逆袈裟连斩': float(skill_data['普通攻击·喧哗屋传说']['数值']['荒泷逆袈裟连斩伤害'][level_a].replace('%', '')) / 100.0, + 'E-e岩:赤牛发破': float(skill_data['魔杀绝技·赤牛发破']['数值']['技能伤害'][level_e].replace('%', '')) / 100.0, } diff --git a/Paimon_Info/damage_cal/damage.py b/Paimon_Info/damage_cal/damage.py index 6360803..f637963 100644 --- a/Paimon_Info/damage_cal/damage.py +++ b/Paimon_Info/damage_cal/damage.py @@ -16,14 +16,13 @@ def get_role_dmg(data: dict): data, vq, ve, va = common_fix(deepcopy(data)) level_role = data['等级'] attack = data['属性']['基础攻击'] + data['属性']['额外攻击'] - health = data['属性']['基础生命'] + data['属性']['额外生命'] - defense = data['属性']['基础防御'] + data['属性']['额外防御'] cr = data['属性']['暴击率'] cd = data['属性']['暴击伤害'] db = data['属性']['伤害加成'] cons = len(data['命座']) # 物理, 火, 雷, 水, 草, 风, 岩, 冰 if data['名称'] == '钟离': + health = data['属性']['基础生命'] + data['属性']['额外生命'] data['伤害描述'].insert(0, '护盾减抗') dmg_data['玉璋护盾'] = (str(int((health * dm['玉璋护盾'][0] + dm['玉璋护盾'][1]) * (1 + data['属性']['护盾强效']))),) dmg_data['原岩共鸣'] = udc(dm['原岩共鸣'] * attack + (health * 0.019) if level_role >= 70 else 0, (cr + ve['暴击率'], cd), @@ -51,28 +50,6 @@ def get_role_dmg(data: dict): dmg_data['梦想一心重击'] = (a1[0] + '+' + a2[0], a1[1] + '+' + a2[1]) extra_energy = (data['属性']['元素充能效率'] - 1) * 0.6 if level_role >= 70 else 0 dmg_data['梦想一心能量'] = (str(round(dm['梦想一心能量'] * (1 + extra_energy) * 5, 1)),) - elif data['名称'] == '胡桃': - data['伤害描述'].insert(0, '半血以下') - zf = growth_reaction(data['属性']['元素精通'], 1.5) if '蒸发系数' not in data['属性'] else growth_reaction( - data['属性']['元素精通'], 1.5, data['属性']['蒸发系数']) - attack += dm['攻击力提高'] * health - db[1] += 0.33 if level_role >= 70 else 0 - dmg_data['裸重击'] = udc(dm['重击'] * attack, (cr + va['重击暴击率'], cd), db[1] + va['重击增伤'], level_role) - dmg_data['重击蒸发'] = udc(dm['重击'] * attack, (cr + va['重击暴击率'], cd), db[1] + va['重击增伤'], level_role, r=zf) - dmg_data['雪梅香蒸发'] = udc(dm['雪梅香'] * attack + ((health * 0.1) if cons >= 2 else 0), (cr + ve['暴击率'], cd), - db[1] + ve['增伤'], level_role, r=zf) - dmg_data['大招蒸发'] = udc(dm['大招'] * attack, (cr + vq['暴击率'], cd), - db[1] + vq['增伤'], level_role, r=zf) - elif data['名称'] == '香菱': - zf = growth_reaction(data['属性']['元素精通'], 1.5) if '蒸发系数' not in data['属性'] else growth_reaction( - data['属性']['元素精通'], 1.5, data['属性']['蒸发系数']) - rcd = 0.15 if cons >= 1 else 0 - dmg_data['锅巴喷火'] = udc(dm['锅巴喷火'] * attack, (cr + ve['暴击率'], cd), db[1] + ve['增伤'], level_role, rcd=rcd) - dmg_data['旋火轮'] = udc(dm['旋火轮'] * attack, (cr + vq['暴击率'], cd), db[1] + vq['增伤'], level_role, rcd=rcd) - dmg_data['旋火轮蒸发'] = udc(dm['旋火轮'] * attack, (cr + vq['暴击率'], cd), db[1] + vq['增伤'], level_role, rcd=rcd, r=zf) - elif data['名称'] == '魈': - va['下落攻击增伤'] += dm['B:靖妖傩舞'] - dmg_data = get_dmg_data(dm, attack, cr, cd, db[5], level_role, va, ve, vq) elif data['名称'] == '申鹤': dmg_data['冰翎加成'] = str(int(dm['冰翎'] * attack)) db[-1] += 0.15 if level_role >= 40 else 0 @@ -80,119 +57,115 @@ def get_role_dmg(data: dict): dmg_data['战技长按'] = udc(dm['e长按'] * attack, (cr + ve['暴击率'], cd), db[-1] + ve['增伤'], level_role, rcd=dm['大招减抗']) dmg_data['大招持续伤害'] = udc(dm['大招持续'] * attack, (cr + vq['暴击率'], cd), db[-1] + vq['增伤'], level_role, rcd=dm['大招减抗']) - elif data['名称'] == '八重神子': - ve['增伤'] += (data['属性']['元素精通'] * 0.0015) if level_role >= 70 else 0 - db[2] += 0.2 if cons >= 4 else 0 - dci = 0.6 if cons >= 6 else 0 - dmg_data['重击'] = udc(dm['重击'] * attack, (cr + va['重击暴击率'], cd), db[2] + va['重击增伤'], level_role) - dmg_data['杀生樱满阶'] = udc(dm['杀生樱'] * attack, (cr + ve['暴击率'], cd), db[2] + ve['增伤'], level_role, dci=dci) - dmg_data['天狐霆雷'] = udc(dm['天狐霆雷'] * attack, (cr + vq['暴击率'], cd), db[2] + vq['增伤'], level_role) - elif data['名称'] == '刻晴': - cr += 0.15 if level_role >= 70 else 0 - if cons == 6: - db[2] += 0.24 - data['伤害描述'].insert(0, '六命满层') - if cons >= 4: - attack += data['属性']['基础攻击'] * 0.25 - data['伤害描述'].insert(0, '四命触发') - dmg_data = get_dmg_data(dm, attack, cr, cd, db[2], level_role, va, ve, vq) - elif data['名称'] == '阿贝多': - dmg_data['阳华绽放'] = udc(dm['阳华绽放'] * defense + ve['额外倍率'], (cr + ve['暴击率'], cd), db[6] + ve['增伤'], level_role) - dmg_data['大招首段'] = udc(dm['大招首段'] * attack, (cr + vq['暴击率'], cd), db[6] + vq['增伤'], level_role) - elif data['名称'] == '神里绫华': - va['重击增伤'] += 0.3 if level_role >= 40 else 0 - db[-1] += 0.18 if level_role >= 70 else 0 - dcr = 0.3 if cons >= 4 else 0 - if cons == 6: - data['伤害描述'].insert(0, '满命触发') - va['重击增伤'] += 2.98 - a = udc(dm['重击'] * attack + va['重击额外倍率'], (cr + va['重击暴击率'], cd), db[-1] + va['重击增伤'], level_role, dcr=dcr) - dmg_data['重击'] = (a[0] + '*3', a[1] + '*3') - dmg_data['冰华伤害'] = udc(dm['冰华伤害'] * attack + ve['额外倍率'], (cr + ve['暴击率'], cd), db[-1] + ve['增伤'], level_role, dcr=dcr) - dmg_data['霜灭每段'] = udc(dm['霜灭每段'] * attack, (cr + vq['暴击率'], cd), db[-1] + vq['增伤'], level_role, dcr=dcr) - elif data['名称'] == '行秋': - db[3] += 0.2 if level_role >= 70 else 0 - rcd = 0.15 if cons >= 2 else 0 - dme1 = dm['画雨笼山'][0] * (1.5 if cons >= 4 else 1) - dme2 = dm['画雨笼山'][1] * (1.5 if cons >= 4 else 1) - e1 = udc(dme1 * attack + ve['额外倍率'], (cr + ve['暴击率'], cd), db[3] + ve['增伤'], level_role, rcd=rcd) - e2 = udc(dme2 * attack + ve['额外倍率'], (cr + ve['暴击率'], cd), db[3] + ve['增伤'], level_role, rcd=rcd) - dmg_data['画雨笼山'] = (e1[0] + '+' + e2[0], e1[1] + '+' + e2[1]) - dmg_data['裁雨留虹每段'] = udc(dm['裁雨留虹每段'] * attack, (cr + vq['暴击率'], cd), db[3] + vq['增伤'], level_role, rcd=rcd) - elif data['名称'] == '夜兰': - data['伤害描述'].insert(0, '不计算天赋增伤') - if level_role >= 40: - health += data['属性']['基础生命'] * 0.18 - data['伤害描述'].insert(0, '天赋按3元素') - dmg_data['破局矢'] = udc(dm['破局矢'] * health, (cr + va['重击暴击率'], cd), db[3] + va['重击增伤'], level_role) - dmg_data['元素战技'] = udc(dm['元素战技'] * health, (cr + ve['暴击率'], cd), db[3] + ve['增伤'], level_role) - q = udc(dm['大招每段'] * health, (cr + vq['暴击率'], cd), db[3] + vq['增伤'], level_role) - if cons >= 2: - q2 = udc(0.14 * health, (cr + vq['暴击率'], cd), db[3] + vq['增伤'], level_role) - dmg_data['大招每段'] = (q[0] + '*3+' + q2[0], q[1] + '*3+' + q2[1]) - else: - dmg_data['大招每段'] = (q[0] + '*3', q[1] + '*3') - elif data['名称'] == '甘雨': - rh = growth_reaction(data['属性']['元素精通'], 1.5) if '融化系数' not in data['属性'] else growth_reaction( - data['属性']['元素精通'], 1.5, data['属性']['融化系数']) - va['重击暴击率'] += 0.2 if level_role >= 40 else 0 - if level_role >= 70: - va['重击增伤'] += 0.2 - ve['增伤'] += 0.2 - if cons >= 4: - db[-1] += 0.25 - data['伤害描述'].insert(0, '四命满层') - rcd = 0.15 if cons >= 1 else 0 - a1 = udc(dm['霜华矢'][0] * attack, (cr + va['重击暴击率'], cd), db[-1] + va['重击增伤'], level_role, rcd=rcd) - a2 = udc(dm['霜华矢'][1] * attack, (cr + va['重击暴击率'], cd), db[-1] + va['重击增伤'], level_role, rcd=rcd) - dmg_data['霜华矢'] = (a1[0] + '+' + a2[0], a1[1] + '+' + a2[1]) - a1 = udc(dm['霜华矢'][0] * attack, (cr + va['重击暴击率'], cd), db[-1] + va['重击增伤'], level_role, rcd=rcd, r=rh) - a2 = udc(dm['霜华矢'][1] * attack, (cr + va['重击暴击率'], cd), db[-1] + va['重击增伤'], level_role, rcd=rcd, r=rh) - dmg_data['霜华矢融化'] = (a1[0] + '+' + a2[0], a1[1] + '+' + a2[1]) - dmg_data['元素战技'] = udc(dm['元素战技'] * attack, (cr + ve['暴击率'], cd), db[-1] + ve['增伤'], level_role, rcd=rcd) - dmg_data['冰棱伤害'] = udc(dm['冰棱伤害'] * attack, (cr + vq['暴击率'], cd), db[-1] + vq['增伤'], level_role, rcd=rcd) + else: + dmg_data = get_dmg_data(data, dm, va, ve, vq) if data['伤害描述']: dmg_data['额外说明'] = (','.join(data['伤害描述']),) return draw_dmg_pic(dmg_data) if dmg_data else None -def get_dmg_data(dm, attack, cr, cd, db, level_role, va, ve, vq): +# def get_dmg_data(dm, attack, cr, cd, db, level_role, va, ve, vq, data): +def get_dmg_data(data, dm, va, ve, vq): dmg_data = {} + element_type = ['物理', '火', '雷', '水', '草', '风', '岩', '冰'] v = {'A': { - '暴击率': va['普攻暴击率'], - '增伤': va['普攻增伤'], - '额外倍率': va['普攻额外倍率'] - }, + '暴击率': va['普攻暴击率'], + '暴击伤害': 0, + '增伤': va['普攻增伤'], + '额外倍率': va['普攻额外倍率'], + '减抗': 0, + '减防': 0 + }, 'AZ': { '暴击率': va['重击暴击率'], + '暴击伤害': 0, '增伤': va['重击增伤'], - '额外倍率': va['重击额外倍率'] + '额外倍率': va['重击额外倍率'], + '减抗': 0, + '减防': 0 }, 'AX': { '暴击率': va['下落攻击暴击率'], + '暴击伤害': 0, '增伤': va['下落攻击增伤'], - '额外倍率': va['下落攻击额外倍率'] + '额外倍率': va['下落攻击额外倍率'], + '减抗': 0, + '减防': 0 }, 'E': { '暴击率': ve['暴击率'], + '暴击伤害': 0, '增伤': ve['增伤'], - '额外倍率': ve['额外倍率'] + '额外倍率': ve['额外倍率'], + '减抗': 0, + '减防': 0 }, 'Q': { '暴击率': vq['暴击率'], + '暴击伤害': 0, '增伤': vq['增伤'], - '额外倍率': 0 + '额外倍率': 0, + '减抗': 0, + '减防': 0 }, } + dmt = { + '攻击力': data['属性']['基础攻击'] + data['属性']['额外攻击'], + '生命值': data['属性']['基础生命'] + data['属性']['额外生命'], + '防御力': data['属性']['基础防御'] + data['属性']['额外防御'] + } + cr = data['属性']['暴击率'] + cd = data['属性']['暴击伤害'] + db = data['属性']['伤害加成'] + cons = len(data['命座']) + level_role = data['等级'] for name, num in dm.items(): skill_name = name.split(':')[1] skill_type = name.split(':')[0] if skill_type == 'B': - continue - if isinstance(num, tuple): - n1 = udc(num[0] * attack + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd), db + v[skill_type]['增伤'], level_role) - n2 = udc(num[1] * attack + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd), db + v[skill_type]['增伤'], level_role) - dmg_data[skill_name] = (n1[0] + '+' + n2[0], n1[1] + '+' + n2[1]) + if skill_name == 'd': + for d in num: + if d not in data['伤害描述']: + data['伤害描述'].insert(0, d) + else: + para = skill_name.split('-') + if (para[0].startswith('c') and cons >= int(para[0][1])) or (para[0].startswith('l') and level_role >= int(para[0][1:])): + if para[1] in ['攻击力', '生命值', '防御力']: + dmt[para[1]] += num[0] + else: + if para[2] == '*': + for k in v: + v[k][para[1]] += num[0] + else: + v[para[2]][para[1]] += num[0] + if len(num) > 1 and num[1] not in data['伤害描述']: + data['伤害描述'].insert(0, num[1]) else: - dmg_data[skill_name] = udc(num * attack + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd), db + v[skill_type]['增伤'], level_role) + r = 1 # 反应系数 + n = '1' # 段数 + e = 0 # 伤害元素类型序号 + t = '攻击力' # 倍率区类型 + para = skill_type.split('-') + skill_type = para[0] + if len(para) != 1: + for p in para[1:]: + if p.startswith('r'): + r = growth_reaction(data['属性']['元素精通'], float(p[3:])) if f'{p[1:3]}系数' not in data['属性'] else growth_reaction( + data['属性']['元素精通'], float(p[3:]), data['属性'][f'{p[1:3]}系数']) + if p.startswith('n'): + n = p[1:] + if p.startswith('e'): + e = element_type.index(p[1:]) + if p.startswith('t'): + t = p[1:] + if isinstance(num, tuple): + n1 = udc(num[0] * dmt[t] + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd + v[skill_type]['暴击伤害']), db[e] + v[skill_type]['增伤'], level_role, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + n2 = udc(num[1] * dmt[t] + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd + v[skill_type]['暴击伤害']), db[e] + v[skill_type]['增伤'], level_role, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + dmg_data[skill_name] = (n1[0] + '+' + n2[0], n1[1] + '+' + n2[1]) + else: + if n == '1': + dmg_data[skill_name] = udc(num * dmt[t] + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd + v[skill_type]['暴击伤害']), db[e] + v[skill_type]['增伤'], level_role, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + else: + dmg = udc(num * dmt[t] + v[skill_type]['额外倍率'], (cr + v[skill_type]['暴击率'], cd + v[skill_type]['暴击伤害']), db[e] + v[skill_type]['增伤'], level_role, r=r, rcd=v[skill_type]['减抗'], dcr=v[skill_type]['减防']) + dmg_data[skill_name] = (dmg[0] + '*' + n, dmg[1] + '*' + n) return dmg_data diff --git a/Paimon_Info/draw_role_card.py b/Paimon_Info/draw_role_card.py index afca193..d0b455d 100644 --- a/Paimon_Info/draw_role_card.py +++ b/Paimon_Info/draw_role_card.py @@ -27,7 +27,10 @@ def get_font(size, font='hywh.ttf'): async def draw_role_card(uid, data): bg_card = load_image(res_path / 'player_card2' / f'背景_{data["元素"]}.png', mode='RGBA') - dmg_img = get_role_dmg(data) + try: + dmg_img = get_role_dmg(data) + except Exception: + dmg_img = None if dmg_img: bg = Image.new('RGBA', (1080, 1920 + dmg_img.size[1] + 20), (0, 0, 0, 0)) bg_card_center = bg_card.crop((0, 730, 1080, 1377)).resize((1080, dmg_img.size[1] + 667)) diff --git a/README.md b/README.md index 4fcc27a..117885f 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,9 @@ - 修复神里绫人被识别为绫华别名的bug - 修复抽卡记录获取bug + 7.8 - - `ysd`增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 + - 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 ++ 7.9 + - 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗`伤害计算 ## 丨功能列表 diff --git a/UPDATE_LOG.md b/UPDATE_LOG.md index 9e53cf2..2d084b3 100644 --- a/UPDATE_LOG.md +++ b/UPDATE_LOG.md @@ -75,5 +75,7 @@ - 修复神里绫人被识别为绫华别名的bug - 修复抽卡记录获取bug + 7.8 - - 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 + - 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 ++ 7.9 + - 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗`伤害计算 diff --git a/utils/enka_util.py b/utils/enka_util.py index 160c3c2..fd19a6e 100644 --- a/utils/enka_util.py +++ b/utils/enka_util.py @@ -67,7 +67,8 @@ class PlayerInfo: if role_info['名称'] in ['空', '荧']: role_info['天赋'][0], role_info['天赋'][-1] = role_info['天赋'][-1], role_info['天赋'][0] role_info['天赋'][1], role_info['天赋'][-1] = role_info['天赋'][-1], role_info['天赋'][1] - + if role_info['名称'] == '达达利亚': + role_info['天赋'][0] += 1 role_info['命座'] = [] if 'talentIdList' in data: