dev
This commit is contained in:
+80
-105
@@ -9,7 +9,7 @@ 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 获取基础属性
|
||||
from .formula import 增幅计算, 精通计算, 获取基础属性
|
||||
from .roleinfo import CharacterEquipInfo, get_key_by_value
|
||||
# from .property import 精通计算, 角色基础, CharacterInfo
|
||||
|
||||
@@ -105,8 +105,6 @@ class Character:
|
||||
"""装备版本"""
|
||||
charEquipInfo: dict[str, 'CharacterEquipInfo']
|
||||
"""装备打造信息"""
|
||||
equs: dict[str, 'Equ']
|
||||
"""装备列表"""
|
||||
equ_effect: list['EquEffect'] = []
|
||||
"""装备效果列表"""
|
||||
|
||||
@@ -328,7 +326,6 @@ class Character:
|
||||
"""通过技能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]:
|
||||
"""获取技能名字"""
|
||||
return [skill.name for skill in self.skills if (type == 'all' or skill.type == type) and (damage == 'all' or skill.damage == damage)]
|
||||
@@ -343,16 +340,6 @@ class Character:
|
||||
# 导入部位打造信息、装备信息、贴膜信息
|
||||
self.charEquipInfo[key] = CharacterEquipInfo(info['equips'][key], self.equVersion, key)
|
||||
|
||||
# def calc(self):
|
||||
# """计算角色属性"""
|
||||
# func = []
|
||||
# for i in self.charEquipInfo:
|
||||
# # 计算装备
|
||||
# temp = self.equs.get_func_by_id(self.charEquipInfo[i].id)
|
||||
# func.append(temp)
|
||||
# temp(self)
|
||||
# pass
|
||||
|
||||
def getInfo(self):
|
||||
"""返回到前端信息"""
|
||||
info = {}
|
||||
@@ -391,57 +378,6 @@ class Character:
|
||||
info['suits'] = suits
|
||||
enchats = []
|
||||
emblems = []
|
||||
# 装备过滤
|
||||
# for i in self.equs.info:
|
||||
# if (i.typeSon1Id == '武器' and i.typeSon2Id not in self.武器选项) or (i.name.startswith('精 · ') and self.异界 not in i.name):
|
||||
# pass
|
||||
# else:
|
||||
# equs.append(
|
||||
# {
|
||||
# 'id': i.id,
|
||||
# 'name': i.name,
|
||||
# 'icon': i.icon,
|
||||
# 'typeSon1Id': i.typeSon1Id,
|
||||
# 'typeSon2Id': i.typeSon2Id,
|
||||
# 'typeSon3Id': i.typeSon3Id,
|
||||
# 'rarity': i.rarity,
|
||||
# 'lv': i.lv,
|
||||
# 'suit': i.suit,
|
||||
# }
|
||||
# )
|
||||
# 附魔、徽章
|
||||
# for i in self.equs.prop:
|
||||
# if i.typeSon1Id == '附魔':
|
||||
# enchats.append(
|
||||
# {
|
||||
# 'id': i.id,
|
||||
# 'name': i.name,
|
||||
# 'icon': i.icon,
|
||||
# 'typeSon1Id': i.typeSon1Id,
|
||||
# 'typeSon2Id': i.typeSon2Id,
|
||||
# 'typeSon3Id': i.typeSon3Id,
|
||||
# 'rarity': i.rarity,
|
||||
# 'lv': i.lv,
|
||||
# 'desc': i.desc,
|
||||
# }
|
||||
# )
|
||||
# if i.typeSon1Id == '徽章':
|
||||
# emblems.append(
|
||||
# {
|
||||
# 'id': i.id,
|
||||
# 'name': i.name,
|
||||
# 'icon': i.icon,
|
||||
# 'typeSon1Id': i.typeSon1Id,
|
||||
# 'typeSon2Id': i.typeSon2Id,
|
||||
# 'typeSon3Id': i.typeSon3Id,
|
||||
# 'rarity': i.rarity,
|
||||
# 'lv': i.lv,
|
||||
# 'desc': i.desc,
|
||||
# }
|
||||
# )
|
||||
# info['enchats'] = enchats
|
||||
# info['emblems'] = emblems
|
||||
# info['seal'] = [i.__dict__ for i in self.equs.seal]
|
||||
return info
|
||||
|
||||
def getBasicInos(self):
|
||||
@@ -498,13 +434,8 @@ class Character:
|
||||
def load_skills(self):
|
||||
pass
|
||||
|
||||
def calc(self, setInfo: dict[str, dict]):
|
||||
funcs = []
|
||||
suits = []
|
||||
self.calc_init(setInfo)
|
||||
# self.SetDetail(setInfo)
|
||||
# 角色基础属性
|
||||
self.SetBaseStatus()
|
||||
def calc_suits(self):
|
||||
"""套装效果统计"""
|
||||
suitInfo = {}
|
||||
equs = get_equipment(self.equVersion)
|
||||
# 设置装备和获取对应的套装属性
|
||||
@@ -514,14 +445,87 @@ class Character:
|
||||
# 当前部位适用调试后的属性
|
||||
partEqu = equs.equ_dict.get(cur.id).adapt(cur.adaptation)
|
||||
# 设置当前部位的装备
|
||||
self.equs[part] = equs.equ_dict.get(cur.id)
|
||||
self.charEquipInfo[part].equInfo = 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)
|
||||
if suitInfo.get(suit, None) is None:
|
||||
suitInfo[suit] = {
|
||||
"point": 0,
|
||||
"count": 0,
|
||||
}
|
||||
if partEqu.Point == 0:
|
||||
suitInfo[suit]['count'] += 1
|
||||
else:
|
||||
suitInfo[suit]['point'] += partEqu.Point
|
||||
# 取得点数最高的套装
|
||||
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 = []
|
||||
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'])]
|
||||
else:
|
||||
suits_effect += [i.id for i in equs.get_suit_info(suit, suitInfo[suit]['point'], 0)]
|
||||
return suits_effect
|
||||
|
||||
def calc_basic(self):
|
||||
"""计算基础属性:防具精通、增幅、强化等"""
|
||||
# 防具精通跟随装备品级
|
||||
for part in ['上衣', '头肩', '下装', '腰带', '鞋']:
|
||||
cur = self.charEquipInfo[part]
|
||||
equ = cur.equInfo
|
||||
reinforce = self.charEquipInfo[part].reinforce
|
||||
value = 精通计算(115, equ.rarity,reinforce,equ.itemDetailType,self.防具类型)
|
||||
for key in self.防具精通属性:
|
||||
key = get_key_by_value(key)
|
||||
setattr(self, key, getattr(self, key) + value[key])
|
||||
# 115增幅强化品级固定史诗
|
||||
for part in self.charEquipInfo.keys():
|
||||
cur = self.charEquipInfo[part]
|
||||
# 增幅
|
||||
if cur.reinforceType == 1:
|
||||
# 增幅四维
|
||||
value = 增幅计算(115,'史诗',cur.reinforce)
|
||||
self.SetStatus(STR=value,INT=value,Spirit=value,Vitality=value)
|
||||
# 增幅计算
|
||||
# 武器、特殊装备强化额外效果计算
|
||||
# 传世武器强化系数取所有武器的最高的1.12
|
||||
pass
|
||||
|
||||
def calc_jade(self):
|
||||
"""计算辟邪玉效果"""
|
||||
pass
|
||||
|
||||
def calc(self, setInfo: dict[str, dict]):
|
||||
funcs = []
|
||||
suits = []
|
||||
self.calc_init(setInfo)
|
||||
# self.SetDetail(setInfo)
|
||||
# 角色基础属性
|
||||
self.SetBaseStatus()
|
||||
# 辟邪玉计算
|
||||
# 精通、增幅、强化计算
|
||||
self.calc_basic()
|
||||
# 单件效果计算
|
||||
# 套装效果列表
|
||||
suits_effect = self.calc_suits()
|
||||
effects = get_equipment(self.equVersion).funs
|
||||
for effect in suits_effect:
|
||||
func = effects.suit_func_list.get(str(effect), None)
|
||||
func(self)
|
||||
# 徽章计算
|
||||
# 附魔计算
|
||||
|
||||
# 技能计算
|
||||
skill = self.GetSkillByName('G-35L感电手雷')
|
||||
print(skill.getSkillDate(skill.lv),skill.skillDamage,skill.skillRation)
|
||||
#
|
||||
return
|
||||
# 技能影响角色的属性,如属强、抗性等
|
||||
for skill in self.skills:
|
||||
@@ -554,35 +558,6 @@ class Character:
|
||||
fun = self.equs.get_func_by_id(f'seal_{seal}')
|
||||
funcs.append(fun + (equ,))
|
||||
# endregion
|
||||
# region 套装效果
|
||||
matchSuit = []
|
||||
for i in list(set(filter(lambda x: x != '' and x is not None, suits))):
|
||||
# 获取当前的套装的数量
|
||||
nums = len(list(filter(lambda x: x == i, suits)))
|
||||
# 获取当前的套装信息
|
||||
suisInfos = list(filter(lambda x: x.suitID == i, self.equs.suit))
|
||||
if len(suisInfos) > 0:
|
||||
matchSuit += [i.id for i in list(filter(lambda x: x.needNum <= nums, suisInfos))]
|
||||
# 兼容于判断
|
||||
if suisInfos[0].compatibility is not None and suisInfos[0].compatibility != '':
|
||||
for compatibility in suisInfos[0].compatibility.split(','):
|
||||
# 兼容于的装备数量
|
||||
numsComp = len(list(filter(lambda x: x == compatibility, suits)))
|
||||
# 大于兼容于小于兼容于加上当前套装数量
|
||||
if numsComp > 0:
|
||||
matchSuit += [
|
||||
i.id
|
||||
for i in list(
|
||||
filter(
|
||||
lambda x: x.suitID == compatibility and numsComp < x.needNum <= nums + numsComp,
|
||||
self.equs.suit,
|
||||
)
|
||||
)
|
||||
]
|
||||
for i in matchSuit:
|
||||
fun = self.equs.get_func_by_id(f'suit_{i}')
|
||||
funcs.append(fun + (None,))
|
||||
# endregion
|
||||
funcs.sort(key=lambda x: x[2])
|
||||
for func in funcs:
|
||||
# 站街
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import importlib
|
||||
from database.models import Session, EquData, SuitData
|
||||
from database.connect import get_db_engine as get_engine
|
||||
from functools import cache
|
||||
@@ -70,6 +71,7 @@ class Equipments:
|
||||
self.version = version
|
||||
self.engine = get_engine(version)
|
||||
self.equs: list[Equ] = []
|
||||
self.funs = self.init_func()
|
||||
self.equ_dict: dict[str, Equ] = {}
|
||||
self.suits: list[Suit] = []
|
||||
self.suit_dict: dict[str, Suit] = {}
|
||||
@@ -109,6 +111,14 @@ class Equipments:
|
||||
self.suit_dict.setdefault(str(suit.suitId), []).append(suit)
|
||||
pass
|
||||
|
||||
def init_func(self):
|
||||
"""根据装备版本加载装备效果"""
|
||||
try:
|
||||
funs = importlib.import_module(f"core.equipment.version_{self.version}")
|
||||
except Exception:
|
||||
funs = importlib.import_module("core.equipment.version_0")
|
||||
return funs
|
||||
|
||||
def get_suit_info(self, suitId: str | int, point: int = 0, count: int = 0) -> list[Suit]:
|
||||
"""根据套装点数返回对应适用的套装属性\n
|
||||
新套装只需要传入suitID和point即可,count默认为0\n
|
||||
@@ -141,7 +151,6 @@ class EquEffect:
|
||||
self.cd = cd
|
||||
self.data = data
|
||||
|
||||
@cache
|
||||
def get_equipment(version: str = '0') -> Equipments:
|
||||
# print('加载装备信息')
|
||||
return Equipments(version)
|
||||
|
||||
@@ -25,11 +25,8 @@ def 强化技攻(强化等级, 强化类型, 部位):
|
||||
增幅品级底数 = {'稀有': 10, '神器': 11, '勇者': 10, '传说': 11, '史诗': 12, '神话': 13}
|
||||
|
||||
|
||||
def 增幅计算(装备等级, 品质, 强化等级, 版本='GF'):
|
||||
if 版本 == 'GF':
|
||||
if 品质 == '智慧产物':
|
||||
return 0
|
||||
return int((装备等级 + 增幅品级加分[品质]) * 增幅成长系数[品质] * 增幅系数[强化等级] / 100 - 0.00000001) + 增幅品级底数[品质] + (0 if 强化等级 < 12 else 5)
|
||||
def 增幅计算(装备等级, 品质, 强化等级):
|
||||
return int((装备等级 + 增幅品级加分[品质]) * 增幅成长系数[品质] * 增幅系数[强化等级] / 100 - 0.00000001) + 增幅品级底数[品质] + (0 if 强化等级 < 12 else 5)
|
||||
|
||||
|
||||
# endregion
|
||||
@@ -179,8 +176,8 @@ def 勋章计算(装备等级, 品质, 强化等级):
|
||||
}
|
||||
|
||||
|
||||
def 武器强化计算(装备等级, 品质, 强化等级, 武器类型, 类型):
|
||||
武器系数 = 武器类型系数[武器类型][0 if 类型 == '物理' else 1]
|
||||
def 武器强化计算(装备等级, 品质, 强化等级, 武器类型, 类型, 默认系数=0):
|
||||
武器系数 = max(武器类型系数[武器类型][0 if 类型 == '物理' else 1], 默认系数)
|
||||
return int((装备等级 + 武器品级加分[品质]) / 8 * 武器成长系数[品质] * 武器强化系数[强化等级] * 武器系数)
|
||||
|
||||
|
||||
@@ -290,10 +287,9 @@ def 武器冷却惩罚(武器类型, 输出类型):
|
||||
# return 武器冷却惩罚系数_HF[武器类型][类型系数]
|
||||
|
||||
|
||||
def 武器MP系数(武器类型, 输出类型, 版本='GF') -> float:
|
||||
def 武器MP系数(武器类型, 输出类型) -> float:
|
||||
类型系数 = 0 if 输出类型 == '物理百分比' else (1 if 输出类型 == '魔法百分比' else 2)
|
||||
if 版本 == 'GF':
|
||||
return MP系数[武器类型][类型系数]
|
||||
return MP系数[武器类型][类型系数]
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
@@ -3,13 +3,6 @@ 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 潜影暗袭
|
||||
|
||||
|
||||
@@ -530,7 +523,7 @@ def suit_37(char: Character):
|
||||
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.SetStatus(SpeedM=0.15)
|
||||
char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=15, data=118200))
|
||||
pass
|
||||
|
||||
@@ -615,6 +608,7 @@ def suit_40(char: Character):
|
||||
一被击时,精灵之魂- 5(冷却时间1秒)
|
||||
- 元素释放伤害量:118,200%
|
||||
"""
|
||||
print("~~~~~~")
|
||||
suit_37(char)
|
||||
pass
|
||||
|
||||
@@ -676,7 +670,7 @@ def suit_42(char: Character):
|
||||
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.SetStatus(SpeedM=0.15)
|
||||
char.equ_effect.append(EquEffect(name='元素释放', icon='', cd=10, data=181920))
|
||||
char.equ_effect.append(EquEffect(name='精灵女王提泰妮娅', icon='', cd=5, data=47520))
|
||||
pass
|
||||
@@ -4109,3 +4103,10 @@ def suit_252(char: Character):
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
for i in range(0, 300):
|
||||
try:
|
||||
if str(i) not in suit_func_list.keys():
|
||||
suit_func_list[str(i)] = eval(f'suit_{i}')
|
||||
except Exception:
|
||||
pass
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
<template>
|
||||
<div class="flex flex-wrap gap-4px content-start" :style="{width: `${rowCount * 32}px`}">
|
||||
<template v-for="(equ,_) in equs" :key="_">
|
||||
<EquipmentIcon :equipment="equ" />
|
||||
<template v-for="(equip,_) in equs" :key="_">
|
||||
<EquipmentIcon :inactive="configStore.config.equips[equip?.itemDetailType ?? '']?.id != equip?.id" :equipment="equip" @click="chooseEqu(equip)" />
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type { IEquipment } from '@/api/info/type'
|
||||
import { useInfoStore } from '@/stores'
|
||||
import { useConfigStore, useInfoStore } from '@/stores'
|
||||
import { getImageURL } from '@/utils/images'
|
||||
import EquipmentIcon from '@/components/dnf/Equipment/Icon/index.vue'
|
||||
|
||||
@@ -20,6 +20,7 @@ const props = defineProps<{
|
||||
|
||||
const rowCount = Math.max(props.rowCount ?? 0, 14)
|
||||
const infoStore = useInfoStore()
|
||||
const configStore = useConfigStore()
|
||||
|
||||
const equs = computed(() => {
|
||||
const items = infoStore.equips.filter(
|
||||
@@ -38,4 +39,10 @@ const equs = computed(() => {
|
||||
})
|
||||
return res
|
||||
})
|
||||
|
||||
const chooseEqu = async(equip: IEquipment | undefined) => {
|
||||
if (equip && configStore.config.equips[equip.itemDetailType]) {
|
||||
configStore.config.equips[equip.itemDetailType].id = equip.id
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user