From 24dff60710f184853265b5db5ffc86ab17df9a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= Date: Sat, 5 Apr 2025 14:09:03 +0800 Subject: [PATCH] dev --- README.md | 65 +++++++++++++++++++- backend/core/basic/character.py | 44 ++++++++++++- backend/core/equipment/version_0/__init__.py | 3 +- backend/core/equipment/version_0/avatar.py | 42 ++++++++++++- 4 files changed, 149 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a8f6d759..d3cbb060 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,67 @@ uv sync pnpm run dev:image pnpm run dev:frontend -pnpm run dev:backend \ No newline at end of file +pnpm run dev:backend + +### process + +- 装备选择 + - [x] 武器选择 + - [x] 套装选择 + - [x] 贴膜选择 + - [x] 通宝选择 + - [ ] 称号宠物选择 + - [ ] 秘宝选择 + +- 技能设置 + - [x] 技能等级设置 + - [ ] 觉醒绑定选择 + - [ ] 技能次数设置 + - [ ] 技能次数自动计算 + - [ ] buff数值设置 + +- 打造设置 + - [x] 增幅/强化/锻造 + - [x] 徽章/附魔/调适 + - [x] 时装/皮肤/光环 + - [x] 宠物装备 + - [ ] 辟邪玉 + - [ ] 勋章/杂项 + +- 结果计算 + - [x] 技能伤害计算 + - [x] 技能等级计算 + - [x] 技能CD计算 + - [x] 装备特效计算 + - [x] 装备效果/点数计算 + - [ ] 角色基础展示 + +- 一期职业 + - 鬼剑士(男) + - [ ] 鬼泣 + - [ ] 狂战士 + - [ ] 剑影 + - 鬼剑士(女) + - [ ] 暗殿骑士 + - [ ] 契魔者 + - [ ] 流浪武士 + - [ ] 刃影 + - 格斗家(男) + - [ ] 柔道家 + - 格斗家(女) + - [ ] 气功师 + - [ ] 散打 + - [ ] 柔道家 + - 神枪手(男) + - [ ] 漫游枪手 + - [ ] 枪炮师 + - [ ] 弹药专家 + - 神枪手(女) + - [ ] 漫游枪手 + - [ ] 枪炮师 + - [x] 弹药专家 + - 魔法师(男) + - [ ] 冰结师 + - [ ] 血法师 + - 魔法师(女) + - [ ] 战斗法师 \ No newline at end of file diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index e6f5e8d2..97410d06 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -353,7 +353,7 @@ class Character: for skill in self.skills: if min <= skill.learnLv <= max: if type == -1 or skill.type == type: - skill.AddLv(lv, self) + skill.lv += 1 def SetSkillCD(self, min=1, max=100, cd=0, exclude=[50, 85, 100]) -> None: """ @@ -596,7 +596,7 @@ class Character: def calc_equs(self): """计算装备基础效果、附魔、贴膜""" effects = get_equipment(self.equVersion).funs - for detail in [(item.equInfo,item.fusionInfo,item.enchant) 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] @@ -612,6 +612,22 @@ class Character: fun(self) # 附魔 fun = effects.enchant_func_list.get(str(enchat), None) + if fun is not None: + fun(self) + # 徽章效果 + emblem_0 = detail[3] + emblem_1 = detail[4] + if str(emblem_1).isdigit(): + fun = effects.emblem_func_list.get(str(emblem_0), None) + if fun is not None: + fun(self) + else: + # 白金徽章处理 + skill = self.GetSkillByName(emblem_0) + if skill is not None: + skill.lv += 1 + self.SetStatus(四维=8) + fun = effects.emblem_func_list.get(str(emblem_1), None) if fun is not None: fun(self) # 贴膜 @@ -624,6 +640,28 @@ class Character: # 获取装备额外属性 fun(self) + 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 ['头发', '帽子', '脸部','胸部','上衣','腰带','下装','鞋']} + for key in avatarElse: + value = avatarElse[key].get('enchant', None) + emblem_0 = avatarElse[key].get('emblem_0', None) + emblem_1 = avatarElse[key].get('emblem_1', None) + if value is not None: + fun = equ.funs.enchant_func_list.get(str(value), None) + if fun is not None: + fun(self) + for i in [emblem_0, emblem_1]: + if i is None: + continue + fun = equ.funs.emblem_func_list.get(str(i), None) + if fun is not None: + fun(self) + pass + def calc_basic(self): """计算基础属性:防具精通、增幅、强化等""" # 防具精通跟随装备品级 @@ -688,6 +726,8 @@ class Character: # 角色基础属性 self.SetBaseStatus() # 辟邪玉计算 + # 时装计算 + self.calc_avatar(setInfo.get('avatar', {})) # 精通、增幅、强化计算 self.calc_basic() # 部位效果计算 diff --git a/backend/core/equipment/version_0/__init__.py b/backend/core/equipment/version_0/__init__.py index 805a80aa..08d11d6f 100644 --- a/backend/core/equipment/version_0/__init__.py +++ b/backend/core/equipment/version_0/__init__.py @@ -1,8 +1,9 @@ from .suit import suit_func_list from .jade import jade_func_list from .equ import equ_func_list -from .avatar import get_dress_list +from .avatar import get_dress_list,calc_dress_effect from .enchant import enchant_func_list +from .emblem import emblem_func_list options = [ {'id': 1, 'name': '龙战八荒,', 'options': ['BUFF OFF', 'BUFF ON', '期望']}, diff --git a/backend/core/equipment/version_0/avatar.py b/backend/core/equipment/version_0/avatar.py index c0453f13..21727484 100644 --- a/backend/core/equipment/version_0/avatar.py +++ b/backend/core/equipment/version_0/avatar.py @@ -57,7 +57,9 @@ class 装扮: elif str(选项) == '0': pass else: - 角色.单技能加成(名称=选项, lv=1) + skill = 角色.GetSkillByName(选项) + if skill is not None: + skill.lv += 1 class 神器装扮头发(装扮): @@ -357,3 +359,41 @@ def get_dress_list(skills_coat:list[str] = [],skills_pants:list[str] = []) -> di data["name"] = f"{dress.品质}装扮{dress.部位}" dress_list[部位].append(data) return dress_list + +def calc_dress_effect(avatar,char): + """ + 计算装扮效果 + """ + 时装品级列表 = {} + for 部位 in avatar: + id = avatar[部位].get("id") + if id is None: + continue + 时装 = 装扮集合[int(id)] + 时装.效果(角色=char, 选项=avatar[部位].get("option")) + 时装品级列表[时装.套装] = 时装品级列表.get(时装.套装, 0) + 1 + + 套装集合: list[装扮套装] = [] + + for 套装 in 装扮套装集合: + 数量 = 时装品级列表.get(套装.名称, 0) + if 数量 > 0: + if 数量 >= 套装.所需数量: + 查找 = len( + [ + i + for i in 套装集合 + if hasattr(i, "兼容于") + and i.兼容于 == 套装.名称 + and i.所需数量 == 套装.所需数量 + ] + ) + if 查找 == 0: + 套装集合.append(套装) + else: + if hasattr(套装, "兼容于") and 套装.兼容于 is not None: + 数量 += 时装品级列表.get(套装.兼容于, 0) + 时装品级列表[套装.兼容于] = 数量 + 时装品级列表.pop(套装.名称) + for 套装 in 套装集合: + 套装.效果(char) \ No newline at end of file