mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-05 19:23:45 +08:00
伤害计算重构
This commit is contained in:
parent
42f82956ec
commit
99fd1d2cbb
@ -7,7 +7,7 @@ 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 .cal_damage import cal, 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
|
||||||
@ -40,10 +40,10 @@ async def send_damage_msg(bot: Bot, ev: Event):
|
|||||||
if isinstance(char_data, str):
|
if isinstance(char_data, str):
|
||||||
return await bot.send(char_data)
|
return await bot.send(char_data)
|
||||||
im_list = []
|
im_list = []
|
||||||
im = await cal_info(char_data)
|
im = await cal(char_data)
|
||||||
for info_im in im:
|
for info_im in im:
|
||||||
con = f"{info_im['name']}"
|
con = f"{info_im[0]}"
|
||||||
con = f"{con} 暴击伤害{info_im['damagelist'][0]} 期望伤害{info_im['damagelist'][1]} 满配辅助末日兽伤害{info_im['damagelist'][2]}"
|
con = f"{con} 暴击伤害{info_im[1]} 期望伤害{info_im[2]} 满配辅助末日兽伤害{info_im[3]}"
|
||||||
im_list.append(con)
|
im_list.append(con)
|
||||||
await bot.send(im_list)
|
await bot.send(im_list)
|
||||||
return None
|
return None
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -316,7 +316,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"1208": {
|
"1208": {
|
||||||
"Normal": [0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
"Normal_HP": [
|
"Normal_HP": [
|
||||||
0.2500000004656613, 0.3000000005587935, 0.3500000006519258,
|
0.2500000004656613, 0.3000000005587935, 0.3500000006519258,
|
||||||
0.4000000007450581, 0.4500000008381903, 0.5000000000931323,
|
0.4000000007450581, 0.4500000008381903, 0.5000000000931323,
|
||||||
@ -336,7 +335,6 @@
|
|||||||
0.120000000372529, 0.126000000372529, 0.132000000372529,
|
0.120000000372529, 0.126000000372529, 0.132000000372529,
|
||||||
0.138000000372529, 0.144000000372529, 0.150000000372529
|
0.138000000372529, 0.144000000372529, 0.150000000372529
|
||||||
],
|
],
|
||||||
"Ultra": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
"Ultra_HP": [
|
"Ultra_HP": [
|
||||||
0.600000000372529, 0.640000000372529, 0.680000000372529,
|
0.600000000372529, 0.640000000372529, 0.680000000372529,
|
||||||
0.720000000372529, 0.760000000372529, 0.800000000372529,
|
0.720000000372529, 0.760000000372529, 0.800000000372529,
|
||||||
@ -344,13 +342,6 @@
|
|||||||
1.000000000372529, 1.040000000372529, 1.080000000372529,
|
1.000000000372529, 1.040000000372529, 1.080000000372529,
|
||||||
1.120000000372529, 1.160000000372529, 1.200000000372529
|
1.120000000372529, 1.160000000372529, 1.200000000372529
|
||||||
],
|
],
|
||||||
"Talent": [
|
|
||||||
0.220000000372529, 0.242000000372529, 0.264000000372529,
|
|
||||||
0.286000000372529, 0.308000000372529, 0.330000000372529,
|
|
||||||
0.357500000372529, 0.385000000372529, 0.412500000372529,
|
|
||||||
0.440000000372529, 0.462000000372529, 0.484000000372529,
|
|
||||||
0.506000000372529, 0.528000000372529, 0.550000000372529
|
|
||||||
],
|
|
||||||
"Maze": [20],
|
"Maze": [20],
|
||||||
"Ultra_Use": [135],
|
"Ultra_Use": [135],
|
||||||
"skillList": {
|
"skillList": {
|
||||||
@ -573,7 +564,7 @@
|
|||||||
"BPSkill1": [
|
"BPSkill1": [
|
||||||
1.2500000005122274, 1.3750000006705523, 1.500000000828877,
|
1.2500000005122274, 1.3750000006705523, 1.500000000828877,
|
||||||
1.625000000558794, 1.750000000214204, 1.875000000372529,
|
1.625000000558794, 1.750000000214204, 1.875000000372529,
|
||||||
0.031250000745058, 2.187500000419095, 2.343750000860302,
|
2.031250000745058, 2.187500000419095, 2.343750000860302,
|
||||||
2.500000000232831, 2.6250000003911555, 2.75000000054948,
|
2.500000000232831, 2.6250000003911555, 2.75000000054948,
|
||||||
2.875000000707805, 3.00000000086613, 3.12500000093132
|
2.875000000707805, 3.00000000086613, 3.12500000093132
|
||||||
],
|
],
|
||||||
@ -613,7 +604,7 @@
|
|||||||
0.8000000007450581, 0.9000000008381903, 1.0000000000931323,
|
0.8000000007450581, 0.9000000008381903, 1.0000000000931323,
|
||||||
1.1000000001862645, 1.2000000002793968, 1.3000000002793968
|
1.1000000001862645, 1.2000000002793968, 1.3000000002793968
|
||||||
],
|
],
|
||||||
"BPSkill": [
|
"Talent": [
|
||||||
0.7500000005122274, 0.8250000006705523, 0.900000000828877,
|
0.7500000005122274, 0.8250000006705523, 0.900000000828877,
|
||||||
0.975000000558794, 1.050000000214204, 1.125000000372529,
|
0.975000000558794, 1.050000000214204, 1.125000000372529,
|
||||||
1.218750000745058, 1.312500000419095, 1.406250000860302,
|
1.218750000745058, 1.312500000419095, 1.406250000860302,
|
||||||
@ -643,6 +634,55 @@
|
|||||||
],
|
],
|
||||||
"Maze": [20],
|
"Maze": [20],
|
||||||
"Ultra_Use": [140],
|
"Ultra_Use": [140],
|
||||||
|
"skillList": {
|
||||||
|
"Normal": ["attack", "普攻", 1, "Talent", "Normal"],
|
||||||
|
"Talent": ["attack", "账账", 1, "Talent", "Talent"],
|
||||||
|
"Talent1": ["attack", "强化账账", 1, "Talent", "Talent"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"1302": {
|
||||||
|
"Normal": [
|
||||||
|
0.5000000004656613, 0.6000000005587935, 0.7000000006519258,
|
||||||
|
0.8000000007450581, 0.9000000008381903, 1.0000000000931323,
|
||||||
|
1.1000000001862645, 1.2000000002793968, 1.3000000002793968
|
||||||
|
],
|
||||||
|
"BPSkill": [
|
||||||
|
0.5500000005122274, 0.6050000002142042, 0.6600000006146729,
|
||||||
|
0.7150000003166497, 0.7700000007171184, 0.8250000004190952,
|
||||||
|
0.89375000144355, 0.962500001071021, 1.0312500004656613,
|
||||||
|
1.1000000000931323, 1.154999999795109, 1.2100000001955777,
|
||||||
|
1.2649999998975545, 1.3200000002980232, 1.375
|
||||||
|
],
|
||||||
|
"Ultra": [
|
||||||
|
1.0200000000186265, 1.0879999995231628, 1.1559999997261912,
|
||||||
|
1.2239999999292195, 1.2920000001322478, 1.3600000003352761,
|
||||||
|
1.4450000000651926, 1.530000000493601, 1.6150000002235174,
|
||||||
|
1.7000000006519258, 1.7680000001564622, 1.8360000003594905,
|
||||||
|
1.9040000005625188, 1.9720000007655472, 2.040000000037253
|
||||||
|
],
|
||||||
|
"Ultra1": [
|
||||||
|
1.6800000006332994, 1.792000000597909, 1.9040000005625188,
|
||||||
|
2.015999999595806, 2.1279999995604157, 2.2400000002235174,
|
||||||
|
2.3800000003539026, 2.5200000004842877, 2.660000000614673,
|
||||||
|
2.800000000745058, 2.912000000709668, 3.023999999742955,
|
||||||
|
3.1359999997075647, 3.2479999996721745, 3.360000000335276
|
||||||
|
],
|
||||||
|
"Ultra_add": [
|
||||||
|
0.5700000005308539, 0.6080000000074506, 0.6460000001825392,
|
||||||
|
0.6840000003576279, 0.7220000005327165, 0.7600000007078052,
|
||||||
|
0.80750000057742, 0.8550000004470348, 0.9025000010151416,
|
||||||
|
0.9500000008847564, 0.9880000003613532, 1.0259999996051192,
|
||||||
|
1.0639999997802079, 1.1019999999552965, 1.1400000001303852
|
||||||
|
],
|
||||||
|
"Talent": [
|
||||||
|
0.010000000009313226, 0.011500000255182385, 0.012999999802559614,
|
||||||
|
0.014500000048428774, 0.015999999595806003, 0.017499999841675162,
|
||||||
|
0.019375000149011612, 0.02125000045634806, 0.02312500006519258,
|
||||||
|
0.0249999996740371, 0.02649999991990626, 0.027999999467283487,
|
||||||
|
0.029499999713152647, 0.030999999959021807, 0.032500000204890966
|
||||||
|
],
|
||||||
|
"Maze": [20],
|
||||||
|
"Ultra_Use": [180],
|
||||||
"skillList": {
|
"skillList": {
|
||||||
"Normal": ["attack", "普攻", 1, "Talent", "Normal"],
|
"Normal": ["attack", "普攻", 1, "Talent", "Normal"],
|
||||||
"BPSkill": ["attack", "账账", 1, "Talent", "BPSkill"],
|
"BPSkill": ["attack", "账账", 1, "Talent", "BPSkill"],
|
||||||
|
@ -91,6 +91,14 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"23018": {
|
||||||
|
"Param": {
|
||||||
|
"r_dmg": [
|
||||||
|
0.0036000001709908247, 0.00419999985024333, 0.004800000227987766,
|
||||||
|
0.005399999907240272, 0.005999999586492777
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"20002": {
|
"20002": {
|
||||||
"Param": {
|
"Param": {
|
||||||
"a_dmg": [
|
"a_dmg": [
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
import copy
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from .utils import merge_attribute
|
from .utils import merge_attribute
|
||||||
@ -13,20 +13,25 @@ async def calculate_damage(
|
|||||||
element: str,
|
element: str,
|
||||||
skill_multiplier: float,
|
skill_multiplier: float,
|
||||||
level: int,
|
level: int,
|
||||||
|
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}')
|
||||||
logger.info(f'Level: {level}')
|
logger.info(f'Level: {level}')
|
||||||
# logger.info(f'attribute_bonus: {attribute_bonus}')
|
# logger.info(f'attribute_bonus: {attribute_bonus}')
|
||||||
|
|
||||||
attribute_bonus = apply_attribute_bonus(
|
add_attr_bonus = copy.deepcopy(attribute_bonus)
|
||||||
attribute_bonus, skill_type, add_skill_type
|
|
||||||
|
add_attr_bonus = apply_attribute_bonus(
|
||||||
|
add_attr_bonus, skill_type, add_skill_type
|
||||||
)
|
)
|
||||||
|
|
||||||
merged_attr = await merge_attribute(base_attr, attribute_bonus)
|
merged_attr = await merge_attribute(base_attr, add_attr_bonus)
|
||||||
# logger.info(f'merged_attr: {merged_attr}')
|
# logger.info(f'merged_attr: {merged_attr}')
|
||||||
|
if is_hp == 1:
|
||||||
attack = merged_attr.get('attack', 0)
|
attack = merged_attr.get('hp', 0)
|
||||||
|
else:
|
||||||
|
attack = merged_attr.get('attack', 0)
|
||||||
logger.info(f'Attack: {attack}')
|
logger.info(f'Attack: {attack}')
|
||||||
|
|
||||||
damage_reduction = calculate_damage_reduction(level)
|
damage_reduction = calculate_damage_reduction(level)
|
||||||
@ -110,21 +115,21 @@ async def calculate_damage(
|
|||||||
|
|
||||||
|
|
||||||
def apply_attribute_bonus(
|
def apply_attribute_bonus(
|
||||||
attribute_bonus: Dict[str, float],
|
add_attr_bonus: Dict[str, float],
|
||||||
skill_type: str,
|
skill_type: str,
|
||||||
add_skill_type: str,
|
add_skill_type: str,
|
||||||
):
|
):
|
||||||
# Apply attribute bonuses to attack and status probability
|
# Apply attribute bonuses to attack and status probability
|
||||||
for attr in attribute_bonus:
|
for attr in add_attr_bonus:
|
||||||
if 'AttackAddedRatio' in attr and attr.split('AttackAddedRatio')[
|
if 'AttackAddedRatio' in attr and attr.split('AttackAddedRatio')[
|
||||||
0
|
0
|
||||||
] in (skill_type, add_skill_type):
|
] in (skill_type, add_skill_type):
|
||||||
attribute_bonus['AttackAddedRatio'] += attribute_bonus[attr]
|
add_attr_bonus['AttackAddedRatio'] += add_attr_bonus[attr]
|
||||||
if 'StatusProbabilityBase' in attr and attr.split(
|
if 'StatusProbabilityBase' in attr and attr.split(
|
||||||
'StatusProbabilityBase'
|
'StatusProbabilityBase'
|
||||||
)[0] in (skill_type, add_skill_type):
|
)[0] in (skill_type, add_skill_type):
|
||||||
attribute_bonus['StatusProbabilityBase'] += attribute_bonus[attr]
|
add_attr_bonus['StatusProbabilityBase'] += add_attr_bonus[attr]
|
||||||
return attribute_bonus
|
return add_attr_bonus
|
||||||
|
|
||||||
|
|
||||||
def calculate_damage_reduction(level: int):
|
def calculate_damage_reduction(level: int):
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import json
|
import json
|
||||||
from typing import Dict
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
from ..Base.WeaponBase import BaseWeapon
|
|
||||||
from ..Base.model import DamageInstanceWeapon
|
from ..Base.model import DamageInstanceWeapon
|
||||||
|
from ..Base.WeaponBase import BaseWeapon
|
||||||
|
|
||||||
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:
|
||||||
@ -1668,10 +1668,10 @@ class Thisbodyisasword(BaseWeapon):
|
|||||||
)
|
)
|
||||||
|
|
||||||
resistance_penetration = attribute_bonus.get(
|
resistance_penetration = attribute_bonus.get(
|
||||||
'AllResistancePenetration', 0
|
'AllDamageResistancePenetration', 0
|
||||||
)
|
)
|
||||||
attribute_bonus[
|
attribute_bonus[
|
||||||
'AllResistancePenetration'
|
'AllDamageResistancePenetration'
|
||||||
] = resistance_penetration + (
|
] = resistance_penetration + (
|
||||||
weapon_effect['23014']['Param']['ResistancePenetration'][
|
weapon_effect['23014']['Param']['ResistancePenetration'][
|
||||||
self.weapon_rank - 1
|
self.weapon_rank - 1
|
||||||
@ -1747,11 +1747,41 @@ class WorrisomeBlissf(BaseWeapon):
|
|||||||
)
|
)
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
# 片刻,留在眼底
|
||||||
|
class AnInstanceBeforeAGaze(BaseWeapon):
|
||||||
|
weapon_base_attributes: Dict
|
||||||
|
|
||||||
|
def __init__(self, weapon: DamageInstanceWeapon):
|
||||||
|
super().__init__(weapon)
|
||||||
|
|
||||||
|
async def check(self):
|
||||||
|
# 当装备者施放终结技时,根据装备者的能量上限,提高装备者终结技造成的伤害:每点能量提高0.36%,最多计入180点。
|
||||||
|
return True
|
||||||
|
|
||||||
|
async def weapon_ability(
|
||||||
|
self,
|
||||||
|
Ultra_Use: float,
|
||||||
|
base_attr: Dict[str, float],
|
||||||
|
attribute_bonus: Dict[str, float],
|
||||||
|
):
|
||||||
|
if await self.check():
|
||||||
|
critical_chance_base = attribute_bonus.get('UltraDmgAdd', 0)
|
||||||
|
attribute_bonus['UltraDmgAdd'] = (
|
||||||
|
critical_chance_base
|
||||||
|
+ (
|
||||||
|
weapon_effect['23018']['Param']['r_dmg'][
|
||||||
|
self.weapon_rank - 1
|
||||||
|
]
|
||||||
|
)
|
||||||
|
* Ultra_Use
|
||||||
|
)
|
||||||
|
return attribute_bonus
|
||||||
|
|
||||||
class Weapon:
|
class Weapon:
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, weapon: DamageInstanceWeapon):
|
def create(cls, weapon: DamageInstanceWeapon):
|
||||||
if weapon.id_ in [
|
if weapon.id_ in [
|
||||||
|
23018,
|
||||||
23011,
|
23011,
|
||||||
23007,
|
23007,
|
||||||
21005,
|
21005,
|
||||||
@ -1812,6 +1842,8 @@ class Weapon:
|
|||||||
23014,
|
23014,
|
||||||
23016,
|
23016,
|
||||||
]:
|
]:
|
||||||
|
if weapon.id_ == 23018:
|
||||||
|
return AnInstanceBeforeAGaze(weapon)
|
||||||
if weapon.id_ == 23016:
|
if weapon.id_ == 23016:
|
||||||
return WorrisomeBlissf(weapon)
|
return WorrisomeBlissf(weapon)
|
||||||
if weapon.id_ == 23012:
|
if weapon.id_ == 23012:
|
||||||
|
@ -37,3 +37,38 @@ async def merge_attribute(
|
|||||||
logger.info(f'未知的属性加成: {attribute}, 采用覆盖模式')
|
logger.info(f'未知的属性加成: {attribute}, 采用覆盖模式')
|
||||||
merged_attr[attribute] = attribute_bonus[attribute]
|
merged_attr[attribute] = attribute_bonus[attribute]
|
||||||
return merged_attr
|
return merged_attr
|
||||||
|
|
||||||
|
def merge_attribute_dam(
|
||||||
|
base_attr: Dict[str, float], attribute_bonus: Dict[str, float]
|
||||||
|
) -> Dict[str, float]:
|
||||||
|
merged_attr = base_attr.copy()
|
||||||
|
for attribute, value in attribute_bonus.items():
|
||||||
|
if attribute.endswith('Delta'):
|
||||||
|
attr = attribute.split('Delta')[0].lower()
|
||||||
|
if attr in merged_attr:
|
||||||
|
merged_attr[attr] += value
|
||||||
|
else:
|
||||||
|
merged_attr[attribute] = attribute_bonus[attribute]
|
||||||
|
elif attribute.endswith('AddedRatio'):
|
||||||
|
attr = attribute.split('AddedRatio')[0].lower()
|
||||||
|
if attr in merged_attr:
|
||||||
|
merged_attr[attr] += base_attr[attr] * value
|
||||||
|
else:
|
||||||
|
merged_attr[attribute] = attribute_bonus[attribute]
|
||||||
|
elif attribute in [
|
||||||
|
'ignore_defence',
|
||||||
|
'Atk_buff',
|
||||||
|
'Normal_buff',
|
||||||
|
'shield_added_ratio',
|
||||||
|
]:
|
||||||
|
merged_attr[attribute] = base_attr.get(attribute, 0) + value
|
||||||
|
elif attribute.endswith(
|
||||||
|
('ResistancePenetration', 'DmgAdd', 'DmgRatio')
|
||||||
|
):
|
||||||
|
merged_attr[attribute] = base_attr.get(attribute, 0) + value
|
||||||
|
elif attribute.endswith('Base'):
|
||||||
|
merged_attr[attribute] = base_attr.get(attribute, 0) + value
|
||||||
|
else:
|
||||||
|
logger.info(f'未知的属性加成: {attribute}, 采用覆盖模式')
|
||||||
|
merged_attr[attribute] = attribute_bonus[attribute]
|
||||||
|
return merged_attr
|
@ -3,7 +3,7 @@ import math
|
|||||||
import textwrap
|
import textwrap
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
import copy
|
||||||
from PIL import Image, ImageDraw
|
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
|
||||||
@ -11,7 +11,7 @@ from gsuid_core.utils.image.image_tools import draw_text_by_line
|
|||||||
|
|
||||||
from .to_data import api_to_dict
|
from .to_data import api_to_dict
|
||||||
from ..utils.error_reply import CHAR_HINT
|
from ..utils.error_reply import CHAR_HINT
|
||||||
from .cal_damage import cal, cal_char_info
|
from .cal_damage import cal, cal_char_info, cal_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.excel.read_excel import light_cone_ranks
|
||||||
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name
|
from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name
|
||||||
@ -38,7 +38,7 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_38,
|
sr_font_38,
|
||||||
)
|
)
|
||||||
|
|
||||||
Excel_path = Path(__file__).parent / 'effect'
|
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:
|
||||||
skill_dict = json.load(f)
|
skill_dict = json.load(f)
|
||||||
|
|
||||||
@ -100,8 +100,9 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
char = await cal_char_info(char_data)
|
char = await cal_char_info(char_data)
|
||||||
damage_len = 0
|
damage_len = 0
|
||||||
if str(char.char_id) in skill_dict:
|
if str(char.char_id) in skill_dict:
|
||||||
skill_list = skill_dict[str(char.char_id)]['skillList']
|
damage_data = copy.deepcopy(char_data)
|
||||||
damage_len = len(skill_list)
|
damage_list = await cal_info(damage_data)
|
||||||
|
damage_len = len(damage_list)
|
||||||
bg_height = 0
|
bg_height = 0
|
||||||
if damage_len > 0:
|
if damage_len > 0:
|
||||||
bg_height = 48 * (1 + damage_len) + 48
|
bg_height = 48 * (1 + damage_len) + 48
|
||||||
@ -360,7 +361,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
weapon_bg = Image.open(TEXT_PATH / 'weapon_bg.png')
|
weapon_bg = Image.open(TEXT_PATH / 'weapon_bg.png')
|
||||||
weapon_id = char.equipment['equipmentID']
|
weapon_id = char.equipment['equipmentID']
|
||||||
weapon_img = Image.open(WEAPON_PATH / f'{weapon_id}.png').resize(
|
weapon_img = Image.open(WEAPON_PATH / f'{weapon_id}.png').resize(
|
||||||
(190, 180)
|
(170, 180)
|
||||||
)
|
)
|
||||||
weapon_bg.paste(weapon_img, (20, 90), weapon_img)
|
weapon_bg.paste(weapon_img, (20, 90), weapon_img)
|
||||||
weapon_bg_draw = ImageDraw.Draw(weapon_bg)
|
weapon_bg_draw = ImageDraw.Draw(weapon_bg)
|
||||||
@ -610,7 +611,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
if damage_len > 0:
|
if damage_len > 0:
|
||||||
damage_title_img = Image.open(TEXT_PATH / 'base_info_pure.png')
|
damage_title_img = Image.open(TEXT_PATH / 'base_info_pure.png')
|
||||||
char_info.paste(damage_title_img, (0, 2028), damage_title_img)
|
char_info.paste(damage_title_img, (0, 2028), damage_title_img)
|
||||||
damage_list = await cal(char_data)
|
# damage_list = await cal(char_data)
|
||||||
# 写伤害
|
# 写伤害
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(55, 2048),
|
(55, 2048),
|
||||||
@ -655,12 +656,12 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
)
|
)
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(55, 2048 + damage_num * 48),
|
(55, 2048 + damage_num * 48),
|
||||||
f'{damage_info[0]}',
|
f'{damage_info["name"]}',
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_26,
|
sr_font_26,
|
||||||
'lm',
|
'lm',
|
||||||
)
|
)
|
||||||
damage1 = math.floor(damage_info[1]) # type: ignore
|
damage1 = math.floor(damage_info['damagelist'][0]) # type: ignore
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(370, 2048 + damage_num * 48),
|
(370, 2048 + damage_num * 48),
|
||||||
f'{damage1}',
|
f'{damage1}',
|
||||||
@ -668,7 +669,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
sr_font_26,
|
sr_font_26,
|
||||||
'lm',
|
'lm',
|
||||||
)
|
)
|
||||||
damage2 = math.floor(damage_info[2]) # type: ignore
|
damage2 = math.floor(damage_info['damagelist'][1]) # type: ignore
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(560, 2048 + damage_num * 48),
|
(560, 2048 + damage_num * 48),
|
||||||
f'{damage2}',
|
f'{damage2}',
|
||||||
@ -676,7 +677,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
|||||||
sr_font_26,
|
sr_font_26,
|
||||||
'lm',
|
'lm',
|
||||||
)
|
)
|
||||||
damage3 = math.floor(damage_info[3]) # type: ignore
|
damage3 = math.floor(damage_info['damagelist'][2]) # type: ignore
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(750, 2048 + damage_num * 48),
|
(750, 2048 + damage_num * 48),
|
||||||
f'{damage3}',
|
f'{damage3}',
|
||||||
|
@ -502,5 +502,41 @@
|
|||||||
"StatusProbabilityBase": 1.0,
|
"StatusProbabilityBase": 1.0,
|
||||||
"StatusResistanceBase": 0.0,
|
"StatusResistanceBase": 0.0,
|
||||||
"AttributeAddedRatio": 1
|
"AttributeAddedRatio": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "托帕&账账",
|
||||||
|
"HPDelta": 0.0,
|
||||||
|
"HPAddedRatio": 0.0,
|
||||||
|
"AttackDelta": 0.75,
|
||||||
|
"AttackAddedRatio": 0.75,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 0.75,
|
||||||
|
"CriticalChanceBase": 1,
|
||||||
|
"CriticalDamageBase": 1,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "银枝",
|
||||||
|
"HPDelta": 0.0,
|
||||||
|
"HPAddedRatio": 0.0,
|
||||||
|
"AttackDelta": 0.75,
|
||||||
|
"AttackAddedRatio": 0.75,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 0.75,
|
||||||
|
"CriticalChanceBase": 1,
|
||||||
|
"CriticalDamageBase": 1,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -113,6 +113,12 @@
|
|||||||
"卢卡",
|
"卢卡",
|
||||||
"铁臂卢卡",
|
"铁臂卢卡",
|
||||||
"熔锤镇的卢卡"
|
"熔锤镇的卢卡"
|
||||||
|
],
|
||||||
|
"1112": [
|
||||||
|
"托帕&账账",
|
||||||
|
"托帕",
|
||||||
|
"账账",
|
||||||
|
"账账启动器"
|
||||||
],
|
],
|
||||||
"1201": [
|
"1201": [
|
||||||
"青雀",
|
"青雀",
|
||||||
@ -160,12 +166,18 @@
|
|||||||
"1211": [
|
"1211": [
|
||||||
"白露",
|
"白露",
|
||||||
"衔药龙女"
|
"衔药龙女"
|
||||||
|
],
|
||||||
|
"1212": [
|
||||||
|
"镜流"
|
||||||
],
|
],
|
||||||
"1213": [
|
"1213": [
|
||||||
"丹恒•饮月",
|
"丹恒•饮月",
|
||||||
"饮月君",
|
"饮月君",
|
||||||
"饮月",
|
"饮月",
|
||||||
"龙丹"
|
"龙丹"
|
||||||
|
],
|
||||||
|
"1302": [
|
||||||
|
"银枝"
|
||||||
],
|
],
|
||||||
"8000": [
|
"8000": [
|
||||||
"开拓者",
|
"开拓者",
|
||||||
@ -417,6 +429,10 @@
|
|||||||
"23007": [
|
"23007": [
|
||||||
"雨一直下"
|
"雨一直下"
|
||||||
],
|
],
|
||||||
|
"23016": [
|
||||||
|
"烦恼着,幸福着",
|
||||||
|
"烦恼着幸福着"
|
||||||
|
],
|
||||||
"23008": [
|
"23008": [
|
||||||
"棺的回响"
|
"棺的回响"
|
||||||
],
|
],
|
||||||
@ -438,6 +454,11 @@
|
|||||||
],
|
],
|
||||||
"23015": [
|
"23015": [
|
||||||
"比阳光更明亮的"
|
"比阳光更明亮的"
|
||||||
|
],
|
||||||
|
"23018": [
|
||||||
|
"片刻,留在眼底",
|
||||||
|
"片刻留在眼底",
|
||||||
|
"留在眼底"
|
||||||
],
|
],
|
||||||
"24000": [
|
"24000": [
|
||||||
"记一位星神的陨落",
|
"记一位星神的陨落",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user