mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-05 19:23:45 +08:00
面板替换添加为拥有角色的无中生有
This commit is contained in:
parent
69bf0435f2
commit
b2c0426165
@ -422,12 +422,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str):
|
||||
desctexty = 115
|
||||
for desctext in desclist:
|
||||
desctexty = draw_text_by_line(
|
||||
weapon_bg,
|
||||
(210, desctexty),
|
||||
desctext,
|
||||
sr_font_24,
|
||||
'#F9F9F9',
|
||||
370,
|
||||
weapon_bg, (210, desctexty), desctext, sr_font_24, '#F9F9F9', 370
|
||||
)
|
||||
desctexty += 28
|
||||
char_info.paste(weapon_bg, (0, 855), weapon_bg)
|
||||
|
@ -220,7 +220,6 @@ class RiverFlowsinSpring(BaseWeapon):
|
||||
return attribute_bonus
|
||||
return attribute_bonus
|
||||
|
||||
|
||||
class OnlySilenceRemains(BaseWeapon):
|
||||
weapon_base_attributes: Dict
|
||||
|
||||
@ -1658,7 +1657,6 @@ class Thisbodyisasword(BaseWeapon):
|
||||
|
||||
return attribute_bonus
|
||||
|
||||
|
||||
# 如泥酣眠
|
||||
class SleepLiketheDead(BaseWeapon):
|
||||
weapon_base_attributes: Dict
|
||||
@ -1686,7 +1684,6 @@ class SleepLiketheDead(BaseWeapon):
|
||||
)
|
||||
return attribute_bonus
|
||||
|
||||
|
||||
class Weapon:
|
||||
@classmethod
|
||||
def create(cls, weapon: DamageInstanceWeapon):
|
||||
|
@ -9,7 +9,7 @@ from .to_data import api_to_dict
|
||||
from .draw_char_img import draw_char_img
|
||||
from ..utils.error_reply import CHAR_HINT
|
||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||
from ..utils.excel.model import EquipmentPromotionConfig
|
||||
from ..utils.excel.model import EquipmentPromotionConfig, AvatarPromotionConfig
|
||||
from ..utils.map.name_covert import (
|
||||
name_to_avatar_id,
|
||||
name_to_weapon_id,
|
||||
@ -18,8 +18,17 @@ from ..utils.map.name_covert import (
|
||||
from ..utils.map.SR_MAP_PATH import (
|
||||
EquipmentID2Name,
|
||||
EquipmentID2Rarity,
|
||||
Property2Name,
|
||||
avatarId2Rarity,
|
||||
AvatarRankSkillUp,
|
||||
rankId2Name,
|
||||
characterSkillTree,
|
||||
skillId2Effect,
|
||||
skillId2Name,
|
||||
skillId2AttackType,
|
||||
avatarId2Name,
|
||||
avatarId2EnName,
|
||||
avatarId2DamageType,
|
||||
)
|
||||
|
||||
WEAPON_TO_INT = {
|
||||
@ -101,17 +110,18 @@ async def get_char_args(
|
||||
if index == 0:
|
||||
fake_name, talent_num = await get_fake_char_str(part)
|
||||
# 判断是否开启fake_char
|
||||
if '遗器' in msg:
|
||||
char_data = await get_char_data(uid, fake_name)
|
||||
if isinstance(char_data, str):
|
||||
char_data = await make_new_charinfo(uid, fake_name)
|
||||
else:
|
||||
char_data = await get_char_data(uid, fake_name)
|
||||
if isinstance(char_data, str):
|
||||
return char_data
|
||||
continue
|
||||
|
||||
if '遗器' in part:
|
||||
char_data = await get_fake_char_data(
|
||||
char_data,
|
||||
part.replace('遗器', '').replace(changeuid, ''),
|
||||
changeuid,
|
||||
)
|
||||
char_data = await get_fake_char_data(char_data, part.replace('遗器', '').replace(changeuid, ''), changeuid)
|
||||
if isinstance(char_data, str):
|
||||
return char_data
|
||||
else:
|
||||
@ -170,7 +180,7 @@ async def get_fake_char_str(char_name: str) -> Tuple[str, Optional[int]]:
|
||||
|
||||
|
||||
async def get_fake_weapon_str(msg: str) -> Tuple[str, Optional[int]]:
|
||||
weapon_affix = 0
|
||||
weapon_affix = 1
|
||||
if '精' in msg and msg[1] in WEAPON_TO_INT:
|
||||
weapon_affix = WEAPON_TO_INT[msg[1]]
|
||||
weapon = msg[2:]
|
||||
@ -229,6 +239,133 @@ async def get_char_data(
|
||||
with Path.open(path, encoding='utf8') as fp:
|
||||
return json.load(fp)
|
||||
|
||||
async def make_new_charinfo(
|
||||
uid: str,
|
||||
fake_name: str,
|
||||
):
|
||||
char_data = {}
|
||||
char_data['uid'] = uid
|
||||
char_data['nickName'] = 'test'
|
||||
char_data['avatarId'] = int(await name_to_avatar_id(fake_name))
|
||||
char_data['avatarName'] = fake_name
|
||||
char_data['avatarElement'] = avatarId2DamageType[str(char_data['avatarId'])]
|
||||
char_data['avatarRarity'] = str(avatarId2Rarity[str(char_data['avatarId'])])
|
||||
char_data['avatarPromotion'] = 6
|
||||
char_data['avatarLevel'] = 80
|
||||
char_data['avatarSkill'] = await get_skill_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['RelicInfo'] = []
|
||||
char_data['avatarEnName'] = avatarId2EnName[str(char_data['avatarId'])]
|
||||
char_data['rank'] = 0
|
||||
char_data['rankList'] = []
|
||||
char_data['baseAttributes'] = await get_baseAttributes(char_data['avatarId'])
|
||||
char_data['equipmentInfo'] = {}
|
||||
return char_data
|
||||
|
||||
async def get_baseAttributes(
|
||||
char_id: int,
|
||||
):
|
||||
# 处理基础属性
|
||||
base_attributes = {}
|
||||
avatar_promotion_base = AvatarPromotionConfig.Avatar[
|
||||
str(char_id)
|
||||
]['6']
|
||||
|
||||
# 攻击力
|
||||
base_attributes['attack'] = (
|
||||
avatar_promotion_base.AttackBase.Value
|
||||
+ avatar_promotion_base.AttackAdd.Value * (80 - 1)
|
||||
)
|
||||
# 防御力
|
||||
base_attributes['defence'] = (
|
||||
avatar_promotion_base.DefenceBase.Value
|
||||
+ avatar_promotion_base.DefenceAdd.Value * (80 - 1)
|
||||
)
|
||||
# 血量
|
||||
base_attributes['hp'] = (
|
||||
avatar_promotion_base.HPBase.Value
|
||||
+ avatar_promotion_base.HPAdd.Value * (80 - 1)
|
||||
)
|
||||
# 速度
|
||||
base_attributes['speed'] = avatar_promotion_base.SpeedBase.Value
|
||||
# 暴击率
|
||||
base_attributes[
|
||||
'CriticalChanceBase'
|
||||
] = avatar_promotion_base.CriticalChance.Value
|
||||
# 暴击伤害
|
||||
base_attributes[
|
||||
'CriticalDamageBase'
|
||||
] = avatar_promotion_base.CriticalDamage.Value
|
||||
# 嘲讽
|
||||
base_attributes['BaseAggro'] = avatar_promotion_base.BaseAggro.Value
|
||||
return base_attributes
|
||||
|
||||
async def get_attribute_list(
|
||||
char_id: int,
|
||||
):
|
||||
attribute_list = []
|
||||
for attributeid in [201, 202, 203, 204, 205, 206, 207, 208, 209, 210]:
|
||||
attribute_bonus_temp = {}
|
||||
attribute_bonus_temp['attributeBonusId'] = (
|
||||
char_id * 1000 + attributeid
|
||||
)
|
||||
attribute_bonus_temp['attributeBonusLevel'] = 1
|
||||
status_add = characterSkillTree[str(char_id)][
|
||||
str(attribute_bonus_temp['attributeBonusId'])
|
||||
]['levels'][0]['properties']
|
||||
attribute_bonus_temp['statusAdd'] = {}
|
||||
if status_add:
|
||||
for property_ in status_add:
|
||||
attribute_bonus_temp['statusAdd']['property'] = property_[
|
||||
'type'
|
||||
]
|
||||
attribute_bonus_temp['statusAdd']['name'] = Property2Name[
|
||||
property_['type']
|
||||
]
|
||||
attribute_bonus_temp['statusAdd']['value'] = property_[
|
||||
'value'
|
||||
]
|
||||
attribute_list.append(attribute_bonus_temp)
|
||||
return attribute_list
|
||||
|
||||
async def get_extra_list(
|
||||
char_id: int,
|
||||
):
|
||||
extra_list = []
|
||||
for extraid in [101, 102, 103]:
|
||||
extra_temp = {}
|
||||
extra_temp['extraAbilityId'] = (
|
||||
char_id * 1000 + extraid
|
||||
)
|
||||
extra_temp['extraAbilityLevel'] = 1
|
||||
extra_list.append(extra_temp)
|
||||
return extra_list
|
||||
|
||||
async def get_skill_list(
|
||||
char_id: int,
|
||||
):
|
||||
Skilllist = []
|
||||
for skillid in [1, 2, 3, 4, 7]:
|
||||
skill_temp = {}
|
||||
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
|
||||
if skillid == 1:
|
||||
skilllevel = 6
|
||||
if skillid == 7:
|
||||
skilllevel = 1
|
||||
skill_temp['skillLevel'] = skilllevel
|
||||
Skilllist.append(skill_temp)
|
||||
return Skilllist
|
||||
|
||||
async def get_rank_list(
|
||||
char_id: str,
|
||||
@ -243,14 +380,13 @@ async def get_rank_list(
|
||||
rank_temp.append(rankTemp)
|
||||
return rank_temp
|
||||
|
||||
|
||||
async def get_char(
|
||||
char_data: dict,
|
||||
weapon: Optional[str] = None,
|
||||
weapon_affix: Optional[int] = None,
|
||||
talent_num: Optional[int] = None,
|
||||
):
|
||||
if talent_num:
|
||||
if isinstance(talent_num, int):
|
||||
# 处理命座
|
||||
rank_temp = []
|
||||
char_data['rank'] = talent_num
|
||||
@ -261,7 +397,35 @@ async def get_char(
|
||||
rankTemp['rankName'] = rankId2Name[str(rank_id)]
|
||||
rank_temp.append(rankTemp)
|
||||
char_data['rankList'] = rank_temp
|
||||
if weapon:
|
||||
|
||||
# 处理命座中的 level_up_skills
|
||||
if char_data.get('rankList'):
|
||||
for rank_item in char_data['rankList']:
|
||||
rank_id = rank_item['rankId']
|
||||
level_up_skill = AvatarRankSkillUp[str(rank_id)]
|
||||
if level_up_skill:
|
||||
for item in level_up_skill:
|
||||
skill_id = item['id']
|
||||
skill_up_num = item['num']
|
||||
# 查找skill_id在不在avatarSkill中
|
||||
for index, skill_item in enumerate(
|
||||
char_data['avatarSkill']
|
||||
):
|
||||
if str(skill_id) == str(skill_item['skillId']):
|
||||
if skill_id[-1] == 1:
|
||||
skilllevel_max = 7
|
||||
else:
|
||||
skilllevel_max = 12
|
||||
skilllevel = min(
|
||||
skilllevel_max,
|
||||
char_data['avatarSkill'][index]['skillLevel'] + skill_up_num
|
||||
)
|
||||
char_data['avatarSkill'][index][
|
||||
'skillLevel'
|
||||
] = skilllevel
|
||||
break
|
||||
|
||||
if isinstance(weapon, str):
|
||||
# 处理武器
|
||||
equipmentid = await name_to_weapon_id(weapon)
|
||||
equipment_info = {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user