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
', 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
', 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
', value=x) else: if y == 0: y = x self.力量 += x self.智力 += y return '' def 持续伤害加成(self, x): if self.装备描述 == 1: return trans('{持续伤害} +$value
', value=to_percent(x)) else: self.持续伤害 += x return '' def 属性附加加成(self, x): if self.装备描述 == 1: return trans('{属性附加伤害} +$value
', value=to_percent(x)) else: self.属性附加 += self.属性附加伤害增加增幅 * x return '' def 技能攻击力加成(self, x, 辟邪玉加成=1,适用累加=1): if self.装备描述 == 1: return trans('{技能攻击力} +$value
', 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
', 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
', 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
', 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
', 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
', 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
", 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
", 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
", 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
", 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
", 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
", value=to_percent(x, 2)) else: self.攻击速度 += x return '' def 移动速度增加(self, x): if self.装备描述 == 1: return trans("{移动速度} +$value
", value=to_percent(x, 2)) else: self.移动速度 += x return '' def 施放速度增加(self, x): if self.装备描述 == 1: return trans("{释放速度} +$value
", value=to_percent(x, 2)) else: self.施放速度 += x return '' def 命中率增加(self, x): if self.装备描述 == 1: return trans("{命中率} +$value
", value=to_percent(x, 1)) else: self.命中率 += x return '' def 物理暴击率增加(self, x): if self.装备描述 == 1: return trans("{物理暴击率} +$value
", value=to_percent(x)) else: self.物理暴击率 += x return '' def 魔法暴击率增加(self, x): if self.装备描述 == 1: return trans("{魔法暴击率} +$value
", 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{} {}+{}
").format(minLv, label, lv) return ("Lv{}-{} {}+{}
").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 -{}
").format(min, label, to_percent(x)) else: return ("Lv{}-{} {}CD -{}
").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{} {}+{}%
".format(min, label, round(x * 100)) else: return "Lv{}-{} {}+{}%
".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
', value=x) else: self.进图属强 += int(self.所有属性强化增加 * x if 辟邪玉加成 == 1 else x) return '' def 技能倍率加成(self, lv, x): if self.装备描述 == 1: return trans("Lv$level {技能攻击力} +$value
", 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
", name=名称, value=to_percent(倍率 - 1)) if CD != 1: tem += trans("[{$name}]{CD} +$value
", 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] += '
' 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('{}'.format( trans("仅在极速模式和套装模式下生效"))) self.百变怪选项.setStyleSheet(复选框样式) self.计算模式选择 = MyQComboBox(self.main_frame1) self.计算模式选择.addItems(['计算模式:极速模式', '计算模式:套装模式', '计算模式:单件模式']) self.计算模式选择.move(750, 613) self.计算模式选择.resize(235, 24) self.计算模式选择.setStyleSheet(下拉框样式) self.计算模式选择.setToolTip('{}'.format( trans( '极速模式:533和3332(散搭) (不含智慧产物)

套装模式:533、3332(散搭)和3233(双防具) (不含智慧产物)

单件模式:所有组合 (不含百变怪)' ))) 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('{}'.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('{}'.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('{}'.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('{}'.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( '{$name}
', name=i.名称) if i.备注 is not None and i.备注 != '': tempstr += trans('{$value}

', value=i.备注) else: tempstr += '
' tempstr += trans('{所在等级}:$level
', level=i.所在等级) tempstr += trans('{等级上限}:$limit', limit=i.等级上限) if i.是否主动 == 1: tempstr += trans('
{百分比}:$value%', value=int(i.等效百分比(self.角色属性A.武器类型))) if i.TP上限 != 0: tempstr += trans('
{TP成长}:$value', value=to_percent(i.TP成长)) tempstr += trans('
{TP上限}:$value', value=i.TP上限) tempstr += '' 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( '{$name}
', name=i.名称) if i.备注 is not None and i.备注 != '': tempstr += trans('{$value}

