mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-04 18:57:33 +08:00
update
This commit is contained in:
parent
fab498caab
commit
b9cd700789
@ -10,6 +10,7 @@ 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 starrail_damage_cal.cal_damage import cal_char_info, cal_info
|
from starrail_damage_cal.cal_damage import cal_char_info, cal_info
|
||||||
|
from starrail_damage_cal.model import MihomoCharacter
|
||||||
from starrail_damage_cal.to_data import api_to_dict
|
from starrail_damage_cal.to_data import api_to_dict
|
||||||
|
|
||||||
from ..utils.error_reply import CHAR_HINT
|
from ..utils.error_reply import CHAR_HINT
|
||||||
@ -95,7 +96,9 @@ RELIC_CNT = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes, str]:
|
async def draw_char_img(
|
||||||
|
char_data: MihomoCharacter, sr_uid: str, msg: str
|
||||||
|
) -> Union[bytes, str]:
|
||||||
if isinstance(char_data, str):
|
if isinstance(char_data, str):
|
||||||
return char_data
|
return char_data
|
||||||
char = await cal_char_info(char_data)
|
char = await cal_char_info(char_data)
|
||||||
@ -175,7 +178,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
attr_bg = Image.open(TEXT_PATH / "attr_bg.png")
|
attr_bg = Image.open(TEXT_PATH / "attr_bg.png")
|
||||||
attr_bg_draw = ImageDraw.Draw(attr_bg)
|
attr_bg_draw = ImageDraw.Draw(attr_bg)
|
||||||
# 生命值
|
# 生命值
|
||||||
hp = int(char.base_attributes.get("hp"))
|
hp = int(char.base_attributes.hp)
|
||||||
add_hp = int(
|
add_hp = int(
|
||||||
char.add_attr.get("HPDelta", 0)
|
char.add_attr.get("HPDelta", 0)
|
||||||
+ hp
|
+ hp
|
||||||
@ -193,7 +196,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
anchor="lm",
|
anchor="lm",
|
||||||
)
|
)
|
||||||
# 攻击力
|
# 攻击力
|
||||||
attack = int(char.base_attributes["attack"])
|
attack = int(char.base_attributes.attack)
|
||||||
add_attack = int(
|
add_attack = int(
|
||||||
char.add_attr.get("AttackDelta", 0)
|
char.add_attr.get("AttackDelta", 0)
|
||||||
+ attack * char.add_attr.get("AttackAddedRatio", 0)
|
+ attack * char.add_attr.get("AttackAddedRatio", 0)
|
||||||
@ -213,7 +216,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
anchor="lm",
|
anchor="lm",
|
||||||
)
|
)
|
||||||
# 防御力
|
# 防御力
|
||||||
defence = int(char.base_attributes["defence"])
|
defence = int(char.base_attributes.defence)
|
||||||
add_defence = int(
|
add_defence = int(
|
||||||
char.add_attr.get("DefenceDelta", 0)
|
char.add_attr.get("DefenceDelta", 0)
|
||||||
+ defence * char.add_attr.get("DefenceAddedRatio", 0)
|
+ defence * char.add_attr.get("DefenceAddedRatio", 0)
|
||||||
@ -233,7 +236,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
anchor="lm",
|
anchor="lm",
|
||||||
)
|
)
|
||||||
# 速度
|
# 速度
|
||||||
speed = int(char.base_attributes["speed"])
|
speed = int(char.base_attributes.speed)
|
||||||
add_speed = int(
|
add_speed = int(
|
||||||
char.add_attr.get("SpeedDelta", 0)
|
char.add_attr.get("SpeedDelta", 0)
|
||||||
+ speed * char.add_attr.get("SpeedAddedRatio", 0)
|
+ speed * char.add_attr.get("SpeedAddedRatio", 0)
|
||||||
@ -253,7 +256,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
anchor="lm",
|
anchor="lm",
|
||||||
)
|
)
|
||||||
# 暴击率
|
# 暴击率
|
||||||
critical_chance = char.base_attributes["CriticalChanceBase"]
|
critical_chance = char.base_attributes.CriticalChanceBase
|
||||||
critical_chance_base = char.add_attr.get("CriticalChanceBase", 0)
|
critical_chance_base = char.add_attr.get("CriticalChanceBase", 0)
|
||||||
critical_chance = (critical_chance + critical_chance_base) * 100
|
critical_chance = (critical_chance + critical_chance_base) * 100
|
||||||
attr_bg_draw.text(
|
attr_bg_draw.text(
|
||||||
@ -264,7 +267,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
"rm",
|
"rm",
|
||||||
)
|
)
|
||||||
# 暴击伤害
|
# 暴击伤害
|
||||||
critical_damage = char.base_attributes["CriticalDamageBase"]
|
critical_damage = char.base_attributes.CriticalDamageBase
|
||||||
critical_damage_base = char.add_attr.get("CriticalDamageBase", 0)
|
critical_damage_base = char.add_attr.get("CriticalDamageBase", 0)
|
||||||
critical_damage = (critical_damage + critical_damage_base) * 100
|
critical_damage = (critical_damage + critical_damage_base) * 100
|
||||||
attr_bg_draw.text(
|
attr_bg_draw.text(
|
||||||
@ -337,8 +340,8 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
skill_panel_img = Image.open(TEXT_PATH / "skill_panel.png")
|
skill_panel_img = Image.open(TEXT_PATH / "skill_panel.png")
|
||||||
skill_img = (
|
skill_img = (
|
||||||
Image.open(
|
Image.open(
|
||||||
SKILL_PATH / f'{char.char_id}_'
|
SKILL_PATH / f"{char.char_id}_"
|
||||||
f'{skill_type_map[skill["skillAttackType"]][1]}.png'
|
f"{skill_type_map[skill.skillAttackType][1]}.png"
|
||||||
)
|
)
|
||||||
.convert("RGBA")
|
.convert("RGBA")
|
||||||
.resize((55, 55))
|
.resize((55, 55))
|
||||||
@ -348,21 +351,21 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
skill_panel_img_draw = ImageDraw.Draw(skill_panel_img)
|
skill_panel_img_draw = ImageDraw.Draw(skill_panel_img)
|
||||||
skill_panel_img_draw.text(
|
skill_panel_img_draw.text(
|
||||||
(108, 25),
|
(108, 25),
|
||||||
f'{skill_type_map[skill["skillAttackType"]][0]}',
|
f"{skill_type_map[skill.skillAttackType][0]}",
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_26,
|
sr_font_26,
|
||||||
"lm",
|
"lm",
|
||||||
)
|
)
|
||||||
skill_panel_img_draw.text(
|
skill_panel_img_draw.text(
|
||||||
(89, 55),
|
(89, 55),
|
||||||
f'Lv.{skill["skillLevel"]}',
|
f"Lv.{skill.skillLevel}",
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_26,
|
sr_font_26,
|
||||||
"lm",
|
"lm",
|
||||||
)
|
)
|
||||||
skill_panel_img_draw.text(
|
skill_panel_img_draw.text(
|
||||||
(75, 90),
|
(75, 90),
|
||||||
f'{skill["skillName"]}',
|
f"{skill.skillName}",
|
||||||
(105, 105, 105),
|
(105, 105, 105),
|
||||||
sr_font_20,
|
sr_font_20,
|
||||||
"mm",
|
"mm",
|
||||||
@ -374,7 +377,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
# 武器
|
# 武器
|
||||||
if char.equipment != {}:
|
if char.equipment != {}:
|
||||||
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 = (
|
weapon_img = (
|
||||||
Image.open(WEAPON_PATH / f"{weapon_id}.png")
|
Image.open(WEAPON_PATH / f"{weapon_id}.png")
|
||||||
.convert("RGBA")
|
.convert("RGBA")
|
||||||
@ -384,24 +387,24 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
weapon_bg_draw = ImageDraw.Draw(weapon_bg)
|
weapon_bg_draw = ImageDraw.Draw(weapon_bg)
|
||||||
weapon_bg_draw.text(
|
weapon_bg_draw.text(
|
||||||
(345, 47),
|
(345, 47),
|
||||||
f'{char.equipment["equipmentName"]}',
|
f"{char.equipment.equipmentName}",
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_34,
|
sr_font_34,
|
||||||
"lm",
|
"lm",
|
||||||
)
|
)
|
||||||
if hasattr(sr_font_34, "getsize"):
|
if hasattr(sr_font_34, "getsize"):
|
||||||
weapon_name_len = sr_font_34.getsize( # type: ignore
|
weapon_name_len = sr_font_34.getsize( # type: ignore
|
||||||
char.equipment["equipmentName"]
|
char.equipment.equipmentName
|
||||||
)[0]
|
)[0]
|
||||||
else:
|
else:
|
||||||
bbox = sr_font_34.getbbox(char.equipment["equipmentName"])
|
bbox = sr_font_34.getbbox(char.equipment.equipmentName)
|
||||||
weapon_name_len = bbox[2] - bbox[0]
|
weapon_name_len = bbox[2] - bbox[0]
|
||||||
# 放阶
|
# 放阶
|
||||||
rank_img = Image.open(TEXT_PATH / "ImgNewBg.png")
|
rank_img = Image.open(TEXT_PATH / "ImgNewBg.png")
|
||||||
rank_img_draw = ImageDraw.Draw(rank_img)
|
rank_img_draw = ImageDraw.Draw(rank_img)
|
||||||
rank_img_draw.text(
|
rank_img_draw.text(
|
||||||
(70, 44),
|
(70, 44),
|
||||||
f'{NUM_MAP[char.equipment["equipmentRank"]]}阶',
|
f"{NUM_MAP[char.equipment.equipmentRank]}阶",
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
"mm",
|
"mm",
|
||||||
@ -409,21 +412,21 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
weapon_bg.paste(rank_img, (weapon_name_len + 330, 2), rank_img)
|
weapon_bg.paste(rank_img, (weapon_name_len + 330, 2), rank_img)
|
||||||
|
|
||||||
rarity_img = Image.open(
|
rarity_img = Image.open(
|
||||||
TEXT_PATH / f'LightCore_Rarity{char.equipment["equipmentRarity"]}.png'
|
TEXT_PATH / f"LightCore_Rarity{char.equipment.equipmentRarity}.png"
|
||||||
).resize((306, 72))
|
).resize((306, 72))
|
||||||
weapon_bg.paste(rarity_img, (223, 55), rarity_img)
|
weapon_bg.paste(rarity_img, (223, 55), rarity_img)
|
||||||
weapon_bg_draw.text(
|
weapon_bg_draw.text(
|
||||||
(498, 90),
|
(498, 90),
|
||||||
f'Lv.{char.equipment["equipmentLevel"]}',
|
f"Lv.{char.equipment.equipmentLevel}",
|
||||||
white_color,
|
white_color,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
"mm",
|
"mm",
|
||||||
)
|
)
|
||||||
|
|
||||||
# 武器技能
|
# 武器技能
|
||||||
desc = light_cone_ranks[str(char.equipment["equipmentID"])]["desc"]
|
desc = light_cone_ranks[str(char.equipment.equipmentID)]["desc"]
|
||||||
desc_params = light_cone_ranks[str(char.equipment["equipmentID"])]["params"][
|
desc_params = light_cone_ranks[str(char.equipment.equipmentID)]["params"][
|
||||||
char.equipment["equipmentRank"] - 1
|
char.equipment.equipmentRank - 1
|
||||||
]
|
]
|
||||||
for i in range(len(desc_params)):
|
for i in range(len(desc_params)):
|
||||||
temp = math.floor(desc_params[i] * 1000) / 10
|
temp = math.floor(desc_params[i] * 1000) / 10
|
||||||
@ -460,15 +463,15 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
relic_score = 0
|
relic_score = 0
|
||||||
|
|
||||||
for relic in char.char_relic:
|
for relic in char.char_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":
|
||||||
relic_piece_img = Image.open(
|
relic_piece_img = Image.open(
|
||||||
RELIC_PATH / f'{relic["SetId"]}_{relic["Type"] - 5}.png'
|
RELIC_PATH / f"{relic.SetId}_{relic.Type - 5}.png"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
relic_piece_img = Image.open(
|
relic_piece_img = Image.open(
|
||||||
RELIC_PATH / f'{relic["SetId"]}_{relic["Type"] - 1}.png'
|
RELIC_PATH / f"{relic.SetId}_{relic.Type - 1}.png"
|
||||||
)
|
)
|
||||||
relic_piece_new_img = relic_piece_img.resize(
|
relic_piece_new_img = relic_piece_img.resize(
|
||||||
(105, 105), Image.Resampling.LANCZOS
|
(105, 105), Image.Resampling.LANCZOS
|
||||||
@ -479,15 +482,15 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
relic_piece_new_img,
|
relic_piece_new_img,
|
||||||
)
|
)
|
||||||
rarity_img = Image.open(
|
rarity_img = Image.open(
|
||||||
TEXT_PATH / f'LightCore_Rarity'
|
TEXT_PATH / f"LightCore_Rarity"
|
||||||
f'{RelicId2Rarity[str(relic["relicId"])]}.png'
|
f"{RelicId2Rarity[str(relic.relicId)]}.png"
|
||||||
).resize((200, 48))
|
).resize((200, 48))
|
||||||
relic_img.paste(rarity_img, (-10, 80), rarity_img)
|
relic_img.paste(rarity_img, (-10, 80), rarity_img)
|
||||||
relic_img_draw = ImageDraw.Draw(relic_img)
|
relic_img_draw = ImageDraw.Draw(relic_img)
|
||||||
if len(relic["relicName"]) <= 5:
|
if len(relic.relicName) <= 5:
|
||||||
main_name = relic["relicName"]
|
main_name = relic.relicName
|
||||||
else:
|
else:
|
||||||
main_name = relic["relicName"][:2] + relic["relicName"][4:]
|
main_name = relic.relicName[:2] + relic.relicName[4:]
|
||||||
relic_img_draw.text(
|
relic_img_draw.text(
|
||||||
(30, 70),
|
(30, 70),
|
||||||
main_name,
|
main_name,
|
||||||
@ -497,9 +500,9 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 主属性
|
# 主属性
|
||||||
main_value = relic["MainAffix"]["Value"]
|
main_value = relic.MainAffix.Value
|
||||||
main_name: str = relic["MainAffix"]["Name"]
|
main_name = relic.MainAffix.Name
|
||||||
main_level: int = relic["Level"]
|
main_level = relic.Level
|
||||||
|
|
||||||
if main_name in ["攻击力", "生命值", "防御力", "速度"]:
|
if main_name in ["攻击力", "生命值", "防御力", "速度"]:
|
||||||
mainValueStr = f"{main_value:.1f}"
|
mainValueStr = f"{main_value:.1f}"
|
||||||
@ -536,21 +539,21 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
|
|
||||||
single_relic_score = 0
|
single_relic_score = 0
|
||||||
main_value_score = await get_relic_score(
|
main_value_score = await get_relic_score(
|
||||||
relic["MainAffix"]["Property"],
|
relic.MainAffix.Property,
|
||||||
main_value,
|
main_value,
|
||||||
char.char_name,
|
char.char_name,
|
||||||
True,
|
True,
|
||||||
relic["Type"],
|
relic.Type,
|
||||||
)
|
)
|
||||||
single_relic_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 = i.Name
|
||||||
subCnt = i["Cnt"]
|
subCnt = i.Cnt
|
||||||
subValue = i["Value"]
|
subValue = i.Value
|
||||||
subProperty = i["Property"]
|
subProperty = i.Property
|
||||||
|
|
||||||
tmp_score = await get_relic_score(
|
tmp_score = await get_relic_score(
|
||||||
subProperty, subValue, char.char_name, False, relic["Type"]
|
subProperty, subValue, char.char_name, False, relic.Type
|
||||||
)
|
)
|
||||||
single_relic_score += tmp_score
|
single_relic_score += tmp_score
|
||||||
|
|
||||||
@ -594,7 +597,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str) -> Union[bytes,
|
|||||||
anchor="rm",
|
anchor="rm",
|
||||||
)
|
)
|
||||||
|
|
||||||
char_info.paste(relic_img, RELIC_POS[str(relic["Type"])], relic_img)
|
char_info.paste(relic_img, RELIC_POS[str(relic.Type)], relic_img)
|
||||||
relic_score += single_relic_score
|
relic_score += single_relic_score
|
||||||
if relic_score > 210:
|
if relic_score > 210:
|
||||||
relic_value_level = Image.open(TEXT_PATH / "CommonIconSSS.png")
|
relic_value_level = Image.open(TEXT_PATH / "CommonIconSSS.png")
|
||||||
|
@ -1,19 +1,28 @@
|
|||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
import re
|
import re
|
||||||
from typing import Dict, Optional, Tuple, Union
|
from typing import List, Optional, Tuple, Union, cast
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from starrail_damage_cal.excel.model import (
|
from starrail_damage_cal.excel.model import (
|
||||||
AvatarPromotionConfig,
|
AvatarPromotionConfig,
|
||||||
EquipmentPromotionConfig,
|
EquipmentPromotionConfig,
|
||||||
)
|
)
|
||||||
from starrail_damage_cal.to_data import api_to_dict
|
from starrail_damage_cal.map.SR_MAP_PATH import AvatarRankSkillUp
|
||||||
|
from starrail_damage_cal.model import (
|
||||||
|
AttributeBounsStatusAdd,
|
||||||
|
AvatarBaseAttributes,
|
||||||
|
AvatarEquipmentInfo,
|
||||||
|
EquipmentBaseAttributes,
|
||||||
|
MihomoAvatarAttributeBonus,
|
||||||
|
MihomoAvatarExtraAbility,
|
||||||
|
MihomoAvatarSkill,
|
||||||
|
MihomoCharacter,
|
||||||
|
RankData,
|
||||||
|
)
|
||||||
|
from starrail_damage_cal.to_data import api_to_dict, characterSkillTree
|
||||||
|
|
||||||
from .draw_char_img import draw_char_img
|
from .draw_char_img import draw_char_img
|
||||||
from ..utils.error_reply import CHAR_HINT
|
from ..utils.error_reply import CHAR_HINT
|
||||||
from ..utils.map.SR_MAP_PATH import (
|
from ..utils.map.SR_MAP_PATH import (
|
||||||
AvatarRankSkillUp,
|
|
||||||
EquipmentID2Name,
|
EquipmentID2Name,
|
||||||
EquipmentID2Rarity,
|
EquipmentID2Rarity,
|
||||||
Property2Name,
|
Property2Name,
|
||||||
@ -21,7 +30,6 @@ from ..utils.map.SR_MAP_PATH import (
|
|||||||
avatarId2EnName,
|
avatarId2EnName,
|
||||||
avatarId2Name,
|
avatarId2Name,
|
||||||
avatarId2Rarity,
|
avatarId2Rarity,
|
||||||
characterSkillTree,
|
|
||||||
rankId2Name,
|
rankId2Name,
|
||||||
skillId2AttackType,
|
skillId2AttackType,
|
||||||
skillId2Effect,
|
skillId2Effect,
|
||||||
@ -87,7 +95,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str):
|
|||||||
|
|
||||||
async def get_char_args(
|
async def get_char_args(
|
||||||
msg: str, uid: str
|
msg: str, uid: str
|
||||||
) -> Union[Tuple[Dict, Optional[str], Optional[int], Optional[int]], str]:
|
) -> Union[Tuple[MihomoCharacter, Optional[str], Optional[int], Optional[int]], str]:
|
||||||
# 可能进来的值
|
# 可能进来的值
|
||||||
# 六命希儿带于夜色中换1000xxxx4青雀遗器换1000xxxx6希儿头换银狼手
|
# 六命希儿带于夜色中换1000xxxx4青雀遗器换1000xxxx6希儿头换银狼手
|
||||||
# 六命希儿带于夜色中换1000xxxx6希儿头
|
# 六命希儿带于夜色中换1000xxxx6希儿头
|
||||||
@ -115,10 +123,18 @@ async def get_char_args(
|
|||||||
char_data = await make_new_charinfo(uid, fake_name)
|
char_data = await make_new_charinfo(uid, fake_name)
|
||||||
else:
|
else:
|
||||||
char_data = await get_char_data(uid, fake_name)
|
char_data = await get_char_data(uid, fake_name)
|
||||||
|
|
||||||
if isinstance(char_data, str):
|
if isinstance(char_data, str):
|
||||||
return char_data
|
return char_data
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if isinstance(char_data, str):
|
||||||
|
return char_data
|
||||||
|
|
||||||
|
if isinstance(char_data, dict):
|
||||||
|
return "请先输入角色名噢~"
|
||||||
|
|
||||||
if "遗器" in part:
|
if "遗器" in part:
|
||||||
char_data = await get_fake_char_data(
|
char_data = await get_fake_char_data(
|
||||||
char_data,
|
char_data,
|
||||||
@ -142,18 +158,28 @@ async def get_char_args(
|
|||||||
else:
|
else:
|
||||||
weapon, weapon_affix = await get_fake_weapon_str(part)
|
weapon, weapon_affix = await get_fake_weapon_str(part)
|
||||||
|
|
||||||
return char_data, weapon, weapon_affix, talent_num
|
return cast(
|
||||||
|
Tuple[MihomoCharacter, Optional[str], Optional[int], Optional[int]],
|
||||||
|
(
|
||||||
|
char_data,
|
||||||
|
weapon,
|
||||||
|
weapon_affix,
|
||||||
|
talent_num,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def change_equip(uid: str, char_data: Dict, part: str, s: str, i: int) -> Dict:
|
async def change_equip(
|
||||||
|
uid: str, char_data: MihomoCharacter, part: str, s: str, i: int
|
||||||
|
) -> Union[MihomoCharacter, str]:
|
||||||
char_name = part.replace(part[-1], "").replace(uid, "")
|
char_name = part.replace(part[-1], "").replace(uid, "")
|
||||||
fake_data = await get_char_data(uid, char_name)
|
fake_data = await get_char_data(uid, char_name)
|
||||||
if isinstance(fake_data, str):
|
if isinstance(fake_data, str):
|
||||||
return {}
|
return fake_data
|
||||||
relicmap = i + 1
|
relicmap = i + 1
|
||||||
for equip in fake_data["RelicInfo"]:
|
for equip in fake_data.RelicInfo:
|
||||||
if str(str(equip["relicId"])[-1]) == str(relicmap):
|
if str(str(equip.relicId)[-1]) == str(relicmap):
|
||||||
char_data["RelicInfo"][i] = equip
|
char_data.RelicInfo[i] = equip
|
||||||
break
|
break
|
||||||
return char_data
|
return char_data
|
||||||
|
|
||||||
@ -189,96 +215,113 @@ async def get_fake_weapon_str(msg: str) -> Tuple[str, Optional[int]]:
|
|||||||
|
|
||||||
|
|
||||||
async def get_fake_char_data(
|
async def get_fake_char_data(
|
||||||
char_data: Dict, change_name: str, changeuid: str
|
char_data: MihomoCharacter, change_name: str, changeuid: str
|
||||||
) -> Union[Dict, str]:
|
) -> Union[MihomoCharacter, str]:
|
||||||
original_data = await get_char_data(changeuid, change_name)
|
original_data = await get_char_data(changeuid, change_name)
|
||||||
if isinstance(original_data, str):
|
if isinstance(original_data, str):
|
||||||
return original_data
|
return original_data
|
||||||
if isinstance(original_data, Dict):
|
if isinstance(original_data, MihomoCharacter):
|
||||||
char_data["RelicInfo"] = original_data["RelicInfo"]
|
char_data.RelicInfo = original_data.RelicInfo
|
||||||
|
|
||||||
return char_data
|
return char_data
|
||||||
|
|
||||||
|
|
||||||
async def get_char_data(
|
async def get_char_data(
|
||||||
uid: str, char_name: str, enable_self: bool = True
|
uid: str, char_name: str, enable_self: bool = True
|
||||||
) -> Union[Dict, str]:
|
) -> Union[MihomoCharacter, str]:
|
||||||
player_path = PLAYER_PATH / str(uid)
|
|
||||||
SELF_PATH = player_path / "SELF"
|
|
||||||
if "开拓者" in str(char_name):
|
if "开拓者" in str(char_name):
|
||||||
char_name = "开拓者"
|
char_name = "开拓者"
|
||||||
char_id = await name_to_avatar_id(char_name)
|
char_id = await name_to_avatar_id(char_name)
|
||||||
if char_id == "":
|
if char_id == "":
|
||||||
char_name = await alias_to_char_name(char_name)
|
char_name = await alias_to_char_name(char_name)
|
||||||
if char_name is False:
|
char_id_list, chars = await api_to_dict(uid, save_path=PLAYER_PATH)
|
||||||
return "请输入正确的角色名"
|
charname_list = []
|
||||||
char_path = player_path / f"{char_name}.json"
|
for char in char_id_list:
|
||||||
char_self_path = SELF_PATH / f"{char_name}.json"
|
charname = avatarId2Name[str(char)]
|
||||||
path = Path()
|
charname_list.append(charname)
|
||||||
if char_path.exists():
|
if char_name in charname_list:
|
||||||
path = char_path
|
return chars[char_id_list[charname_list.index(char_name)]]
|
||||||
elif enable_self and char_self_path.exists():
|
return CHAR_HINT.format(char_name, char_name)
|
||||||
path = char_self_path
|
|
||||||
else:
|
|
||||||
char_id_list, _ = await api_to_dict(uid, save_path=PLAYER_PATH)
|
|
||||||
charname_list = []
|
|
||||||
if isinstance(char_id_list, str):
|
|
||||||
return char_id_list
|
|
||||||
for char in char_id_list:
|
|
||||||
charname = avatarId2Name[str(char)]
|
|
||||||
charname_list.append(charname)
|
|
||||||
if str(char_name) in charname_list:
|
|
||||||
if char_path.exists():
|
|
||||||
path = char_path
|
|
||||||
elif enable_self and char_self_path.exists():
|
|
||||||
path = char_self_path
|
|
||||||
else:
|
|
||||||
return CHAR_HINT.format(char_name, char_name)
|
|
||||||
|
|
||||||
with Path.open(path, encoding="utf8") as fp:
|
|
||||||
return json.load(fp)
|
|
||||||
|
|
||||||
|
|
||||||
async def make_new_charinfo(
|
async def make_new_charinfo(
|
||||||
uid: str,
|
uid: str,
|
||||||
fake_name: str,
|
fake_name: str,
|
||||||
):
|
) -> MihomoCharacter:
|
||||||
char_data = {}
|
char_data = MihomoCharacter(
|
||||||
char_data["uid"] = uid
|
uid="",
|
||||||
char_data["nickName"] = "test"
|
nickName="test",
|
||||||
|
avatarId=0,
|
||||||
|
avatarName="",
|
||||||
|
avatarElement="",
|
||||||
|
avatarRarity="",
|
||||||
|
avatarPromotion=0,
|
||||||
|
avatarLevel=1,
|
||||||
|
avatarSkill=[],
|
||||||
|
avatarExtraAbility=[],
|
||||||
|
avatarAttributeBonus=[],
|
||||||
|
RelicInfo=[],
|
||||||
|
avatarEnName="",
|
||||||
|
baseAttributes=AvatarBaseAttributes(
|
||||||
|
hp=0,
|
||||||
|
attack=0,
|
||||||
|
defence=0,
|
||||||
|
speed=0,
|
||||||
|
CriticalChanceBase=0,
|
||||||
|
CriticalDamageBase=0,
|
||||||
|
BaseAggro=0,
|
||||||
|
),
|
||||||
|
equipmentInfo=AvatarEquipmentInfo(
|
||||||
|
equipmentID=0,
|
||||||
|
equipmentName="",
|
||||||
|
equipmentLevel=0,
|
||||||
|
equipmentPromotion=0,
|
||||||
|
equipmentRank=0,
|
||||||
|
equipmentRarity=0,
|
||||||
|
baseAttributes=EquipmentBaseAttributes(hp=0, attack=0, defence=0),
|
||||||
|
),
|
||||||
|
rank=0,
|
||||||
|
rankList=[],
|
||||||
|
)
|
||||||
|
char_data.uid = uid
|
||||||
|
char_data.nickName = "test"
|
||||||
char_id = await name_to_avatar_id(fake_name)
|
char_id = await name_to_avatar_id(fake_name)
|
||||||
if char_id == "":
|
if char_id == "":
|
||||||
fake_name = await alias_to_char_name(fake_name)
|
fake_name = await alias_to_char_name(fake_name)
|
||||||
if fake_name is False:
|
|
||||||
return "请输入正确的角色名"
|
|
||||||
char_id = await name_to_avatar_id(fake_name)
|
char_id = await name_to_avatar_id(fake_name)
|
||||||
char_data["avatarId"] = int(char_id)
|
char_data.avatarId = int(char_id)
|
||||||
char_data["avatarName"] = fake_name
|
char_data.avatarName = fake_name
|
||||||
char_data["avatarElement"] = avatarId2DamageType[str(char_data["avatarId"])]
|
char_data.avatarElement = avatarId2DamageType[str(char_data.avatarId)]
|
||||||
char_data["avatarRarity"] = str(avatarId2Rarity[str(char_data["avatarId"])])
|
char_data.avatarRarity = str(avatarId2Rarity[str(char_data.avatarId)])
|
||||||
char_data["avatarPromotion"] = 6
|
char_data.avatarPromotion = 6
|
||||||
char_data["avatarLevel"] = 80
|
char_data.avatarLevel = 80
|
||||||
char_data["avatarSkill"] = await get_skill_list(char_data["avatarId"])
|
char_data.avatarSkill = await get_skill_list(char_data.avatarId)
|
||||||
char_data["avatarExtraAbility"] = await get_extra_list(char_data["avatarId"])
|
char_data.avatarExtraAbility = await get_extra_list(char_data.avatarId)
|
||||||
char_data["avatarAttributeBonus"] = await get_attribute_list(char_data["avatarId"])
|
char_data.avatarAttributeBonus = await get_attribute_list(char_data.avatarId)
|
||||||
char_data["RelicInfo"] = []
|
char_data.RelicInfo = []
|
||||||
char_data["avatarEnName"] = avatarId2EnName[str(char_data["avatarId"])]
|
char_data.avatarEnName = avatarId2EnName[str(char_data.avatarId)]
|
||||||
char_data["rank"] = 0
|
char_data.rank = 0
|
||||||
char_data["rankList"] = []
|
char_data.rankList = []
|
||||||
char_data["baseAttributes"] = await get_baseAttributes(char_data["avatarId"])
|
char_data.baseAttributes = await get_baseAttributes(char_data.avatarId)
|
||||||
char_data["equipmentInfo"] = {}
|
|
||||||
return char_data
|
return char_data
|
||||||
|
|
||||||
|
|
||||||
async def get_baseAttributes(
|
async def get_baseAttributes(
|
||||||
char_id: int,
|
char_id: int,
|
||||||
):
|
) -> AvatarBaseAttributes:
|
||||||
# 处理基础属性
|
# 处理基础属性
|
||||||
base_attributes = {}
|
base_attributes = AvatarBaseAttributes(
|
||||||
|
hp=0,
|
||||||
|
attack=0,
|
||||||
|
defence=0,
|
||||||
|
speed=0,
|
||||||
|
CriticalChanceBase=0,
|
||||||
|
CriticalDamageBase=0,
|
||||||
|
BaseAggro=0,
|
||||||
|
)
|
||||||
avatar_promotion_base = None
|
avatar_promotion_base = None
|
||||||
for avatar in AvatarPromotionConfig:
|
for avatar in AvatarPromotionConfig:
|
||||||
if avatar.AvatarID == str(char_id):
|
if avatar.AvatarID == str(char_id) and avatar.Promotion == 6:
|
||||||
avatar_promotion_base = avatar
|
avatar_promotion_base = avatar
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -287,142 +330,147 @@ async def get_baseAttributes(
|
|||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
# 攻击力
|
# 攻击力
|
||||||
base_attributes["attack"] = (
|
base_attributes.attack = (
|
||||||
avatar_promotion_base.AttackBase.Value
|
avatar_promotion_base.AttackBase.Value
|
||||||
+ avatar_promotion_base.AttackAdd.Value * (80 - 1)
|
+ avatar_promotion_base.AttackAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
# 防御力
|
# 防御力
|
||||||
base_attributes["defence"] = (
|
base_attributes.defence = (
|
||||||
avatar_promotion_base.DefenceBase.Value
|
avatar_promotion_base.DefenceBase.Value
|
||||||
+ avatar_promotion_base.DefenceAdd.Value * (80 - 1)
|
+ avatar_promotion_base.DefenceAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
# 血量
|
# 血量
|
||||||
base_attributes["hp"] = (
|
base_attributes.hp = (
|
||||||
avatar_promotion_base.HPBase.Value
|
avatar_promotion_base.HPBase.Value
|
||||||
+ avatar_promotion_base.HPAdd.Value * (80 - 1)
|
+ avatar_promotion_base.HPAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
# 速度
|
# 速度
|
||||||
base_attributes["speed"] = avatar_promotion_base.SpeedBase.Value
|
base_attributes.speed = avatar_promotion_base.SpeedBase.Value
|
||||||
# 暴击率
|
# 暴击率
|
||||||
base_attributes["CriticalChanceBase"] = avatar_promotion_base.CriticalChance.Value
|
base_attributes.CriticalChanceBase = avatar_promotion_base.CriticalChance.Value
|
||||||
# 暴击伤害
|
# 暴击伤害
|
||||||
base_attributes["CriticalDamageBase"] = avatar_promotion_base.CriticalDamage.Value
|
base_attributes.CriticalDamageBase = avatar_promotion_base.CriticalDamage.Value
|
||||||
# 嘲讽
|
# 嘲讽
|
||||||
base_attributes["BaseAggro"] = avatar_promotion_base.BaseAggro.Value
|
base_attributes.BaseAggro = avatar_promotion_base.BaseAggro.Value
|
||||||
return base_attributes
|
return base_attributes
|
||||||
|
|
||||||
|
|
||||||
async def get_attribute_list(
|
async def get_attribute_list(
|
||||||
char_id: int,
|
char_id: int,
|
||||||
):
|
) -> List[MihomoAvatarAttributeBonus]:
|
||||||
attribute_list = []
|
attribute_list = []
|
||||||
for attributeid in [201, 202, 203, 204, 205, 206, 207, 208, 209, 210]:
|
for attributeid in [201, 202, 203, 204, 205, 206, 207, 208, 209, 210]:
|
||||||
attribute_bonus_temp = {}
|
attribute_bonus_temp = MihomoAvatarAttributeBonus(
|
||||||
attribute_bonus_temp["attributeBonusId"] = char_id * 1000 + attributeid
|
attributeBonusId=0,
|
||||||
attribute_bonus_temp["attributeBonusLevel"] = 1
|
attributeBonusLevel=0,
|
||||||
status_add = characterSkillTree[str(char_id)][
|
statusAdd=AttributeBounsStatusAdd(property_="", name="", value=0),
|
||||||
str(attribute_bonus_temp["attributeBonusId"])
|
)
|
||||||
]["levels"][0]["properties"]
|
attribute_bonus_temp.attributeBonusId = char_id * 1000 + attributeid
|
||||||
attribute_bonus_temp["statusAdd"] = {}
|
attribute_bonus_temp.attributeBonusLevel = 1
|
||||||
if status_add:
|
status_add = (
|
||||||
for property_ in status_add:
|
characterSkillTree[str(char_id)][str(attribute_bonus_temp.attributeBonusId)]
|
||||||
attribute_bonus_temp["statusAdd"]["property"] = property_["type"]
|
.levels[0]
|
||||||
attribute_bonus_temp["statusAdd"]["name"] = Property2Name[
|
.properties
|
||||||
property_["type"]
|
)
|
||||||
]
|
for property_ in status_add:
|
||||||
attribute_bonus_temp["statusAdd"]["value"] = property_["value"]
|
attribute_bonus_temp.statusAdd.property_ = property_.type
|
||||||
attribute_list.append(attribute_bonus_temp)
|
attribute_bonus_temp.statusAdd.name = Property2Name[property_.type]
|
||||||
|
attribute_bonus_temp.statusAdd.value = property_.value
|
||||||
|
attribute_list.append(attribute_bonus_temp)
|
||||||
return attribute_list
|
return attribute_list
|
||||||
|
|
||||||
|
|
||||||
async def get_extra_list(
|
async def get_extra_list(
|
||||||
char_id: int,
|
char_id: int,
|
||||||
):
|
) -> List[MihomoAvatarExtraAbility]:
|
||||||
extra_list = []
|
extra_list = []
|
||||||
for extraid in [101, 102, 103]:
|
for extraid in [101, 102, 103]:
|
||||||
extra_temp = {}
|
extra_temp = MihomoAvatarExtraAbility(
|
||||||
extra_temp["extraAbilityId"] = char_id * 1000 + extraid
|
extraAbilityId=0,
|
||||||
extra_temp["extraAbilityLevel"] = 1
|
extraAbilityLevel=0,
|
||||||
|
)
|
||||||
|
extra_temp.extraAbilityId = char_id * 1000 + extraid
|
||||||
|
extra_temp.extraAbilityLevel = 1
|
||||||
extra_list.append(extra_temp)
|
extra_list.append(extra_temp)
|
||||||
return extra_list
|
return extra_list
|
||||||
|
|
||||||
|
|
||||||
async def get_skill_list(
|
async def get_skill_list(
|
||||||
char_id: int,
|
char_id: int,
|
||||||
):
|
) -> List[MihomoAvatarSkill]:
|
||||||
Skilllist = []
|
Skilllist = []
|
||||||
for skillid in [1, 2, 3, 4, 7]:
|
for skillid in [1, 2, 3, 4, 7]:
|
||||||
skill_temp = {}
|
skill_temp = MihomoAvatarSkill(
|
||||||
skill_temp["skillId"] = char_id * 100 + skillid
|
skillId=0,
|
||||||
skill_temp["skillName"] = skillId2Name[str(skill_temp["skillId"])]
|
skillName="",
|
||||||
skill_temp["skillEffect"] = skillId2Effect[str(skill_temp["skillId"])]
|
skillEffect="",
|
||||||
skill_temp["skillAttackType"] = skillId2AttackType[str(skill_temp["skillId"])]
|
skillAttackType="",
|
||||||
|
skillLevel=0,
|
||||||
|
)
|
||||||
|
skill_temp.skillId = char_id * 100 + skillid
|
||||||
|
skill_temp.skillName = skillId2Name[str(skill_temp.skillId)]
|
||||||
|
skill_temp.skillEffect = skillId2Effect[str(skill_temp.skillId)]
|
||||||
|
skill_temp.skillAttackType = skillId2AttackType[str(skill_temp.skillId)]
|
||||||
skilllevel = 10
|
skilllevel = 10
|
||||||
if skillid == 1:
|
if skillid == 1:
|
||||||
skilllevel = 6
|
skilllevel = 6
|
||||||
if skillid == 7:
|
if skillid == 7:
|
||||||
skilllevel = 1
|
skilllevel = 1
|
||||||
skill_temp["skillLevel"] = skilllevel
|
skill_temp.skillLevel = skilllevel
|
||||||
Skilllist.append(skill_temp)
|
Skilllist.append(skill_temp)
|
||||||
return Skilllist
|
return Skilllist
|
||||||
|
|
||||||
|
|
||||||
async def get_rank_list(
|
def get_rank_list(
|
||||||
char_id: str,
|
char_id: int,
|
||||||
talent_num: int,
|
talent_num: int,
|
||||||
):
|
) -> List[RankData]:
|
||||||
rank_temp = []
|
rank_temp = []
|
||||||
for index in range(talent_num):
|
for index in range(talent_num):
|
||||||
rankTemp = {}
|
rankTemp = RankData(
|
||||||
|
rankId=0,
|
||||||
|
rankName="",
|
||||||
|
)
|
||||||
rank_id = int(str(char_id) + "0" + str(index + 1))
|
rank_id = int(str(char_id) + "0" + str(index + 1))
|
||||||
rankTemp["rankId"] = rank_id
|
rankTemp.rankId = rank_id
|
||||||
rankTemp["rankName"] = rankId2Name[str(rank_id)]
|
rankTemp.rankName = rankId2Name[str(rank_id)]
|
||||||
rank_temp.append(rankTemp)
|
rank_temp.append(rankTemp)
|
||||||
return rank_temp
|
return rank_temp
|
||||||
|
|
||||||
|
|
||||||
async def get_char(
|
async def get_char(
|
||||||
char_data: dict,
|
char_data: MihomoCharacter,
|
||||||
weapon: Optional[str] = None,
|
weapon: Optional[str] = None,
|
||||||
weapon_affix: Optional[int] = None,
|
weapon_affix: Optional[int] = None,
|
||||||
talent_num: Optional[int] = None,
|
talent_num: Optional[int] = None,
|
||||||
):
|
):
|
||||||
if isinstance(talent_num, int):
|
if isinstance(talent_num, int):
|
||||||
# 处理命座
|
# 处理命座
|
||||||
rank_temp = []
|
char_data.rank = talent_num
|
||||||
char_data["rank"] = talent_num
|
char_data.rankList = get_rank_list(char_data.avatarId, talent_num)
|
||||||
for index in range(talent_num):
|
|
||||||
rankTemp = {}
|
|
||||||
rank_id = int(str(char_data["avatarId"]) + "0" + str(index + 1))
|
|
||||||
rankTemp["rankId"] = rank_id
|
|
||||||
rankTemp["rankName"] = rankId2Name[str(rank_id)]
|
|
||||||
rank_temp.append(rankTemp)
|
|
||||||
char_data["rankList"] = rank_temp
|
|
||||||
|
|
||||||
# 处理命座中的 level_up_skills
|
# 处理命座中的 level_up_skills
|
||||||
if char_data.get("rankList"):
|
if char_data.rankList:
|
||||||
for rank_item in char_data["rankList"]:
|
for rank_item in char_data.rankList:
|
||||||
rank_id = rank_item["rankId"]
|
rank_id = rank_item.rankId
|
||||||
level_up_skill = AvatarRankSkillUp[str(rank_id)]
|
level_up_skill = AvatarRankSkillUp[str(rank_id)]
|
||||||
if level_up_skill:
|
if level_up_skill:
|
||||||
for item in level_up_skill:
|
for item in level_up_skill:
|
||||||
skill_id = item["id"]
|
skill_id = item.id
|
||||||
skill_up_num = item["num"]
|
skill_up_num = item.num
|
||||||
# 查找skill_id在不在avatarSkill中
|
# 查找skill_id在不在avatarSkill中
|
||||||
for index, skill_item in enumerate(char_data["avatarSkill"]):
|
for index, skill_item in enumerate(char_data.avatarSkill):
|
||||||
if str(skill_id) == str(skill_item["skillId"]):
|
if skill_id == str(skill_item.skillId):
|
||||||
if skill_id[-1] == 1:
|
if skill_id[-1] == 1:
|
||||||
skilllevel_max = 7
|
skilllevel_max = 7
|
||||||
else:
|
else:
|
||||||
skilllevel_max = 12
|
skilllevel_max = 12
|
||||||
skilllevel = min(
|
skilllevel = min(
|
||||||
skilllevel_max,
|
skilllevel_max,
|
||||||
char_data["avatarSkill"][index]["skillLevel"]
|
char_data.avatarSkill[index].skillLevel
|
||||||
+ skill_up_num,
|
+ skill_up_num,
|
||||||
)
|
)
|
||||||
char_data["avatarSkill"][index]["skillLevel"] = (
|
char_data.avatarSkill[index].skillLevel = skilllevel
|
||||||
skilllevel
|
|
||||||
)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
if isinstance(weapon, str):
|
if isinstance(weapon, str):
|
||||||
@ -431,19 +479,26 @@ async def get_char(
|
|||||||
if equipmentid == "":
|
if equipmentid == "":
|
||||||
weapon = await alias_to_weapon_name(weapon)
|
weapon = await alias_to_weapon_name(weapon)
|
||||||
equipmentid = await name_to_weapon_id(weapon)
|
equipmentid = await name_to_weapon_id(weapon)
|
||||||
equipment_info = {}
|
equipment_info = AvatarEquipmentInfo(
|
||||||
equipment_info["equipmentID"] = int(equipmentid)
|
equipmentID=0,
|
||||||
equipment_info["equipmentName"] = EquipmentID2Name[str(equipmentid)]
|
equipmentName="",
|
||||||
|
equipmentLevel=0,
|
||||||
|
equipmentPromotion=0,
|
||||||
|
equipmentRank=0,
|
||||||
|
equipmentRarity=0,
|
||||||
|
baseAttributes=EquipmentBaseAttributes(hp=0, attack=0, defence=0),
|
||||||
|
)
|
||||||
|
equipment_info.equipmentID = int(equipmentid)
|
||||||
|
equipment_info.equipmentName = EquipmentID2Name[str(equipmentid)]
|
||||||
|
|
||||||
equipment_info["equipmentLevel"] = 80
|
equipment_info.equipmentLevel = 80
|
||||||
equipment_info["equipmentPromotion"] = 6
|
equipment_info.equipmentPromotion = 6
|
||||||
equipment_info["equipmentRank"] = weapon_affix
|
equipment_info.equipmentRank = weapon_affix if weapon_affix else 1
|
||||||
equipment_info["equipmentRarity"] = EquipmentID2Rarity[str(equipmentid)]
|
equipment_info.equipmentRarity = EquipmentID2Rarity[str(equipmentid)]
|
||||||
equipment_base_attributes = {}
|
|
||||||
|
|
||||||
equipment_promotion_base = None
|
equipment_promotion_base = None
|
||||||
for equipment in EquipmentPromotionConfig:
|
for equipment in EquipmentPromotionConfig:
|
||||||
if equipment.EquipmentID == str(equipmentid):
|
if equipment.EquipmentID == str(equipmentid) and equipment.Promotion == 6:
|
||||||
equipment_promotion_base = equipment
|
equipment_promotion_base = equipment
|
||||||
break
|
break
|
||||||
if not equipment_promotion_base:
|
if not equipment_promotion_base:
|
||||||
@ -451,21 +506,20 @@ async def get_char(
|
|||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
# 生命值
|
# 生命值
|
||||||
equipment_base_attributes["hp"] = (
|
equipment_info.baseAttributes.hp = (
|
||||||
equipment_promotion_base.BaseHP.Value
|
equipment_promotion_base.BaseHP.Value
|
||||||
+ equipment_promotion_base.BaseHPAdd.Value * (80 - 1)
|
+ equipment_promotion_base.BaseHPAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
# 攻击力
|
# 攻击力
|
||||||
equipment_base_attributes["attack"] = (
|
equipment_info.baseAttributes.attack = (
|
||||||
equipment_promotion_base.BaseAttack.Value
|
equipment_promotion_base.BaseAttack.Value
|
||||||
+ equipment_promotion_base.BaseAttackAdd.Value * (80 - 1)
|
+ equipment_promotion_base.BaseAttackAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
# 防御力
|
# 防御力
|
||||||
equipment_base_attributes["defence"] = (
|
equipment_info.baseAttributes.defence = (
|
||||||
equipment_promotion_base.BaseDefence.Value
|
equipment_promotion_base.BaseDefence.Value
|
||||||
+ equipment_promotion_base.BaseDefenceAdd.Value * (80 - 1)
|
+ equipment_promotion_base.BaseDefenceAdd.Value * (80 - 1)
|
||||||
)
|
)
|
||||||
equipment_info["baseAttributes"] = equipment_base_attributes
|
|
||||||
|
|
||||||
char_data["equipmentInfo"] = equipment_info
|
char_data.equipmentInfo = equipment_info
|
||||||
return char_data
|
return char_data
|
||||||
|
@ -8,7 +8,6 @@ from ..resource.RESOURCE_PATH import CU_BG_PATH
|
|||||||
|
|
||||||
BG_PATH = Path(__file__).parent / "bg"
|
BG_PATH = Path(__file__).parent / "bg"
|
||||||
NM_BG_PATH = BG_PATH / "nm_bg"
|
NM_BG_PATH = BG_PATH / "nm_bg"
|
||||||
SP_BG_PATH = BG_PATH / "sp_bg"
|
|
||||||
|
|
||||||
if list(CU_BG_PATH.iterdir()) != []:
|
if list(CU_BG_PATH.iterdir()) != []:
|
||||||
bg_path = CU_BG_PATH
|
bg_path = CU_BG_PATH
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, TypedDict, Union
|
from typing import Dict, List, TypedDict
|
||||||
|
|
||||||
from msgspec import Struct, json as msgjson
|
from msgspec import Struct, json as msgjson
|
||||||
|
|
||||||
@ -81,8 +81,8 @@ with Path.open(MAP / SetId2Name_fileName, encoding="UTF-8") as f:
|
|||||||
with Path.open(MAP / rankId2Name_fileName, encoding="UTF-8") as f:
|
with Path.open(MAP / rankId2Name_fileName, encoding="UTF-8") as f:
|
||||||
rankId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
rankId2Name = msgjson.decode(f.read(), type=Dict[str, str])
|
||||||
|
|
||||||
with Path.open(MAP / characterSkillTree_fileName, encoding="UTF-8") as f:
|
# with Path.open(MAP / characterSkillTree_fileName, encoding="UTF-8") as f:
|
||||||
characterSkillTree = msgjson.decode(f.read(), type=Dict[str, Dict])
|
# characterSkillTree = msgjson.decode(f.read(), type=Dict[str, Dict])
|
||||||
|
|
||||||
with Path.open(MAP / avatarId2DamageType_fileName, encoding="UTF-8") as f:
|
with Path.open(MAP / avatarId2DamageType_fileName, encoding="UTF-8") as f:
|
||||||
avatarId2DamageType = msgjson.decode(f.read(), type=Dict[str, str])
|
avatarId2DamageType = msgjson.decode(f.read(), type=Dict[str, str])
|
||||||
@ -119,5 +119,5 @@ with Path.open(MAP / RelicId2MainAffixGroup_fileName, encoding="UTF-8") as f:
|
|||||||
with Path.open(current / "AvatarRelicScore.json", encoding="UTF-8") as f:
|
with Path.open(current / "AvatarRelicScore.json", encoding="UTF-8") as f:
|
||||||
AvatarRelicScore = msgjson.decode(f.read(), type=List[Dict])
|
AvatarRelicScore = msgjson.decode(f.read(), type=List[Dict])
|
||||||
|
|
||||||
with Path.open(MAP / avatarRankSkillUp_fileName, encoding="UTF-8") as f:
|
# with Path.open(MAP / avatarRankSkillUp_fileName, encoding="UTF-8") as f:
|
||||||
AvatarRankSkillUp = msgjson.decode(f.read(), type=Dict[str, Union[List[LU], None]])
|
# AvatarRankSkillUp = msgjson.decode(f.read(), type=Dict[str, Union[List[LU], None]])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user