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
|
desctexty = 115
|
||||||
for desctext in desclist:
|
for desctext in desclist:
|
||||||
desctexty = draw_text_by_line(
|
desctexty = draw_text_by_line(
|
||||||
weapon_bg,
|
weapon_bg, (210, desctexty), desctext, sr_font_24, '#F9F9F9', 370
|
||||||
(210, desctexty),
|
|
||||||
desctext,
|
|
||||||
sr_font_24,
|
|
||||||
'#F9F9F9',
|
|
||||||
370,
|
|
||||||
)
|
)
|
||||||
desctexty += 28
|
desctexty += 28
|
||||||
char_info.paste(weapon_bg, (0, 855), weapon_bg)
|
char_info.paste(weapon_bg, (0, 855), weapon_bg)
|
||||||
|
@ -220,7 +220,6 @@ class RiverFlowsinSpring(BaseWeapon):
|
|||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
class OnlySilenceRemains(BaseWeapon):
|
class OnlySilenceRemains(BaseWeapon):
|
||||||
weapon_base_attributes: Dict
|
weapon_base_attributes: Dict
|
||||||
|
|
||||||
@ -1658,7 +1657,6 @@ class Thisbodyisasword(BaseWeapon):
|
|||||||
|
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
# 如泥酣眠
|
# 如泥酣眠
|
||||||
class SleepLiketheDead(BaseWeapon):
|
class SleepLiketheDead(BaseWeapon):
|
||||||
weapon_base_attributes: Dict
|
weapon_base_attributes: Dict
|
||||||
@ -1667,7 +1665,7 @@ class SleepLiketheDead(BaseWeapon):
|
|||||||
super().__init__(weapon)
|
super().__init__(weapon)
|
||||||
|
|
||||||
async def check(self):
|
async def check(self):
|
||||||
# 当装备者的普攻或战技伤害未造成暴击时, 使自身暴击率提高36%
|
# 当装备者的普攻或战技伤害未造成暴击时,使自身暴击率提高36%
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def weapon_ability(
|
async def weapon_ability(
|
||||||
@ -1686,7 +1684,6 @@ class SleepLiketheDead(BaseWeapon):
|
|||||||
)
|
)
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
class Weapon:
|
class Weapon:
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, weapon: DamageInstanceWeapon):
|
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 .draw_char_img import draw_char_img
|
||||||
from ..utils.error_reply import CHAR_HINT
|
from ..utils.error_reply import CHAR_HINT
|
||||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
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 (
|
from ..utils.map.name_covert import (
|
||||||
name_to_avatar_id,
|
name_to_avatar_id,
|
||||||
name_to_weapon_id,
|
name_to_weapon_id,
|
||||||
@ -18,8 +18,17 @@ from ..utils.map.name_covert import (
|
|||||||
from ..utils.map.SR_MAP_PATH import (
|
from ..utils.map.SR_MAP_PATH import (
|
||||||
EquipmentID2Name,
|
EquipmentID2Name,
|
||||||
EquipmentID2Rarity,
|
EquipmentID2Rarity,
|
||||||
|
Property2Name,
|
||||||
|
avatarId2Rarity,
|
||||||
|
AvatarRankSkillUp,
|
||||||
rankId2Name,
|
rankId2Name,
|
||||||
|
characterSkillTree,
|
||||||
|
skillId2Effect,
|
||||||
|
skillId2Name,
|
||||||
|
skillId2AttackType,
|
||||||
avatarId2Name,
|
avatarId2Name,
|
||||||
|
avatarId2EnName,
|
||||||
|
avatarId2DamageType,
|
||||||
)
|
)
|
||||||
|
|
||||||
WEAPON_TO_INT = {
|
WEAPON_TO_INT = {
|
||||||
@ -101,17 +110,18 @@ async def get_char_args(
|
|||||||
if index == 0:
|
if index == 0:
|
||||||
fake_name, talent_num = await get_fake_char_str(part)
|
fake_name, talent_num = await get_fake_char_str(part)
|
||||||
# 判断是否开启fake_char
|
# 判断是否开启fake_char
|
||||||
char_data = await get_char_data(uid, fake_name)
|
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):
|
if isinstance(char_data, str):
|
||||||
return char_data
|
return char_data
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if '遗器' in part:
|
if '遗器' in part:
|
||||||
char_data = await get_fake_char_data(
|
char_data = await get_fake_char_data(char_data, part.replace('遗器', '').replace(changeuid, ''), changeuid)
|
||||||
char_data,
|
|
||||||
part.replace('遗器', '').replace(changeuid, ''),
|
|
||||||
changeuid,
|
|
||||||
)
|
|
||||||
if isinstance(char_data, str):
|
if isinstance(char_data, str):
|
||||||
return char_data
|
return char_data
|
||||||
else:
|
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]]:
|
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:
|
if '精' in msg and msg[1] in WEAPON_TO_INT:
|
||||||
weapon_affix = WEAPON_TO_INT[msg[1]]
|
weapon_affix = WEAPON_TO_INT[msg[1]]
|
||||||
weapon = msg[2:]
|
weapon = msg[2:]
|
||||||
@ -229,7 +239,134 @@ async def get_char_data(
|
|||||||
with Path.open(path, encoding='utf8') as fp:
|
with Path.open(path, encoding='utf8') as fp:
|
||||||
return json.load(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(
|
async def get_rank_list(
|
||||||
char_id: str,
|
char_id: str,
|
||||||
talent_num: int,
|
talent_num: int,
|
||||||
@ -243,14 +380,13 @@ async def get_rank_list(
|
|||||||
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: dict,
|
||||||
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 talent_num:
|
if isinstance(talent_num, int):
|
||||||
# 处理命座
|
# 处理命座
|
||||||
rank_temp = []
|
rank_temp = []
|
||||||
char_data['rank'] = talent_num
|
char_data['rank'] = talent_num
|
||||||
@ -261,7 +397,35 @@ async def get_char(
|
|||||||
rankTemp['rankName'] = rankId2Name[str(rank_id)]
|
rankTemp['rankName'] = rankId2Name[str(rank_id)]
|
||||||
rank_temp.append(rankTemp)
|
rank_temp.append(rankTemp)
|
||||||
char_data['rankList'] = rank_temp
|
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)
|
equipmentid = await name_to_weapon_id(weapon)
|
||||||
equipment_info = {}
|
equipment_info = {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user