', value=i.备注) else: tempstr += '
' tempstr += trans('{所在等级}:$level
', level=i.所在等级) tempstr += trans('{等级上限}:$limit', limit=i.等级上限) tempstr += '' 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('{最高值参考}:$value', 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 = '{}

'.format( trans('假定基础伤害为100,词条1=50%,词条2=50%:')) temp += trans('5%黄字增幅,佩戴前:200,佩戴后:205
') temp += trans('暴伤终伤白字属白力智三攻同上,黄字向下取整
') temp += trans('技攻辟邪玉加成等级技攻(歧路腰类)
不加成具体技能技攻(歧路鞋类)

') temp += trans( '3%技攻增幅,佩戴前:100*1.5*1.5=225
佩戴后:100*1.515*1.515=229.5225

' ) # temp += '附加、最终、百分力智增幅:宠物相关词条不享受加成
' temp += trans('属强增幅:唤醒(13)婚房(8)药剂和技能属强不享受加成
') temp += trans('进图触发属强单独计算向下取整

') temp += '{}
'.format( trans( '属白增幅分对应属性,计算器未作区分
双属性附加(星之海)需手动计算并在第三页修正

计算方式仅供参考,请以实际游戏为准!' )) 标签.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("计算时自动替换细节页的附魔勋章为全属强方案
") + trans('自带单属强职业不可使用
') + trans('守门人属强:全属强+30*3
') + trans( '武器:全属强+13(若原附魔为龙珠时不替换)
首饰:全属强+28*3(25*3站街修正属强自行-9)
') + trans('辅助装备:全属强+12
魔法石:全属强+30
勋章:全属强+7
宠物附魔:三攻+60
') ) 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('' + self.初始属性.技能栏[ self.初始属性.技能序号[self.护石选项[self.护石栏[x].currentIndex()]]].护石描述( self.护石类型选项[x].currentIndex()) + '') except: self.护石栏[x].setToolTip('暂缺') 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): 警告 = "技能等级调整指调整学习等级(非实际等级)
一般用于修正天空下装技能,一二觉时装切装
其余等级加成会自动计算,请勿手动调整" 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('' + 词条解释[i] + '') 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, "自动修正计算完毕", "仅对站街修正进行了修改,使面板与输入一致
请自行核对其它页面 非力智三攻属强 条目") 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 = ''.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 + '{}'.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( '{} {}'. format(str(int(站街.站街力量())), str(int(进图.面板力量())))) 显示[0].setStyleSheet("QLabel{font-size:12px;}") 显示[1].setText( '{} {}'. format(str(int(站街.站街物理攻击力())), str(int(进图.面板物理攻击力())))) 显示[1].setStyleSheet("QLabel{font-size:12px;}") 显示[2].setText( '{} {}'. format(str(int(站街.站街智力())), str(int(进图.面板智力())))) 显示[2].setStyleSheet("QLabel{font-size:12px;}") 显示[3].setText( '{} {}'. format(str(int(站街.站街魔法攻击力())), str(int(进图.面板魔法攻击力())))) 显示[3].setStyleSheet("QLabel{font-size:12px;}") 显示[4].setText( '{} {} {}'.format(str(int(站街.站街独立攻击力())), str(int(进图.面板独立攻击力())), get_mac_address()[0:8])) 显示[4].setStyleSheet("QLabel{font-size:12px;}") 显示[5].setText( ('' + trans('火') + '({})' + trans('冰') + '({})' + trans('光') + '({})' + trans('暗') + '({})').format( int(站街.火属性强化), int(站街.冰属性强化), int(站街.光属性强化), int(站街.暗属性强化))) 显示[5].setStyleSheet("QLabel{font-size:12px;}") 显示[6].setText( ('' + trans('火') + '({})' + trans('冰') + '({})' + trans('光') + '({})' + trans('暗') + '({})').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("{}".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 = '{} '.format(int( # 站街.站街独立攻击力())) # tempstr += '{}'.format(int(进图.面板独立攻击力())) # 显示[4].setText(tempstr) # # 属性强化 # tempstr = '' # # if 进图.所有属性强化增加 != 1.0: # # x = 进图.所有属性强化增加 - 1 # # y = ' +{}%' if x > 0 else ' {}%' # # tempstr += '{}'.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] = '{}'.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 )] += '' + 套装名称[ i] + '
' + equ.get_suit_by_name(套装名称[i]).装备描述( self.角色属性B)[:-4] + '

