mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
✨ 增加优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗
伤害计算
This commit is contained in:
parent
1a0972a092
commit
50f5ee5d71
@ -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:
|
||||
|
@ -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,
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
@ -70,7 +70,9 @@
|
||||
- 修复神里绫人被识别为绫华别名的bug
|
||||
- 修复抽卡记录获取bug
|
||||
+ 7.8
|
||||
- `ysd`增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算
|
||||
- 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算
|
||||
+ 7.9
|
||||
- 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗`伤害计算
|
||||
|
||||
## 丨功能列表
|
||||
|
||||
|
@ -75,5 +75,7 @@
|
||||
- 修复神里绫人被识别为绫华别名的bug
|
||||
- 修复抽卡记录获取bug
|
||||
+ 7.8
|
||||
- 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算
|
||||
- 增加`甘雨、夜兰、行秋、神里绫华、阿贝多、刻晴、八重神子`伤害计算
|
||||
+ 7.9
|
||||
- 增加`优菈、达达利亚、迪卢克、凝光、菲谢尔、北斗、神里绫人、荒泷一斗`伤害计算
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user