mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-06 03:33:45 +08:00
🚨 pre-commit-ci
修复格式错误
This commit is contained in:
parent
fec83e38d5
commit
5f123dc52b
@ -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))
|
||||||
|
@ -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
|
|
||||||
|
@ -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
|
||||||
|
)
|
||||||
|
|
||||||
|
@ -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(
|
||||||
|
@ -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':
|
||||||
|
@ -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 = (
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user