mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-06-03 05:59:51 +08:00
优化:伤害计算
This commit is contained in:
parent
b70a9a01f6
commit
f62a53ef5e
@ -297,7 +297,7 @@
|
|||||||
},
|
},
|
||||||
"雷电将军": {
|
"雷电将军": {
|
||||||
"1": "",
|
"1": "",
|
||||||
"2": "d+60",
|
"2": "ignoreDef+60",
|
||||||
"3": "",
|
"3": "",
|
||||||
"4": "",
|
"4": "",
|
||||||
"5": "",
|
"5": "",
|
||||||
@ -349,7 +349,7 @@
|
|||||||
"3": "",
|
"3": "",
|
||||||
"4": "dmgBonus+20",
|
"4": "dmgBonus+20",
|
||||||
"5": "",
|
"5": "",
|
||||||
"6": "E:d+60"
|
"6": "E:ignoreDef+60"
|
||||||
},
|
},
|
||||||
"夜兰": {
|
"夜兰": {
|
||||||
"1": "",
|
"1": "",
|
||||||
|
@ -49,6 +49,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
q_skill_name = skillList[-1]['skillName']
|
q_skill_name = skillList[-1]['skillName']
|
||||||
prop['Q_skill_level'] = skillList[-1]['skillLevel']
|
prop['Q_skill_level'] = skillList[-1]['skillLevel']
|
||||||
|
|
||||||
|
enemy_level = char_level
|
||||||
skill_add = avatarName2SkillAdd[char_name]
|
skill_add = avatarName2SkillAdd[char_name]
|
||||||
for skillAdd_index in range(0, 2):
|
for skillAdd_index in range(0, 2):
|
||||||
if len(raw_data['talentList']) >= 3 + skillAdd_index * 2:
|
if len(raw_data['talentList']) >= 3 + skillAdd_index * 2:
|
||||||
@ -70,55 +71,38 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
prop['critdmg'] = fight_prop['critDmg']
|
prop['critdmg'] = fight_prop['critDmg']
|
||||||
prop['ce'] = fight_prop['energyRecharge']
|
prop['ce'] = fight_prop['energyRecharge']
|
||||||
prop['physicalDmgBonus'] = physicalDmgBonus = fight_prop['physicalDmgBonus']
|
prop['physicalDmgBonus'] = physicalDmgBonus = fight_prop['physicalDmgBonus']
|
||||||
prop['dmgBonus'] = dmgBonus = fight_prop['dmgBonus'] if fight_prop['physicalDmgBonus'] <= fight_prop['dmgBonus'] else fight_prop['physicalDmgBonus']
|
prop['dmgBonus'] = dmgBonus = fight_prop['dmgBonus']
|
||||||
prop['healBouns'] = fight_prop['healBonus']
|
prop['healBouns'] = fight_prop['healBonus']
|
||||||
prop['shieldBouns'] = 0
|
prop['shieldBouns'] = 0
|
||||||
|
|
||||||
if char_name not in char_action:
|
if char_name not in char_action:
|
||||||
faild_img = Image.new('RGBA', (950, 1))
|
faild_img = Image.new('RGBA', (950, 1))
|
||||||
return faild_img, 0
|
return faild_img, 0
|
||||||
power_list = char_action[char_name]
|
power_list = char_action[char_name]
|
||||||
|
|
||||||
if weaponType == '法器' or char_name in ['荒泷一斗', '刻晴', '诺艾尔']:
|
for prop_attr in ['dmgBonus', 'critrate', 'critdmg', 'addDmg', 'd', 'r', 'ignoreDef']:
|
||||||
prop['A_dmgBonus'] = dmgBonus
|
for prop_limit in ['A', 'B', 'C', 'E', 'Q']:
|
||||||
prop['B_dmgBonus'] = dmgBonus
|
prop['{}_{}'.format(prop_limit, prop_attr)] = 0
|
||||||
prop['C_dmgBonus'] = dmgBonus
|
|
||||||
elif weaponType == '弓':
|
|
||||||
prop['A_dmgBonus'] = physicalDmgBonus
|
|
||||||
prop['B_dmgBonus'] = dmgBonus
|
|
||||||
prop['C_dmgBonus'] = physicalDmgBonus
|
|
||||||
else:
|
|
||||||
prop['A_dmgBonus'] = physicalDmgBonus
|
|
||||||
prop['B_dmgBonus'] = physicalDmgBonus
|
|
||||||
prop['C_dmgBonus'] = physicalDmgBonus
|
|
||||||
|
|
||||||
prop['E_dmgBonus'] = 0
|
for prop_limit in ['A', 'B', 'C', 'E', 'Q']:
|
||||||
prop['Q_dmgBonus'] = 0
|
if weaponType == '法器' or char_name in ['荒泷一斗', '刻晴', '诺艾尔']:
|
||||||
|
prop['{}_dmgBonus'.format(prop_limit)] = dmgBonus
|
||||||
prop['A_critrate'] = 0
|
elif weaponType == '弓':
|
||||||
prop['B_critrate'] = 0
|
if prop_limit in ['A', 'C']:
|
||||||
prop['C_critrate'] = 0
|
prop['{}_dmgBonus'.format(prop_limit)] = physicalDmgBonus
|
||||||
prop['E_critrate'] = 0
|
elif prop_limit in ['B', 'E', 'Q']:
|
||||||
prop['Q_critrate'] = 0
|
prop['{}_dmgBonus'.format(prop_limit)] = dmgBonus
|
||||||
|
else:
|
||||||
prop['A_critdmg'] = 0
|
if prop_limit in ['A', 'B', 'C']:
|
||||||
prop['B_critdmg'] = 0
|
prop['{}_dmgBonus'.format(prop_limit)] = physicalDmgBonus
|
||||||
prop['C_critdmg'] = 0
|
elif prop_limit in ['E', 'Q']:
|
||||||
prop['E_critdmg'] = 0
|
prop['{}_dmgBonus'.format(prop_limit)] = dmgBonus
|
||||||
prop['Q_critdmg'] = 0
|
|
||||||
|
|
||||||
prop['A_addDmg'] = 0
|
|
||||||
prop['B_addDmg'] = 0
|
|
||||||
prop['C_addDmg'] = 0
|
|
||||||
prop['E_addDmg'] = 0
|
|
||||||
prop['Q_addDmg'] = 0
|
|
||||||
|
|
||||||
prop['hp_green'] = fight_prop['addHp']
|
prop['hp_green'] = fight_prop['addHp']
|
||||||
prop['attack_green'] = fight_prop['addAtk']
|
prop['attack_green'] = fight_prop['addAtk']
|
||||||
prop['defense_green'] = fight_prop['addDef']
|
prop['defense_green'] = fight_prop['addDef']
|
||||||
|
|
||||||
prop['r'] = 0.1
|
prop['r'] = 0.1
|
||||||
prop['d'] = 0
|
|
||||||
prop['a'] = 0
|
prop['a'] = 0
|
||||||
prop['g'] = 0
|
prop['g'] = 0
|
||||||
prop['k'] = 1
|
prop['k'] = 1
|
||||||
@ -143,6 +127,8 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
equipSets['type'] += '2'
|
equipSets['type'] += '2'
|
||||||
equipSets['set'] += '|' + equip
|
equipSets['set'] += '|' + equip
|
||||||
|
|
||||||
|
if equipSets['set'].startswith('|'):
|
||||||
|
equipSets['set'] = equipSets['set'][1:]
|
||||||
all_effect = []
|
all_effect = []
|
||||||
|
|
||||||
# 计算圣遗物buff
|
# 计算圣遗物buff
|
||||||
@ -219,7 +205,6 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
|
|
||||||
sp = []
|
sp = []
|
||||||
# 计算全部的buff,添加入属性
|
# 计算全部的buff,添加入属性
|
||||||
print(all_effect)
|
|
||||||
if all_effect:
|
if all_effect:
|
||||||
all_effect = ';'.join(all_effect)
|
all_effect = ';'.join(all_effect)
|
||||||
all_effect_list = all_effect.split(';')
|
all_effect_list = all_effect.split(';')
|
||||||
@ -267,7 +252,6 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
else:
|
else:
|
||||||
prop['{}'.format(effect_attr)] += effect_value
|
prop['{}'.format(effect_attr)] += effect_value
|
||||||
|
|
||||||
print(prop)
|
|
||||||
w = 950
|
w = 950
|
||||||
h = 40 * (len(power_list) + 1)
|
h = 40 * (len(power_list) + 1)
|
||||||
result_img = Image.new('RGBA', (w, h), (0, 0, 0, 0))
|
result_img = Image.new('RGBA', (w, h), (0, 0, 0, 0))
|
||||||
@ -317,13 +301,14 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
|
|
||||||
power_percent, power_value = await power_to_value(power, power_plus)
|
power_percent, power_value = await power_to_value(power, power_plus)
|
||||||
|
|
||||||
dmgBonus_cal = prop['dmgBonus'] + prop['{}_dmgBonus'.format(attack_type)] + sp_dmgBonus
|
dmgBonus_cal = prop['{}_dmgBonus'.format(attack_type)] + sp_dmgBonus
|
||||||
critdmg_cal = prop['critdmg'] + prop['{}_critdmg'.format(attack_type)]
|
critdmg_cal = prop['critdmg'] + prop['{}_critdmg'.format(attack_type)]
|
||||||
critrate_cal = prop['critrate'] + prop['{}_critrate'.format(attack_type)]
|
critrate_cal = prop['critrate'] + prop['{}_critrate'.format(attack_type)]
|
||||||
d = (char_level + 100) / ((char_level + 100) + (1-prop['d']) * (char_level + 100))
|
d_cal = (char_level + 100) / ((char_level + 100) + (1-prop['{}_d'.format(attack_type)]) * (1-prop['{}_ignoreDef'.format(attack_type)]) * (enemy_level + 100))
|
||||||
r = 1 - prop['r']
|
r = 1 - prop['r']
|
||||||
e_dmg = prop['k']*(1+(2.78*prop['em'])/(prop['em']+1400)+prop['a'])
|
e_dmg = prop['k']*(1+(2.78*prop['em'])/(prop['em']+1400)+prop['a'])
|
||||||
add_dmg = prop['{}_addDmg'.format(attack_type)] + sp_addDmg
|
add_dmg = prop['{}_addDmg'.format(attack_type)] + sp_addDmg
|
||||||
|
|
||||||
if '治疗' in power_name:
|
if '治疗' in power_name:
|
||||||
crit_dmg = avg_dmg = (effect_prop * power_percent + power_value) * (1 + prop['healBouns'])
|
crit_dmg = avg_dmg = (effect_prop * power_percent + power_value) * (1 + prop['healBouns'])
|
||||||
elif '护盾' in power_name:
|
elif '护盾' in power_name:
|
||||||
@ -331,8 +316,8 @@ async def draw_dmgCacl_img(raw_data: dict) -> Image:
|
|||||||
elif '提升' in power_name or '提高' in power_name:
|
elif '提升' in power_name or '提高' in power_name:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
crit_dmg = (effect_prop * power_percent + power_value) * (1 + critdmg_cal) * (1 + dmgBonus_cal) * d * r + add_dmg
|
crit_dmg = (effect_prop * power_percent + power_value) * (1 + critdmg_cal) * (1 + dmgBonus_cal) * d_cal * r + add_dmg
|
||||||
avg_dmg = (crit_dmg - add_dmg) * critrate_cal + (1 - critrate_cal) * (effect_prop * power_percent + power_value) * (1 + dmgBonus_cal) * d * r + add_dmg
|
avg_dmg = (crit_dmg - add_dmg) * critrate_cal + (1 - critrate_cal) * (effect_prop * power_percent + power_value) * (1 + dmgBonus_cal) * d_cal * r + add_dmg
|
||||||
|
|
||||||
result_draw.text((45, 22 + (index + 1) * 40), power_list[power_name]['power_name'], text_color, text_size, anchor='lm')
|
result_draw.text((45, 22 + (index + 1) * 40), power_list[power_name]['power_name'], text_color, text_size, anchor='lm')
|
||||||
result_draw.text((460, 22 + (index + 1) * 40), str(round(crit_dmg)), text_color, text_size, anchor='lm')
|
result_draw.text((460, 22 + (index + 1) * 40), str(round(crit_dmg)), text_color, text_size, anchor='lm')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user