' # 自适应属性 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('
', ' ')) 显示[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 = '' temp += '' + \ trans(self.称号.currentData()) + '
' temp += 称号列表[self.称号.currentIndex()].装备描述(self.角色属性B)[:-4] temp += '
' return temp def 宠物描述(self): temp = '' temp += '' + self.宠物.currentText( ) + '
' temp += 宠物列表[self.宠物.currentIndex()].装备描述(self.角色属性B)[:-4] temp += '
' 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( '{$name}', color=颜色[装备.品质], name=装备.名称)) # 等级 品质 类型 部位 tempstr[i] += trans('
Lv$level {$rarity} {$type}({$part})', level=装备.等级, rarity=装备.品质, type=装备.类型, part=装备.部位) # 套装 if 装备.所属套装 != '无': if 装备.所属套装 != '智慧产物': y = 装备.所属套装 else: y = 装备.所属套装2 else: y = '' if y != '': tempstr[i] += trans( '
{$value} {套装}', value=y) # 精通描述 if i < 5: x = 属性.防具精通计算(i) y = trans('
{精通}:') for n in 属性.防具精通属性: y += trans(n) + ' ' tempstr[i] += y + '+' + str(x) # 打造描述 if 装备.所属套装 != '智慧产物': # 强化描述 if 属性.强化等级[i] != 0: if i == 8: tempstr[i] += trans( '
+$value {强化}:', value=属性.强化等级[i]) tempstr[i] += trans('{三攻} + $value', value=耳环计算(装备.等级, 装备.品质, 属性.强化等级[i])) if i in [9, 10]: tempstr[i] += trans( '
+$value {强化}:', value=属性.强化等级[i]) tempstr[i] += trans('{四维} + $value', value=左右计算(装备.等级, 装备.品质, 属性.强化等级[i])) if i == 11: tempstr[i] += trans( '
+$value {强化}:', value=属性.强化等级[i]) tempstr[i] += trans('{物理攻击力} + $value', value=武器计算(装备.等级, 装备.品质, 属性.强化等级[i], 装备.类型, '物理')) tempstr[i] += trans( '
+$value {强化}:', value=属性.强化等级[i]) tempstr[i] += trans('{魔法攻击力} + $value', value=武器计算(装备.等级, 装备.品质, 属性.强化等级[i], 装备.类型, '魔法')) # 锻造描述 if i == 11 and 属性.武器锻造等级 != 0: tempstr[i] += trans( '
+$value {锻造} ', value=属性.武器锻造等级) tempstr[i] += trans('{独立攻击力} + $value', value=锻造计算(装备.等级, 装备.品质, 属性.武器锻造等级)) # 增幅描述 if 属性.是否增幅[i] == 1: if tempstr[i] != '': tempstr[i] += '
' value = 增幅计算(装备.等级, 装备.品质, 属性.强化等级[i], 属性.增幅版本) tempstr[i] += trans("+$value {增幅}:", value=属性.强化等级[i]) if '物理' in 属性.类型 or '力量' in 属性.类型: tempstr[i] += trans('异次元力量') else: tempstr[i] += trans('异次元智力') tempstr[i] += ' +{}'.format(value) # 遴选描述 if tempstr[i] != '': tempstr[i] += '
' if i == 2 and 属性.黑鸦词条[3][0] != 0 and 属性.变换词条[3][1] != 0: tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "
" tempstr[i] += 属性.黑鸦词条[3][4] # 下装 elif i == 7 and 属性.黑鸦词条[1][0] != 0 and 属性.变换词条[1][1] != 0: tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "
" tempstr[i] += 属性.黑鸦词条[1][4] # 戒指 elif i == 9 and 属性.黑鸦词条[2][0] != 0 and 属性.变换词条[2][1] != 0: tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "
" tempstr[i] += 属性.黑鸦词条[2][4] # 辅助 elif i == 11 and 属性.黑鸦词条[0][0] != 0 and 属性.变换词条[0][1] != 0: tempstr[i] += 装备.装备描述_变换属性(属性)[:-4] + "
" tempstr[i] += 属性.黑鸦词条[0][4] # 武器 else: tempstr[i] += 装备.装备描述(属性)[:-4] # 希洛克描述 if i in [2, 7, 9]: if 希洛克[i] != '': tempstr[i] += trans( '
{希洛克融合属性}:
') tempstr[i] += 希洛克[i] # 奥兹玛描述 if i in [1, 3, 4, 6, 10]: if 奥兹玛[i] != '': tempstr[i] += trans( '
{奥兹玛融合属性}:
') tempstr[i] += 奥兹玛[i] # 希洛克武器描述 if self.希洛克武器词条[0].currentIndex() > 0 and i == 11: tempstr[i] += trans( '
{希洛克融合属性}:
') if self.希洛克武器词条[0].currentIndex() == 1: tempstr[i] += trans("{属性1}:{$value} +10%
", value=武器词条属性[属性.词条选择[0]]) if 数量 == 3: tempstr[i] += trans("{属性2}:{$value} +5%
", value=武器词条属性[属性.词条选择[1]]) else: tempstr[i] += trans( "{属性1}:{$a} +$b%
", a=武器词条属性[self.希洛克武器词条[1].currentIndex()], b=(self.希洛克武器词条[3].currentIndex() + 3) * 2) if 数量 == 3: tempstr[i] += trans( "{属性2}:{$a} +$b%
", a=武器词条属性[self.希洛克武器词条[2].currentIndex()], b=(self.希洛克武器词条[4].currentIndex() + 3) * 1) if tempstr[i].endswith('
'): tempstr[i] = tempstr[i][:-4] tempstr[i] += '
' 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 '无变化' elif temp1 > 0: return '+' + self.格式化输出( str(int(temp1)), 1) + ' (' + str( '%.2f' % abs(temp2)) + '%)' else: return '' + self.格式化输出( str(int(temp1)), 1) + ' (' + str( '%.2f' % abs(temp2)) + '%)' else: if temp2 == 0: return '无变化' elif temp2 > 0: return '+' + str( '%.2f' % temp2) + '%' else: return '' + str( '%.2f' % temp2) + '%' 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 += '' + trans( self.角色属性B.技能栏[i].名称) + '
' tempstr += self.角色属性B.技能栏[i].技能描述(self.角色属性B.武器类型) else: 不适用于title = trans('({不适用于}:') if self.角色属性B.技能栏[i].关联技能 != [ '无' ] and self.角色属性B.技能栏[i].加成倍率(self.角色属性B.武器类型) != 1: 加成倍率key = '{加成倍率}:$value
' 关联技能title = trans('{关联技能}:') tempstr += trans( '{$value}
', 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 += ')
' if self.角色属性B.技能栏[i].关联技能2 != ['无']: tempstr += "
" + 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 += ')
' if self.角色属性B.技能栏[i].关联技能3 != ['无']: tempstr += "
" + 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 += ')
' if self.角色属性B.技能栏[i].冷却关联技能 != [ '无' ] and self.角色属性B.技能栏[i].CD缩减倍率(self.角色属性B.武器类型) != 1: 冷却关联title = trans('{冷却关联技能}:') 冷却缩减key = "{冷却缩减}:$value
" if tempstr == '': tempstr += trans( '{$value}
', value=self.角色属性B.技能栏[i].名称) else: tempstr += '
' 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 += ')
' 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 += ')' 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 += ')' 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('' + 词条解释[i] + '') 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))
' + 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 += '' 被动数据 = 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( '{远古记忆}
{智力}+$value
', 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( '{刀魂之卡赞}
{力量、智力}+$value
', 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