🚨 pre-commit-ci修复格式错误

This commit is contained in:
pre-commit-ci[bot] 2023-10-05 05:29:17 +00:00 committed by qwerdvd
parent fec83e38d5
commit 5f123dc52b
7 changed files with 215 additions and 110 deletions

View File

@ -7,14 +7,14 @@ from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from .cal_damage import cal_info
from .to_card import api_to_card
from ..utils.convert import get_uid
from ..utils.sr_prefix import PREFIX
from ..utils.error_reply import UID_HINT
from .draw_char_img import get_char_data
from .get_char_img import draw_char_info_img
from ..utils.image.convert import convert_img
from .draw_char_img import get_char_data
from .cal_damage import cal_info
from ..utils.resource.RESOURCE_PATH import TEMP_PATH
sv_char_info_config = SV('sr面板设置', pm=2)
@ -22,6 +22,7 @@ sv_get_char_info = SV('sr面板查询', priority=10)
sv_get_sr_original_pic = SV('sr查看面板原图', priority=5)
sv_char_damage_cal = SV('sr伤害计算')
@sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算')
async def send_damage_msg(bot: Bot, ev: Event):
msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text))

View File

@ -33,8 +33,8 @@ async def cal(char_data: Dict):
return skill_info_list
return '角色伤害计算未完成'
async def cal_info(char_data: Dict):
char = await cal_char_info(char_data)
avatar = AvatarInstance(char)
skill_info_list = await avatar.gat_damage()
return skill_info_list
return await avatar.gat_damage()

View File

@ -1,16 +1,14 @@
import json
from pathlib import Path
from typing import List, Union
from gsuid_core.logger import logger
from .Base.AvatarBase import BaseAvatarinfo
from .AvatarDamage.AvatarDamage import AvatarDamage
from .Weapon.Weapon import Weapon
from .utils import merge_attribute
from ..mono.Character import Character
from .Base.model import DamageInstance
from .Base.AvatarBase import BaseAvatarinfo
from .Relic.Relic import RelicSet, SingleRelic
from .AvatarDamage.AvatarDamage import AvatarDamage
Excel_path = Path(__file__).parent
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
@ -20,7 +18,9 @@ with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
class AvatarInstance:
def __init__(self, raw_data: Character):
self.raw_data = DamageInstance(raw_data)
self.avatardamage = AvatarDamage.create(self.raw_data.avatar, self.raw_data.skill)
self.avatardamage = AvatarDamage.create(
self.raw_data.avatar, self.raw_data.skill
)
self.avatar = BaseAvatarinfo(self.raw_data.avatar)
self.weapon = Weapon.create(self.raw_data.weapon)
self.relic_set = RelicSet().create(self.raw_data.relic)
@ -144,9 +144,6 @@ class AvatarInstance:
raise Exception('attribute_bonus is None')
logger.info(self.attribute_bonus)
return await self.avatardamage.getdamage(self.base_attr, self.attribute_bonus)
return await self.avatardamage.getdamage(
self.base_attr, self.attribute_bonus
)

View File

