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

This commit is contained in:
pre-commit-ci[bot] 2023-10-27 06:47:22 +00:00
parent 163644a15d
commit b7734598d4
6 changed files with 374 additions and 269 deletions

View File

@ -1,18 +1,16 @@
import re import re
from pathlib import Path from pathlib import Path
from typing import Tuple, cast from typing import Tuple, cast
import asyncio
from PIL import Image from PIL import Image
from gsuid_core.sv import SV 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 ..utils.resource.RESOURCE_PATH import TEMP_PATH from ..utils.resource.RESOURCE_PATH import TEMP_PATH
@ -21,6 +19,7 @@ sv_char_info_config = SV('sr面板设置', pm=2)
sv_get_char_info = SV('sr面板查询', priority=10) 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_get_char_info.on_prefix(f'{PREFIX}查询') @sv_get_char_info.on_prefix(f'{PREFIX}查询')
async def send_char_info(bot: Bot, ev: Event): async def send_char_info(bot: Bot, ev: Event):
im = await _get_char_info(bot, ev, ev.text) im = await _get_char_info(bot, ev, ev.text)

View File

@ -1,9 +1,9 @@
import json from typing import Dict
from pathlib import Path
from typing import Dict, List, Union
from .mono.Character import Character from .mono.Character import Character
from .damage.Avatar import AvatarInstance from .damage.Avatar import AvatarInstance
async def cal_char_info(char_data: Dict): async def cal_char_info(char_data: Dict):
char: Character = Character(char_data) char: Character = Character(char_data)
await char.get_equipment_info() await char.get_equipment_info()
@ -11,6 +11,7 @@ async def cal_char_info(char_data: Dict):
await char.get_relic_info() await char.get_relic_info()
return char return char
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)

View File

