from math import ceil
from PublicReference.equipment.equ_list import *
from PublicReference.view.MainWindow import *
from PublicReference.utils.common import to_percent
from PublicReference.utils.uniqueCode import get_mac_address
from PublicReference.utils.watermark_def import *
from PublicReference.view.DialogRegister import DefaultDialogRegister
from PublicReference.utils.usage_counter import increase_counter
装备版本 = "GF"
装备增幅版本 = "GF"
# with open("ResourceFiles/Config/release_version.json") as fp:
# versionInfo = json.load(fp)
# 装备版本 = versionInfo['EquipmentVersion'].upper()
# 装备增幅版本 = versionInfo['ZFVersion'].upper()
# fp.close()
class 属性():
实际名称 = ''
角色 = ''
职业 = ''
版本 = 装备版本
增幅版本 = 装备增幅版本
武器选项 = []
类型选择 = []
类型 = ''
防具类型 = ''
防具精通属性 = []
基础力量 = 0
基础智力 = 0
基础体力 = 0
基础精神 = 0
力量 = 0
智力 = 0
体力 = 0
精神 = 0
进图力量 = 0.0
进图智力 = 0.0
进图体力 = 0.0
进图精神 = 0.0
技能栏 = []
技能表 = {}
技能序号 = {}
装备栏 = []
套装栏 = []
武器类型 = ''
是否增幅 = [0] * 12
强化等级 = [12] * 12
改造等级 = [5] * 12
武器锻造等级 = 0
护石第一栏 = '无'
护石第二栏 = '无'
护石第三栏 = '无'
def __init__(self):
self.类型 = ''
self.武器选项 = []
self.类型选择 = []
self.防具精通属性 = []
self.装备栏 = []
self.套装栏 = []
self.技能栏 = []
self.技能序号 = {}
self.是否增幅 = [0] * 12
self.强化等级 = [12] * 12
self.改造等级 = [5] * 12
pass
def 穿戴装备(self, 装备, 套装):
self.装备栏 = 装备
self.套装栏 = 套装
self.武器类型 = equ.get_equ_by_name(self.装备栏[11]).类型
def 穿戴装备计算套装(self, 装备):
self.装备栏 = 装备
self.适用套装计算()
self.武器类型 = equ.get_equ_by_name(self.装备栏[11]).类型
def 适用套装计算(self):
self.套装栏 = equ.get_suits_by_equips(self.装备栏)
def 防具基础(self):
for i in [0, 1, 2, 3, 4]:
temp = equ.get_equ_by_name(self.装备栏[i])
if temp.等级 > 85 or self.转甲选项 == 1:
self.力量 += temp.力量[self.防具类型]
self.智力 += temp.智力[self.防具类型]
else:
self.力量 += temp.力量[temp.类型]
self.智力 += temp.智力[temp.类型]
精通数值 = self.防具精通计算(i)
if '力量' in self.防具精通属性:
self.力量 += 精通数值
if '智力' in self.防具精通属性:
self.智力 += 精通数值
def 增幅基础(self):
for i in range(12):
temp = equ.get_equ_by_name(self.装备栏[i])
if self.是否增幅[i] and temp.所属套装 != '智慧产物':
x = 增幅计算(temp.等级, temp.品质, self.强化等级[i], self.增幅版本)
if '物理' in self.类型 or '力量' in self.类型:
self.力量 += x
else:
self.智力 += x
def 首饰基础(self):
for i in [5, 6, 7]:
temp = equ.get_equ_by_name(self.装备栏[i])
self.力量 += temp.力量
self.智力 += temp.智力
self.物理攻击力 += temp.物理攻击力
self.魔法攻击力 += temp.魔法攻击力
self.独立攻击力 += temp.独立攻击力
def 特殊基础(self):
for i in [8, 9, 10]:
temp = equ.get_equ_by_name(self.装备栏[i])
self.力量 += temp.力量
self.智力 += temp.智力
self.物理攻击力 += temp.物理攻击力
self.魔法攻击力 += temp.魔法攻击力
self.独立攻击力 += temp.独立攻击力
# 耳环
temp = equ.get_equ_by_name(self.装备栏[8])
if temp.所属套装 != '智慧产物':
x = 耳环计算(temp.等级, temp.品质, self.强化等级[8])
self.物理攻击力 += x
self.魔法攻击力 += x
self.独立攻击力 += x
# 辅助装备、魔法石
for i in [9, 10]:
temp = equ.get_equ_by_name(self.装备栏[i])
if temp.所属套装 != '智慧产物':
x = 左右计算(temp.等级, temp.品质, self.强化等级[i])
self.力量 += x
self.智力 += x
def 武器基础(self):
temp = equ.get_equ_by_name(self.装备栏[11])
self.力量 += temp.力量
self.智力 += temp.智力
self.物理攻击力 += temp.物理攻击力
self.魔法攻击力 += temp.魔法攻击力
self.独立攻击力 += temp.独立攻击力
if temp.所属套装 != '智慧产物':
self.物理攻击力 += 武器计算(temp.等级, temp.品质, self.强化等级[11], self.武器类型,
'物理')
self.魔法攻击力 += 武器计算(temp.等级, temp.品质, self.强化等级[11], self.武器类型,
'魔法')
self.独立攻击力 += 锻造计算(temp.等级, temp.品质, self.武器锻造等级)
def 装备基础(self):
if 调试开关 == 0:
self.防具基础()
self.首饰基础()
self.特殊基础()
self.武器基础()
self.增幅基础()
def 获取增幅(self, 部位):
return self.是否增幅[部位列表.index(部位)]
def 获取强化(self, 部位):
return self.强化等级[部位列表.index(部位)]
def 获取改造(self, 部位):
return self.改造等级[部位列表.index(部位)]
def 装备检查(self, 装备名称):
for i in self.装备栏:
if i == 装备名称:
return True
return False
def 单技能等级加成(self, 名称, lv):
if self.装备描述 == 1:
return "{} Lv +{}
".format(名称, lv)
else:
for i in self.技能栏:
if i.名称 == 名称:
i.等级加成(lv)
return ''
def 等级溢出判断(self, 装备, 套装):
self.穿戴装备(装备, 套装)
self.装备属性计算()
temp = []
for i in self.技能栏:
if i.等级溢出 == 1:
temp.append(i.名称)
return temp
class 窗口(QWidget):
calc_done_signal = pyqtSignal()
update_remaining_signal = pyqtSignal(str)
def __init__(self):
super().__init__()
self.calc_done_signal.connect(self.calc_done)
self.update_remaining_signal.connect(self.update_remaining)
self.窗口属性输入()
store.delete("^/(buffer|carry|fame)/.*$")
is_carry = self.初始属性.职业分类 == "输出"
store.set("type", 'carry' if is_carry else 'buffer')
store.set("/{type}/memory/original_property", self.初始属性)
self.界面()
self.布局界面()
# 创建配置文件夹
path = './ResourceFiles/{}/set'.format(self.角色属性A.实际名称)
# 判断从哪读取数据
if os.path.exists(path):
self.载入配置('set')
else:
self.载入配置('reset')
os.makedirs(path)
self.存档列表读取()
if is_carry:
self.技能存档列表读取()
self.click_window(0)
def 关闭窗口(self):
self.close()
def closeEvent(self, event):
DefaultDialogRegister.dispose()
self.保存配置(self.存档位置)
self.关闭排行窗口()
super().closeEvent(event)
def 窗口属性输入(self):
pass
def 重置页面(self, i):
box = QMessageBox(
QMessageBox.Warning, "提示",
"是否重置{}页面?".format(self.页面名称[i]))
box.setWindowIcon(self.icon)
yes = box.addButton(self.tr("确定"), QMessageBox.YesRole)
no = box.addButton(self.tr("取消"), QMessageBox.NoRole)
box.exec_()
if box.clickedButton() == yes:
try:
self.载入json(path='reset', page=[i])
except:
pass
def 界面(self):
# self.setWindowTitle(self.角色属性A.实际名称 + "搭配计算器&17173DNF专区 (点击标签栏按钮切换界面)"+"装备版本:"+self.角色属性A.版本 + " 增幅版本:" + self.角色属性A.增幅版本)
名称 = self.角色属性A.实际名称
self.setWindowTitle(
trans(名称.replace('·男', '').replace('·女', '')) +
(('·' + trans('男')) if '男' in 名称 else (
('·' + trans('女')) if '女' in 名称 else '')) + ' & ' +
trans('17173DNF专区'))
self.icon = QIcon('./ResourceFiles/' + self.角色属性A.实际名称 +
'/技能/BUFF.png')
self.setWindowIcon(self.icon)
self.setStyleSheet('''QToolTip {
background-color: black;
color: white;
border: 0px
}''')
if not SkinVersion == 'None':
背景颜色 = QLabel(self)
背景颜色.resize(self.width(), self.height())
背景颜色.setStyleSheet("QLabel{background-color:rgba(50,50,50,1)}")
主背景透明度 = QGraphicsOpacityEffect()
主背景透明度.setOpacity(0.1)
self.主背景图片 = QPixmap('./ResourceFiles/' + self.角色属性A.实际名称 +
"/bg.jpg")
主背景 = QLabel(self)
主背景.setPixmap(self.主背景图片)
主背景.move(0, int((self.height() - 1230) / 6))
主背景.setGraphicsEffect(主背景透明度)
边框 = QLabel(self)
边框.resize(self.width() - 4, self.height() - 2)
边框.move(2, -1)
边框.setStyleSheet("QLabel{border:1px solid black}")
# 边框.setStyleSheet("QLabel{border-image:url(ResourceFiles/img/UI/边框.png)}")
self.技能图片 = []
for i in self.角色属性A.技能栏:
path = './ResourceFiles/' + self.角色属性A.实际名称 + "/技能/" + i.名称 + ".png"
self.技能图片.append(QPixmap(path))
self.输出窗口列表 = []
self.排行窗口列表 = []
self.当前页面 = 0
self.全选状态 = 0
self.遮罩透明度 = []
self.装备图片按钮 = []
for i in equ.get_equ_list():
self.遮罩透明度.append(QGraphicsOpacityEffect())
self.装备图片按钮.append('')
self.装备选择状态 = []
self.装备条件选择 = []
equ.load_img()
for i in equ.get_equ_list():
self.装备选择状态.append(0)
self.有效防具套装 = []
self.有效首饰套装 = []
self.有效特殊套装 = []
self.有效上链左套装 = []
self.有效镯下右套装 = []
self.有效环鞋指套装 = []
self.有效总套装列表 = [
self.有效防具套装, self.有效首饰套装, self.有效特殊套装, self.有效上链左套装, self.有效镯下右套装,
self.有效环鞋指套装
]
self.有效武器列表 = []
self.组合名称选择 = []
self.有效穿戴组合 = []
self.有效穿戴套装 = []
self.百变怪列表 = []
self.有效部位列表 = []
self.排行数据 = []
# 工具栏
self.frame_tool = QFrame(self)
self.frame_tool.setGeometry(0, 0, self.width() + 2, 27)
self.frame_tool.move(-1, -1)
self.frame_tool.setFrameShape(1)
if self.初始属性.职业分类 == '输出':
self.页面名称 = trans([
"装备/选择/打造", "技能/符文/药剂", "基础/细节/修正", "神话/改造属性修正",
"辟邪玉/希洛克/黑鸦/奥兹玛", "自选装备计算"
])
else:
self.页面名称 = trans(
["装备/选择/打造", "技能/符文/其它", "基础/细节/修正", "神话属性修正", "自选装备计算"])
self.页面数量 = len(self.页面名称)
self.btn_group = QButtonGroup(self.frame_tool)
self.window_btn = []
for i in range(self.页面数量):
self.window_btn.append(MyQToolButton(self.frame_tool))
self.window_btn[-1].setText(self.页面名称[i])
self.window_btn[-1].resize(int(self.width() / self.页面数量 - 8), 21)
self.window_btn[-1].move((self.window_btn[-1].width()) * i + 10, 6)
self.window_btn[-1].clicked.connect(
lambda state, index=i, name=self.页面名称[i]: self.click_window(
index, info=name))
self.window_btn[-1].DoubleClickSig.connect(
lambda state, index=i: self.重置页面(index))
self.btn_group.addButton(self.window_btn[-1], i)
# 2. 工作区域
self.main_frame = QFrame(self)
self.main_frame.setGeometry(0, 28, self.width(),
self.height() - self.frame_tool.height())
# 创建堆叠布局
self.stacked_layout = QStackedLayout(self.main_frame)
self.main_frame1 = QWidget()
self.main_frame1.setStyleSheet(滚动条样式)
self.main_frame2 = QWidget()
self.main_frame2.setStyleSheet(滚动条样式)
self.main_frame3 = QWidget()
self.main_frame3.setStyleSheet(滚动条样式)
self.main_frame4 = QWidget()
self.main_frame4.setStyleSheet(滚动条样式)
self.main_frame5 = QWidget()
self.main_frame5.setStyleSheet(滚动条样式)
self.main_frame6 = QWidget()
self.main_frame6.setStyleSheet(滚动条样式)
self.界面1()
self.界面2()
self.界面3()
self.界面4()
if self.初始属性.职业分类 == '输出':
self.界面6()
self.界面5()
def 布局界面(self):
# 把布局界面放进去
self.stacked_layout.addWidget(self.main_frame1)
self.main_frame2.setMinimumSize(1120, self.窗口高度)
if self.窗口高度 > 680:
self.scroll = QScrollArea()
self.scroll.setFrameShape(QFrame.NoFrame)
self.main_frame2.setMinimumSize(1100, self.窗口高度 - 20)
self.scroll.setWidget(self.main_frame2)
self.scroll.setStyleSheet(
"QScrollArea {background-color:transparent}")
self.scroll.setStyleSheet(滚动条样式)
self.scroll.viewport().setStyleSheet(
"background-color:transparent")
self.stacked_layout.addWidget(self.scroll)
else:
self.stacked_layout.addWidget(self.main_frame2)
self.stacked_layout.addWidget(self.main_frame3)
self.scroll = QScrollArea()
self.scroll.setFrameShape(QFrame.NoFrame)
self.scroll.setWidget(self.main_frame4)
self.scroll.setStyleSheet("QScrollArea {background-color:transparent}")
self.scroll.setStyleSheet(滚动条样式)
self.scroll.viewport().setStyleSheet("background-color:transparent")
self.stacked_layout.addWidget(self.scroll)
if self.初始属性.职业分类 == '输出':
self.stacked_layout.addWidget(self.main_frame6)
self.stacked_layout.addWidget(self.main_frame5)
def 套装描述(self, i):
temp = ''
for n in [2, 3, 5]:
name = '{}[{}]'.format(i.名称, n)
if name in equ.get_suit_name():
try:
描述 = ''
if self.角色属性A.职业分类 == 'BUFF':
描述 = equ.get_suit_by_name(name).装备描述_BUFF(
self.角色属性A)[:-4]
else:
描述 = equ.get_suit_by_name(name).装备描述(self.角色属性A)[:-4]
if 描述 != '':
temp += '' + trans(
i.名称) + '[{}]
'.format(n)
temp += 描述
temp += '
'
except Exception as e:
logger.error(e)
pass
return temp[:-4] + ''
def 单件描述(self, i):
temp = ''.format(颜色[i.品质])
temp += trans(i.名称) + '
' + trans(i.类型) + \
'-' + trans(i.部位) + '
'
if self.角色属性A.职业分类 == 'BUFF':
temp += i.装备描述_BUFF(self.角色属性A)
else:
temp += i.装备描述(self.角色属性A)
return temp[:-4] + ''
def 单件装备判断(self, i):
if i.所属套装 == '智慧产物' and i.部位 != '武器' and i.模式 == 0:
return True
elif i.名称 == '王座本源' and self.角色属性A.职业分类 == 'BUFF':
return True
else:
return False
def 武器装备判断(self, i):
if i.部位 == '武器' and i.类型 in self.角色属性A.武器选项 and i.模式 == 0:
return True
else:
return False
def 其他装备判断(self, i):
if i.所属套装 in 所有套装列表:
return True
else:
return False
def 描述更新(self, index, i):
if index == '称号':
i.setToolTip(self.称号描述())
else:
i.setToolTip(self.宠物描述())
def 界面1(self):
self.一键站街设置输入 = []
水平间距 = [0, 350, 640]
counter1 = 0
for 布局列表 in [防具套装, 上链左套装 + 镯下右套装 + 环鞋指套装, 首饰套装 + 特殊套装]:
counter2 = 0
for 名称 in 布局列表:
for i in equ.get_suit_list():
if i.名称 == 名称 and i.件数 == 2:
self.按钮 = QPushButton(trans(i.名称), self.main_frame1)
self.按钮.move(水平间距[counter1] + 10, 10 + counter2 * 32)
self.按钮.setStyleSheet(套装按钮样式)
self.按钮.resize(120, 28)
self.按钮.clicked.connect(
lambda state, index=i.名称: self.套装按钮点击事件(index))
self.按钮.setToolTip(self.套装描述(i))
counter3 = 0
for 品质 in ['神话', '史诗']:
for 部位 in [
'上衣', '头肩', '下装', '鞋', '腰带', '项链', '手镯',
'戒指', '辅助装备', '魔法石', '耳环'
]:
for j in equ.get_equ_id_list():
temp = equ.get_equ_by_id(j)
if temp.所属套装 == i.名称 and temp.品质 == 品质 and temp.部位 == 部位:
self.图片 = QLabel(self.main_frame1)
self.图片.setMovie(equ.get_img_by_id(j))
self.图片.resize(28, 28)
self.图片.move(
水平间距[counter1] + 150 +
32 * counter3, 10 + counter2 * 32)
self.按钮 = QPushButton(self.main_frame1)
self.按钮.setStyleSheet(
"background-color: rgb(0, 0, 0)")
self.按钮.resize(28, 28)
self.按钮.setToolTip(self.单件描述(temp))
self.遮罩透明度[j].setOpacity(0.5)
self.按钮.setGraphicsEffect(
self.遮罩透明度[j])
self.按钮.clicked.connect(
lambda state, index=j: self.
装备图标点击事件(index, 10))
self.装备图片按钮[j] = self.按钮
self.装备图片按钮[j].move(
水平间距[counter1] + 150 +
32 * counter3, 10 + counter2 * 32)
counter3 += 1
counter2 += 1
counter1 += 1
counter5 = 8
self.按钮 = QPushButton(trans('武器列表'), self.main_frame1)
self.按钮.move(650, 15 + counter5 * 32)
self.按钮.resize(265, 28)
self.按钮.setStyleSheet(套装按钮样式)
self.按钮.clicked.connect(lambda state, index='武器': self.套装按钮点击事件(index))
counter4 = 0
counter5 += 1
for i in equ.get_equ_list():
if self.武器装备判断(i):
self.图片 = QLabel(self.main_frame1)
self.图片.setMovie(equ.get_img_by_name(i.名称))
self.图片.resize(28, 28)
self.图片.move(657 + 55 * counter4, 15 + counter5 * 32)
self.按钮 = QPushButton(self.main_frame1)
self.按钮.setStyleSheet("background-color: rgb(0, 0, 0)")
self.按钮.resize(28, 28)
self.按钮.setToolTip(self.单件描述(i))
self.遮罩透明度[equ.get_id_by_name(i.名称)].setOpacity(0.5)
self.按钮.setGraphicsEffect(self.遮罩透明度[equ.get_id_by_name(i.名称)])
self.按钮.clicked.connect(lambda state, index=equ.get_id_by_name(
i.名称): self.装备图标点击事件(index, 10))
self.装备图片按钮[equ.get_id_by_name(i.名称)] = self.按钮
self.装备图片按钮[equ.get_id_by_name(i.名称)].move(
657 + 55 * counter4, 15 + counter5 * 32)
counter4 += 1
if counter4 % 5 == 0:
counter5 += 1
counter4 = 0
if counter4 != 0:
counter5 += 1
self.按钮 = QPushButton(trans('智慧产物'), self.main_frame1)
self.按钮.move(650, 20 + counter5 * 32)
self.按钮.resize(265, 28)
self.按钮.setStyleSheet(套装按钮样式)
self.按钮.clicked.connect(
lambda state, index='智慧产物': self.套装按钮点击事件(index))
counter4 = 0
counter5 += 1
for i in equ.get_equ_list():
if self.单件装备判断(i):
self.图片 = QLabel(self.main_frame1)
self.图片.setMovie(equ.get_img_by_name(i.名称))
self.图片.resize(28, 28)
self.图片.move(657 + 55 * counter4, 20 + counter5 * 32)
self.按钮 = QPushButton(self.main_frame1)
self.按钮.setStyleSheet("background-color: rgb(0, 0, 0)")
self.按钮.resize(28, 28)
self.按钮.setToolTip(self.单件描述(i))
self.遮罩透明度[equ.get_id_by_name(i.名称)].setOpacity(0.5)
self.按钮.setGraphicsEffect(self.遮罩透明度[equ.get_id_by_name(i.名称)])
self.按钮.clicked.connect(lambda state, index=equ.get_id_by_name(
i.名称): self.装备图标点击事件(index, 10))
self.装备图片按钮[equ.get_id_by_name(i.名称)] = self.按钮
self.装备图片按钮[equ.get_id_by_name(i.名称)].move(
657 + 55 * counter4, 20 + counter5 * 32)
counter4 += 1
if counter4 % 5 == 0:
counter5 += 1
counter4 = 0
self.装备打造选项 = []
counter = 0
for i in 部位列表:
x = QLabel(trans(i), self.main_frame1)
x.resize(50, 20)
x.setAlignment(Qt.AlignCenter)
x.setStyleSheet(标签样式)
if counter < 5:
x.move(10, 504 + counter * 30)
else:
if counter < 11:
x.move(270, 500 + (counter - 5) * 25)
else:
x.resize(95, 20)
x.move(550, 500 + (counter - 11) * 30)
counter += 1
counter = 0
for i in 部位列表:
x = MyQComboBox(self.main_frame1)
x.addItems(trans(['强化', '增幅']))
x.resize(55, 20)
self.装备打造选项.append(x)
if counter < 5:
x.move(60, 504 + counter * 30)
else:
if counter < 11:
x.move(330, 500 + (counter - 5) * 25)
else:
x.move(540, 500 + (counter - 10) * 30)
counter += 1
counter = 0
for i in 部位列表:
x = MyQComboBox(self.main_frame1)
for j in range(32):
x.addItem(str(j))
x.resize(50, 20)
self.装备打造选项.append(x)
if counter < 5:
x.move(120, 504 + counter * 30)
else:
if counter < 11:
x.move(390, 500 + (counter - 5) * 25)
else:
x.move(600, 500 + (counter - 10) * 30)
counter += 1
counter = 0
for i in 部位列表:
x = MyQComboBox(self.main_frame1)
for j in range(32):
x.addItem(trans('改造') + '+' + str(j))
x.resize(75, 20)
self.装备打造选项.append(x)
if counter < 5:
x.move(180, 504 + counter * 30)
else:
if counter < 11:
x.move(450, 500 + (counter - 5) * 25)
else:
x.resize(110, 20)
x.move(540, 500 + (counter - 9) * 30)
counter += 1
x = MyQComboBox(self.main_frame1)
for j in range(11):
x.addItem(trans('锻造') + '+' + str(j))
x.resize(110, 20)
x.move(540, 504 + (counter - 9) * 30)
self.装备打造选项.append(x)
x = MyQComboBox(self.main_frame1)
x.addItems(self.角色属性A.类型选择)
x.resize(110, 20)
x.move(540, 504 + (counter - 8) * 30)
self.装备打造选项.append(x)
x = QPushButton(trans('一键全选'), self.main_frame1)
x.clicked.connect(lambda state, index=1: self.批量选择(index))
x.move(520, 400)
x.resize(105, 24)
x.setStyleSheet(按钮样式)
x = QPushButton(trans('一键清空'), self.main_frame1)
x.clicked.connect(lambda state, index=0: self.批量选择(index))
x.move(520, 430)
x.resize(105, 24)
x.setStyleSheet(按钮样式)
x = QPushButton(trans('打造') + '↑', self.main_frame1)
x.clicked.connect(lambda state: self.批量打造(1))
x.move(520, 460)
x.resize(50, 24)
x.setStyleSheet(按钮样式)
x = QPushButton(trans('打造') + '↓', self.main_frame1)
x.clicked.connect(lambda state: self.批量打造(-1))
x.move(575, 460)
x.resize(50, 24)
x.setStyleSheet(按钮样式)
self.称号 = MyQComboBox(self.main_frame1)
self.宠物 = MyQComboBox(self.main_frame1)
self.称号.currentIndexChanged.connect(
lambda state, index='称号': self.描述更新(index, self.称号))
self.宠物.currentIndexChanged.connect(
lambda state, index='宠物': self.描述更新(index, self.宠物))
x = QLabel(trans(trans('称号&宠物选择')), self.main_frame1)
x.resize(130, 20)
x.move(360, 400)
x.setAlignment(Qt.AlignCenter)
x.setStyleSheet(标签样式)
counter = 0
for x in [self.称号, self.宠物]:
x.resize(160, 20)
x.move(350, 430 + counter * 30)
counter += 1
self.计算按钮1 = QPushButton(trans('开始计算'), self.main_frame1)
self.计算按钮1.clicked.connect(lambda state: self.计算())
self.计算按钮1.move(990, 610)
self.计算按钮1.resize(110, 30)
self.计算按钮1.setStyleSheet(按钮样式)
def 界面2(self):
pass
def 界面3(self):
pass
def 界面4(self):
# 第四个布局
self.main_frame4 = QWidget()
self.神话属性选项 = []
self.神话属性图片 = []
num = 0
for j in equ.get_equ_id_list():
temp = equ.get_equ_by_id(j)
if temp.品质 == '神话':
self.神话属性图片.append(QLabel(self.main_frame4))
self.神话属性图片[-1].setMovie(equ.get_img_by_id(j))
self.神话属性图片[-1].setToolTip('' +
temp.名称 + '
' + temp.类型 + '-' +
temp.部位 + '')
self.神话属性图片[-1].resize(28, 28)
self.神话属性图片[-1].move(-1000, -1000)
for i in range(4):
self.神话属性选项.append(MyQComboBox(self.main_frame4))
self.神话属性选项[-1].resize(150, 18)
self.神话属性选项[-1].move(-1000, -1000)
self.神话属性选项[-1].currentIndexChanged.connect(
lambda state, index=num * 4 + i: self.神话属性选项颜色更新(index
))
num += 1
if self.初始属性.职业分类 == '输出':
self.改造产物选项 = []
self.改造产物图片 = []
num = 0
for j in equ.get_equ_id_list():
temp = equ.get_equ_by_id(j)
if temp.所属套装 == '智慧产物':
self.改造产物图片.append(QLabel(self.main_frame4))
self.改造产物图片[-1].setMovie(equ.get_img_by_id(j))
self.改造产物图片[-1].setToolTip('' +
temp.名称 + '
' + temp.类型 +
'-' + temp.部位 + '')
self.改造产物图片[-1].resize(28, 28)
self.改造产物图片[-1].move(-1000, -1000)
for i in range(4):
self.改造产物选项.append(MyQComboBox(self.main_frame4))
self.改造产物选项[-1].resize(150, 18)
self.改造产物选项[-1].move(-1000, -1000)
self.改造产物选项[-1].currentIndexChanged.connect(
lambda state, index=num * 4 + i: self.改造产物选项颜色更新(
index))
num += 1
count = 0
for i in equ.get_equ_list():
if i.品质 == '神话':
描述列表 = [i.属性1描述, i.属性2描述, i.属性3描述, i.属性4描述]
范围列表 = [i.属性1范围, i.属性2范围, i.属性3范围, i.属性4范围]
for j in range(4):
if 描述列表[j] != '无':
self.神话属性选项[count * 4 + j].setEnabled(True)
for k in range(范围列表[j][0], 范围列表[j][1] - 1, -1):
if (k % 范围列表[j][2]) == 0 or k == 范围列表[j][0]:
temp = trans(描述列表[j], value=k)
self.神话属性选项[count * 4 + j].addItem(temp)
else:
self.神话属性选项[count * 4 + j].setEnabled(False)
self.神话属性选项[count * 4 + j].addItem(trans('无'))
count += 1
count = 0
for i in equ.get_equ_list():
if i.所属套装 == '智慧产物':
描述列表 = [i.属性1描述, i.属性2描述, i.属性3描述, i.属性4描述]
范围列表 = [i.属性1范围, i.属性2范围, i.属性3范围, i.属性4范围]
for j in range(4):
if 描述列表[j] != '无':
self.改造产物选项[count * 4 + j].setEnabled(True)
for k in range(范围列表[j][0], 范围列表[j][1] - 1, -1):
if (k % 范围列表[j][2]) == 0 or k == 范围列表[j][0]:
temp = trans(描述列表[j], value=k)
self.改造产物选项[count * 4 + j].addItem(temp)
else:
self.改造产物选项[count * 4 + j].setEnabled(False)
self.改造产物选项[count * 4 + j].addItem(trans('无'))
count += 1
else:
count = 0
for i in equ.get_equ_list():
if i.品质 == '神话':
描述列表 = [
i.属性1描述_BUFF, i.属性2描述_BUFF, i.属性3描述_BUFF, i.属性4描述_BUFF
]
范围列表 = [
i.属性1范围_BUFF, i.属性2范围_BUFF, i.属性3范围_BUFF, i.属性4范围_BUFF
]
for j in range(4):
if 描述列表[j] != '无':
self.神话属性选项[count * 4 + j].setEnabled(True)
for k in range(范围列表[j][0], 范围列表[j][1] - 1, -1):
if (k % 范围列表[j][2]) == 0 or k == 范围列表[j][0]:
temp = trans(描述列表[j], value=k)
self.神话属性选项[count * 4 + j].addItem(temp)
else:
self.神话属性选项[count * 4 + j].setEnabled(False)
self.神话属性选项[count * 4 + j].addItem(trans('无'))
count += 1
pass
def 界面5(self):
pass
def 界面6(self):
pass
def 基准值设置(self, x=0):
self.基准值.clear()
if x == 0:
装备 = []
for i in self.自选装备:
装备.append(i.currentData())
A = deepcopy(self.初始属性)
self.输入属性(A)
A.穿戴装备计算套装(装备)
B = deepcopy(A)
self.关闭排行窗口()
self.排行数据.clear()
self.排行数据.append(装备 + [0] + A.套装栏 + ['无'])
self.输出界面(0, '基准值')
if A.职业分类 == '输出':
self.基准值 = [A.伤害计算(0), B.伤害计算(1)]
else:
self.基准值 = [A.BUFF计算(0), B.BUFF计算(1)]
self.自选计算(1)
def 希洛克选择(self, index, x=0):
if x == 1:
for i in range(15):
self.希洛克遮罩透明度[i].setOpacity(0.5)
self.希洛克选择状态[i] = 0
return
if index >= 100:
序号 = int(index / 100 - 1)
if self.初始属性.职业分类 == '输出':
# 守门人全属强方案
if 序号 == 3:
if self.角色属性A.职业 not in ('冰结师', '鬼泣', '死灵术士', '气功师', '忍者',
'暗枪士'):
number = self.希洛克选择状态[9] + self.希洛克选择状态[
10] + self.希洛克选择状态[11]
if number != 3:
self.守门人属强.setCurrentIndex(3)
self.守门人全属强.setEnabled(True)
self.守门人全属强.setChecked(True)
self.守门人全属强.setStyleSheet(复选框样式)
else:
self.守门人全属强.setEnabled(False)
self.守门人全属强.setChecked(False)
self.守门人全属强.setStyleSheet(复选框样式)
else:
self.守门人全属强.setEnabled(False)
self.守门人全属强.setChecked(False)
self.守门人全属强.setStyleSheet(复选框样式)
count = 0
for i in range(序号 * 3, 序号 * 3 + 3):
count += self.希洛克选择状态[i]
if count != 3:
for i in range(15):
if i in range(序号 * 3, 序号 * 3 + 3):
self.希洛克遮罩透明度[i].setOpacity(0)
self.希洛克选择状态[i] = 1
else:
self.希洛克遮罩透明度[i].setOpacity(0.5)
self.希洛克选择状态[i] = 0
else:
for i in range(序号 * 3, 序号 * 3 + 3):
self.希洛克遮罩透明度[i].setOpacity(0.5)
self.希洛克选择状态[i] = 0
else:
if self.初始属性.职业分类 == '输出':
if self.角色属性A.职业 not in ('冰结师', '鬼泣', '死灵术士', '气功师', '忍者',
'暗枪士'):
number = self.希洛克选择状态[9] + self.希洛克选择状态[10] + self.希洛克选择状态[
11]
if number == 2 and self.希洛克选择状态[index] == 0 and index in [
9, 10, 11
]:
self.守门人属强.setCurrentIndex(3)
self.守门人全属强.setEnabled(True)
self.守门人全属强.setChecked(True)
self.守门人全属强.setStyleSheet(复选框样式)
else:
self.守门人全属强.setEnabled(False)
self.守门人全属强.setChecked(False)
self.守门人全属强.setStyleSheet(复选框样式)
if self.希洛克选择状态[index] == 0:
for i in range(5):
序号 = i * 3 + index % 3
if self.希洛克选择状态[序号] == 1:
self.希洛克遮罩透明度[序号].setOpacity(0.5)
self.希洛克选择状态[序号] = 0
self.希洛克遮罩透明度[index].setOpacity(0)
self.希洛克选择状态[index] = 1
else:
self.希洛克遮罩透明度[index].setOpacity(0.5)
self.希洛克选择状态[index] = 0
def 奥兹玛选择(self, index, x=0):
if x == 1:
for i in range(25):
self.奥兹玛遮罩透明度[i].setOpacity(0.5)
self.奥兹玛选择状态[i] = 0
return
if index >= 100:
序号 = int(index / 100 - 1)
count = 0
for i in range(序号 * 5, 序号 * 5 + 5):
count += self.奥兹玛选择状态[i]
if count != 5:
for i in range(25):
if i in range(序号 * 5, 序号 * 5 + 5):
self.奥兹玛遮罩透明度[i].setOpacity(0)
self.奥兹玛选择状态[i] = 1
else:
self.奥兹玛遮罩透明度[i].setOpacity(0.5)
self.奥兹玛选择状态[i] = 0
else:
for i in range(序号 * 5, 序号 * 5 + 5):
self.奥兹玛遮罩透明度[i].setOpacity(0.5)
self.奥兹玛选择状态[i] = 0
else:
if self.奥兹玛选择状态[index] == 0:
for i in range(5):
序号 = i * 5 + index % 5
if self.奥兹玛选择状态[序号] == 1:
self.奥兹玛遮罩透明度[序号].setOpacity(0.5)
self.奥兹玛选择状态[序号] = 0
self.奥兹玛遮罩透明度[index].setOpacity(0)
self.奥兹玛选择状态[index] = 1
else:
self.奥兹玛遮罩透明度[index].setOpacity(0.5)
self.奥兹玛选择状态[index] = 0
def 技能存档更换(self):
if self.技能存档选择.currentText() == trans('新建存档'):
num = 1
while True:
path = './ResourceFiles/{}/{}'.format(self.角色属性A.实际名称,
'skill-{}'.format(num))
if os.path.exists(path):
num += 1
else:
os.makedirs(path)
break
self.技能存档位置 = 'skill-{}'.format(num)
self.保存json(path=self.技能存档位置, page=[1])
self.技能存档选择.setItemText(self.技能存档选择.count() - 1,
'skill-{}'.format(num))
self.技能存档选择.addItem(trans('新建存档'))
return
if self.技能存档位置 == self.技能存档选择.currentText():
return
if self.技能存档位置 != '全局存档':
box = QMessageBox(
QMessageBox.Warning, "提示",
"即将载入{}技能存档,是否保存当前配置到{}技能存档?"
.format(self.技能存档选择.currentText(), self.技能存档位置))
box.setWindowIcon(self.icon)
yes = box.addButton(self.tr("确定"), QMessageBox.YesRole)
no = box.addButton(self.tr("取消"), QMessageBox.NoRole)
box.exec_()
if box.clickedButton() == yes:
self.保存json(path=self.技能存档位置, page=[1])
self.技能存档位置 = self.技能存档选择.currentText()
if self.技能存档位置 != '全局存档':
self.载入json(path=self.技能存档位置, page=[1])
else:
self.载入json(path=self.存档位置, page=[1])
def 技能存档列表读取(self):
self.技能存档位置 = '全局存档'
path = './ResourceFiles/{}/'.format(self.角色属性A.实际名称)
setfile = ['全局存档']
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir.startswith('skill'):
setfile.append(dir)
self.技能存档选择.clear()
self.技能存档选择.addItems(setfile)
self.技能存档选择.addItem(trans('新建存档'))
self.技能存档位置 = self.技能存档选择.currentText()
def 存档更换(self):
if self.存档选择.currentText() == trans('新建存档'):
num = 1
while True:
path = './ResourceFiles/{}/{}'.format(self.角色属性A.实际名称,
'set-{}'.format(num))
if os.path.exists(path):
num += 1
else:
os.makedirs(path)
break
self.存档位置 = 'set-{}'.format(num)
self.保存配置(self.存档位置)
self.存档选择.setItemText(self.存档选择.count() - 1, 'set-{}'.format(num))
self.存档选择.addItem(trans('新建存档'))
return
if self.存档位置 == self.存档选择.currentText():
return
box = QMessageBox(
QMessageBox.Warning, "提示",
"即将载入{}存档,是否保存当前配置到{}存档?"
.format(self.存档选择.currentText(), self.存档位置))
box.setWindowIcon(self.icon)
yes = box.addButton(self.tr("确定"), QMessageBox.YesRole)
no = box.addButton(self.tr("取消"), QMessageBox.NoRole)
box.exec_()
if box.clickedButton() == yes:
self.保存配置(self.存档位置)
self.存档位置 = self.存档选择.currentText()
self.载入配置(self.存档位置)
def 存档列表读取(self):
self.存档位置 = 'set'
path = './ResourceFiles/' + self.角色属性A.实际名称 + '/'
setfile = []
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir.startswith('set'):
setfile.append(dir)
self.存档选择.clear()
for k in setfile:
self.存档选择.addItem(k)
self.存档选择.addItem(trans('新建存档'))
self.存档位置 = self.存档选择.currentText()
def 全局重置(self):
box = QMessageBox(QMessageBox.Warning, "提示", "是否恢复默认设置?")
box.setWindowIcon(self.icon)
yes = box.addButton(self.tr("确定"), QMessageBox.YesRole)
no = box.addButton(self.tr("取消"), QMessageBox.NoRole)
box.exec_()
if box.clickedButton() == yes:
self.载入配置('reset')
def 改造套装更改(self):
self.计算标识 = 0
名称列表 = []
部位序号 = []
for n in equ.get_equ_list():
try:
if n.关联套装 == self.改造套装.currentData():
名称列表.append(n.名称)
部位序号.append(部位字典[n.部位])
except:
pass
try:
if n.所属套装 == self.改造套装.currentData().split('[')[0]:
名称列表.append(n.名称)
部位序号.append(部位字典[n.部位])
except:
pass
if self.改造套装.currentData() == '兵法之神[5]':
for n in equ.get_equ_list():
try:
if n.所属套装 in ['无相轮回的希望', '流逝轮回的记忆'] and n.部位 != '辅助装备':
名称列表.append(n.名称)
部位序号.append(部位字典[n.部位])
except:
pass
for n in 部位序号:
x = -1
for i in equ.get_equ_list():
if 部位列表[n] == i.部位:
x += 1
if i.名称 in 名称列表:
self.自选装备[n].setCurrentIndex(x)
self.计算标识 = 1
self.自选计算(1)
def 神话部位更改(self):
self.计算标识 = 0
部位 = [-1, 0, 5, 8]
序号 = 部位[self.神话部位选项.currentIndex()]
if 序号 != -1:
当前 = equ.get_equ_by_name(self.自选装备[序号].currentData())
x = -1
for i in equ.get_equ_list():
if 当前.部位 == i.部位:
x += 1
if i.品质 == '神话' and i.所属套装 == 当前.所属套装:
self.自选装备[序号].setCurrentIndex(x)
for k in [0, 5, 8]:
if k != 序号:
当前 = equ.get_equ_by_name(self.自选装备[k].currentData())
if 当前.品质 == '神话':
x = -1
for i in equ.get_equ_list():
if 当前.部位 == i.部位:
x += 1
if i.品质 == '史诗' and i.所属套装 == 当前.所属套装:
self.自选装备[k].setCurrentIndex(x)
self.计算标识 = 1
self.自选计算(1)
def 自选装备更改(self, index=0):
try:
self.图片显示[index].setMovie(
equ.get_img_by_name(self.自选装备[index].currentData()))
except:
pass
if self.初始属性.职业分类 == '输出':
if self.当前页面 == 5 and self.计算标识 == 1:
self.自选计算(1)
else:
if self.当前页面 == 4 and self.计算标识 == 1:
self.自选计算(1)
def 自选套装更改(self, index):
self.计算标识 = 0
name = self.自选套装[index].currentData()
for i in range(11):
if self.装备锁定[i].isChecked():
continue
x = -1
for j in equ.get_equ_list():
if j.部位 == 部位列表[i]:
x += 1
if j.所属套装2 == name:
self.自选装备[i].setCurrentIndex(x)
break
elif j.所属套装 == name and j.品质 != '神话':
self.自选装备[i].setCurrentIndex(x)
break
self.计算标识 = 1
self.自选计算(1)
def 辟邪玉数值选项更新(self, index):
if self.初始属性.职业分类 == '输出':
from PublicReference.equipment.辟邪玉 import 辟邪玉列表
else:
from PublicReference.equipment.buff.辟邪玉_buff import 辟邪玉列表
self.辟邪玉数值[index].clear()
x = self.辟邪玉选择[index].currentIndex()
temp = 辟邪玉列表[x].最大值 * 10
while temp >= 辟邪玉列表[x].最小值 * 10:
t = '+' if temp >= 0 else ''
if 辟邪玉列表[x].间隔 == 1:
self.辟邪玉数值[index].addItem(t + str(int(temp / 10)))
else:
self.辟邪玉数值[index].addItem(t + str('%.1f' % (temp / 10)) + '%')
temp -= 辟邪玉列表[x].间隔 * 10
def 辟邪玉属性计算(self, 属性):
if self.初始属性.职业分类 == '输出':
from PublicReference.equipment.辟邪玉 import 辟邪玉列表
else:
from PublicReference.equipment.buff.辟邪玉_buff import 辟邪玉列表
for i in range(4):
x = self.辟邪玉选择[i].currentIndex()
if self.辟邪玉数值[i].currentIndex() >= 0:
辟邪玉列表[x].当前值 = float(self.辟邪玉数值[i].currentData().replace(
'%', ''))
辟邪玉列表[x].穿戴属性(属性)
def 装备图标点击事件(self, index, sign, x=1):
if equ.get_equ_by_id(index).模式 == 0:
try:
# 改变状态
if sign == 10:
if self.装备选择状态[index] == 0:
self.遮罩透明度[index].setOpacity(0.0)
self.装备选择状态[index] = 1
else:
self.遮罩透明度[index].setOpacity(0.5)
self.装备选择状态[index] = 0
# 点亮
if sign == 1:
self.遮罩透明度[index].setOpacity(0.0)
self.装备选择状态[index] = 1
# 熄灭
if sign == 0:
self.遮罩透明度[index].setOpacity(0.5)
self.装备选择状态[index] = 0
self.装备图片按钮[index].setGraphicsEffect(self.遮罩透明度[index])
if x == 1:
self.计算模式选择.setItemText(
0,
trans("{计算模式:极速模式} {组合}:$value",
value=self.组合数量计算(0)))
self.计算模式选择.setItemText(
1,
trans("{计算模式:套装模式} {组合}:$value",
value=self.组合数量计算(1)))
self.计算模式选择.setItemText(
2,
trans("{计算模式:单件模式} {组合}:$value",
value=self.组合数量计算(2)))
except Exception as error:
pass
def 套装按钮点击事件(self, index):
count = 0
if index == '武器':
for i in equ.get_equ_list():
if i.类型 in self.角色属性A.武器选项:
count += self.装备选择状态[equ.get_id_by_name(i.名称)]
for i in equ.get_equ_list():
if i.类型 in self.角色属性A.武器选项:
self.装备图标点击事件(equ.get_id_by_name(i.名称),
0 if count > 0 else 1)
elif index == '智慧产物':
for i in equ.get_equ_list():
if self.单件装备判断(i):
count += self.装备选择状态[equ.get_id_by_name(i.名称)]
for i in equ.get_equ_list():
if self.单件装备判断(i):
self.装备图标点击事件(equ.get_id_by_name(i.名称),
0 if count > 0 else 1)
else:
for i in equ.get_equ_list():
if i.所属套装 == index:
count += self.装备选择状态[equ.get_id_by_name(i.名称)]
for i in equ.get_equ_list():
if i.所属套装 == index:
self.装备图标点击事件(equ.get_id_by_name(i.名称),
0 if count > 0 else 1)
def 组合数量计算(self, sign, x=0):
if sign == 0 or sign == 1:
self.有效武器列表.clear()
for j in range(6):
self.有效总套装列表[j].clear()
for i in range(len(self.装备选择状态)):
if self.装备选择状态[i] == 1:
temp = equ.get_equ_by_id(i)
for j in range(6):
if (temp.所属套装
in 总套装列表[j]) and (temp.所属套装
not in self.有效总套装列表[j]):
self.有效总套装列表[j].append(temp.所属套装)
if temp.部位 == '武器':
self.有效武器列表.append(temp.名称)
if sign == 0:
counter = (
len(self.有效防具套装) * len(self.有效首饰套装) * len(self.有效特殊套装) +
len(self.有效防具套装) * len(self.有效上链左套装) * len(self.有效镯下右套装) *
len(self.有效环鞋指套装) * 4) * 4 * len(self.有效武器列表)
if sign == 1:
counter = (
len(self.有效防具套装) * len(self.有效首饰套装) * len(self.有效特殊套装) +
len(self.有效防具套装) * len(self.有效上链左套装) * len(self.有效镯下右套装) *
len(self.有效环鞋指套装) * 4 +
len(self.有效防具套装) * len(self.有效首饰套装) * len(self.有效特殊套装) *
(len(self.有效防具套装) - 1) * 10) * 4 * len(self.有效武器列表)
if sign == 2:
self.有效部位列表.clear()
for i in range(12):
self.有效部位列表.append([])
for i in range(len(self.装备选择状态)):
if self.装备选择状态[i] == 1:
temp = equ.get_equ_by_id(i)
self.有效部位列表[部位列表.index(temp.部位)].append(temp.名称)
counter = 0
for a1 in self.有效部位列表[0]:
for a2 in self.有效部位列表[5]:
for a3 in self.有效部位列表[8]:
神话数量 = 0
for i in [a1, a2, a3]:
if equ.get_equ_by_name(i).品质 == '神话':
神话数量 += 1
if 神话数量 <= 1:
counter += 1
for i in [1, 3, 2, 4, 6, 9, 7, 10, 11]:
counter *= len(self.有效部位列表[i])
if x == 0:
if counter <= 9999:
return str(counter)
else:
num = -1
while counter >= 10000:
counter /= 10000
num += 1
name = ['万', '亿', '万亿']
return str(round(counter, 2)) + name[num]
if x == 1:
return counter
def 强化觉醒选择(self, index):
self.觉醒选择状态 = index
if index == 1:
self.一觉遮罩透明度.setOpacity(0.0)
self.二觉遮罩透明度.setOpacity(0.5)
if index == 2:
self.一觉遮罩透明度.setOpacity(0.5)
self.二觉遮罩透明度.setOpacity(0.0)
self.一觉遮罩.setGraphicsEffect(self.一觉遮罩透明度)
self.二觉遮罩.setGraphicsEffect(self.二觉遮罩透明度)
def 批量选择(self, index):
if index == 1:
if self.全选状态 == 1:
self.全选状态 = 0
else:
self.全选状态 = 1
if sum(self.装备选择状态[74:244]) == 170:
self.批量选择(0)
for i in equ.get_equ_list():
if self.武器装备判断(i) or self.单件装备判断(i) or self.其他装备判断(i):
if i.品质 == '神话' and index == 1:
if self.全选状态 == 0:
self.装备图标点击事件(equ.get_id_by_name(i.名称), index, x=0)
else:
self.装备图标点击事件(equ.get_id_by_name(i.名称), index, x=0)
self.装备图标点击事件(74, index)
def 批量打造(self, x):
for i in range(12):
y = max(min(self.装备打造选项[i + 12].currentIndex() + x, 31), 0)
self.装备打造选项[i + 12].setCurrentIndex(y)
def 神话属性选项颜色更新(self, index):
i = self.神话属性选项[index]
if i.currentIndex() != 0:
i.setStyleSheet(下拉框样式_warn)
else:
i.setStyleSheet(下拉框样式)
def 改造产物选项颜色更新(self, index):
i = self.改造产物选项[index]
if i.currentIndex() != 0:
i.setStyleSheet(下拉框样式_warn)
else:
i.setStyleSheet(下拉框样式)
def click_window(self, index, info=''):
if info != '':
increase_counter(ga_category="界面使用情况", name=info)
self.当前页面 = index
if self.stacked_layout.currentIndex() != index:
self.stacked_layout.setCurrentIndex(index)
for i in self.window_btn:
i.setStyleSheet(页签样式)
self.window_btn[index].setStyleSheet(页签样式_选中)
if index == 3:
count1 = 0
count2 = 0
num = 0
width = 1100
height = 680
page4_height = 0
自选装备名称 = []
for i in self.自选装备:
自选装备名称.append(i.currentData())
for j in equ.get_equ_id_list():
temp = equ.get_equ_by_id(j)
if temp.品质 == '神话':
if self.装备选择状态[j] == 1 or temp.名称 in 自选装备名称:
self.神话属性图片[num].move(
int(width / 7 * (count1 % 7 + 0.42)),
int(height / 5.2 * (count2 + 0.05)) - 3)
for i in range(4):
self.神话属性选项[num * 4 + i].move(
int(width / 7 * (count1 % 7) + 6),
int(height / 5.2 * (count2 + 0.05)) - 3 +
i * 22 + 32)
count1 += 1
if count1 % 7 == 0:
count2 += 1
page4_height += 1
else:
self.神话属性图片[num].move(-1000, -1000)
for i in range(4):
self.神话属性选项[num * 4 + i].move(-1000, -1000)
num += 1
if self.初始属性.职业分类 == '输出':
num = 0
for j in equ.get_equ_id_list():
temp = equ.get_equ_by_id(j)
if temp.所属套装 == '智慧产物':
if (self.装备选择状态[j] == 1 or temp.名称
in 自选装备名称) and self.智慧产物升级.isChecked():
self.改造产物图片[num].move(
int(width / 7 * (count1 % 7 + 0.42)),
int(height / 5.2 * (count2 + 0.05)) - 3)
for i in range(4):
self.改造产物选项[num * 4 + i].move(
int(width / 7 * (count1 % 7) + 6),
int(height / 5.2 * (count2 + 0.05)) - 3 +
i * 22 + 32)
count1 += 1
if count1 % 7 == 0:
count2 += 1
page4_height += 1
else:
self.改造产物图片[num].move(-1000, -1000)
for i in range(4):
self.改造产物选项[num * 4 + i].move(-1000, -1000)
num += 1
page4_height = max(ceil(page4_height / 7) * 130, height)
self.main_frame4.setMinimumSize(width, page4_height)
if self.初始属性.职业分类 == '输出':
if index == 5:
self.自选计算(1)
else:
if index == 4:
self.自选计算(1)
def 智慧产物升级洗词条(self, x=0):
count1 = 0
count2 = 0
num = 0
for j in equ.get_equ_id_list():
if equ.get_equ_by_id(j).所属套装 == '智慧产物':
if self.装备选择状态[j] == 1 and x == 1:
self.改造产物图片[num].move(
int(self.width() / 7 * (count1 % 5 + 0.42 + 2)) - 10,
int(self.height() / 5.2 * (count2 + 0.05)))
for i in range(4):
self.改造产物选项[num * 4 + i].move(
int(self.width() / 7 * (count1 % 5 + 2) + 2),
int(self.height() / 5.2 * (count2 + 0.05)) +
i * 22 + 32)
count1 += 1
if count1 % 5 == 0:
count2 += 1
else:
self.改造产物图片[num].move(-1000, -1000)
for i in range(4):
self.改造产物选项[num * 4 + i].move(-1000, -1000)
num += 1
def 修正套装计算(self, x):
self.有效穿戴组合.clear()
装备 = []
if x == 0:
for i in self.有效部位列表:
装备.append(i[0])
elif x == 1:
for i in self.自选装备:
装备.append(i.currentData())
self.有效穿戴组合.append(装备)
def 神话数量判断(self, x=0):
count = 0
for j in equ.get_equ_id_list():
if equ.get_equ_by_id(j).品质 == '神话':
if self.装备选择状态[j] == 1:
count += 1
if x == 0:
if count != 0:
return False
else:
return True
else:
return count
def 单件模式前四层组合(self):
count = 0
for a1 in self.有效部位列表[0]:
for a2 in self.有效部位列表[5]:
for a3 in self.有效部位列表[8]:
神话数量 = 0
for i in [a1, a2, a3]:
if equ.get_equ_by_name(i).品质 == '神话':
神话数量 += 1
if 神话数量 <= 1:
count += 1
return count * len(self.有效部位列表[1])
# 计算
def 计算(self):
self.角色属性A = deepcopy(self.初始属性)
self.输入属性(self.角色属性A)
self.角色属性A.开启切装 = 切装模式
if self.是否计算 != 1:
return
self.保存配置(self.存档位置)
if 调试开关 == 1 and self.角色属性A.职业分类 == '输出':
self.输出界面(-1)
return
if self.神话数量判断() and self.神话排名选项.isChecked():
QMessageBox.information(self, "错误", "请勾选神话装备或取消勾选神话排名模式选项")
return
self.有效部位列表备份 = []
if self.组合计算(self.计算模式选择.currentIndex()) == 0:
if self.计算模式选择.currentIndex() == 0 and self.组合计算(1) != 0:
QMessageBox.information(self, "错误", "已更换为套装模式,请再次计算")
self.计算模式选择.setCurrentIndex(1)
return
elif self.计算模式选择.currentIndex() != 2 and self.组合计算(2) != 0:
QMessageBox.information(self, "错误", "请更换为单件模式,并再次计算")
return
else:
QMessageBox.information(self, "错误", "无有效组合,请重新选择装备")
return
self.计算按钮1.setEnabled(False)
self.计算按钮1.setStyleSheet(按钮样式)
self.计算按钮2.setEnabled(False)
self.计算按钮2.setStyleSheet(按钮样式)
self.计算按钮3.setEnabled(False)
self.计算按钮3.setStyleSheet(按钮样式)
threading.Thread(target=self.计算线程, daemon=True).start()
def 计算线程(self):
logger.info("开始计算")
self.角色属性A = deepcopy(self.初始属性)
self.输入属性(self.角色属性A)
self.最大使用线程数 = thread_num - self.线程数选择.currentIndex()
# -------------------------------------多线程计算流程开始-------------------------------------
startTime = time.time()
finished = False
producer_data.calc_index += 1
producer_data.produced_count = 0
def log_result_queue_info(log_func, msg, mq: MinHeapWithQueue):
log_func(
"calc#{}: {}: {} remaining_qize={} sync_batch_size={} processed_result={}, speed={:.2f}/s totalWork={}"
.format(producer_data.calc_index, mq.name, msg,
mq.minheap_queue.qsize(), mq.minheap.batch_size,
mq.minheap.processed_result_count,
mq.process_results_per_second(),
producer_data.produced_count))
self.update_remaining_signal.emit(
str(mq.minheap.processed_result_count))
def try_fetch_result(mq: MinHeapWithQueue):
idx = 1
while True:
try:
minheap_to_merge = mq.minheap_queue.get(block=False)
mq.minheap.merge(minheap_to_merge)
if mq.minheap.processed_result_count >= 1000 * idx:
log_result_queue_info(
logger.info, "try_fetch_result periodly report",
mq)
idx = mq.minheap.processed_result_count // 1000 + 1
except queue.Empty as error:
break
def try_fetch_result_in_background(mq: MinHeapWithQueue):
while not finished:
log_result_queue_info(logger.info,
"try_fetch_result_in_background", mq)
try_fetch_result(mq)
time.sleep(0.5)
save_top_n = 2 << 64
mq = MinHeapWithQueue("排行", MinHeap(save_top_n, batch_size),
multiprocessing.Manager().Queue())
# 异步排行线程
fetch_result_thread = threading.Thread(
target=try_fetch_result_in_background, args=(mq, ), daemon=True)
fetch_result_thread.start()
# 异步计算搭配
mode_index = self.计算模式选择.currentIndex()
total_task_count = self.组合计算(self.计算模式选择.currentIndex()) # 极速模式和套装模式时
if mode_index == 2:
# 散件模式时
total_task_count = self.单件模式前四层组合()
batch_task_count = min(thread_task * thread_num, total_task_count,
self.最大使用线程数)
start_index, end_index = 0, 0
task_batch_size = total_task_count // batch_task_count
reminder = total_task_count % batch_task_count
for i in range(batch_task_count):
end_index = start_index + task_batch_size - 1
if i < reminder:
end_index += 1
calc_data = CalcData()
if self.角色属性A.职业分类 == "BUFF":
calc_data.是输出职业 = False
calc_data.minheap_queue = mq.minheap_queue
calc_data.角色属性A = deepcopy(self.角色属性A)
calc_data.角色属性A.强化等级 = copy(self.角色属性A.强化等级)
calc_data.角色属性A.改造等级 = copy(self.角色属性A.改造等级)
calc_data.角色属性A.是否增幅 = copy(self.角色属性A.是否增幅)
else:
calc_data.是输出职业 = True
calc_data.智慧产物限制 = self.智慧产物限制.currentIndex() + 1
calc_data.minheap_queue = mq.minheap_queue
calc_data.角色属性A = deepcopy(self.角色属性A)
calc_data.角色属性A.装备切装 = copy(self.角色属性A.装备切装)
calc_data.角色属性A.技能切装 = copy(self.角色属性A.技能切装)
calc_data.角色属性A.切装修正 = copy(self.角色属性A.切装修正)
calc_data.角色属性A.宠物次数 = copy(self.角色属性A.宠物次数)
calc_data.角色属性A.强化等级 = copy(self.角色属性A.强化等级)
calc_data.角色属性A.改造等级 = copy(self.角色属性A.改造等级)
calc_data.角色属性A.是否增幅 = copy(self.角色属性A.是否增幅)
calc_data.角色属性A.次数输入 = copy(self.角色属性A.次数输入)
calc_data.mode_index = mode_index
calc_data.start_index = start_index
calc_data.end_index = end_index
calc_data.装备选择状态 = copy(self.装备选择状态)
for i in self.有效部位列表:
for j in i:
calc_data.装备选择状态[equ.get_id_by_name(j)] = 1
if len(self.有效部位列表备份) != 0:
self.有效部位列表 = deepcopy(self.有效部位列表备份)
calc_data.拥有百变怪 = self.百变怪选项.isChecked()
calc_data.神话属性选项 = [cb.currentIndex() for cb in self.神话属性选项]
if self.初始属性.职业分类 == '输出':
calc_data.改造产物选项 = [cb.currentIndex() for cb in self.改造产物选项]
calc_data.minheap = MinHeap(save_top_n, batch_size)
producer(calc_data)
start_index = end_index + 1
# 等到所有工作处理完成
producer_data.work_queue.join()
finished = True
logger.warning("所有工作线程均已完成计算,总计用时={}".format(
format_time(time.time() - startTime)))
# 等待异步排行线程退出
fetch_result_thread.join()
# 最终将剩余结果(若有)也加入排序
log_result_queue_info(logger.info, "after join", mq)
try_fetch_result(mq)
log_result_queue_info(logger.info, "after final", mq)
# -------------------------------------多线程计算流程结束-------------------------------------
self.排行数据.clear()
self.伤害列表 = mq.minheap.getTop()
for i in range(len(self.伤害列表)):
self.排行数据.append(self.伤害列表[i][1:])
totoalCostTime = time.time() - startTime
# logger.info((
# "计算完毕\n"
# "工作线程={} 总计耗时={}"
# ).format(
# thread_num, format_time(totoalCostTime),
# ))
self.calc_done_signal.emit()
def 数量显示(self, counter):
if counter <= 9999:
return str(counter)
else:
counter /= 10000
return ('%.2f' % counter) + '万'
def update_remaining(self, count):
temp = self.数量显示(int(count))
self.计算按钮1.setText("完成:" + temp)
self.计算按钮2.setText("完成:" + temp)
self.计算按钮3.setText("完成:" + temp)
def calc_done(self):
self.计算按钮1.setText(trans("开始计算"))
self.计算按钮1.setEnabled(True)
self.计算按钮1.setStyleSheet(按钮样式)
self.计算按钮2.setText(trans("开始计算"))
self.计算按钮2.setEnabled(True)
self.计算按钮2.setStyleSheet(按钮样式)
self.计算按钮3.setText(trans("开始计算"))
self.计算按钮3.setEnabled(True)
self.计算按钮3.setStyleSheet(按钮样式)
if len(self.排行数据) == 0:
QMessageBox.information(self, "计算错误", "无有效组合")
return
if len(self.排行数据) == 1:
self.输出界面(0)
else:
self.关闭排行窗口()
if self.装备限定判断():
self.其他限定判断()
def 关闭排行窗口(self):
for i in self.排行窗口列表:
i.close()
self.排行窗口列表.clear()
def 单条排行数据判断(self, s, l):
for i in l:
if s[i] != self.自选装备[i].currentData():
return 0
return 1
def 其他限定判断(self):
if self.神话排名选项.isChecked():
神话列表 = []
对应序号 = []
for i in range(len(self.排行数据)):
tempstr = self.排行数据[i]
for j in [0, 5, 8]:
if equ.get_equ_by_name(
tempstr[j]).品质 == '神话' and tempstr[j] not in 神话列表:
神话列表.append(tempstr[j])
对应序号.append(i)
if len(神话列表) >= self.神话数量判断(1):
break
if len(对应序号) == 0:
QMessageBox.information(self, "计算错误", "请取消勾选神话排名模式或重新勾选装备")
return
self.排行界面({}, 对应序号)
elif 武器排名 == 1:
武器列表 = []
对应序号 = []
for i in range(len(self.排行数据)):
tempstr = self.排行数据[i]
if equ.get_equ_by_name(
tempstr[11]).部位 == '武器' and tempstr[11] not in 武器列表:
武器列表.append(tempstr[11])
对应序号.append(i)
if len(武器列表) >= len(self.有效武器列表):
break
self.排行界面({}, 对应序号)
else:
self.排行界面()
def 装备限定判断(self):
temp = []
l = []
for i in range(12):
if self.装备锁定[i].isChecked():
l.append(i)
if len(l) == 0:
return 1
for s in self.排行数据:
if self.单条排行数据判断(s, l):
temp.append(s)
if len(temp) == 0:
QMessageBox.information(self, "计算错误", "无符合条件组合,请解除自选装备页限定或重新勾选")
return 0
self.排行数据 = copy(temp)
return 1
def 指定装备排序(self, dic, x, n):
dic[x] = n
temp = []
num = -1
for i in self.排行数据:
num += 1
sign = 1
for n in dic.keys():
if dic[n] != i[n]:
sign = 0
break
if sign == 1:
temp.append(num)
if len(temp) == 100:
break
self.排行界面(dic, temp)
def 排行界面(self, 筛选={}, 显示序号=[x for x in range(100)]):
显示序号 = 显示序号[:min(100, len(self.排行数据))]
滚动排行 = QWidget()
滚动排行.setStyleSheet('''QToolTip {
background-color: black;
color: white;
border: 0px
}''')
滚动排行.resize(652, 530)
滚动排行.setMinimumSize(652, 530)
滚动排行.setMaximumSize(652, 1230)
if len(筛选) == 0:
# 滚动排行.setWindowTitle('当前模板配装排行(点击数字查看详情)'+"装备版本:"+self.角色属性A.版本 + " 增幅版本:" + self.角色属性A.增幅版本)
滚动排行.setWindowTitle(
trans('当前模板配装排行(点击数字查看详情)') + ' {}'.format(get_mac_address()))
else:
temp = ''
for name in 筛选.values():
temp += name + ' | '
滚动排行.setWindowTitle(temp[:-3])
滚动排行.setWindowIcon(self.icon)
if not SkinVersion == 'None':
背景颜色 = QLabel(滚动排行)
背景颜色.resize(652, 1230)
背景颜色.setStyleSheet("QLabel{background-color:rgba(50,50,50,1.0)}")
排行背景透明度 = QGraphicsOpacityEffect()
排行背景透明度.setOpacity(0.15)
排行背景 = QLabel(滚动排行)
排行背景.resize(652, 1230)
排行背景.setPixmap(self.主背景图片)
排行背景.setGraphicsEffect(排行背景透明度)
排行背景.setAlignment(Qt.AlignCenter)
#wrapper = QWidget()
# 滚动排行.setCentralWidget(wrapper)
滚动排行.topFiller = QWidget()
滚动排行.topFiller.setMinimumSize(592, 50 * len(显示序号) + 30)
if len(显示序号) > 10:
初始x = -10
else:
初始x = 0
初始y = 15
x间隔 = 30
y间隔 = 50
最高伤害 = self.排行数据[显示序号[0]][12]
尾部字符 = '%'
if 最高伤害 > 100000000:
最高伤害 /= 100000000
尾部字符 = ''
技能选项 = []
for i in (self.细节选项输入[2] if self.角色属性A.职业分类 == '输出' else self.技能设置输入):
技能选项.append(i.currentText().replace('Lv+1', ''))
if 输出数据 == 1 and len(筛选) == 0:
setfile = open('./数据记录/{}-{}.csv'.format(
self.角色属性A.实际名称, time.strftime('%m-%d-%H-%M-%S')),
'w',
encoding='gbk')
for i in range(len(显示序号)):
temp = ''
for j in range(13):
temp += str(self.排行数据[显示序号[i]][j]) + ','
temp += self.角色属性A.实际名称 + ','
temp += equ.get_equ_by_name(self.排行数据[显示序号[i]][11]).类型
setfile.write(temp + '\n')
for i in range(len(显示序号)):
图片列表 = []
for j in range(12):
图片列表.append(equ.get_img_by_name(self.排行数据[显示序号[i]][j]))
水平间距 = [1, 2, 3, 4, 5, 6.5, 7.5, 8.5, 10, 11, 12, 13.5]
for j in range(12):
装备 = equ.get_equ_by_name(self.排行数据[显示序号[i]][j])
图标 = QLabel(滚动排行.topFiller)
图标.setMovie(图片列表[j])
图片列表[j].start()
图标.move(int(初始x + x间隔 * 水平间距[j]), int(初始y + i * y间隔))
if self.排行数据[显示序号[i]][j] == self.排行数据[显示序号[i]][-1]:
图标 = QLabel(滚动排行.topFiller)
图标.setStyleSheet(
"QLabel{background-color:rgba(0,0,0,0.5)}")
图标.resize(28, 28)
图标.move(int(初始x + x间隔 * 水平间距[j]), int(初始y + i * y间隔))
按钮 = QPushButton(滚动排行.topFiller)
按钮.move(int(初始x + x间隔 * 水平间距[j]), int(初始y + i * y间隔))
按钮.resize(28, 28)
按钮.setToolTip(self.单件描述(装备))
a = QGraphicsOpacityEffect()
a.setOpacity(0.0)
按钮.setGraphicsEffect(a)
按钮.clicked.connect(lambda state, dic=deepcopy(筛选), x=j, n=装备.
名称: self.指定装备排序(dic, x, n))
伤害数值 = self.排行数据[显示序号[i]][12]
if 伤害数值 > 100000000:
伤害数值 /= 100000000
伤害量 = ('{' +
':.{}f'.format(max(0, 4 - int(math.log10(伤害数值)))) +
'}').format(伤害数值)
else:
伤害量 = "{:.0f}".format(伤害数值)
if 最高伤害 != 0:
百分比 = str(round(伤害数值 / 最高伤害 * 100, 1)) + '%'
else:
百分比 = ' 0.0%'
if 百分比 == '100.0%':
详情按钮 = QtWidgets.QPushButton(伤害量 + 尾部字符 + ' |' + 百分比,
滚动排行.topFiller)
else:
详情按钮 = QtWidgets.QPushButton(伤害量 + 尾部字符 + ' | ' + 百分比,
滚动排行.topFiller)
详情按钮.clicked.connect(lambda state, index=显示序号[i]: self.输出界面(index))
详情按钮.move(int(初始x + x间隔 * 15), int(初始y + i * y间隔))
详情按钮.resize(142, 30)
code = MyQLabel(滚动排行.topFiller)
code.setText('' + get_mac_address() + '')
# code.setText('abdhfosnd39dkws2dfsddd')
code.setStyleSheet(
f'{make_watermark_qt_color_string(watermark_surrounding_backgroud_color_ranking)};font-size:9px'
)
code.move(int(初始x + x间隔 * 15 + 1), int(初始y + i * y间隔) + 17)
code.resize(140, 15)
code.connect_customized_slot(
lambda index=显示序号[i]: self.输出界面(index))
temp = deepcopy(self.角色属性A)
技能等级溢出 = temp.等级溢出判断(
self.排行数据[显示序号[i]][0:12],
self.排行数据[显示序号[i]][13:(len(self.排行数据[显示序号[i]]) - 1)])
if len(技能等级溢出) != 0:
可调整技能 = ''
不可调整技能 = ''
for n in 技能等级溢出:
if n in 技能选项:
可调整技能 += n + ' '
else:
不可调整技能 += n + ' '
if 可调整技能 != '':
详情按钮.setToolTip(
'' +
可调整技能 + 不可调整技能 + '等级溢出,修改白金徽章或时装可以提高伤害。')
详情按钮.setStyleSheet(按钮样式_warn)
else:
详情按钮.setStyleSheet(按钮样式 + "QPushButton{font-size:14px}")
详情按钮.setToolTip(
'' +
不可调整技能 + '等级溢出')
else:
详情按钮.setStyleSheet(按钮样式 + "QPushButton{font-size:14px}")
详情按钮.setToolTip('点击查看详情')
滚动排行.scroll = QScrollArea()
# 滚动排行.scroll.setStyleSheet("QScrollArea {background-color:transparent}")
滚动排行.scroll.setStyleSheet(滚动条样式)
滚动排行.scroll.viewport().setStyleSheet("background-color:transparent")
滚动排行.scroll.setWidget(滚动排行.topFiller)
滚动排行.vbox = QVBoxLayout()
滚动排行.vbox.addWidget(滚动排行.scroll)
滚动排行.setLayout(滚动排行.vbox)
排行显示 = MainWindow(滚动排行)
# for i in range(0, 6):
# label = QLabel(排行显示)
# label.setText(get_mac_address())
# label.move(10 + 70 * i, 40 + 90 * i)
# label.resize(200, 21)
# label.setStyleSheet(
# 'QLabel{font-size:15px;color:rgba(255,255,255,0.6);font-weight:bolder}'
# )
self.排行窗口列表.append(排行显示)
排行显示.show()
def 获取装备图片(self, 装备列表, 希洛克选择=None, 奥兹玛选择=None):
if 希洛克选择 is None:
希洛克选择 = self.希洛克选择状态
if 奥兹玛选择 is None:
奥兹玛选择 = self.奥兹玛选择状态
try:
希洛克武器标记 = 2000 if self.希洛克武器词条[0].currentIndex() > 0 else 0
except:
希洛克武器标记 = 2000 if self.希洛克武器选择.currentIndex() > 0 else 0
图片列表 = []
希洛克 = {}
for i in range(15):
if 希洛克选择[i] > 0:
希洛克[i % 3] = i
奥兹玛 = {}
for i in range(25):
if 奥兹玛选择[i] > 0:
奥兹玛[i % 5] = i
# 0 上衣
图片列表.append(equ.get_img_by_name(装备列表[0]))
# 1 护肩
if 奥兹玛.get(0, -1) >= 0:
图片列表.append(equ.get_img_by_id(1000 + 奥兹玛[0]))
else:
图片列表.append(equ.get_img_by_name(装备列表[1]))
# 2 护腿
if 希洛克.get(0, -1) >= 0:
图片列表.append(equ.get_img_by_id(1100 + 希洛克[0]))
else:
图片列表.append(equ.get_img_by_name(装备列表[2]))
# 3 腰带
if 奥兹玛.get(1, -1) >= 0:
图片列表.append(equ.get_img_by_id(1000 + 奥兹玛[1]))
else:
图片列表.append(equ.get_img_by_name(装备列表[3]))
# 4 鞋子
if 奥兹玛.get(2, -1) >= 0:
图片列表.append(equ.get_img_by_id(1000 + 奥兹玛[2]))
else:
图片列表.append(equ.get_img_by_name(装备列表[4]))
# 5 手镯
图片列表.append(equ.get_img_by_name(装备列表[5]))
# 6 项链
if 奥兹玛.get(3, -1) >= 0:
图片列表.append(equ.get_img_by_id(1000 + 奥兹玛[3]))
else:
图片列表.append(equ.get_img_by_name(装备列表[6]))
# 7 戒指
if 希洛克.get(1, -1) >= 0:
图片列表.append(equ.get_img_by_id(1100 + 希洛克[1]))
else:
图片列表.append(equ.get_img_by_name(装备列表[7]))
# 8 耳环
图片列表.append(equ.get_img_by_name(装备列表[8]))
# 9 辅助
if 希洛克.get(2, -1) >= 0:
图片列表.append(equ.get_img_by_id(1100 + 希洛克[2]))
else:
图片列表.append(equ.get_img_by_name(装备列表[9]))
# 10 魔法石
if 奥兹玛.get(4, -1) >= 0:
图片列表.append(equ.get_img_by_id(1000 + 奥兹玛[4]))
else:
图片列表.append(equ.get_img_by_name(装备列表[10]))
# 11 武器
图片列表.append(equ.get_img_by_name(装备列表[11], 希洛克武器标记))
return 图片列表
def 组合计算(self, index):
套装组合 = []
if index <= 1:
for a in self.有效防具套装:
for b in self.有效首饰套装:
for c in self.有效特殊套装:
# 533
套装组合.append([a, a, a, a, a, b, b, b, c, c, c])
for a in self.有效防具套装:
for d in self.有效上链左套装:
for e in self.有效镯下右套装:
for f in self.有效环鞋指套装:
# 3332
套装组合.append([d, a, e, a, f, e, d, f, f, d, e])
套装组合.append([a, a, e, a, f, e, d, f, f, d, e])
套装组合.append([d, a, a, a, f, e, d, f, f, d, e])
套装组合.append([d, a, e, a, a, e, d, f, f, d, e])
if index == 1:
for a in self.有效防具套装:
for b in self.有效首饰套装:
for c in self.有效特殊套装:
for d in self.有效防具套装:
if d != a:
# 2333
套装组合.append([a, a, a, d, d, b, b, b, c, c, c])
套装组合.append([a, a, d, a, d, b, b, b, c, c, c])
套装组合.append([a, d, a, a, d, b, b, b, c, c, c])
套装组合.append([d, a, a, a, d, b, b, b, c, c, c])
套装组合.append([a, a, d, d, a, b, b, b, c, c, c])
套装组合.append([a, d, a, d, a, b, b, b, c, c, c])
套装组合.append([d, a, a, d, a, b, b, b, c, c, c])
套装组合.append([a, d, d, a, a, b, b, b, c, c, c])
套装组合.append([d, a, d, a, a, b, b, b, c, c, c])
套装组合.append([d, d, a, a, a, b, b, b, c, c, c])
count = 0
if self.百变怪选项.isChecked():
初始sign2 = '空'
else:
初始sign2 = '无'
if index != 2:
for temp in 套装组合:
for k in [-1, 0, 5, 8]:
temp1 = []
sign = 0
sign2 = 初始sign2
for x in range(11):
品质 = '史诗'
if k == x:
品质 = '神话'
index = equ.get_id_by_index(temp[x], 品质, 部位列表[x])
if self.装备选择状态[index] == 1:
sign += 1
else:
if sign2 == '空' and equ.get_equ_by_id(
index).品质 != '神话' and equ.get_equ_by_id(
index).所属套装 not in [
'精灵使的权能', '大自然的呼吸', '能量主宰'
]:
sign += 1
if sign == 11:
count += len(self.有效武器列表)
if index == 2:
count = 1
for i in self.有效部位列表:
count *= len(i)
return count
class 技能详情(QFrame):
def __init__(self, father, data, 统计详情, excel, 实际技能等级, 技能等效CD, 显示模式, count):
super().__init__(father)
self.data = [[] for k in range(count)]
self.topFiller = QWidget()
self.topFiller.setMinimumSize(490, data.行高 * count + 10)
pox_x = 285
pox_y = 5
for i in range(len(data.角色属性B.技能栏)):
j = len(data.角色属性B.技能栏) - 1 - excel.index(统计详情[i * 4 + 1])
if 统计详情[i * 4 + 1] != 0:
每行详情 = []
# self.data.append([])
for k in range(7):
每行详情.append(QLabel(self.topFiller))
# 图片
每行详情[0].setPixmap(data.技能图片[i])
每行详情[0].resize(28, min(28, data.行高 - 2))
百分比 = ''
被动倍率 = ''
其他倍率 = ''
CD显示 = ''
CD恢复 = ''
try:
tempstr = '' + trans(
data.角色属性B.技能栏[i].名称) + (
"
" if data.角色属性B.技能栏[i].备注 != '' else
'') + data.角色属性B.技能栏[i].备注 + '
'
百分比 = int(data.角色属性B.技能栏[i].等效百分比(data.角色属性B.武器类型) /
data.角色属性B.技能栏[i].倍率)
被动倍率 = round(data.角色属性B.技能栏[i].被动倍率 * 100, 1)
其他倍率 = round(data.角色属性B.技能栏[i].倍率 * 100, 1)
tempstr += trans('{百分比}:$value%
', value=百分比)
tempstr += trans('{被动倍率}:$value%
', value=被动倍率)
if data.角色属性B.技能栏[i].倍率 != 0:
tempstr += trans('{其它倍率}:$value%
', value=其他倍率)
CD显示 = str(
round(
data.角色属性B.技能栏[i].等效CD(data.角色属性B.武器类型,
data.角色属性B.类型) *
data.角色属性B.技能栏[i].恢复, 2))
tempstr += trans('{CD显示}:$values
', value=CD显示)
tempstr += trans('{CD恢复}:$value',
value=to_percent(data.角色属性B.技能栏[i].恢复))
每行详情[0].setToolTip(tempstr)
except:
pass
每行详情[0].move(302 - pox_x, pox_y + j * data.行高)
self.data[j].append(data.角色属性B.技能栏[i].名称)
# 等级
每行详情[1].setText('Lv.' + str(实际技能等级[i]))
每行详情[1].move(337 - pox_x, pox_y + j * data.行高)
每行详情[1].resize(30, min(28, data.行高))
self.data[j].append(实际技能等级[i])
# CD
每行详情[2].setText('{:0.1f}s'.format(技能等效CD[i]))
每行详情[2].move(380 - pox_x, pox_y + j * data.行高)
每行详情[2].resize(36, min(28, data.行高))
self.data[j].append(round(技能等效CD[i], 1))
# 次数
每行详情[3].setText(str(round(统计详情[i * 4], 1)).replace('.0', ''))
每行详情[3].move(418 - pox_x, pox_y + j * data.行高)
每行详情[3].resize(30, min(28, data.行高))
self.data[j].append(round(统计详情[i * 4], 1))
# 总伤害
if 显示模式 == 1:
每行详情[4].setText(
data.百分比输出(统计详情[i * 4 + 1], data.基准值[1][i * 4 + 1]))
else:
每行详情[4].setText(data.格式化输出(str(int(统计详情[i * 4 + 1]))))
每行详情[4].move(448 - pox_x, pox_y + j * data.行高)
每行详情[4].resize(108, min(28, data.行高))
self.data[j].append(int(统计详情[i * 4 + 1]))
# 平均伤害
if 显示模式 == 1:
每行详情[5].setText(
data.百分比输出(统计详情[i * 4 + 2], data.基准值[1][i * 4 + 2]))
else:
每行详情[5].setText(data.格式化输出(str(int(统计详情[i * 4 + 2]))))
每行详情[5].move(555 - pox_x, pox_y + j * data.行高)
每行详情[5].resize(108, min(28, data.行高))
self.data[j].append(int(统计详情[i * 4 + 2]))
# 占比
每行详情[6].setText(str(round(统计详情[i * 4 + 3], 1)) + '%')
每行详情[6].move(660 - pox_x, pox_y + j * data.行高)
每行详情[6].resize(108, min(28, data.行高))
self.data[j].append(str(round(统计详情[i * 4 + 3], 1)) + '%')
try:
self.data[j].append(
str(int(百分比 * 被动倍率 / 100 * 其他倍率 / 100)) + '%')
except:
self.data[j].append('-')
self.data[j].append(CD显示)
self.data[j].append(CD恢复)
for l in range(1, 7):
每行详情[l].setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
每行详情[l].setAlignment(Qt.AlignCenter)
self.scroll = QScrollArea()
self.scroll.setWidget(self.topFiller)
self.scroll.setStyleSheet("QScrollArea {background-color:transparent}")
self.scroll.setFrameShape(QFrame.NoFrame)
self.scroll.setStyleSheet(游戏滚动条样式模拟)
self.scroll.viewport().setStyleSheet("background-color:transparent")
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.scroll)
self.setLayout(self.vbox)
from PublicReference.view.Page import Page
from PyQt5.QtWidgets import QLabel, QGraphicsOpacityEffect
from PublicReference.utils.constant import *
from PublicReference.equipment.冒险家名望 import *
class 名望窗口(Page):
def __init__(self):
super().__init__()
self.已初始化 = False
def 初始化(self):
self.初始化 = True
self.名望部位列表 = list(附魔名望默认选项.keys())
self.自选附魔名望选项 = []
self.自选徽章名望选项 = []
self.初始化UI()
self.初始化 = False
self.已初始化 = True
def 初始化UI(self):
icon = store.get("/app/window/icon")
bgImg = store.get("/app/window/background_image")
self.setStyleSheet('''QToolTip {
background-color: black;
color: white;
border: 0px
}''')
self.setFixedSize(440, 560)
self.setWindowTitle("名望设置")
self.setWindowIcon(icon)
backgroundColorLabel = QLabel(self)
backgroundColorLabel.resize(self.width(), self.height())
backgroundColorLabel.setStyleSheet(
"QLabel{background-color:rgba(50,50,50,1)}")
graphicsEffect = QGraphicsOpacityEffect()
graphicsEffect.setOpacity(0.1)
backgroundImageLabel = QLabel(self)
backgroundImageLabel.setPixmap(bgImg)
backgroundImageLabel.move(0, int((self.height() - 1230) / 6))
backgroundImageLabel.setGraphicsEffect(graphicsEffect)
borderLabel = QLabel(self)
borderLabel.resize(self.width() - 4, self.height() - 2)
borderLabel.move(2, -1)
borderLabel.setStyleSheet("QLabel{border:1px solid black}")
self.初始化装备UI()
def 初始化装备UI(self):
count = 0
名望细节 = store.get("/fame/selection")
徽章名望细节 = store.get("/fame/selection2")
label = QLabel(
'第一列为附魔名望选择
第二列为徽章名望选择
闪耀26名望,华丽30名望,灿烂36名望
玲珑46名望,白金232名望',
self)
label.setStyleSheet(标签样式_2)
label.resize(220, 100)
label.move(20 + 220, 10 + 30 * 5)
if 名望细节 == None:
defaultValueTable = 附魔名望默认选项
defaultValueTable2 = 徽章名望默认选项
else:
defaultValueTable = 名望细节
defaultValueTable2 = 徽章名望细节
for idx in range(len(self.名望部位列表)):
部位 = self.名望部位列表[idx]
label = QLabel(部位, self)
label.setStyleSheet(标签样式)
label.resize(70, 22)
label.move(20 + int(idx / 18) * 220, 10 + 30 * (idx % 18))
x = MyQComboBox(self)
x.placeholderText = 部位
values = 附魔名望选项[部位]
defaultValue = defaultValueTable[部位]
for value in values:
x.addItem(str(value))
x.currentIndexChanged.connect(lambda: self.更新名望细节())
defaultIndex = values.index(defaultValue)
x.setCurrentIndex(defaultIndex)
x.resize(55, 20)
x.move(90 + int(idx / 18) * 220, 10 + 30 * (idx % 18))
self.自选附魔名望选项.append(x)
徽章值 = 徽章名望选项.get(部位, None)
if 徽章值 != None:
徽章选项 = MyQComboBox(self)
徽章选项.placeholderText = 部位
徽章默认值 = defaultValueTable2[部位]
for value in 徽章值:
徽章选项.addItem(str(value))
徽章选项.currentIndexChanged.connect(lambda: self.更新名望细节())
defaultIndex = 徽章值.index(徽章默认值)
徽章选项.setCurrentIndex(defaultIndex)
徽章选项.resize(55, 20)
徽章选项.move(90 + 70 + int(idx / 18) * 220, 10 + 30 * (idx % 18))
self.自选徽章名望选项.append(徽章选项)
self.更新名望细节()
def 更新名望细节(self):
if not self.已初始化: return
名望细节 = {}
徽章细节 = {}
for i in self.自选附魔名望选项:
名望细节[i.placeholderText] = i.currentText()
for i in self.自选徽章名望选项:
徽章细节[i.placeholderText] = i.currentText()
store.set("/fame/selection", 名望细节)
store.set("/fame/selection2", 徽章细节)
store.emit("/fame/event/changed")