Files
2024-11-04 14:45:20 +08:00

2387 lines
103 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 +{}<br>".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, "提示",
"是否重置<font color='#FF0000'>{}</font>页面?".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 = '<font size="3" face="宋体">'
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 += '<font color="#78FF1E">' + trans(
i.名称) + '[{}]</font><br>'.format(n)
temp += 描述
temp += '<br>'
except Exception as e:
logger.error(e)
pass
return temp[:-4] + '</font>'
def 单件描述(self, i):
temp = '<font size="3" face="宋体"><font color="{}">'.format(颜色[i.品质])
temp += trans(i.名称) + '</font><br>' + trans(i.类型) + \
'-' + trans(i.部位) + '<br>'
if self.角色属性A.职业分类 == 'BUFF':
temp += i.装备描述_BUFF(self.角色属性A)
else:
temp += i.装备描述(self.角色属性A)
return temp[:-4] + '</font>'
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('<font size="3" face="宋体">' +
temp.名称 + '<br>' + temp.类型 + '-' +
temp.部位 + '</font>')
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('<font size="3" face="宋体">' +
temp.名称 + '<br>' + temp.类型 +
'-' + temp.部位 + '</font>')
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, "提示",
"即将载入<font color='#FF0000'>{}</font>技能存档,是否保存当前配置到<font color='#FF0000'>{}</font>技能存档?"
.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, "提示",
"即将载入<font color='#FF0000'>{}</font>存档,是否保存当前配置到<font color='#FF0000'>{}</font>存档?"
.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('<font face="黑体">' + get_mac_address() + '</font>')
# 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(
'<font size="3" face="宋体"><font color="#FF6666">' +
可调整技能 + 不可调整技能 + '</font>等级溢出,修改白金徽章或时装可以提高伤害。</font>')
详情按钮.setStyleSheet(按钮样式_warn)
else:
详情按钮.setStyleSheet(按钮样式 + "QPushButton{font-size:14px}")
详情按钮.setToolTip(
'<font size="3" face="宋体"><font color="#FF6666">' +
不可调整技能 + '</font>等级溢出</font>')
else:
详情按钮.setStyleSheet(按钮样式 + "QPushButton{font-size:14px}")
详情按钮.setToolTip('<font size="3" face="宋体">点击查看详情</font>')
滚动排行.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 = '<font face="宋体"><font color="#FF6666">' + trans(
data.角色属性B.技能栏[i].名称) + (
"<br>" if data.角色属性B.技能栏[i].备注 != '' else
'') + data.角色属性B.技能栏[i].备注 + '</font><br>'
百分比 = int(data.角色属性B.技能栏[i].等效百分比(data.角色属性B.武器类型) /
data.角色属性B.技能栏[i].倍率)
被动倍率 = round(data.角色属性B.技能栏[i].被动倍率 * 100, 1)
其他倍率 = round(data.角色属性B.技能栏[i].倍率 * 100, 1)
tempstr += trans('{百分比}:$value%<br>', value=百分比)
tempstr += trans('{被动倍率}:$value%<br>', value=被动倍率)
if data.角色属性B.技能栏[i].倍率 != 0:
tempstr += trans('{其它倍率}:$value%<br>', value=其他倍率)
CD显示 = str(
round(
data.角色属性B.技能栏[i].等效CD(data.角色属性B.武器类型,
data.角色属性B.类型) *
data.角色属性B.技能栏[i].恢复, 2))
tempstr += trans('{CD显示}:$values<br>', value=CD显示)
tempstr += trans('{CD恢复}:$value</font>',
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(
'第一列为附魔名望选择<br>第二列为徽章名望选择<br>闪耀26名望,华丽30名望,灿烂36名望<br>玲珑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")