@ -3,9 +3,9 @@ from typing import Dict, List
from gsuid_core.logger import logger from gsuid_core.logger import logger
from ..Role import calculate_damage, calculate_shield, calculate_heal
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
from ..Role import calculate_heal, calculate_damage, calculate_shield
class Seele(BaseAvatar): class Seele(BaseAvatar):
@ -633,6 +633,7 @@ class Danhengil(BaseAvatar):
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class Argenti(BaseAvatar): class Argenti(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -665,10 +666,18 @@ class Argenti(BaseAvatar):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
talent_cc_add = self.Skill_num('Talent', 'Talent') talent_cc_add = self.Skill_num('Talent', 'Talent')
attribute_bonus['CriticalChanceBase'] = talent_cc_add * 10 + attribute_bonus.get('CriticalChanceBase', 0) attribute_bonus[
'CriticalChanceBase'
] = talent_cc_add * 10 + attribute_bonus.get('CriticalChanceBase', 0)
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
attribute_bonus['CriticalDamageBase'] = 0.08 + attribute_bonus.get('CriticalDamageBase', 0) attribute_bonus['CriticalDamageBase'] = 0.08 + attribute_bonus.get(
attribute_bonus['CriticalChanceBase'] = talent_cc_add * 2 + attribute_bonus.get('CriticalChanceBase', 0) 'CriticalDamageBase', 0
)
attribute_bonus[
'CriticalChanceBase'
] = talent_cc_add * 2 + attribute_bonus.get(
'CriticalChanceBase', 0
)
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
@ -721,7 +730,9 @@ class Argenti(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist3[2] += damage3 damagelist3[2] += damage3
skill_info_list.append({'name': '终结技(90耗能)', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '终结技(90耗能)', 'damagelist': damagelist3}
)
# 计算大招2伤害 # 计算大招2伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra1') skill_multiplier = self.Skill_num('Ultra', 'Ultra1')
@ -749,9 +760,12 @@ class Argenti(BaseAvatar):
damagelist5[0] = damagelist5[0] * 6 + damagelist4[0] damagelist5[0] = damagelist5[0] * 6 + damagelist4[0]
damagelist5[1] = damagelist5[1] * 6 + damagelist4[1] damagelist5[1] = damagelist5[1] * 6 + damagelist4[1]
damagelist5[2] = damagelist5[2] * 6 + damagelist4[2] damagelist5[2] = damagelist5[2] * 6 + damagelist4[2]
skill_info_list.append({'name': '强化终结技(180耗能)', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '强化终结技(180耗能)', 'damagelist': damagelist5}
)
return skill_info_list return skill_info_list
class Clara(BaseAvatar): class Clara(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -835,7 +849,9 @@ class Clara(BaseAvatar):
skill_info_list.append({'name': '反击', 'damagelist': damagelist3}) skill_info_list.append({'name': '反击', 'damagelist': damagelist3})
# 计算强化反击伤害 # 计算强化反击伤害
skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num('Ultra', 'Talent1') skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num(
'Ultra', 'Talent1'
)
damagelist4 = await calculate_damage( damagelist4 = await calculate_damage(
base_attr, base_attr,
attribute_bonus, attribute_bonus,
@ -851,8 +867,12 @@ class Clara(BaseAvatar):
# 计算1+1托帕反击伤害 # 计算1+1托帕反击伤害
skill_multiplier = self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num('Talent', 'Talent')
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['Talent_DmgRatio'] = add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5 add_attr_bonus['Talent_DmgRatio'] = (
add_attr_bonus['Talent_CriticalDamageBase'] = add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74 add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5
)
add_attr_bonus['Talent_CriticalDamageBase'] = (
add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74
)
damagelist5 = await calculate_damage( damagelist5 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -863,13 +883,21 @@ class Clara(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist5[2] += damage3 damagelist5[2] += damage3
skill_info_list.append({'name': '(1+1托帕)反击', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '(1+1托帕)反击', 'damagelist': damagelist5}
)
# 计算反击伤害 # 计算反击伤害
skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num('Ultra', 'Talent1') skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num(
'Ultra', 'Talent1'
)
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['Talent_DmgRatio'] = add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5 add_attr_bonus['Talent_DmgRatio'] = (
add_attr_bonus['Talent_CriticalDamageBase'] = add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74 add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5
)
add_attr_bonus['Talent_CriticalDamageBase'] = (
add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74
)
damagelist6 = await calculate_damage( damagelist6 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -880,10 +908,13 @@ class Clara(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damagelist6[2] += damage3 damagelist6[2] += damage3
skill_info_list.append({'name': '(1+1托帕)强化反击', 'damagelist': damagelist6}) skill_info_list.append(
{'name': '(1+1托帕)强化反击', 'damagelist': damagelist6}
)
return skill_info_list return skill_info_list
class Silverwolf(BaseAvatar): class Silverwolf(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -980,6 +1011,7 @@ class Silverwolf(BaseAvatar):
return skill_info_list return skill_info_list
class Kafka(BaseAvatar): class Kafka(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1094,6 +1126,7 @@ class Kafka(BaseAvatar):
return skill_info_list return skill_info_list
class Blade(BaseAvatar): class Blade(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1110,7 +1143,6 @@ class Blade(BaseAvatar):
pass pass
def eidolons(self): def eidolons(self):
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
self.eidolon_attribute['CriticalChanceBase'] = 0.15 self.eidolon_attribute['CriticalChanceBase'] = 0.15
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
@ -1121,7 +1153,9 @@ class Blade(BaseAvatar):
logger.info('天赋施放的追加攻击伤害提高20%') logger.info('天赋施放的追加攻击伤害提高20%')
self.extra_ability_attribute['TalentDmgAdd'] = 0.2 self.extra_ability_attribute['TalentDmgAdd'] = 0.2
logger.info('战技加伤') logger.info('战技加伤')
self.extra_ability_attribute['AllDamageAddedRatio'] = self.Skill_num('BPSkill', 'BPSkill') self.extra_ability_attribute['AllDamageAddedRatio'] = self.Skill_num(
'BPSkill', 'BPSkill'
)
async def getdamage( async def getdamage(
self, self,
@ -1241,7 +1275,10 @@ class Blade(BaseAvatar):
damagelist7[1] += damagelist6[1] damagelist7[1] += damagelist6[1]
damagelist7[2] += damagelist6[2] damagelist7[2] += damagelist6[2]
if self.avatar_rank >= 6: if self.avatar_rank >= 6:
hp = base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio']) + attribute_bonus['HPDelta'] hp = (
base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio'])
+ attribute_bonus['HPDelta']
)
damage_add = hp * 0.5 damage_add = hp * 0.5
damagelist7[0] += damage_add damagelist7[0] += damage_add
damagelist7[1] += damage_add damagelist7[1] += damage_add
@ -1250,6 +1287,7 @@ class Blade(BaseAvatar):
return skill_info_list return skill_info_list
class Fuxuan(BaseAvatar): class Fuxuan(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1271,8 +1309,12 @@ class Fuxuan(BaseAvatar):
def extra_ability(self): def extra_ability(self):
logger.info('符玄战技【穷观阵】属性加成') logger.info('符玄战技【穷观阵】属性加成')
self.extra_ability_attribute['CriticalChanceBase'] = self.Skill_num('BPSkill', 'BPSkill_CC') self.extra_ability_attribute['CriticalChanceBase'] = self.Skill_num(
self.extra_ability_attribute['HPAddedRatio'] = self.Skill_num('BPSkill', 'BPSkill_HP') 'BPSkill', 'BPSkill_CC'
)
self.extra_ability_attribute['HPAddedRatio'] = self.Skill_num(
'BPSkill', 'BPSkill_HP'
)
async def getdamage( async def getdamage(
self, self,
@ -1334,6 +1376,7 @@ class Fuxuan(BaseAvatar):
return skill_info_list return skill_info_list
class Yanqing(BaseAvatar): class Yanqing(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1446,6 +1489,7 @@ class Yanqing(BaseAvatar):
return skill_info_list return skill_info_list
class Himeko(BaseAvatar): class Himeko(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1548,6 +1592,7 @@ class Himeko(BaseAvatar):
return skill_info_list return skill_info_list
class Qingque(BaseAvatar): class Qingque(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1577,7 +1622,9 @@ class Qingque(BaseAvatar):
all_damage_added_ratio * 4 all_damage_added_ratio * 4
) )
logger.info('默认暗杠加攻') logger.info('默认暗杠加攻')
self.extra_ability_attribute['AttackAddedRatio'] = self.Skill_num('Talent', 'Talent') self.extra_ability_attribute['AttackAddedRatio'] = self.Skill_num(
'Talent', 'Talent'
)
async def getdamage( async def getdamage(
self, self,
@ -1639,6 +1686,7 @@ class Qingque(BaseAvatar):
return skill_info_list return skill_info_list
class Jingliu(BaseAvatar): class Jingliu(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1765,6 +1813,7 @@ class Jingliu(BaseAvatar):
return skill_info_list return skill_info_list
class Topaz(BaseAvatar): class Topaz(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1844,7 +1893,9 @@ class Topaz(BaseAvatar):
skill_info_list.append({'name': '账账', 'damagelist': damagelist2}) skill_info_list.append({'name': '账账', 'damagelist': damagelist2})
# 计算强化账账伤害 # 计算强化账账伤害
skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num('Ultra', 'Talent1') skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num(
'Ultra', 'Talent1'
)
damagelist3 = await calculate_damage( damagelist3 = await calculate_damage(
base_attr, base_attr,
attribute_bonus, attribute_bonus,
@ -1859,6 +1910,7 @@ class Topaz(BaseAvatar):
return skill_info_list return skill_info_list
class Guinaifen(BaseAvatar): class Guinaifen(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -1964,6 +2016,7 @@ class Guinaifen(BaseAvatar):
return skill_info_list return skill_info_list
class Gepard(BaseAvatar): class Gepard(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2042,6 +2095,7 @@ class Gepard(BaseAvatar):
return skill_info_list return skill_info_list
class Luocha(BaseAvatar): class Luocha(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2124,7 +2178,9 @@ class Luocha(BaseAvatar):
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist3}) skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist3})
if self.avatar_rank >= 2: if self.avatar_rank >= 2:
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
add_attr_bonus['HealRatioBase'] = add_attr_bonus.get('HealRatioBase', 0) + 0.3 add_attr_bonus['HealRatioBase'] = (
add_attr_bonus.get('HealRatioBase', 0) + 0.3
)
damagelist4 = await calculate_heal( damagelist4 = await calculate_heal(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -2133,7 +2189,9 @@ class Luocha(BaseAvatar):
skill_num, skill_num,
1, 1,
) )
skill_info_list.append({'name': '战技治疗量(生命<50%)(2魂)', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '战技治疗量(生命<50%)(2魂)', 'damagelist': damagelist4}
)
damagelist5 = await calculate_shield( damagelist5 = await calculate_shield(
base_attr, base_attr,
@ -2142,7 +2200,9 @@ class Luocha(BaseAvatar):
240, 240,
1, 1,
) )
skill_info_list.append({'name': '战技护盾量(生命>50%)(2魂)', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '战技护盾量(生命>50%)(2魂)', 'damagelist': damagelist5}
)
# 计算天赋治疗量 # 计算天赋治疗量
skill_multiplier = self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num('Talent', 'Talent')
@ -2170,6 +2230,7 @@ class Luocha(BaseAvatar):
return skill_info_list return skill_info_list
class Bailu(BaseAvatar): class Bailu(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2262,7 +2323,9 @@ class Bailu(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '天赋[生息]治疗量', 'damagelist': damagelist4}) skill_info_list.append(
{'name': '天赋[生息]治疗量', 'damagelist': damagelist4}
)
# 计算天赋复活治疗量 # 计算天赋复活治疗量
skill_multiplier = self.Skill_num('Talent', 'Talent1') skill_multiplier = self.Skill_num('Talent', 'Talent1')
@ -2274,10 +2337,13 @@ class Bailu(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '天赋[复活]治疗量', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '天赋[复活]治疗量', 'damagelist': damagelist5}
)
return skill_info_list return skill_info_list
class Lynx(BaseAvatar): class Lynx(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2320,7 +2386,10 @@ class Lynx(BaseAvatar):
skill_num = self.Skill_num('BPSkill', 'BPSkill_HP_G') skill_num = self.Skill_num('BPSkill', 'BPSkill_HP_G')
if self.avatar_rank >= 6: if self.avatar_rank >= 6:
skill_multiplier += 0.06 skill_multiplier += 0.06
hp = base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio']) + attribute_bonus['HPDelta'] hp = (
base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio'])
+ attribute_bonus['HPDelta']
)
hp_add = hp * skill_multiplier + skill_num hp_add = hp * skill_multiplier + skill_num
attribute_bonus['HPDelta'] = attribute_bonus.get('HPDelta', 0) + hp_add attribute_bonus['HPDelta'] = attribute_bonus.get('HPDelta', 0) + hp_add
@ -2353,7 +2422,9 @@ class Lynx(BaseAvatar):
skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2}) skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2})
damagelist3 = [] damagelist3 = []
damagelist3.append(hp_add) damagelist3.append(hp_add)
skill_info_list.append({'name': '[求生反应]生命上限', 'damagelist': damagelist3}) skill_info_list.append(
{'name': '[求生反应]生命上限', 'damagelist': damagelist3}
)
# 计算终结技治疗量 # 计算终结技治疗量
skill_multiplier = self.Skill_num('Ultra', 'Ultra') skill_multiplier = self.Skill_num('Ultra', 'Ultra')
@ -2380,8 +2451,12 @@ class Lynx(BaseAvatar):
skill_info_list.append({'name': '天赋缓回治疗量', 'damagelist': damagelist5}) skill_info_list.append({'name': '天赋缓回治疗量', 'damagelist': damagelist5})
# 计算天赋求生反应治疗量 # 计算天赋求生反应治疗量
skill_multiplier = self.Skill_num('Talent', 'Talent1') + self.Skill_num('Talent', 'Talent') skill_multiplier = self.Skill_num(
skill_num = self.Skill_num('Talent', 'Talent1_G') + self.Skill_num('Talent', 'Talent_G') 'Talent', 'Talent1'
) + self.Skill_num('Talent', 'Talent')
skill_num = self.Skill_num('Talent', 'Talent1_G') + self.Skill_num(
'Talent', 'Talent_G'
)
damagelist6 = await calculate_heal( damagelist6 = await calculate_heal(
base_attr, base_attr,
attribute_bonus, attribute_bonus,
@ -2389,10 +2464,13 @@ class Lynx(BaseAvatar):
skill_multiplier, skill_multiplier,
skill_num, skill_num,
) )
skill_info_list.append({'name': '天赋[求生反应]缓回治疗量', 'damagelist': damagelist6}) skill_info_list.append(
{'name': '天赋[求生反应]缓回治疗量', 'damagelist': damagelist6}
)
return skill_info_list return skill_info_list
class Natasha(BaseAvatar): class Natasha(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2412,7 +2490,9 @@ class Natasha(BaseAvatar):
pass pass
def extra_ability(self): def extra_ability(self):
self.extra_ability_attribute['HealRatioBase'] = 0.1 + self.Skill_num('Talent', 'Talent') self.extra_ability_attribute['HealRatioBase'] = 0.1 + self.Skill_num(
'Talent', 'Talent'
)
async def getdamage( async def getdamage(
self, self,
@ -2496,6 +2576,7 @@ class Natasha(BaseAvatar):
return skill_info_list return skill_info_list
class Mar7th(BaseAvatar): class Mar7th(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -2585,7 +2666,11 @@ class Mar7th(BaseAvatar):
) )
damagelist4[2] += damage3 damagelist4[2] += damage3
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
defence = base_attr['defence'] * (1 + attribute_bonus['DefenceAddedRatio']) + attribute_bonus['DefenceDelta'] defence = (
base_attr['defence']
* (1 + attribute_bonus['DefenceAddedRatio'])
+ attribute_bonus['DefenceDelta']
)
damage_add = defence * 0.3 damage_add = defence * 0.3
damagelist4[0] += damage_add damagelist4[0] += damage_add
damagelist4[1] += damage_add damagelist4[1] += damage_add
@ -2600,10 +2685,13 @@ class Mar7th(BaseAvatar):
0.24, 0.24,
320, 320,
) )
skill_info_list.append({'name': '开场护盾(2命)', 'damagelist': damagelist5}) skill_info_list.append(
{'name': '开场护盾(2命)', 'damagelist': damagelist5}
)
return skill_info_list return skill_info_list
class AvatarDamage: class AvatarDamage:
@classmethod @classmethod
def create( def create(

View File

@ -1,16 +1,18 @@
from typing import Dict
import copy import copy
from typing import Dict
from gsuid_core.logger import logger from gsuid_core.logger import logger
from .utils import merge_attribute from .utils import merge_attribute
async def calculate_heal( async def calculate_heal(
base_attr: Dict[str, float], base_attr: Dict[str, float],
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
skill_type: str, skill_type: str,
skill_multiplier: float, skill_multiplier: float,
skill_num: float, skill_num: float,
is_atk = 0, is_atk=0,
): ):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
merged_attr = await merge_attribute(base_attr, add_attr_bonus) merged_attr = await merge_attribute(base_attr, add_attr_bonus)
@ -29,19 +31,17 @@ async def calculate_heal(
heal_ratio = heal_ratio_base + 1 heal_ratio = heal_ratio_base + 1
logger.info(f'治疗量加成: {heal_ratio}') logger.info(f'治疗量加成: {heal_ratio}')
heal_num = ( heal_num = (hp * skill_multiplier + skill_num) * heal_ratio
hp * skill_multiplier + skill_num
) * heal_ratio return [heal_num]
skill_info_list = [heal_num]
return skill_info_list
async def calculate_shield( async def calculate_shield(
base_attr: Dict[str, float], base_attr: Dict[str, float],
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
skill_multiplier: float, skill_multiplier: float,
skill_num: float, skill_num: float,
is_atk = 0, is_atk=0,
): ):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
merged_attr = await merge_attribute(base_attr, add_attr_bonus) merged_attr = await merge_attribute(base_attr, add_attr_bonus)
@ -57,12 +57,10 @@ async def calculate_shield(
shield_added = shield_added_ratio + 1 shield_added = shield_added_ratio + 1
logger.info(f'护盾加成: {shield_added}') logger.info(f'护盾加成: {shield_added}')
defence_num = ( defence_num = (defence * skill_multiplier + skill_num) * shield_added
defence * skill_multiplier + skill_num
) * shield_added return [defence_num]
skill_info_list = [defence_num]
return skill_info_list
async def calculate_damage( async def calculate_damage(
base_attr: Dict[str, float], base_attr: Dict[str, float],
@ -72,7 +70,7 @@ async def calculate_damage(
element: str, element: str,
skill_multiplier: float, skill_multiplier: float,
level: int, level: int,
is_hp = 0, is_hp=0,
): ):
logger.info(f'Skill Multiplier: {skill_multiplier}') logger.info(f'Skill Multiplier: {skill_multiplier}')
logger.info(f'Skill Type: {skill_type}') logger.info(f'Skill Type: {skill_type}')

View File

@ -1,9 +1,9 @@
import json import json
from pathlib import Path
from typing import Dict from typing import Dict
from pathlib import Path
from ..Base.model import DamageInstanceWeapon
from ..Base.WeaponBase import BaseWeapon from ..Base.WeaponBase import BaseWeapon
from ..Base.model import DamageInstanceWeapon
path = Path(__file__).parent.parent path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f: with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f:
@ -1747,6 +1747,7 @@ class WorrisomeBlissf(BaseWeapon):
) )
return attribute_bonus return attribute_bonus
# 片刻,留在眼底 # 片刻,留在眼底
class AnInstanceBeforeAGaze(BaseWeapon): class AnInstanceBeforeAGaze(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1777,6 +1778,7 @@ class AnInstanceBeforeAGaze(BaseWeapon):
) )
return attribute_bonus return attribute_bonus
# 时节不居 # 时节不居
class TimeWaitsforNoOne(BaseWeapon): class TimeWaitsforNoOne(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1796,6 +1798,7 @@ class TimeWaitsforNoOne(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 棺的回响 # 棺的回响
class EchoesoftheCoffin(BaseWeapon): class EchoesoftheCoffin(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1815,16 +1818,12 @@ class EchoesoftheCoffin(BaseWeapon):
): ):
if await self.check(): if await self.check():
speed_delta = attribute_bonus.get('SpeedDelta', 0) speed_delta = attribute_bonus.get('SpeedDelta', 0)
attribute_bonus['SpeedDelta'] = ( attribute_bonus['SpeedDelta'] = speed_delta + (
speed_delta weapon_effect['23008']['Param']['speed'][self.weapon_rank - 1]
+ (
weapon_effect['23008']['Param']['speed'][
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 惊魂夜 # 惊魂夜
class NightofFright(BaseWeapon): class NightofFright(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1855,6 +1854,7 @@ class NightofFright(BaseWeapon):
) )
return attribute_bonus return attribute_bonus
# 一场术后对话 # 一场术后对话
class PostOpConversation(BaseWeapon): class PostOpConversation(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1874,16 +1874,14 @@ class PostOpConversation(BaseWeapon):
): ):
if await self.check(): if await self.check():
Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0) Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0)
attribute_bonus['Ultra_HealRatioBase'] = ( attribute_bonus['Ultra_HealRatioBase'] = Ultra_HealRatioBase + (
Ultra_HealRatioBase weapon_effect['21000']['Param']['Ultra_HealRatioBase'][
+ ( self.weapon_rank - 1
weapon_effect['21000']['Param']['Ultra_HealRatioBase'][ ]
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 同一种心情 # 同一种心情
class SharedFeeling(BaseWeapon): class SharedFeeling(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1903,6 +1901,7 @@ class SharedFeeling(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 此时恰好 # 此时恰好
class PerfectTiming(BaseWeapon): class PerfectTiming(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1922,12 +1921,22 @@ class PerfectTiming(BaseWeapon):
): ):
if await self.check(): if await self.check():
StatusResistance = attribute_bonus.get('StatusResistance', 0) StatusResistance = attribute_bonus.get('StatusResistance', 0)
HealRatioBase_maxadd = weapon_effect['21000']['Param']['HealRatioBase'][self.weapon_rank - 1] HealRatioBase_maxadd = weapon_effect['21000']['Param'][
HealRatioBaseadd = StatusResistance * weapon_effect['21000']['Param']['StatusResistance'][self.weapon_rank - 1] 'HealRatioBase'
][self.weapon_rank - 1]
HealRatioBaseadd = (
StatusResistance
* weapon_effect['21000']['Param']['StatusResistance'][
self.weapon_rank - 1
]
)
HealRatioBase = attribute_bonus.get('HealRatioBase', 0) HealRatioBase = attribute_bonus.get('HealRatioBase', 0)
attribute_bonus['HealRatioBase'] = HealRatioBase + min(HealRatioBaseadd, HealRatioBase_maxadd) attribute_bonus['HealRatioBase'] = HealRatioBase + min(
HealRatioBaseadd, HealRatioBase_maxadd
)
return attribute_bonus return attribute_bonus
# 等价交换 # 等价交换
class QuidProQuo(BaseWeapon): class QuidProQuo(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1947,6 +1956,7 @@ class QuidProQuo(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 暖夜不会漫长 # 暖夜不会漫长
class WarmthShortensColdNights(BaseWeapon): class WarmthShortensColdNights(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1966,6 +1976,7 @@ class WarmthShortensColdNights(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 嘿,我在这儿 # 嘿,我在这儿
class HeyOverHere(BaseWeapon): class HeyOverHere(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -1985,16 +1996,14 @@ class HeyOverHere(BaseWeapon):
): ):
if await self.check(): if await self.check():
HealRatioBase = attribute_bonus.get('HealRatioBase', 0) HealRatioBase = attribute_bonus.get('HealRatioBase', 0)
attribute_bonus['HealRatioBase'] = ( attribute_bonus['HealRatioBase'] = HealRatioBase + (
HealRatioBase weapon_effect['22001']['Param']['HealRatioBase'][
+ ( self.weapon_rank - 1
weapon_effect['22001']['Param']['HealRatioBase'][ ]
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 物穰 # 物穰
class Cornucopia(BaseWeapon): class Cornucopia(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2014,25 +2023,24 @@ class Cornucopia(BaseWeapon):
): ):
if await self.check(): if await self.check():
Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0) Ultra_HealRatioBase = attribute_bonus.get('Ultra_HealRatioBase', 0)
attribute_bonus['Ultra_HealRatioBase'] = ( attribute_bonus['Ultra_HealRatioBase'] = Ultra_HealRatioBase + (
Ultra_HealRatioBase weapon_effect['20001']['Param']['HealRatioBase'][
+ ( self.weapon_rank - 1
weapon_effect['20001']['Param']['HealRatioBase'][ ]
self.weapon_rank - 1
]
)
) )
BPSkill_HealRatioBase = attribute_bonus.get('BPSkill_HealRatioBase', 0) BPSkill_HealRatioBase = attribute_bonus.get(
attribute_bonus['BPSkill_HealRatioBase'] = ( 'BPSkill_HealRatioBase', 0
BPSkill_HealRatioBase )
+ ( attribute_bonus[
weapon_effect['20001']['Param']['HealRatioBase'][ 'BPSkill_HealRatioBase'
self.weapon_rank - 1 ] = BPSkill_HealRatioBase + (
] weapon_effect['20001']['Param']['HealRatioBase'][
) self.weapon_rank - 1
]
) )
return attribute_bonus return attribute_bonus
# 嘉果 # 嘉果
class FineFruit(BaseWeapon): class FineFruit(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2052,6 +2060,7 @@ class FineFruit(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 蕃息 # 蕃息
class Multiplication(BaseWeapon): class Multiplication(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2071,6 +2080,7 @@ class Multiplication(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 但战斗还未结束 # 但战斗还未结束
class ButtheBattleIsnotOver(BaseWeapon): class ButtheBattleIsnotOver(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2090,6 +2100,7 @@ class ButtheBattleIsnotOver(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 记忆中的模样 # 记忆中的模样
class MemoriesofthePast(BaseWeapon): class MemoriesofthePast(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2109,6 +2120,7 @@ class MemoriesofthePast(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 与行星相会 # 与行星相会
class PlanetaryRendezvous(BaseWeapon): class PlanetaryRendezvous(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2127,16 +2139,14 @@ class PlanetaryRendezvous(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0) all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0)
attribute_bonus['AllDamageAddedRatio'] = ( attribute_bonus['AllDamageAddedRatio'] = all_damage_added_ratio + (
all_damage_added_ratio weapon_effect['21011']['Param']['AllDamageAddedRatio'][
+ ( self.weapon_rank - 1
weapon_effect['21011']['Param']['AllDamageAddedRatio'][ ]
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 舞!舞!舞! # 舞!舞!舞!
class DanceDanceDance(BaseWeapon): class DanceDanceDance(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2156,6 +2166,7 @@ class DanceDanceDance(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 过往未来 # 过往未来
class PastandFuture(BaseWeapon): class PastandFuture(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2175,6 +2186,7 @@ class PastandFuture(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 镂月裁云之意 # 镂月裁云之意
class CarvetheMoonWeavetheClouds(BaseWeapon): class CarvetheMoonWeavetheClouds(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2196,16 +2208,14 @@ class CarvetheMoonWeavetheClouds(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0) AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0)
attribute_bonus['AttackAddedRatio'] = ( attribute_bonus['AttackAddedRatio'] = AttackAddedRatio + (
AttackAddedRatio weapon_effect['21032']['Param']['AttackAddedRatio'][
+ ( self.weapon_rank - 1
weapon_effect['21032']['Param']['AttackAddedRatio'][ ]
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 齐颂 # 齐颂
class Chorus(BaseWeapon): class Chorus(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2224,16 +2234,14 @@ class Chorus(BaseWeapon):
attribute_bonus: Dict[str, float], attribute_bonus: Dict[str, float],
): ):
AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0) AttackAddedRatio = attribute_bonus.get('AttackAddedRatio', 0)
attribute_bonus['AttackAddedRatio'] = ( attribute_bonus['AttackAddedRatio'] = AttackAddedRatio + (
AttackAddedRatio weapon_effect['20005']['Param']['AttackAddedRatio'][
+ ( self.weapon_rank - 1
weapon_effect['20005']['Param']['AttackAddedRatio'][ ]
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
# 轮契 # 轮契
class MeshingCogs(BaseWeapon): class MeshingCogs(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2253,6 +2261,7 @@ class MeshingCogs(BaseWeapon):
): ):
return attribute_bonus return attribute_bonus
# 调和 # 调和
class Mediation(BaseWeapon): class Mediation(BaseWeapon):
weapon_base_attributes: Dict weapon_base_attributes: Dict
@ -2272,16 +2281,12 @@ class Mediation(BaseWeapon):
): ):
if await self.check(): if await self.check():
speed_delta = attribute_bonus.get('SpeedDelta', 0) speed_delta = attribute_bonus.get('SpeedDelta', 0)
attribute_bonus['SpeedDelta'] = ( attribute_bonus['SpeedDelta'] = speed_delta + (
speed_delta weapon_effect['20019']['Param']['speed'][self.weapon_rank - 1]
+ (
weapon_effect['20019']['Param']['speed'][
self.weapon_rank - 1
]
)
) )
return attribute_bonus return attribute_bonus
class Weapon: class Weapon:
@classmethod @classmethod
def create(cls, weapon: DamageInstanceWeapon): def create(cls, weapon: DamageInstanceWeapon):

View File

@ -5,14 +5,29 @@ import textwrap
from pathlib import Path from pathlib import Path
from typing import Dict, Union from typing import Dict, Union
from PIL import Image, ImageDraw
from gsuid_core.logger import logger from gsuid_core.logger import logger
from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.convert import convert_img
from gsuid_core.utils.image.image_tools import draw_text_by_line from gsuid_core.utils.image.image_tools import draw_text_by_line
from PIL import Image, ImageDraw
from .to_data import api_to_dict
from ..utils.error_reply import CHAR_HINT from ..utils.error_reply import CHAR_HINT
from ..utils.excel.read_excel import light_cone_ranks from .cal_damage import cal_info, cal_char_info
from ..utils.fonts.first_world import fw_font_28 from ..utils.fonts.first_world import fw_font_28
from ..utils.excel.read_excel import light_cone_ranks
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name
from ..utils.map.SR_MAP_PATH import (
RelicId2Rarity,
AvatarRelicScore,
avatarId2Name,
)
from ..utils.resource.RESOURCE_PATH import (
RELIC_PATH,
SKILL_PATH,
PLAYER_PATH,
WEAPON_PATH,
CHAR_PORTRAIT_PATH,
)
from ..utils.fonts.starrail_fonts import ( from ..utils.fonts.starrail_fonts import (
sr_font_18, sr_font_18,
sr_font_20, sr_font_20,
@ -23,21 +38,6 @@ from ..utils.fonts.starrail_fonts import (
sr_font_34, sr_font_34,
sr_font_38, sr_font_38,
) )
from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id
from ..utils.map.SR_MAP_PATH import (
AvatarRelicScore,
RelicId2Rarity,
avatarId2Name,
)
from ..utils.resource.RESOURCE_PATH import (
CHAR_PORTRAIT_PATH,
PLAYER_PATH,
RELIC_PATH,
SKILL_PATH,
WEAPON_PATH,
)
from .cal_damage import cal_char_info, cal_info
from .to_data import api_to_dict
Excel_path = Path(__file__).parent / 'damage' Excel_path = Path(__file__).parent / 'damage'
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:
@ -300,9 +300,11 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
rank_bg = Image.open(TEXT_PATH / 'mz_bg.png') rank_bg = Image.open(TEXT_PATH / 'mz_bg.png')
rank_no_bg = Image.open(TEXT_PATH / 'mz_no_bg.png') rank_no_bg = Image.open(TEXT_PATH / 'mz_no_bg.png')
if rank < char.char_rank: if rank < char.char_rank:
rank_img = Image.open( rank_img = (
SKILL_PATH / f'{char.char_id}{RANK_MAP[rank + 1]}' Image.open(SKILL_PATH / f'{char.char_id}{RANK_MAP[rank + 1]}')
).convert('RGBA').resize((50, 50)) .convert('RGBA')
.resize((50, 50))
)
rank_bg.paste(rank_img, (19, 19), rank_img) rank_bg.paste(rank_img, (19, 19), rank_img)
char_info.paste(rank_bg, (20 + rank * 80, 630), rank_bg) char_info.paste(rank_bg, (20 + rank * 80, 630), rank_bg)
else: else:
@ -325,10 +327,14 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
for skill in char.char_skill: for skill in char.char_skill:
skill_attr_img = Image.open(TEXT_PATH / f'skill_attr{i + 1}.png') skill_attr_img = Image.open(TEXT_PATH / f'skill_attr{i + 1}.png')
skill_panel_img = Image.open(TEXT_PATH / 'skill_panel.png') skill_panel_img = Image.open(TEXT_PATH / 'skill_panel.png')
skill_img = Image.open( skill_img = (
SKILL_PATH / f'{char.char_id}_' Image.open(
f'{skill_type_map[skill["skillAttackType"]][1]}.png' SKILL_PATH / f'{char.char_id}_'
).convert('RGBA').resize((55, 55)) f'{skill_type_map[skill["skillAttackType"]][1]}.png'
)
.convert('RGBA')
.resize((55, 55))
)
skill_panel_img.paste(skill_img, (18, 15), skill_img) skill_panel_img.paste(skill_img, (18, 15), skill_img)
skill_panel_img.paste(skill_attr_img, (80, 10), skill_attr_img) skill_panel_img.paste(skill_attr_img, (80, 10), skill_attr_img)
skill_panel_img_draw = ImageDraw.Draw(skill_panel_img) skill_panel_img_draw = ImageDraw.Draw(skill_panel_img)
@ -781,7 +787,15 @@ async def get_relic_score(
if weight_dict == {}: if weight_dict == {}:
return 0 return 0
if is_main: if is_main:
elementlist = ['Quantum', 'Thunder', 'Wind', 'Physical', 'Imaginary', 'Ice', 'Fire'] elementlist = [
'Quantum',
'Thunder',
'Wind',
'Physical',
'Imaginary',
'Ice',
'Fire',
]
if relicType in [3, 4, 5, 6]: if relicType in [3, 4, 5, 6]:
if subProperty.__contains__('AddedRatio') and relicType == 5: if subProperty.__contains__('AddedRatio') and relicType == 5:
if subProperty.split('AddedRatio')[0] in elementlist: if subProperty.split('AddedRatio')[0] in elementlist: