dev
This commit is contained in:
@@ -150,10 +150,11 @@ class Character:
|
||||
def __init__(self, equVersion) -> None:
|
||||
self.equVersion = equVersion
|
||||
# self.equs = get_equ(self.equVersion)
|
||||
self.STR = 0
|
||||
self.INT = 0
|
||||
self.Spirit = 0
|
||||
self.Vitality = 0
|
||||
# 工会四维
|
||||
self.STR = 0 + 120
|
||||
self.INT = 0 + 120
|
||||
self.Spirit = 0 + 120
|
||||
self.Vitality = 0 + 120
|
||||
# 唤醒的情况下的基础数据
|
||||
self.AtkP = 0 + 65
|
||||
self.AtkM = 0 + 65
|
||||
@@ -555,18 +556,33 @@ class Character:
|
||||
suitInfo[suit]['count'] += 1
|
||||
else:
|
||||
suitInfo[suit]['point'] += partFusion.Point
|
||||
print(suitInfo)
|
||||
# 取得点数最高的套装
|
||||
max_point_suit = max((suit for suit in suitInfo if suitInfo[suit]['point'] > 0), key=lambda suit: suitInfo[suit]['point'], default=None)
|
||||
# 处理没有点数的老套装
|
||||
zero_point_suits = [suit for suit in suitInfo if suitInfo[suit]['point'] == 0]
|
||||
suits = zero_point_suits + ([max_point_suit] if max_point_suit is not None else [])
|
||||
suits_effect = []
|
||||
suitList = []
|
||||
res = []
|
||||
for suit in suits:
|
||||
if suitInfo[suit]['point'] == 0:
|
||||
suits_effect += [i.id for i in equs.get_suit_info(suit, 0, suitInfo[suit]['count'])]
|
||||
suitList += equs.get_suit_info(suit, 0, suitInfo[suit]['count'])
|
||||
# suits_effect += [i.id for i in equs.get_suit_info(suit, 0, suitInfo[suit]['count'])]
|
||||
else:
|
||||
suits_effect += [i.id for i in equs.get_suit_info(suit, suitInfo[suit]['point'], 0)]
|
||||
suitList += equs.get_suit_info(suit, suitInfo[suit]['point'], 0)
|
||||
# suits_effect += [i.id for i in equs.get_suit_info(suit, suitInfo[suit]['point'], 0)]
|
||||
temp = suitList[-1]
|
||||
res.append({
|
||||
'id': temp.id,
|
||||
'name': temp.name,
|
||||
'rarity': temp.rarity,
|
||||
'point': suitInfo[suit]['point'],
|
||||
'count': suitInfo[suit]['count'],
|
||||
'level': temp.level,
|
||||
'imageUrl': temp.imageUrl,
|
||||
'value': temp.value,
|
||||
})
|
||||
suits_effect = [i.id for i in suitList]
|
||||
for i in suits_effect:
|
||||
func = equs.funs.suit_func_list.get(str(i), None)
|
||||
suit = next((x for x in equs.suits if str(x.id) == str(i)), None)
|
||||
@@ -575,11 +591,15 @@ class Character:
|
||||
if suit is not None:
|
||||
filtered_dict = {k: v for k, v in suit.__dict__.items() if k[0].isupper()}
|
||||
self.SetStatus(**filtered_dict)
|
||||
return res
|
||||
|
||||
def calc_equs(self):
|
||||
"""计算装备基础效果和额外词条"""
|
||||
"""计算装备基础效果、附魔、贴膜"""
|
||||
effects = get_equipment(self.equVersion).funs
|
||||
for equ in [item.equInfo for item in filter(lambda x: x.equInfo is not None, self.charEquipInfo.values())]:
|
||||
for detail in [(item.equInfo,item.fusionInfo,item.enchant) for item in filter(lambda x: x.equInfo is not None, self.charEquipInfo.values())]:
|
||||
equ = detail[0]
|
||||
fusion = detail[1]
|
||||
enchat = detail[2]
|
||||
if equ is None:
|
||||
continue
|
||||
fun = effects.equ_func_list.get(str(equ.id), None)
|
||||
@@ -590,6 +610,19 @@ class Character:
|
||||
self.SetStatus(**filtered_dict)
|
||||
# 获取装备额外属性
|
||||
fun(self)
|
||||
# 附魔
|
||||
fun = effects.enchant_func_list.get(str(enchat), None)
|
||||
if fun is not None:
|
||||
fun(self)
|
||||
# 贴膜
|
||||
if fusion is None:
|
||||
continue
|
||||
fun = effects.equ_func_list.get(str(fusion.id), None)
|
||||
# 获取装备基础属性 并给角色设置(大写开头属性为角色属性)
|
||||
filtered_dict = {k: v for k, v in fusion.__dict__.items() if k[0].isupper()}
|
||||
self.SetStatus(**filtered_dict)
|
||||
# 获取装备额外属性
|
||||
fun(self)
|
||||
|
||||
def calc_basic(self):
|
||||
"""计算基础属性:防具精通、增幅、强化等"""
|
||||
@@ -660,7 +693,8 @@ class Character:
|
||||
# 部位效果计算
|
||||
self.calc_equs()
|
||||
# 计算套装基础效果
|
||||
self.calc_suits()
|
||||
suit = self.calc_suits()
|
||||
# print(suit)
|
||||
# effects = get_equipment(self.equVersion).funs
|
||||
# for effect in equ_effect:
|
||||
# func = effects.equ_func_list.get(str(effect), None)
|
||||
@@ -705,7 +739,34 @@ class Character:
|
||||
'damage': ratuio_equ_skill * i.data * 10,
|
||||
}
|
||||
)
|
||||
return {'skills': skillInfos, 'info': {k: v for k, v in self.__dict__.items() if k[0].isupper()}}
|
||||
attrs = []
|
||||
if self.输出类型 == '物理百分比':
|
||||
attrs.extend(['STR', 'AtkP'])
|
||||
if self.输出类型 == '魔法百分比':
|
||||
attrs.extend(['INT', 'AtkM'])
|
||||
if self.输出类型 == '物理固伤':
|
||||
attrs.extend(['STR', 'AtkI'])
|
||||
if self.输出类型 == '魔法固伤':
|
||||
attrs.extend(['INT', 'AtkI'])
|
||||
info = []
|
||||
attrs.extend(['Attack', 'AttackP', 'SkillAttack', 'ElementDB'])
|
||||
for attr in attrs:
|
||||
temp = getattr(CharacterInfo, attr)
|
||||
if attr.startswith('Atk'):
|
||||
info.append({
|
||||
'name':temp.name,
|
||||
'value':temp.value(getattr(self, attr)*getattr(self, f'P{attr}'))}
|
||||
)
|
||||
pass
|
||||
else:
|
||||
info.append(
|
||||
{
|
||||
'name': temp.name,
|
||||
'value': temp.value(getattr(self, attr)),
|
||||
}
|
||||
)
|
||||
pass
|
||||
return {'skills': skillInfos, 'info': info,"suits": suit}
|
||||
# 技能影响角色的属性,如属强、抗性等
|
||||
|
||||
def calc_damage_ration(self):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import importlib
|
||||
from database.models import EmblemData, Session, EquData, StoneData, SuitData, EnchantData
|
||||
from database.models import EmblemData, Session, EquData, StoneData, SuitData, EnchantData,JadeData
|
||||
from database.connect import get_db_engine as get_engine
|
||||
from functools import cache
|
||||
|
||||
|
||||
def parse_to_number_list(info: str, default: list[float] = [0]) -> list[float]:
|
||||
@@ -164,6 +163,19 @@ class Equipments:
|
||||
self.emblems.append(emblem)
|
||||
pass
|
||||
pass
|
||||
|
||||
def init_jades(self):
|
||||
"""从数据库中获取所有辟邪玉信息"""
|
||||
with Session(self.engine) as session:
|
||||
db_list = session.query(JadeData).all()
|
||||
for item in db_list:
|
||||
jade = {k: v for k, v in item.__dict__.items() if not k.startswith('_')}
|
||||
jade['position'] = [] if jade['itemType'] is None else jade['itemType'].split(',')
|
||||
jade['categorize'] = [] if jade['categorize'] is None else jade['categorize'].split(',')
|
||||
del jade['itemType']
|
||||
self.jades.append(jade)
|
||||
pass
|
||||
pass
|
||||
|
||||
def init_func(self):
|
||||
"""根据装备版本加载装备效果"""
|
||||
|
||||
@@ -33,32 +33,10 @@ class CharacterInfo(enum.Enum):
|
||||
AtkI = '独立攻击力', '/ui/UI_ProfileIcon_008.png', lambda x: round(x, 0)
|
||||
"""独立攻击力"""
|
||||
|
||||
ElementA: dict[str, float]
|
||||
# """属性攻击"""
|
||||
ElementDB = '攻击属性', '/ui/UI_ProfileIcon_009.png', lambda x: f'火({int(x['火'])})/光({int(x['光'])})/冰({int(x['冰'])})/暗({int(x['暗'])})'
|
||||
"""攻击属性"""
|
||||
|
||||
ElementDB0 = '火属性强化', '/ui/UI_ProfileIcon_022.png', lambda x: round(x, 0)
|
||||
|
||||
ElementR0 = '火属性抗性', '/ui/UI_ProfileIcon_023.png', lambda x: round(x, 0)
|
||||
|
||||
ElementDB1 = '冰属性强化', '/ui/UI_ProfileIcon_024.png', lambda x: round(x, 0)
|
||||
|
||||
ElementR1 = '冰属性抗性', '/ui/UI_ProfileIcon_025.png', lambda x: round(x, 0)
|
||||
|
||||
ElementDB2 = '光属性强化', '/ui/UI_ProfileIcon_026.png', lambda x: round(x, 0)
|
||||
|
||||
ElementR2 = '光属性抗性', '/ui/UI_ProfileIcon_027.png', lambda x: round(x, 0)
|
||||
|
||||
ElementDB3 = '暗属性强化', '/ui/UI_ProfileIcon_028.png', lambda x: round(x, 0)
|
||||
|
||||
ElementR3 = '暗属性抗性', '/ui/UI_ProfileIcon_029.png', lambda x: round(x, 0)
|
||||
|
||||
CriticalP = '物理暴击', '/ui/UI_ProfileIcon_011.png', lambda x: f'{format(x * 100, ".2f")}%'
|
||||
"""物理暴击"""
|
||||
|
||||
CriticalM = '魔法暴击', '/ui/UI_ProfileIcon_010.png', lambda x: f'{format(x * 100, ".2f")}%'
|
||||
"""魔法暴击"""
|
||||
|
||||
EquipmentSkillAttack = '技能攻击力增加', '/ui/UI_ProfileIcon_047.png', lambda x: f'{format(x * 100 - 100, ".2f")}%'
|
||||
SkillAttack = '技能攻击力增加', '/ui/UI_ProfileIcon_047.png', lambda x: f'{format(x * 100 - 100, ".2f")}%'
|
||||
"""技能攻击力"""
|
||||
|
||||
SpeedA = '攻击速度', '/ui/UI_ProfileIcon_012.png', lambda x: f'{format(x * 100, ".2f")}%'
|
||||
@@ -70,6 +48,12 @@ class CharacterInfo(enum.Enum):
|
||||
SpeedR = '施放速度', '/ui/UI_ProfileIcon_013.png', lambda x: f'{format(x * 100, ".2f")}%'
|
||||
"""施放速度"""
|
||||
|
||||
Attack = '攻击强化', '/ui/UI_ProfileIcon_015.png', lambda x: f'{format(x * 100, ".2f")}%'
|
||||
"""攻击强化"""
|
||||
|
||||
AttackP = '攻击强化%', '/ui/UI_ProfileIcon_015.png', lambda x: f'{format(x * 100 - 100, ".2f")}%'
|
||||
"""攻击强化%"""
|
||||
|
||||
# HitP : float
|
||||
# """命中率"""
|
||||
|
||||
|
||||
@@ -29,8 +29,6 @@ class CharacterEquipInfo:
|
||||
"""装备信息"""
|
||||
fusionInfo: Union['Equ', None]
|
||||
"""贴膜信息"""
|
||||
fusionInfo: Union['Equ', None]
|
||||
"""贴膜信息"""
|
||||
|
||||
def __init__(self, info={}, equVerison=0, part='') -> None:
|
||||
info["fusion"] = info.get("fusion", None)
|
||||
|
||||
Reference in New Issue
Block a user