@ -1,14 +1,16 @@
from typing import Dict, List
import json
from pathlib import Path
import copy
from typing import Dict, List
from gsuid_core.logger import logger
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Role import demage_num
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
class Seele(BaseAvatar):
Buff: BaseAvatarBuff
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
):
@ -42,35 +44,71 @@ class Seele(BaseAvatar):
# logger.info(self.avatar_rank)
# 希尔天赋再现加伤害
attribute_bonus['AllDamageAddedRatio'] = self.Skill_num('Talent', 'Talent') + attribute_bonus.get('AllDamageAddedRatio', 0)
attribute_bonus['AllDamageAddedRatio'] = self.Skill_num(
'Talent', 'Talent'
) + attribute_bonus.get('AllDamageAddedRatio', 0)
skill_info_list = []
# 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal')
damagelist1 = await demage_num(base_attr, attribute_bonus, 'Normal', 'Normal', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist1 = await demage_num(
base_attr,
attribute_bonus,
'Normal',
'Normal',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '普攻', 'damagelist': damagelist1})
# 计算战技伤害
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill')
damagelist2 = await demage_num(base_attr, attribute_bonus, 'BPSkill', 'BPSkill', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist2 = await demage_num(
base_attr,
attribute_bonus,
'BPSkill',
'BPSkill',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '战技', 'damagelist': damagelist2})
# 计算大招伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra')
damagelist3 = await demage_num(base_attr, attribute_bonus, 'Ultra', 'Ultra', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist3 = await demage_num(
base_attr,
attribute_bonus,
'Ultra',
'Ultra',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '终结技', 'damagelist': damagelist3})
# 银狼降防终结技伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra')
add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['ignore_defence'] = 0.45 + add_attr_bonus.get('ignore_defence', 0)
damagelist4 = await demage_num(base_attr, add_attr_bonus, 'Ultra', 'Ultra', self.avatar_element, skill_multiplier, self.avatar_level)
add_attr_bonus['ignore_defence'] = 0.45 + add_attr_bonus.get(
'ignore_defence', 0
)
damagelist4 = await demage_num(
base_attr,
add_attr_bonus,
'Ultra',
'Ultra',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '银狼降防终结技', 'damagelist': damagelist4})
logger.info(skill_info_list)
return skill_info_list
class JingYuan(BaseAvatar):
Buff: BaseAvatarBuff
@ -109,27 +147,60 @@ class JingYuan(BaseAvatar):
skill_info_list = []
# 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal')
damagelist1 = await demage_num(base_attr, attribute_bonus, 'Normal', 'Normal', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist1 = await demage_num(
base_attr,
attribute_bonus,
'Normal',
'Normal',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '普攻', 'damagelist': damagelist1})
# 计算战技伤害
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill')
damagelist2 = await demage_num(base_attr, attribute_bonus, 'BPSkill', 'BPSkill', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist2 = await demage_num(
base_attr,
attribute_bonus,
'BPSkill',
'BPSkill',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '战技', 'damagelist': damagelist2})
# 计算大招伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra')
damagelist3 = await demage_num(base_attr, attribute_bonus, 'Ultra', 'Ultra', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist3 = await demage_num(
base_attr,
attribute_bonus,
'Ultra',
'Ultra',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '终结技', 'damagelist': damagelist3})
# 神君
skill_multiplier = self.Skill_num('Talent', 'Talent')
damagelist4 = await demage_num(base_attr, attribute_bonus, 'Talent', 'Talent', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist4 = await demage_num(
base_attr,
attribute_bonus,
'Talent',
'Talent',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '10层神君伤害', 'damagelist': damagelist4})
logger.info(skill_info_list)
return skill_info_list
class Welt(BaseAvatar):
Buff: BaseAvatarBuff
@ -163,13 +234,29 @@ class Welt(BaseAvatar):
skill_info_list = []
# 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal')
damagelist1 = await demage_num(base_attr, attribute_bonus, 'Normal', 'Normal', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist1 = await demage_num(
base_attr,
attribute_bonus,
'Normal',
'Normal',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '普攻', 'damagelist': damagelist1})
# 计算战技伤害
attnum = 3
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') / attnum
damagelist2 = await demage_num(base_attr, attribute_bonus, 'BPSkill', 'BPSkill', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist2 = await demage_num(
base_attr,
attribute_bonus,
'BPSkill',
'BPSkill',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
if self.avatar_rank >= 6:
attnum = 4
damagelist2[0] = damagelist2[0] * attnum
@ -179,19 +266,43 @@ class Welt(BaseAvatar):
# 计算大招伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra')
damagelist3 = await demage_num(base_attr, attribute_bonus, 'Ultra', 'Ultra', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist3 = await demage_num(
base_attr,
attribute_bonus,
'Ultra',
'Ultra',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '终结技', 'damagelist': damagelist3})
if self.avatar_rank >= 1:
skill_multiplier = self.Skill_num('Normal', 'Normal') * 0.5
damagelist4 = await demage_num(base_attr, attribute_bonus, 'Normal', 'Normal', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist4 = await demage_num(
base_attr,
attribute_bonus,
'Normal',
'Normal',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
damagelist4[0] = damagelist1[0] + damagelist4[0]
damagelist4[1] = damagelist1[1] + damagelist4[1]
damagelist4[2] = damagelist1[2] + damagelist4[2]
skill_info_list.append({'name': '强化普攻', 'damagelist': damagelist4})
skill_multiplier = (self.Skill_num('BPSkill', 'BPSkill') / 3) * 0.8
damagelist5 = await demage_num(base_attr, attribute_bonus, 'BPSkill', 'BPSkill', self.avatar_element, skill_multiplier, self.avatar_level)
damagelist5 = await demage_num(
base_attr,
attribute_bonus,
'BPSkill',
'BPSkill',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
damagelist5[0] = damagelist2[0] + damagelist5[0]
damagelist5[1] = damagelist2[1] + damagelist5[1]
damagelist5[2] = damagelist2[2] + damagelist5[2]
@ -200,6 +311,7 @@ class Welt(BaseAvatar):
logger.info(skill_info_list)
return skill_info_list
class AvatarDamage:
@classmethod
def create(

View File

@ -59,10 +59,9 @@ class BaseAvatarBuff:
async def extra_ability(self):
...
class BaseAvatarinfo:
def __init__(
self, char: DamageInstanceAvatar
):
def __init__(self, char: DamageInstanceAvatar):
self.avatar_id = char.id_
self.avatar_level = char.level
self.avatar_rank = char.rank
@ -107,6 +106,7 @@ class BaseAvatarinfo:
skill_info = skill_dict[str(self.avatar_id)]['Ultra_Use'][0]
return msgspec.convert(skill_info, type=float)
class BaseAvatar:
def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]

View File

@ -1,11 +1,19 @@
import json
from pathlib import Path
from typing import List, Union
from gsuid_core.logger import logger
from .utils import merge_attribute
async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, element, skill_multiplier, level):
async def demage_num(
base_attr,
attribute_bonus,
skill_type,
add_skill_type,
element,
skill_multiplier,
level,
):
logger.info(f'技能区: {skill_multiplier}')
logger.info(f'skill_type: {skill_type}')
logger.info(f'level: {level}')
@ -18,9 +26,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
if attr.__contains__('AttackAddedRatio'):
attr_name = attr.split('AttackAddedRatio')[0]
if attr_name in (skill_type, add_skill_type):
attack_added_ratio = attribute_bonus.get(
'AttackAddedRatio', 0
)
attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0)
attribute_bonus['AttackAddedRatio'] = (
attack_added_ratio + attribute_bonus[attr]
)
@ -41,8 +47,6 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
attack = merged_attr.get('attack', 0)
logger.info(f'攻击力: {attack}')
damage_add = 0
hp_multiplier = 0
hp_num = 0
# 模拟 同属性弱点 同等级 的怪物
# 韧性条减伤
@ -62,7 +66,10 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
if attr_name.__contains__('_'):
skill_name = attr_name.split('_')[0]
skillattr_name = attr_name.split('_')[1]
if skill_name in (skill_type, add_skill_type) and skillattr_name in (element, 'AllDamage'):
if skill_name in (
skill_type,
add_skill_type,
) and skillattr_name in (element, 'AllDamage'):
enemy_status_resistance += merged_attr[attr]
logger.info(
f'{skill_name}{skillattr_name}属性有{merged_attr[attr]}穿透加成'
@ -79,9 +86,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
ignore_defence = 1 - merged_attr[attr]
break
logger.info(f'ignore_defence {ignore_defence}')
enemy_defence = (
level * 10 + 200
) * ignore_defence
enemy_defence = (level * 10 + 200) * ignore_defence
defence_multiplier = (level * 10 + 200) / (
level * 10 + 200 + enemy_defence
)
@ -107,8 +112,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
attr_name = attr.split('AddedRatio')[0]
if attr_name in (element, 'AllDamage'):
logger.info(
f'{attr}{element} '
f'{merged_attr[attr]} 伤害加成'
f'{attr}{element}{merged_attr[attr]} 伤害加成'
)
if attr_name == element:
element_area += merged_attr[attr]
@ -146,8 +150,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
skill_name = attr.split('_')[0]
if skill_name in (skill_type, add_skill_type):
logger.info(
f'{attr}{skill_type}'
f'{merged_attr[attr]} 爆伤加成'
f'{attr}{skill_type}{merged_attr[attr]} 爆伤加成'
)
critical_damage_base += merged_attr[attr]
critical_damage = critical_damage_base + 1
@ -163,8 +166,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
skill_name = attr.split('_')[0]
if skill_name in (skill_type, add_skill_type):
logger.info(
f'{attr}{skill_type}'
f'{merged_attr[attr]} 暴击加成'
f'{attr}{skill_type}{merged_attr[attr]} 暴击加成'
)
critical_chance_base += merged_attr[attr]
critical_chance_base = min(1, critical_chance_base)
@ -202,17 +204,12 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
+ damage_add
)
attr_value_tz: float = base_attr.get('attack', 0)
attribute_atk = attribute_bonus.get('AttackDelta', 0)
attack_tz = (
attr_value_tz
+ attr_value_tz
* (
1
+ attribute_bonus.get('AttackAddedRatio', 0)
+ 2.144
)
* (1 + attribute_bonus.get('AttackAddedRatio', 0) + 2.144)
+ attribute_atk
)
@ -234,8 +231,6 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
+ damage_add
)
if element == 'Thunder':
element_area = 0
damage_tz_fj = (