diff --git a/README.md b/README.md index 7ab8b309..a8f6d759 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ ## 运行 +### clone + +git clone --single-branch --branch master https://gitee.com/dnftools/dcalc.git + ### frontend 前置条件:node 18+ diff --git a/backend/1.py b/backend/1.py new file mode 100644 index 00000000..238a7db6 --- /dev/null +++ b/backend/1.py @@ -0,0 +1,29 @@ +from database.connect import get_db_engine as get_engine +from database.models import Session, EquData, SuitData + +engine = get_engine('0') + +with Session(engine) as session: + db_list = session.query(SuitData).all() + +res = '' + +curSuit = '' + +for i in db_list: + if i.suitId != curSuit: + curSuit = i.suitId + res += f''' +# endregion +# region {i.suitName} + ''' + res += f''' +def suit_{i.id}(char: Character): + \''' + {i.value} + \''' + pass + ''' + + with open('/Users/imelon/Desktop/Code/dnf/dcalc/backend/output.py', 'w') as file: + file.write(res) \ No newline at end of file diff --git a/backend/api/main.py b/backend/api/main.py index eef7692d..658aaf60 100644 --- a/backend/api/main.py +++ b/backend/api/main.py @@ -1,8 +1,8 @@ from fastapi import APIRouter from api.routes import info +from api.routes import calc api_router = APIRouter() api_router.include_router(info.router,prefix="/api",tags=["info"]) - - +api_router.include_router(calc.router,prefix="/api",tags=["calc"]) diff --git a/backend/api/routes/calc.py b/backend/api/routes/calc.py new file mode 100644 index 00000000..cc8b4a0f --- /dev/null +++ b/backend/api/routes/calc.py @@ -0,0 +1,17 @@ +from api.core.Auth import createToken +from api.core.Gzip import register_gzip_request +import json +from fastapi import APIRouter, Body,Request +from api.core.Response import Return, response +from api.core.Redis import get_redis_info +from api.dp import RedisDep,AltersDep +from core.basic.character import createCharacter + +router = APIRouter() + +register_gzip_request(router) + +@router.post('/calc') +async def calc(request: Request,state:AltersDep,config=Body(None)): + character = createCharacter(state.alter, state.equVersion) + return response(data=character.calc(config)) \ No newline at end of file diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index 865beddd..c4cef61a 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -5,7 +5,8 @@ from typing import Literal from core.basic.property import CharacterInfo from core.basic.skill import Skill -from core.basic.equipment import get_equipment,EquEffect +from core.basic.equipment import get_equipment, EquEffect,Equ + # from core.basic.equipment import equipments # from core.basic.skill import Skill, ActiveSkill, PassiveSkill from .formula import 获取基础属性 @@ -47,6 +48,9 @@ class Character: ElementA: dict[str, float] """属性攻击""" + ElementIncrease:float + """属性增幅""" + ElementDB: dict[str, float] """属性强化数值""" @@ -93,15 +97,17 @@ class Character: # endregion - skills: list["Skill"] = [] + skills: list['Skill'] = [] # """技能列表""" - skills_dict: dict[str, "Skill"] = {} + skills_dict: dict[str, 'Skill'] = {} # """技能名字对应技能""" equVersion: str = '0' """装备版本""" - charEquipInfo: dict[str, "CharacterEquipInfo"] + charEquipInfo: dict[str, 'CharacterEquipInfo'] """装备打造信息""" - equ_effect:list["EquEffect"] = [] + equs: dict[str, 'Equ'] + """装备列表""" + equ_effect: list['EquEffect'] = [] """装备效果列表""" # region 角色属性 @@ -180,6 +186,8 @@ class Character: self.BufferP = 1.0 self.Attack = 0 self.AttackP = 1.0 + self.ElementIncrease = 0 + self.equs = {} pass # region 角色属性设置 @@ -292,7 +300,7 @@ class Character: self.BufferP += 增益量P + kwargs.get('BufferP', 0) pass - def AddSkillLv(self, min, max, lv, type=-1) -> None: + def AddSkillLv(self, min:int, max:int, lv:int, type=-1) -> None: """ 增加技能等级 type: -1 全部, 0 被动, 1 主动 @@ -302,26 +310,26 @@ class Character: if type == -1 or skill.type == type: skill.AddLv(lv, self) - def SetSkillCD(self, min=1, max=99, cd=0) -> None: + def SetSkillCD(self, min=1, max=100, cd=0, exclude=[50, 85, 100]) -> None: """ 设置技能CD type: -1 全部, 0 被动, 1 主动 """ for skill in self.skills: - if min <= skill.requiredLv <= max and skill.damage: + if min <= skill.requiredLv <= max and skill.damage and skill.requiredLv not in exclude: skill.CDR *= 1 - cd def GetSkillByName(self, name) -> Skill: """通过技能名获取技能""" - return self.skills_dict.get(name,None) + return self.skills_dict.get(name, None) - def GetSkillByID(self,id:str) -> Skill: - skill = list(filter(lambda x:str(x.id) == id,self.skills)) + def GetSkillByID(self, id: str) -> Skill: + skill = list(filter(lambda x: str(x.id) == id, self.skills)) """通过技能ID获取技能""" return skill[0] if len(skill) > 0 else None @cache - def GetSkillNames(self, type: Literal['active', 'passive', 'all'] = 'all' , damage:Literal[True,False,'all'] = 'all') -> list[str]: + def GetSkillNames(self, type: Literal['active', 'passive', 'all'] = 'all', damage: Literal[True, False, 'all'] = 'all') -> list[str]: """获取技能名字""" return [skill.name for skill in self.skills if (type == 'all' or skill.type == type) and (damage == 'all' or skill.damage == damage)] @@ -362,14 +370,14 @@ class Character: 'icon': skill.icon, 'type': skill.type, # 'SPCost': skill.SPCost, - "learnLv": skill.learnLv, - "masterLv": skill.masterLv, - "maxLearnLv":skill.calculate_lv(), - "maxLv": skill.maxLv, + 'learnLv': skill.learnLv, + 'masterLv': skill.masterLv, + 'maxLearnLv': skill.calculate_lv(), + 'maxLv': skill.maxLv, # 'TPCost': 0 if not skill.hasTP else skill.TPCost, # "masterTPLv":0 if not skill.hasTP else skill.masterTPLv, # 'maxTPLv': 0 if not skill.hasTP else skill.TPLearnMax, - 'position':skill.position + 'position': skill.position, } ) info['skills'] = skillInfo @@ -497,7 +505,24 @@ class Character: # self.SetDetail(setInfo) # 角色基础属性 self.SetBaseStatus() - return + suitInfo = {} + equs = get_equipment(self.equVersion) + # 设置装备和获取对应的套装属性 + for part in self.charEquipInfo.keys(): + # 当前部位的打造 + cur = self.charEquipInfo[part] + # 当前部位适用调试后的属性 + partEqu = equs.equ_dict.get(cur.id).adapt(cur.adaptation) + # 设置当前部位的装备 + self.equs[part] = equs.equ_dict.get(cur.id) + # 套装属性设置 + for suit in partEqu.suit: + suitInfo[suit] = partEqu.Point + suitInfo.get(suit, 0) + for suit in suitInfo: + print(equs.get_suit_info(suit, suitInfo[suit])[0].id) + skill = self.GetSkillByName('G-35L感电手雷') + print(skill.getSkillDate(skill.lv),skill.skillDamage,skill.skillRation) + return # 技能影响角色的属性,如属强、抗性等 for skill in self.skills: skill.effect(self) diff --git a/backend/core/basic/equipment.py b/backend/core/basic/equipment.py index 0c93f193..b8deb2b6 100644 --- a/backend/core/basic/equipment.py +++ b/backend/core/basic/equipment.py @@ -13,6 +13,7 @@ class Equ: rarity: str itemType: str itemDetailType: str + suit: list[str] Point: list[float] | float categorize: str imageUrl: str @@ -85,7 +86,11 @@ class Equipments: max_adaptation = 0 item.id = str(item.id) for attr in keys: - value = parse_to_number_list(getattr(item, attr)) + if attr == 'suit': + value = parse_to_number_list(getattr(item, attr), []) + value = [str(int(i)) for i in value] + else: + value = parse_to_number_list(getattr(item, attr)) max_adaptation = max(max_adaptation, len(value) - 1) setattr(item, attr, value) equ_dict = {k: v for k, v in item.__dict__.items() if not k.startswith('_')} @@ -109,6 +114,8 @@ class Equipments: 新套装只需要传入suitID和point即可,count默认为0\n 老套装需要传入suitID和count即可,point默认为0 """ + if suitId not in self.suit_dict: + return [] # 先筛选出点数小于等于point和数量小于等于count的套装 suits: list[Suit] = [suit for suit in self.suit_dict[str(suitId)] if suit.point <= point and suit.count <= count] result: dict[int, Suit] = {} diff --git a/backend/core/basic/roleinfo.py b/backend/core/basic/roleinfo.py index bc7e8857..5b40ce94 100644 --- a/backend/core/basic/roleinfo.py +++ b/backend/core/basic/roleinfo.py @@ -89,7 +89,7 @@ class CharacterAttributes(Enum): AttackP = '攻击强化%' -mapping = {value: key for key, value in CharacterAttributes.__members__.items()} +mapping = {value.value : key for key, value in CharacterAttributes.__members__.items()} def get_key_by_value(value: str) -> str: diff --git a/backend/core/basic/skill.py b/backend/core/basic/skill.py index b9173964..fe3e33b4 100644 --- a/backend/core/basic/skill.py +++ b/backend/core/basic/skill.py @@ -97,7 +97,7 @@ class Skill: def effect(self, old: int, new: int): for assoc in self.associate: type = assoc.get('type', '*skillRation') - skills = assoc.get('skills', 'all') + skills = assoc.get('skills', '*') data = assoc.get('data', [0] * self.maxLv) if type[0] not in ['*', '+', '$']: if self.precondition(): diff --git a/backend/core/character/GF/gunner_female/spitfire_female.py b/backend/core/character/GF/gunner_female/spitfire_female.py index 6e472a9c..8166378d 100644 --- a/backend/core/character/GF/gunner_female/spitfire_female.py +++ b/backend/core/character/GF/gunner_female/spitfire_female.py @@ -95,7 +95,7 @@ class Skill5(PassiveSkill): data0 = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200] # noqa: E501 - associate = [{'type': '*skillRation', 'data': data0, 'skills': ['G-14手雷']}] + associate = [{'type': '*skillRation', 'data': data0, 'skills': ['G-14手雷','G-35L感电手雷','G-18C冰冻手雷']}] # M18阔剑地雷 M18 클레이모어 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/2ff50c35efcf0f287c4c418c8454da48?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -194,8 +194,6 @@ class Skill11(ActiveSkill): data4 = [0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60]# noqa: E501 data5 = [0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60]# noqa: E501 - def effect(self, old , new): - pass # 聚合弹 버스터 샷 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/3fb8395ae3b81bd608e0c4223a8eb534?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -211,8 +209,6 @@ class Skill12(ActiveSkill): data0 = [0, 24425, 26904, 29382, 31860, 34337, 36818, 39294, 41772, 44252, 46730, 49208, 51684, 54165, 56642, 59120, 61598, 64077, 66555, 69032, 71510, 73989, 76467, 78944, 81422, 83903, 86379, 88857, 91334, 93815, 96291, 98769, 101247, 103727, 106205, 108681, 111159, 113639, 116117, 118595, 121071, 123552, 126029, 128507, 130986, 133464, 135942, 138419, 140900, 143376, 145854, 148331, 150812, 153288, 155766, 158244, 160724, 163202, 165678, 168156, 170636, 173114, 175592, 178068, 180549, 183026, 185504, 187982, 190461, 192939, 195416]# noqa: E501 - def effect(self, old , new): - pass # 凝固汽油弹 네이팜 탄 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/1803b6a67047cafb9e289b4f33cc507b?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -233,8 +229,6 @@ class Skill13(ActiveSkill): data3 = [0, 129, 137, 152, 162, 177, 188, 203, 213, 228, 239, 252, 267, 278, 293, 303, 318, 329, 344, 353, 368, 380, 393, 408, 419, 434, 444, 458, 468, 483, 497, 509, 522, 534, 551, 560, 573, 584, 599, 612, 624, 638, 650, 663, 674, 689, 702, 714, 728, 740, 753, 765, 776, 789, 801, 818, 830, 843, 855, 869, 881, 891, 905, 917, 933, 944, 959, 971, 984, 995, 1007]# noqa: E501 data4 = [0, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120]# noqa: E501 - def effect(self, old , new): - pass # 镭射狙击 록 온 서포트 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/845e0ce3235e19f60cc82a082d072cba?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -255,8 +249,6 @@ class Skill14(ActiveSkill): data3 = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]# noqa: E501 data4 = [0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]# noqa: E501 - def effect(self, old , new): - pass # 弹药强化 병기강화 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/b89c9ab317bc0a443f6497b7cca2f6a8?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -271,8 +263,8 @@ class Skill15(PassiveSkill): data0 = [0, 12, 13.5, 15, 16.5, 18, 19.5, 21, 22.5, 24, 25.5, 27, 28.5, 30, 31.5, 33, 34.5, 36, 37.5, 39, 40.5, 42, 43.5, 45, 46.5, 48, 49.5, 51, 52.5, 54, 55.5, 57, 58.5, 60, 61.5, 63, 64.5, 66, 67.5, 69, 70.5, 72, 73.5, 75, 76.5, 78, 79.5, 81, 82.5, 84, 85.5]# noqa: E501 data1 = [0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]# noqa: E501 - def effect(self, old , new): - pass + associate = [{'type': '*skillRation', 'data': data0}] + # EMP磁暴 EMP 스톰 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/2c9d9a36c8401bddff6cdb80fab8dc24?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -293,8 +285,6 @@ class Skill16(ActiveSkill): data3 = [0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]# noqa: E501 data4 = [0, 21013, 25886, 30758, 35632, 40504, 45376, 50249, 55123, 59995, 64867, 69741, 74613, 79486, 84358, 89232, 94104, 98977, 103851, 108723, 113595, 118467, 123341, 128214, 133086, 137958, 142832, 147704, 152577, 157451, 162323, 167195, 172068, 176942, 181814, 186686, 191560, 196432, 201305, 206177, 211051, 215923, 220796, 225670, 230542, 235414, 240286, 245160, 250033, 254905, 259777]# noqa: E501 - def effect(self, old , new): - pass # G-61重力手雷 G-61 중력류탄 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/e0daa922b19cdc35de879e938361464e?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -316,8 +306,6 @@ class Skill17(ActiveSkill): data4 = [0, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120]# noqa: E501 data5 = [0, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120]# noqa: E501 - def effect(self, old , new): - pass # 超真空弹 : 切利 초진공탄 : 첼리 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/1bf9711f3f15865e38d7dce51c6b5a8c?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -339,8 +327,6 @@ class Skill18(ActiveSkill): data4 = [0, 39519, 43530, 47537, 51548, 55557, 59565, 63575, 67584, 71594, 75602, 79611, 83622, 87632, 91640, 95649, 99659, 103668, 107676, 111686, 115697, 119706, 123714, 127724, 131733, 135741, 139751, 143760, 147771, 151778, 155789, 159798, 163808, 167816, 171825, 175835, 179846, 183852, 187863, 191873, 195882, 199890, 203900, 207909, 211917, 215927, 219938, 223947, 227955, 231965, 235974]# noqa: E501 data5 = [0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]# noqa: E501 - def effect(self, old , new): - pass # 制空掌握 증명의 열쇠 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/f45301a5590cccefbe0becf2f8d029f5?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -354,8 +340,7 @@ class Skill19(PassiveSkill): data0 = [0, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118]# noqa: E501 - def effect(self, old , new): - pass + associate = [{'type': '*skillRation', 'data': data0}] # 开火 오픈 파이어 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/9ceb0c55f40f1fc0fe0fcc65c8fee3a0?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -374,8 +359,6 @@ class Skill20(ActiveSkill): data1 = [0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]# noqa: E501 data2 = [0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]# noqa: E501 - def effect(self, old , new): - pass # 光子霰雷发射器 포토빌라이저 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/3736fe00a26b0086c23db9a4426a5641?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -394,8 +377,6 @@ class Skill21(ActiveSkill): data1 = [0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]# noqa: E501 data2 = [0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]# noqa: E501 - def effect(self, old , new): - pass # 决战之日 디-데이 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/13a759aad5bb7fb7f08fae8f88c1cdbb?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -412,8 +393,6 @@ class Skill22(ActiveSkill): data0 = [0, 5644, 6954, 8263, 9573, 10881, 12190, 13500, 14808, 16117, 17427, 18736, 20044, 21354, 22664, 23973, 25281, 26591, 27900, 29208, 30518, 31827, 33137, 34445, 35754, 37064, 38373, 39681, 40991, 42301, 43608, 44918, 46228, 47537, 48845, 50155, 51464, 52772, 54082, 55391, 56701, 58009, 59318, 60628, 61938, 63245, 64555, 65865, 67172, 68482, 69792]# noqa: E501 - def effect(self, old , new): - pass # 单兵推进器-02X 니트로 모터-02X # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/34e1bda921012f6018709f1c1a12b04d?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -429,8 +408,8 @@ class Skill23(PassiveSkill): data1 = [0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]# noqa: E501 data2 = [0, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120]# noqa: E501 - def effect(self, old , new): - pass + associate = [{'type': '*skillRation', 'data': data0}] + # 空袭战略 스탠바이-레디 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/c591d1827cfbe224031c704e21d07932?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -448,8 +427,6 @@ class Skill24(ActiveSkill): data0 = [0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]# noqa: E501 data1 = [0, 95173, 104828, 114483, 124139, 133794, 143449, 153104, 162760, 172415, 182070, 191726, 201380, 211036, 220691, 230347, 240001, 249657, 259313, 268967, 278623, 288278, 297933, 307588, 317244, 326899, 336554, 346210, 355865, 365520, 375175, 384831, 394486, 404141, 413796, 423452, 433107, 442762, 452418, 462072, 471728, 481383, 491038, 500693, 510349, 520004, 529659, 539315, 548970, 558625, 568280]# noqa: E501 - def effect(self, old , new): - pass # 终解·制空霸权 데피니트 솔루션 # https://api.neople.co.kr/df/skills/944b9aab492c15a8474f96947ceeb9e4/8ad90fd01b5844edd692fff54d9f74e7?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 @@ -469,8 +446,6 @@ class Skill25(ActiveSkill): data2 = [0, 93290, 114923, 136555, 158188, 179822, 201454, 223087, 244719, 266352, 287984, 309618, 331251, 352883, 374515, 396148, 417780, 439414, 461047, 482679, 504312, 525944, 547578, 569211, 590843, 612475, 634108, 655740, 677374, 699007, 720639, 742272, 763904, 785537, 807171, 828803, 850436, 872068, 893700, 915334, 936967, 958599, 980232, 1001864, 1023497, 1045131, 1066763, 1088396, 1110028, 1131660, 1153293]# noqa: E501 data3 = [0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]# noqa: E501 - def effect(self, old , new): - pass class classChange(Character): @@ -491,6 +466,10 @@ class classChange(Character): self.防具类型 = '皮甲' self.buff = 1.84 + self.角色 = '神枪手(女)' + + self.职业 = '弹药专家' + self.load_skills() def load_skills(self): diff --git a/backend/core/equipment/version_0/__init__.py b/backend/core/equipment/version_0/__init__.py index e69de29b..691cdbaa 100644 --- a/backend/core/equipment/version_0/__init__.py +++ b/backend/core/equipment/version_0/__init__.py @@ -0,0 +1,8 @@ +from .suit import suit_func_list +from .jade import jade_func_list + +options = [ + {'id': 1, 'name': '龙战八荒,', 'options': ['BUFF OFF', 'BUFF ON', '期望']}, + {'id': 2, 'name': '混沌净化', 'options': ['净化', '堕落']}, + ] + diff --git a/backend/core/equipment/version_0/equipment.py b/backend/core/equipment/version_0/equipment.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/core/equipment/version_0/jade.py b/backend/core/equipment/version_0/jade.py new file mode 100644 index 00000000..2e0f9f9d --- /dev/null +++ b/backend/core/equipment/version_0/jade.py @@ -0,0 +1,151 @@ +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(SkillDamage=value/100) + +def jade_2(char: Character = {}, value=0): + char.SetStatus(AttackP=value/100) + pass + +def jade_3(char: Character = {}, value=0): + char.ElementIncrease += value/100 + pass + +def jade_4(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(10, 15, 1) + pass + + +def jade_5(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(20, 25, 1) + pass + + +def jade_6(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(30, 35, 1) + pass + +def jade_7(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(40, 45, 1) + pass + +def jade_8(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(55, 60, 1) + pass + +def jade_9(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(65, 70, 1) + pass + +def jade_10(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(75, 80, 1) + pass + +def jade_11(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(50, 50, 1) + pass + +def jade_12(char: Character = {}, value=0): + if value > 0: + char.AddSkillLv(85, 85, 1) + pass + + +# # 辟邪玉效果id范围 26001~26999 +# for i in range(26001, 26206): +# try: +# if i not in jade_func_list.keys(): +# jade_func_list[i] = eval('jade_{}'.format(i)) +# except Exception: +# pass + + +# def jade_26201(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -25, 25, '', 1, 'Lv30 Buff技能力智增加',1)" +# char.辅助属性加成(buff固定力智=value, 百分比buff量=value / 1000) + + +# def jade_26202(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -5, 5, '%', 0.1, 'Lv30 Buff技能力智增加%',1)" +# char.辅助属性加成(buff百分比力智=value / 100, 百分比buff量=value / 200) + + +# def jade_26203(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -5, 5, '', 1, 'Lv30 Buff技能三攻增加',1)" +# char.辅助属性加成(buff固定三攻=value, 百分比buff量=value / 200) + + +# def jade_26204(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -5, 5, '%', 0.1, 'Lv30 Buff技能三攻增加%',1)" +# char.辅助属性加成(buff百分比三攻=value / 100, 百分比buff量=value / 200) + + +# def jade_26205(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -100, 100, '', 1, 'Lv50 主动技能力智增加',1)" +# char.辅助属性加成(觉醒固定力智=value, 百分比buff量=value / 4000) + + +# def jade_26206(char=CharacterProperty, text=False, value=0): +# if text: +# return "(76, -5, 5, '%', 0.1, 'Lv50 主动技能力智增加%',1)" +# char.辅助属性加成(觉醒百分比力智=value/100, 百分比buff量=value / 200) + + +# def jade_26207(char={}, text=False, value=0): +# if text: +# return "(55, -5, 5, '%', 0.1, '攻击、移动、施放速度',1)" +# 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 + + +# def get_jadefunc_by_id(id): +# return jade_func_list.get(int(id), jade_26000) + + +# def get_jade_setinfo(): +# infolist = [] +# for i in jade_func_list.keys(): +# data = {} +# data['id'] = i +# info = eval(jade_func_list[i](text=True)) +# num = 0 +# for k in index: +# data[k] = info[num] +# num += 1 +# infolist.append(data) +# infolist = sorted(infolist, key=lambda x: x["order"]) +# return infolist \ No newline at end of file diff --git a/backend/core/equipment/version_0/suit.py b/backend/core/equipment/version_0/suit.py index bc0a2c54..20389746 100644 --- a/backend/core/equipment/version_0/suit.py +++ b/backend/core/equipment/version_0/suit.py @@ -1,6 +1,15 @@ from core.basic.character import Character from core.basic.equipment import EquEffect +suit_func_list = {} + +for i in range(0, 300): + try: + if i not in suit_func_list.keys(): + suit_func_list[i] = eval(f'suit_{i}') + except Exception: + pass + # region 潜影暗袭 @@ -111,7 +120,7 @@ def suit_12(char: Character): - 强制中断角色动作(觉醒技能除外) - 所有速度 +5%,效果持续5秒(最多叠加3次) """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -124,7 +133,7 @@ def suit_13(char: Character): - 强制中断角色动作(觉醒技能除外) - 所有速度 +5%,效果持续5秒(最多叠加3次) """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -137,7 +146,7 @@ def suit_14(char: Character): - 强制中断角色动作(觉醒技能除外) - 所有速度 +5%,效果持续5秒(最多叠加3次) """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -150,7 +159,7 @@ def suit_15(char: Character): - 强制中断角色动作(觉醒技能除外) - 所有速度 +5%,效果持续5秒(最多叠加3次) """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -170,7 +179,7 @@ def suit_16(char: Character): - 追击范围:600px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -190,7 +199,7 @@ def suit_17(char: Character): - 追击范围:600px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -210,7 +219,7 @@ def suit_18(char: Character): - 追击范围:600px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -230,7 +239,7 @@ def suit_19(char: Character): - 追击范围:600px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -250,7 +259,7 @@ def suit_20(char: Character): - 追击范围:600px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -269,7 +278,7 @@ def suit_21(char: Character): - 追击范围:800px - 冷却时间:8秒 """ - char.SetStatus(SpeedA=0.05 * 3, SpeedM=0.05 * 3, SpeedR=0.05 * 3) + suit_11(char) pass @@ -336,7 +345,7 @@ def suit_28(char: Character): - 攻击中止/继续攻击 - 冷却时间1秒 """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) + suit_27(char) pass @@ -350,7 +359,7 @@ def suit_29(char: Character): - 攻击中止/继续攻击 - 冷却时间1秒 """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) + suit_27(char) pass @@ -364,7 +373,7 @@ def suit_30(char: Character): - 攻击中止/继续攻击 - 冷却时间1秒 """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) + suit_27(char) pass @@ -378,7 +387,7 @@ def suit_31(char: Character): - 攻击中止/继续攻击 - 冷却时间1秒 """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) + suit_27(char) pass @@ -424,9 +433,7 @@ def suit_33(char: Character): - 被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:80,401% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=80400)) + suit_32(char) pass @@ -448,9 +455,7 @@ def suit_34(char: Character): - 被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:80,402% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=80400)) + suit_32(char) pass @@ -472,9 +477,7 @@ def suit_35(char: Character): - 被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:80,403% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=80400)) + suit_32(char) pass @@ -496,9 +499,7 @@ def suit_36(char: Character): - 被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:80,404% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=80400)) + suit_32(char) pass @@ -558,11 +559,7 @@ def suit_38(char: Character): 一被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:118,200% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='风灵希尔珂', icon='', cd=2, data=19200)) - char.SetBaseStatus(SpeedM=0.15) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=118200)) + suit_37(char) pass @@ -590,11 +587,7 @@ def suit_39(char: Character): 一被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:118,200% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='风灵希尔珂', icon='', cd=2, data=19200)) - char.SetBaseStatus(SpeedM=0.15) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=118200)) + suit_37(char) pass @@ -622,11 +615,7 @@ def suit_40(char: Character): 一被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:118,200% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='风灵希尔珂', icon='', cd=2, data=19200)) - char.SetBaseStatus(SpeedM=0.15) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=118200)) + suit_37(char) pass @@ -654,11 +643,7 @@ def suit_41(char: Character): 一被击时,精灵之魂- 5(冷却时间1秒) - 元素释放伤害量:118,200% """ - char.equ_effect.append(EquEffect(name='火灵安珀', icon='', cd=2, data=19200)) - char.equ_effect.append(EquEffect(name='水灵阿库娅', icon='', cd=3, data=24000)) - char.equ_effect.append(EquEffect(name='风灵希尔珂', icon='', cd=2, data=19200)) - char.SetBaseStatus(SpeedM=0.15) - char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=118200)) + suit_37(char) pass @@ -784,6 +769,7 @@ def suit_49(char: Character): - 首饰 : 数值每达到 +3, 技能伤害 +1% (最多叠加7次) - 特殊装备 : 数值每达到 +3, 所有速度 +2% (最多叠加7次) """ + suit_48(char) pass @@ -796,6 +782,7 @@ def suit_50(char: Character): - 首饰 : 数值每达到 +3, 技能伤害 +1% (最多叠加7次) - 特殊装备 : 数值每达到 +3, 所有速度 +2% (最多叠加7次) """ + suit_48(char) pass @@ -808,6 +795,7 @@ def suit_51(char: Character): - 首饰 : 数值每达到 +3, 技能伤害 +1% (最多叠加7次) - 特殊装备 : 数值每达到 +3, 所有速度 +2% (最多叠加7次) """ + suit_48(char) pass @@ -820,6 +808,7 @@ def suit_52(char: Character): - 首饰 : 数值每达到 +3, 技能伤害 +1% (最多叠加7次) - 特殊装备 : 数值每达到 +3, 所有速度 +2% (最多叠加7次) """ + suit_48(char) pass @@ -832,13 +821,42 @@ def suit_53(char: Character): - 首饰 : 数值每达到 +3, 技能伤害 +1% (最多叠加12次) - 特殊装备 : 数值每达到 +3, 所有速度 +2% (最多叠加12次) - - [辅助职业专属属性] 装备的强化/增幅数值平均每增加1时, 适用以下效果。 (最多叠加12次) - 技能冷却时间 - 2% """ + + reinforce_0 = 0 + """防具""" + reinforce_1 = 0 + """首饰""" + reinforce_2 = 0 + """特殊装备""" + reinforce_3 = 0 + """武器""" + for part in char.charEquipInfo.keys(): + if char.charEquipInfo[part].id <= 0: + continue + num = char.charEquipInfo[part].reinforce + if part == '武器': + reinforce_3 += num + if ['上衣', '头肩', '下装', '腰带', '鞋'].includes(part): + reinforce_0 += num + if ['手镯', '项链', '戒指'].includes(part): + reinforce_1 += num + if ['耳环', '辅助装备', '魔法石'].includes(part): + reinforce_2 += num + reinforce = reinforce_0 + reinforce_1 + reinforce_2 + reinforce_3 + char.SetStatus(SkillRange=0.02 * min(reinforce // 11, 12)) + # char.SetStatus(DamageReduce=0.01 * min(reinforce_0 // 5, 7)) + char.SetStatus(SkillDamage=0.01 * min(reinforce_1 // 3, 12)) + char.SetStatus(SpeedA=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedM=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedR=0.02 * min(reinforce_2 // 3, 12)) + + if char.buffer: + char.SetSkillCD(cd=0.02 * min(reinforce // 1, 12)) pass @@ -858,6 +876,8 @@ def suit_54(char: Character): 装备的强化/增幅数值平均每增加1时, 适用以下效果。 (最多叠加12次) - 技能冷却时间 - 2% """ + + suit_53(char) pass @@ -877,6 +897,7 @@ def suit_55(char: Character): 装备的强化/增幅数值平均每增加1时, 适用以下效果。 (最多叠加12次) - 技能冷却时间 - 2% """ + suit_53(char) pass @@ -896,6 +917,7 @@ def suit_56(char: Character): 装备的强化/增幅数值平均每增加1时, 适用以下效果。 (最多叠加12次) - 技能冷却时间 - 2% """ + suit_53(char) pass @@ -915,6 +937,7 @@ def suit_57(char: Character): 装备的强化/增幅数值平均每增加1时, 适用以下效果。 (最多叠加12次) - 技能冷却时间 - 2% """ + suit_53(char) pass @@ -943,6 +966,51 @@ def suit_58(char: Character): - 技能冷却时间 - 2% - 110以上时, 数值每达到 +11, 增益量 +750 (最多叠加2次) """ + reinforce_0 = 0 + """防具""" + reinforce_1 = 0 + """首饰""" + reinforce_2 = 0 + """特殊装备""" + reinforce_3 = 0 + """武器""" + for part in char.charEquipInfo.keys(): + if char.charEquipInfo[part].id <= 0: + continue + num = char.charEquipInfo[part].reinforce + if part == '武器': + reinforce_3 += num + if ['上衣', '头肩', '下装', '腰带', '鞋'].includes(part): + reinforce_0 += num + if ['手镯', '项链', '戒指'].includes(part): + reinforce_1 += num + if ['耳环', '辅助装备', '魔法石'].includes(part): + reinforce_2 += num + reinforce = reinforce_0 + reinforce_1 + reinforce_2 + reinforce_3 + char.SetStatus(SkillRange=0.02 * min(reinforce // 11, 12)) + # char.SetStatus(DamageReduce=0.01 * min(reinforce_0 // 5, 7)) + char.SetStatus(SkillDamage=0.01 * min(reinforce_1 // 3, 12)) + char.SetStatus(SpeedA=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedM=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedR=0.02 * min(reinforce_2 // 3, 12)) + + if char.buffer: + char.SetSkillCD(cd=0.02 * min(reinforce // 1, 12)) + + if reinforce >= 110: + char.SetStatus(SkillDamage=0.02 * min((reinforce - 110) // 11, 2)) + + if char.buffer: + char.SetSkillCD(Buffer=750 * min((reinforce - 110) // 11, 2)) + + if reinforce < 88: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=9600)) + elif reinforce < 110: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=10440)) + elif reinforce < 132: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=12000)) + else: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=14400)) pass @@ -971,6 +1039,7 @@ def suit_59(char: Character): - 技能冷却时间 - 2% - 110以上时, 数值每达到 +11, 增益量 +750 (最多叠加2次) """ + suit_58(char) pass @@ -999,6 +1068,7 @@ def suit_60(char: Character): - 技能冷却时间 - 2% - 110以上时, 数值每达到 +11, 增益量 +750 (最多叠加2次) """ + suit_58(char) pass @@ -1027,6 +1097,7 @@ def suit_61(char: Character): - 技能冷却时间 - 2% - 110以上时, 数值每达到 +11, 增益量 +750 (最多叠加2次) """ + suit_58(char) pass @@ -1055,6 +1126,7 @@ def suit_62(char: Character): - 技能冷却时间 - 2% - 110以上时, 数值每达到 +11, 增益量 +750 (最多叠加2次) """ + suit_58(char) pass @@ -1083,6 +1155,51 @@ def suit_63(char: Character): - 技能冷却时间 - 2% - 121以上时, 数值每达到 +11, 增益量 +1500 (最多叠加2次) """ + reinforce_0 = 0 + """防具""" + reinforce_1 = 0 + """首饰""" + reinforce_2 = 0 + """特殊装备""" + reinforce_3 = 0 + """武器""" + for part in char.charEquipInfo.keys(): + if char.charEquipInfo[part].id <= 0: + continue + num = char.charEquipInfo[part].reinforce + if part == '武器': + reinforce_3 += num + if ['上衣', '头肩', '下装', '腰带', '鞋'].includes(part): + reinforce_0 += num + if ['手镯', '项链', '戒指'].includes(part): + reinforce_1 += num + if ['耳环', '辅助装备', '魔法石'].includes(part): + reinforce_2 += num + reinforce = reinforce_0 + reinforce_1 + reinforce_2 + reinforce_3 + char.SetStatus(SkillRange=0.02 * min(reinforce // 11, 12)) + # char.SetStatus(DamageReduce=0.01 * min(reinforce_0 // 5, 7)) + char.SetStatus(SkillDamage=0.01 * min(reinforce_1 // 3, 12)) + char.SetStatus(SpeedA=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedM=0.02 * min(reinforce_2 // 3, 12)) + char.SetStatus(SpeedR=0.02 * min(reinforce_2 // 3, 12)) + + if char.buffer: + char.SetSkillCD(cd=0.02 * min(reinforce // 1, 12)) + + if reinforce >= 110: + char.SetStatus(SkillDamage=0.02 * min((reinforce - 110) // 11, 2)) + + if char.buffer: + char.SetSkillCD(Buffer=1500 * min((reinforce - 110) // 11, 2)) + + if reinforce < 88: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=9600)) + elif reinforce < 110: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=10440)) + elif reinforce < 132: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=12000)) + else: + char.equ_effect.append(EquEffect(name='淘银热', icon='', cd=10, data=14400)) pass @@ -1131,6 +1248,7 @@ def suit_69(char: Character): 无色小晶块消耗量减少1个。 所有速度 +10% """ + char.SetStatus(SpeedA=0.1, SpeedM=0.1, SpeedR=0.1) pass @@ -1140,6 +1258,7 @@ def suit_70(char: Character): 无色小晶块消耗量减少1个。 所有速度 +10% """ + suit_69(char) pass @@ -1149,6 +1268,7 @@ def suit_71(char: Character): 无色小晶块消耗量减少1个。 所有速度 +10% """ + suit_69(char) pass @@ -1158,6 +1278,7 @@ def suit_72(char: Character): 无色小晶块消耗量减少1个。 所有速度 +10% """ + suit_69(char) pass @@ -1167,6 +1288,7 @@ def suit_73(char: Character): 无色小晶块消耗量减少1个。 所有速度 +10% """ + suit_69(char) pass @@ -1180,6 +1302,8 @@ def suit_74(char: Character): 攻击时, 青龙升天。 (冷却时间10秒) * 青龙升天伤害量 : 14,400% """ + char.SetStatus(SpeedA=0.1, SpeedM=0.1, SpeedR=0.1) + char.equ_effect.append(EquEffect(name='龙之胜战', icon='', cd=10, data=14400)) pass @@ -1193,6 +1317,7 @@ def suit_75(char: Character): 攻击时, 青龙升天。 (冷却时间10秒) * 青龙升天伤害量 : 14,400% """ + suit_74(char) pass @@ -1206,6 +1331,7 @@ def suit_76(char: Character): 攻击时, 青龙升天。 (冷却时间10秒) * 青龙升天伤害量 : 14,400% """ + suit_74(char) pass @@ -1219,6 +1345,7 @@ def suit_77(char: Character): 攻击时, 青龙升天。 (冷却时间10秒) * 青龙升天伤害量 : 14,400% """ + suit_74(char) pass @@ -1232,6 +1359,7 @@ def suit_78(char: Character): 攻击时, 青龙升天。 (冷却时间10秒) * 青龙升天伤害量 : 14,400% """ + suit_74(char) pass @@ -1256,6 +1384,18 @@ def suit_79(char: Character): * 白龙强袭伤害量:6,000% - 冷却时间60秒 """ + if char.equ_options.get('1', 0) == 0: + char.SetStatus(SpeedA=0.1, SpeedM=0.1, SpeedR=0.1) + char.equ_effect.append(EquEffect(name='烛龙腾霄', icon='', cd=10, data=14400)) + elif char.equ_options.get('1', 0) == 1: + char.SetStatus(SpeedA=0.3, SpeedM=0.3, SpeedR=0.3) + char.SetStatus(SkillDamage=0.03) + char.equ_effect.append(EquEffect(name='白龙强袭', icon='', cd=3, data=6000)) + elif char.equ_options.get('1', 0) == 2: + char.SetStatus(SpeedA=0.2, SpeedM=0.2, SpeedR=0.2) + char.SetStatus(SkillDamage=0.015) + char.equ_effect.append(EquEffect(name='白龙强袭', icon='', cd=3, data=6000)) + char.equ_effect.append(EquEffect(name='烛龙腾霄', icon='', cd=10, data=14400)) pass @@ -1280,6 +1420,7 @@ def suit_80(char: Character): * 白龙强袭伤害量:6,000% - 冷却时间60秒 """ + suit_79(char) pass @@ -1304,6 +1445,7 @@ def suit_81(char: Character): * 白龙强袭伤害量:6,000% - 冷却时间60秒 """ + suit_79(char) pass @@ -1328,6 +1470,7 @@ def suit_82(char: Character): * 白龙强袭伤害量:6,000% - 冷却时间60秒 """ + suit_79(char) pass @@ -1352,6 +1495,7 @@ def suit_83(char: Character): * 白龙强袭伤害量:6,000% - 冷却时间60秒 """ + suit_79(char) pass @@ -1375,6 +1519,14 @@ def suit_84(char: Character): [应龙的如意珠]效果生效状态下攻击时,黑龙横扫敌人。(冷却时间4秒) *横扫伤害量:7,200% """ + if char.equ_options.get('1', 0) == 0: + char.SetStatus(SpeedA=0.1, SpeedM=0.1, SpeedR=0.1) + char.equ_effect.append(EquEffect(name='烛龙腾霄', icon='', cd=10, data=14400)) + elif char.equ_options.get('1', 0) == 1: + char.SetStatus(SpeedA=0.3, SpeedM=0.3, SpeedR=0.3) + char.SetStatus(SkillDamage=0.03) + char.equ_effect.append(EquEffect(name='白龙强袭', icon='', cd=3, data=6000)) + char.equ_effect.append(EquEffect(name='应龙之怒', icon='', cd=4, data=7200)) pass @@ -1425,6 +1577,7 @@ def suit_90(char: Character): - 技能冷却时间 - 30.0% - 每秒恢复0.5%生命值/魔法值 """ + char.SetSkillCD(cd=0.3) pass @@ -1436,6 +1589,7 @@ def suit_91(char: Character): - 技能冷却时间 - 30.0% - 每秒恢复0.5%生命值/魔法值 """ + suit_90(char) pass @@ -1447,6 +1601,7 @@ def suit_92(char: Character): - 技能冷却时间 - 30.0% - 每秒恢复0.5%生命值/魔法值 """ + suit_90(char) pass @@ -1458,6 +1613,7 @@ def suit_93(char: Character): - 技能冷却时间 - 30.0% - 每秒恢复0.5%生命值/魔法值 """ + suit_90(char) pass @@ -1469,6 +1625,7 @@ def suit_94(char: Character): - 技能冷却时间 - 30.0% - 每秒恢复0.5%生命值/魔法值 """ + suit_90(char) pass @@ -1485,6 +1642,11 @@ def suit_95(char: Character): - 技能冷却时间- 55%(觉醒技能除外) - 进入霸体状态 """ + if char.equ_options.get('2', 0) == 0: + char.SetStatus(SkillDamage=0.175) + char.SetSkillCD(cd=0.3) + else: + char.SetSkillCD(cd=0.55) pass @@ -1501,6 +1663,7 @@ def suit_96(char: Character): - 技能冷却时间- 55%(觉醒技能除外) - 进入霸体状态 """ + suit_95(char) pass @@ -1517,6 +1680,7 @@ def suit_97(char: Character): - 技能冷却时间- 55%(觉醒技能除外) - 进入霸体状态 """ + suit_95(char) pass @@ -1533,6 +1697,7 @@ def suit_98(char: Character): - 技能冷却时间- 55%(觉醒技能除外) - 进入霸体状态 """ + suit_95(char) pass @@ -1549,6 +1714,7 @@ def suit_99(char: Character): - 技能冷却时间- 55%(觉醒技能除外) - 进入霸体状态 """ + suit_95(char) pass @@ -1568,6 +1734,7 @@ def suit_100(char: Character): - 进入霸体状态 - 跳跃时可以再跳跃一次 """ + suit_95(char) pass @@ -1587,6 +1754,7 @@ def suit_101(char: Character): - 进入霸体状态 - 跳跃时可以再跳跃一次 """ + suit_95(char) pass @@ -1606,6 +1774,7 @@ def suit_102(char: Character): - 进入霸体状态 - 跳跃时可以再跳跃一次 """ + suit_95(char) pass @@ -1625,6 +1794,7 @@ def suit_103(char: Character): - 进入霸体状态 - 跳跃时可以再跳跃一次 """ + suit_95(char) pass @@ -1644,6 +1814,7 @@ def suit_104(char: Character): - 进入霸体状态 - 跳跃时可以再跳跃一次 """ + suit_95(char) pass @@ -1669,6 +1840,7 @@ def suit_105(char: Character): [堕落] - 技能冷却时间 - 55.0% """ + suit_95(char) pass @@ -1722,6 +1894,7 @@ def suit_111(char: Character): 攻击时, 有3%的几率发动[神的祝福]。 (发动冷却1秒) 剩余冷却时间33秒以下的技能中, 初始化剩余时间最长的1个技能 (觉醒技能除外) """ + char.SetStatus(SkillDamage=0.03) pass @@ -1736,6 +1909,7 @@ def suit_112(char: Character): 攻击时, 有3%的几率发动[神的祝福]。 (发动冷却1秒) 剩余冷却时间33秒以下的技能中, 初始化剩余时间最长的1个技能 (觉醒技能除外) """ + suit_111(char) pass @@ -1750,6 +1924,7 @@ def suit_113(char: Character): 攻击时, 有3%的几率发动[神的祝福]。 (发动冷却1秒) 剩余冷却时间33秒以下的技能中, 初始化剩余时间最长的1个技能 (觉醒技能除外) """ + suit_111(char) pass @@ -1764,6 +1939,7 @@ def suit_114(char: Character): 攻击时, 有3%的几率发动[神的祝福]。 (发动冷却1秒) 剩余冷却时间33秒以下的技能中, 初始化剩余时间最长的1个技能 (觉醒技能除外) """ + suit_111(char) pass @@ -1778,6 +1954,7 @@ def suit_115(char: Character): 攻击时, 有3%的几率发动[神的祝福]。 (发动冷却1秒) 剩余冷却时间33秒以下的技能中, 初始化剩余时间最长的1个技能 (觉醒技能除外) """ + suit_111(char) pass @@ -1794,6 +1971,7 @@ def suit_116(char: Character): - 剩余冷却时间33秒以下的技能中,初始化剩余时间最短的1个技能(觉醒技能除外) - 立即发动[第二次幸运] """ + suit_111(char) pass @@ -1810,6 +1988,7 @@ def suit_117(char: Character): - 剩余冷却时间33秒以下的技能中,初始化剩余时间最短的1个技能(觉醒技能除外) - 立即发动[第二次幸运] """ + suit_111(char) pass @@ -1826,6 +2005,7 @@ def suit_118(char: Character): - 剩余冷却时间33秒以下的技能中,初始化剩余时间最短的1个技能(觉醒技能除外) - 立即发动[第二次幸运] """ + suit_111(char) pass @@ -1842,6 +2022,7 @@ def suit_119(char: Character): - 剩余冷却时间33秒以下的技能中,初始化剩余时间最短的1个技能(觉醒技能除外) - 立即发动[第二次幸运] """ + suit_111(char) pass @@ -1858,6 +2039,7 @@ def suit_120(char: Character): - 剩余冷却时间33秒以下的技能中,初始化剩余时间最短的1个技能(觉醒技能除外) - 立即发动[第二次幸运] """ + suit_111(char) pass @@ -1878,6 +2060,8 @@ def suit_121(char: Character): - 冷却时间:99秒 - 立即发动[第二次幸运] """ + char.SetStatus(SkillDamage=0.03) + char.Set pass diff --git a/backend/dataFiles/dcalc_0.db b/backend/dataFiles/dcalc_0.db index 2cf4b940..459eb74e 100644 Binary files a/backend/dataFiles/dcalc_0.db and b/backend/dataFiles/dcalc_0.db differ diff --git a/backend/output.py b/backend/output.py new file mode 100644 index 00000000..e69de29b diff --git a/frontend/src/api/calc/index.ts b/frontend/src/api/calc/index.ts new file mode 100644 index 00000000..2ceed6e3 --- /dev/null +++ b/frontend/src/api/calc/index.ts @@ -0,0 +1,11 @@ +import type { IConfig } from '@/stores' +import { defineRequest } from '../common' +export default defineRequest((request) => { + return { + async calc(config: IConfig) { + const res = await request.post('/calc', config) + return res.data + } + } +}) +// Compare this snippet from frontend/src/api/common/index.ts: diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index 10160424..c97be7d7 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -1,3 +1,4 @@ import info from './info' +import calc from './calc' -export default { ...info } +export default { ...info, ...calc } diff --git a/frontend/src/api/info/type.ts b/frontend/src/api/info/type.ts index 9495f2a0..61ab1dbb 100644 --- a/frontend/src/api/info/type.ts +++ b/frontend/src/api/info/type.ts @@ -38,7 +38,7 @@ export interface IEquipment { itemDetailType: string name: string categorize:string - suit: number[] + suit: string[] rarity:string } diff --git a/frontend/src/pages/Character/Equipment/Suit.vue b/frontend/src/pages/Character/Equipment/Suit.vue index 51246850..26ca9d12 100644 --- a/frontend/src/pages/Character/Equipment/Suit.vue +++ b/frontend/src/pages/Character/Equipment/Suit.vue @@ -57,7 +57,7 @@ const suits = computed(() => { }) const suitEquipments = computed(() => { - const equs = infoStore.equips.filter((a) => a.suit.includes(curSuit.value) && a.suit.length === 1) + const equs = infoStore.equips.filter((a) => a.suit.includes(curSuit.value.toString()) && a.suit.length === 1) const res: (IEquipment | undefined)[] = [] const raritiyList = ['神器','传说','史诗'] @@ -76,11 +76,11 @@ const suitEquipments = computed(() => { }) -const chooseEqu = (equip: IEquipment | undefined) => { - console.log(equip) +const chooseEqu = async(equip: IEquipment | undefined) => { if (equip && configStore.config.equips[equip.itemDetailType]) { configStore.config.equips[equip.itemDetailType].id = equip.id } + await configStore.calc() } diff --git a/frontend/src/stores/config.ts b/frontend/src/stores/config.ts index 1bacaacb..0d005d77 100644 --- a/frontend/src/stores/config.ts +++ b/frontend/src/stores/config.ts @@ -1,5 +1,6 @@ import { defineStore } from 'pinia' import { useInfoStore } from './info' +import api from '@/api' // | '上衣' // | '头肩' // | '下装' @@ -82,9 +83,14 @@ export const useConfigStore = defineStore('configStore', () => { } } + const calc = async()=>{ + await api.calc(config.value) + } + return { config, loadConfig, saveConfig, + calc } })