mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-06 11:43:44 +08:00
✨实验性支持评分
This commit is contained in:
parent
0a8c4b9e50
commit
cdc70a4dfe
@ -15,8 +15,13 @@ from .mono.Character import Character
|
|||||||
from ..utils.error_reply import CHAR_HINT
|
from ..utils.error_reply import CHAR_HINT
|
||||||
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.SR_MAP_PATH import RelicId2Rarity, avatarId2Name
|
|
||||||
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
|
||||||
|
from ..utils.map.SR_MAP_PATH import (
|
||||||
|
RelicId2Rarity,
|
||||||
|
AvatarRelicScore,
|
||||||
|
avatarId2Name,
|
||||||
|
avatarId2DamageType,
|
||||||
|
)
|
||||||
from ..utils.resource.RESOURCE_PATH import (
|
from ..utils.resource.RESOURCE_PATH import (
|
||||||
RELIC_PATH,
|
RELIC_PATH,
|
||||||
SKILL_PATH,
|
SKILL_PATH,
|
||||||
@ -61,7 +66,6 @@ skill_type_map = {
|
|||||||
'Maze': ('秘技', 'technique'),
|
'Maze': ('秘技', 'technique'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RELIC_POS = {
|
RELIC_POS = {
|
||||||
'1': (26, 1162),
|
'1': (26, 1162),
|
||||||
'2': (367, 1162),
|
'2': (367, 1162),
|
||||||
@ -265,7 +269,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
|
|||||||
char_info.paste(attr_bg, (475, 300), attr_bg)
|
char_info.paste(attr_bg, (475, 300), attr_bg)
|
||||||
|
|
||||||
# 命座
|
# 命座
|
||||||
for rank in range(0, 6):
|
for rank in range(6):
|
||||||
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:
|
||||||
@ -401,6 +405,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
|
|||||||
relic_score = 0
|
relic_score = 0
|
||||||
|
|
||||||
for relic in char.char_relic:
|
for relic in char.char_relic:
|
||||||
|
print(relic)
|
||||||
rarity = RelicId2Rarity[str(relic["relicId"])]
|
rarity = RelicId2Rarity[str(relic["relicId"])]
|
||||||
relic_img = Image.open(TEXT_PATH / f'yq_bg{rarity}.png')
|
relic_img = Image.open(TEXT_PATH / f'yq_bg{rarity}.png')
|
||||||
if str(relic["SetId"])[0] == '3':
|
if str(relic["SetId"])[0] == '3':
|
||||||
@ -438,6 +443,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
|
|||||||
# 主属性
|
# 主属性
|
||||||
main_value = mp.mpf(relic['MainAffix']['Value'])
|
main_value = mp.mpf(relic['MainAffix']['Value'])
|
||||||
main_name: str = relic['MainAffix']['Name']
|
main_name: str = relic['MainAffix']['Name']
|
||||||
|
main_property: str = relic['MainAffix']['Property']
|
||||||
main_level: int = relic['Level']
|
main_level: int = relic['Level']
|
||||||
|
|
||||||
if main_name in ['攻击力', '生命值', '防御力', '速度']:
|
if main_name in ['攻击力', '生命值', '防御力', '速度']:
|
||||||
@ -473,14 +479,35 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
|
|||||||
anchor='mm',
|
anchor='mm',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
single_relic_score = 0
|
||||||
|
main_value_score = await get_relic_score(
|
||||||
|
relic['MainAffix']['Property'], main_value, char_name, True
|
||||||
|
)
|
||||||
|
if main_property.__contains__('AddedRatio') and relic['Type'] == 5:
|
||||||
|
attr_name = main_property.split('AddedRatio')[0]
|
||||||
|
if attr_name == avatarId2DamageType[str(char.char_id)]:
|
||||||
|
for item in AvatarRelicScore:
|
||||||
|
if item['role'] == char_name:
|
||||||
|
weight_dict = item
|
||||||
|
add_value = (
|
||||||
|
(main_value + 1)
|
||||||
|
* 1
|
||||||
|
* weight_dict['AttributeAddedRatio']
|
||||||
|
* 10
|
||||||
|
)
|
||||||
|
single_relic_score += add_value
|
||||||
|
print(f'main_value_score: {main_value_score}')
|
||||||
|
single_relic_score += main_value_score
|
||||||
for index, i in enumerate(relic['SubAffixList']):
|
for index, i in enumerate(relic['SubAffixList']):
|
||||||
subName: str = i['Name']
|
subName: str = i['Name']
|
||||||
subValue = mp.mpf(i['Value'])
|
subValue = mp.mpf(i['Value'])
|
||||||
subProperty = i['Property']
|
subProperty = i['Property']
|
||||||
if subProperty == 'CriticalDamageBase':
|
|
||||||
relic_score += subValue
|
tmp_score = await get_relic_score(
|
||||||
if subProperty == 'CriticalChanceBase':
|
subProperty, subValue, char_name, False
|
||||||
relic_score += subValue * 2
|
)
|
||||||
|
single_relic_score += tmp_score
|
||||||
|
|
||||||
if subName in ['攻击力', '生命值', '防御力', '速度']:
|
if subName in ['攻击力', '生命值', '防御力', '速度']:
|
||||||
subValueStr = nstr(subValue, 3)
|
subValueStr = nstr(subValue, 3)
|
||||||
else:
|
else:
|
||||||
@ -503,17 +530,26 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]):
|
|||||||
sr_font_26,
|
sr_font_26,
|
||||||
anchor='rm',
|
anchor='rm',
|
||||||
)
|
)
|
||||||
|
relic_img_draw.text(
|
||||||
|
(210, 195),
|
||||||
|
'{}分'.format(int(single_relic_score)),
|
||||||
|
(255, 255, 255),
|
||||||
|
sr_font_28,
|
||||||
|
anchor='rm',
|
||||||
|
)
|
||||||
|
|
||||||
char_info.paste(
|
char_info.paste(
|
||||||
relic_img, RELIC_POS[str(relic["Type"])], relic_img
|
relic_img, RELIC_POS[str(relic["Type"])], relic_img
|
||||||
)
|
)
|
||||||
if relic_score > 1:
|
relic_score += single_relic_score
|
||||||
|
print(relic_score)
|
||||||
|
if relic_score > 200:
|
||||||
relic_value_level = Image.open(TEXT_PATH / 'CommonIconS.png')
|
relic_value_level = Image.open(TEXT_PATH / 'CommonIconS.png')
|
||||||
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
||||||
elif relic_score > 0.6:
|
elif relic_score > 150:
|
||||||
relic_value_level = Image.open(TEXT_PATH / 'CommonIconA.png')
|
relic_value_level = Image.open(TEXT_PATH / 'CommonIconA.png')
|
||||||
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
||||||
elif relic_score > 0.3:
|
elif relic_score > 100:
|
||||||
relic_value_level = Image.open(TEXT_PATH / 'CommonIconB.png')
|
relic_value_level = Image.open(TEXT_PATH / 'CommonIconB.png')
|
||||||
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
char_info.paste(relic_value_level, (780, 963), relic_value_level)
|
||||||
elif relic_score > 0:
|
elif relic_score > 0:
|
||||||
@ -590,3 +626,64 @@ async def get_char_data(
|
|||||||
with open(path, 'r', encoding='utf8') as fp:
|
with open(path, 'r', encoding='utf8') as fp:
|
||||||
char_data = json.load(fp)
|
char_data = json.load(fp)
|
||||||
return char_data
|
return char_data
|
||||||
|
|
||||||
|
|
||||||
|
async def get_relic_score(
|
||||||
|
subProperty: str, subValue, char_name: str, is_main: bool
|
||||||
|
) -> float:
|
||||||
|
relic_score = 0
|
||||||
|
weight_dict = {}
|
||||||
|
for item in AvatarRelicScore:
|
||||||
|
if item['role'] == char_name:
|
||||||
|
weight_dict = item
|
||||||
|
if weight_dict == {}:
|
||||||
|
return 0
|
||||||
|
if subProperty == 'CriticalDamageBase':
|
||||||
|
add_value = (subValue + 1) * 1 * weight_dict['CriticalDamageBase'] * 10
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'CriticalChanceBase':
|
||||||
|
add_value = (subValue + 1) * 2 * weight_dict['CriticalChanceBase'] * 10
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'AttackDelta' and not is_main:
|
||||||
|
add_value = subValue * 0.3 * 0.5 * weight_dict['AttackDelta'] * 0.1
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'DefenceDelta' and not is_main:
|
||||||
|
add_value = subValue * 0.3 * 0.5 * weight_dict['DefenceDelta'] * 0.1
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'HPDelta' and not is_main:
|
||||||
|
add_value = subValue * 0.3 * 0.5 * weight_dict['HPDelta'] * 0.1
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'AttackAddedRatio':
|
||||||
|
add_value = (subValue + 1) * 1.5 * weight_dict['AttackAddedRatio'] * 10
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'DefenceAddedRatio':
|
||||||
|
add_value = (
|
||||||
|
(subValue + 1) * 1.19 * weight_dict['DefenceAddedRatio'] * 10
|
||||||
|
)
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'HPAddedRatio':
|
||||||
|
add_value = (subValue + 1) * 1.5 * weight_dict['HPAddedRatio'] * 10
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'SpeedDelta':
|
||||||
|
add_value = subValue * 2.53 * weight_dict['SpeedDelta']
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'BreakDamageAddedRatioBase':
|
||||||
|
add_value = (
|
||||||
|
(subValue + 1)
|
||||||
|
* 1.0
|
||||||
|
* weight_dict['BreakDamageAddedRatioBase']
|
||||||
|
* 10
|
||||||
|
)
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'StatusProbabilityBase':
|
||||||
|
add_value = (
|
||||||
|
(subValue + 1) * 1.49 * weight_dict['StatusProbabilityBase'] * 10
|
||||||
|
)
|
||||||
|
relic_score += add_value
|
||||||
|
if subProperty == 'StatusResistanceBase':
|
||||||
|
add_value = (
|
||||||
|
(subValue + 1) * 1.49 * weight_dict['StatusResistanceBase'] * 10
|
||||||
|
)
|
||||||
|
relic_score += add_value
|
||||||
|
print(f'{subProperty} : {relic_score}')
|
||||||
|
return relic_score
|
||||||
|
@ -33,17 +33,14 @@ async def api_to_card(
|
|||||||
) -> Union[str, bytes]:
|
) -> Union[str, bytes]:
|
||||||
char_data_list = await api_to_dict(uid, enka_data)
|
char_data_list = await api_to_dict(uid, enka_data)
|
||||||
print(char_data_list)
|
print(char_data_list)
|
||||||
if isinstance(char_data_list, str):
|
if (
|
||||||
if ('服务器正在维护或者关闭中' in char_data_list) or ('网络不太稳定' in char_data_list):
|
not isinstance(char_data_list, str)
|
||||||
return await convert_img(pic_500)
|
and char_data_list == []
|
||||||
else:
|
or isinstance(char_data_list, str)
|
||||||
return await convert_img(pic_500)
|
):
|
||||||
else:
|
return await convert_img(pic_500)
|
||||||
if char_data_list == []:
|
|
||||||
return await convert_img(pic_500)
|
|
||||||
|
|
||||||
img = await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
|
return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
|
||||||
return img
|
|
||||||
|
|
||||||
|
|
||||||
async def draw_enka_card(
|
async def draw_enka_card(
|
||||||
@ -60,13 +57,10 @@ async def draw_enka_card(
|
|||||||
)
|
)
|
||||||
if showfrom == 0:
|
if showfrom == 0:
|
||||||
line1 = f'展柜内有 {len(char_data_list)} 个角色!'
|
line1 = f'展柜内有 {len(char_data_list)} 个角色!'
|
||||||
|
elif char_data_list is None:
|
||||||
|
return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255)))
|
||||||
else:
|
else:
|
||||||
if char_data_list is None:
|
line1 = f'UID {uid} 刷新成功'
|
||||||
return await convert_img(
|
|
||||||
Image.new('RGBA', (0, 1), (255, 255, 255))
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
line1 = f'UID {str(uid)} 刷新成功'
|
|
||||||
# print(char_list)
|
# print(char_list)
|
||||||
line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板'
|
line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板'
|
||||||
char_num = len(char_data_list)
|
char_num = len(char_data_list)
|
||||||
@ -163,10 +157,11 @@ async def draw_enka_char(index: int, img: Image.Image, char_data: dict):
|
|||||||
char_temp.paste(char_img, (8, 8), char_img)
|
char_temp.paste(char_img, (8, 8), char_img)
|
||||||
char_card.paste(char_temp, (0, 0), char_mask)
|
char_card.paste(char_temp, (0, 0), char_mask)
|
||||||
if index <= 7:
|
if index <= 7:
|
||||||
if img.size[0] <= 1100:
|
x = (
|
||||||
x = 60 + (index % 4) * 220
|
60 + (index % 4) * 220
|
||||||
else:
|
if img.size[0] <= 1100
|
||||||
x = 160 + (index % 4) * 220
|
else 160 + (index % 4) * 220
|
||||||
|
)
|
||||||
img.paste(
|
img.paste(
|
||||||
char_card,
|
char_card,
|
||||||
(x, 187 + (index // 4) * 220),
|
(x, 187 + (index // 4) * 220),
|
||||||
|
@ -47,9 +47,7 @@ async def api_to_dict(
|
|||||||
"""
|
"""
|
||||||
if '未找到绑定的UID' in sr_uid:
|
if '未找到绑定的UID' in sr_uid:
|
||||||
return UID_HINT
|
return UID_HINT
|
||||||
if sr_data:
|
if not sr_data:
|
||||||
pass
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
sr_data = await get_char_card_info(sr_uid)
|
sr_data = await get_char_card_info(sr_uid)
|
||||||
except ReadTimeout:
|
except ReadTimeout:
|
||||||
|
@ -34,6 +34,7 @@ ItemId2Name_fileName = f'ItemId2Name_mapping_{version}.json'
|
|||||||
RelicId2MainAffixGroup_fileName = (
|
RelicId2MainAffixGroup_fileName = (
|
||||||
f'RelicId2MainAffixGroup_mapping_{version}.json'
|
f'RelicId2MainAffixGroup_mapping_{version}.json'
|
||||||
)
|
)
|
||||||
|
AvatarRelicScore_fileName = 'AvatarRelicScore.json'
|
||||||
|
|
||||||
|
|
||||||
class TS(TypedDict):
|
class TS(TypedDict):
|
||||||
@ -110,3 +111,6 @@ with open(MAP / ItemId2Name_fileName, 'r', encoding='UTF-8') as f:
|
|||||||
|
|
||||||
with open(MAP / RelicId2MainAffixGroup_fileName, 'r', encoding='UTF-8') as f:
|
with open(MAP / RelicId2MainAffixGroup_fileName, 'r', encoding='UTF-8') as f:
|
||||||
RelicId2MainAffixGroup = msgjson.decode(f.read(), type=Dict[str, int])
|
RelicId2MainAffixGroup = msgjson.decode(f.read(), type=Dict[str, int])
|
||||||
|
|
||||||
|
with open(MAP / AvatarRelicScore_fileName, 'r', encoding='UTF-8') as f:
|
||||||
|
AvatarRelicScore = msgjson.decode(f.read(), type=List[Dict])
|
||||||
|
434
StarRailUID/utils/map/data/AvatarRelicScore.json
Normal file
434
StarRailUID/utils/map/data/AvatarRelicScore.json
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"role": "景元",
|
||||||
|
"HPDelta": 0.0,
|
||||||
|
"HPAddedRatio": 0.0,
|
||||||
|
"AttackDelta": 0.75,
|
||||||
|
"AttackAddedRatio": 0.75,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"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": 1.0,
|
||||||
|
"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": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "杰帕德",
|
||||||
|
"HPDelta": 0.5,
|
||||||
|
"HPAddedRatio": 0.5,
|
||||||
|
"AttackDelta": 0.0,
|
||||||
|
"AttackAddedRatio": 0.0,
|
||||||
|
"DefenceDelta": 1.0,
|
||||||
|
"DefenceAddedRatio": 1.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"StatusProbabilityBase": 0.5,
|
||||||
|
"StatusResistanceBase": 0.5,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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.5,
|
||||||
|
"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": 1.0,
|
||||||
|
"CriticalChanceBase": 1,
|
||||||
|
"CriticalDamageBase": 1,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 1.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.75,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "白露",
|
||||||
|
"HPDelta": 1.0,
|
||||||
|
"HPAddedRatio": 1.0,
|
||||||
|
"AttackDelta": 0.0,
|
||||||
|
"AttackAddedRatio": 0.0,
|
||||||
|
"DefenceDelta": 0.5,
|
||||||
|
"DefenceAddedRatio": 0.5,
|
||||||
|
"SpeedDelta": 0.75,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 1,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.5,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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.5,
|
||||||
|
"HPAddedRatio": 0.5,
|
||||||
|
"AttackDelta": 0.0,
|
||||||
|
"AttackAddedRatio": 0.0,
|
||||||
|
"DefenceDelta": 1.0,
|
||||||
|
"DefenceAddedRatio": 1.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"StatusProbabilityBase": 0.5,
|
||||||
|
"StatusResistanceBase": 0.5,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "艾丝妲",
|
||||||
|
"HPDelta": 0.0,
|
||||||
|
"HPAddedRatio": 0.0,
|
||||||
|
"AttackDelta": 0.75,
|
||||||
|
"AttackAddedRatio": 0.75,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.75,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": 1.0,
|
||||||
|
"HPAddedRatio": 1.0,
|
||||||
|
"AttackDelta": 0.0,
|
||||||
|
"AttackAddedRatio": 0.0,
|
||||||
|
"DefenceDelta": 0.5,
|
||||||
|
"DefenceAddedRatio": 0.5,
|
||||||
|
"SpeedDelta": 0.75,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 1,
|
||||||
|
"SPRatio": 0.75,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.5,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "佩拉",
|
||||||
|
"HPDelta": 0.0,
|
||||||
|
"HPAddedRatio": 0.0,
|
||||||
|
"AttackDelta": 0.75,
|
||||||
|
"AttackAddedRatio": 0.75,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 1,
|
||||||
|
"CriticalDamageBase": 1,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 1.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": 1.0,
|
||||||
|
"CriticalChanceBase": 1,
|
||||||
|
"CriticalDamageBase": 1,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 1.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
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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.5,
|
||||||
|
"HPAddedRatio": 0.5,
|
||||||
|
"AttackDelta": 1.0,
|
||||||
|
"AttackAddedRatio": 1.0,
|
||||||
|
"DefenceDelta": 0.0,
|
||||||
|
"DefenceAddedRatio": 0.0,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 1.0,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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.5,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.5,
|
||||||
|
"StatusProbabilityBase": 0.0,
|
||||||
|
"StatusResistanceBase": 0.0,
|
||||||
|
"AttributeAddedRatio": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "开拓者火",
|
||||||
|
"HPDelta": 0.5,
|
||||||
|
"HPAddedRatio": 0.5,
|
||||||
|
"AttackDelta": 0.0,
|
||||||
|
"AttackAddedRatio": 0.0,
|
||||||
|
"DefenceDelta": 0.1,
|
||||||
|
"DefenceAddedRatio": 0.1,
|
||||||
|
"SpeedDelta": 1.0,
|
||||||
|
"CriticalChanceBase": 0,
|
||||||
|
"CriticalDamageBase": 0,
|
||||||
|
"BreakDamageAddedRatioBase": 0.0,
|
||||||
|
"HealRatio": 0,
|
||||||
|
"SPRatio": 0.0,
|
||||||
|
"StatusProbabilityBase": 1.0,
|
||||||
|
"StatusResistanceBase": 0.5,
|
||||||
|
"AttributeAddedRatio": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
24
poetry.lock
generated
24
poetry.lock
generated
@ -598,14 +598,14 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "platformdirs"
|
name = "platformdirs"
|
||||||
version = "3.6.0"
|
version = "3.8.0"
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "platformdirs-3.6.0-py3-none-any.whl", hash = "sha256:ffa199e3fbab8365778c4a10e1fbf1b9cd50707de826eb304b50e57ec0cc8d38"},
|
{file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"},
|
||||||
{file = "platformdirs-3.6.0.tar.gz", hash = "sha256:57e28820ca8094678b807ff529196506d7a21e17156cb1cddb3e74cebce54640"},
|
{file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@ -614,14 +614,14 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pluggy"
|
name = "pluggy"
|
||||||
version = "1.1.0"
|
version = "1.2.0"
|
||||||
description = "plugin and hook calling mechanisms for python"
|
description = "plugin and hook calling mechanisms for python"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "pluggy-1.1.0-py3-none-any.whl", hash = "sha256:d81d19a3a88d82ed06998353ce5d5c02587ef07ee2d808ae63904ab0ccef0087"},
|
{file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
|
||||||
{file = "pluggy-1.1.0.tar.gz", hash = "sha256:c500b592c5512df35622e4faf2135aa0b7e989c7d31344194b4afb9d5e47b1bf"},
|
{file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@ -758,14 +758,14 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pytest"
|
name = "pytest"
|
||||||
version = "7.3.2"
|
version = "7.4.0"
|
||||||
description = "pytest: simple powerful testing with Python"
|
description = "pytest: simple powerful testing with Python"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"},
|
{file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"},
|
||||||
{file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"},
|
{file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@ -887,14 +887,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "67.8.0"
|
version = "68.0.0"
|
||||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"},
|
{file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"},
|
||||||
{file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"},
|
{file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user