🚨 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.bot import Bot
from gsuid_core.models import Event from gsuid_core.models import Event
from .cal_damage import cal_info
from .to_card import api_to_card from .to_card import api_to_card
from ..utils.convert import get_uid from ..utils.convert import get_uid
from ..utils.sr_prefix import PREFIX from ..utils.sr_prefix import PREFIX
from ..utils.error_reply import UID_HINT 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 .get_char_img import draw_char_info_img
from ..utils.image.convert import convert_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 from ..utils.resource.RESOURCE_PATH import TEMP_PATH
sv_char_info_config = SV('sr面板设置', pm=2) 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_get_sr_original_pic = SV('sr查看面板原图', priority=5)
sv_char_damage_cal = SV('sr伤害计算') sv_char_damage_cal = SV('sr伤害计算')
@sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算') @sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算')
async def send_damage_msg(bot: Bot, ev: Event): async def send_damage_msg(bot: Bot, ev: Event):
msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text)) 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 skill_info_list
return '角色伤害计算未完成' return '角色伤害计算未完成'
async def cal_info(char_data: Dict): async def cal_info(char_data: Dict):
char = await cal_char_info(char_data) char = await cal_char_info(char_data)
avatar = AvatarInstance(char) avatar = AvatarInstance(char)
skill_info_list = await avatar.gat_damage() return await avatar.gat_damage()
return skill_info_list

View File

