diff --git a/Paimon_Info/damage_cal/common.py b/Paimon_Info/damage_cal/common.py index 7ed572f..8995dce 100644 --- a/Paimon_Info/damage_cal/common.py +++ b/Paimon_Info/damage_cal/common.py @@ -37,6 +37,9 @@ def udc(dm: float, if crit[0] > 1: damage = dm * (1 + crit[1]) * (1 + db) * resistance_coefficient(rcb, rcd) * defense_coefficient(sl, el, dcr, dci) * r return [str(int(damage)), str(int(damage))] + elif crit[0] <= 0: + damage = dm * (1 + db) * resistance_coefficient(rcb, rcd) * defense_coefficient(sl, el, dcr, dci) * r + return [str(int(damage)), ] else: damage = dm * (1 + crit[0] * crit[1]) * (1 + db) * resistance_coefficient(rcb, rcd) * defense_coefficient(sl, el, dcr, dci) * r return [str(int(damage)), str(int(damage / (1 + crit[0] * crit[1]) * (1 + crit[1])))] @@ -309,6 +312,9 @@ def weapon_common_fix(data: dict): attr['伤害加成'][i] = k + (0.09 + 0.03 * weapon['精炼等级']) extra_e['增伤'] += 3 * (0.09 + 0.03 * weapon['精炼等级']) data['伤害描述'].append('神乐满层') + elif weapon['名称'] == '不灭月华': + attr['治疗加成'] += 0.075 + 0.025 * weapon['精炼等级'] + extra_a['普攻额外倍率'] += (0.005 + 0.005 * weapon['精炼等级']) * (attr['基础生命'] + attr['额外生命']) elif weapon['名称'] == '白辰之环': for i, k in enumerate(attr['伤害加成']): attr['伤害加成'][i] = k + (0.075 + 0.025 * weapon['精炼等级']) @@ -485,6 +491,7 @@ def get_damage_multipiler(data: dict) -> dict: level_q = data['天赋'][3]['等级'] - 1 if data['名称'] in ['神里绫华', '莫娜'] else data['天赋'][2]['等级'] - 1 level_e = data['天赋'][1]['等级'] - 1 level_a = data['天赋'][0]['等级'] - 1 + defense = data['属性']['基础防御'] + data['属性']['额外防御'] dm = {} if data['名称'] == '钟离': return { @@ -550,7 +557,7 @@ def get_damage_multipiler(data: dict) -> dict: } if data['名称'] == '可莉': return { - 'B:l40-增伤-AZ': (0.5, '砰砰礼物触发'), + 'B:l50-增伤-AZ': (0.5, '砰砰礼物触发'), 'B:c2-减防-*': (0.23, '二命减防'), 'B:c6-增伤-*': (0.1, ), 'AZ-e火:重击': float(skill_data['普通攻击·砰砰']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0, @@ -574,7 +581,7 @@ def get_damage_multipiler(data: dict) -> dict: } if data['名称'] == '神里绫华': return { - 'B:l40-增伤-AZ': (0.3, ), + 'B:l50-增伤-AZ': (0.3, ), 'B:l70-增伤-*': (0.18, ), 'B:c4-减防-*': (0.3, ), 'B:c6-增伤-AZ': (2.98, '满命触发'), @@ -594,13 +601,13 @@ def get_damage_multipiler(data: dict) -> dict: if data['名称'] == '夜兰': return { 'B:d': ['不计算天赋增伤'], - 'B:l40-生命值': (data['属性']['基础生命'] * 0.18, '天赋按3元素'), + 'B:l50-生命值': (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:l50-暴击率-AZ'] = (0.2, ) dm['B:l70-增伤-AZ'] = (0.2, ) dm['B:l70-增伤-E'] = (0.2, ) dm['B:c4-增伤-*'] = (0.25, '四命满层') @@ -661,13 +668,19 @@ def get_damage_multipiler(data: dict) -> dict: '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['名称'] == '诺艾尔': + extra = 0.5 if len(data['命座']) >= 6 else 0 + e = skill_data['护心铠']['数值']['吸收量'][level_e].split('+') + ez = skill_data['护心铠']['数值']['治疗量'][level_e].split('+') + return { + 'B:l1-攻击力': ((float(skill_data['大扫除']['数值']['攻击力提高'][level_q].replace('%防御力', '')) / 100.0 + extra) * defense, ), + 'A-e岩:普攻第一段': float(skill_data['普通攻击·西风剑术·女仆']['数值']['一段伤害'][level_a].replace('%', '')) / 100.0, + 'T:Q攻击力提高:': int((float(skill_data['大扫除']['数值']['攻击力提高'][level_q].replace('%防御力', '')) / 100.0 + extra) * defense), + 'T:E盾值': int(float(e[0].replace('%防御力', '')) / 100.0 * defense + float(e[1])), + 'T:普攻治疗量/概率': str(int((float(ez[0].replace('%防御力', '')) / 100.0 * defense + float(ez[1])) * (1 + data['属性']['治疗加成']))) + '/' + skill_data['护心铠']['数值']['治疗触发几率'][level_e] + } if data['名称'] == '神里绫人': - n = 2 if data['等级'] >= 40 else 0 + n = 2 if data['等级'] >= 50 else 0 return { 'B:c1-增伤-A': (0.4, '一命增伤'), 'B:l1-额外倍率-A': (float(skill_data['神里流·镜花']['数值']['浪闪伤害值提高'][level_e].replace('%最大生命值/层', '')) / 100.0 * n * (data['属性']['基础生命'] + data['属性']['额外生命']), ), @@ -686,7 +699,7 @@ def get_damage_multipiler(data: dict) -> dict: } if data['名称'] == '宵宫': return { - 'B:l40-增伤-*': (0.2, '被动一满层'), + 'B:l50-增伤-*': (0.2, '被动一满层'), 'B:c2-增伤-*': (0.25, '二命触发'), 'A-e火-n2:普攻第一段': float(skill_data['焰硝庭火舞']['数值']['炽焰箭伤害'][level_e].replace('%普通攻击伤害', '')) / 100.0 * float(skill_data['普通攻击·烟火打扬']['数值']['一段伤害'][level_a].replace('%*2', '')) / 100.0, 'A-e火-r蒸发1.5:普攻第三段蒸发': (float( @@ -694,6 +707,28 @@ def get_damage_multipiler(data: dict) -> dict: skill_data['普通攻击·烟火打扬']['数值']['三段伤害'][level_a].replace('%', '')) / 100.0, 'Q-e火:琉金火光爆炸': float(skill_data['琉金云间草']['数值']['琉金火光爆炸伤害'][level_q].replace('%', '')) / 100.0 } + if data['名称'] == '烟绯': + max_ = 4 if len(data['命座']) >= 6 else 3 + AZB = float(skill_data['普通攻击·火漆制印']['数值']['重击伤害'][level_a].replace('%', '')) / 100.0 + AZ = (AZB, 0.8) if data['等级'] >= 70 else (AZB, ) + return { + 'B:l50-增伤-*': (0.05 * max_, '满层丹火印'), + 'B:c2-暴击率-AZ': (0.2, ), + 'B:l1-增伤-AZ': (float(skill_data['凭此结契']['数值']['重击伤害提升'][level_q].replace('%', '')) / 100.0,), + 'AZ-e火:满丹火印重击': AZ, + '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_e].replace('%', '')) / 100.0, + '水母治疗量': skill_data['海月之誓']['数值']['治疗量'][level_e].split('+'), + '大招伤害': float(skill_data['海人化羽']['数值']['技能伤害'][level_q].replace('%生命值上限', '')) / 100.0, + '普攻伤害提升': float(skill_data['海人化羽']['数值']['普通攻击伤害提升'][level_q].replace('%生命值上限', '')) / 100.0, + 'E伤害提升': float(skill_data['海人化羽']['数值']['化海月伤害提升'][level_q].replace('%生命值上限', '')) / 100.0, + '大招治疗量': skill_data['海人化羽']['数值']['命中治疗量'][level_q].split('+') + } def draw_dmg_pic(dmg: Dict[str, Union[tuple, list]]): diff --git a/Paimon_Info/damage_cal/damage.py b/Paimon_Info/damage_cal/damage.py index 1aae79f..0f209fb 100644 --- a/Paimon_Info/damage_cal/damage.py +++ b/Paimon_Info/damage_cal/damage.py @@ -57,6 +57,22 @@ 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['名称'] == '珊瑚宫心海': + health = data['属性']['基础生命'] + data['属性']['额外生命'] + adb = 0.15 * data['属性']['治疗加成'] if level_role >= 70 else 0 + if cons >= 6: + db[3] += 0.4 + data['伤害描述'].insert(0, '六命触发') + ab = udc(dm['普攻第一段'] * attack, (cr + va['普攻暴击率'], cd), db[3] + va['普攻增伤'], level_role) + aq = udc(dm['普攻伤害提升'] * health, (cr + va['普攻暴击率'], cd), db[3] + adb + va['普攻增伤'], level_role) + if len(ab) == 1: + dmg_data['开大普攻第一段'] = (str(int(ab[0]) + int(aq[0])), ) + else: + dmg_data['开大普攻第一段'] = (str(int(ab[0]) + int(aq[0])), str(int(ab[1]) + int(aq[1]))) + dmg_data['开大战技伤害'] = udc(dm['水母伤害'] * attack + dm['E伤害提升'] * health, (cr + ve['暴击率'], cd), db[3] + ve['增伤'], level_role) + dmg_data['大招释放伤害'] = udc(dm['大招伤害'] * health, (cr + vq['暴击率'], cd), db[3] + vq['增伤'], level_role) + dmg_data['开大普攻治疗量'] = (str(int((float(dm['大招治疗量'][0].replace('%生命值上限', '')) / 100.0 * health + float(dm['大招治疗量'][1]) * (1 + data['属性']['治疗加成'])))),) + dmg_data['战技治疗量'] = (str(int((float(dm['水母治疗量'][0].replace('%生命值上限', '')) / 100.0 * health + float(dm['水母治疗量'][1]) * (1 + data['属性']['治疗加成'])))),) else: dmg_data = get_dmg_data(data, dm, va, ve, vq) if data['伤害描述']: @@ -140,6 +156,8 @@ def get_dmg_data(data, dm, va, ve, vq): v[para[2]][para[1]] += num[0] if len(num) > 1 and num[1] not in data['伤害描述']: data['伤害描述'].insert(0, num[1]) + elif skill_type == 'T': + dmg_data[skill_name] = (str(num), ) else: r = 1 # 反应系数 n = '1' # 段数 diff --git a/README.md b/README.md index 8c9613d..390295f 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,8 @@ - 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 + 7.9 - 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗、宵宫`伤害计算 ++ 7.13 + - 增加`诺艾尔、烟绯、珊瑚宫心海`伤害计算 ## 丨功能列表 diff --git a/UPDATE_LOG.md b/UPDATE_LOG.md index 1071c5a..3b7e5d5 100644 --- a/UPDATE_LOG.md +++ b/UPDATE_LOG.md @@ -78,4 +78,6 @@ - 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算 + 7.9 - 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗、宵宫`伤害计算 ++ 7.13 + - 增加`诺艾尔、烟绯、珊瑚宫心海`伤害计算 diff --git a/utils/json_data/roles_data.json b/utils/json_data/roles_data.json index 5d737d9..5466926 100644 --- a/utils/json_data/roles_data.json +++ b/utils/json_data/roles_data.json @@ -8579,17 +8579,17 @@ "" ], "重击伤害": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", + "167.57%", + "177.60%", + "187.64%", + "200.68%", + "210.71%", + "220.75%", + "233.79%", + "246.84%", + "259.88%", + "272.92%", + "285.97%", "", "", "",