面板替换添加为拥有角色的无中生有

This commit is contained in:
a376148946 2023-09-19 16:37:53 +08:00 committed by qwerdvd
parent 69bf0435f2
commit b2c0426165
3 changed files with 177 additions and 21 deletions

View File

@ -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)

View File

@ -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):

View File

@ -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 = {}