diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index 8ecead25..ea9ce91d 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -1,6 +1,7 @@ from functools import cache import importlib from typing import Any, Literal, Mapping, Union +from uuid import uuid1 from core.basic.property import CharacterInfo from core.basic.skill import Skill @@ -342,6 +343,10 @@ class Character: """ if element not in self.ElementDB: raise ValueError(f'Invalid element: {element}') + if type == 0: + value = value * (1 + self.jade_effect.ElementIncrease) + if type == 1: + value = int(value * (1 + self.jade_effect.ElementIncrease)) self.ElementDB[element] += value pass @@ -371,14 +376,14 @@ class Character: if min <= skill.learnLv <= max and skill.damage and skill.learnLv not in exclude: skill.cdRecover += cd - def SetSkillRation(self, min=1, max=100, ratio=0 ,type = 0) -> None: + def SetSkillRation(self, min=1, max=100, ratio=0, type=0) -> None: """设置技能倍率 0 修改技能面板 1 不修改技能面板""" for skill in self.skills: if min <= skill.learnLv <= max and skill.damage: if type == 0: - skill.skillRation *= (1 + ratio) + skill.skillRation *= 1 + ratio else: - skill.skillDamage *= (1 + ratio) + skill.skillDamage *= 1 + ratio def GetSkillByName(self, name) -> Skill: """通过技能名获取技能""" @@ -402,12 +407,6 @@ class Character: for key in info['equips']: # 导入部位打造信息、装备信息、贴膜信息 self.charEquipInfo[key] = CharacterEquipInfo(info['equips'][key], self.equVersion, key) - """辟邪玉""" - self.jadeInfo = {} - for key in info.get('jades', {}): - self.jadeInfo[key] = info['jades'][key] - """时装""" - """杂项""" def getInfo(self): """返回到前端信息""" @@ -422,7 +421,7 @@ class Character: platinum = [] for skill in self.skills: # 白金 - if 15 <= skill.learnLv <= 70 and skill.learnLv not in [48,50]: + if 15 <= skill.learnLv <= 70 and skill.learnLv not in [48, 50]: platinum.append(skill.name) # 时装 if skill.learnLv <= 95: @@ -462,17 +461,19 @@ class Character: info['stones'] = stones info['enchants'] = equInfos.enchants info['emblems'] = equInfos.emblems - info["avatar"] = equInfos.funs.get_dress_list(skill_clothes) + info['avatar'] = equInfos.funs.get_dress_list(skill_clothes) info['jades'] = equInfos.jades for skill in platinum: - info['emblems'].append({ - 'id': skill, - 'fame':232, - 'position':["辅助装备", "魔法石"], - "detail": skill + " Lv+1" + " 四维 + 8", - "categorize": ["技能"], - "rarity": "白金", - }) + info['emblems'].append( + { + 'id': skill, + 'fame': 232, + 'position': ['辅助装备', '魔法石'], + 'detail': skill + ' Lv+1' + ' 四维 + 8', + 'categorize': ['技能'], + 'rarity': '白金', + } + ) return info def getBasicInos(self): @@ -576,16 +577,18 @@ class Character: 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, - }) + 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) @@ -600,7 +603,7 @@ class Character: def calc_equs(self): """计算装备基础效果、附魔、贴膜""" effects = get_equipment(self.equVersion).funs - for detail in [(item.equInfo,item.fusionInfo,item.enchant,item.emblem_0,item.emblem_1) for item in filter(lambda x: x.equInfo is not None, self.charEquipInfo.values())]: + for detail in [(item.equInfo, item.fusionInfo, item.enchant, item.emblem_0, item.emblem_1) for item in filter(lambda x: x.equInfo is not None, self.charEquipInfo.values())]: equ = detail[0] fusion = detail[1] enchat = detail[2] @@ -648,9 +651,9 @@ class Character: def calc_avatar(self, avatar: dict): """计算时装效果""" equ = get_equipment(self.equVersion) - dress = {key: value for key, value in avatar.items() if key in ['头发', '帽子', '脸部','胸部','上衣','腰带','下装','鞋']} - equ.funs.calc_dress_effect(dress,self) - avatarElse = {key: value for key, value in avatar.items() if key not in ['头发', '帽子', '脸部','胸部','上衣','腰带','下装','鞋']} + dress = {key: value for key, value in avatar.items() if key in ['头发', '帽子', '脸部', '胸部', '上衣', '腰带', '下装', '鞋']} + equ.funs.calc_dress_effect(dress, self) + avatarElse = {key: value for key, value in avatar.items() if key not in ['头发', '帽子', '脸部', '胸部', '上衣', '腰带', '下装', '鞋']} for key in avatarElse: value = avatarElse[key].get('enchant', None) emblem_0 = avatarElse[key].get('emblem_0', None) @@ -721,8 +724,14 @@ class Character: pass pass - def calc_jade(self,jade): + def calc_jade(self, jades): """计算辟邪玉效果""" + funs = get_equipment(self.equVersion).funs + for key in jades: + jade = jades[key] + fun = funs.jade_func_list.get(str(jade.get('id',0)), None) + if fun is not None: + fun(self,jade.get('value', 0)) pass def calc(self, setInfo: dict[str, dict]): @@ -799,10 +808,7 @@ class Character: 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}'))} - ) + info.append({'name': temp.name, 'value': temp.value(getattr(self, attr) * getattr(self, f'P{attr}'))}) pass else: info.append( @@ -812,7 +818,12 @@ class Character: } ) pass - return {'skills': skillInfos, 'info': info,"suits": suit} + return { + 'uuid': uuid1().hex, + 'skills': skillInfos, + 'info': info, + 'suits': suit, + } # 技能影响角色的属性,如属强、抗性等 def calc_damage_ration(self): @@ -841,7 +852,7 @@ class Character: # BUFF系数 ratio_5 = self.buff # 技攻系数 - ratio_6 = self.SkillAttack + self.jade_effect.SkillAttack + ratio_6 = self.SkillAttack *( self.jade_effect.SkillAttack + 1) # 攻击强化 ratio_7 = 1 + self.Attack * (self.AttackP + self.jade_effect.AttackP) # 防御系数,暂定145沙袋防御 diff --git a/backend/core/basic/skill.py b/backend/core/basic/skill.py index b128cf6a..2a7d7a44 100644 --- a/backend/core/basic/skill.py +++ b/backend/core/basic/skill.py @@ -115,7 +115,10 @@ class Skill: def _apply_association(self, type, old, new, data, skills, exceptSkills ): if type.startswith('$*'): - value = (1 + data[new] / 100) / (1 + data[old] / 100) + if 'cdReduce' in type: + value = (1 - data[new] / 100) / (1 - data[old] / 100) + else: + value = (1 + data[new] / 100) / (1 + data[old] / 100) eval(f'self.char.SetStatus({type[2:]}={value})') elif type.startswith('$+'): value = data[new] / 100 - data[old] / 100 @@ -132,7 +135,10 @@ class Skill: def _update_skill_attribute(self,skill, type, old, new, data): if type.startswith('*'): - setattr(skill, type[1:], getattr(skill, type[1:]) * (1 + data[new] / 100) / (1 + data[old] / 100)) + if 'cdReduce' in type: + setattr(skill, type[1:], getattr(skill, type[1:]) * (1 - data[new] / 100) / (1 - data[old] / 100)) + else: + setattr(skill, type[1:], getattr(skill, type[1:]) * (1 + data[new] / 100) / (1 + data[old] / 100)) elif type.startswith('+'): setattr(skill, type[1:], getattr(skill, type[1:]) + data[new] / 100 - data[old] / 100) diff --git a/backend/core/character/GF/gunner_female/spitfire_female.py b/backend/core/character/GF/gunner_female/spitfire_female.py index 46f3fd85..9c0d7bb1 100644 --- a/backend/core/character/GF/gunner_female/spitfire_female.py +++ b/backend/core/character/GF/gunner_female/spitfire_female.py @@ -172,6 +172,11 @@ class Skill9(ActiveSkill): data0 = [0, 1034, 1200, 1364, 1528, 1693, 1857, 2021, 2187, 2352, 2516, 2682, 2846, 3010, 3175, 3339, 3505, 3671, 3835, 4000, 4164]# noqa: E501 hit0 = 1 + def getSkillCD(self): + if self.char.charEquipInfo['武器'].equInfo.itemDetailType == '手弩': + return 0.115 + return 0.14 + # G-18C冰冻手雷 G-18C 빙결류탄 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/202edb928046f4fa6dedf6337377efd5?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 class Skill10(ActiveSkill): diff --git a/backend/core/equipment/version_0/jade.py b/backend/core/equipment/version_0/jade.py index d0bb47b7..7febbf22 100644 --- a/backend/core/equipment/version_0/jade.py +++ b/backend/core/equipment/version_0/jade.py @@ -2,26 +2,19 @@ from core.basic.character import Character jade_func_list = {} -for i in range(0,20): - try: - if i not in jade_func_list.keys(): - jade_func_list[i] = eval(f'jade_{i}') - except Exception: - pass - def jade_0(char: Character = {}, value=0): pass def jade_1(char: Character = {}, value=0): - char.SetStatus(SkillAttack=value/100) + char.jade_effect.SkillAttack += value/100 def jade_2(char: Character = {}, value=0): - char.SetStatus(AttackP=value/100) + char.jade_effect.AttackP += value/100 pass def jade_3(char: Character = {}, value=0): - char.ElementIncrease += value/100 + char.jade_effect.ElementIncrease += value/100 pass def jade_4(char: Character = {}, value=0): @@ -123,14 +116,12 @@ def jade_12(char: Character = {}, value=0): # char.攻击速度增加(value/100) -# for i in range(26201, 26210): -# try: -# if i not in jade_func_list.keys(): -# jade_func_list[i] = eval('jade_{}'.format(i)) -# sorted(jade_func_list, key=lambda x: eval(x(text=True))[6]) -# except Exception: -# pass - +for i in range(0,20): + try: + if str(i) not in jade_func_list.keys(): + jade_func_list[str(i)] = eval(f'jade_{i}') + except Exception: + pass # def get_jadefunc_by_id(id): # return jade_func_list.get(int(id), jade_26000) diff --git a/backend/dataFiles/dcalc_0.db b/backend/dataFiles/dcalc_0.db index 4160b422..96ec5272 100644 Binary files a/backend/dataFiles/dcalc_0.db and b/backend/dataFiles/dcalc_0.db differ diff --git a/frontend/src/api/calc/type.ts b/frontend/src/api/calc/type.ts index 699b049e..dc9c8a84 100644 --- a/frontend/src/api/calc/type.ts +++ b/frontend/src/api/calc/type.ts @@ -1,4 +1,5 @@ export interface IResult { + uuid: string skills: IResultSkill[] info:IResultUserInfo[] suits:IResultSuit[] diff --git a/frontend/src/pages/Character/Forge/components/Equipments.vue b/frontend/src/pages/Character/Forge/components/Equipments.vue index ddc2d355..0c4409ef 100644 --- a/frontend/src/pages/Character/Forge/components/Equipments.vue +++ b/frontend/src/pages/Character/Forge/components/Equipments.vue @@ -130,7 +130,7 @@ export default defineComponent({ return ( <>