@ -1,16 +1,14 @@
import json import json
from pathlib import Path from pathlib import Path
from typing import List, Union
from gsuid_core.logger import logger from gsuid_core.logger import logger
from .Base.AvatarBase import BaseAvatarinfo
from .AvatarDamage.AvatarDamage import AvatarDamage
from .Weapon.Weapon import Weapon from .Weapon.Weapon import Weapon
from .utils import merge_attribute
from ..mono.Character import Character from ..mono.Character import Character
from .Base.model import DamageInstance from .Base.model import DamageInstance
from .Base.AvatarBase import BaseAvatarinfo
from .Relic.Relic import RelicSet, SingleRelic from .Relic.Relic import RelicSet, SingleRelic
from .AvatarDamage.AvatarDamage import AvatarDamage
Excel_path = Path(__file__).parent Excel_path = Path(__file__).parent
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: 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: class AvatarInstance:
def __init__(self, raw_data: Character): def __init__(self, raw_data: Character):
self.raw_data = DamageInstance(raw_data) 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.avatar = BaseAvatarinfo(self.raw_data.avatar)
self.weapon = Weapon.create(self.raw_data.weapon) self.weapon = Weapon.create(self.raw_data.weapon)
self.relic_set = RelicSet().create(self.raw_data.relic) self.relic_set = RelicSet().create(self.raw_data.relic)
@ -77,7 +77,7 @@ class AvatarInstance:
self.attribute_bonus[ self.attribute_bonus[
attribute attribute
] = set_skill.relicSetAttribute[attribute] ] = set_skill.relicSetAttribute[attribute]
def cal_avatar_eidolon_add(self): def cal_avatar_eidolon_add(self):
for attribute in self.avatardamage.eidolon_attribute: for attribute in self.avatardamage.eidolon_attribute:
if attribute in self.attribute_bonus: if attribute in self.attribute_bonus:
@ -97,7 +97,7 @@ class AvatarInstance:
self.attribute_bonus[ self.attribute_bonus[
attribute attribute
] = self.avatardamage.extra_ability_attribute[attribute] ] = self.avatardamage.extra_ability_attribute[attribute]
def cal_avatar_attr_add(self): def cal_avatar_attr_add(self):
attribute_bonus = self.avatar.avatar_attribute_bonus attribute_bonus = self.avatar.avatar_attribute_bonus
if attribute_bonus: if attribute_bonus:
@ -126,7 +126,7 @@ class AvatarInstance:
logger.info(self.base_attr) logger.info(self.base_attr)
logger.info('attribute_bonus') logger.info('attribute_bonus')
logger.info(self.attribute_bonus) logger.info(self.attribute_bonus)
logger.info('检查武器战斗生效的buff') logger.info('检查武器战斗生效的buff')
Ultra_Use = self.avatar.Ultra_Use() Ultra_Use = self.avatar.Ultra_Use()
logger.info('Ultra_Use') logger.info('Ultra_Use')
@ -143,10 +143,7 @@ class AvatarInstance:
if self.attribute_bonus is None: if self.attribute_bonus is None:
raise Exception('attribute_bonus is None') raise Exception('attribute_bonus is None')
logger.info(self.attribute_bonus) 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 import copy
from typing import Dict, List
from gsuid_core.logger import logger from gsuid_core.logger import logger
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Role import demage_num from ..Role import demage_num
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
class Seele(BaseAvatar): class Seele(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
def __init__( def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
@ -32,7 +34,7 @@ class Seele(BaseAvatar):
def extra_ability(self): def extra_ability(self):
# 额外能力 割裂 抗性穿透提高20 # 额外能力 割裂 抗性穿透提高20
self.extra_ability_attribute['QuantumResistancePenetration'] = 0.2 self.extra_ability_attribute['QuantumResistancePenetration'] = 0.2
async def getdamage( async def getdamage(
self, self,
base_attr: Dict[str, float], base_attr: Dict[str, float],
@ -40,37 +42,73 @@ class Seele(BaseAvatar):
): ):
# logger.info(base_attr) # logger.info(base_attr)
# logger.info(self.avatar_rank) # 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_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') 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(
skill_info_list.append({'name':'普攻', 'damagelist': damagelist1}) 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') 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(
skill_info_list.append({'name':'战技', 'damagelist': damagelist2}) 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') 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(
skill_info_list.append({'name':'终结技', 'damagelist': damagelist3}) 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') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['ignore_defence'] = 0.45 + add_attr_bonus.get('ignore_defence', 0) add_attr_bonus['ignore_defence'] = 0.45 + add_attr_bonus.get(
damagelist4 = await demage_num(base_attr, add_attr_bonus, 'Ultra', 'Ultra', self.avatar_element, skill_multiplier, self.avatar_level) 'ignore_defence', 0
skill_info_list.append({'name':'银狼降防终结技', 'damagelist': damagelist4}) )
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) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class JingYuan(BaseAvatar): class JingYuan(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -100,7 +138,7 @@ class JingYuan(BaseAvatar):
self.extra_ability_attribute['CriticalDamageBase'] = 0.25 self.extra_ability_attribute['CriticalDamageBase'] = 0.25
logger.info('施放战技后, 暴击率提升10%') logger.info('施放战技后, 暴击率提升10%')
self.extra_ability_attribute['CriticalChanceBase'] = 0.1 self.extra_ability_attribute['CriticalChanceBase'] = 0.1
async def getdamage( async def getdamage(
self, self,
base_attr: Dict[str, float], base_attr: Dict[str, float],
@ -109,27 +147,60 @@ class JingYuan(BaseAvatar):
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') 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(
skill_info_list.append({'name':'普攻', 'damagelist': damagelist1}) 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') 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(
skill_info_list.append({'name':'战技', 'damagelist': damagelist2}) 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') 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(
skill_info_list.append({'name':'终结技', 'damagelist': damagelist3}) 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') 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(
skill_info_list.append({'name':'10层神君伤害', 'damagelist': damagelist4}) 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) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class Welt(BaseAvatar): class Welt(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -154,7 +225,7 @@ class Welt(BaseAvatar):
self.extra_ability_attribute['DmgRatio'] = 0.12 self.extra_ability_attribute['DmgRatio'] = 0.12
logger.info('对被弱点击破的敌方目标造成的伤害提高20') logger.info('对被弱点击破的敌方目标造成的伤害提高20')
self.extra_ability_attribute['AllDamageAddedRatio'] = 0.20 self.extra_ability_attribute['AllDamageAddedRatio'] = 0.20
async def getdamage( async def getdamage(
self, self,
base_attr: Dict[str, float], base_attr: Dict[str, float],
@ -163,43 +234,84 @@ class Welt(BaseAvatar):
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') 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(
skill_info_list.append({'name':'普攻', 'damagelist': damagelist1}) base_attr,
attribute_bonus,
'Normal',
'Normal',
self.avatar_element,
skill_multiplier,
self.avatar_level,
)
skill_info_list.append({'name': '普攻', 'damagelist': damagelist1})
# 计算战技伤害 # 计算战技伤害
attnum = 3 attnum = 3
skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') / attnum 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: if self.avatar_rank >= 6:
attnum = 4 attnum = 4
damagelist2[0] = damagelist2[0] * attnum damagelist2[0] = damagelist2[0] * attnum
damagelist2[1] = damagelist2[1] * attnum damagelist2[1] = damagelist2[1] * attnum
damagelist2[2] = damagelist2[2] * attnum damagelist2[2] = damagelist2[2] * attnum
skill_info_list.append({'name':'战技', 'damagelist': damagelist2}) skill_info_list.append({'name': '战技', 'damagelist': damagelist2})
# 计算大招伤害 # 计算大招伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra') 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(
skill_info_list.append({'name':'终结技', 'damagelist': damagelist3}) 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: if self.avatar_rank >= 1:
skill_multiplier = self.Skill_num('Normal', 'Normal') * 0.5 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[0] = damagelist1[0] + damagelist4[0]
damagelist4[1] = damagelist1[1] + damagelist4[1] damagelist4[1] = damagelist1[1] + damagelist4[1]
damagelist4[2] = damagelist1[2] + damagelist4[2] damagelist4[2] = damagelist1[2] + damagelist4[2]
skill_info_list.append({'name':'强化普攻', 'damagelist': damagelist4}) skill_info_list.append({'name': '强化普攻', 'damagelist': damagelist4})
skill_multiplier = (self.Skill_num('BPSkill', 'BPSkill') / 3) * 0.8 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[0] = damagelist2[0] + damagelist5[0]
damagelist5[1] = damagelist2[1] + damagelist5[1] damagelist5[1] = damagelist2[1] + damagelist5[1]
damagelist5[2] = damagelist2[2] + damagelist5[2] damagelist5[2] = damagelist2[2] + damagelist5[2]
skill_info_list.append({'name':'强化战技', 'damagelist': damagelist5}) skill_info_list.append({'name': '强化战技', 'damagelist': damagelist5})
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class AvatarDamage: class AvatarDamage:
@classmethod @classmethod
def create( def create(

View File

@ -59,10 +59,9 @@ class BaseAvatarBuff:
async def extra_ability(self): async def extra_ability(self):
... ...
class BaseAvatarinfo: class BaseAvatarinfo:
def __init__( def __init__(self, char: DamageInstanceAvatar):
self, char: DamageInstanceAvatar
):
self.avatar_id = char.id_ self.avatar_id = char.id_
self.avatar_level = char.level self.avatar_level = char.level
self.avatar_rank = char.rank self.avatar_rank = char.rank
@ -102,11 +101,12 @@ class BaseAvatarinfo:
# 嘲讽 # 嘲讽
BaseAggro=promotion.BaseAggro.Value, BaseAggro=promotion.BaseAggro.Value,
) )
def Ultra_Use(self): def Ultra_Use(self):
skill_info = skill_dict[str(self.avatar_id)]['Ultra_Use'][0] skill_info = skill_dict[str(self.avatar_id)]['Ultra_Use'][0]
return msgspec.convert(skill_info, type=float) return msgspec.convert(skill_info, type=float)
class BaseAvatar: class BaseAvatar:
def __init__( def __init__(
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
@ -152,11 +152,11 @@ class BaseAvatar:
# 嘲讽 # 嘲讽
BaseAggro=promotion.BaseAggro.Value, BaseAggro=promotion.BaseAggro.Value,
) )
def Skill_Info(self, skill_type: str): def Skill_Info(self, skill_type: str):
skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type] skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type]
return msgspec.convert(skill_info, type=List[Union[str, int]]) return msgspec.convert(skill_info, type=List[Union[str, int]])
def Skill_num(self, skill: Union[str, int], skill_type: str): def Skill_num(self, skill: Union[str, int], skill_type: str):
skill_level = 0 skill_level = 0
if skill == 'Normal': if skill == 'Normal':

View File

@ -1,11 +1,19 @@
import json
from pathlib import Path
from typing import List, Union from typing import List, Union
from gsuid_core.logger import logger from gsuid_core.logger import logger
from .utils import merge_attribute 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_multiplier}')
logger.info(f'skill_type: {skill_type}') logger.info(f'skill_type: {skill_type}')
logger.info(f'level: {level}') 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'): if attr.__contains__('AttackAddedRatio'):
attr_name = attr.split('AttackAddedRatio')[0] attr_name = attr.split('AttackAddedRatio')[0]
if attr_name in (skill_type, add_skill_type): if attr_name in (skill_type, add_skill_type):
attack_added_ratio = attribute_bonus.get( attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0)
'AttackAddedRatio', 0
)
attribute_bonus['AttackAddedRatio'] = ( attribute_bonus['AttackAddedRatio'] = (
attack_added_ratio + attribute_bonus[attr] attack_added_ratio + attribute_bonus[attr]
) )
@ -41,9 +47,7 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
attack = merged_attr.get('attack', 0) attack = merged_attr.get('attack', 0)
logger.info(f'攻击力: {attack}') logger.info(f'攻击力: {attack}')
damage_add = 0 damage_add = 0
hp_multiplier = 0
hp_num = 0
# 模拟 同属性弱点 同等级 的怪物 # 模拟 同属性弱点 同等级 的怪物
# 韧性条减伤 # 韧性条减伤
enemy_damage_reduction = 0.1 enemy_damage_reduction = 0.1
@ -62,7 +66,10 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
if attr_name.__contains__('_'): if attr_name.__contains__('_'):
skill_name = attr_name.split('_')[0] skill_name = attr_name.split('_')[0]
skillattr_name = attr_name.split('_')[1] 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] enemy_status_resistance += merged_attr[attr]
logger.info( logger.info(
f'{skill_name}{skillattr_name}属性有{merged_attr[attr]}穿透加成' 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] ignore_defence = 1 - merged_attr[attr]
break break
logger.info(f'ignore_defence {ignore_defence}') logger.info(f'ignore_defence {ignore_defence}')
enemy_defence = ( enemy_defence = (level * 10 + 200) * ignore_defence
level * 10 + 200
) * ignore_defence
defence_multiplier = (level * 10 + 200) / ( defence_multiplier = (level * 10 + 200) / (
level * 10 + 200 + enemy_defence 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] attr_name = attr.split('AddedRatio')[0]
if attr_name in (element, 'AllDamage'): if attr_name in (element, 'AllDamage'):
logger.info( logger.info(
f'{attr}{element} ' f'{attr}{element}{merged_attr[attr]} 伤害加成'
f'{merged_attr[attr]} 伤害加成'
) )
if attr_name == element: if attr_name == element:
element_area += merged_attr[attr] 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] skill_name = attr.split('_')[0]
if skill_name in (skill_type, add_skill_type): if skill_name in (skill_type, add_skill_type):
logger.info( logger.info(
f'{attr}{skill_type}' f'{attr}{skill_type}{merged_attr[attr]} 爆伤加成'
f'{merged_attr[attr]} 爆伤加成'
) )
critical_damage_base += merged_attr[attr] critical_damage_base += merged_attr[attr]
critical_damage = critical_damage_base + 1 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] skill_name = attr.split('_')[0]
if skill_name in (skill_type, add_skill_type): if skill_name in (skill_type, add_skill_type):
logger.info( logger.info(
f'{attr}{skill_type}' f'{attr}{skill_type}{merged_attr[attr]} 暴击加成'
f'{merged_attr[attr]} 暴击加成'
) )
critical_chance_base += merged_attr[attr] critical_chance_base += merged_attr[attr]
critical_chance_base = min(1, critical_chance_base) critical_chance_base = min(1, critical_chance_base)
@ -173,11 +175,11 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
# 期望伤害 # 期望伤害
qiwang_damage = (critical_chance_base * critical_damage_base) + 1 qiwang_damage = (critical_chance_base * critical_damage_base) + 1
logger.info(f'暴击期望: {qiwang_damage}') logger.info(f'暴击期望: {qiwang_damage}')
attack_tz = 0.0 attack_tz = 0.0
injury_add = 0.0 injury_add = 0.0
critical_damage_add = 0 critical_damage_add = 0
damage_cd = ( damage_cd = (
attack attack
* skill_multiplier * skill_multiplier
@ -202,25 +204,20 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
+ damage_add + damage_add
) )
attr_value_tz: float = base_attr.get('attack', 0) attr_value_tz: float = base_attr.get('attack', 0)
attribute_atk = attribute_bonus.get('AttackDelta', 0) attribute_atk = attribute_bonus.get('AttackDelta', 0)
attack_tz = ( attack_tz = (
attr_value_tz attr_value_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 + attribute_atk
) )
injury_add_tz = 0 injury_add_tz = 0
if element == 'Imaginary': if element == 'Imaginary':
injury_add_tz = 0.12 injury_add_tz = 0.12
damage_tz = ( damage_tz = (
attack_tz attack_tz
* skill_multiplier * skill_multiplier
@ -234,8 +231,6 @@ async def demage_num(base_attr, attribute_bonus, skill_type, add_skill_type, ele
+ damage_add + damage_add
) )
if element == 'Thunder': if element == 'Thunder':
element_area = 0 element_area = 0
damage_tz_fj = ( damage_tz_fj = (

View File

@ -19,7 +19,7 @@ with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
class RoleInstance: class RoleInstance:
def __init__(self, raw_data: Character): def __init__(self, raw_data: Character):
self.raw_data = DamageInstance(raw_data) self.raw_data = DamageInstance(raw_data)
self.avatar = Avatar.create(self.raw_data.avatar, self.raw_data.skill) self.avatar = Avatar.create(self.raw_data.avatar, self.raw_data.skill)
self.weapon = Weapon.create(self.raw_data.weapon) self.weapon = Weapon.create(self.raw_data.weapon)
self.relic_set = RelicSet().create(self.raw_data.relic) self.relic_set = RelicSet().create(self.raw_data.relic)