Files
dcalc/PublicReference/carry/base.py
T
2024-11-04 14:45:20 +08:00

6187 lines
274 KiB
Python
Raw 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 PublicReference.equipment.equ_list import *
from PublicReference.equipment.称号 import *
from PublicReference.equipment.宠物 import *
from PublicReference.equipment.辟邪玉 import *
from PublicReference.equipment.武器融合 import *
from PublicReference.equipment.冒险家名望 import *
from PublicReference.choise.选项设置 import *
from PublicReference.choise.细节选项 import *
from PublicReference.common import *
from PublicReference.utils.uniqueCode import get_mac_address
import operator
from PublicReference.utils.common import format_range, to_percent
等级 = 100
class 技能:
名称 = ''
备注 = ''
所在等级 = 0
等级上限 = 0
等级 = 0
基础等级 = 0
等级溢出 = 0
自定义描述 = 0
学习间隔 = 1
等级精通 = 60
基础等级 = 0
关联技能 = ['无']
关联技能2 = ['无']
关联技能3 = ['无']
非关联技能 = ['无']
非关联技能2 = ['无']
非关联技能3 = ['无']
冷却关联技能 = ['无']
冷却关联技能2 = ['无']
冷却关联技能3 = ['无']
非冷却关联技能 = ['无']
非冷却关联技能2 = ['无']
非冷却关联技能3 = ['无']
版本 = 装备版本
def 等级加成(self, x):
if self.等级 != 0:
if self.等级 + x > self.等级上限:
self.等级 = self.等级上限
if self.基础等级 != self.等级上限 and self.关联技能 != ['无']:
self.等级溢出 = 1
else:
self.等级 += x
def 基础等级计算(self):
pass
class 主动技能(技能):
# 只扩展了技能的三条属性,第一条技能hit默认1,2、3条hit默认为0,需要手动赋值
# 如果需要继续扩展,可以在各自职业类内继承后自行扩展,同时需要重写下等效百分比函数
# 固伤在填写基础及成长的时候需要注意,技能面板/独立得到的成长及数值需要*100
基础 = 0.0
成长 = 0.0
攻击次数 = 1.0
基础2 = 0.0
成长2 = 0.0
攻击次数2 = 0.0
基础3 = 0.0
成长3 = 0.0
攻击次数3 = 0.0
CD = 0.0
TP成长 = 0.0
TP上限 = 0
TP等级 = 0
是否主动 = 1
是否有伤害 = 1
恢复 = 1.0
倍率 = 1.0
被动倍率 = 1.0
基础释放次数 = 0
演出时间 = 0
是否有护石 = 0
护石选项 = ['魔界']
def 等效百分比(self, 武器类型):
if self.等级 == 0:
return 0
else:
return int(
(self.攻击次数 * (self.基础 + self.成长 * self.等级) + self.攻击次数2 *
(self.基础2 + self.成长2 * self.等级) + self.攻击次数3 *
(self.基础3 + self.成长3 * self.等级)) *
(1 + self.TP成长 * self.TP等级) * self.倍率)
def 等效CD(self, 武器类型, 输出类型):
return round(self.CD / self.恢复 * 武器冷却惩罚(武器类型, 输出类型, self.版本), 1)
def 基础等级计算(self):
if self.基础等级 == 0:
# 契约等级+5
self.基础等级 = min(int((等级 + 5 - self.所在等级) / self.学习间隔 + 1),
self.等级精通)
class 被动技能(技能):
是否主动 = 0
是否有伤害 = 0
关联技能 = ['所有']
def 基础等级计算(self):
if self.基础等级 == 0:
# 契约等级+5
self.基础等级 = min(int((等级 + 5 - self.所在等级) / self.学习间隔 + 1),
self.等级精通)
符文效果选项 = [
'无',
trans('{攻击}+5%,CD+3%'), 'CD-4%',
trans('{攻击}+3%'),
trans('{攻击}-3%,CD-6%'),
trans('{攻击}+3%,CD+2%'), 'CD-3%',
trans('{攻击}+2%'),
trans('{攻击}-2%,CD-4%'),
trans('{攻击}+2%,CD+1%'), 'CD-2%',
trans('{攻击}+1%'),
trans('{攻击}-1%,CD-3%'),
trans('{攻击}+6%,CD+4%'), 'CD-5%',
trans('{攻击}+4%'),
trans('{攻击}-4%,CD-7%')
]
刀魂之卡赞数据 = [
0, 31, 40, 48, 58, 67, 79, 90, 103, 116, 131, 145, 161, 178, 194, 212, 230,
250, 270, 292, 313
]
class 角色属性(属性):
# region 属性变量
职业分类 = '输出'
主BUFF = 1.0
系统奶系数 = 0
系统奶基数 = 0
年宠技能 = False
白兔子技能 = False
斗神之吼秘药 = False
称号触发 = False
屏蔽三觉 = False
超卓之心等级 = 1
觉醒之抉择技能 = ''
物理攻击力 = 65
魔法攻击力 = 65
独立攻击力 = 1045
火属性强化 = 13
冰属性强化 = 13
光属性强化 = 13
暗属性强化 = 13
进图物理攻击力 = 0
进图魔法攻击力 = 0
进图独立攻击力 = 0
进图属强 = 0
# 红阵,远古记忆 -1表示没有该技能
远古记忆 = -1
刀魂之卡赞 = -1
百分比力智 = 0.0
百分比三攻 = 0.0
伤害增加 = 0.0
黄字 = 0.0 # 冲突属性
附加伤害 = 0.0
属性附加 = 0.0
暴击伤害 = 0.0
暴伤 = 0.0 # 冲突属性
最终伤害 = 0.0
技能攻击力 = 1.0
技能攻击力累加 = 0.0
# 技能攻击力显示 = 1.0
持续伤害 = 0.0
加算冷却缩减 = 0.0
百分比减防 = 0.0
固定减防 = 0
词条提升率 = [0] * 6
词条选择 = []
# 队友增幅系数
队友增幅系数 = 1.0
防御输入 = 0
火抗输入 = 0
冰抗输入 = 0
光抗输入 = 0
暗抗输入 = 0
攻击速度 = 0.00
移动速度 = 0.00
施放速度 = 0.00
命中率 = 0.0
回避率 = 0.0
物理暴击率 = 0.00
魔法暴击率 = 0.00
自适应选项 = [0] * 2
自适应描述 = ['无'] * 2
时间输入 = 0
次数输入 = []
宠物次数 = []
技能切装 = []
装备切装 = []
开启切装 = 0
切装修正 = []
转甲选项 = 0
希洛克武器词条 = 0
武器词条触发 = 0
# 0英雄 1传说
角色熟练度 = 0
# 0 1 2 3 4 5 6
技能栏空位 = 6
# 0数学期望 1黄字+35% 2暴伤+35% 3白字+35% 4终伤+35% 5三攻+35%
命运的抉择 = 0
# 0数学期望 123456
天命无常 = 0
# 0数学期望 1 HP高于70% 2 HP在70~30% 3 HP低于30%
悲剧的残骸 = 0
# 0数学期望 1 5%属性附加 2 10%技能攻击力 3 15%技能攻击力
先知者的预言 = 0
# 0无霸体状态 1 霸体状态 2 无伤状态
贫瘠沙漠的遗产 = 1
# 0数学期望 1 7效果 2 77效果 3 777效果
幸运三角 = 0
# 0过充电状态 1过负荷状态
擎天战甲 = 0
# 0.00~1.00
持续伤害计算比例 = 0
# 0 120+ 1 120-100 2 100-80 3 80-60 4 60-40 5 40-
军神的隐秘遗产 = 0
# 0太极天帝剑:阳 1太极天帝剑:阴
太极天帝剑 = 0
# 0绿色生命的面容:无 1绿色生命的面容:阴暗面
绿色生命的面容 = 1
# 0噙毒手套:中毒 1噙毒手套:未中毒
噙毒手套 = 0
攻击属性 = 0
产物升级 = 0
# 是否为图内状态
状态 = 0
# 是否为输出装备描述
装备描述 = 0
# 辟邪玉属性
附加伤害增加增幅 = 1.0
属性附加伤害增加增幅 = 1.0
技能伤害增加增幅 = 1.0
暴击伤害增加增幅 = 1.0
伤害增加增幅 = 1.0
最终伤害增加增幅 = 1.0
力量智力增加增幅 = 1.0
物理魔法攻击力增加增幅 = 1.0
所有属性强化增加 = 1.0
# 0武器,1首饰,2特殊,3防具
变换词条 = [
# 原词条类型,原词条数值,可洗最小值,可洗最大值,择优不考虑觉醒
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
计算自适应 = 1
# 计算自适应方式 = 0
输出提升率 = 0
def getskillinfo(self):
return self.技能栏
# endregion
# region 词条属性
def 附加伤害加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{附加伤害} +$value<br>', value=to_percent(x))
else:
self.附加伤害 += self.附加伤害增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
3,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 三攻固定加成(self, x=0, y=0, z=0):
if self.装备描述 == 1:
return trans('{物攻/魔攻/独立} +$value<br>', value=x)
else:
if y == 0 or z == 0:
y = x
z = x
self.物理攻击力 += x
self.魔法攻击力 += y
self.独立攻击力 += z
return ''
def 力智固定加成(self, x=0, y=0):
if self.装备描述 == 1:
return trans('{力量、智力} +$value<br>', value=x)
else:
if y == 0:
y = x
self.力量 += x
self.智力 += y
return ''
def 持续伤害加成(self, x):
if self.装备描述 == 1:
return trans('{持续伤害} +$value<br>', value=to_percent(x))
else:
self.持续伤害 += x
return ''
def 属性附加加成(self, x):
if self.装备描述 == 1:
return trans('{属性附加伤害} +$value<br>', value=to_percent(x))
else:
self.属性附加 += self.属性附加伤害增加增幅 * x
return ''
def 技能攻击力加成(self, x, 辟邪玉加成=1,适用累加=1):
if self.装备描述 == 1:
return trans('{技能攻击力} +$value<br>', value=to_percent(x))
if 适用累加 == 0:
self.技能攻击力 *= 1 + self.技能伤害增加增幅 * x if 辟邪玉加成 == 1 else x
else:
self.技能攻击力累加 += x
if self.技能攻击力累加 <= 2:
self.技能攻击力 *= 1 + self.技能伤害增加增幅 * x if 辟邪玉加成 == 1 else x
else:
self.技能攻击力 *= 1 + (self.技能伤害增加增幅*(2+x-self.技能攻击力累加)+self.技能攻击力累加-2) if self.技能攻击力累加 - x < 2 or 辟邪玉加成 == 1 else x
return ''
def 暴击伤害加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{暴击伤害} +$value<br>', value=to_percent(x))
else:
self.暴击伤害 += self.暴击伤害增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
4,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 伤害增加加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{伤害增加} +$value<br>', value=to_percent(x))
else:
self.伤害增加 += self.伤害增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
2,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 最终伤害加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{最终伤害} +$value<br>', value=to_percent(x))
else:
self.最终伤害 += self.最终伤害增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
5,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 百分比力智加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{力量、智力} +$value<br>', value=to_percent(x))
else:
self.百分比力智 += self.力量智力增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
0,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 百分比三攻加成(self, x, 可变=0, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{物攻、魔攻、独立} +$value<br>', value=to_percent(x))
else:
self.百分比三攻 += self.物理魔法攻击力增加增幅 * x if 辟邪玉加成 == 1 else x
if 可变 > 0:
self.变换词条[可变 - 1] = [
1,
round(x * 100),
round(x * 100) + (2 if 可变 > 1 else 4),
round(x * 100) + (8 if 可变 > 1 else 16)
]
return ''
def 火属性强化加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans("{火属性强化} +$value<br>", value=x)
else:
if self.状态 == 0:
self.火属性强化 += self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x
else:
self.火属性强化 += int(self.所有属性强化增加 * x)
return ''
def 冰属性强化加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans("{冰属性强化} +$value<br>", value=x)
else:
if self.状态 == 0:
self.冰属性强化 += self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x
else:
self.冰属性强化 += int(self.所有属性强化增加 * x)
return ''
def 光属性强化加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans("{光属性强化} +$value<br>", value=x)
else:
if self.状态 == 0:
self.光属性强化 += self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x
else:
self.光属性强化 += int(self.所有属性强化增加 * x)
return ''
def 暗属性强化加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans("{暗属性强化} +$value<br>", value=x)
else:
if self.状态 == 0:
self.暗属性强化 += self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x
else:
self.暗属性强化 += int(self.所有属性强化增加 * x)
return ''
def 所有属性强化加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans("{所有属性强化} +$value<br>", value=x)
else:
if self.状态 == 0:
temp = self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x
else:
temp = int(self.所有属性强化增加 * x)
self.所有属性强化(temp)
return ''
def 攻击速度增加(self, x):
if self.装备描述 == 1:
return trans("{攻击速度} +$value<br>", value=to_percent(x, 2))
else:
self.攻击速度 += x
return ''
def 移动速度增加(self, x):
if self.装备描述 == 1:
return trans("{移动速度} +$value<br>", value=to_percent(x, 2))
else:
self.移动速度 += x
return ''
def 施放速度增加(self, x):
if self.装备描述 == 1:
return trans("{释放速度} +$value<br>", value=to_percent(x, 2))
else:
self.施放速度 += x
return ''
def 命中率增加(self, x):
if self.装备描述 == 1:
return trans("{命中率} +$value<br>", value=to_percent(x, 1))
else:
self.命中率 += x
return ''
def 物理暴击率增加(self, x):
if self.装备描述 == 1:
return trans("{物理暴击率} +$value<br>", value=to_percent(x))
else:
self.物理暴击率 += x
return ''
def 魔法暴击率增加(self, x):
if self.装备描述 == 1:
return trans("{魔法暴击率} +$value<br>", value=to_percent(x))
else:
self.魔法暴击率 += x
return ''
def 技能等级加成(self, 加成类型, minLv, maxLv, lv, 可变=0):
lv = int(lv)
if self.装备描述 == 1:
label = trans('技能等级' if 加成类型 == '所有' else '主动技能等级')
if minLv == maxLv:
return ("Lv{} {}+{}<br>").format(minLv, label, lv)
return ("Lv{}-{} {}+{}<br>").format(minLv, maxLv, label, lv)
else:
if self.远古记忆 > 0:
if minLv <= 15 and maxLv >= 15:
self.远古记忆 = min(20, self.远古记忆 + lv)
if self.刀魂之卡赞 > 0:
if minLv <= 5 and maxLv >= 5:
self.刀魂之卡赞 = min(20, self.刀魂之卡赞 + lv)
for i in self.技能栏:
if i.所在等级 >= minLv and i.所在等级 <= maxLv:
if 加成类型 == '所有':
i.等级加成(lv)
else:
if i.是否主动 == 1:
i.等级加成(lv)
if 可变 > 0:
self.变换词条[可变 - 1] = [
6, 2, 14 + (2 if 可变 > 1 else 4), 14 + (8 if 可变 > 1 else 16)
]
return ''
def 武器装扮等级加成(self, Lv, lv):
lv = int(lv)
for i in self.技能栏:
if i.所在等级 == Lv and i.是否主动 == 1 and i.名称 not in [
"念兽龙虎啸", "风雷啸", "圣灵符文", "神圣之光"
]:
i.等级加成(lv)
def 技能冷却缩减(self, min, max, x):
if self.装备描述 == 1:
label = trans('技能')
if min == max:
return ("Lv{} {}CD -{}<br>").format(min, label, to_percent(x))
else:
return ("Lv{}-{} {}CD -{}<br>").format(min, max, label,
to_percent(x))
else:
for i in self.技能栏:
if i.所在等级 >= min and i.所在等级 <= max:
if i.是否有伤害 == 1:
i.CD *= (1 - x)
return ''
def 技能恢复加成(self, min, max, x):
if self.装备描述 == 1:
label = trans('技能恢复')
if min == max:
return "Lv{} {}+{}%<br>".format(min, label, round(x * 100))
else:
return "Lv{}-{} {}+{}%<br>".format(min, max, label,
round(x * 100))
else:
for i in self.技能栏:
if i.所在等级 >= min and i.所在等级 <= max:
if i.是否有伤害 == 1:
i.恢复 += x
return ''
def 进图属强加成(self, x, 辟邪玉加成=1):
if self.装备描述 == 1:
return trans('{进图属性强化} +$value<br>', value=x)
else:
self.进图属强 += int(self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x)
return ''
def 技能倍率加成(self, lv, x):
if self.装备描述 == 1:
return trans("Lv$level {技能攻击力} +$value<br>",
level=lv,
value=to_percent(x))
else:
for i in self.技能栏:
if i.所在等级 == lv:
if i.是否有伤害 == 1:
i.倍率 *= (1 + x * self.技能伤害增加增幅)
return ''
def 单技能修改(self, 名称, 倍率, CD):
if self.装备描述 == 1:
tem = ""
if 倍率 != 1:
tem += trans("[{$name}]{攻击力} +$value<br>",
name=名称,
value=to_percent(倍率 - 1))
if CD != 1:
tem += trans("[{$name}]{CD} +$value<br>",
name=名称,
value=to_percent(CD - 1))
return tem
else:
for i in self.技能栏:
if i.是否有伤害 == 1:
if i.名称 == 名称:
i.倍率 *= 倍率
i.CD *= CD
return ''
def 所有属性强化(self, x):
self.火属性强化 += x
self.冰属性强化 += x
self.光属性强化 += x
self.暗属性强化 += x
# endregion
# region 面板计算
def 防具精通计算(self, i):
temp = equ.get_equ_by_name(self.装备栏[i])
if temp.等级 == 100:
if temp.所属套装 != '智慧产物':
return 精通计算(temp.等级, temp.品质, self.强化等级[i], 部位列表[i])
else:
return 精通计算(temp.等级, temp.品质, self.改造等级[i], 部位列表[i])
elif temp.等级 > 85:
计算等级 = temp.等级
if temp.所属套装 == '兵法之神':
if self.装备检查('过往时光的轮回'):
计算等级 = 100
return 精通计算(计算等级, temp.品质, self.强化等级[i], 部位列表[i])
else:
计算等级 = temp.等级
if temp.所属套装 == '战术之王的御敌':
if self.装备检查('战术之王的战术指挥棒'):
计算等级 = 100
elif temp.所属套装 == '魔战无双':
if self.装备检查('聚魔漩涡'):
计算等级 = 100
x = 精通计算(计算等级, temp.品质, self.强化等级[i], 部位列表[i])
if self.转甲选项 == 1:
return round(x, 2)
else:
return round(0.4 * x, 2)
def 站街力量(self):
return int(self.力量)
def 站街智力(self):
return int(self.智力)
def 面板力量(self):
return (self.力量 + int((self.力量 - self.基础力量) * self.系统奶系数 + self.系统奶基数)
+ self.进图力量) * (1 + self.百分比力智)
def 面板智力(self):
return (self.智力 + int((self.智力 - self.基础智力) * self.系统奶系数 + self.系统奶基数)
+ self.进图智力) * (1 + self.百分比力智)
def 站街物理攻击力倍率(self):
站街物理攻击倍率 = 1.0
for i in self.技能栏:
try:
站街物理攻击倍率 *= i.物理攻击力倍率(self.武器类型)
except:
pass
return 站街物理攻击倍率
def 站街魔法攻击力倍率(self):
站街魔法攻击倍率 = 1.0
for i in self.技能栏:
try:
站街魔法攻击倍率 *= i.魔法攻击力倍率(self.武器类型)
except:
pass
return 站街魔法攻击倍率
def 站街独立攻击力倍率(self):
站街独立攻击倍率 = 1.0
for i in self.技能栏:
try:
站街独立攻击倍率 *= i.独立攻击力倍率(self.武器类型)
except:
pass
return 站街独立攻击倍率
def 站街物理攻击力(self):
return self.物理攻击力 * self.站街物理攻击力倍率()
def 站街魔法攻击力(self):
return self.魔法攻击力 * self.站街魔法攻击力倍率()
def 站街独立攻击力(self):
return self.独立攻击力 * self.站街独立攻击力倍率()
def 面板物理攻击力(self):
面板物理攻击 = (self.物理攻击力 + self.进图物理攻击力) * (1 + self.百分比三攻) * (
1 + self.年宠技能 * 0.10 + self.斗神之吼秘药 * 0.12 + self.白兔子技能 * 0.20)
for i in self.技能栏:
try:
面板物理攻击 *= i.物理攻击力倍率进图(self.武器类型)
except:
pass
return 面板物理攻击 * self.站街物理攻击力倍率()
def 面板魔法攻击力(self):
面板魔法攻击 = (self.魔法攻击力 + self.进图魔法攻击力) * (1 + self.百分比三攻) * (
1 + self.年宠技能 * 0.10 + self.斗神之吼秘药 * 0.12 + self.白兔子技能 * 0.20)
for i in self.技能栏:
try:
面板魔法攻击 *= i.魔法攻击力倍率进图(self.武器类型)
except:
pass
return 面板魔法攻击 * self.站街魔法攻击力倍率()
def 面板独立攻击力(self):
面板独立攻击 = (self.独立攻击力 + self.进图独立攻击力) * (1 + self.百分比三攻)
for i in self.技能栏:
try:
面板独立攻击 *= i.独立攻击力倍率进图(self.武器类型)
except:
pass
return 面板独立攻击 * self.站街独立攻击力倍率()
def 面板系数计算(self):
if self.类型 == '物理百分比':
return int((self.面板力量() / 250 + 1) * (self.物理攻击力 + self.进图物理攻击力) *
(1 + self.百分比三攻))
elif self.类型 == '魔法百分比':
return int((self.面板智力() / 250 + 1) * (self.魔法攻击力 + self.进图魔法攻击力) *
(1 + self.百分比三攻))
elif self.类型 == '物理固伤':
return int((self.面板力量() / 250 + 1) * (self.独立攻击力 + self.进图独立攻击力) *
(1 + self.百分比三攻))
elif self.类型 == '魔法固伤':
return int((self.面板智力() / 250 + 1) * (self.独立攻击力 + self.进图独立攻击力) *
(1 + self.百分比三攻))
def 力智计算(self):
return max(self.面板力量(), self.面板智力())
# endregion
# region 输出计算
def 加算冷却计算(self):
for i in self.技能栏:
if i.是否有伤害 == 1:
i.CD *= (1 - self.加算冷却缩减)
def CD倍率计算(self):
for i in self.技能栏:
if i.冷却关联技能 != ['无']:
if i.冷却关联技能 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD *= i.CD缩减倍率(self.武器类型)
else:
for k in i.冷却关联技能:
self.技能栏[self.技能序号[k]].CD *= i.CD缩减倍率(self.武器类型)
if i.非冷却关联技能 != ['无']:
if i.非冷却关联技能 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD /= i.CD缩减倍率(self.武器类型)
else:
for k in i.非冷却关联技能:
self.技能栏[self.技能序号[k]].CD /= i.CD缩减倍率(self.武器类型)
if i.冷却关联技能2 != ['无']:
if i.冷却关联技能2 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD *= i.CD缩减倍率2(self.武器类型)
else:
for k in i.冷却关联技能2:
self.技能栏[self.技能序号[k]].CD *= i.CD缩减倍率2(self.武器类型)
if i.非冷却关联技能2 != ['无']:
if i.非冷却关联技能2 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD /= i.CD缩减倍率2(self.武器类型)
else:
for k in i.非冷却关联技能2:
self.技能栏[self.技能序号[k]].CD /= i.CD缩减倍率2(self.武器类型)
if i.冷却关联技能3 != ['无']:
if i.冷却关联技能3 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD *= i.CD缩减倍率3(self.武器类型)
else:
for k in i.冷却关联技能3:
self.技能栏[self.技能序号[k]].CD *= i.CD缩减倍率3(self.武器类型)
if i.非冷却关联技能3 != ['无']:
if i.非冷却关联技能3 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.CD /= i.CD缩减倍率3(self.武器类型)
else:
for k in i.非冷却关联技能3:
self.技能栏[self.技能序号[k]].CD /= i.CD缩减倍率3(self.武器类型)
def 被动倍率计算(self):
if self.远古记忆 > 0:
self.进图智力 += self.远古记忆 * 15
if self.刀魂之卡赞 > 0:
self.进图力量 += 刀魂之卡赞数据[self.刀魂之卡赞]
self.进图智力 += 刀魂之卡赞数据[self.刀魂之卡赞]
for i in self.技能栏:
i.被动倍率 = 1
for i in self.技能栏:
if i.关联技能 != ['无']:
if i.关联技能 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 *= i.加成倍率(self.武器类型)
else:
for k in i.关联技能:
self.技能栏[self.技能序号[k]].被动倍率 *= i.加成倍率(self.武器类型)
if i.非关联技能 != ['无']:
if i.非关联技能 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 /= i.加成倍率(self.武器类型)
else:
for k in i.非关联技能:
self.技能栏[self.技能序号[k]].被动倍率 /= i.加成倍率(self.武器类型)
if i.关联技能2 != ['无']:
if i.关联技能2 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 *= i.加成倍率2(self.武器类型)
else:
for k in i.关联技能2:
self.技能栏[self.技能序号[k]].被动倍率 *= i.加成倍率2(self.武器类型)
if i.非关联技能2 != ['无']:
if i.非关联技能2 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 /= i.加成倍率2(self.武器类型)
else:
for k in i.非关联技能2:
self.技能栏[self.技能序号[k]].被动倍率 /= i.加成倍率2(self.武器类型)
if i.关联技能3 != ['无']:
if i.关联技能3 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 *= i.加成倍率3(self.武器类型)
else:
for k in i.关联技能3:
self.技能栏[self.技能序号[k]].被动倍率 *= i.加成倍率3(self.武器类型)
if i.非关联技能3 != ['无']:
if i.非关联技能3 == ['所有']:
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 /= i.加成倍率3(self.武器类型)
else:
for k in i.非关联技能3:
self.技能栏[self.技能序号[k]].被动倍率 /= i.加成倍率3(self.武器类型)
def 属性倍率计算(self):
# 火、冰、光、暗
self.属性倍率组 = []
self.属性倍率组.append(1.05 + 0.0045 * int(self.火属性强化 - self.火抗输入))
self.属性倍率组.append(1.05 + 0.0045 * int(self.冰属性强化 - self.冰抗输入))
self.属性倍率组.append(1.05 + 0.0045 * int(self.光属性强化 - self.光抗输入))
self.属性倍率组.append(1.05 + 0.0045 * int(self.暗属性强化 - self.暗抗输入))
if self.攻击属性 == 0:
self.属性倍率 = max(self.属性倍率组)
elif self.攻击属性 == 1:
self.属性倍率 = self.属性倍率组[0]
elif self.攻击属性 == 2:
self.属性倍率 = self.属性倍率组[1]
elif self.攻击属性 == 3:
self.属性倍率 = self.属性倍率组[2]
elif self.攻击属性 == 4:
self.属性倍率 = self.属性倍率组[3]
def 伤害指数计算(self):
防御 = max(self.防御输入 - self.固定减防, 0) * (1 - self.百分比减防)
基准倍率 = 1.5 * self.主BUFF * (1 - 防御 / (防御 + 200 * 等级))
# 避免出现浮点数取整BUG
self.伤害增加 += 0.00000001
self.属性倍率计算()
# if sum(self.自适应选项) != 0:
if self.计算自适应 == 1:
self.自适应计算()
# self.希洛克武器提升()
面板 = self.面板系数计算()
增伤倍率 = 1 + int(self.伤害增加 * 100) / 100
增伤倍率 *= 1 + self.暴击伤害
增伤倍率 *= 1 + self.最终伤害
增伤倍率 *= self.技能攻击力
增伤倍率 *= 1 + self.持续伤害 * self.持续伤害计算比例
增伤倍率 *= 1 + self.附加伤害 + self.属性附加 * self.属性倍率
self.伤害指数 = 面板 * self.属性倍率 * 增伤倍率 * 基准倍率 / 100 * self.队友增幅系数
# 7.8日,伤害数据压缩
self.伤害指数 /= 1000
def 伤害计算(self, x=0):
if 切装模式 == 1 and self.切装判断():
temp = self.装备替换()
A = temp[0].数据计算(1, 1) # 身上装备计算
B = temp[1].数据计算(1, 0) # 切装装备计算
self.预处理()
for i in range(len(self.技能栏)):
self.技能栏[i] = deepcopy(temp[self.技能切装[i]].技能栏[i])
C = []
总伤害 = 0
for i in range(len(A)):
C.append(A[i] if (self.技能切装[int(i / 4)] == 0) else B[i])
if i % 4 == 1:
总伤害 += C[i]
if x == 0:
return 总伤害
else:
for i in range(int(len(A) / 4)):
if 总伤害 != 0:
C[i * 4 + 3] = C[i * 4 + 1] / 总伤害 * 100
else:
C[i * 4 + 3] = 0
return C
else:
self.技能切装 = [0] * len(self.技能栏)
# if self.计算自适应 == 1:
# self.择优拷贝 = deepcopy(self)
# self.择优拷贝.计算自适应 = 0
return self.数据计算(x)
def 技能释放次数解析(self, 技能释放次数):
for i in range(len(self.技能栏)):
if '/CD' in self.次数输入[i]:
技能释放次数[i] = eval(self.次数输入[i].replace('/CD', str(技能释放次数[i])))
if type(self.宠物次数[i]) == type('str'):
self.宠物次数[i] = eval(self.宠物次数[i].replace(
'num', str(技能释放次数[i])))
return 技能释放次数
def 技能释放次数计算(self):
技能释放次数 = []
for i in self.技能栏:
if i.是否有伤害 == 1:
s = self.次数输入[self.技能序号[i.名称]]
if '/CD' in s:
技能释放次数.append(
int((self.时间输入 - i.演出时间) /
i.等效CD(self.武器类型, self.类型)) + 1 + i.基础释放次数)
else:
技能释放次数.append(round(float(s), 2))
else:
技能释放次数.append(0)
return self.技能释放次数解析(技能释放次数)
def 技能单次伤害计算(self, y):
# y切装标记
技能单次伤害 = []
for i in self.技能栏:
if i.是否有伤害 == 1 and self.技能切装[self.技能序号[i.名称]] != y:
技能单次伤害.append(i.等效百分比(self.武器类型) * self.伤害指数 * i.被动倍率)
else:
技能单次伤害.append(0)
return 技能单次伤害
def 技能总伤害计算(self, a, b):
# a次数 b单次伤害
技能总伤害 = []
for i in self.技能栏:
index = self.技能序号[i.名称]
if i.是否有伤害 == 1 and a[index] != 0:
技能总伤害.append(a[index] * b[index] * (
1 + self.白兔子技能 * 0.20 + self.年宠技能 * 0.10 *
self.宠物次数[index] / a[index] # 宠物技能占比 = 宠物次数 / 释放次数
+ self.斗神之吼秘药 * 0.12))
else:
技能总伤害.append(0)
return 技能总伤害
def 数据返回(self, x, a, b):
# a次数 b伤害
总伤害 = sum(b)
if x == 0:
# 伤害数据,用于排序
return 总伤害
elif x == 1:
# 详细数据,用于展示 四个数据一组
# 0次数 1总伤害 2平均伤害 3占比
data = []
for i in range(len(self.技能栏)):
data.append(a[i])
data.append(b[i])
if a[i] != 0:
data.append(b[i] / a[i])
else:
data.append(b[i])
if 总伤害 != 0:
data.append(b[i] / 总伤害 * 100)
else:
data.append(0)
return data
def 数据计算(self, x=0, y=-1):
self.预处理()
# 初步计算
技能释放次数 = self.技能释放次数计算()
技能单次伤害 = self.技能单次伤害计算(y)
技能总伤害 = self.技能总伤害计算(技能释放次数, 技能单次伤害)
# 返回结果
return self.数据返回(x, 技能释放次数, 技能总伤害)
def 装备词条计算(self):
# 初始化 以防和自选冲突
self.变换词条 = [
# 原词条类型,原词条数值,可洗最小值,可洗最大值,择优不考虑觉醒
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
if 调试开关 == 0:
for i in range(12):
temp = equ.get_equ_by_name(self.装备栏[i])
temp.城镇属性(self)
temp.变换属性(self)
if temp.所属套装 == '智慧产物' and self.产物升级 == 1:
temp.产物升级(self)
# 添加可洗属性
for i in self.套装栏:
equ.get_suit_by_name(i).城镇属性(self)
# print(self.变换词条)
# 进图触发属强向下取整
self.状态 = 1
for i in range(12):
equ.get_equ_by_name(self.装备栏[i]).进图属性(self)
for i in self.套装栏:
equ.get_suit_by_name(i).进图属性(self)
self.状态 = 0
self.黑鸦词条扣除()
# print(self.黑鸦词条)
# 冲突属性计算
self.伤害增加加成(self.黄字)
self.暴击伤害加成(self.暴伤)
def 预处理(self):
self.装备属性计算()
self.三觉屏蔽1()
self.所有属性强化(self.进图属强)
self.CD倍率计算()
self.加算冷却计算()
self.被动倍率计算()
self.三觉屏蔽2()
self.伤害指数计算()
def 装备属性计算(self):
self.装备基础()
self.装备词条计算()
def 其它属性计算(self):
for i in range(12):
equ.get_equ_by_name(self.装备栏[i]).其它属性(self)
for i in self.套装栏:
equ.get_suit_by_name(i).其它属性(self)
# endregion
# region 择优相关
def 词条提示上下限计算(self, 词条范围, 词条数值):
词条提升率 = [[0, 0]] * 6
if 0 in 词条范围:
# 百分比力智
最高提升 = 0
x = self.面板系数计算()
self.百分比力智加成(词条数值[0])
最高提升 = round(self.面板系数计算() / x - 1, 8)
self.百分比力智加成(-词条数值[0])
最低提升 = 0
self.百分比力智加成(self.择优极限[0] - 词条数值[0])
x = self.面板系数计算()
self.百分比力智加成(词条数值[0])
最低提升 = round(self.面板系数计算() / x - 1, 8)
self.百分比力智加成(-self.择优极限[0])
词条提升率[0] = [最低提升, 最高提升]
if 1 in 词条范围:
最高提升 = 0
x = 1 + self.百分比三攻
self.百分比三攻加成(词条数值[1])
最高提升 = round((1 + self.百分比三攻) / x - 1, 8)
self.百分比三攻加成(-词条数值[1])
最低提升 = 0
self.百分比三攻加成(self.择优极限[1] - 词条数值[1])
x = 1 + self.百分比三攻
self.百分比三攻加成(词条数值[1])
最低提升 = round((1 + self.百分比三攻) / x - 1, 8)
self.百分比三攻加成(-self.择优极限[1])
词条提升率[1] = [最低提升, 最高提升]
if 2 in 词条范围:
最高提升 = 0
x = 1 + int(self.伤害增加 * 100) / 100
self.伤害增加加成(词条数值[2])
最高提升 = round((1 + int(self.伤害增加 * 100) / 100) / x - 1, 8)
self.伤害增加加成(-词条数值[2])
最低提升 = 0
self.伤害增加加成(self.择优极限[2] - 词条数值[2])
x = 1 + int(self.伤害增加 * 100) / 100
self.伤害增加加成(词条数值[2])
最低提升 = round((1 + int(self.伤害增加 * 100) / 100) / x - 1, 8)
self.伤害增加加成(-self.择优极限[2])
词条提升率[2] = [最低提升, 最高提升]
if 3 in 词条范围:
最高提升 = 0
x = 1 + self.附加伤害 + self.属性附加 * self.属性倍率
self.附加伤害加成(词条数值[3])
最高提升 = round((1 + self.附加伤害 + self.属性附加 * self.属性倍率) / x - 1, 8)
self.附加伤害加成(-词条数值[3])
最低提升 = 0
self.附加伤害加成(self.择优极限[3] - 词条数值[3])
x = 1 + self.附加伤害 + self.属性附加 * self.属性倍率
self.附加伤害加成(词条数值[3])
最低提升 = round((1 + self.附加伤害 + self.属性附加 * self.属性倍率) / x - 1, 8)
self.附加伤害加成(-self.择优极限[3])
词条提升率[3] = [最低提升, 最高提升]
if 4 in 词条范围:
最高提升 = 0
x = 1 + self.暴击伤害
self.暴击伤害加成(词条数值[4])
最高提升 = round((1 + self.暴击伤害) / x - 1, 8)
self.暴击伤害加成(-词条数值[4])
最低提升 = 0
self.暴击伤害加成(self.择优极限[4] - 词条数值[4])
x = 1 + self.暴击伤害
self.暴击伤害加成(词条数值[4])
最低提升 = round((1 + self.暴击伤害) / x - 1, 8)
self.暴击伤害加成(-self.择优极限[4])
词条提升率[4] = [最低提升, 最高提升]
if 5 in 词条范围:
最高提升 = 0
x = 1 + self.最终伤害
self.最终伤害加成(词条数值[5])
最高提升 = round((1 + self.最终伤害) / x - 1, 8)
self.最终伤害加成(-词条数值[5])
最低提升 = 0
self.最终伤害加成(self.择优极限[5] - 词条数值[5])
x = 1 + self.最终伤害
self.最终伤害加成(词条数值[5])
最低提升 = round((1 + self.最终伤害) / x - 1, 8)
self.最终伤害加成(-self.择优极限[5])
词条提升率[5] = [最低提升, 最高提升]
return 词条提升率
def 词条修改(self, x):
self.百分比力智加成(x)
self.百分比三攻加成(x)
self.伤害增加加成(x)
self.附加伤害加成(x)
self.暴击伤害加成(x)
self.最终伤害加成(x)
def 基础提升率计算(self):
词条基数 = [
250 + self.力智计算(),
1 + self.百分比三攻,
100 * (1 + self.伤害增加),
1 + self.附加伤害 + self.属性附加 * self.属性倍率,
1 + self.暴击伤害,
1 + self.最终伤害,
]
self.词条修改(0.01)
词条提升后数值 = [
250 + self.力智计算(),
1 + self.百分比三攻,
100 * (1 + self.伤害增加),
1 + self.附加伤害 + self.属性附加 * self.属性倍率,
1 + self.暴击伤害,
1 + self.最终伤害,
]
self.词条修改(-0.01)
return [词条基数, 词条提升后数值]
def 词条提升率计算(self, 词条范围, 词条数值, y=0):
词条提升率 = [0] * 6
if 0 in 词条范围:
# 百分比力智
x = self.面板系数计算()
self.百分比力智加成(词条数值[0])
词条提升率[0] = round(self.面板系数计算() / x - 1, 8)
self.百分比力智加成(-词条数值[0])
if 1 in 词条范围:
# 百分比三攻
x = 1 + self.百分比三攻
self.百分比三攻加成(词条数值[1])
词条提升率[1] = round((1 + self.百分比三攻) / x - 1, 8)
self.百分比三攻加成(-词条数值[1])
if 2 in 词条范围:
# 伤害增加
x = 1 + int(self.伤害增加 * 100) / 100
self.伤害增加加成(词条数值[2])
词条提升率[2] = round((1 + int(self.伤害增加 * 100) / 100) / x - 1, 8)
self.伤害增加加成(-词条数值[2])
if 3 in 词条范围:
# 附加伤害
x = 1 + self.附加伤害 + self.属性附加 * self.属性倍率
self.附加伤害加成(词条数值[3])
词条提升率[3] = round((1 + self.附加伤害 + self.属性附加 * self.属性倍率) / x - 1,
8)
self.附加伤害加成(-词条数值[3])
if 4 in 词条范围:
# 暴击伤害
x = 1 + self.暴击伤害
self.暴击伤害加成(词条数值[4])
词条提升率[4] = round((1 + self.暴击伤害) / x - 1, 8)
self.暴击伤害加成(-词条数值[4])
if 5 in 词条范围:
# 最终伤害
x = 1 + self.最终伤害
self.最终伤害加成(词条数值[5])
词条提升率[5] = round((1 + self.最终伤害) / x - 1, 8)
self.最终伤害加成(-词条数值[5])
if y == 1:
self.词条提升率 = copy(词条提升率)
# for k in range(6):
# if 词条提升率[k] == max(词条提升率):
# 词条属性列表[k].加成属性(self, 词条数值[k])
# return k
tem = []
最小词条 = 0
for k in range(6):
if 词条提升率[k] == max(词条提升率):
# 词条属性列表[k].加成属性(self, 词条数值[k])
tem.append(k)
待排序提升率 = []
for i in tem:
待排序提升率.append([i, self.择优极限[i]])
待排序提升率.sort(key=lambda x: round(x[1], 2), reverse=False)
self.择优极限 = [round(self.择优极限[i] - 词条数值[i], 3) for i in range(6)]
最小词条 = 待排序提升率[0][0]
词条属性列表[最小词条].加成属性(self, 词条数值[最小词条])
return 最小词条
def 自适应计算(self, x=0):
# print(self.计算自适应方式)
if self.黑鸦武器择优模式 == 0:
self.择优词条 = [[round(self.变换词条[0][3] / 100, 2)] * 6,
[round(self.变换词条[1][3] / 100, 2)] * 6,
[round(self.变换词条[2][3] / 100, 2)] * 6,
[round(self.变换词条[3][3] / 100, 2)] * 6, [0.1] * 6,
[0.05] * 6, [0.08, 0.08, 0.07, 0.08, 0, 0.08],
[0, 0.05, 0.05, 0, 0.05, 0]]
else:
self.择优词条 = [[round(0.16, 2)] * 6,
[round(self.变换词条[1][3] / 100, 2)] * 6,
[round(self.变换词条[2][3] / 100, 2)] * 6,
[round(self.变换词条[3][3] / 100, 2)] * 6, [0.1] * 6,
[0.05] * 6, [0.08, 0.08, 0.07, 0.08, 0, 0.08],
[0, 0.05, 0.05, 0, 0.05, 0]]
self.是否择优 = self.词条是否择优()
self.择优结果 = [[0, 0]] * len(self.择优词条)
# print(self.择优词条)
# self.是否择优 = self.词条是否择优()
# print(self.是否择优)
# print(self.计算自适应方式)
# if self.计算自适应方式 == 0:
# self.贪心自适应()
# else:
# self.全局自适应()
if self.输出提升率 != 0:
self.择优提升率计算()
else:
try:
self.全局自适应()
except Exception as error:
logger.error(error)
self.贪心自适应()
for i in range(len(self.择优结果)):
# 词条属性列表[self.择优结果[i][0]].加成属性(self,self.择优结果[i][1])
if i < 4:
self.黑鸦词条[i].append("")
if self.择优结果[i][1] != 0:
self.黑鸦词条[i][4] = (
trans("觉醒Lv+2 ")
if i == 0 and self.择优结果[i][1] == 0.16 else '') + trans(
黑鸦武器属性列表[self.择优结果[i][0]].描述) + '+' + str(
round(self.择优结果[i][1] * 100)) + '%'
if i == 4:
if self.是否择优[i] == 0:
self.词条提升率 = [0] * 6
else:
self.词条选择.clear()
self.词条选择.append(self.择优结果[i][0])
if i == 5:
if self.是否择优[i] != 0:
self.词条选择.append(self.择优结果[i][0])
if i == 6:
self.自适应描述[0] = '{}%{}'.format(
int(self.择优结果[i][1] * 100),
trans(词条属性列表[self.择优结果[i][0]].描述))
if i == 7:
self.自适应描述[1] = '{}%{}'.format(
int(self.择优结果[i][1] * 100),
trans(词条属性列表[self.择优结果[i][0]].描述))
def 计算择优范围(self, d):
index = []
for i in range(6):
if d[i] != 0:
index.append(i)
if len(index) == 0:
index.append(0)
return index
def 择优提升率计算(self):
up = self.基础提升率计算()
data_array = [[0 for i in range(6)] for i in range(8)]
for i in range(8):
for j in range(6):
data_array[i][j] = self.择优词条[i][j] * (
up[1][j] - up[0][j]) * self.是否择优[i] * 100
try:
self.全局自适应()
except:
self.贪心自适应()
k = [up[0][0], up[0][1], up[0][2], up[0][3], up[0][4], up[0][5]]
k[self.择优结果[0][0]] += data_array[0][self.择优结果[0][0]]
k[self.择优结果[1][0]] += data_array[1][self.择优结果[1][0]]
k[self.择优结果[2][0]] += data_array[2][self.择优结果[2][0]]
k[self.择优结果[3][0]] += data_array[3][self.择优结果[3][0]]
k[self.择优结果[4][0]] += data_array[4][self.择优结果[4][0]]
k[self.择优结果[5][0]] += data_array[5][self.择优结果[5][0]]
k[self.择优结果[6][0]] += data_array[6][self.择优结果[6][0]]
k[self.择优结果[7][0]] += data_array[7][self.择优结果[7][0]]
max_data = k[0] * k[1] * int(k[2]) * k[3] * k[4] * k[5]
rangelist = [self.计算择优范围(i) for i in data_array]
path = './详细数据'
if not os.path.exists(path):
os.makedirs(path)
result_path = os.path.join(
path, '{}-{}.csv'.format(self.实际名称,
time.strftime('%m-%d-%H-%M-%S')))
wf = open(result_path, 'w', encoding='gbk')
wf.write('黑鸦武器,黑鸦戒指,黑鸦左槽,黑鸦下装,残香10%,残香5%,宠物装备,光环,系数,伤害\n')
increase_counter(ga_category="carry详细功能使用", name="输出择优数据")
for a1 in rangelist[0]:
for a2 in rangelist[1]:
for a3 in rangelist[2]:
for a4 in rangelist[3]:
for a5 in rangelist[4]:
for a6 in rangelist[5]:
for a7 in rangelist[6]:
for a8 in rangelist[7]:
k = [
up[0][0], up[0][1], up[0][2],
up[0][3], up[0][4], up[0][5]
]
k[a1] += data_array[0][a1]
k[a2] += data_array[1][a2]
k[a3] += data_array[2][a3]
k[a4] += data_array[3][a4]
k[a5] += data_array[4][a5]
k[a6] += data_array[5][a6]
k[a7] += data_array[6][a7]
k[a8] += data_array[7][a8]
rate = k[0] * k[1] * int(
k[2]
) * k[3] * k[4] * k[5] / max_data
damage = int(rate * self.输出提升率)
wf.write(
'{},{},{},{},{},{},{},{},{:.8},{}\n'
.format(
'无' if len(rangelist[0]) == 1
else 词条属性列表[a1].描述,
'无' if len(rangelist[1]) == 1
else 词条属性列表[a2].描述,
'无' if len(rangelist[2]) == 1
else 词条属性列表[a3].描述,
'无' if len(rangelist[3]) == 1
else 词条属性列表[a4].描述,
'无' if len(rangelist[4]) == 1
else 词条属性列表[a5].描述,
'无' if len(rangelist[5]) == 1
else 词条属性列表[a6].描述,
'无' if len(rangelist[6]) == 1
else 词条属性列表[a7].描述,
'无' if len(rangelist[7]) == 1
else 词条属性列表[a8].描述, rate,
damage))
os.startfile(result_path)
def 全局自适应(self):
x = 6
y = 8
data_array = ((ctypes.c_double * x) * (y + 1))() # 提升值数组
index = (ctypes.c_int * y)() # 索引
up = self.基础提升率计算()
# 第一行为词条基础
for j in range(x):
data_array[0][j] = up[0][j]
# 后续8行为可选词条
for i in range(y):
for j in range(x):
data_array[i + 1][j] = self.择优词条[i][j] * (
up[1][j] - up[0][j]) * self.是否择优[i] * 100
preferred.cal_index(data_array, byref(index))
for i in range(y):
if self.是否择优[i] != 0:
self.择优结果[i] = [index[i], self.择优词条[i][index[i]]]
词条属性列表[self.择优结果[i][0]].加成属性(self, self.择优结果[i][1])
def 贪心自适应(self):
# self.全局自适应()
# return
# self.择优词条 = [
# [round(self.变换词条[0][3]/100,2)]*6,
# [round(self.变换词条[1][3]/100,2)]*6,
# [round(self.变换词条[2][3]/100,2)]*6,
# [round(self.变换词条[3][3]/100,2)]*6,
# [0.1]*6,
# [0.05]*6,
# [0.07,0,0.07,0.08,0,0,0],
# [0,0.05,0.05,0,0.05,0,0]
# ]
self.择优范围 = []
for item in self.择优词条:
词条数值 = item
计算范围 = []
for i in range(6):
if 词条数值[i] != 0:
计算范围.append(i)
self.择优范围.append(计算范围)
贪心排序 = []
自由择优 = []
条件择优 = []
条件择优结果 = []
count = 1
self.择优极限 = [0] * 6
for i in range(len(self.择优词条)):
if self.是否择优[i] == 1:
词条数目 = len(list(filter(lambda x: x != 0, self.择优词条[i])))
贪心排序.append([count, max(self.择优词条[i]), 词条数目])
self.择优极限 = [
round(self.择优极限[j] + self.择优词条[i][j], 3) for j in range(6)
]
if 词条数目 == 6:
自由择优.append(count)
else:
条件择优.append(count)
# 说明存在非全部择优的情况
count += 1
# 贪心排序 = [
# [1,round(self.变换词条[0][3]/100,2),6],
# [2,round(self.变换词条[1][3]/100,2),6],
# [3,round(self.变换词条[2][3]/100,2),6],
# [4,round(self.变换词条[3][3]/100,2),6],
# [5,0.1,6],
# [6,0.05,6],
# [7,0.08,3],
# [8,0.05,3]
# ]
贪心排序.sort(key=lambda x: round(x[1], 2), reverse=True)
贪心排序.sort(key=lambda x: int(x[2]), reverse=True)
# print(self.择优词条)
# print(条件择优)
# self.自适应1 = 0
# self.自适应2 = 0
# if self.自适应选项[0] !=0:
# self.自适应1 = 1
# if self.自适应选项[1] !=0:
# self.自适应2 = 1
# self.择优极限 = [0]*6
# for item in 贪心排序:
# self.择优极限累计(item[0])
# print(self.择优极限)
for item in 贪心排序:
条件择优结果 = []
# 每次择优完计算非完全择优的每一个最高最低收益
for temp in 条件择优:
if self.是否择优[temp - 1] == 1:
词条数值 = self.择优词条[temp - 1]
上下限 = self.词条提示上下限计算(self.择优范围[temp - 1], 词条数值)
下限提升最高 = max([上下限[i][0] for i in range(len(上下限))])
index = 0
# tem = []
待排序提升率 = []
for i in range(6):
if 上下限[i][0] == 下限提升最高:
# tem.append(i)
待排序提升率.append([i, self.择优极限[i]])
待排序提升率.sort(key=lambda x: round(x[1], 2), reverse=False)
index = 待排序提升率[0][0]
del 上下限[index]
if 下限提升最高 >= max([上下限[i][1] for i in range(len(上下限))]):
self.是否择优[temp - 1] = 0
词条属性列表[index].加成属性(self, 词条数值[index])
# 条件择优结果.append('{}%{}'.format(int(词条数值[index] * 100), 词条属性列表[index].描述))
self.择优极限 = [
round(self.择优极限[i] - 词条数值[i], 3) for i in range(6)
]
self.择优结果[temp - 1] = [index, 词条数值[index]]
# else:
# 条件择优结果.append('')
# else:
# 条件择优结果.append('')
# for i in range(len(条件择优)):
# if 条件择优结果[i]!='':
# self.自适应描述[i]= 条件择优结果[i]
self.择优计算(item[0])
def 择优计算(self, index):
for i in range(1, 5):
if index == i and self.是否择优[index - 1] != 0:
词条数值 = self.择优词条[index - 1]
res = self.词条提升率计算(self.择优范围[index - 1], 词条数值)
self.择优结果[index - 1] = [res, 词条数值[res]]
# self.黑鸦词条[i-1].append("")
# self.黑鸦词条[i-1][4] = 黑鸦武器属性列表[res].描述 +'+' +str(self.变换词条[i-1][3])+'%'
# print(self.黑鸦词条)
return
# 残香词条1-10%
if index == 5:
if self.是否择优[index - 1] != 0:
# self.词条选择.clear()
词条数值 = self.择优词条[index - 1]
res = self.词条提升率计算(self.择优范围[index - 1], 词条数值, 1)
self.择优结果[index - 1] = [res, 词条数值[res]]
# self.词条选择.append(res)
# print(self.词条选择)
return
# 残香词条2
if index == 6:
if self.是否择优[index - 1] != 0:
词条数值 = self.择优词条[index - 1]
res = self.词条提升率计算(self.择优范围[index - 1], self.择优词条[index - 1])
self.择优结果[index - 1] = [res, 词条数值[res]]
# self.词条选择.append(self.词条提升率计算(self.择优范围[index-1], self.择优词条[index-1]))
return
# 宠物红色装备词条
if index == 7:
if self.是否择优[index - 1] != 0: # 宠物
词条数值 = self.择优词条[index - 1]
res = self.词条提升率计算(self.择优范围[index - 1], 词条数值)
self.择优结果[index - 1] = [res, 词条数值[res]]
# self.自适应描述[0] = '{}%{}'.format(int(词条数值[res] * 100), 词条属性列表[res].描述)
self.是否择优[index - 1] = 0
return
# 光环词条
if index == 8:
if self.是否择优[index - 1] != 0: # 光环
词条数值 = self.择优词条[index - 1]
res = self.词条提升率计算(self.择优范围[index - 1], 词条数值)
self.择优结果[index - 1] = [res, 词条数值[res]]
# self.自适应描述[1] = '{}%{}'.format(5, 词条属性列表[res].描述)
self.是否择优[index - 1] = 0
return
def 词条是否择优(self):
temp = [0] * 8
for i in range(4):
if self.黑鸦词条[i][0] == 1 and self.变换词条[i][1] != 0:
temp[i] = 1
# 残香词条1-10%
if self.希洛克武器词条 != 0:
temp[4] = 1
if self.希洛克武器词条 == 1 and self.武器词条触发 == 1:
temp[5] = 1
if self.自适应选项[0] != 0:
temp[6] = 1
if self.自适应选项[1] != 0:
temp[7] = 1
return temp
def 自适应输出(self):
temp = ''
if self.自适应选项[0] != 0: # 宠物
temp += trans('{宠物}:$value', value=self.自适应描述[0])
if self.自适应选项[1] != 0: # 光环
if temp != '':
temp += '|'
temp += trans('{光环}:$value', value=self.自适应描述[1])
return temp
def 黑鸦词条扣除(self):
for i in range(4):
self.黑鸦词条[i].append("")
if self.黑鸦词条[i][0] != 0 and self.变换词条[i][1] != 0:
self.黑鸦词条变更(self.变换词条[i], -1)
if self.黑鸦词条[i][0] == 2 and self.变换词条[i][1]:
temp = [
self.黑鸦词条[i][1],
(14 if self.变换词条[i][0] == 6 else self.变换词条[i][1]) +
self.黑鸦词条[i][2], 0, 0
]
self.黑鸦词条变更(temp, 1)
self.黑鸦词条[i][4] = 黑鸦武器属性列表[temp[0]].描述 + '+' + str(
(14 if self.变换词条[i][0] == 6 else self.变换词条[i][1]) +
self.黑鸦词条[i][2]) + ('' if temp[0] == 6 else '%')
if self.黑鸦词条[i][0] == 3 and self.变换词条[i][1]:
self.黑鸦词条[i][4] = ""
temp = [6, 2, 0, 0]
self.黑鸦词条变更([6, 2, 0, 0])
self.黑鸦词条[i][4] += 黑鸦武器属性列表[temp[0]].描述 + '+' + '2'
self.黑鸦词条[i][4] += '<br>'
temp = [self.黑鸦词条[i][1], self.黑鸦词条[i][2], 0, 0]
self.黑鸦词条变更(temp, 1)
self.黑鸦词条[i][4] += 黑鸦武器属性列表[temp[0]].描述 + '+' + str(
self.黑鸦词条[i][2]) + '%'
if self.黑鸦词条[0][0] == 1 and self.黑鸦武器择优模式 == 1 and self.变换词条[0][1] != 0:
self.技能等级加成('所有', 50, 50, 2)
self.技能等级加成('所有', 85, 85, 2)
self.技能等级加成('所有', 100, 100, 2)
def 黑鸦词条变更(self, 变换词条, 增减=1):
# print(变换词条)
if 变换词条[0] == 6:
黑鸦武器属性列表[变换词条[0]].加成属性(self, 增减 * 变换词条[1])
else:
黑鸦武器属性列表[变换词条[0]].加成属性(self, 增减 * 变换词条[1] / 100)
# endregion
# region 功能函数
def 装备检查(self, 装备名称):
for i in self.装备栏:
if i == 装备名称:
return True
return False
def 切装判断(self):
for i in self.装备切装:
if i != '无':
return True
return False
def 装备替换(self):
Q = deepcopy(self)
P = deepcopy(self)
temp = list(P.装备栏)
for i in range(12):
if P.装备切装[i] != '无':
temp[i] = P.装备切装[i]
P.装备栏 = tuple(temp)
P.适用套装计算()
P.武器类型 = equ.get_equ_by_name(P.装备栏[11]).类型
P.力量 += P.切装修正[0]
P.智力 += P.切装修正[1]
P.物理攻击力 += P.切装修正[2]
P.魔法攻击力 += P.切装修正[3]
P.独立攻击力 += P.切装修正[4]
P.所有属性强化加成(P.切装修正[5])
return [Q, P]
def 三觉屏蔽1(self):
if self.屏蔽三觉 == True:
for i in self.技能栏:
if i.所在等级 >= 95:
if i.所在等级 == 95 and i.是否主动 == 0:
self.超卓之心等级 = i.等级 - 3
else:
i.倍率 = 0
def 三觉屏蔽2(self):
if self.屏蔽三觉 == True:
temp = None
for j in self.技能栏:
if j.是否有伤害 == 1:
j.被动倍率 *= 1.045 + 0.005 * self.超卓之心等级
if j.所在等级 == 100:
temp = j
self.技能栏[self.技能序号[self.觉醒之抉择技能]].被动倍率 *= 1.1 + 0.05 * temp.等级
# endregion
class 角色窗口(窗口):
def __init__(self):
super().__init__()
# region 界面分页
def 界面(self):
count = 0
for i in self.角色属性A.技能栏:
if i.是否有伤害 == 1:
count += 1
self.窗口高度 = max(55 + 30 * count, 680)
self.setFixedSize(1120, 680)
self.输出背景图片 = QPixmap(trans('./ResourceFiles/img/输出背景.png'))
self.职业存档 = []
super().界面()
def 界面1(self):
super().界面1()
# increase_counter(ga_category="carry界面", name="界面/选择/打造")
for i in 称号列表:
self.称号.addItem(trans(i.显示名称), i.名称)
for i in 宠物列表:
self.宠物.addItem(trans(i.显示名称), i.名称)
标签 = QLabel(trans('装备条件设置'), self.main_frame1)
标签.move(940, 5)
标签.resize(170, 20)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
self.装备条件选择.clear()
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(['角色熟练度:英雄', '角色熟练度:传说'])
self.装备条件选择.append(MyQComboBox(self.main_frame1))
for i in range(0, 7):
self.装备条件选择[-1].addItem(trans('{技能栏空位}:$value', value=i))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans([
'命运的抉择:数学期望', '命运的抉择:黄字+10%', '命运的抉择:暴伤+10%', '命运的抉择:终伤+10%',
'命运的抉择:三攻+10%', '命运的抉择:技攻+10%'
]))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans([
'骰子:数学期望', '骰子:1点', '骰子:2点', '骰子:3点', '骰子:4点', '骰子:5点', '骰子:6点'
]))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans([
'悲剧的残骸:数学期望', '悲剧的残骸:HP高于70%', '悲剧的残骸:HP70-30%',
'悲剧的残骸:HP低于30%'
]))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans(
['先知者预言:数学期望', '先知者预言:属白+5%', '先知者预言:技攻+10%', '先知者预言:技攻+15%']))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans(['贫瘠沙漠的遗产:无', '贫瘠沙漠的遗产:霸体', '贫瘠沙漠的遗产:无伤']))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans(['幸运三角:数学期望', '幸运三角:7效果', '幸运三角:77效果', '幸运三角:777效果']))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(['擎天战甲:过充电状态', '擎天战甲:过负荷状态'])
self.装备条件选择.append(MyQComboBox(self.main_frame1))
for i in range(101):
self.装备条件选择[-1].addItem(trans('{持续伤害适用}$value%', value=100 - i))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(
trans([
'军神的隐秘遗产:120%以上', '军神的隐秘遗产:120-100%', '军神的隐秘遗产:100-80%',
'军神的隐秘遗产:80-60%', '军神的隐秘遗产:60-40%', '军神的隐秘遗产:40%以下'
]))
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(['太极天帝剑:阳', '太极天帝剑:阴'])
self.装备条件选择.append(MyQComboBox(self.main_frame1))
self.装备条件选择[-1].addItems(['{噙毒手套}:中毒', '{噙毒手套}:未中毒'])
# self.装备条件选择.append(MyQComboBox(self.main_frame1))
# self.装备条件选择[-1].addItems(['绿色生命的面容:无', '绿色生命的面容:阴暗面'])
for i in range(len(self.装备条件选择)):
self.装备条件选择[i].resize(170, 20)
self.装备条件选择[i].move(940, 30 + 28 * i)
self.百变怪选项 = QCheckBox(trans('百变怪'), self.main_frame1)
self.百变怪选项.move(660, 613)
self.百变怪选项.resize(80, 24)
self.百变怪选项.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans("仅在极速模式和套装模式下生效")))
self.百变怪选项.setStyleSheet(复选框样式)
self.计算模式选择 = MyQComboBox(self.main_frame1)
self.计算模式选择.addItems(['计算模式:极速模式', '计算模式:套装模式', '计算模式:单件模式'])
self.计算模式选择.move(750, 613)
self.计算模式选择.resize(235, 24)
self.计算模式选择.setStyleSheet(下拉框样式)
self.计算模式选择.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans(
'极速模式:533和3332(散搭) (不含智慧产物)<br><br>套装模式:533、3332(散搭)和3233(双防具) (不含智慧产物)<br><br>单件模式:所有组合 (不含百变怪)'
)))
self.最大使用线程数 = thread_num
# 一键修正按钮添加
一键站街修正名称 = trans(['站街力智', '站街三攻', '站街属强'])
for i in range(len(一键站街修正名称)):
名称 = QLabel(一键站街修正名称[i], self.main_frame1)
名称.setAlignment(Qt.AlignCenter)
名称.move(940 + i * 57, 394)
名称.resize(52, 25)
名称.setStyleSheet(标签样式)
self.一键站街设置输入.append(QLineEdit(self.main_frame1))
self.一键站街设置输入[i].setAlignment(Qt.AlignCenter)
self.一键站街设置输入[i].setStyleSheet(输入框样式)
self.一键站街设置输入[i].resize(52, 22)
self.一键站街设置输入[i].move(940 + i * 57, 424)
一键修正按钮 = QPushButton(trans('一键修正面板细节'), self.main_frame1)
一键修正按钮.clicked.connect(lambda state: self.一键修正(0))
一键修正按钮.move(940, 450)
一键修正按钮.resize(166, 25)
一键修正按钮.setStyleSheet(按钮样式)
# self.单套择优方式选项 = MyQComboBox(self.main_frame1)
# self.单套择优方式选项.move(940, 30 + 28 * 12)
# self.单套择优方式选项.resize(170,20)
# self.单套择优方式选项.addItem('单套择优方式:局部择优')
# self.单套择优方式选项.addItem('单套择优方式:全局择优')
# self.单套择优方式选项.setToolTip('排行榜及自选采用局部择优方式\n该选项仅适用于查看详情\n局部择优与全局择优大多数情况下一致\n少数情况下会有0.1%不到的差距')
x = 1006
y = 485
宽度 = 100
高度 = 20
间隔 = 4
self.红色宠物装备 = QCheckBox(trans('宠物装备择优'), self.main_frame1)
self.红色宠物装备.move(x, y)
self.红色宠物装备.resize(宽度, 高度)
self.红色宠物装备.setStyleSheet(复选框样式)
self.红色宠物装备.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans('7%黄字,8%力智,8%白字,8%三攻取最高值')))
self.红色宠物装备.stateChanged.connect(lambda state: self.下拉框禁用(
self.红色宠物装备, self.细节选项输入[0][11], 下拉框样式_detail))
self.光环自适应 = QCheckBox(trans('光环词条择优'), self.main_frame1)
self.光环自适应.move(x, y + (高度 + 间隔) * 1)
self.光环自适应.resize(宽度, 高度)
self.光环自适应.setStyleSheet(复选框样式)
self.光环自适应.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans('5%黄字,5%暴伤,5%三攻取最高值')))
self.光环自适应.stateChanged.connect(lambda state: self.下拉框禁用(
self.光环自适应, self.细节选项输入[1][13], 下拉框样式_detail))
self.禁用存档 = QCheckBox(trans('禁用自动存档'), self.main_frame1)
self.禁用存档.move(x, y + (高度 + 间隔) * 2)
self.禁用存档.resize(宽度, 高度)
self.禁用存档.setStyleSheet(复选框样式)
self.神话排名选项 = QCheckBox(trans('神话排名模式'), self.main_frame1)
self.神话排名选项.move(x, y + (高度 + 间隔) * 3)
self.神话排名选项.resize(宽度, 高度)
self.神话排名选项.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans('仅显示有神话的组合,且每件神话装备只会出现一次')))
self.神话排名选项.setStyleSheet(复选框样式)
self.显示选项 = QCheckBox(trans('亿为单位显示'), self.main_frame1)
self.显示选项.move(x, y + (高度 + 间隔) * 4)
self.显示选项.resize(宽度, 高度)
self.显示选项.setStyleSheet(复选框样式)
x = 910
y = 485
宽度 = 90
高度 = 20
间隔 = 4
重置按钮 = QPushButton(trans('全局重置'), self.main_frame1)
重置按钮.clicked.connect(lambda state: self.全局重置())
重置按钮.move(x, y)
重置按钮.resize(宽度, 高度)
重置按钮.setStyleSheet(按钮样式)
self.线程数选择 = MyQComboBox(self.main_frame1)
self.线程数选择.move(x, y + (高度 + 间隔) * 1)
self.线程数选择.resize(宽度, 高度)
for i in range(thread_num, 0, -1):
self.线程数选择.addItem(trans('{进程}:$value', value=i))
if thread_num > 1:
self.线程数选择.setCurrentIndex(1)
self.存档选择 = MyQComboBox(self.main_frame1)
self.存档选择.move(x, y + (高度 + 间隔) * 2)
self.存档选择.resize(宽度, 高度)
self.存档选择.currentIndexChanged.connect(lambda state: self.存档更换())
self.智慧产物限制 = MyQComboBox(self.main_frame1)
self.智慧产物限制.move(x, y + (高度 + 间隔) * 3)
self.智慧产物限制.resize(宽度, 高度)
for i in range(1, 12):
self.智慧产物限制.addItem(trans('改造≤$件').format(i))
self.智慧产物限制.setCurrentIndex(2)
self.智慧产物限制.setToolTip('<font size="3" face="宋体">{}</font>'.format(
trans('不计智慧产物武器以及轮回SS')))
self.攻击属性选项 = MyQComboBox(self.main_frame1)
self.攻击属性选项.move(x, y + (高度 + 间隔) * 4)
self.攻击属性选项.resize(宽度, 高度)
self.攻击属性选项.addItems(format_range('攻击属性:{}',
['全', '火', '冰', '光', '暗']))
def 界面2(self):
# 第二个布局界面
# increase_counter(ga_category="carry界面", name="技能/符文/药剂")
# 技能等级、TP、次数输入、宠物次数
self.BUFF输入 = QLineEdit(self.main_frame2)
self.时间输入 = MyQComboBox(self.main_frame2)
self.护石栏 = []
for i in range(3):
self.护石栏.append(MyQComboBox(self.main_frame2))
self.符文 = []
self.符文效果 = []
self.觉醒选择状态 = 2
self.等级调整 = []
self.TP输入 = []
self.次数输入 = []
self.宠物次数 = []
self.奶量buff输入 = []
if 切装模式 == 1:
self.技能切装 = []
count = 0
for i in self.角色属性A.技能栏:
i.等级 = i.基础等级
self.等级调整.append(MyQComboBox(self.main_frame2))
self.等级调整[count].currentIndexChanged.connect(
lambda state, index=count: self.等级调整标注(index))
count += 1
if i.是否有伤害 == 1 and i.TP上限 != 0:
self.TP输入.append(MyQComboBox(self.main_frame2))
else:
self.TP输入.append('')
if i.是否有伤害 == 1:
self.次数输入.append(MyQComboBox(self.main_frame2))
self.宠物次数.append(MyQComboBox(self.main_frame2))
if 切装模式 == 1:
temp = QCheckBox(self.main_frame2)
temp.setStyleSheet(复选框样式)
# temp.setStyleSheet("QCheckBox:{background-color:transparent}")
self.技能切装.append(temp)
else:
self.次数输入.append('')
self.宠物次数.append('')
if 切装模式 == 1:
self.技能切装.append('')
for i in self.角色属性A.技能栏:
序号 = self.角色属性A.技能序号[i.名称]
if i.所在等级 == 50 or i.所在等级 == 85:
for j in range(i.等级上限 - i.基础等级 + 1):
self.等级调整[序号].addItem(str(j))
else:
for j in range(-i.基础等级, i.等级上限 - i.基础等级 + 1):
self.等级调整[序号].addItem(str(j))
if i.是否有伤害 == 1 and i.TP上限 != 0:
for j in range(i.TP上限 + 1):
self.TP输入[序号].addItem(str(j))
if i.是否有伤害 == 1:
self.次数输入[序号].setMaxVisibleItems(15)
self.次数输入[序号].addItem('/CD')
self.宠物次数[序号].setMaxVisibleItems(15)
for j in range(11):
self.次数输入[序号].addItem(str(j))
self.宠物次数[序号].addItem(str(j))
self.次数输入[序号].addItem('填写')
self.次数输入[序号].activated.connect(
lambda state, index=序号: self.次数输入填写(index))
self.宠物次数[序号].addItem('填写')
self.宠物次数[序号].activated.connect(
lambda state, index=序号: self.宠物次数填写(index))
# 三觉强化选择
self.一觉遮罩透明度 = QGraphicsOpacityEffect()
self.一觉遮罩透明度.setOpacity(0.5)
self.二觉遮罩透明度 = QGraphicsOpacityEffect()
self.二觉遮罩透明度.setOpacity(0.0)
横坐标 = 10
纵坐标 = 0
横坐标偏移量 = 60
纵坐标偏移量 = 30
词条框宽度 = 48
行高 = 20
counter = 0
for i in trans(["契约满级", "等级调整", "TP等级", "释放次数", "宠物次数"]):
x = QLabel(i, self.main_frame2)
x.move(横坐标 + 横坐标偏移量 - 30 + 50 * counter, 纵坐标 + 5)
x.setStyleSheet(标签样式)
counter += 1
纵坐标 += 20
skill_sort = self.技能列表显示排序(self.角色属性A.技能栏)
for i in skill_sort:
if i.是否有伤害 == 1:
x = QLabel(self.main_frame2)
x.setPixmap(self.技能图片[self.角色属性A.技能序号[i.名称]])
x.resize(28, 28)
tempstr = trans(
'<font face="宋体"><font color="#FF6666">{$name}<br>',
name=i.名称)
if i.备注 is not None and i.备注 != '':
tempstr += trans('{$value}</font><br>', value=i.备注)
else:
tempstr += '</font>'
tempstr += trans('{所在等级}:$level<br>', level=i.所在等级)
tempstr += trans('{等级上限}:$limit', limit=i.等级上限)
if i.是否主动 == 1:
tempstr += trans('<br>{百分比}:$value%',
value=int(i.等效百分比(self.角色属性A.武器类型)))
if i.TP上限 != 0:
tempstr += trans('<br>{TP成长}:$value',
value=to_percent(i.TP成长))
tempstr += trans('<br>{TP上限}:$value', value=i.TP上限)
tempstr += '</font>'
x.setToolTip(tempstr)
x.move(横坐标, 纵坐标 + 7)
横坐标 += 40
x = QLabel('Lv' + str(i.基础等级), self.main_frame2)
x.resize(40, 28)
x.move(横坐标, 纵坐标 + 7)
x.setStyleSheet(标签样式)
横坐标 += 40
self.等级调整[self.角色属性A.技能序号[i.名称]].resize(词条框宽度, 行高)
self.等级调整[self.角色属性A.技能序号[i.名称]].move(横坐标, 纵坐标 + 10)
横坐标 -= 80
纵坐标 += 纵坐标偏移量
横坐标 = 横坐标 + 80 + 50
纵坐标 = 30
for i in skill_sort:
if i.是否有伤害 == 1:
if i.TP上限 != 0:
self.TP输入[self.角色属性A.技能序号[i.名称]].resize(词条框宽度, 行高)
self.TP输入[self.角色属性A.技能序号[i.名称]].move(横坐标, 纵坐标)
纵坐标 += 纵坐标偏移量
横坐标 = 横坐标 + 50
纵坐标 = 30
for i in skill_sort:
if i.是否有伤害 == 1:
self.次数输入[self.角色属性A.技能序号[i.名称]].resize(词条框宽度, 行高)
self.次数输入[self.角色属性A.技能序号[i.名称]].move(横坐标, 纵坐标)
self.宠物次数[self.角色属性A.技能序号[i.名称]].resize(词条框宽度, 行高)
self.宠物次数[self.角色属性A.技能序号[i.名称]].move(横坐标 + 50, 纵坐标)
if 切装模式 == 1:
self.技能切装[self.角色属性A.技能序号[i.名称]].move(
横坐标 + 55 + 词条框宽度, 纵坐标 + 5)
纵坐标 += 纵坐标偏移量
横坐标 = 横坐标 + 130
纵坐标 = 20
for i in skill_sort:
if i.是否有伤害 == 0:
x = QLabel(self.main_frame2)
x.setPixmap(self.技能图片[self.角色属性A.技能序号[i.名称]])
x.resize(28, 28)
tempstr = trans(
'<font face="宋体"><font color="#FF6666">{$name}<br>',
name=i.名称)
if i.备注 is not None and i.备注 != '':
tempstr += trans('{$value}</font><br>', value=i.备注)
else:
tempstr += '</font>'
tempstr += trans('{所在等级}:$level<br>', level=i.所在等级)
tempstr += trans('{等级上限}:$limit', limit=i.等级上限)
tempstr += '</font>'
x.setToolTip(tempstr)
x.move(横坐标, 纵坐标 + 7)
横坐标 += 40
x = QLabel('Lv' + str(i.基础等级), self.main_frame2)
x.resize(40, 28)
x.move(横坐标, 纵坐标 + 7)
x.setStyleSheet(标签样式)
横坐标 += 40
self.等级调整[self.角色属性A.技能序号[i.名称]].resize(词条框宽度, 行高)
self.等级调整[self.角色属性A.技能序号[i.名称]].move(横坐标, 纵坐标 + 10)
横坐标 -= 80
纵坐标 += 纵坐标偏移量
x = 横坐标 + 20
y = 纵坐标 + 60
self.觉醒选择 = QLabel(self.main_frame2)
self.觉醒选择.setPixmap(QPixmap('./ResourceFiles/img/觉醒选择.png'))
self.觉醒选择.resize(120, 100)
self.觉醒选择.move(x, y - 20)
self.BUFF = QLabel(self.main_frame2)
self.BUFF.setPixmap(
QPixmap('./ResourceFiles/' + self.角色属性A.实际名称 + "/技能/BUFF.png"))
self.BUFF.resize(28, 28)
self.BUFF.move(x - 2, y - 40)
self.BUFF.setToolTip(
trans('<font size="3" face="宋体">{最高值参考}:$value</font>',
value=to_percent(self.角色属性A.主BUFF - 1)))
self.BUFF输入.setText(str('%.1f' % ((self.角色属性A.主BUFF - 1) * 100)))
self.BUFF输入.resize(50, 25)
self.BUFF输入.move(x + 38, y - 38)
self.BUFF输入.setStyleSheet(输入框样式)
self.BUFF输入.setAlignment(Qt.AlignCenter)
self.一觉图片 = QLabel(self.main_frame2)
self.一觉图片.setPixmap(self.技能图片[self.一觉序号])
self.一觉图片.resize(28, 28)
self.一觉图片.move(x + 7, y + 8)
self.二觉图片 = QLabel(self.main_frame2)
self.二觉图片.setPixmap(self.技能图片[self.二觉序号])
self.二觉图片.resize(28, 28)
self.二觉图片.move(x + 52, y + 8)
self.一觉遮罩 = QPushButton(self.main_frame2)
self.一觉遮罩.resize(38, 50)
self.一觉遮罩.move(x + 2, y + 5)
self.一觉遮罩.setStyleSheet(
"QPushButton{background-color:rgb(0,0,0);border:1px;border-radius:3px;}"
)
self.一觉遮罩.setGraphicsEffect(self.一觉遮罩透明度)
self.一觉遮罩.clicked.connect(lambda state, index=1: self.强化觉醒选择(index))
self.二觉遮罩 = QPushButton(self.main_frame2)
self.二觉遮罩.resize(38, 50)
self.二觉遮罩.move(x + 47, y + 5)
self.二觉遮罩.setStyleSheet(
"QPushButton{background-color:rgb(0,0,0);border:1px;border-radius:3px;}"
)
self.二觉遮罩.setGraphicsEffect(self.二觉遮罩透明度)
self.二觉遮罩.clicked.connect(lambda state, index=2: self.强化觉醒选择(index))
for i in range(3):
self.护石栏[i].addItems(self.护石选项)
self.护石类型选项 = []
for i in range(9):
self.符文.append(MyQComboBox(self.main_frame2))
self.符文[i].addItems(self.符文选项)
self.符文效果.append(MyQComboBox(self.main_frame2))
self.符文效果[i].addItems(符文效果选项)
横坐标 = 480
纵坐标 = 20
行高 = 18
x = QLabel(trans("{护石}Ⅰ"), self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
y = MyQComboBox(self.main_frame2)
y.move(横坐标 + 65, 纵坐标)
y.resize(65, 行高)
self.护石类型选项.append(y)
纵坐标 += 21
self.护石栏[0].move(横坐标, 纵坐标)
self.护石栏[0].resize(130, 行高)
self.护石栏[0].currentIndexChanged.connect(
lambda state, index=0: self.护石类型选项更新(index))
纵坐标 += 25
for i in range(3):
tempstr = trans("{符文}$value{选择}:", value=i + 1)
x = QLabel(tempstr, self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
纵坐标 += 21
self.符文[i].move(横坐标, 纵坐标)
self.符文[i].resize(130, 行高)
self.符文[i].activated.connect(
lambda state, index=i: self.符文技能更改(index))
纵坐标 += 21
self.符文效果[i].move(横坐标, 纵坐标)
self.符文效果[i].resize(130, 行高)
self.符文效果[i].activated.connect(
lambda state, index=i: self.符文效果更改(index))
纵坐标 += 25
横坐标 = 650
纵坐标 = 20
x = QLabel(trans("{护石}Ⅱ"), self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
y = MyQComboBox(self.main_frame2)
y.move(横坐标 + 65, 纵坐标)
y.resize(65, 行高)
self.护石类型选项.append(y)
纵坐标 += 21
self.护石栏[1].move(横坐标, 纵坐标)
self.护石栏[1].resize(130, 行高)
self.护石栏[1].currentIndexChanged.connect(
lambda state, index=1: self.护石类型选项更新(index))
纵坐标 += 25
for i in range(3, 6):
tempstr = trans("{符文}$value{选择}:", value=i + 1)
x = QLabel(tempstr, self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
纵坐标 += 21
self.符文[i].move(横坐标, 纵坐标)
self.符文[i].resize(130, 行高)
纵坐标 += 21
self.符文效果[i].move(横坐标, 纵坐标)
self.符文效果[i].resize(130, 行高)
纵坐标 += 25
横坐标 = 820
纵坐标 = 20
x = QLabel(trans("{护石}Ⅲ"), self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
y = MyQComboBox(self.main_frame2)
y.move(横坐标 + 65, 纵坐标)
y.resize(65, 行高)
self.护石类型选项.append(y)
纵坐标 += 21
self.护石栏[2].move(横坐标, 纵坐标)
self.护石栏[2].resize(130, 行高)
self.护石栏[2].currentIndexChanged.connect(
lambda state, index=2: self.护石类型选项更新(index))
纵坐标 += 25
for i in range(6, 9):
tempstr = trans("{符文}$value{选择}:", value=i + 1)
x = QLabel(tempstr, self.main_frame2)
x.move(横坐标, 纵坐标)
x.setStyleSheet(标签样式)
纵坐标 += 21
self.符文[i].move(横坐标, 纵坐标)
self.符文[i].resize(130, 行高)
纵坐标 += 21
self.符文效果[i].move(横坐标, 纵坐标)
self.符文效果[i].resize(130, 行高)
纵坐标 += 25
for i in range(3):
self.护石类型选项[i].addItem('魔界')
self.护石类型选项[i].addItem('圣痕')
self.护石类型选项[i].currentIndexChanged.connect(
lambda state, index=i: self.护石描述更新(index))
self.复选框列表 = []
self.复选框列表list = []
for i in 选项设置列表:
if (觉醒开关 == 0 or "·" not in self.初始属性.实际名称) and i.名称 == '屏蔽三觉':
continue
self.复选框列表.append(QCheckBox(trans(i.名称), self.main_frame2))
self.复选框列表list.append(i.名称)
奶量buff力智label = QLabel(trans("奶量buff力智"), self.main_frame2)
奶量buff力智label.setStyleSheet(标签样式)
奶量buff力智label.setAlignment(Qt.AlignCenter)
偏移 = (35 if self.初始属性.远古记忆 != -1 else 0) + (35 if self.初始属性.刀魂之卡赞 != -1
else 0) + 35
奶量buff力智label.move(970, 24 + counter * 80 + 10 + 偏移)
奶量buff力智输入框 = QLineEdit(self.main_frame2)
奶量buff力智输入框.setStyleSheet(文本框样式黄)
奶量buff力智输入框.move(1050, 21 + counter * 80 + 10 + 偏移)
奶量buff力智输入框.resize(50, 20)
self.奶量buff输入.append(奶量buff力智输入框)
奶量buff三攻label = QLabel(trans("奶量buff三攻"), self.main_frame2)
奶量buff三攻label.setStyleSheet(标签样式)
奶量buff三攻label.setAlignment(Qt.AlignCenter)
奶量buff三攻label.move(970, 24 + counter * 80 + 40 + 偏移)
奶量buff三攻输入框 = QLineEdit(self.main_frame2)
奶量buff三攻输入框.setStyleSheet(文本框样式黄)
奶量buff三攻输入框.move(1050, 15 + counter * 80 + 45 + 偏移)
奶量buff三攻输入框.resize(50, 20)
self.奶量buff输入.append(奶量buff三攻输入框)
counter = 0
for i in self.复选框列表:
i.setStyleSheet(复选框样式)
i.resize(125, 20)
i.move(980, 10 + counter * 24)
if counter < 7 and 调试开关 == 0:
i.setChecked(True)
counter += 1
sign = 0
if self.初始属性.远古记忆 != -1:
i = QLabel(self.main_frame2)
i.setPixmap(QPixmap('./ResourceFiles/img/远古记忆.png'))
i.resize(28, 28)
i.move(1000, 15 + counter * 24)
self.远古记忆 = MyQComboBox(self.main_frame2)
self.远古记忆.currentIndexChanged.connect(
lambda state, index=100: self.等级调整标注(index))
for i in range(12):
self.远古记忆.addItem(str(i))
self.远古记忆.resize(50, 20)
self.远古记忆.move(1035, 19 + counter * 24)
sign = 30
if self.初始属性.刀魂之卡赞 != -1:
i = QLabel(self.main_frame2)
i.setPixmap(QPixmap('./ResourceFiles/img/刀魂之卡赞.png'))
i.resize(28, 28)
i.move(1000, 15 + sign + counter * 24)
self.刀魂之卡赞 = MyQComboBox(self.main_frame2)
self.刀魂之卡赞.currentIndexChanged.connect(
lambda state, index=200: self.等级调整标注(index))
for i in range(12):
self.刀魂之卡赞.addItem(str(i))
self.刀魂之卡赞.resize(50, 20)
self.刀魂之卡赞.move(1035, 19 + sign + counter * 24)
x = QLabel(trans("{攻击目标}:"), self.main_frame2)
x.move(660, self.height() - 62)
x.resize(70, 20)
x.setStyleSheet(标签样式)
self.攻击目标 = MyQComboBox(self.main_frame2)
for i in 攻击目标:
self.攻击目标.addItem(i[0])
self.攻击目标.move(730, self.height() - 63)
self.攻击目标.resize(110, 20)
x = QLabel(trans("{时间输入}:"), self.main_frame2)
x.move(850, self.height() - 62)
x.resize(70, 20)
x.setStyleSheet(标签样式)
self.时间输入.addItems(
['1', '10', '15', '20', '25', '30', '45', '50', '60'])
self.时间输入.setEditable(True)
self.时间输入.move(920, self.height() - 63)
self.时间输入.resize(50, 20)
self.技能存档选择 = MyQComboBox(self.main_frame2)
self.技能存档选择.move(990, self.height() - 105)
self.技能存档选择.resize(110, 20)
self.技能存档选择.currentIndexChanged.connect(lambda state: self.技能存档更换())
self.计算按钮2 = QPushButton(trans('开始计算'), self.main_frame2)
self.计算按钮2.clicked.connect(lambda state: self.计算())
self.计算按钮2.move(990, self.height() - 70)
self.计算按钮2.resize(110, 30)
self.计算按钮2.setStyleSheet(按钮样式)
def 界面3(self):
# increase_counter(ga_category="carry界面", name="基础/细节/修正")
# 第三个布局界面
self.属性设置输入 = []
self.细节选项输入 = []
self.列名称 = []
self.行名称 = []
名称 = QLabel(trans(表头名称1), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
名称.resize(80, 25)
名称.move(10, 文本框间隔)
m = -1
for i in 列名称1:
m += 1
名称 = QLabel(trans(i), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
if i == "选项":
名称.resize(文本框宽度 * 2 + 5, 25)
else:
名称.resize(文本框宽度, 25)
名称.move(95 + m * (文本框宽度 + 5), 文本框间隔)
self.列名称.append(i)
n = -1
for j in 行名称1.keys():
n += 1
名称 = QLabel(trans(j), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
if 行名称1[j] == 1:
名称.setStyleSheet(标签样式_2)
else:
名称.setStyleSheet(标签样式)
名称.resize(80, 25)
名称.move(10, 文本框间隔 + 30 + n * 30)
self.行名称.append(j)
m = -1
for i in 列名称1:
m += 1
templist = []
n = -1
for j in 行名称1.keys():
n += 1
if i == "选项":
templist.append(MyQComboBox(self.main_frame3))
templist[n].resize(文本框宽度 * 2 + 5, 22)
templist[n].setStyleSheet(下拉框样式_detail)
if 行1选项[j][0] != -1:
templist[n].addItem('无')
for s_id in 行1选项[j]:
templist[n].addItem(细节选项列表[s_id].描述)
else:
templist[n].setDisabled(True)
else:
templist.append(QLineEdit(self.main_frame3))
if 行名称1[j] == 1:
templist[n].setStyleSheet(文本框样式黄)
else:
templist[n].setStyleSheet(文本框样式白)
templist[n].resize(文本框宽度, 22)
templist[n].setAlignment(Qt.AlignCenter)
templist[n].move(95 + m * (文本框宽度 + 5), 文本框间隔 + 30 + n * 30 + 2)
if i == "选项":
self.细节选项输入.append(templist)
else:
self.属性设置输入.append(templist)
名称 = QLabel(trans(表头名称2), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
名称.resize(80, 25)
名称.move(160 + (len(列名称1) + 1) * 文本框宽度, 文本框间隔)
m = -1
for i in 列名称2:
m += 1
名称 = QLabel(trans(i), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
if i == "技能":
名称.resize(155, 25)
elif i == "选项":
名称.resize(文本框宽度 * 2 + 5, 25)
else:
名称.resize(文本框宽度, 25)
名称.move(245 + (len(列名称1) + 1) * 文本框宽度 + m * (文本框宽度 + 5), 文本框间隔)
self.列名称.append(trans(i))
if i == "选项":
m += 1
n = -1
for j in 行名称2.keys():
n += 1
名称 = QLabel(trans(j), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
if 行名称2[j] == 1:
名称.setStyleSheet(标签样式_2)
else:
名称.setStyleSheet(标签样式)
名称.resize(80, 25)
名称.move(160 + (len(列名称1) + 1) * 文本框宽度, 文本框间隔 + 30 + n * 30)
self.行名称.append(trans(j))
count = len(self.细节选项输入)
m = -1
for i in 列名称2:
m += 1
templist = []
n = -1
for j in 行名称2.keys():
n += 1
if i == "选项":
templist.append(MyQComboBox(self.main_frame3))
templist[n].resize(文本框宽度 * 2 + 5, 22)
templist[n].setStyleSheet(下拉框样式_detail)
if 行2选项[j][0] != -1:
templist[n].addItem('无')
templist[n].setPlaceholderText("增伤词条选择")
templist[n].currentIndexChanged.connect(
lambda state, index=templist[n]: self.细节增伤选项颜色更新(
index))
for s_id in 行2选项[j]:
templist[n].addItem(细节选项列表[s_id].描述)
else:
templist[n].setDisabled(True)
elif i == "技能":
templist.append(MyQComboBox(self.main_frame3))
templist[n].resize(155, 22)
templist[n].setStyleSheet(下拉框样式_detail)
cur = 行2技能[j][0]
if cur == -1:
templist[n].setDisabled(True)
pass
elif cur in [100, 999]:
templist[n].addItem('无')
if cur == 999:
skills = [
i.名称 for i in self.角色属性A.技能栏 if i.所在等级 <= 85
]
else:
skills = [
i.名称 for i in self.角色属性A.技能栏
if i.所在等级 <= 70 and i.所在等级 not in [48, 50]
]
if self.角色属性A.实际名称 == '极诣·黑暗武士':
skills.append('幽魂剑')
if self.角色属性A.实际名称 == '知源·缔造者':
skills.append('末日虫洞')
for skill_name in skills:
templist[n].addItem(
trans('{$name}Lv+1', name=skill_name),
skill_name + "Lv+1")
else:
templist[n].addItem('无')
for s_id in 行2技能[j]:
templist[n].addItem(细节选项列表[s_id].描述)
else:
templist.append(QLineEdit(self.main_frame3))
if 行名称2[j] == 1:
templist[n].setStyleSheet(文本框样式黄)
else:
templist[n].setStyleSheet(文本框样式白)
templist[n].resize(文本框宽度, 22)
templist[n].setAlignment(Qt.AlignCenter)
templist[n].move(
245 + (len(列名称1) + 1) * 文本框宽度 + m * (文本框宽度 + 5),
文本框间隔 + 30 + n * 30 + 2)
if i in ["选项", "技能"]:
self.细节选项输入.append(templist)
m += 1
else:
self.属性设置输入.append(templist)
self.修正列表名称 = [
trans('力智') + '%',
trans('三攻') + '%',
trans('黄字'),
trans('白字'),
trans('属白'),
trans('暴伤'),
trans('终伤'),
trans('技攻')
]
距离 = 30
templist = []
for i in range(len(self.修正列表名称)):
名称 = QLabel(self.修正列表名称[i], self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
名称.resize(50, 25)
名称.move(距离 + i * 55, 570)
templist.append(QLineEdit(self.main_frame3))
templist[i].setAlignment(Qt.AlignCenter)
templist[i].setStyleSheet(文本框样式白)
templist[i].resize(50, 22)
templist[i].move(距离 + i * 55, 610)
self.属性设置输入.append(templist)
count = 0
self.时装选项 = []
for i in ['头部', '帽子', '脸部', '胸部', '上衣', '腰带', '下装', '鞋']:
名称 = QLabel(trans(i), self.main_frame3)
名称.setAlignment(Qt.AlignCenter)
名称.setStyleSheet(标签样式)
名称.resize(50, 25)
名称.move(520 + count * 55, 570)
self.时装选项.append(MyQComboBox(self.main_frame3))
self.时装选项[count].setStyleSheet(下拉框样式_detail)
self.时装选项[count].addItems(['高级', '节日', '稀有', '神器'])
self.时装选项[count].resize(50, 22)
self.时装选项[count].move(520 + count * 55, 610)
self.时装选项[count].currentIndexChanged.connect(
lambda state, index=count: self.时装选项更新(index))
count += 1
self.时装选项.append(MyQComboBox(self.main_frame3))
self.时装选项[8].setStyleSheet(下拉框样式_detail)
self.时装选项[8].addItems([
trans('高级套装') + '[8]',
trans('节日套装') + '[8]',
trans('稀有套装') + '[8]',
trans('神器套装') + '[8]'
])
self.时装选项[8].resize(100, 22)
self.时装选项[8].move(990, 570)
self.时装选项[8].currentIndexChanged.connect(
lambda state, index=8: self.时装选项更新(index))
self.计算按钮3 = QPushButton(trans('开始计算'), self.main_frame3)
self.计算按钮3.clicked.connect(lambda state: self.计算())
self.计算按钮3.move(990, 610)
self.计算按钮3.resize(110, 30)
self.计算按钮3.setStyleSheet(按钮样式)
def 界面5(self):
# increase_counter(ga_category="carry界面", name="自选装备计算")
# 第五个布局
标签 = QLabel(trans('单件选择'), self.main_frame5)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
标签.resize(240, 25)
标签.move(70, 20)
标签 = QLabel(trans('锁定'), self.main_frame5)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
标签.resize(70, 25)
标签.move(10, 20)
self.图片显示 = []
count = 0
self.自选装备 = []
self.自选装备结果 = []
if 切装模式 == 1:
self.装备切装 = []
self.切装修正属性 = []
self.装备锁定 = []
for i in 部位列表:
锁定选择 = QCheckBox(trans(i), self.main_frame5)
锁定选择.setStyleSheet(复选框样式)
锁定选择.resize(70, 22)
锁定选择.move(10, 50 + 30 * count)
self.装备锁定.append(锁定选择)
combo = MyQComboBox(self.main_frame5)
combo.resize(220, 22)
combo.move(90, 50 + 30 * count)
combo.currentIndexChanged.connect(
lambda state, index=count: self.自选装备更改(index))
if 切装模式 == 1:
temp = QCheckBox(self.main_frame5)
temp.setStyleSheet(复选框样式)
self.装备切装.append(temp)
self.装备切装[count].move(320, 55 + 30 * count)
for j in equ.get_equ_list():
if j.部位 == i:
if i == '武器':
if j.类型 in self.角色属性A.武器选项:
combo.addItem(j.名称)
else:
combo.addItem(j.名称)
self.自选装备.append(combo)
count += 1
if 切装模式 == 1:
num = 0
for i in trans(['力量', '智力', '物攻', '魔攻', '独立', '属强']):
标签 = QLabel(i, self.main_frame5)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
标签.resize(45, 25)
标签.move(30 + 50 * num, 60 + 30 * count)
self.切装修正属性.append(QLineEdit(self.main_frame5))
self.切装修正属性[num].setAlignment(Qt.AlignCenter)
self.切装修正属性[num].setStyleSheet(输入框样式)
self.切装修正属性[num].resize(45, 22)
self.切装修正属性[num].move(30 + 50 * num, 85 + 30 * count)
num += 1
self.计算标识 = 1
横坐标 = 355
标签 = QLabel(trans('批量选择'), self.main_frame5)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
标签.resize(160, 25)
标签.move(横坐标, 20)
套装类型 = ['防具', '首饰', '特殊', '上链左', '镯下右', '环鞋指']
count = 0
self.自选套装 = []
for i in 套装类型:
套装名称 = []
combo = MyQComboBox(self.main_frame5)
for j in equ.get_suit_list():
if j.名称 not in 套装名称 and j.类型 == i:
套装名称.append(j.名称)
combo.addItem(j.名称)
combo.resize(160, 22)
combo.move(横坐标, 50 + 30 * count)
combo.activated.connect(
lambda state, index=count: self.自选套装更改(index))
self.自选套装.append(combo)
count += 1
self.神话部位选项 = MyQComboBox(self.main_frame5)
self.神话部位选项.addItems(['神话部位:无', '神话部位:上衣', '神话部位:手镯', '神话部位:耳环'])
self.神话部位选项.resize(160, 22)
self.神话部位选项.move(横坐标, 50 + 30 * count)
self.神话部位选项.activated.connect(lambda state: self.神话部位更改())
count += 1
self.改造套装 = MyQComboBox(self.main_frame5)
for n in equ.get_equ_list():
try:
self.改造套装.addItem(n.关联套装)
except:
pass
self.改造套装.resize(160, 22)
self.改造套装.move(横坐标, 50 + 30 * count)
self.改造套装.activated.connect(lambda state: self.改造套装更改())
count += 1
self.转甲选项 = QCheckBox(trans('85SS转甲'), self.main_frame5)
self.转甲选项.resize(80, 22)
self.转甲选项.move(横坐标 + 40, 50 + 30 * count)
self.转甲选项.setChecked(True)
self.转甲选项.setStyleSheet(复选框样式)
self.转甲选项.stateChanged.connect(lambda state: self.自选计算(1))
count += 1
# 一键修正按钮添加
一键站街修正名称 = trans(['站街力智', '站街三攻', '站街属强'])
for i in range(len(一键站街修正名称)):
名称 = QLabel(一键站街修正名称[i], self.main_frame5)
名称.setAlignment(Qt.AlignCenter)
名称.move(横坐标 - 5 + i * 57, 50 + 30 * count)
名称.resize(52, 25)
名称.setStyleSheet(标签样式)
self.一键站街设置输入.append(QLineEdit(self.main_frame5))
self.一键站街设置输入[i + 3].setAlignment(Qt.AlignCenter)
self.一键站街设置输入[i + 3].setStyleSheet(输入框样式)
self.一键站街设置输入[i + 3].resize(52, 22)
self.一键站街设置输入[i + 3].move(横坐标 - 5 + i * 57, 80 + 30 * count)
count += 2
一键修正按钮 = QPushButton(trans('一键修正面板细节'), self.main_frame5)
一键修正按钮.clicked.connect(lambda state: self.一键修正(1))
一键修正按钮.move(横坐标 - 5, 50 + 30 * count)
一键修正按钮.resize(165, 25)
一键修正按钮.setStyleSheet(按钮样式)
标签 = QLabel(trans('辟邪玉提升率(理论值仅供参考)'), self.main_frame5)
标签.setAlignment(Qt.AlignCenter)
标签.setStyleSheet(标签样式)
标签.resize(200, 25)
标签.move(525, 20)
self.辟邪玉提升率1 = []
self.辟邪玉提升率2 = []
count = 0
for i in 辟邪玉列表:
if i.名称 != '无':
if i.最大值 != 1:
temp = trans(i.名称) + '+' + str(i.最大值) + '%'
else:
temp = trans(i.名称) + '+' + str(i.最大值)
self.辟邪玉提升率1.append(QLabel(temp, self.main_frame5))
self.辟邪玉提升率1[count].setAlignment(Qt.AlignCenter)
self.辟邪玉提升率1[count].setStyleSheet(标签样式)
self.辟邪玉提升率1[count].resize(180, 25)
self.辟邪玉提升率1[count].move(520, 50 + 30 * count)
self.辟邪玉提升率2.append(QLabel('0.00%', self.main_frame5))
self.辟邪玉提升率2[count].setAlignment(Qt.AlignCenter)
self.辟邪玉提升率2[count].setStyleSheet(标签样式)
self.辟邪玉提升率2[count].resize(60, 25)
self.辟邪玉提升率2[count].move(710, 50 + 30 * count)
count += 1
初始x = 805
初始y = 20
图片显示 = QLabel(self.main_frame5)
图片显示.setPixmap(self.输出背景图片)
图片显示.setAlignment(Qt.AlignTop)
图片显示.resize(268, 546)
图片显示.move(初始x, 初始y + 11)
人物 = QLabel(self.main_frame5)
图片 = QPixmap('./ResourceFiles/' + self.角色属性A.实际名称 + "/人物.png")
人物.setPixmap(图片)
人物.move(初始x + 90 + int(45 - 图片.width() / 2), 初始y + 40)
人物.resize(90, 90)
人物.setAlignment(Qt.AlignTop)
偏移量 = 187
x坐标 = [
32, 0, 0, 32, 0, 偏移量, 偏移量 + 32, 偏移量 + 32, 偏移量, 偏移量, 偏移量 + 32, 32
]
y坐标 = [0, 0, 32, 32, 64, 0, 0, 32, 64, 32, 64, 64]
for i in range(12):
self.图片显示.append(QLabel(self.main_frame5))
self.图片显示[i].setMovie(
equ.get_img_by_name(self.自选装备[i].currentData()))
self.图片显示[i].resize(26, 26)
self.图片显示[i].move(初始x + 10 + x坐标[i], 初始y + 31 + y坐标[i])
self.图片显示[i].setAlignment(Qt.AlignCenter)
self.面板显示 = []
for i in range(18):
self.面板显示.append(QLabel(self.main_frame5))
self.面板布局设置(self.面板显示, 1)
self.词条显示 = []
for i in range(12):
self.词条显示.append(QLabel(self.main_frame5))
j = 312 + 初始y
for i in self.词条显示:
i.setStyleSheet("QLabel{font-size:12px;color:rgb(104,213,237)}")
i.move(5 + 初始x, j)
i.resize(180, 17)
i.setAlignment(Qt.AlignLeft)
j += 17
self.总伤害 = QLabel(self.main_frame5)
self.总伤害.setStyleSheet("QLabel{color:rgb(255,255,255);font-size:25px}")
self.总伤害.resize(250, 36)
self.总伤害.move(10 + 初始x, 520 + 初始y)
self.总伤害.setAlignment(Qt.AlignCenter)
self.套装名称显示 = []
for i in range(13):
self.套装名称显示.append(QLabel(self.main_frame5))
self.套装名称显示[i].move(114 + 初始x, 128 + 180 + 17 * i + 初始y)
self.套装名称显示[i].resize(150, 18)
self.套装名称显示[i].setAlignment(Qt.AlignCenter)
self.打造显示 = []
for i in range(13):
self.打造显示.append(QLabel(self.main_frame5))
self.打造显示[i].move(-100, -100)
自选计算按钮 = QPushButton(trans('查看详情'), self.main_frame5)
自选计算按钮.clicked.connect(lambda state: self.自选计算())
自选计算按钮.move(995, 610)
自选计算按钮.resize(80, 28)
自选计算按钮.setStyleSheet(按钮样式)
self.基准值 = []
设置基准值 = QPushButton(trans('设为基准'), self.main_frame5)
设置基准值.clicked.connect(lambda state: self.基准值设置())
设置基准值.move(900, 610)
设置基准值.resize(80, 28)
设置基准值.setStyleSheet(按钮样式)
清空基准值 = QPushButton(trans('清空基准'), self.main_frame5)
清空基准值.clicked.connect(lambda state: self.基准值设置(1))
清空基准值.move(805, 610)
清空基准值.resize(80, 28)
清空基准值.setStyleSheet(按钮样式)
self.对比格式 = QCheckBox(trans('数值对比'), self.main_frame5)
self.对比格式.stateChanged.connect(lambda state: self.自选计算(1))
self.对比格式.move(615, 612)
self.对比格式.resize(70, 24)
self.对比格式.setStyleSheet(复选框样式)
if 多语言开关 == 0:
名望设置 = QPushButton(trans('名望细节'), self.main_frame5)
名望设置.clicked.connect(lambda _: self.名望设置())
名望设置.move(710, 610)
名望设置.resize(80, 28)
名望设置.setStyleSheet(按钮样式)
def 名望设置(self):
increase_counter(ga_category="carry详细功能使用", name="名望")
def createClient():
store.set("/fame/temp/property", self)
# 设置图标和背景 临时做法
store.const("/app/window/icon", self.icon)
store.const("/app/window/background_image", self.主背景图片)
store.watch("/fame/event/changed", lambda _, : self.自选计算(1))
client = 名望窗口()
client.初始化()
return client
DefaultDialogRegister.showDialog("base_fame({})".format(type(self)),
createClient, self)
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 界面6(self):
# increase_counter(ga_category="carry界面", name="辟邪玉/希洛克/黑鸦/奥兹玛")
横坐标 = 10
纵坐标 = 0
标签 = QLabel(trans('辟邪玉计算 (鼠标悬停查看算法)'), self.main_frame6)
标签.setStyleSheet(标签样式 + 'QLabel{font-size:13px;}')
标签.resize(290, 20)
标签.move(横坐标 + 10, 纵坐标)
标签.setAlignment(Qt.AlignCenter)
temp = '<font face="宋体">{}<br><br>'.format(
trans('假定基础伤害为100,词条1=50%,词条2=50%:'))
temp += trans('5%黄字增幅,佩戴前:200,佩戴后:205<br>')
temp += trans('暴伤终伤白字属白力智三攻同上,黄字向下取整<br>')
temp += trans('技攻辟邪玉加成等级技攻(歧路腰类)<br>不加成具体技能技攻(歧路鞋类)<br><br>')
temp += trans(
'3%技攻增幅,佩戴前:100*1.5*1.5=225<br>佩戴后:100*1.515*1.515=229.5225<br><br>'
)
# temp += '附加、最终、百分力智增幅:宠物相关词条不享受加成<br>'
temp += trans('属强增幅:唤醒(13)婚房(8)药剂和技能属强不享受加成<br>')
temp += trans('进图触发属强单独计算向下取整<br><br>')
temp += '<font color="#B99460">{}</font></font>'.format(
trans(
'属白增幅分对应属性,计算器未作区分<br>双属性附加(星之海)需手动计算并在第三页修正<br><br>计算方式仅供参考,请以实际游戏为准!'
))
标签.setToolTip(temp)
self.辟邪玉选择 = []
self.辟邪玉数值 = []
for i in range(4):
x = MyQComboBox(self.main_frame6)
for j in 辟邪玉列表:
x.addItem(j.名称)
x.resize(200, 20)
x.move(横坐标, 纵坐标 + (i + 1) * 25)
x.currentIndexChanged.connect(
lambda state, index=i: self.辟邪玉数值选项更新(index))
self.辟邪玉选择.append(x)
y = MyQComboBox(self.main_frame6)
y.resize(80, 20)
y.move(横坐标 + 220, 纵坐标 + (i + 1) * 25)
self.辟邪玉数值.append(y)
标签 = QLabel(trans('黑鸦遴选词条'), self.main_frame6)
标签.setStyleSheet(标签样式 + 'QLabel{font-size:13px;}')
标签.resize(300, 20)
标签.move(横坐标 + 10, 纵坐标 + 330 - 20)
标签.setAlignment(Qt.AlignCenter)
名称 = trans(['武  器', '戒  指', '辅助装备', '下  装'])
self.黑鸦词条 = []
for i in range(4):
x = QLabel(名称[i], self.main_frame6)
x.setStyleSheet(标签样式 +
'QLabel{font-size:13px;};text-align: justify;')
# x.setStyleSheet('text-align: justify')
x.resize(55, 20)
x.move(横坐标, 纵坐标 - 145 + (i + 20) * 25 - 20)
tem = []
tem.append(MyQComboBox(self.main_frame6))
tem[-1].setStyleSheet(下拉框样式)
if i == 0:
tem[0].addItems(['无', '计算最高', '自选数值', '自选数值-觉醒'])
tem[0].resize(91, 20)
tem[0].move(横坐标 + 60, 纵坐标 - 20 + 25 * (i + 15) - 20)
tem[0].currentIndexChanged.connect(
lambda state, index=i: self.黑鸦词条更新(index))
else:
tem[0].addItems(['无', '计算最高', '自选数值'])
tem[0].resize(91, 20)
tem[0].move(横坐标 + 60, 纵坐标 - 20 + 25 * (i + 15) - 20)
tem[0].currentIndexChanged.connect(
lambda state, index=i: self.黑鸦词条更新(index))
tem.append(MyQComboBox(self.main_frame6))
tem[-1].setStyleSheet(下拉框样式)
tem[1].resize(70, 20)
tem[1].move(横坐标 + 161, 纵坐标 - 20 + 25 * (i + 15) - 20)
# if i > 0:
for item in 词条属性列表:
tem[1].addItem(item.描述)
# else:
# for item in 黑鸦武器属性列表:
# tem[1].addItem(item.描述)
# tem[1].currentIndexChanged.connect(lambda state:self.黑鸦武器词条更新())
# tem[1].currentIndexChanged.connect(lambda state: self.希洛克武器词条更新())
tem.append(MyQComboBox(self.main_frame6))
tem[-1].setStyleSheet(下拉框样式)
tem[2].resize(60, 20)
tem[2].move(横坐标 + 241, 纵坐标 - 20 + 25 * (i + 15) - 20)
if i > 0:
for item in range(1, 5):
tem[2].addItem("+" + str(item * 2) + '%')
else:
for item in range(1, 5):
tem[2].addItem("+" + str(item * 4) + '%')
self.黑鸦词条.append(tem)
self.黑鸦词条更新(i)
# tem[1].currentIndexChanged.connect(lambda state: self.希洛克武器词条更新())
self.武器择优模式 = MyQComboBox(self.main_frame6)
self.武器择优模式.addItems(['武器默认择优词条', '武器默认择优觉醒'])
self.武器择优模式.resize(151, 20)
self.武器择优模式.move(横坐标, 纵坐标 - 20 + 25 * (4 + 15) - 20)
# self.武器择优模式.setStyleSheet(复选框样式)
# self.武器择优模式.setChecked(False)
self.守门人全属强 = QCheckBox(trans(' 守门人全属强\n 自动补正'), self.main_frame6)
self.守门人全属强.resize(120, 30)
self.守门人全属强.move(横坐标 + 181, 纵坐标 + 291 - 15)
self.守门人全属强.setStyleSheet(复选框样式)
self.守门人全属强.setChecked(False)
self.守门人全属强.setEnabled(False)
self.守门人全属强.setStyleSheet(复选框样式)
self.守门人全属强.setToolTip(
trans("<font size='3' face='宋体'>计算时自动替换细节页的附魔勋章为全属强方案<br>") +
trans('自带单属强职业不可使用<br>') + trans('守门人属强:全属强+30*3<br>') + trans(
'武器:全属强+13(若原附魔为龙珠时不替换)<br>首饰:全属强+28*3(25*3站街修正属强自行-9)<br>') +
trans('辅助装备:全属强+12<br>魔法石:全属强+30<br>勋章:全属强+7<br>宠物附魔:三攻+60</font>')
)
self.智慧产物升级 = QCheckBox(trans('智慧产物升级'), self.main_frame6)
self.智慧产物升级.resize(140, 20)
self.智慧产物升级.move(横坐标 + 161, 纵坐标 - 19 + 25 * (4 + 15) - 20)
self.智慧产物升级.setStyleSheet(复选框样式)
self.智慧产物升级.setChecked(False)
横坐标 = 横坐标 + 320
纵坐标 = 0
标签 = QLabel(trans('希洛克相关'), self.main_frame6)
标签.setStyleSheet(标签样式 + 'QLabel{font-size:13px;}')
标签.resize(300, 20)
标签.move(横坐标 - 310, 纵坐标 + 135 - 10)
标签.setAlignment(Qt.AlignCenter)
名称 = trans(['奈克斯', '暗杀者', '卢克西', '守门人', '洛多斯'])
self.希洛克套装按钮 = []
self.希洛克单件按钮 = []
self.希洛克遮罩透明度 = []
self.希洛克装备图标 = []
self.希洛克选择状态 = [0] * 15
count = 0
for i in 名称:
self.希洛克套装按钮.append(QPushButton(i, self.main_frame6))
self.希洛克套装按钮[count].setStyleSheet(按钮样式)
self.希洛克套装按钮[count].resize(50, 22)
self.希洛克套装按钮[count].move(横坐标 - 320,
纵坐标 + 160 + 3 + count * 32 - 10)
self.希洛克套装按钮[count].clicked.connect(
lambda state, index=(count + 1) * 100: self.希洛克选择(index))
for j in range(3):
序号 = count * 3 + j
图片 = QLabel(self.main_frame6)
图片.setPixmap(
QPixmap('./ResourceFiles/img/希洛克/' + str(序号) + '.png'))
图片.resize(28, 28)
图片.move(横坐标 - 260 + j * 30, 纵坐标 + 160 + count * 32 - 10)
self.希洛克装备图标.append(图片)
self.希洛克遮罩透明度.append(QGraphicsOpacityEffect())
self.希洛克遮罩透明度[序号].setOpacity(0.5)
self.希洛克单件按钮.append(QPushButton(self.main_frame6))
self.希洛克单件按钮[序号].setStyleSheet(
"background-color: rgb(0, 0, 0)")
self.希洛克单件按钮[序号].resize(28, 28)
self.希洛克单件按钮[序号].move(横坐标 - 260 + j * 30,
纵坐标 + 160 + count * 32 - 10)
self.希洛克单件按钮[序号].setGraphicsEffect(self.希洛克遮罩透明度[序号])
self.希洛克单件按钮[序号].clicked.connect(
lambda state, index=序号: self.希洛克选择(index))
count += 1
self.守门人属强 = MyQComboBox(self.main_frame6)
for i in range(7):
self.守门人属强.addItem(trans('{守门人属强}:$value', value=15 + i * 5))
self.守门人属强.resize(120, 20)
self.守门人属强.setCurrentIndex(3)
self.守门人属强.move(横坐标 - 139, 纵坐标 + 93 + 3 + count * 32 - 10)
self.守门人属强.activated.connect(
lambda state, index=序号: self.守门人属强选项(index))
self.希洛克武器词条 = []
count += 1
self.希洛克武器词条.append(MyQComboBox(self.main_frame6))
self.希洛克武器词条[0].addItems(['武器词条:无', '自适应最高值', '自选词条数值'])
self.希洛克武器词条[0].resize(120, 20)
self.希洛克武器词条[0].move(横坐标 - 139, 纵坐标 - 32 + count * 32 - 10)
self.希洛克武器词条[0].currentIndexChanged.connect(
lambda state: self.希洛克武器词条更新())
for i in range(1, 3):
count += 1
self.希洛克武器词条.append(MyQComboBox(self.main_frame6))
self.希洛克武器词条[-1].setStyleSheet(下拉框样式)
for k in 词条属性列表:
self.希洛克武器词条[i].addItem(k.描述)
self.希洛克武器词条[i].resize(72, 20)
self.希洛克武器词条[i].move(横坐标 - 139, 纵坐标 - 32 + count * 32 - 10)
count -= 2
for i in range(3, 5):
count += 1
self.希洛克武器词条.append(MyQComboBox(self.main_frame6))
self.希洛克武器词条[-1].setStyleSheet(下拉框样式)
for k in [3, 4, 5]:
self.希洛克武器词条[i].addItem(str(k * (5 - i)) + '%')
self.希洛克武器词条[i].resize(43, 20)
self.希洛克武器词条[i].move(横坐标 - 62, 纵坐标 - 32 + count * 32 - 10)
for i in range(1, 5):
self.希洛克武器词条[-1].setStyleSheet(下拉框样式)
self.希洛克武器词条[i].setEnabled(False)
# self.希洛克武器词条[i].setStyleSheet(下拉框样式)
纵向偏移 = 335
标签 = QLabel(trans('奥兹玛相关'), self.main_frame6)
标签.setStyleSheet(标签样式 + 'QLabel{font-size:13px;}')
标签.resize(300, 20)
标签.move(横坐标 - 310 - 5, 纵坐标 + 135 - 10 + 纵向偏移)
标签.setAlignment(Qt.AlignCenter)
名称 = trans(['阿斯特罗斯', '贝利亚斯', '雷德梅恩', '罗什巴赫', '泰玛特'])
self.奥兹玛套装按钮 = []
self.奥兹玛单件按钮 = []
self.奥兹玛遮罩透明度 = []
self.奥兹玛装备图标 = []
self.奥兹玛选择状态 = [0] * 25
count = 0
for i in 名称:
self.奥兹玛套装按钮.append(QPushButton(i, self.main_frame6))
self.奥兹玛套装按钮[count].setStyleSheet(按钮样式)
self.奥兹玛套装按钮[count].resize(75, 22)
self.奥兹玛套装按钮[count].move(横坐标 - 320 - 5,
纵坐标 + 160 + 3 + count * 32 - 10 + 纵向偏移)
self.奥兹玛套装按钮[count].clicked.connect(
lambda state, index=(count + 1) * 100: self.奥兹玛选择(index))
for j in range(5):
序号 = count * 5 + j
图片 = QLabel(self.main_frame6)
图片.setPixmap(
QPixmap('./ResourceFiles/img/奥兹玛/' + str(序号) + '.png'))
图片.resize(28, 28)
图片.move(横坐标 - 260 + j * 30 + 20 - 5,
纵坐标 + 160 + count * 32 - 10 + 纵向偏移)
self.奥兹玛装备图标.append(图片)
self.奥兹玛遮罩透明度.append(QGraphicsOpacityEffect())
self.奥兹玛遮罩透明度[序号].setOpacity(0.5)
self.奥兹玛单件按钮.append(QPushButton(self.main_frame6))
self.奥兹玛单件按钮[序号].setStyleSheet(
"background-color: rgb(0, 0, 0)")
self.奥兹玛单件按钮[序号].resize(28, 28)
self.奥兹玛单件按钮[序号].move(横坐标 - 260 + j * 30 + 20 - 5,
纵坐标 + 160 + count * 32 - 10 + 纵向偏移)
self.奥兹玛单件按钮[序号].setGraphicsEffect(self.奥兹玛遮罩透明度[序号])
self.奥兹玛单件按钮[序号].clicked.connect(
lambda state, index=序号: self.奥兹玛选择(index))
count += 1
self.阿斯特罗斯选项 = []
for i in range(5):
self.阿斯特罗斯选项.append(MyQComboBox(self.main_frame6))
self.阿斯特罗斯选项[i].addItem('70.75.80')
self.阿斯特罗斯选项[i].addItem('40.45.60')
self.阿斯特罗斯选项[i].addItem('20.25.35')
self.阿斯特罗斯选项[i].resize(60 + 15, 20)
self.阿斯特罗斯选项[i].setCurrentIndex(0)
self.阿斯特罗斯选项[i].move(横坐标 - 139 + 60 - 15,
纵坐标 + 160 + 3 - 10 + 纵向偏移 + i * 32)
self.阿斯特罗斯选项显示(0)
self.计算按钮3 = QPushButton(trans('开始计算'), self.main_frame6)
self.计算按钮3.clicked.connect(lambda state: self.计算())
self.计算按钮3.move(990, self.height() - 70)
self.计算按钮3.resize(110, 30)
self.计算按钮3.setStyleSheet(按钮样式)
# endregion
# region 界面函数
# 第二页
def 输出时间变化(self):
输出时间变化提示 = QMessageBox(QMessageBox.Question, "提示",
"切换输出时间请检查技能次数是否为/CD,否则计算结果不发生变化")
输出时间变化提示.setWindowIcon(self.icon)
输出时间变化提示.exec_()
pass
def 技能列表显示排序(self, skill):
temp = deepcopy(skill)
temp.sort(key=operator.attrgetter('所在等级'))
return temp
def 次数输入填写(self, x):
if self.次数输入[x].currentIndex() == 12:
self.次数输入[x].setEditable(True)
self.次数输入[x].clearEditText()
self.次数输入[x].setStyleSheet(下拉框样式)
elif self.次数输入[x].currentIndex() == 13:
temp = self.次数输入[x].currentText()
self.次数输入[x].removeItem(13)
self.次数输入[x].setCurrentIndex(12)
self.次数输入[x].setEditable(True)
self.次数输入[x].clearEditText()
self.次数输入[x].setStyleSheet(下拉框样式)
self.次数输入[x].setCurrentText(temp)
else:
self.次数输入[x].setEditable(False)
def 宠物次数填写(self, x):
if self.宠物次数[x].currentIndex() == 11:
self.宠物次数[x].setEditable(True)
self.宠物次数[x].clearEditText()
self.宠物次数[x].setStyleSheet(下拉框样式)
elif self.宠物次数[x].currentIndex() == 12:
temp = self.宠物次数[x].currentText()
self.宠物次数[x].removeItem(12)
self.宠物次数[x].setCurrentIndex(11)
self.宠物次数[x].setEditable(True)
self.宠物次数[x].clearEditText()
self.宠物次数[x].setStyleSheet(下拉框样式)
self.宠物次数[x].setCurrentText(temp)
else:
self.宠物次数[x].setEditable(False)
def 护石描述更新(self, x):
try:
self.护石栏[x].setToolTip('<font face="宋体">' + self.初始属性.技能栏[
self.初始属性.技能序号[self.护石选项[self.护石栏[x].currentIndex()]]].护石描述(
self.护石类型选项[x].currentIndex()) + '</font></font>')
except:
self.护石栏[x].setToolTip('<font face="宋体">暂缺</font>')
def 护石类型选项更新(self, x):
self.护石类型选项[x].clear()
if self.护石栏[x].currentData() != '无':
try:
self.护石类型选项[x].addItems(
trans(self.初始属性.技能栏[self.初始属性.技能序号[self.护石选项[
self.护石栏[x].currentIndex()]]].护石选项))
self.护石类型选项[x].setCurrentIndex(
len(self.初始属性.技能栏[self.初始属性.技能序号[self.护石选项[
self.护石栏[x].currentIndex()]]].护石选项) - 1)
except:
self.护石类型选项[x].addItem('魔界')
self.护石类型选项[x].addItem('圣痕')
self.护石栏[x].setCurrentIndex(0)
else:
self.护石类型选项[x].addItem('魔界')
self.护石类型选项[x].addItem('圣痕')
def 符文技能更改(self, i):
if i == 0:
for i in range(1, 9):
self.符文[i].setCurrentIndex(self.符文[0].currentIndex())
else:
self.符文[i + 3].setCurrentIndex(self.符文[i].currentIndex())
self.符文[i + 6].setCurrentIndex(self.符文[i].currentIndex())
def 符文效果更改(self, i):
self.符文效果[i + 3].setCurrentIndex(self.符文效果[i].currentIndex())
self.符文效果[i + 6].setCurrentIndex(self.符文效果[i].currentIndex())
def 等级调整标注(self, index):
警告 = "技能等级调整指调整<font color='#FF0000'>学习等级</font>(非实际等级)<br>一般用于修正天空下装技能,一二觉时装切装<br>其余等级加成会自动计算,请勿手动调整"
if index < 100:
try:
x = int(self.等级调整[index].currentText())
except:
x = 1
if x > 0:
self.等级调整[index].setStyleSheet(下拉框样式_warn)
if x > 1:
QMessageBox.information(self, "警告", 警告)
if x < 0:
self.等级调整[index].setStyleSheet(下拉框样式_down)
if x == 0:
self.等级调整[index].setStyleSheet(下拉框样式)
elif index == 100:
try:
x = int(self.远古记忆.currentText())
except:
x = 11
if x == 11:
self.远古记忆.setStyleSheet(下拉框样式_warn)
if x < 10:
self.远古记忆.setStyleSheet(下拉框样式_down)
if x == 10:
self.远古记忆.setStyleSheet(下拉框样式)
elif index == 200:
try:
x = int(self.刀魂之卡赞.currentText())
except:
x = 11
if x == 11:
self.刀魂之卡赞.setStyleSheet(下拉框样式_warn)
if x < 10:
self.刀魂之卡赞.setStyleSheet(下拉框样式_down)
if x == 10:
self.刀魂之卡赞.setStyleSheet(下拉框样式)
def 加载护石(self, 属性):
for k in range(3):
if self.护石栏[k].currentData() != '无':
try:
属性.技能栏[self.角色属性A.技能序号[self.护石选项[
self.护石栏[k].currentIndex()]]].装备护石()
except:
属性.技能栏[self.角色属性A.技能序号[self.护石选项[
self.护石栏[k].currentIndex()]]].装备护石(
self.护石类型选项[k].currentIndex())
属性.护石第一栏 = self.护石选项[self.护石栏[0].currentIndex()]
属性.护石第二栏 = self.护石选项[self.护石栏[1].currentIndex()]
属性.护石第三栏 = self.护石选项[self.护石栏[2].currentIndex()]
for i in range(9):
if self.符文[i].currentData() != '无' and self.符文效果[i].currentData(
) != '无':
for j in self.符文效果[i].currentData().split(','):
if trans('攻击') in j:
属性.技能栏[self.角色属性A.技能序号[self.符文选项[
self.符文[i].currentIndex()]]].倍率 *= 1 + int(
j.replace(trans('攻击'), '').replace('%',
'')) / 100
if 'CD' in j:
属性.技能栏[self.角色属性A.技能序号[self.符文选项[
self.符文[i].currentIndex()]]].CD *= 1 + int(
j.replace('CD', '').replace('%', '')) / 100
# 第三页
def 细节增伤选项颜色更新(self, index):
if index.currentIndex() <= 0:
index.setStyleSheet(下拉框样式_warn)
else:
index.setStyleSheet(下拉框样式_detail)
pass
# 第五页
def 阿斯特罗斯选项显示(self, n):
for i in range(5):
if i < n:
self.阿斯特罗斯选项[i].setEnabled(True)
else:
self.阿斯特罗斯选项[i].setEnabled(False)
def 守门人属强选项(self, x):
if self.守门人属强.currentIndex() != 3:
self.守门人全属强.setEnabled(False)
self.守门人全属强.setChecked(False)
self.守门人全属强.setStyleSheet(复选框样式)
else:
number = sum(self.希洛克选择状态[9:11])
if self.角色属性A.职业 not in ('冰结师', '鬼泣', '死灵术士', '气功师', '忍者', '暗枪士'):
if number == 3:
self.守门人全属强.setEnabled(True)
self.守门人全属强.setChecked(True)
self.守门人全属强.setStyleSheet(复选框样式)
def 希洛克武器词条更新(self):
if self.希洛克武器词条[0].currentIndex() != 2:
for i in range(1, 5):
self.希洛克武器词条[i].setEnabled(False)
else:
for i in range(1, 5):
self.希洛克武器词条[i].setEnabled(True)
def 黑鸦词条更新(self, index):
if self.黑鸦词条[index][0].currentIndex() < 2:
for i in range(1, 3):
self.黑鸦词条[index][i].setEnabled(False)
else:
for i in range(1, 3):
self.黑鸦词条[index][i].setEnabled(True)
def 时装选项更新(self, index):
if index == 8:
count = 0
for i in self.时装选项:
if count != 8:
i.setCurrentIndex(self.时装选项[8].currentIndex())
count += 1
return
else:
力量, 智力, 属强 = 0, 0, 0
套装字典 = {'高级': 0, '节日': 0, '稀有': 0, '神器': 0}
for i in range(8):
套装字典[self.时装选项[i].currentData()] = 套装字典.get(
self.时装选项[i].currentData(), 0) + 1
# 套装属性
神器 = 套装字典['神器']
稀有 = 套装字典['稀有'] + 神器
if 套装字典['高级'] >= 3:
力量 += 10
智力 += 10
if 稀有 >= 3 and 神器 < 3:
力量 += 40
智力 += 40
if 套装字典['神器'] >= 3:
力量 += 50
智力 += 50
if 套装字典['高级'] >= 8:
力量 += 10
智力 += 10
if 套装字典['节日'] >= 8:
力量 += 25
智力 += 25
if 稀有 >= 8 and 神器 < 8:
力量 += 40
智力 += 40
属强 += 6
if 套装字典['神器'] >= 8:
力量 += 50
智力 += 50
属强 += 10
数据 = [45, 45, 55, 65]
智力 += 数据[self.时装选项[0].currentIndex()] # 头部
智力 += 数据[self.时装选项[1].currentIndex()] # 帽子
力量 += 数据[self.时装选项[7].currentIndex()] # 鞋子
数据 = [45, 45, 55, 65]
力量 += 数据[self.时装选项[5].currentIndex()] # 腰带
数据 = [0, 6, 0, 0]
属强 += 数据[self.时装选项[4].currentIndex()] # 上衣
数据 = [0, 20, 0, 0]
智力 += 数据[self.时装选项[6].currentIndex()] # 下装
力量 += 数据[self.时装选项[6].currentIndex()] # 下装
self.属性设置输入[6][16].setText(str(max(力量, 智力)))
self.属性设置输入[8][16].setText(str(属强 if 属强 != 0 else ''))
# 通用
def 下拉框禁用(self, a, b, c=下拉框样式):
if a.isChecked():
b.setStyleSheet(c)
b.setEnabled(False)
else:
b.setStyleSheet(c)
b.setEnabled(True)
# endregion
# region 计算相关
def 奥兹玛选择(self, index, x=0):
super().奥兹玛选择(index, x)
self.阿斯特罗斯选项显示(sum(self.奥兹玛选择状态[0:5]))
def 希洛克属性计算(self, 属性, x=0):
# 0表示计算属性 1表示计算描述
return 希洛克.希洛克属性_输出(属性, self.希洛克选择状态, self.守门人属强.currentIndex(), x)
def 奥兹玛属性计算(self, 属性, x=0):
# 0表示计算属性 1表示计算描述
阿斯特罗斯选项 = []
for i in range(sum(self.奥兹玛选择状态[:5])):
阿斯特罗斯选项.append(self.阿斯特罗斯选项[i].currentIndex())
return 奥兹玛.奥兹玛属性_输出(属性, self.奥兹玛选择状态, 阿斯特罗斯选项, x)
def 自选计算(self, x=0):
if x == 0:
self.保存配置(self.存档位置)
self.关闭排行窗口()
self.排行数据.clear()
self.角色属性A = deepcopy(self.初始属性)
if x == 0:
self.输入属性(self.角色属性A)
else:
self.输入属性(self.角色属性A, 1)
if self.是否计算 != 1:
self.click_window(1)
return
装备 = []
for index in range(len(self.自选装备)):
装备.append(self.自选装备[index].currentData())
temp = deepcopy(self.初始属性)
temp.穿戴装备计算套装(装备)
套装 = temp.套装栏
if x != 0:
伤害列表 = []
for i in range(len(辟邪玉列表)):
temp = deepcopy(self.初始属性)
self.输入属性(temp, 100 + i)
temp.穿戴装备(装备, 套装)
伤害列表.append(temp.伤害计算(0))
提升率 = []
for i in range(1, len(伤害列表)):
if 伤害列表[0] != 0:
提升率.append(伤害列表[i] / 伤害列表[0] - 1)
else:
提升率.append(0)
提升率排序 = copy(提升率)
提升率排序.sort(reverse=True)
for i in range(len(提升率)):
temp = str('%.2f' % (提升率[i] * 100)) + '%'
self.辟邪玉提升率2[i].setText(temp)
x = 提升率排序.index(提升率[i]) / len(提升率) * 10 - 2
y = 1 / (1 + math.exp(-x))
if SkinVersion == 'None':
颜色 = (0, 0, 0)
else:
颜色 = (int(255 - 80 * y), int(245 - 100 * y),
int(0 + 150 * y))
self.辟邪玉提升率1[i].setStyleSheet(
'QLabel{font-size:12px;color:rgb' + str(颜色) + '}')
self.辟邪玉提升率2[i].setStyleSheet(
'QLabel{font-size:12px;color:rgb' + str(颜色) + '}')
self.角色属性A = deepcopy(self.初始属性)
self.输入属性(self.角色属性A)
C = self.站街计算(装备, 套装)
B = deepcopy(self.角色属性A)
B.穿戴装备(装备, 套装)
B.其它属性计算()
总伤害数值 = B.伤害计算(0)
if len(self.基准值) != 0:
self.总伤害.setText(self.百分比输出(总伤害数值, self.基准值[0]))
else:
self.总伤害.setText(self.格式化输出(str(int(总伤害数值))))
tempstr = self.装备描述计算(B)
图片列表 = self.获取装备图片(装备)
for i in range(12):
self.图片显示[i].setToolTip(tempstr[i])
self.图片显示[i].setMovie(图片列表[i])
self.面板显示设置(self.面板显示, B, C)
self.打造显示设置(self.打造显示, B, 1)
词条数值 = self.词条显示计算(B)
词条解释 = self.词条显示计算(B, 1)
for i in range(0, len(词条数值)):
if i == 5 and B.技能攻击力累加 > 2:
self.词条显示[i].setStyleSheet(
"QLabel{font-size:12px;color:red}")
self.词条显示[i].setText(词条数值[i])
self.词条显示[i].setToolTip('<font color="#B99460">' + 词条解释[i] +
'</font>')
for i in self.套装名称显示:
i.setText('')
self.套装显示设置(self.套装名称显示, B)
# 更新人物名望(角色属性=B, 人物设置=self)
if x == 0:
self.排行数据.append(装备 + [0] + 套装 + ['无'])
self.输出界面(0)
def 站街计算(self, 装备名称, 套装名称):
C = deepcopy(self.角色属性A)
C.穿戴装备(装备名称, 套装名称)
if 调试开关 == 0:
for i in C.装备栏:
equ.get_equ_by_name(i).城镇属性(C)
for i in C.套装栏:
equ.get_suit_by_name(i).城镇属性(C)
C.装备基础()
C.被动倍率计算()
return C
# endregion
# region 读档存档
def 载入旧版json(self, path='set', page=[0, 1, 2, 3, 4, 5]):
filepath = './ResourceFiles/{}/{}'.format(self.角色属性A.实际名称, path)
if 0 in page:
# 第一页(装备/选择/打造)
try:
filename = 'page_1.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/title", set_data['称号'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/pet", set_data['称号'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/compute_mode", set_data['计算模式'])
except Exception as error:
logger.error(error)
try:
store.set('/{type}/data/ditto_checked', set_data["百变怪"])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/pet_equip_adaptive",
set_data['宠物装备择优'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/aura_adaptive", set_data['光环词条择优'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/myth_top_checked",
set_data['神话排名勾选'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/damage_unit", set_data['亿为单位显示'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/thread_count", set_data['线程数量'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/attack_elemental",
set_data['攻击属性'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/remodel_limit", set_data['改造数量'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/equip_checked", set_data['装备勾选'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/equip_forges", set_data['装备打造'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/equip_conditions",
set_data['装备条件'])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 1 in page:
# 第二页(技能/符文/药剂)
try:
filename = 'page_2.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/buff_input", set_data['BUFF输入'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/time_input", set_data['时间输入'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/awakening_binding",
set_data['觉醒选择'])
except Exception as error:
logger.error(error)
try:
if '远古记忆' in set_data:
store.set("/{type}/data/ancient_memory",
set_data['远古记忆'])
except Exception as error:
logger.error(error)
try:
if '刀魂之卡赞' in set_data:
store.set("/{type}/data/kazan", set_data['刀魂之卡赞'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/talismans", set_data['护石栏'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/talisman_types", set_data['护石类型'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/runes_skills", set_data['符文技能'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/runes_effects", set_data['符文效果'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/consumables", set_data['药剂勾选'])
except Exception as error:
logger.error(error)
try:
skills = {}
技能选项 = set_data['技能选项']
for key in 技能选项.keys():
技能 = 技能选项[key]
skill = {'level': 技能['等级'], 'count': 技能['次数']}
if 'TP' in 技能:
skill['tp'] = 技能['TP']
if '宠物' in 技能:
skill['pet'] = 技能['宠物']
if '切装' in 技能:
skill['switch'] = 技能['切装']
skills[key] = skill
store.set("/{type}/data/skill", skills)
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 2 in page:
# 第三页(基础/细节/修正)
try:
filename = 'page_3.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/avatar", set_data['时装选项'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/detail_values", set_data['细节数值'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/detail_options", set_data['细节选项'])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 3 in page:
# 第四页(神话属性修正)
try:
filename = 'page_4.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/myth_properties",
set_data['神话属性修正'])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 4 in page:
# 第五页(辟邪玉/希洛克/黑鸦/奥兹玛)
try:
filename = 'page_5.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/remodel_upgrade",
set_data['智慧产物升级'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/weapon_adaptive_mode",
set_data['武器择优模式'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/nameless_elemental_value",
set_data['守门人属强'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/jude_effects", set_data['辟邪玉效果'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/jude_values", set_data['辟邪玉数值'])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/astaroth_options",
set_data['阿斯特罗斯选项'])
except Exception as error:
logger.error(error)
try:
store.set('/{type}/data/black_purgatory', set_data['黑鸦选择'])
except Exception as error:
logger.error(error)
try:
store.set('/{type}/data/siroco', set_data['希洛克选择'])
except Exception as error:
logger.error(error)
try:
store.set('/{type}/data/ozma', set_data['奥兹玛选择'])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 5 in page:
# 第六页(自选装备计算)
try:
filename = 'page_6.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
try:
store.set("/{type}/data/self_select/equips",
[set_data['自选装备']])
store.set("/{type}/data/self_select/column_index", 0)
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/self_select/locked",
set_data['装备锁定'])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
# 职业存档
try:
filename = 'char.json'
set_data = {}
with open(os.path.join(filepath, filename),
encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
store.set("/{type}/data/character_sets", set_data)
except Exception as error:
logger.error(error)
pass
def 载入json(self, path='set', page=[0, 1, 2, 3, 4, 5]):
filepath = './ResourceFiles/{}/{}'.format(self.角色属性A.实际名称, path)
filename = os.path.join(filepath, "store.json")
if os.path.exists(filename):
try:
set_data = {}
with open(filename, encoding='utf-8') as fp:
set_data = json.load(fp)
fp.close()
store.imports(set_data)
except Exception as error:
logger.error(error)
else:
self.载入旧版json(path, page)
if 0 in page:
# 第一页(装备/选择/打造)
try:
try:
self.称号.setCurrentIndex(store.get("/{type}/data/title", 0))
except Exception as error:
logger.error(error)
try:
self.宠物.setCurrentIndex(store.get("/{type}/data/pet", 0))
except Exception as error:
logger.error(error)
try:
self.计算模式选择.setCurrentIndex(
store.get("/{type}/data/compute_mode", 0))
except Exception as error:
logger.error(error)
try:
self.百变怪选项.setChecked(
store.get("/{type}/data/ditto_checked", False))
except Exception as error:
logger.error(error)
try:
self.红色宠物装备.setChecked(
store.get("/{type}/data/pet_equip_adaptive", True))
except Exception as error:
logger.error(error)
try:
self.光环自适应.setChecked(
store.get("/{type}/data/aura_adaptive", True))
except Exception as error:
logger.error(error)
try:
self.神话排名选项.setChecked(
store.get("/{type}/data/myth_top_checked", True))
except Exception as error:
logger.error(error)
try:
self.显示选项.setChecked(
store.get("/{type}/data/damage_unit", True))
except Exception as error:
logger.error(error)
try:
self.线程数选择.setCurrentIndex(
store.get("/{type}/data/thread_count"))
except Exception as error:
logger.error(error)
try:
self.攻击属性选项.setCurrentIndex(
store.get("/{type}/data/attack_elemental"))
except Exception as error:
logger.error(error)
try:
self.智慧产物限制.setCurrentIndex(
store.get("/{type}/data/remodel_limit"))
except Exception as error:
logger.error(error)
try:
self.批量选择(0)
num = 0
data = store.get("/{type}/data/equip_checked")
for i in data:
if i == 1:
self.装备图标点击事件(num, 1)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/equip_forges")
for i in data:
self.装备打造选项[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/equip_conditions")
for i in data:
self.装备条件选择[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 1 in page:
# 第二页(技能/符文/药剂)
try:
try:
self.BUFF输入.setText(store.get("/{type}/data/buff_input"))
except Exception as error:
logger.error(error)
try:
时间 = store.get("/{type}/data/time_input", '25')
if int(时间) < 10:
self.时间输入.setCurrentIndex(int(时间))
else:
self.时间输入.setCurrentText(str(时间))
except Exception as error:
logger.error(error)
try:
self.强化觉醒选择(store.get("/{type}/data/awakening_binding"))
except Exception as error:
logger.error(error)
try:
if self.初始属性.远古记忆 != -1:
self.远古记忆.setCurrentIndex(
store.get("/{type}/data/ancient_memory"))
except Exception as error:
logger.error(error)
try:
if self.初始属性.刀魂之卡赞 != -1:
self.刀魂之卡赞.setCurrentIndex(
store.get("/{type}/data/kazan"))
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/talismans")
for i in data:
self.护石栏[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/talisman_types")
for i in data:
self.护石类型选项[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/runes_skills")
for i in data:
self.符文[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/runes_effects")
for i in data:
self.符文效果[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
num = 0
data = store.get("/{type}/data/consumables")
for i in data:
self.复选框列表[num].setChecked(i)
num += 1
except Exception as error:
logger.error(error)
try:
skills = store.get("/{type}/data/skill")
for i in skills:
try:
序号 = self.角色属性A.技能序号[i]
self.设置技能选项(序号, skills[i])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 2 in page:
# 第三页(基础/细节/修正)
try:
try:
num = 0
data = store.get("/{type}/data/avatar")
for i in data:
self.时装选项[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/detail_values")
x = 0
for i in data:
y = 0
for j in i:
self.属性设置输入[x][y].setText(j)
y += 1
x += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/detail_options")
x = 0
for i in data:
y = 0
for j in i:
self.细节选项输入[x][y].setCurrentIndex(j)
y += 1
x += 1
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 3 in page:
# 第四页(神话属性修正)
try:
data = store.get("/{type}/data/myth_properties")
num = 0
for i in data:
self.神话属性选项[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
if 4 in page:
# 第五页(辟邪玉/希洛克/黑鸦/奥兹玛)
try:
try:
self.智慧产物升级.setChecked(
store.get("/{type}/data/remodel_upgrade"))
except Exception as error:
logger.error(error)
try:
self.武器择优模式.setCurrentIndex(
store.get("/{type}/data/weapon_adaptive_mode"))
except Exception as error:
logger.error(error)
try:
self.守门人属强.setCurrentIndex(
store.get("/{type}/data/nameless_elemental_value"))
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/weapon_fusion", [0] * 5)
num = 0
for i in data:
self.希洛克武器词条[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/jude_effects")
num = 0
for i in data:
self.辟邪玉选择[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/jude_values")
num = 0
for i in data:
self.辟邪玉数值[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/astaroth_options", [])
num = 0
for i in data:
self.阿斯特罗斯选项[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/black_purgatory")
x = 0
for i in data:
y = 0
for j in i:
self.黑鸦词条[x][y].setCurrentIndex(j)
y += 1
x += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/siroco", [])
self.希洛克选择(0, 1)
num = 0
for i in data:
if i == 1:
self.希洛克选择(num)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/ozma", [])
self.奥兹玛选择(0, 1)
num = 0
for i in data:
if i == 1:
self.奥兹玛选择(num)
num += 1
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
if 5 in page:
# 第六页(自选装备计算)
try:
try:
data = store.get("/{type}/data/self_select/equips", [[]])
column_index = store.get(
"/{type}/data/self_select/column_index", 0)
data = data[column_index]
num = 0
for i in data:
self.自选装备[num].setCurrentIndex(i)
num += 1
except Exception as error:
logger.error(error)
try:
data = store.get("/{type}/data/self_select/locked")
num = 0
for i in data:
self.装备锁定[num].setChecked(i)
num += 1
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
# 职业存档
try:
data = store.get("/{type}/data/character_set", [])
for i in self.职业存档:
try:
key = i[0]
if key not in data:
continue
# 复选框
if i[2] == 0:
i[1].setChecked(data[key])
# 下拉框
elif i[2] == 1:
i[1].setCurrentIndex(data[key])
# 文本框
elif i[2] == 2:
i[1].setText(data[key])
except Exception as error:
logger.error(error)
except Exception as error:
logger.error(error)
def 载入配置(self, path='set'):
filepath = './ResourceFiles/{}/{}/'.format(self.角色属性A.实际名称, path)
if os.path.exists(os.path.join(
filepath, "page_1.json")) or os.path.exists(
os.path.join(filepath, "store.json")):
self.载入json(path)
return
else:
# 如果不存在任何存档则载入重置存档
self.载入json(path='reset')
def isIntSeriously(self, number):
result = False
try:
n = float(number)
# 判断是否是整数并且是否小于10
if n.is_integer() and str(number).count('.') == 0 and n <= 10:
result = True
except:
pass
return result
def 设置技能选项(self, 序号, info):
try:
self.等级调整[序号].setCurrentIndex(info['level'])
except:
pass
try:
self.TP输入[序号].setCurrentIndex(info['tp'])
except:
pass
try:
if info['count'] == '/CD':
self.次数输入[序号].setCurrentIndex(0)
elif self.isIntSeriously(info['count']):
self.次数输入[序号].setCurrentIndex(int(info['count']) + 1)
else:
self.次数输入[序号].setCurrentIndex(12)
self.次数输入[序号].setEditable(True)
self.次数输入[序号].clearEditText()
self.次数输入[序号].setCurrentText(info['count'])
self.次数输入[序号].setStyleSheet(下拉框样式)
except:
pass
try:
if self.isIntSeriously(info['pet']):
self.宠物次数[序号].setCurrentIndex(int(info['pet']))
else:
self.宠物次数[序号].setCurrentIndex(11)
self.宠物次数[序号].setEditable(True)
self.宠物次数[序号].clearEditText()
self.宠物次数[序号].setCurrentText(info['pet'])
self.宠物次数[序号].setStyleSheet(下拉框样式)
except:
pass
if 切装模式 == 1:
try:
self.技能切装[序号].setChecked(info['switch'])
except:
pass
def 获取技能选项(self, 序号):
info = {}
try:
info['level'] = self.等级调整[序号].currentIndex()
except:
info['level'] = 0
try:
info['tp'] = self.TP输入[序号].currentIndex()
except:
info['tp'] = 0
try:
info['count'] = self.次数输入[序号].currentText()
except:
info['count'] = '0'
try:
info['pet'] = self.宠物次数[序号].currentText()
except:
info['pet'] = '0'
if 切装模式 == 1:
try:
info['switch'] = self.技能切装[序号].isChecked()
except:
info['switch'] = False
return info
def exports_store(self, page=[0, 1, 2, 3, 4, 5]):
if 0 in page:
# 第一页(装备/选择/打造)
try:
store.set("/{type}/data/title", self.称号.currentIndex())
store.set("/{type}/data/pet", self.宠物.currentIndex())
store.set("/{type}/memory/title", self.称号.currentData())
store.set('/{type}/memory/pet', self.宠物.currentData())
store.set("/{type}/data/compute_mode",
self.计算模式选择.currentIndex())
store.set("/{type}/data/ditto_checked", self.百变怪选项.isChecked())
store.set("/{type}/data/pet_equip_adaptive",
self.红色宠物装备.isChecked())
store.set("/{type}/data/aura_adaptive", self.光环自适应.isChecked())
store.set("/{type}/data/myth_top_checked",
self.神话排名选项.isChecked())
store.set("/{type}/data/damage_unit", self.显示选项.isChecked())
store.set("/{type}/data/thread_count",
self.线程数选择.currentIndex())
store.set("/{type}/data/attack_elemental",
self.攻击属性选项.currentIndex())
store.set("/{type}/data/remodel_limit",
self.智慧产物限制.currentIndex())
store.set("/{type}/data/equip_checked", self.装备选择状态)
store.set("/{type}/data/equip_forges",
[i.currentIndex() for i in self.装备打造选项])
store.set("/{type}/data/equip_conditions",
[i.currentIndex() for i in self.装备条件选择])
except Exception as error:
logger.error(error)
if 1 in page:
# 第二页(技能/符文/药剂)
try:
store.set("/{type}/data/buff_input", self.BUFF输入.text())
store.set("/{type}/data/time_input", self.时间输入.currentText())
store.set("/{type}/data/awakening_binding", self.觉醒选择状态)
if self.初始属性.远古记忆 != -1:
store.set("/{type}/data/ancient_memory",
self.远古记忆.currentIndex())
if self.初始属性.刀魂之卡赞 != -1:
store.set("/{type}/data/kazan", self.刀魂之卡赞.currentIndex())
store.set("/{type}/data/talismans",
[i.currentIndex() for i in self.护石栏])
store.set("/{type}/data/talisman_types",
[i.currentIndex() for i in self.护石类型选项])
store.set("/{type}/memory/talisman_types",
[i.currentData() for i in self.护石类型选项])
store.set("/{type}/data/runes_skills",
[i.currentIndex() for i in self.符文])
store.set("/{type}/data/runes_effects",
[i.currentIndex() for i in self.符文效果])
store.set("/{type}/data/consumables",
[i.isChecked() for i in self.复选框列表])
skills = {}
for i in self.角色属性A.技能栏:
序号 = self.角色属性A.技能序号[i.名称]
skill = self.获取技能选项(序号)
skills[i.名称] = skill
store.set("/{type}/data/skill", skills)
except Exception as error:
logger.error(error)
if 2 in page:
# 第三页(基础/细节/修正)
try:
store.set("/{type}/data/avatar",
[i.currentIndex() for i in self.时装选项])
store.set("/{type}/data/detail_values",
[[j.text() for j in i] for i in self.属性设置输入])
store.set("/{type}/data/detail_options",
[[j.currentIndex() for j in i] for i in self.细节选项输入])
except Exception as error:
logger.error(error)
if 3 in page:
# 第四页(神话属性修正)
try:
store.set("/{type}/data/myth_properties",
[i.currentIndex() for i in self.神话属性选项])
except Exception as error:
logger.error(error)
try:
store.set("/{type}/data/remodel_properties",
[i.currentIndex() for i in self.改造产物选项])
except Exception as error:
logger.error(error)
if 4 in page:
# 第五页(辟邪玉/希洛克/黑鸦)
try:
store.set("/{type}/data/remodel_upgrade",
self.智慧产物升级.isChecked())
store.set("/{type}/data/weapon_adaptive_mode",
self.武器择优模式.currentIndex())
store.set("/{type}/data/nameless_elemental_value",
self.守门人属强.currentIndex())
store.set("/{type}/data/weapon_fusion",
[i.currentIndex() for i in self.希洛克武器词条])
store.set("/{type}/data/jude_effects",
[i.currentIndex() for i in self.辟邪玉选择])
store.set("/{type}/data/jude_values",
[i.currentIndex() for i in self.辟邪玉数值])
store.set("/{type}/data/astaroth_options",
[i.currentIndex() for i in self.阿斯特罗斯选项])
store.set('/{type}/data/black_purgatory',
[[j.currentIndex() for j in i] for i in self.黑鸦词条])
store.set('/{type}/data/siroco', self.希洛克选择状态)
store.set('/{type}/data/ozma', self.奥兹玛选择状态)
except Exception as error:
logger.error(error)
if 5 in page:
# 第六页(自选装备计算)
try:
data = store.get("/{type}/data/self_select/equips", [])
column_index = 0
length = len(self.自选装备)
while column_index >= len(data):
data.append([0] * length)
data[column_index] = [i.currentIndex() for i in self.自选装备]
store.set("/{type}/data/self_select/equips", data)
store.set("/{type}/memory/equips",
[i.currentData() for i in self.自选装备])
store.set("/{type}/data/self_select/equips", data)
store.set('/{type}/data/self_select/column_index',
column_index)
store.set("/{type}/data/self_select/locked",
[i.isChecked() for i in self.装备锁定])
except Exception as error:
logger.error(error)
# 职业存档
try:
set_data = {}
for i in self.职业存档:
# 复选框
if i[2] == 0:
set_data[i[0]] = i[1].isChecked()
# 下拉框
elif i[2] == 1:
set_data[i[0]] = i[1].currentIndex()
# 文本框
elif i[2] == 2:
set_data[i[0]] = i[1].text()
store.set("/{type}/data/character_set", set_data)
except Exception as error:
logger.error(error)
def 保存json(self, path='set', page=[0, 1, 2, 3, 4, 5], store=None):
if store is None:
from PublicReference.utils.storex import store
self.exports_store(page)
try:
filepath = './ResourceFiles/{}/{}/store.json'.format(
self.角色属性A.实际名称, path)
set_data = store.exports(
lambda i: str.startswith(i, "/carry/data"))
with open(filepath, "w", encoding='utf-8') as fp:
json.dump(set_data, fp, ensure_ascii=False, indent=4)
fp.close()
except Exception as error:
logger.error(error)
def 保存配置(self, path='set'):
if self.禁用存档.isChecked():
return
if self.技能存档位置 != '全局存档':
self.保存json(path=self.技能存档位置, store=Store())
self.保存json(path)
# endregion
# region 一键修正
def 一键修正(self, x=0):
increase_counter(ga_category="carry详细功能使用", name="一键修正")
if x == 0:
if self.组合计算(2) == 0:
QMessageBox.information(self, "错误", "请勾选齐全身上穿戴的装备")
return
if self.组合计算(2) > 1:
QMessageBox.information(self, "错误", "请勿勾选身上未穿戴的装备")
return
self.修正套装计算(x)
self.角色属性B = deepcopy(self.初始属性)
self.角色属性B.技能栏 = deepcopy(self.初始属性.技能栏)
self.输入属性(self.角色属性B)
self.角色属性B.穿戴装备计算套装(self.有效穿戴组合[0])
for i in self.角色属性B.装备栏:
equ.get_equ_by_name(i).城镇属性(self.角色属性B)
for i in self.角色属性B.套装栏:
equ.get_suit_by_name(i).城镇属性(self.角色属性B)
self.角色属性B.装备基础()
self.角色属性B.被动倍率计算()
self.面板修正(self.角色属性B.类型, x * 3)
def 面板修正(self, 类型, x):
数据 = []
原始数据 = []
名称 = ['力智', '三攻', '属强']
for i in range(3):
try:
if self.一键站街设置输入[i + x].text() != '':
数据.append(int(self.一键站街设置输入[i + x].text()))
else:
数据.append(0)
except:
QMessageBox.information(self, "错误", 名称[i] + "输入格式错误,已重置为空")
self.一键站街设置输入[i + x].setText('')
数据.append(0)
if sum(数据) == 0:
return
if 数据[0] != 0 and 数据[1] == 0:
QMessageBox.information(self, "错误", "请输入三攻")
return
for i in range(5):
if self.属性设置输入[i][15].text() != '':
原始数据.append(int(self.属性设置输入[i][15].text()))
else:
原始数据.append(0)
if 数据[1] != 0:
if 类型 == '物理百分比':
self.物理百分比修正(数据[0] if 数据[0] != 0 else int(self.角色属性B.站街力量()),
数据[1], 原始数据[0], 原始数据[2])
elif 类型 == '魔法百分比':
self.魔法百分比修正(数据[0] if 数据[0] != 0 else int(self.角色属性B.站街智力()),
数据[1], 原始数据[1], 原始数据[3])
elif 类型 == '物理固伤':
self.物理固伤修正(数据[0] if 数据[0] != 0 else int(self.角色属性B.站街力量()),
数据[1], 原始数据[0], 原始数据[4])
elif 类型 == '魔法固伤':
self.魔法固伤修正(数据[0] if 数据[0] != 0 else int(self.角色属性B.站街智力()),
数据[1], 原始数据[1], 原始数据[4])
if 数据[2] != 0:
self.属强修正(数据[2])
self.click_window(2)
QMessageBox.information(
self, "自动修正计算完毕", "仅对站街修正进行了修改,使面板与输入一致<br>请自行核对其它页面 非力智三攻属强 条目")
def 力量一键修正(self, 输入力智, 修正力量2):
修正前力量 = self.角色属性B.力量
if self.初始属性.实际名称 == '黑暗武士':
self.角色属性B.力量 = 输入力智 / self.角色属性B.技能栏[
self.角色属性B.技能序号['次元融合']].力智倍率()
修正力量 = int(输入力智 / self.角色属性B.技能栏[self.角色属性B.技能序号['次元融合']].力智倍率() +
1) - int(修正前力量)
else:
self.角色属性B.力量 = 输入力智
修正力量 = 输入力智 - int(修正前力量)
self.属性设置输入[0][15].setText(str(int(修正力量 + 修正力量2)))
def 智力一键修正(self, 输入力智, 修正智力2):
修正前智力 = self.角色属性B.智力
if self.初始属性.实际名称 == '黑暗武士':
self.角色属性B.智力 = 输入力智 / self.角色属性B.技能栏[
self.角色属性B.技能序号['次元融合']].力智倍率()
修正智力 = int(输入力智 / self.角色属性B.技能栏[self.角色属性B.技能序号['次元融合']].力智倍率() +
1) - int(修正前智力)
else:
self.角色属性B.智力 = 输入力智
修正智力 = 输入力智 - int(修正前智力)
self.属性设置输入[1][15].setText(str(int(修正智力 + 修正智力2)))
def 物攻一键修正(self, 输入力智, 输入三攻, 修正物理攻击力2):
修正前物理攻击力 = self.角色属性B.物理攻击力
站街物理攻击倍率 = self.角色属性B.站街物理攻击力倍率()
j = round(输入三攻 / 站街物理攻击倍率, 0)
站街实际三攻 = int(j)
for k in range(int(j) - 2, int(j) + 3):
self.角色属性B.物理攻击力 = float(k)
验证物理攻击力1 = int(self.角色属性B.站街物理攻击力())
self.角色属性B.物理攻击力 = float(k + 1)
验证物理攻击力2 = int(self.角色属性B.站街物理攻击力())
if 验证物理攻击力1 <= 输入三攻 and 验证物理攻击力2 > 输入三攻:
站街实际三攻 = float(k)
修正物理攻击力 = 站街实际三攻 - 修正前物理攻击力
self.属性设置输入[2][15].setText(str(int(修正物理攻击力 + 修正物理攻击力2)))
def 魔攻一键修正(self, 输入力智, 输入三攻, 修正魔法攻击力2):
修正前魔法攻击力 = self.角色属性B.魔法攻击力
站街魔法攻击倍率 = self.角色属性B.站街魔法攻击力倍率()
j = round(输入三攻 / 站街魔法攻击倍率, 0)
站街实际三攻 = int(j)
for k in range(int(j) - 2, int(j) + 3):
self.角色属性B.魔法攻击力 = float(k)
验证魔法攻击力1 = int(self.角色属性B.站街魔法攻击力())
self.角色属性B.魔法攻击力 = float(k + 1)
验证魔法攻击力2 = int(self.角色属性B.站街魔法攻击力())
if 验证魔法攻击力1 <= 输入三攻 and 验证魔法攻击力2 > 输入三攻:
站街实际三攻 = float(k)
修正魔法攻击力 = 站街实际三攻 - 修正前魔法攻击力
self.属性设置输入[3][15].setText(str(int(修正魔法攻击力 + 修正魔法攻击力2)))
def 独立一键修正(self, 输入力智, 输入三攻, 修正独立攻击力2):
修正前独立攻击力 = self.角色属性B.独立攻击力
站街独立攻击倍率 = self.角色属性B.站街独立攻击力倍率()
j = round(输入三攻 / 站街独立攻击倍率, 0)
站街实际三攻 = int(j)
for k in range(int(j) - 2, int(j) + 3):
self.角色属性B.独立攻击力 = float(k)
验证独立攻击力1 = int(self.角色属性B.站街独立攻击力())
self.角色属性B.独立攻击力 = float(k + 1)
验证独立攻击力2 = int(self.角色属性B.站街独立攻击力())
if 验证独立攻击力1 <= 输入三攻 and 验证独立攻击力2 > 输入三攻:
站街实际三攻 = float(k)
修正独立攻击力 = 站街实际三攻 - 修正前独立攻击力
self.属性设置输入[4][15].setText(str(int(修正独立攻击力 + 修正独立攻击力2)))
def 物理百分比修正(self, 输入力智, 输入三攻, 修正力量2, 修正物理攻击力2):
self.力量一键修正(输入力智, 修正力量2)
self.物攻一键修正(输入力智, 输入三攻, 修正物理攻击力2)
def 魔法百分比修正(self, 输入力智, 输入三攻, 修正智力2, 修正魔法攻击力2):
self.智力一键修正(输入力智, 修正智力2)
self.魔攻一键修正(输入力智, 输入三攻, 修正魔法攻击力2)
def 物理固伤修正(self, 输入力智, 输入三攻, 修正力量2, 修正独立攻击力2):
self.力量一键修正(输入力智, 修正力量2)
self.独立一键修正(输入力智, 输入三攻, 修正独立攻击力2)
def 魔法固伤修正(self, 输入力智, 输入三攻, 修正智力2, 修正独立攻击力2):
self.智力一键修正(输入力智, 修正智力2)
self.独立一键修正(输入力智, 输入三攻, 修正独立攻击力2)
def 属强修正(self, 输入属强):
try:
站街火强 = self.角色属性B.火属性强化加成() + self.角色属性B.火属性强化
except:
站街火强 = self.角色属性B.火属性强化
try:
站街冰强 = self.角色属性B.冰属性强化加成() + self.角色属性B.冰属性强化
except:
站街冰强 = self.角色属性B.冰属性强化
try:
站街光强 = self.角色属性B.光属性强化加成() + self.角色属性B.光属性强化
except:
站街光强 = self.角色属性B.光属性强化
try:
站街暗强 = self.角色属性B.暗属性强化加成() + self.角色属性B.暗属性强化
except:
站街暗强 = self.角色属性B.暗属性强化
if self.属性设置输入[5][15].text() != '':
修改前 = float(self.属性设置输入[5][15].text())
else:
修改前 = 0
修正前属强 = int(max(站街火强, 站街冰强, 站街光强, 站街暗强))
for k in range(-2, 3):
temp = int((输入属强 + k - 修正前属强) / self.角色属性B.所有属性强化增加)
y = 修正前属强 + temp * self.角色属性B.所有属性强化增加
if int(y) == 输入属强:
break
修改后 = temp + 修改前
self.属性设置输入[5][15].setText(str(int(修改后)))
# endregion
# region 输出界面
def 词条显示计算(self, 属性, x=0):
属白换算 = 属性.属性倍率 * 属性.属性附加
tempstr = []
# temp = '<font color="{}">'.format(self.辟邪玉显示())
if x == 0:
label = "{}:{}"
tempstr.append(label.format(trans("黄字"), to_percent(属性.伤害增加,
1))) # 0
tempstr.append(label.format(trans("暴伤"), to_percent(属性.暴击伤害,
1))) # 1
tempstr.append(label.format(trans("白字"), to_percent(属性.附加伤害,
1))) # 2
tempstr.append(label.format(trans("属白"), to_percent(属性.属性附加,
1))) # 3
tempstr.append(label.format(trans("终伤"), to_percent(属性.最终伤害,
1))) # 4
tempstr.append(
label.format(trans("技攻"), to_percent(属性.技能攻击力 - 1, 1))) # 5
tempstr.append(label.format(trans("三攻"), to_percent(属性.百分比三攻,
1))) # 6
tempstr.append(label.format(trans("力智"), to_percent(属性.百分比力智,
1))) # 7
tempstr.append(label.format(trans('持续'), to_percent(属性.持续伤害,
1))) # 8
tempstr.append(label.format(trans("攻速"), to_percent(属性.攻击速度,
1))) # 9
tempstr.append(label.format(trans("施放"), to_percent(属性.施放速度,
1))) # 10
tempstr.append(label.format(trans('移速'), to_percent(属性.移动速度,
1))) # 11
if 属白换算 != 0:
tempstr[2] += '|{}'.format(to_percent(属白换算 + 属性.附加伤害, 1))
tempstr[3] += '|{}'.format(to_percent(属白换算, 1))
else:
label = "{} +{}"
tempstr.append(
trans('攻击时,额外增加$的伤害增加量').format(to_percent(属性.伤害增加, 1))) # 0
tempstr.append(
trans('暴击时,额外增加$的伤害增加量').format(to_percent(属性.暴击伤害, 1))) # 1
tempstr.append(trans('攻击时,附加$的伤害').format(to_percent(属性.附加伤害,
1))) # 2
tempstr.append(
trans('攻击时,附加$的属性伤害').format(to_percent(属性.属性附加, 1))) # 3
tempstr.append(label.format(trans("最终伤害"), to_percent(属性.最终伤害,
1))) # 4
tempstr.append(
label.format(trans("技能攻击力"), to_percent(属性.技能攻击力 - 1, 1))) # 5
tempstr.append(
label.format(trans("物理、魔法、独立攻击力"), to_percent(属性.百分比三攻,
1))) # 6
tempstr.append(
label.format(trans("力量、智力"), to_percent(属性.百分比力智, 1))) # 7
tempstr.append(
trans('发生持续伤害X秒,伤害量为对敌人增加造成伤害的$').format(to_percent(
属性.持续伤害, 1))) # 8
tempstr.append(label.format(trans("攻击速度"), to_percent(属性.攻击速度,
1))) # 9
tempstr.append(label.format(trans("施放速度"), to_percent(属性.施放速度,
1))) # 10
tempstr.append(label.format(trans("移动速度"), to_percent(属性.移动速度,
1))) # 11
# 为防止部分**对显示造成误解,暂不在词条后显示加成
# date = {2:属性.附加伤害增加增幅,
# 3:属性.属性附加伤害增加增幅,
# 5:属性.技能伤害增加增幅,
# 1:属性.暴击伤害增加增幅,
# 0:属性.伤害增加增幅,
# 4:属性.最终伤害增加增幅,
# 7:属性.力量智力增加增幅,
# 6:属性.物理魔法攻击力增加增幅}
# for i in date.keys():
# if date[i] != 1.0:
# x = date[i] - 1
# y = ' +{}%' if x > 0 else ' {}%'
# if i in [2, 3] and '|' in tempstr[i]:
# y = y.replace(' ', '')
# tempstr[i] += temp + '{}</font>'.format(y.format(round(x * 100, 1)))
return tempstr
def 面板布局设置(self, 面板显示, x=0):
初始x = 0
const = 128 + 19
# self.main_frame5
if x == 1:
初始x += 805
const += 31
count = 0
# 站街力量 站街物攻 进图力量 进图物攻
for i in [0, 1, 4, 5, 6]:
面板显示[i].move(20 + 初始x, const + count * 18)
count += 1
count = 0
# 站街力量 站街物攻 进图力量 进图物攻
# for i in [9, 10, 0, 1]:
# 面板显示[i].move(20 + 初始x, const + count * 18)
# count += 1
# count = 0
# 站街智力 站街魔攻 进图智力 进图魔攻
for i in [2, 3]:
面板显示[i].move(150 + 初始x, const + count * 18)
count += 1
# 独立
# 面板显示[4].move(150 + 初始x, const + count * 18)
count = 6
面板显示[7].move(20 + 初始x, const + 6 * 18)
面板显示[8].move(150 + 初始x, const + 6 * 18)
面板显示[9].move(20 + 初始x, const + 7 * 18 - 5)
面板显示[10].move(150 + 初始x, const + 7 * 18 - 5)
# 进图属强
for i in range(len(面板显示) - 1):
面板显示[i].resize(100, 18)
面板显示[i].setAlignment(Qt.AlignRight)
if i in [7, 8, 9, 10]:
面板显示[i].setAlignment(Qt.AlignCenter)
if i == 4:
面板显示[i].resize(155, 18)
面板显示[5].resize(230, 18)
面板显示[6].resize(230, 18)
面板显示[11].resize(230, 18)
面板显示[11].move(20 + 初始x, const + 5 * 18)
面板显示[11].setAlignment(Qt.AlignLeft)
# 面板显示[7].resize(100, 72)
# 面板显示[7].move(175 + 初始x, const + count * 18 - 75)
# 面板显示[7].setAlignment(Qt.AlignCenter)
# 面板显示[7].setStyleSheet('QLabel{font-size:12px}')
def 面板显示设置(self, 显示, 进图, 站街):
显示[0].setText(
'<font color="#FFFFFF">{} </font><font color="#96FF32">{}</font>'.
format(str(int(站街.站街力量())), str(int(进图.面板力量()))))
显示[0].setStyleSheet("QLabel{font-size:12px;}")
显示[1].setText(
'<font color="#FFFFFF">{} </font><font color="#96FF32">{}</font>'.
format(str(int(站街.站街物理攻击力())), str(int(进图.面板物理攻击力()))))
显示[1].setStyleSheet("QLabel{font-size:12px;}")
显示[2].setText(
'<font color="#FFFFFF">{} </font><font color="#96FF32">{}</font>'.
format(str(int(站街.站街智力())), str(int(进图.面板智力()))))
显示[2].setStyleSheet("QLabel{font-size:12px;}")
显示[3].setText(
'<font color="#FFFFFF">{} </font><font color="#96FF32">{}</font>'.
format(str(int(站街.站街魔法攻击力())), str(int(进图.面板魔法攻击力()))))
显示[3].setStyleSheet("QLabel{font-size:12px;}")
显示[4].setText(
'<font color="#FFFFFF">{} </font><font color="#96FF32">{} </font><font style='
'color:rgb(114,114,114)'
'">{}</font>'.format(str(int(站街.站街独立攻击力())),
str(int(进图.面板独立攻击力())),
get_mac_address()[0:8]))
显示[4].setStyleSheet("QLabel{font-size:12px;}")
显示[5].setText(
('<font color="#FFFFFF">' + trans('火') + '({})' + trans('冰') +
'({})' + trans('光') + '({})' + trans('暗') + '({})</font>').format(
int(站街.火属性强化), int(站街.冰属性强化), int(站街.光属性强化), int(站街.暗属性强化)))
显示[5].setStyleSheet("QLabel{font-size:12px;}")
显示[6].setText(
('<font color="#96FF32">' + trans('火') + '({})' + trans('冰') +
'({})' + trans('光') + '({})' + trans('暗') + '({})</font>').format(
int(进图.火属性强化), int(进图.冰属性强化), int(进图.光属性强化), int(进图.暗属性强化)))
显示[6].setStyleSheet("QLabel{font-size:12px;}")
辟邪玉词条 = self.辟邪玉显示(1)
for i in range(len(辟邪玉词条)):
显示[7 + i].setText(辟邪玉词条[i])
显示[7 + i].setStyleSheet("QLabel{font-size:12px;}")
显示[11].setText("<font style='color:rgb(20,20,20)'>{}</font>".format(
get_mac_address()[0:8]))
显示[11].setStyleSheet("QLabel{font-size:15px;}")
# 显示[0].setText(str(int(进图.面板力量())))
# 显示[1].setText(str(int(进图.面板物理攻击力())))
# 显示[2].setText(str(int(进图.面板智力())))
# 显示[3].setText(str(int(进图.面板魔法攻击力())))
# # 独立攻击力
# tempstr = '<font color="#FFFFFF">{}</font> '.format(int(
# 站街.站街独立攻击力()))
# tempstr += '<font color="#96FF32">{}</font>'.format(int(进图.面板独立攻击力()))
# 显示[4].setText(tempstr)
# # 属性强化
# tempstr = ''
# # if 进图.所有属性强化增加 != 1.0:
# # x = 进图.所有属性强化增加 - 1
# # y = ' +{}%' if x > 0 else ' {}%'
# # tempstr += '<font color="{}">{}</font>'.format(self.辟邪玉显示(), y.format(round(x * 100, 1)))
# 显示[5].setText('{}{}'.format(int(进图.火属性强化), tempstr))
# 显示[6].setText('{}{}'.format(int(进图.冰属性强化), tempstr))
# 显示[7].setText('{}{}'.format(int(进图.光属性强化), tempstr))
# 显示[8].setText('{}{}'.format(int(进图.暗属性强化), tempstr))
# 显示[9].setText(str(int(站街.站街力量())))
# 显示[10].setText(str(int(站街.站街物理攻击力())))
# 显示[11].setText(str(int(站街.站街智力())))
# 显示[12].setText(str(int(站街.站街魔法攻击力())))
# 显示[13].setText(str(int(站街.火属性强化)))
# 显示[14].setText(str(int(站街.冰属性强化)))
# 显示[15].setText(str(int(站街.光属性强化)))
# 显示[16].setText(str(int(站街.暗属性强化)))
# 显示[17].setText(self.辟邪玉显示(1))
def 辟邪玉显示(self, x=0):
temp = ''
num = 0
list = []
for i in range(4):
k = self.辟邪玉选择[i].currentIndex()
if k > 0:
list.append('{} {}'.format(
trans(辟邪玉列表[k].简称), '' if self.辟邪玉数值[i].currentText()
== '+0' else self.辟邪玉数值[i].currentText()))
num += 1
辟邪玉颜色 = 颜色[{4: '史诗', 3: '传说', 2: '神器', 1: '稀有'}.get(num, '稀有')]
if x == 0:
return 辟邪玉颜色
else:
if num == 0:
return ''
else:
for i in range(num):
list[i] = '<font color="{}">{}</font>'.format(
辟邪玉颜色, list[i])
return list
def 套装显示设置(self, 显示, 属性):
count = 0
显示[count].setText(trans(self.称号.currentData()))
显示[count].setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
显示[count].setToolTip(self.称号描述())
count += 1
显示[count].setText(trans(self.宠物.currentData()))
显示[count].setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
显示[count].setToolTip(self.宠物描述())
count += 1
神话所在套装 = []
for i in range(11):
temp = equ.get_equ_by_name(属性.装备栏[i])
if temp.品质 == '神话':
神话所在套装.append(temp.所属套装)
# 套装属性合并
套装 = []
套装件数 = []
套装属性 = []
套装名称 = 属性.套装栏
for i in range(len(套装名称)):
temp = 套装名称[i].split('[')[0]
if temp not in 套装:
套装.append(temp)
套装件数.append([])
套装属性.append('')
if len(套装名称[i].split('[')) > 1:
件数 = 套装名称[i].split('[')[1].split(']')[0]
套装件数[套装.index(temp)].append(件数)
套装属性[套装.index(
temp
)] += '<font size="3" face="宋体"><font color="#78FF1E">' + 套装名称[
i] + '</font><br>' + equ.get_suit_by_name(套装名称[i]).装备描述(
self.角色属性B)[:-4] + '</font><br>'
# 自适应属性
if sum(self.角色属性A.自适应选项) != 0:
套装.append(self.角色属性A.自适应输出())
套装件数.append([])
套装属性.append('')
tempstr = ''
武器词条属性 = trans(['力智', '三攻', '黄字', '白字', '暴伤', '终伤'])
if self.希洛克武器词条[0].currentIndex() == 1:
tempstr += trans("{残香}:$value+10%",
value=武器词条属性[self.角色属性A.词条选择[0]])
if sum(self.希洛克选择状态) == 3:
tempstr += "|{}+5%".format(武器词条属性[self.角色属性A.词条选择[1]])
套装.append(tempstr)
套装件数.append([])
套装属性.append('')
# 显示套装
for i in range(len(套装)):
if len(套装件数[i]) > 0:
显示[count].setText(trans(套装[i]) + '[' + str(max(套装件数[i])) + ']')
else:
显示[count].setText(trans(套装[i]))
if 套装[i] in 神话所在套装:
显示[count].setStyleSheet(
"QLabel{font-size:12px;color:rgb(226,150,146)}")
else:
显示[count].setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
显示[count].setToolTip(套装属性[i][:-4])
count += 1
try:
# 显示黑鸦词条
黑鸦部位 = trans(['武器', '戒指', '辅助装备', '下装'])
for i in range(4):
if 属性.黑鸦词条[i][4] != '':
显示[count].setText(黑鸦部位[i] + ':' +
属性.黑鸦词条[i][4].replace('<br>', ' '))
显示[count].setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
count += 1
except Exception as error:
logger.error(error)
pass
def 打造显示设置(self, 显示, 属性, x=0):
初始x = 10
初始y = 31
pox_y2 = 11
# self.main_frame5
if x == 1:
初始x += 805
初始y += 20 + pox_y2
偏移量 = 187
x坐标 = [
32, 0, 0, 32, 0, 偏移量, 偏移量 + 32, 偏移量 + 32, 偏移量, 偏移量, 偏移量 + 32, 32
]
y坐标 = [0, 0, 32, 32, 64, 0, 0, 32, 64, 32, 64, 64]
temp = []
for i in range(12):
装备 = equ.get_equ_by_name(属性.装备栏[i])
打造状态 = 显示[i]
if 装备.所属套装 != '智慧产物':
打造状态.setText('+' + str(属性.强化等级[i]))
if 属性.是否增幅[i] == 1:
打造状态.setStyleSheet(
"QLabel{color:rgb(228,88,169);font-size:12px;font-weight:Bold}"
)
temp.append('增幅+{} {}'.format(属性.强化等级[i], 装备.名称))
else:
打造状态.setStyleSheet(
"QLabel{color:rgb(25,199,234);font-size:12px;font-weight:Bold}"
)
temp.append('强化+{} {}'.format(属性.强化等级[i], 装备.名称))
else:
打造状态.setText('+' + str(属性.改造等级[i]))
打造状态.setStyleSheet(
"QLabel{color:rgb(249,141,62);font-size:12px;font-weight:Bold;}"
)
temp.append('改造+{} {}'.format(属性.改造等级[i], 装备.名称))
打造状态.move(初始x + x坐标[i] + 13, 初始y + y坐标[i] - 8 - pox_y2)
打造状态.resize(21, 10)
装备 = equ.get_equ_by_name(属性.装备栏[11])
if 装备.所属套装 != '智慧产物' and 属性.武器锻造等级 != 0:
打造状态 = 显示[12]
打造状态.setText('+' + str(属性.武器锻造等级))
打造状态.setStyleSheet(
"QLabel{color:rgb(232,104,24);font-size:12px;font-weight:Bold}"
)
打造状态.move(初始x + x坐标[11] + 13, 初始y + y坐标[11] + 20 - pox_y2)
temp[11] += '(锻造+{})'.format(属性.武器锻造等级)
打造状态.resize(21, 10)
return temp
def 格式化输出(self, 数字文本, x=0):
if x == 1:
返回值 = str('%.2f' % round(int(数字文本) / 100000000, 2))
elif self.显示选项.isChecked():
返回值 = str('%.2f' % round(int(数字文本) / 100000000, 2)) + '亿'
else:
返回值 = ''
for i in range(len(数字文本)):
if len(数字文本) % 3 == 2 and i % 3 == 2:
返回值 += ','
if len(数字文本) % 3 == 1 and i % 3 == 1:
返回值 += ','
if len(数字文本) % 3 == 0 and i % 3 == 0:
if i != 0:
返回值 += ','
返回值 += str(数字文本[i])
return 返回值
def 称号描述(self):
temp = '<font size="3" face="宋体">'
temp += '<font color="#78FF1E">' + \
trans(self.称号.currentData()) + '</font><br>'
temp += 称号列表[self.称号.currentIndex()].装备描述(self.角色属性B)[:-4]
temp += '</font>'
return temp
def 宠物描述(self):
temp = '<font size="3" face="宋体">'
temp += '<font color="#78FF1E">' + self.宠物.currentText(
) + '</font><br>'
temp += 宠物列表[self.宠物.currentIndex()].装备描述(self.角色属性B)[:-4]
temp += '</font>'
return temp
def 装备描述计算(self, 属性):
tempstr = []
数量 = sum(self.希洛克选择状态)
武器词条属性 = ['力智', '三攻', '黄字', '白字', '暴伤', '终伤']
希洛克 = self.希洛克属性计算(属性, 1)
奥兹玛 = self.奥兹玛属性计算(属性, 1)
for i in range(12):
装备 = equ.get_equ_by_name(属性.装备栏[i])
# 名称
tempstr.append(
trans(
'<font size="3" face="宋体"><font color="$color">{$name}</font>',
color=颜色[装备.品质],
name=装备.名称))
# 等级 品质 类型 部位
tempstr[i] += trans('<br>Lv$level {$rarity} {$type}({$part})',
level=装备.等级,
rarity=装备.品质,
type=装备.类型,
part=装备.部位)
# 套装
if 装备.所属套装 != '无':
if 装备.所属套装 != '智慧产物':
y = 装备.所属套装
else:
y = 装备.所属套装2
else:
y = ''
if y != '':
tempstr[i] += trans(
'<br><font color="#78FF1E">{$value} {套装}</font>', value=y)
# 精通描述
if i < 5:
x = 属性.防具精通计算(i)
y = trans('<br>{精通}:')
for n in 属性.防具精通属性:
y += trans(n) + ' '
tempstr[i] += y + '+' + str(x)
# 打造描述
if 装备.所属套装 != '智慧产物':
# 强化描述
if 属性.强化等级[i] != 0:
if i == 8:
tempstr[i] += trans(
'<br><font color="#68D5ED">+$value {强化}:',
value=属性.强化等级[i])
tempstr[i] += trans('{三攻} + $value</font>',
value=耳环计算(装备.等级, 装备.品质,
属性.强化等级[i]))
if i in [9, 10]:
tempstr[i] += trans(
'<br><font color="#68D5ED">+$value {强化}:',
value=属性.强化等级[i])
tempstr[i] += trans('{四维} + $value</font>',
value=左右计算(装备.等级, 装备.品质,
属性.强化等级[i]))
if i == 11:
tempstr[i] += trans(
'<br><font color="#68D5ED">+$value {强化}:',
value=属性.强化等级[i])
tempstr[i] += trans('{物理攻击力} + $value</font>',
value=武器计算(装备.等级, 装备.品质,
属性.强化等级[i], 装备.类型,
'物理'))
tempstr[i] += trans(
'<br><font color="#68D5ED">+$value {强化}:',
value=属性.强化等级[i])
tempstr[i] += trans('{魔法攻击力} + $value</font>',
value=武器计算(装备.等级, 装备.品质,
属性.强化等级[i], 装备.类型,
'魔法'))
# 锻造描述
if i == 11 and 属性.武器锻造等级 != 0:
tempstr[i] += trans(
'<br><font color="#B36BFF">+$value {锻造} ',
value=属性.武器锻造等级)
tempstr[i] += trans('{独立攻击力} + $value</font>',
value=锻造计算(装备.等级, 装备.品质, 属性.武器锻造等级))
# 增幅描述
if 属性.是否增幅[i] == 1:
if tempstr[i] != '':
tempstr[i] += '<br>'
value = 增幅计算(装备.等级, 装备.品质, 属性.强化等级[i], 属性.增幅版本)
tempstr[i] += trans("<font color='#FF00FF'>+$value {增幅}:",
value=属性.强化等级[i])
if '物理' in 属性.类型 or '力量' in 属性.类型:
tempstr[i] += trans('异次元力量')
else:
tempstr[i] += trans('异次元智力')
tempstr[i] += ' +{}</font>'.format(value)
# 遴选描述
if tempstr[i] != '':
tempstr[i] += '<br>'
if i == 2 and 属性.黑鸦词条[3][0] != 0 and 属性.变换词条[3][1] != 0:
tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "<br>"
tempstr[i] += 属性.黑鸦词条[3][4]
# 下装
elif i == 7 and 属性.黑鸦词条[1][0] != 0 and 属性.变换词条[1][1] != 0:
tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "<br>"
tempstr[i] += 属性.黑鸦词条[1][4]
# 戒指
elif i == 9 and 属性.黑鸦词条[2][0] != 0 and 属性.变换词条[2][1] != 0:
tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "<br>"
tempstr[i] += 属性.黑鸦词条[2][4]
# 辅助
elif i == 11 and 属性.黑鸦词条[0][0] != 0 and 属性.变换词条[0][1] != 0:
tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "<br>"
tempstr[i] += 属性.黑鸦词条[0][4]
# 武器
else:
tempstr[i] += 装备.装备描述(属性)[:-4]
# 希洛克描述
if i in [2, 7, 9]:
if 希洛克[i] != '':
tempstr[i] += trans(
'<br><font color="#00A2E8">{希洛克融合属性}:</font><br>')
tempstr[i] += 希洛克[i]
# 奥兹玛描述
if i in [1, 3, 4, 6, 10]:
if 奥兹玛[i] != '':
tempstr[i] += trans(
'<br><font color="#00A2E8">{奥兹玛融合属性}:</font><br>')
tempstr[i] += 奥兹玛[i]
# 希洛克武器描述
if self.希洛克武器词条[0].currentIndex() > 0 and i == 11:
tempstr[i] += trans(
'<br><font color="#00A2E8">{希洛克融合属性}:</font><br>')
if self.希洛克武器词条[0].currentIndex() == 1:
tempstr[i] += trans("{属性1}:{$value} +10%<br>",
value=武器词条属性[属性.词条选择[0]])
if 数量 == 3:
tempstr[i] += trans("{属性2}:{$value} +5%<br>",
value=武器词条属性[属性.词条选择[1]])
else:
tempstr[i] += trans(
"{属性1}:{$a} +$b%<br>",
a=武器词条属性[self.希洛克武器词条[1].currentIndex()],
b=(self.希洛克武器词条[3].currentIndex() + 3) * 2)
if 数量 == 3:
tempstr[i] += trans(
"{属性2}:{$a} +$b%<br>",
a=武器词条属性[self.希洛克武器词条[2].currentIndex()],
b=(self.希洛克武器词条[4].currentIndex() + 3) * 1)
if tempstr[i].endswith('<br>'):
tempstr[i] = tempstr[i][:-4]
tempstr[i] += '</font>'
return tempstr
def 百分比输出(self, A, B):
if B == 0:
return self.格式化输出(str(int(A)))
temp1 = A - B
temp2 = round((A / B - 1) * 100, 2)
if self.对比格式.isChecked():
if temp1 == 0:
return '<font face="宋体">无变化</font>'
elif temp1 > 0:
return '<font face="宋体" color= "#96FF1E">+' + self.格式化输出(
str(int(temp1)), 1) + ' (' + str(
'%.2f' % abs(temp2)) + '%)</font>'
else:
return '<font face="宋体" color= "#E52E2E">' + self.格式化输出(
str(int(temp1)), 1) + ' (' + str(
'%.2f' % abs(temp2)) + '%)</font>'
else:
if temp2 == 0:
return '<font face="宋体">无变化</font>'
elif temp2 > 0:
return '<font face="宋体" color= "#96FF1E">+' + str(
'%.2f' % temp2) + '%</font>'
else:
return '<font face="宋体" color= "#E52E2E">' + str(
'%.2f' % temp2) + '%</font>'
def 被动技能描述(self, i):
tempstr = ''
if self.角色属性B.技能栏[i].所在等级 != 100 or self.角色属性B.技能栏[i].是否主动 == 0:
if self.角色属性B.技能栏[i].等级 > 0:
if self.角色属性B.技能栏[i].自定义描述 == 1:
tempstr += '<font face="宋体"><font color="#FF6666">' + trans(
self.角色属性B.技能栏[i].名称) + '</font><br>'
tempstr += self.角色属性B.技能栏[i].技能描述(self.角色属性B.武器类型)
else:
不适用于title = trans('<font color=gray>({不适用于}:')
if self.角色属性B.技能栏[i].关联技能 != [
'无'
] and self.角色属性B.技能栏[i].加成倍率(self.角色属性B.武器类型) != 1:
加成倍率key = '{加成倍率}:$value<br>'
关联技能title = trans('{关联技能}:')
tempstr += trans(
'<font face="宋体"><font color="#FF6666">{$value}</font><br>',
value=self.角色属性B.技能栏[i].名称)
tempstr += trans(
加成倍率key,
value=to_percent(
self.角色属性B.技能栏[i].加成倍率(self.角色属性B.武器类型) - 1,
2))
tempstr += 关联技能title
for j in self.角色属性B.技能栏[i].关联技能:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].关联技能[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非关联技能 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非关联技能:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非关联技能[-1]:
tempstr += ','
tempstr += ')</font>'
if self.角色属性B.技能栏[i].关联技能2 != ['无']:
tempstr += "<br>" + trans(
加成倍率key,
value=to_percent(
self.角色属性B.技能栏[i].加成倍率2(self.角色属性B.武器类型) -
1, 2))
tempstr += 关联技能title
for k in self.角色属性B.技能栏[i].关联技能2:
tempstr += trans(k)
if k != self.角色属性B.技能栏[i].关联技能2[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非关联技能2 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非关联技能2:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非关联技能2[-1]:
tempstr += ','
tempstr += ')</font>'
if self.角色属性B.技能栏[i].关联技能3 != ['无']:
tempstr += "<br>" + trans(
加成倍率key,
value=to_percent(
self.角色属性B.技能栏[i].加成倍率3(self.角色属性B.武器类型) -
1, 2))
tempstr += 关联技能title
for l in self.角色属性B.技能栏[i].关联技能3:
tempstr += trans(l)
if l != self.角色属性B.技能栏[i].关联技能3[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非关联技能3 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非关联技能3:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非关联技能3[-1]:
tempstr += ','
tempstr += ')</font>'
if self.角色属性B.技能栏[i].冷却关联技能 != [
'无'
] and self.角色属性B.技能栏[i].CD缩减倍率(self.角色属性B.武器类型) != 1:
冷却关联title = trans('{冷却关联技能}:')
冷却缩减key = "{冷却缩减}:$value<br>"
if tempstr == '':
tempstr += trans(
'<font face="宋体"><font color="#FF6666">{$value}</font><br>',
value=self.角色属性B.技能栏[i].名称)
else:
tempstr += '<br>'
tempstr += trans(
冷却缩减key,
value=to_percent(
1 - self.角色属性B.技能栏[i].CD缩减倍率(self.角色属性B.武器类型),
2))
tempstr += 冷却关联title
for j in self.角色属性B.技能栏[i].冷却关联技能:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].冷却关联技能[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非冷却关联技能 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非冷却关联技能:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非冷却关联技能[-1]:
tempstr += ','
tempstr += ')</font>'
if self.角色属性B.技能栏[i].冷却关联技能2 != ['无']:
tempstr += trans(
冷却缩减key,
value=to_percent(
1 -
self.角色属性B.技能栏[i].CD缩减倍率2(self.角色属性B.武器类型),
2))
tempstr += 冷却关联title
for j in self.角色属性B.技能栏[i].冷却关联技能2:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].冷却关联技能2[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非冷却关联技能2 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非冷却关联技能2:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非冷却关联技能2[-1]:
tempstr += ','
tempstr += ')</font>'
if self.角色属性B.技能栏[i].冷却关联技能3 != ['无']:
tempstr += trans(
冷却缩减key,
value=to_percent(
1 -
self.角色属性B.技能栏[i].CD缩减倍率3(self.角色属性B.武器类型),
2))
tempstr += 冷却关联title
for j in self.角色属性B.技能栏[i].冷却关联技能3:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].冷却关联技能3[-1]:
tempstr += ','
if self.角色属性B.技能栏[i].非冷却关联技能3 != ['无']:
tempstr += 不适用于title
for j in self.角色属性B.技能栏[i].非冷却关联技能3:
tempstr += trans(j)
if j != self.角色属性B.技能栏[i].非冷却关联技能3[-1]:
tempstr += ','
tempstr += ')</font>'
return tempstr
def 输出界面(self, index, name=''):
# 调试模式下 index为-1
flag = 1
if index < 0:
flag = 0
index = 0
武器名称 = ''
for i in equ.get_equ_list():
if i.类型 == self.角色属性A.武器选项[0]:
武器名称 = i.名称
break
#调试模式默认图标显示
self.排行数据.append([
'撒旦:沸腾之怒', '贝利亚尔:毁灭之种', '亚蒙:谎言之力', '亚巴顿:绝望地狱', '巴尔:堕落之魂',
'白象之庇护', '四叶草之初心', '红兔之祝福', '军神的心之所念', '军神的遗书', '军神的庇护宝石',
武器名称, 0, '噩梦:地狱之路[2]', '噩梦:地狱之路[3]', '噩梦:地狱之路[5]', '幸运三角[2]',
'幸运三角[3]', '军神的隐秘遗产[2]', '军神的隐秘遗产[3]', '无'
])
pdata = {}
装备名称 = self.排行数据[index][0:12]
套装名称 = self.排行数据[index][13:-1]
百变怪 = self.排行数据[index][-1]
self.角色属性B = deepcopy(self.角色属性A)
self.角色属性B.穿戴装备(装备名称, 套装名称)
#C为站街属性
C = self.站街计算(装备名称, 套装名称)
if flag == 1:
self.角色属性B.其它属性计算()
词条提升率计算 = deepcopy(self.角色属性B)
统计详情 = self.角色属性B.伤害计算(1)
# self.角色属性B.计算自适应方式 = 0
# 最大输出界面限制
if len(self.输出窗口列表) >= 10:
del self.输出窗口列表[0]
输出窗口 = QWidget()
输出窗口.setStyleSheet('''QToolTip {
background-color: black;
color: white;
border: 0px
}
QLabel {
font-size:12px;
}''')
输出窗口.setFixedSize(788, 546)
pox_y = 18
pox_y2 = 11
temp = ''
if name == '':
temp += trans('详细数据') + ' 仅供参考 带节奏死个🐎' + ' ' + get_mac_address()
# if self.角色属性A.计算自适应方式 == 1:
# temp+= ' - 全局择优'
# else:
# temp+= ' - 局部择优'
else:
temp += name
# temp += "装备版本:"+self.角色属性A.版本 + " 增幅版本:" + self.角色属性A.增幅版本
输出窗口.setWindowTitle(temp)
输出窗口.setWindowIcon(self.icon)
QLabel(输出窗口).setPixmap(self.输出背景图片)
人物 = QLabel(输出窗口)
图片 = QPixmap('./ResourceFiles/' + self.角色属性A.实际名称 + "/人物.png")
人物.setPixmap(图片)
人物.move(90 + int(45 - 图片.width() / 2), 40 - pox_y2)
人物.resize(90, 90)
人物.setAlignment(Qt.AlignTop)
excel = []
for i in range(len(self.角色属性B.技能栏)):
excel.append(统计详情[i * 4 + 1])
excel.sort()
面板显示 = []
for i in range(18):
面板显示.append(QLabel(输出窗口))
self.面板布局设置(面板显示)
self.面板显示设置(面板显示, self.角色属性B, C)
j = 312
pdata['词条'] = self.词条显示计算(self.角色属性B)
词条解释 = self.词条显示计算(self.角色属性B, 1)
for i in range(0, len(pdata['词条'])):
templab = QLabel(输出窗口)
templab.setText(pdata['词条'][i])
if i == 5 and self.角色属性B.技能攻击力累加 > 2:
templab.setStyleSheet(
"QLabel{font-size:12px;color:red}")
else:
templab.setStyleSheet(
"QLabel{font-size:12px;color:rgb(104,213,237)}")
templab.move(7, j - pox_y2)
templab.resize(180, 17)
templab.setAlignment(Qt.AlignLeft)
templab.setToolTip('<font color="#B99460">' + 词条解释[i] + '</font>')
j += 17
位置 = 308
间隔 = 17
套装名称显示 = []
for i in range(16):
套装名称显示.append(QLabel(输出窗口))
套装名称显示[i].move(114, 位置 - pox_y2 + 间隔 * i)
套装名称显示[i].resize(150, 18)
套装名称显示[i].setAlignment(Qt.AlignCenter)
套装名称显示[i].setText('')
self.套装显示设置(套装名称显示, self.角色属性B)
实际技能等级 = []
技能等效CD = []
for i in self.角色属性B.技能栏:
实际技能等级.append(i.等级)
if i.是否有伤害 == 1:
技能等效CD.append(i.等效CD(self.角色属性B.武器类型, self.角色属性B.类型))
else:
技能等效CD.append(0)
总伤害数值 = 0
count = 0
for i in range(len(self.角色属性B.技能栏)):
if 统计详情[i * 4 + 1] != 0:
count += 1
self.行高 = 32
伤害列表 = []
for i in range(len(self.角色属性B.技能栏)):
伤害列表.append(统计详情[i * 4 + 1])
总伤害数值 += 统计详情[i * 4 + 1]
伤害列表.sort(reverse=True)
try:
self.exports_store()
更新人物名望()
# TODO: 重新布局
总名望 = store.get("/fame/temp_result")
名望详情 = store.get("/fame/temp_result/detail")
if 总名望 > 0:
dmi = ((总伤害数值 / 1e8) / pow((总名望 / (1e4) - 0.5), 3))
templabel = QLabel(输出窗口)
templabel.setText("{} ({})".format(总名望, round(dmi, 2)))
templabel.setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
templabel.move(130, 110)
templabel.resize(100, 42)
templabel.setToolTip(
'系数计算公式:dmi = ((总伤害数值 / 1e8) / pow((总名望 / (1e4) - 0.5), 3))<br>'
+ str(名望详情))
except Exception as e:
logger.error(e)
if len(self.基准值) != 0:
显示模式 = 1
else:
显示模式 = 0
main = 技能详情(输出窗口, self, 统计详情, excel, 实际技能等级, 技能等效CD, 显示模式, count)
pdata['技能'] = main.data
main.setGeometry(277, 36 - pox_y, 498, 455)
# region 被动详情
num = 0
for i in range(len(self.角色属性B.技能栏)):
# Will修改
tempstr = self.被动技能描述(i)
if tempstr != '':
tempstr += '</font>'
被动数据 = QLabel(输出窗口)
被动数据.setPixmap(self.技能图片[i])
被动数据.setToolTip(tempstr)
被动数据.move(293 + num * 40, 500 - pox_y)
被动等级 = QLabel(输出窗口)
被动等级.setText('Lv.' + str(实际技能等级[i]))
被动等级.move(293 - 6 + num * 40, 480 - pox_y)
被动等级.resize(40, 28)
if 实际技能等级[i] != 0:
被动等级.setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,255,255)}")
else:
被动等级.setStyleSheet(
"QLabel{font-size:12px;color:rgb(255,0,0)}")
被动等级.setAlignment(Qt.AlignCenter)
num += 1
if self.角色属性B.远古记忆 > 0:
被动数据 = QLabel(输出窗口)
被动数据.setPixmap((QPixmap('./ResourceFiles/img/远古记忆.png')))
tempstr = trans(
'<font face="宋体"><font color="#FF6666">{远古记忆}</font><br>{智力}+$value</font>',
value=self.角色属性B.远古记忆 * 15)
被动数据.setToolTip(tempstr)
被动数据.move(293 + num * 40, 500 - pox_y)
被动等级 = QLabel(输出窗口)
被动等级.setText('Lv.' + str(self.角色属性B.远古记忆))
被动等级.move(293 - 6 + num * 40, 480 - pox_y)
被动等级.resize(40, 28)
被动等级.setAlignment(Qt.AlignCenter)
被动等级.setStyleSheet("QLabel{font-size:12px;color:rgb(255,255,255)}")
num += 1
if self.角色属性B.刀魂之卡赞 > 0:
被动数据 = QLabel(输出窗口)
被动数据.setPixmap((QPixmap('./ResourceFiles/img/刀魂之卡赞.png')))
tempstr = trans(
'<font face="宋体"><font color="#FF6666">{刀魂之卡赞}</font><br>{力量、智力}+$value</font>',
value=刀魂之卡赞数据[self.角色属性B.刀魂之卡赞])
被动数据.setToolTip(tempstr)
被动数据.move(293 + num * 40, 500 - pox_y)
被动等级 = QLabel(输出窗口)
被动等级.setText('Lv.' + str(self.角色属性B.刀魂之卡赞))
被动等级.move(293 - 6 + num * 40, 480 - pox_y)
被动等级.resize(40, 28)
被动等级.setAlignment(Qt.AlignCenter)
被动等级.setStyleSheet("QLabel{font-size:12px;color:rgb(255,255,255)}")
num += 1
# endregion
总伤害 = QLabel(输出窗口)
总伤害.setStyleSheet("QLabel{color:rgb(255,255,255);font-size:25px}")
if 显示模式 == 1:
总伤害.setText(self.百分比输出(总伤害数值, self.基准值[0]))
else:
总伤害.setText(self.格式化输出(str(int(总伤害数值))))
总伤害.resize(250, 36)
总伤害.move(10, 520 - pox_y2)
总伤害.setAlignment(Qt.AlignCenter)
初始x = 10
初始y = 31
图片列表 = self.获取装备图片(self.排行数据[index])
偏移量 = 187
x坐标 = [
32, 0, 0, 32, 0, 偏移量, 偏移量 + 32, 偏移量 + 32, 偏移量, 偏移量, 偏移量 + 32, 32
]
y坐标 = [0, 0, 32, 32, 64, 0, 0, 32, 64, 32, 64, 64]
tempstr = self.装备描述计算(self.角色属性B)
for i in range(12):
装备图标 = QLabel(输出窗口)
装备图标.setMovie(图片列表[i])
装备图标.resize(26, 26)
装备图标.move(初始x + x坐标[i], 初始y + y坐标[i] - pox_y2)
装备图标.setAlignment(Qt.AlignCenter)
if self.角色属性B.装备栏[i] == 百变怪:
图标遮罩 = QLabel(输出窗口)
图标遮罩.setStyleSheet("QLabel{background-color:rgba(0,0,0,0.5)}")
图标遮罩.resize(26, 26)
图标遮罩.move(初始x + x坐标[i], 初始y + y坐标[i] - pox_y2)
图标遮罩.setToolTip(tempstr[i])
else:
装备图标.setToolTip(tempstr[i])
打造显示 = []
for i in range(13):
打造显示.append(QLabel(输出窗口))
打造显示[i].move(-100, -100)
temp = self.打造显示设置(打造显示, self.角色属性B)
pdata['名称'] = self.角色属性A.实际名称
pdata['装备'] = temp
if 多语言开关 == 0:
label = QLabel(输出窗口)
label.setText(get_mac_address())
label.setStyleSheet(
f'QLabel{{font-size:15px;{make_watermark_qt_color_string(watermark_surrounding_backgroud_color_detail)};font-weight:bolder}}'
)
label.move(290, 540 - pox_y)
butten = QtWidgets.QPushButton(trans('输出技能数据'), 输出窗口)
butten.clicked.connect(
lambda state, d=deepcopy(pdata): self.输出数据(d))
butten.move(676, 540 - pox_y)
butten.setStyleSheet(按钮样式)
butten.resize(90, 21)
词条提升率计算.输出提升率 = 总伤害数值
butten = QtWidgets.QPushButton(trans('输出择优数据'), 输出窗口)
butten.clicked.connect(lambda state: 词条提升率计算.伤害计算(0))
butten.move(575, 540 - pox_y)
butten.setStyleSheet(按钮样式)
butten.resize(90, 21)
输出显示 = MainWindow(输出窗口)
self.输出窗口列表.append(输出显示)
输出显示.show()
def 输出数据(self, d):
try:
increase_counter(ga_category="carry详细功能使用", name="输出技能数据")
path = './详细数据'
if not os.path.exists(path):
os.makedirs(path)
count = max(len(d['装备']), len(d['词条']), len(d['技能']))
rows = []
for i in range(count):
t = d['词条'][i].split(':') if i < len(d['词条']) else []
rows.append([
(str(d['装备'][i]) if i < len(d['装备']) else ''),
(str(t[0][-2] + t[0][-1]) if i < len(d['词条']) else ''),
(str(t[1]) if i < len(d['词条']) else ''),
'',
(str(d['技能'][i][0]) if i < len(d['技能']) else ''),
(str(d['技能'][i][1]) if i < len(d['技能']) else ''),
(str(d['技能'][i][2]) if i < len(d['技能']) else ''),
(str(d['技能'][i][3]) if i < len(d['技能']) else ''),
(str(d['技能'][i][4]) if i < len(d['技能']) else ''),
(str(d['技能'][i][5]) if i < len(d['技能']) else ''),
(str(d['技能'][i][6]) if i < len(d['技能']) else ''),
(str(d['技能'][i][7]) if i < len(d['技能']) else ''),
])
result_path = os.path.join(
path, '{}-{}.csv'.format(d['名称'],
time.strftime('%m-%d-%H-%M-%S')))
result = open(result_path, 'w', encoding='gbk')
result.write(
"装备,词条类型,词条数值,,技能名称,技能等级,技能CD,技能次数,总伤害,平均伤害,伤害占比,技能倍率\n")
for row in rows:
result.write(','.join(row) + '\n')
result.close()
os.startfile(result_path)
except Exception as error:
pass
# endregion
# region 输入属性
def 输入属性(self, 属性, x=0):
i = self.攻击目标.currentIndex()
属性.防御输入 = 攻击目标[i][1]
属性.火抗输入 = 攻击目标[i][2]
属性.冰抗输入 = 攻击目标[i][3]
属性.光抗输入 = 攻击目标[i][4]
属性.暗抗输入 = 攻击目标[i][5]
if self.初始属性.远古记忆 != -1:
属性.远古记忆 = self.远古记忆.currentIndex()
if self.初始属性.刀魂之卡赞 != -1:
属性.刀魂之卡赞 = self.刀魂之卡赞.currentIndex()
属性.自适应选项 = copy([(1 if self.红色宠物装备.isChecked() else 0),
(1 if self.光环自适应.isChecked() else 0)])
# 属性.计算自适应方式 = self.单套择优方式选项.currentIndex()
if self.转甲选项.isChecked():
属性.转甲选项 = 1
else:
属性.转甲选项 = 0
for j in [self.等级调整, self.TP输入, self.次数输入, self.宠物次数]:
for i in j:
if i != '' and i.currentIndex() == -1:
i.setCurrentIndex(0)
for i in 属性.技能栏:
i.等级 = i.基础等级 + int(self.等级调整[self.角色属性A.技能序号[i.名称]].currentData())
if i.是否有伤害 == 1:
if i.TP上限 != 0:
i.TP等级 = int(
self.TP输入[self.角色属性A.技能序号[i.名称]].currentData())
if x == 0:
self.辟邪玉属性计算(属性)
elif x >= 100:
y = x - 100
辟邪玉列表[y].当前值 = 辟邪玉列表[y].最大值
辟邪玉列表[y].穿戴属性(属性)
if sum(self.希洛克选择状态) == 3:
属性.武器词条触发 = 1
if self.希洛克武器词条[0].currentIndex() == 1:
属性.希洛克武器词条 = 1
elif self.希洛克武器词条[0].currentIndex() == 2:
词条属性列表[self.希洛克武器词条[1].currentIndex()].加成属性(
属性, (self.希洛克武器词条[3].currentIndex() + 3) * 0.02)
if 属性.武器词条触发 == 1:
词条属性列表[self.希洛克武器词条[2].currentIndex()].加成属性(
属性, (self.希洛克武器词条[4].currentIndex() + 3) * 0.01)
try:
属性.时间输入 = int(float(self.时间输入.currentText()))
except:
属性.时间输入 = 25
属性.次数输入.clear()
属性.宠物次数.clear()
属性.装备切装.clear()
属性.技能切装.clear()
self.是否计算 = 1
for i in self.角色属性A.技能栏:
序号 = self.角色属性A.技能序号[i.名称]
if i.是否有伤害 == 1:
s = self.次数输入[序号].currentText()
s = s.replace(',', ',').replace('(', '(').replace(')', ')')
try:
if eval(s.replace('/CD', '1')) >= 0:
属性.次数输入.append(s)
except Exception as e:
logger.error(e)
QMessageBox.information(self, "错误",
"“{}”技能次数输入错误,请重新输入".format(i.名称))
self.是否计算 = 0
break
s = self.宠物次数[序号].currentText().replace(',', ',').replace(
'(', '(').replace(')', ')')
try:
if eval(s.replace('num', '1')) >= 0:
属性.宠物次数.append(s)
except:
QMessageBox.information(self, "错误",
"“{}”宠物次数输入错误,请重新输入".format(i.名称))
self.是否计算 = 0
break
if 切装模式 == 1:
if self.技能切装[序号].isChecked():
属性.技能切装.append(1)
else:
属性.技能切装.append(0)
else:
属性.次数输入.append('0')
属性.宠物次数.append('0')
属性.技能切装.append(0)
if 切装模式 == 1:
for i in range(12):
if self.装备切装[i].isChecked():
属性.装备切装.append(self.自选装备[i].currentData())
else:
属性.装备切装.append('无')
for i in range(len(self.复选框列表)):
if self.复选框列表[i].isChecked():
选项设置列表[选项设置序号[self.复选框列表list[i]]].适用效果(属性)
count = 0
count2 = 0
for i in equ.get_equ_list():
if i.品质 == '神话':
i.属性1选择 = self.神话属性选项[count * 4 + 0].currentIndex()
i.属性2选择 = self.神话属性选项[count * 4 + 1].currentIndex()
i.属性3选择 = self.神话属性选项[count * 4 + 2].currentIndex()
i.属性4选择 = self.神话属性选项[count * 4 + 3].currentIndex()
count += 1
if i.所属套装 == '智慧产物':
i.属性1选择 = self.改造产物选项[count2 * 4 + 0].currentIndex()
i.属性2选择 = self.改造产物选项[count2 * 4 + 1].currentIndex()
i.属性3选择 = self.改造产物选项[count2 * 4 + 2].currentIndex()
i.属性4选择 = self.改造产物选项[count2 * 4 + 3].currentIndex()
count2 += 1
属性.攻击属性 = self.攻击属性选项.currentIndex()
称号列表[self.称号.currentIndex()].城镇属性(属性)
if 属性.称号触发:
称号列表[self.称号.currentIndex()].触发属性(属性)
宠物列表[self.宠物.currentIndex()].城镇属性(属性)
self.加载护石(属性)
for i in range(12):
属性.是否增幅[i] = self.装备打造选项[i].currentIndex()
属性.强化等级[i] = self.装备打造选项[i + 12].currentIndex()
属性.改造等级[i] = self.装备打造选项[i + 24].currentIndex()
属性.武器锻造等级 = self.装备打造选项[36].currentIndex()
属性.类型 = self.装备打造选项[37].currentData()
try:
属性.主BUFF = float(self.BUFF输入.text()) / 100 + 1
except:
QMessageBox.information(self, "错误", "BUFF数值输入错误,已设置为默认数值")
self.BUFF输入.setText(str('%.1f' % ((self.角色属性A.主BUFF - 1) * 100)))
try:
if self.觉醒选择状态 == 1:
属性.觉醒之抉择技能 = 属性.技能栏[self.一觉序号].名称
elif self.觉醒选择状态 == 2:
属性.觉醒之抉择技能 = 属性.技能栏[self.二觉序号].名称
if self.角色属性A.屏蔽三觉 == True:
属性.技能栏[self.三觉序号].关联技能 = ['无']
else:
if self.角色属性A.技能栏[self.三觉序号].是否有伤害 == 1 and str(
属性.次数输入[self.三觉序号]) == '0':
属性.技能栏[self.三觉序号].关联技能 = ['无']
else:
属性.技能栏[self.三觉序号].关联技能 = [属性.觉醒之抉择技能]
except:
pass
属性.角色熟练度 = self.装备条件选择[0].currentIndex()
属性.技能栏空位 = self.装备条件选择[1].currentIndex()
属性.命运的抉择 = self.装备条件选择[2].currentIndex()
属性.天命无常 = self.装备条件选择[3].currentIndex()
属性.悲剧的残骸 = self.装备条件选择[4].currentIndex()
属性.先知者的预言 = self.装备条件选择[5].currentIndex()
属性.贫瘠沙漠的遗产 = self.装备条件选择[6].currentIndex()
属性.幸运三角 = self.装备条件选择[7].currentIndex()
属性.擎天战甲 = self.装备条件选择[8].currentIndex()
属性.持续伤害计算比例 = 1 - 0.01 * self.装备条件选择[9].currentIndex()
属性.军神的隐秘遗产 = self.装备条件选择[10].currentIndex()
属性.太极天帝剑 = self.装备条件选择[11].currentIndex()
属性.噙毒手套 = self.装备条件选择[12].currentIndex()
# 属性.绿色生命的面容 = self.装备条件选择[12].currentIndex()
属性.产物升级 = 1 if self.智慧产物升级.isChecked() else 0
属性.黑鸦武器择优模式 = self.武器择优模式.currentIndex()
属性.黑鸦词条 = []
for i in range(4):
temp = [
self.黑鸦词条[i][0].currentIndex(), self.黑鸦词条[i][1].currentIndex(),
((2 if i > 0 else 4)) * (self.黑鸦词条[i][2].currentIndex() + 1), 0
]
属性.黑鸦词条.append(temp)
self.希洛克属性计算(属性)
self.奥兹玛属性计算(属性)
self.基础属性(属性)
def 基础属性(self, 属性):
if 切装模式 == 1:
属性.切装修正.clear()
名称 = ['力量', '智力', '物攻', '魔攻', '独立', '属强']
num = 0
for i in self.切装修正属性:
try:
if i.text() != '':
属性.切装修正.append(int(i.text()))
else:
属性.切装修正.append(0)
except:
QMessageBox.information(self, "错误",
名称[num] + " 切装修正输入格式错误,已重置为空")
i.setText('')
属性.切装修正.append(0)
num += 1
for i in range(len(self.列名称) - 3):
for j in range(len(行名称1)):
if self.属性设置输入[i][j].text() != '':
try:
float(self.属性设置输入[i][j].text())
except:
QMessageBox.information(
self, "错误",
self.行名称[(j + len(行名称1)) if i >= len(列名称1) else j]
+ ":" + self.列名称[i] + " 输入格式错误,已重置为空")
self.属性设置输入[i][j].setText('')
temp = []
num = len(self.列名称) - 3
for j in range(len(self.属性设置输入[num])):
if self.属性设置输入[num][j].text() != '':
try:
temp.append(float(self.属性设置输入[num][j].text()) / 100)
if temp[-1] > 1 or temp[-1] < -0.2:
QMessageBox.information(
self, "错误",
self.修正列表名称[j] + " 输入数值超出[-20,100],已重置为空")
temp[-1] = 0.0
self.属性设置输入[num][j].setText('')
except:
temp.append(0.0)
QMessageBox.information(self, "错误",
self.修正列表名称[j] + " 输入格式错误,已重置为空")
self.属性设置输入[num][j].setText('')
else:
temp.append(0.0)
属性.百分比力智加成(temp[0])
属性.百分比三攻加成(temp[1])
属性.伤害增加加成(temp[2])
属性.附加伤害加成(temp[3])
属性.属性附加加成(temp[4])
属性.暴击伤害加成(temp[5])
属性.最终伤害加成(temp[6])
属性.技能攻击力加成(temp[7])
for i in [0, 6, 9]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 0 and j in [1, 5, 10, 16]:
属性.进图力量 += float(self.属性设置输入[i][j].text())
else:
属性.力量 += float(self.属性设置输入[i][j].text())
for i in [1, 6, 9]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 1 and j in [1, 5, 10, 16]:
属性.进图智力 += float(self.属性设置输入[i][j].text())
else:
属性.智力 += float(self.属性设置输入[i][j].text())
for i in [2, 7, 10]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 2 and j in [1, 5, 10, 16]:
属性.进图物理攻击力 += float(self.属性设置输入[i][j].text())
else:
属性.物理攻击力 += float(self.属性设置输入[i][j].text())
for i in [3, 7, 10]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 3 and j in [1, 5, 10, 16]:
属性.进图魔法攻击力 += float(self.属性设置输入[i][j].text())
else:
属性.魔法攻击力 += float(self.属性设置输入[i][j].text())
for i in [4, 7, 10]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 4 and j in [1, 5, 10, 16]:
属性.进图独立攻击力 += float(self.属性设置输入[i][j].text())
else:
属性.独立攻击力 += float(self.属性设置输入[i][j].text())
for i in [5, 8]:
for j in range(17):
if self.属性设置输入[i][j].text() != '':
if i == 5 and j in [1, 5, 10, 16]:
属性.进图属强 += float(self.属性设置输入[i][j].text())
elif i == 5 and j == 3: # 3为婚房不吃辟邪玉
属性.所有属性强化(float(self.属性设置输入[i][j].text()))
else:
属性.所有属性强化加成(float(self.属性设置输入[i][j].text()))
for i in self.细节选项输入:
for j in i:
if j.isEnabled():
if j.currentData() not in ['', '无']:
try:
细节选项列表[细节选项序号[j.currentData()]].效果(属性)
except:
for k in 属性.技能栏:
if j.currentData() == k.名称 + 'Lv+1':
k.等级加成(1)
break
if self.奶量buff输入[0].text() not in ['', '无']:
# print(属性.力量)
属性.进图力量 += int(self.奶量buff输入[0].text())
属性.进图智力 += int(self.奶量buff输入[0].text())
# print(属性.力量)
if self.奶量buff输入[1].text() not in ['', '无']:
属性.进图物理攻击力 += int(self.奶量buff输入[1].text())
属性.进图魔法攻击力 += int(self.奶量buff输入[1].text())
属性.进图独立攻击力 += int(self.奶量buff输入[1].text())
# 守门人全属强方案
if self.守门人全属强.isChecked():
if self.属性设置输入[0][14].text() != '':
属性.力量 -= float(self.属性设置输入[0][14].text())
if self.属性设置输入[1][14].text() != '':
属性.智力 -= float(self.属性设置输入[1][14].text())
if self.属性设置输入[2][14].text() != '':
属性.物理攻击力 -= float(self.属性设置输入[2][14].text())
if self.属性设置输入[3][14].text() != '':
属性.魔法攻击力 -= float(self.属性设置输入[3][14].text())
if self.属性设置输入[4][14].text() != '':
属性.独立攻击力 -= float(self.属性设置输入[4][14].text())
if self.属性设置输入[5][7].text() != '':
属性.所有属性强化加成(-(float(self.属性设置输入[5][7].text())))
if self.属性设置输入[5][14].text() != '':
属性.所有属性强化加成(-(float(self.属性设置输入[5][14].text())))
for j in range(5, 10):
if self.属性设置输入[6][j].text() != '':
属性.力量 -= float(self.属性设置输入[6][j].text())
属性.智力 -= float(self.属性设置输入[6][j].text())
if self.属性设置输入[7][j].text() != '':
属性.物理攻击力 -= float(self.属性设置输入[7][j].text())
属性.魔法攻击力 -= float(self.属性设置输入[7][j].text())
属性.独立攻击力 -= float(self.属性设置输入[7][j].text())
if self.属性设置输入[8][j].text() != '':
属性.所有属性强化加成(-(float(self.属性设置输入[8][j].text())))
属性.物理攻击力 += 60
属性.魔法攻击力 += 60
属性.独立攻击力 += 60
属性.所有属性强化加成(int(28 * 3 + 12 + 30 + 7))
# 龙珠时附魔不替换
if self.属性设置输入[7][11].text() == '' or self.属性设置输入[8][11].text(
) == '':
if self.属性设置输入[6][11].text() != '':
属性.力量 -= float(self.属性设置输入[6][11].text())
属性.智力 -= float(self.属性设置输入[6][11].text())
if self.属性设置输入[7][11].text() != '':
属性.物理攻击力 -= float(self.属性设置输入[7][11].text())
属性.魔法攻击力 -= float(self.属性设置输入[7][11].text())
属性.独立攻击力 -= float(self.属性设置输入[7][11].text())
if self.属性设置输入[8][11].text() != '':
属性.所有属性强化加成(-(float(self.属性设置输入[8][11].text())))
# 武器全属强为13
属性.所有属性强化加成(int(13))
# endregion