diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index 80389cef..0b1ef23b 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -244,17 +244,18 @@ class Character: 光强=0, 暗强=0, 全属抗=0, - 火抗=0, - 冰抗=0, - 光抗=0, - 暗抗=0, + 火属性抗性=0, + 冰属性抗性=0, + 光属性抗性=0, + 暗属性抗性=0, 火属性攻击=False, 冰属性攻击=False, 光属性攻击=False, 暗属性攻击=False, - 移速=0, - 攻速=0, - 施放=0, + 移动速度=0, + 攻击速度=0, + 施放速度=0, + 三速=0, 命中=0, 命中率=0, 物暴=0, @@ -321,9 +322,9 @@ class Character: self.CriticalM += kwargs.get('CriticalM', 0) + 魔暴 self.CriticalP += kwargs.get('CriticalP', 0) + 物暴 self.SkillAttack *= (1 + 技攻) * (1 + kwargs.get('SkillAttack', 0)) - self.SpeedA += 攻速 + kwargs.get('SpeedA', 0) - self.SpeedM += 移速 + kwargs.get('SpeedM', 0) - self.SpeedR += 施放 + kwargs.get('SpeedR', 0) + self.SpeedA += 攻击速度 + kwargs.get('SpeedA', 0) + 三速 + self.SpeedM += 移动速度 + kwargs.get('SpeedM', 0) + 三速 + self.SpeedR += 施放速度 + kwargs.get('SpeedR', 0) + 三速 self.HitP += 命中率 + kwargs.get('HitP', 0) self.Hit += 命中 + kwargs.get('Hit', 0) self.Attack += 攻击强化 + kwargs.get('Attack', 0) @@ -415,7 +416,15 @@ class Character: info['name'] = self.nameCN info['weapons'] = self.武器选项 skillInfo = [] + skill_clothes = [] + platinum = [] for skill in self.skills: + # 白金 + if 15 <= skill.learnLv <= 70 and skill.learnLv not in [48,50]: + platinum.append(skill.name) + # 时装 + if skill.learnLv <= 95: + skill_clothes.append(skill.name) skillInfo.append( { 'id': skill.id, @@ -448,7 +457,17 @@ class Character: info['suits'] = suits info['stones'] = stones info['enchants'] = equInfos.enchants - emblems = [] + info['emblems'] = equInfos.emblems + info["avatar"] = equInfos.funs.get_dress_list(skill_clothes) + for skill in platinum: + info['emblems'].append({ + 'id': skill, + 'fame':232, + 'position':["辅助装备", "魔法石"], + "detail": skill + " Lv+1" + " 四维 + 8", + "categorize": ["技能"], + "rarity": "白金", + }) return info def getBasicInos(self): diff --git a/backend/core/basic/equipment.py b/backend/core/basic/equipment.py index a62c4002..1d5eb8da 100644 --- a/backend/core/basic/equipment.py +++ b/backend/core/basic/equipment.py @@ -1,5 +1,5 @@ import importlib -from database.models import Session, EquData, StoneData, SuitData, EnchantData +from database.models import EmblemData, Session, EquData, StoneData, SuitData, EnchantData from database.connect import get_db_engine as get_engine from functools import cache @@ -75,12 +75,14 @@ class Equipments: self.equ_dict: dict[str, Equ] = {} self.stone_dict: dict[str, Equ] = {} self.enchants = [] + self.emblems = [] self.suits: list[Suit] = [] self.suit_dict: dict[str, Suit] = {} self.init_equs() self.init_suits() self.init_enchants() self.init_stones() + self.init_emblem() self.engine.dispose() def init_equs(self): @@ -150,6 +152,19 @@ class Equipments: pass pass + def init_emblem(self): + """从数据库中获取所有徽章信息""" + with Session(self.engine) as session: + db_list = session.query(EmblemData).all() + for item in db_list: + emblem = {k: v for k, v in item.__dict__.items() if not k.startswith('_')} + emblem['position'] = [] if emblem['itemType'] is None else emblem['itemType'].split(',') + emblem['categorize'] = [] if emblem['categorize'] is None else emblem['categorize'].split(',') + del emblem['itemType'] + self.emblems.append(emblem) + pass + pass + def init_func(self): """根据装备版本加载装备效果""" try: diff --git a/backend/core/basic/roleinfo.py b/backend/core/basic/roleinfo.py index 6245cb46..70dc2193 100644 --- a/backend/core/basic/roleinfo.py +++ b/backend/core/basic/roleinfo.py @@ -33,6 +33,7 @@ class CharacterEquipInfo: """贴膜信息""" def __init__(self, info={}, equVerison=0, part='') -> None: + info["fusion"] = info.get("fusion", None) self.__dict__.update(info) equ = get_equipment(equVerison).equ_dict.get(self.id, None) fusion = get_equipment(equVerison).stone_dict.get(self.fusion, None) diff --git a/backend/core/equipment/version_0/__init__.py b/backend/core/equipment/version_0/__init__.py index 7f9d7211..e18f17f6 100644 --- a/backend/core/equipment/version_0/__init__.py +++ b/backend/core/equipment/version_0/__init__.py @@ -1,7 +1,7 @@ from .suit import suit_func_list from .jade import jade_func_list from .equ import equ_func_list - +from .avatar import get_dress_list options = [ {'id': 1, 'name': '龙战八荒,', 'options': ['BUFF OFF', 'BUFF ON', '期望']}, {'id': 2, 'name': '混沌净化', 'options': ['净化', '堕落']}, diff --git a/backend/core/equipment/version_0/avatar.py b/backend/core/equipment/version_0/avatar.py new file mode 100644 index 00000000..c0453f13 --- /dev/null +++ b/backend/core/equipment/version_0/avatar.py @@ -0,0 +1,359 @@ +装扮选项属性 = { + "神器": { + "智力": 65, + "体力": 65, + "精神": 65, + "力量": 65, + "施放速度": 0.14, + "移动速度": 0.07, + "攻击速度": 0.07, + "火属性抗性": 45, + "光属性抗性": 45, + "冰属性抗性": 45, + "暗属性抗性": 45, + "所有异常抗性": 0.042 + }, + "稀有": { + "智力": 55, + "体力": 55, + "精神": 55, + "力量": 55, + "施放速度": 0.12, + "移动速度": 0.06, + "攻击速度": 0.06, + "火属性抗性": 35, + "光属性抗性": 35, + "冰属性抗性": 35, + "暗属性抗性": 35, + "所有异常抗性": 0.036 + }, + "高级": { + "智力": 45, + "体力": 45, + "精神": 45, + "力量": 45, + "施放速度": 0.12, + "移动速度": 0.05, + "攻击速度": 0.05, + "火属性抗性": 25, + "光属性抗性": 25, + "冰属性抗性": 25, + "暗属性抗性": 25, + "所有异常抗性": 0.03 + } +} + + +class 装扮: + 部位: str + 品质: str + 套装: str + 选项集合: tuple[str] + + def 效果(self, 角色, 选项: str): + if 选项 in self.选项集合: + 数值 = 装扮选项属性[self.品质][选项] + 角色.SetStatus(**{选项: 数值}) + elif str(选项) == '0': + pass + else: + 角色.单技能加成(名称=选项, lv=1) + + +class 神器装扮头发(装扮): + 部位 = "头发" + 品质 = "神器" + 套装 = "神器装扮" + id = 1 + 选项集合 = ("智力", "精神", "施放速度") + + +class 神器装扮帽子(装扮): + 部位 = "帽子" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = ("智力", "精神", "施放速度") + + +class 神器装扮脸部(装扮): + 部位 = "脸部" + 品质 = "神器" + 套装 = "神器装扮" + # 逗号不能删 + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 神器装扮胸部(装扮): + 部位 = "胸部" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 神器装扮上衣(装扮): + 部位 = "上衣" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = () + + +class 神器装扮腰带(装扮): + 部位 = "腰带" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = ("力量", "体力", "火属性抗性", "光属性抗性", "冰属性抗性", "暗属性抗性") + + +class 神器装扮下装(装扮): + 部位 = "下装" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = () + + +class 神器装扮鞋(装扮): + 部位 = "鞋" + 品质 = "神器" + 套装 = "神器装扮" + 选项集合 = ("力量", "体力", "移动速度") + + +class 稀有装扮头发(装扮): + 部位 = "头发" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("智力", "精神", "施放速度") + + +class 稀有装扮帽子(装扮): + 部位 = "帽子" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("智力", "精神", "施放速度") + + +class 稀有装扮脸部(装扮): + 部位 = "脸部" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 稀有装扮胸部(装扮): + 部位 = "胸部" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 稀有装扮上衣(装扮): + 部位 = "上衣" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = () + + +class 稀有装扮腰带(装扮): + 部位 = "腰带" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("力量", "体力", "火属性抗性", "光属性抗性", "冰属性抗性", "暗属性抗性") + + +class 稀有装扮下装(装扮): + 部位 = "下装" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = () + + +class 稀有装扮鞋(装扮): + 部位 = "鞋" + 品质 = "稀有" + 套装 = "稀有装扮" + 选项集合 = ("力量", "体力", "移动速度") + + +class 高级装扮头发(装扮): + 部位 = "头发" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("智力", "精神", "施放速度") + + +class 高级装扮帽子(装扮): + 部位 = "帽子" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("智力", "精神", "施放速度") + + +class 高级装扮脸部(装扮): + 部位 = "脸部" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 高级装扮胸部(装扮): + 部位 = "胸部" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("攻击速度", "所有异常抗性") + + +class 高级装扮上衣(装扮): + 部位 = "上衣" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = () + + +class 高级装扮腰带(装扮): + 部位 = "腰带" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("力量", "体力", "火属性抗性", "光属性抗性", "冰属性抗性", "暗属性抗性") + + +class 高级装扮下装(装扮): + 部位 = "下装" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = () + + +class 高级装扮鞋(装扮): + 部位 = "鞋" + 品质 = "高级" + 套装 = "高级装扮" + 选项集合 = ("力量", "体力", "移动速度") + + +神器装扮集合 = (神器装扮头发, 神器装扮帽子, 神器装扮脸部, 神器装扮胸部, + 神器装扮上衣, 神器装扮腰带, 神器装扮下装, 神器装扮鞋) +稀有装扮集合 = (稀有装扮头发, 稀有装扮帽子, 稀有装扮脸部, 稀有装扮胸部, + 稀有装扮上衣, 稀有装扮腰带, 稀有装扮下装, 稀有装扮鞋) +高级装扮集合 = (高级装扮头发, 高级装扮帽子, 高级装扮脸部, 高级装扮胸部, + 高级装扮上衣, 高级装扮腰带, 高级装扮下装, 高级装扮鞋) + +装扮集合 = tuple(map(lambda x: x(), (神器装扮集合 + 稀有装扮集合 + 高级装扮集合))) + + +class 装扮套装: + 名称: str + 兼容于: str = None + 所需数量: int + + def 效果(self, 属性): + pass + + +class 神器装扮3(装扮套装): + 名称 = "神器装扮" + 兼容于 = "稀有装扮" + 所需数量 = 3 + + def 效果(self, 属性): + # print("effect unique suit 3") + 属性.SetStatus(四维=50, 三速=0.03) + + +class 神器装扮8(装扮套装): + + 名称 = "神器装扮" + 兼容于 = "稀有装扮" + 所需数量 = 8 + + def 效果(self, 属性): + # print("effect unique suit 8") + 属性.SetStatus(四维=50, 三速=0.03) + 属性.AddElementDB('火',10) + 属性.AddElementDB('光',10) + 属性.AddElementDB('冰',10) + 属性.AddElementDB('暗',10) + # 属性.所有属性强化加成(10) + # 属性.所有属性抗性加成(15) + + +class 稀有装扮3(装扮套装): + + 名称 = "稀有装扮" + 所需数量 = 3 + + def 效果(self, 属性): + # print("effect rare suit 3") + 属性.SetStatus(四维=40, 三速=0.02) + + +class 稀有装扮8(装扮套装): + + 名称 = "稀有装扮" + 所需数量 = 8 + + def 效果(self, 属性): + # print("effect rare suit 8") + 属性.SetStatus(四维=40, 三速=0.02) + 属性.AddElementDB('火',6) + 属性.AddElementDB('光',6) + 属性.AddElementDB('冰',6) + 属性.AddElementDB('暗',6) + + +class 节日装扮8(装扮套装): + + 名称 = "节日装扮" + 所需数量 = 8 + + def 效果(self, 属性): + 属性.SetStatus(四维=25, 三速=0.02) + + +class 高级装扮3(装扮套装): + + 名称 = "高级装扮" + 所需数量 = 3 + + def 效果(self, 属性): + # print("effect uncommon suit 3") + 属性.SetStatus(四维=10) + + +class 高级装扮8(装扮套装): + + 名称 = "高级装扮" + 所需数量 = 8 + + def 效果(self, 属性): + # print("effect uncommon suit 8") + 属性.SetStatus(四维=10, 三速=0.01) + + +装扮套装集合 = tuple( + map(lambda x: x(), (神器装扮3, 神器装扮8, 稀有装扮3, 稀有装扮8, 节日装扮8, 高级装扮3, 高级装扮8))) + +def get_dress_list(skills_coat:list[str] = [],skills_pants:list[str] = []) -> dict: + """ + 获取装扮列表 + :param info: 装扮信息 + :return: 装扮列表 + """ + dress_list = {} + for dress in 装扮集合: + 部位 = dress.部位 + if 部位 not in dress_list: + dress_list[部位] = [] + 选项集合 = dress.选项集合 + if dress.部位 == "上衣": + 选项集合 = 选项集合 + tuple(skills_coat) + elif dress.部位 == "下装": + 选项集合 = 选项集合 + tuple(skills_pants) + data = {} + data["id"] = len(dress_list[部位]) + data["options"] = 选项集合 + data["part"] = 部位 + data["rarity"] = dress.品质 + data["suit"] = dress.套装 + data["name"] = f"{dress.品质}装扮{dress.部位}" + dress_list[部位].append(data) + return dress_list diff --git a/backend/dataFiles/dcalc_0.db b/backend/dataFiles/dcalc_0.db index 58f94f76..ac4b8af6 100644 Binary files a/backend/dataFiles/dcalc_0.db and b/backend/dataFiles/dcalc_0.db differ diff --git a/backend/dataFiles/dcalc_1.db b/backend/dataFiles/dcalc_1.db deleted file mode 100644 index beedb6dc..00000000 Binary files a/backend/dataFiles/dcalc_1.db and /dev/null differ diff --git a/backend/database/models.py b/backend/database/models.py index d028260a..24957deb 100644 --- a/backend/database/models.py +++ b/backend/database/models.py @@ -94,3 +94,14 @@ class EnchantData(Base): categorize = Column(Integer) itemType = Column(Text) fame = Column(Integer) + rarity = Column(Text) + +class EmblemData(Base): + __tablename__ = 'emblem' + + id = Column(Integer, primary_key=True) + detail = Column(Text) + categorize = Column(Integer) + itemType = Column(Text) + fame = Column(Integer) + rarity = Column(Text) \ No newline at end of file diff --git a/frontend/src/api/info/type.ts b/frontend/src/api/info/type.ts index f99a0d9e..f9a92a8a 100644 --- a/frontend/src/api/info/type.ts +++ b/frontend/src/api/info/type.ts @@ -21,7 +21,7 @@ export interface IAlterInfo { } export interface ICharacterInfo { - role:string + role: string alter: string name: string equVersion: string @@ -32,6 +32,7 @@ export interface ICharacterInfo { weapons: string[] skills: ISkill[] suits: ISuit[] + avatar: Record } export interface IEquipment { @@ -40,9 +41,9 @@ export interface IEquipment { itemType: string itemDetailType: string name: string - categorize:string + categorize: string suit: string[] - rarity:string + rarity: string } export interface ISkill { @@ -63,7 +64,6 @@ export interface ISuit { suitId: number } - export interface IEnchantingInfo { id: string | number fame: number | undefined @@ -73,3 +73,12 @@ export interface IEnchantingInfo { rarity?: string type?: string } + +export interface IAvatarInfo { + id: number + options: string[] + part: string + rarity: string + suit?: string + name: string +} diff --git a/frontend/src/components/dnf/Avatar/List/index.vue b/frontend/src/components/dnf/Avatar/List/index.vue new file mode 100644 index 00000000..1da3d4dc --- /dev/null +++ b/frontend/src/components/dnf/Avatar/List/index.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/frontend/src/pages/Character/Forge/components/avatar.vue b/frontend/src/pages/Character/Forge/components/avatar.vue new file mode 100644 index 00000000..e7e33773 --- /dev/null +++ b/frontend/src/pages/Character/Forge/components/avatar.vue @@ -0,0 +1,159 @@ + + + diff --git a/frontend/src/pages/Character/Forge/components/equipment.vue b/frontend/src/pages/Character/Forge/components/equipment.vue index ea200128..9c8d926b 100644 --- a/frontend/src/pages/Character/Forge/components/equipment.vue +++ b/frontend/src/pages/Character/Forge/components/equipment.vue @@ -129,7 +129,7 @@ export default defineComponent({ return () => { return ( <> -
+
@@ -172,7 +172,7 @@ export default defineComponent({
附魔
- 无 + 无 {renderList(enchanting_list.value ?? [], (item) => ( {item.detail} ))} @@ -186,20 +186,20 @@ export default defineComponent({ v-model={emblem_0.value} class="flex-1 !h-20px" > - 无 + 无 {renderList(emblem_list.value ?? [], (item) => ( {`${item.rarity}${item.type}徽章[${item.detail}]`} + >{`${item.rarity}${item.categorize}徽章[${item.detail}]`} ))} {has_emblem_1.value && ( - 无 + 无 {renderList(emblem_list.value ?? [], (item) => ( {`${item.rarity}${item.type}徽章[${item.detail}]`} + >{`${item.rarity}${item.categorize}徽章[${item.detail}]`} ))} )} diff --git a/frontend/src/pages/Character/Forge/index.vue b/frontend/src/pages/Character/Forge/index.vue index f01ff13d..02972602 100644 --- a/frontend/src/pages/Character/Forge/index.vue +++ b/frontend/src/pages/Character/Forge/index.vue @@ -1,12 +1,19 @@