Lv100版本源码上传
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# -------------------------------
|
||||
# File : logging
|
||||
# DateTime : 2020/6/10 0010 17:21
|
||||
# Author : Chen Ji
|
||||
# Email : fzls.zju@gmail.com
|
||||
# -------------------------------
|
||||
|
||||
from .utils.common import *
|
||||
import multiprocessing
|
||||
from datetime import datetime
|
||||
|
||||
process_name = multiprocessing.current_process().name
|
||||
time_str = datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
|
||||
only_need_main_process_log = True
|
||||
if not only_need_main_process_log or "MainProcess" in process_name:
|
||||
fileHandler = logging.FileHandler("{0}/{1}_{2}_{3}.log".format(
|
||||
log_directory, logger.name, process_name, time_str),
|
||||
encoding="utf-8")
|
||||
fileHandler.setFormatter(logFormatter)
|
||||
fileHandler.setLevel(logging.DEBUG)
|
||||
logger.addHandler(fileHandler)
|
||||
|
||||
consoleHandler = logging.StreamHandler()
|
||||
consoleHandler.setFormatter(logFormatter)
|
||||
consoleHandler.setLevel(logging.INFO)
|
||||
logger.addHandler(consoleHandler)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,572 @@
|
||||
from PublicReference.utils.common import to_int
|
||||
from PublicReference.view.Page import Page
|
||||
from PyQt5.QtWidgets import QLabel, QGraphicsOpacityEffect
|
||||
|
||||
from PublicReference.equipment.buff.武器融合_buff import *
|
||||
from PublicReference.equipment.buff.黑鸦_buff import 装备变换属性列表, 武器变换属性列表
|
||||
from PublicReference.utils.constant import *
|
||||
from PublicReference.equipment.equ_list import *
|
||||
|
||||
|
||||
class 登记窗口(Page):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def 初始化(self):
|
||||
self.初始化 = True
|
||||
self.初始化UI()
|
||||
self.初始化 = False
|
||||
|
||||
def 初始化UI(self):
|
||||
icon = store.get("/app/window/icon")
|
||||
bgImg = store.get("/app/window/background_image")
|
||||
self.setStyleSheet('''QToolTip {
|
||||
background-color: black;
|
||||
color: white;
|
||||
border: 0px
|
||||
}''')
|
||||
self.setFixedSize(960, 560)
|
||||
self.setWindowTitle("登记设置")
|
||||
self.setWindowIcon(icon)
|
||||
backgroundColorLabel = QLabel(self)
|
||||
backgroundColorLabel.resize(self.width(), self.height())
|
||||
backgroundColorLabel.setStyleSheet(
|
||||
"QLabel{background-color:rgba(50,50,50,1)}")
|
||||
graphicsEffect = QGraphicsOpacityEffect()
|
||||
graphicsEffect.setOpacity(0.1)
|
||||
backgroundImageLabel = QLabel(self)
|
||||
backgroundImageLabel.setPixmap(bgImg)
|
||||
backgroundImageLabel.move(0, int((self.height() - 1230) / 6))
|
||||
backgroundImageLabel.setGraphicsEffect(graphicsEffect)
|
||||
borderLabel = QLabel(self)
|
||||
borderLabel.resize(self.width() - 4, self.height() - 2)
|
||||
borderLabel.move(2, -1)
|
||||
borderLabel.setStyleSheet("QLabel{border:1px solid black}")
|
||||
|
||||
yesButton = QPushButton("应用", self)
|
||||
yesButton.move(700, 500)
|
||||
yesButton.resize(80, 24)
|
||||
yesButton.setStyleSheet(按钮样式)
|
||||
yesButton.clicked.connect(lambda _: self.设置换装())
|
||||
|
||||
cancelButton = QPushButton("取消", self)
|
||||
cancelButton.move(790, 500)
|
||||
cancelButton.resize(80, 24)
|
||||
cancelButton.setStyleSheet(按钮样式)
|
||||
cancelButton.clicked.connect(lambda _: self.closeWindow())
|
||||
|
||||
resetButton = QPushButton("全部重置", self)
|
||||
resetButton.move(700, 460)
|
||||
resetButton.resize(170, 24)
|
||||
resetButton.setStyleSheet(按钮样式)
|
||||
resetButton.clicked.connect(lambda _: self.reset())
|
||||
|
||||
self.初始化自选装备UI()
|
||||
self.初始化奥兹玛UI()
|
||||
self.初始化希洛克UI()
|
||||
self.初始化遴选UI()
|
||||
self.初始化残香UI()
|
||||
|
||||
def showEvent(self, event):
|
||||
self.初始化数据()
|
||||
return super().showEvent(event)
|
||||
|
||||
def 初始化数据(self):
|
||||
self.初始化装备()
|
||||
self.初始化希洛克()
|
||||
self.初始化奥兹玛()
|
||||
self.初始化遴选()
|
||||
|
||||
def 初始化装备(self):
|
||||
equips = store.first("/buffer/data/register/equips",
|
||||
"/buffer/memory/equips")
|
||||
amplifies = store.first("/buffer/data/register/amplifies",
|
||||
"/buffer/data/amplifies")
|
||||
for 部位 in range(len(equips)):
|
||||
self.自选装备[部位].setCurrentText(equips[部位])
|
||||
self.自选增幅选项[部位].setCurrentIndex(amplifies[部位])
|
||||
|
||||
self.站街面板输入.setText(
|
||||
str(store.get('/buffer/data/register/display_power', '')))
|
||||
|
||||
def 初始化希洛克(self):
|
||||
sirocos = store.first("/buffer/data/register/siroco",
|
||||
"/buffer/data/siroco")
|
||||
for i in range(len(sirocos)):
|
||||
self.希洛克选择(i, sirocos[i])
|
||||
weapon_fusion = store.first("/buffer/data/register/weapon_fusion",
|
||||
"/buffer/data/weapon_fusion", [0] * 4)
|
||||
self.武器融合属性A.setCurrentIndex(weapon_fusion[0])
|
||||
self.武器融合属性A2.setCurrentIndex(weapon_fusion[1])
|
||||
self.武器融合属性B.setCurrentIndex(weapon_fusion[2])
|
||||
self.武器融合属性B2.setCurrentIndex(weapon_fusion[3])
|
||||
|
||||
def 初始化奥兹玛(self):
|
||||
ozmas = store.first("/buffer/data/register/ozma", "/buffer/data/ozma")
|
||||
for i in range(len(ozmas)):
|
||||
self.奥兹玛选择(i, ozmas[i])
|
||||
|
||||
def 初始化遴选(self):
|
||||
black_purgatory = store.first("/buffer/data/register/black_purgatory",
|
||||
"/buffer/data/black_purgatory")
|
||||
for i in range(len(black_purgatory)):
|
||||
self.黑鸦词条[i][1].setCurrentIndex(black_purgatory[i][1])
|
||||
if len(black_purgatory[i]) > 3:
|
||||
self.黑鸦词条[i][3].setCurrentIndex(black_purgatory[i][3])
|
||||
|
||||
def reset(self):
|
||||
store.delete("^/buffer/data/register/.*$")
|
||||
self.初始化数据()
|
||||
|
||||
def 设置换装(self):
|
||||
if self.初始化:
|
||||
return
|
||||
自选 = []
|
||||
增幅 = []
|
||||
黑鸦 = []
|
||||
|
||||
for i in range(len(self.自选装备)):
|
||||
equip = self.自选装备[i].currentText()
|
||||
自选.append(equip)
|
||||
增幅.append(self.自选增幅选项[i].currentIndex() if equip != '无' else -1)
|
||||
for i in range(len(self.黑鸦词条)):
|
||||
黑鸦.append([
|
||||
2,
|
||||
self.黑鸦词条[i][1].currentIndex(),
|
||||
self.黑鸦词条[i][3].currentIndex(),
|
||||
])
|
||||
|
||||
store.set("/buffer/data/register/equips", 自选)
|
||||
store.set("/buffer/data/register/siroco", self.希洛克选择状态)
|
||||
store.set("/buffer/data/register/ozma", self.奥兹玛选择状态)
|
||||
store.set("/buffer/data/register/black_purgatory", 黑鸦)
|
||||
store.set("/buffer/data/register/amplifies", 增幅)
|
||||
store.set("/buffer/data/register/amplifies", 增幅)
|
||||
store.set("/buffer/data/register/weapon_fusion", [
|
||||
self.武器融合属性A.currentIndex(),
|
||||
self.武器融合属性A2.currentIndex(),
|
||||
self.武器融合属性B.currentIndex(),
|
||||
self.武器融合属性B2.currentIndex(),
|
||||
])
|
||||
|
||||
store.set('/buffer/data/register/display_power',
|
||||
to_int(self.站街面板输入.text()))
|
||||
|
||||
store.emit("/buffer/event/register_changed")
|
||||
self.closeWindow()
|
||||
|
||||
def 初始化自选装备UI(self):
|
||||
count = 0
|
||||
self.装备锁定 = []
|
||||
self.自选装备 = []
|
||||
self.自选增幅选项 = []
|
||||
|
||||
propertyA = store.get("/buffer/temp/property_a")
|
||||
|
||||
标签 = QLabel('锁定', self)
|
||||
标签.setAlignment(Qt.AlignCenter)
|
||||
标签.setStyleSheet(标签样式)
|
||||
标签.resize(70, 25)
|
||||
标签.move(20, 20)
|
||||
|
||||
标签 = QLabel('单件选择', self)
|
||||
标签.setAlignment(Qt.AlignCenter)
|
||||
标签.setStyleSheet(标签样式)
|
||||
标签.resize(240, 25)
|
||||
标签.move(70, 20)
|
||||
|
||||
for i in 部位列表:
|
||||
|
||||
lock = QCheckBox(i, self)
|
||||
lock.setStyleSheet(复选框样式)
|
||||
lock.resize(70, 22)
|
||||
lock.move(20, 50 + 30 * count)
|
||||
self.装备锁定.append(lock)
|
||||
|
||||
x = MyQComboBox(self)
|
||||
for j in range(32):
|
||||
x.addItem(str(j))
|
||||
x.resize(55, 20)
|
||||
x.move(90, 50 + 30 * count)
|
||||
self.自选增幅选项.append(x)
|
||||
|
||||
combo = MyQComboBox(self)
|
||||
|
||||
self.自选装备.append(combo)
|
||||
combo.resize(220, 22)
|
||||
combo.move(150, 50 + 30 * count)
|
||||
combo.addItem("无")
|
||||
for j in equ.get_equ_list():
|
||||
if j.部位 == i:
|
||||
if i == '武器':
|
||||
if j.类型 in propertyA.武器选项:
|
||||
combo.addItem(j.名称)
|
||||
else:
|
||||
combo.addItem(j.名称)
|
||||
count += 1
|
||||
x = 400
|
||||
y = 20
|
||||
|
||||
标签 = QLabel(trans('批量选择'), self)
|
||||
标签.setAlignment(Qt.AlignCenter)
|
||||
标签.setStyleSheet(标签样式)
|
||||
标签.resize(160, 25)
|
||||
标签.move(x, y)
|
||||
|
||||
套装类型 = ['防具', '首饰', '特殊', '上链左', '镯下右', '环鞋指']
|
||||
count = 0
|
||||
self.自选套装 = []
|
||||
for i in 套装类型:
|
||||
self.自选套装.append(MyQComboBox(self))
|
||||
套装名称 = []
|
||||
for j in equ.get_suit_list():
|
||||
if j.名称 not in 套装名称 and j.类型 == i:
|
||||
套装名称.append(j.名称)
|
||||
y += 30
|
||||
self.自选套装[count].addItems(套装名称)
|
||||
self.自选套装[count].resize(160, 22)
|
||||
self.自选套装[count].move(400, y)
|
||||
self.自选套装[count].activated.connect(
|
||||
lambda state, index=count: self.自选套装更改(index))
|
||||
count += 1
|
||||
|
||||
y += 30
|
||||
|
||||
神话部位选项 = MyQComboBox(self)
|
||||
神话部位选项.addItems(['神话部位:无', '神话部位:上衣', '神话部位:手镯', '神话部位:耳环'])
|
||||
神话部位选项.resize(160, 22)
|
||||
神话部位选项.move(400, y)
|
||||
神话部位选项.activated.connect(lambda index: self.神话部位更改(index))
|
||||
|
||||
y += 30
|
||||
|
||||
label = QLabel('站街面板', self)
|
||||
label.setAlignment(Qt.AlignCenter)
|
||||
label.setStyleSheet(标签样式)
|
||||
label.resize(60, 25)
|
||||
label.move(x, y)
|
||||
|
||||
self.站街面板输入 = QLineEdit(self)
|
||||
self.站街面板输入.move(x + 60, y)
|
||||
self.站街面板输入.resize(70, 24)
|
||||
self.站街面板输入.setStyleSheet(输入框样式)
|
||||
|
||||
y += 30
|
||||
|
||||
add = QPushButton('打造↑', self)
|
||||
add.clicked.connect(lambda state: self.批量打造(1))
|
||||
add.move(x, y)
|
||||
add.resize(40, 24)
|
||||
add.setStyleSheet(按钮样式)
|
||||
|
||||
minus = QPushButton('打造↓', self)
|
||||
minus.clicked.connect(lambda state: self.批量打造(-1))
|
||||
minus.move(x + 60, y)
|
||||
minus.resize(40, 24)
|
||||
minus.setStyleSheet(按钮样式)
|
||||
|
||||
reset = QPushButton('重置', self)
|
||||
reset.clicked.connect(lambda state: self.初始化装备())
|
||||
reset.move(x + 120, y)
|
||||
reset.resize(40, 24)
|
||||
reset.setStyleSheet(按钮样式)
|
||||
|
||||
def 批量打造(self, offset):
|
||||
for i in range(len(self.自选增幅选项)):
|
||||
y = max(min(self.自选增幅选项[i].currentIndex() + offset, 31), 0)
|
||||
self.自选增幅选项[i].setCurrentIndex(y)
|
||||
pass
|
||||
|
||||
def 自选套装更改(self, index):
|
||||
name = self.自选套装[index].currentText()
|
||||
for i in range(11):
|
||||
if self.装备锁定[i].isChecked():
|
||||
continue
|
||||
x = 0
|
||||
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
|
||||
|
||||
def 神话部位更改(self, index):
|
||||
部位 = [-1, 0, 5, 8]
|
||||
序号 = 部位[index]
|
||||
if 序号 != -1:
|
||||
当前 = equ.get_equ_by_name(self.自选装备[序号].currentText())
|
||||
x = 0
|
||||
for i in equ.get_equ_list():
|
||||
if 当前.部位 == i.部位:
|
||||
x += 1
|
||||
if i.品质 == '神话' and i.所属套装 == 当前.所属套装:
|
||||
self.自选装备[序号].setCurrentIndex(x)
|
||||
for k in [0, 5, 8]:
|
||||
if k != 序号:
|
||||
当前 = equ.get_equ_by_name(self.自选装备[k].currentText())
|
||||
if 当前.品质 == '神话':
|
||||
x = 0
|
||||
for i in equ.get_equ_list():
|
||||
if 当前.部位 == i.部位:
|
||||
x += 1
|
||||
if i.品质 == '史诗' and i.所属套装 == 当前.所属套装:
|
||||
self.自选装备[k].setCurrentIndex(x)
|
||||
pass
|
||||
|
||||
def 初始化奥兹玛UI(self):
|
||||
横坐标 = 640
|
||||
纵坐标 = 50
|
||||
名称 = ['阿斯特罗斯', '贝利亚斯', '雷德梅恩', '罗什巴赫', '泰玛特']
|
||||
self.奥兹玛套装按钮 = []
|
||||
self.奥兹玛单件按钮 = []
|
||||
self.奥兹玛遮罩透明度 = []
|
||||
self.奥兹玛选择状态 = [0] * 25
|
||||
count = 0
|
||||
for i in 名称:
|
||||
self.奥兹玛套装按钮.append(QPushButton(i, self))
|
||||
self.奥兹玛套装按钮[count].setStyleSheet(按钮样式)
|
||||
self.奥兹玛套装按钮[count].resize(75, 22)
|
||||
self.奥兹玛套装按钮[count].move(横坐标, 纵坐标 + 3 + count * 32)
|
||||
self.奥兹玛套装按钮[count].clicked.connect(
|
||||
lambda state, index=count: self.奥兹玛套装选择(index))
|
||||
for j in range(5):
|
||||
序号 = count * 5 + j
|
||||
图片 = QLabel(self)
|
||||
图片.setPixmap(
|
||||
QPixmap('./ResourceFiles/img/奥兹玛/' + str(序号) + '.png'))
|
||||
图片.resize(28, 28)
|
||||
图片.move(横坐标 + 60 + j * 30 + 20, 纵坐标 + count * 32)
|
||||
self.奥兹玛遮罩透明度.append(QGraphicsOpacityEffect())
|
||||
self.奥兹玛遮罩透明度[序号].setOpacity(0.5)
|
||||
self.奥兹玛单件按钮.append(QPushButton(self))
|
||||
self.奥兹玛单件按钮[序号].setStyleSheet(
|
||||
"background-color: rgb(0, 0, 0)")
|
||||
self.奥兹玛单件按钮[序号].resize(28, 28)
|
||||
self.奥兹玛单件按钮[序号].move(横坐标 + 60 + j * 30 + 20, 纵坐标 + count * 32)
|
||||
self.奥兹玛单件按钮[序号].setGraphicsEffect(self.奥兹玛遮罩透明度[序号])
|
||||
self.奥兹玛单件按钮[序号].clicked.connect(
|
||||
lambda state, index=序号: self.奥兹玛选择(index))
|
||||
count += 1
|
||||
|
||||
def 初始化希洛克UI(self):
|
||||
横坐标 = 700
|
||||
纵坐标 = 250
|
||||
名称 = trans(['奈克斯', '暗杀者', '卢克西', '守门人', '洛多斯'])
|
||||
self.希洛克套装按钮 = []
|
||||
self.希洛克单件按钮 = []
|
||||
self.希洛克遮罩透明度 = []
|
||||
self.希洛克选择状态 = [0] * 15
|
||||
count = 0
|
||||
for i in 名称:
|
||||
self.希洛克套装按钮.append(QPushButton(i, self))
|
||||
self.希洛克套装按钮[count].setStyleSheet(按钮样式)
|
||||
self.希洛克套装按钮[count].resize(75, 22)
|
||||
self.希洛克套装按钮[count].move(横坐标, 纵坐标 + 3 + count * 32)
|
||||
self.希洛克套装按钮[count].clicked.connect(
|
||||
lambda state, index=count: self.希洛克套装选择(index))
|
||||
for j in range(3):
|
||||
序号 = count * 3 + j
|
||||
图片 = QLabel(self)
|
||||
图片.setPixmap(
|
||||
QPixmap('./ResourceFiles/img/希洛克/' + str(序号) + '.png'))
|
||||
图片.resize(28, 28)
|
||||
图片.move(横坐标 + 60 + j * 30 + 20, 纵坐标 + count * 32)
|
||||
self.希洛克遮罩透明度.append(QGraphicsOpacityEffect())
|
||||
self.希洛克遮罩透明度[序号].setOpacity(0.5)
|
||||
self.希洛克单件按钮.append(QPushButton(self))
|
||||
self.希洛克单件按钮[序号].setStyleSheet(
|
||||
"background-color: rgb(0, 0, 0)")
|
||||
self.希洛克单件按钮[序号].resize(28, 28)
|
||||
self.希洛克单件按钮[序号].move(横坐标 + 60 + j * 30 + 20, 纵坐标 + count * 32)
|
||||
self.希洛克单件按钮[序号].setGraphicsEffect(self.希洛克遮罩透明度[序号])
|
||||
self.希洛克单件按钮[序号].clicked.connect(
|
||||
lambda state, index=序号: self.希洛克选择(index))
|
||||
count += 1
|
||||
|
||||
def 初始化残香UI(self):
|
||||
x = 400
|
||||
y = 320
|
||||
|
||||
标签 = QLabel('残香属性', self)
|
||||
标签.setAlignment(Qt.AlignCenter)
|
||||
标签.setStyleSheet(标签样式)
|
||||
标签.resize(240, 25)
|
||||
标签.move(x, y)
|
||||
|
||||
y += 30
|
||||
|
||||
self.武器融合属性A = MyQComboBox(self)
|
||||
for j in 武器属性A列表:
|
||||
self.武器融合属性A.addItem(j.固定属性描述)
|
||||
self.武器融合属性A.resize(60, 20)
|
||||
self.武器融合属性A.move(x, y)
|
||||
|
||||
self.武器融合属性A1 = MyQComboBox(self)
|
||||
self.武器融合属性A1.resize(90 + 75, 20)
|
||||
self.武器融合属性A1.move(x + 110 - 50 + 5, y)
|
||||
|
||||
self.武器融合属性A2 = MyQComboBox(self)
|
||||
self.武器融合属性A2.resize(50, 20)
|
||||
self.武器融合属性A2.move(x + 205 + 20 + 10, y)
|
||||
self.武器融合属性A.currentIndexChanged.connect(
|
||||
lambda: self.希洛克武器融合词条更新(self.武器融合属性A.currentIndex()))
|
||||
|
||||
y += 30
|
||||
self.武器融合属性B = MyQComboBox(self)
|
||||
for j in 武器属性B列表:
|
||||
self.武器融合属性B.addItem(j.固定属性描述)
|
||||
self.武器融合属性B.resize(60, 20)
|
||||
self.武器融合属性B.move(x, y)
|
||||
|
||||
self.武器融合属性B1 = MyQComboBox(self)
|
||||
self.武器融合属性B1.resize(90 + 75, 20)
|
||||
self.武器融合属性B1.move(x + 110 - 50 + 5, y)
|
||||
|
||||
self.武器融合属性B2 = MyQComboBox(self)
|
||||
self.武器融合属性B2.resize(50, 20)
|
||||
self.武器融合属性B2.move(x + 205 + 20 + 10, y)
|
||||
self.武器融合属性B.currentIndexChanged.connect(
|
||||
lambda: self.希洛克武器融合词条更新(self.武器融合属性B.currentIndex(), 1))
|
||||
|
||||
y += 30
|
||||
|
||||
tips = QLabel("提示:当选择无时,将按穿戴装备的设置", self)
|
||||
tips.move(x, y)
|
||||
tips.resize(240, 24)
|
||||
tips.setStyleSheet("QLabel{font-size:12px;color:rgb(211,167,106)}")
|
||||
|
||||
def 初始化遴选UI(self):
|
||||
横坐标 = 30
|
||||
纵坐标 = 420
|
||||
|
||||
名称 = ['武器', '戒指', '辅助装备', '下装']
|
||||
self.黑鸦词条 = []
|
||||
|
||||
title = QLabel("黑鸦遴选词条", self)
|
||||
title.setAlignment(Qt.AlignCenter)
|
||||
title.setStyleSheet(标签样式)
|
||||
title.resize(400, 25)
|
||||
title.move(横坐标, 纵坐标)
|
||||
|
||||
纵坐标 += 25
|
||||
|
||||
for i in range(4):
|
||||
x = QLabel(名称[i], self)
|
||||
x.setStyleSheet(标签样式 +
|
||||
'QLabel{font-size:13px;};text-align: justify;')
|
||||
# x.setStyleSheet('text-align: justify')
|
||||
x.resize(55, 20)
|
||||
x.move(横坐标, 纵坐标 + i * 25)
|
||||
tem = []
|
||||
tem.append(MyQComboBox(self))
|
||||
"""
|
||||
只允许自选,为了保持兼容不移除
|
||||
"""
|
||||
tem[0].addItems(['自选数值'])
|
||||
tem[0].resize(0, 0)
|
||||
tem[0].move(横坐标 + 60, 纵坐标 + 25 * i)
|
||||
tem[0].currentIndexChanged.connect(
|
||||
lambda state, index=i: self.黑鸦词条更新(index))
|
||||
|
||||
tem.append(MyQComboBox(self))
|
||||
tem[1].resize(60, 20)
|
||||
tem[1].move(横坐标 + 156 - 91, 纵坐标 + 25 * i)
|
||||
|
||||
tem.append(MyQComboBox(self))
|
||||
tem[2].resize(90 + 75, 20)
|
||||
tem[2].move(横坐标 + 266 - 50 + 5 - 91, 纵坐标 + 25 * i)
|
||||
|
||||
tem.append(MyQComboBox(self))
|
||||
tem[3].resize(50, 20)
|
||||
tem[3].move(横坐标 + 361 + 20 + 10 - 91, 纵坐标 + 25 * i)
|
||||
for item in 装备变换属性列表:
|
||||
tem[1].addItem(item.固定属性描述)
|
||||
tem[1].currentIndexChanged.connect(
|
||||
lambda state, index=i: self.黑鸦随机词条更新(index))
|
||||
|
||||
self.黑鸦词条.append(tem)
|
||||
self.黑鸦词条更新(i)
|
||||
|
||||
def 希洛克套装选择(self, index):
|
||||
count = 1
|
||||
for i in range(index * 3, index * 3 + 3):
|
||||
count &= self.希洛克选择状态[i]
|
||||
count ^= 1
|
||||
for i in range(index * 3, index * 3 + 3):
|
||||
self.希洛克选择(i, count)
|
||||
|
||||
def 希洛克选择(self, index, value=-1):
|
||||
if value == -1:
|
||||
value = self.希洛克选择状态[index] ^ 1
|
||||
if value == 0:
|
||||
self.希洛克遮罩透明度[index].setOpacity(0.5)
|
||||
elif value == 1:
|
||||
for i in range(5):
|
||||
序号 = i * 3 + index % 3
|
||||
if self.希洛克选择状态[序号] == 1:
|
||||
self.希洛克遮罩透明度[序号].setOpacity(0.5)
|
||||
self.希洛克选择状态[序号] = 0
|
||||
self.希洛克遮罩透明度[index].setOpacity(0)
|
||||
|
||||
self.希洛克选择状态[index] = value
|
||||
|
||||
def 奥兹玛套装选择(self, index):
|
||||
count = 1
|
||||
for i in range(index * 5, index * 5 + 5):
|
||||
count &= self.奥兹玛选择状态[i]
|
||||
count ^= 1
|
||||
for i in range(index * 5, index * 5 + 5):
|
||||
self.奥兹玛选择(i, count)
|
||||
|
||||
def 奥兹玛选择(self, index, value=-1):
|
||||
if value == -1:
|
||||
value = self.奥兹玛选择状态[index] ^ 1
|
||||
if value == 0:
|
||||
self.奥兹玛遮罩透明度[index].setOpacity(0.5)
|
||||
elif value == 1:
|
||||
for i in range(5):
|
||||
序号 = i * 5 + index % 5
|
||||
if self.奥兹玛选择状态[序号] == 1:
|
||||
self.奥兹玛遮罩透明度[序号].setOpacity(0.5)
|
||||
self.奥兹玛选择状态[序号] = 0
|
||||
self.奥兹玛遮罩透明度[index].setOpacity(0)
|
||||
self.奥兹玛选择状态[index] = value
|
||||
|
||||
def 希洛克武器融合词条更新(self, index, x=0):
|
||||
if x == 0:
|
||||
self.武器融合属性A1.clear()
|
||||
self.武器融合属性A2.clear()
|
||||
属性A = 武器属性A列表[index]
|
||||
self.武器融合属性A2.addItems(属性A.range())
|
||||
self.武器融合属性A1.addItem(属性A.随机属性描述)
|
||||
elif x == 1:
|
||||
self.武器融合属性B1.clear()
|
||||
self.武器融合属性B2.clear()
|
||||
属性B = 武器属性B列表[index]
|
||||
self.武器融合属性B2.addItems(属性B.range())
|
||||
self.武器融合属性B1.addItem(属性B.随机属性描述)
|
||||
|
||||
def 黑鸦词条更新(self, index):
|
||||
for i in range(1, 4):
|
||||
self.黑鸦词条[index][i].setEnabled(True)
|
||||
self.黑鸦词条[index][i].setStyleSheet(下拉框样式)
|
||||
|
||||
def 黑鸦随机词条更新(self, i):
|
||||
index = self.黑鸦词条[i][1].currentIndex()
|
||||
self.黑鸦词条[i][2].clear()
|
||||
self.黑鸦词条[i][3].clear()
|
||||
if index == 0:
|
||||
return
|
||||
变换属性 = 武器变换属性列表[index] if i == 0 else 装备变换属性列表[index]
|
||||
|
||||
temp = 变换属性.最大值
|
||||
while temp >= 变换属性.最小值:
|
||||
if 变换属性.间隔 / 10 >= 1:
|
||||
self.黑鸦词条[i][3].addItem(str(int(temp)))
|
||||
else:
|
||||
self.黑鸦词条[i][3].addItem(str(temp) + '%')
|
||||
temp -= 变换属性.间隔
|
||||
self.黑鸦词条[i][2].addItem(变换属性.随机属性描述)
|
||||
@@ -0,0 +1,938 @@
|
||||
from ctypes import *
|
||||
|
||||
from PublicReference.common import *
|
||||
from PublicReference.equipment.buff.宠物_buff import *
|
||||
from PublicReference.equipment.buff.武器融合_buff import *
|
||||
from PublicReference.equipment.buff.称号_buff import *
|
||||
from PublicReference.equipment.buff.融合_奥兹玛_buff import OzmaList
|
||||
from PublicReference.equipment.buff.融合_希洛克_buff import SirocoList
|
||||
from PublicReference.equipment.buff.辟邪玉_buff import *
|
||||
from PublicReference.equipment.buff.黑鸦_buff import *
|
||||
from PublicReference.equipment.buff.护石_buff import *
|
||||
from PublicReference.equipment.buff.描述_buff import *
|
||||
from PublicReference.utils.common import to_int
|
||||
|
||||
|
||||
class 技能:
|
||||
名称 = ''
|
||||
备注 = ''
|
||||
所在等级 = 0
|
||||
等级上限 = 0
|
||||
等级 = 0
|
||||
基础等级 = 0
|
||||
是否主动 = 0
|
||||
站街生效 = 0
|
||||
等级溢出 = 0
|
||||
|
||||
是否启用 = 1
|
||||
技能序号 = 0
|
||||
技能表 = {}
|
||||
|
||||
def 等级加成(self, x):
|
||||
if self.等级 != 0:
|
||||
if self.等级 + x > self.等级上限:
|
||||
self.等级 = self.等级上限
|
||||
if self.基础等级 != self.等级上限:
|
||||
self.等级溢出 = 1
|
||||
else:
|
||||
self.等级 += x
|
||||
|
||||
def 结算统计(self, context=None):
|
||||
return [0, 0, 0, 0, 0, 0, 0, 0]
|
||||
# 智力 体力 精神 力量 智力 物攻 魔攻 独立
|
||||
|
||||
|
||||
class 被动技能(技能):
|
||||
是否主动 = 0
|
||||
进图加成 = 0
|
||||
|
||||
|
||||
class 主动技能(技能):
|
||||
是否主动 = 1
|
||||
适用数值 = 0
|
||||
|
||||
|
||||
class 觉醒技能(主动技能):
|
||||
所在等级 = 50
|
||||
等级上限 = 40
|
||||
基础等级 = 12
|
||||
一觉力智 = 0
|
||||
一觉力智per = 0
|
||||
# 28 原力智 941 测试修改为 939
|
||||
力智 = [
|
||||
0, 43, 57, 74, 91, 111, 131, 153, 176, 201, 228, 255, 284, 315, 346,
|
||||
379, 414, 449, 487, 526, 567, 608, 651, 696, 741, 789, 838, 888, 939,
|
||||
993, 1047, 1103, 1160, 1219, 1278, 1340, 1403, 1467, 1533, 1600, 1668
|
||||
]
|
||||
|
||||
def 结算统计(self, context, compute_3rd_awake=False):
|
||||
if not compute_3rd_awake and self.名称 in context.技能表['三次觉醒'].关联技能:
|
||||
return [0] * 8
|
||||
倍率 = self.适用数值 / 750 + 1
|
||||
x = (self.力智[self.等级] + self.一觉力智) * 倍率
|
||||
values = [
|
||||
0, 0, 0,
|
||||
int(round(x * self.一觉力智per)),
|
||||
int(round(x * self.一觉力智per)), 0, 0, 0
|
||||
]
|
||||
return values
|
||||
# 智力 体力 精神 力量 智力 物攻 魔攻 独立
|
||||
|
||||
def 技能面板(self):
|
||||
temp = []
|
||||
temp.append(self.名称)
|
||||
temp.append(
|
||||
int(round((self.力智[self.等级] + self.一觉力智) * self.一觉力智per, 0)))
|
||||
temp.append(
|
||||
int(round((self.力智[self.等级] + self.一觉力智) * self.一觉力智per, 0)))
|
||||
return temp
|
||||
|
||||
|
||||
class 三觉技能(主动技能):
|
||||
所在等级 = 100
|
||||
等级上限 = 40
|
||||
基础等级 = 2
|
||||
绑定一觉力智per = 1.08
|
||||
绑定二觉力智per = 0.23
|
||||
关联技能 = []
|
||||
|
||||
def 结算统计(self, context):
|
||||
技能表 = context.技能表
|
||||
awake = 技能表['一次觉醒']
|
||||
if awake.是否启用:
|
||||
values = awake.结算统计(context, True)
|
||||
倍率 = self.加成倍率(awake.名称 in self.关联技能)
|
||||
return [int(round(i * 倍率)) for i in values]
|
||||
return [0] * 8
|
||||
|
||||
def 加成倍率(self, bind_awake):
|
||||
if bind_awake:
|
||||
return round(1.08 + self.等级 * 0.01, 2)
|
||||
else:
|
||||
return round(0.23 + self.等级 * 0.01, 2)
|
||||
|
||||
|
||||
BUFF影响技能 = ['勇气祝福', '勇气圣歌', '荣誉祝福', '禁忌诅咒', '死命召唤']
|
||||
|
||||
|
||||
class 辅助角色属性(属性):
|
||||
职业分类 = 'BUFF'
|
||||
C力智 = 5000
|
||||
C三攻 = 3000
|
||||
系统奶系数 = 0
|
||||
系统奶基数 = 0
|
||||
排行类型 = '物理百分比'
|
||||
|
||||
类型 = '固伤'
|
||||
|
||||
称号触发 = False
|
||||
|
||||
排行系数 = 0
|
||||
站街系数 = 0
|
||||
|
||||
百分比体精 = 0.0
|
||||
|
||||
被动进图加成 = 0
|
||||
守护恩赐体精 = 0
|
||||
转职被动智力 = 0
|
||||
|
||||
转职被动Lv = 0
|
||||
一觉被动Lv = 0
|
||||
|
||||
BUFFLv = 0
|
||||
BUFF力量per = 1
|
||||
BUFF智力per = 1
|
||||
BUFF物攻per = 1
|
||||
BUFF魔攻per = 1
|
||||
BUFF独立per = 1
|
||||
一觉Lv = 0
|
||||
一觉力智 = 0
|
||||
一觉力智per = 1
|
||||
|
||||
BUFF力量 = 0
|
||||
BUFF智力 = 0
|
||||
BUFF物攻 = 0
|
||||
BUFF魔攻 = 0
|
||||
BUFF独立 = 0
|
||||
|
||||
一觉被动力智 = 0
|
||||
信念光环体精 = 0
|
||||
|
||||
BUFF适用面板 = 0
|
||||
BUFF补正力智 = 0
|
||||
BUFF补正体力 = 0
|
||||
BUFF补正精神 = 0
|
||||
|
||||
一觉序号 = 0
|
||||
二觉序号 = 0
|
||||
三觉序号 = 0
|
||||
双装备模式 = 0
|
||||
切换详情 = '无'
|
||||
|
||||
次数输入 = []
|
||||
# 是否为输出装备描述
|
||||
装备描述 = 0
|
||||
|
||||
希洛克武器词条 = 0
|
||||
自适应最高值 = []
|
||||
武器词条触发 = 0
|
||||
产物升级 = 0
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.次数输入 = []
|
||||
self.残香词条 = [0] * 4
|
||||
self.黑鸦词条 = [[0] * 4] * 4
|
||||
self.希洛克选择状态 = [0] * 15
|
||||
self.奥兹玛选择状态 = [0] * 25
|
||||
self.自适应最高值 = []
|
||||
self.技能表 = {}
|
||||
self.觉醒择优系数 = 1.0
|
||||
self.武器词条触发 = 0
|
||||
self.buff_type = 0
|
||||
self.buff_rate = 1
|
||||
self.护石栏 = [0] * 3
|
||||
|
||||
def get_data(self):
|
||||
buff = self.技能表['BUFF']
|
||||
awake = self.技能表['一次觉醒']
|
||||
|
||||
other_power = 0
|
||||
other_attack = 0
|
||||
|
||||
ignores = ['BUFF', '一次觉醒', '三次觉醒', '死命召唤', '勇气圣歌']
|
||||
|
||||
for i in self.技能表.keys():
|
||||
if i not in ignores:
|
||||
skill = self.技能表[i]
|
||||
data = skill.结算统计(self)
|
||||
other_power += data[3]
|
||||
other_attack += data[5]
|
||||
|
||||
in_int_data = (ctypes.c_int * 12)()
|
||||
in_int_data[0] = self.buff_type
|
||||
in_int_data[1] = int(buff.适用数值)
|
||||
in_int_data[2] = buff.等级
|
||||
in_int_data[3] = int(buff.BUFF力量)
|
||||
in_int_data[4] = int(buff.BUFF物攻)
|
||||
in_int_data[5] = int(awake.适用数值)
|
||||
in_int_data[6] = awake.等级
|
||||
in_int_data[7] = int(awake.一觉力智)
|
||||
in_int_data[8] = int(other_power)
|
||||
in_int_data[9] = int(other_attack)
|
||||
in_int_data[10] = int(self.C力智)
|
||||
in_int_data[11] = int(self.C三攻)
|
||||
|
||||
third_awake = self.技能表['三次觉醒']
|
||||
|
||||
awake_rate = 1
|
||||
if third_awake.是否启用:
|
||||
awake_rate = third_awake.加成倍率(awake.名称 in third_awake.关联技能)
|
||||
awake_rate = awake_rate + 1 if awake_rate < 1 else awake_rate
|
||||
|
||||
awake_rate = awake_rate if awake.是否启用 else 0
|
||||
|
||||
buff_rate = self.buff_rate if buff.是否启用 else 0
|
||||
|
||||
in_double_data = (ctypes.c_double * 8)()
|
||||
in_double_data[0] = self.觉醒择优系数
|
||||
in_double_data[1] = buff_rate
|
||||
in_double_data[2] = buff.BUFF力量per
|
||||
in_double_data[3] = buff.BUFF物攻per
|
||||
in_double_data[4] = awake_rate
|
||||
in_double_data[5] = awake.一觉力智per
|
||||
in_double_data[6] = self.系统奶系数
|
||||
in_double_data[7] = self.系统奶基数
|
||||
return in_int_data, in_double_data
|
||||
|
||||
def 穿戴装备(self, 装备, 套装=None):
|
||||
self.装备栏 = 装备
|
||||
self.套装栏 = 套装
|
||||
if 套装 is None or len(套装) == 0:
|
||||
self.套装栏 = equ.get_suits_by_equips(装备)
|
||||
self.武器类型 = equ.get_equ_by_name(self.装备栏[11]).类型
|
||||
|
||||
def 力智固定加成(self, x=0):
|
||||
return 力智固定加成(self, x)
|
||||
|
||||
def 体精固定加成(self, x=0):
|
||||
return 体精固定加成(self, x)
|
||||
|
||||
def BUFF增加(self,
|
||||
BUFFLv=0,
|
||||
BUFF力量=0,
|
||||
BUFF智力=0,
|
||||
BUFF力量per=1,
|
||||
BUFF智力per=1,
|
||||
BUFF物攻=0,
|
||||
BUFF魔攻=0,
|
||||
BUFF独立=0,
|
||||
BUFF物攻per=1,
|
||||
BUFF魔攻per=1,
|
||||
BUFF独立per=1):
|
||||
return BUFF增加(self, BUFFLv, BUFF力量, BUFF智力, BUFF力量per, BUFF智力per,
|
||||
BUFF物攻, BUFF魔攻, BUFF独立, BUFF物攻per, BUFF魔攻per, BUFF独立per)
|
||||
|
||||
def 被动增加(self,
|
||||
守护恩赐体精=0,
|
||||
转职被动Lv=0,
|
||||
转职被动智力=0,
|
||||
信念光环Lv=0,
|
||||
信念光环体精=0,
|
||||
一觉被动Lv=0,
|
||||
一觉被动力智=0):
|
||||
if 信念光环Lv > 0 and 一觉被动Lv == 0:
|
||||
一觉被动Lv = 信念光环Lv
|
||||
return 被动增加(self, 转职被动Lv, 转职被动智力, 守护恩赐体精, 信念光环体精, 一觉被动Lv, 一觉被动力智)
|
||||
|
||||
def 觉醒增加(self, 一觉Lv=0, 一觉力智=0, 一觉力智per=1):
|
||||
return 觉醒增加(self, 一觉Lv, 一觉力智, 一觉力智per)
|
||||
|
||||
def 系数数值站街(self):
|
||||
pass
|
||||
|
||||
def 系数数值进图(self):
|
||||
pass
|
||||
|
||||
def 防具精通计算(self, i):
|
||||
temp = equ.get_equ_by_name(self.装备栏[i])
|
||||
if temp.所属套装 != '智慧产物':
|
||||
return 精通体力(temp.等级, temp.品质, self.强化等级[i], 部位列表[i])
|
||||
else:
|
||||
return 精通体力(temp.等级, temp.品质, self.改造等级[i], 部位列表[i])
|
||||
|
||||
def 装备基础(self):
|
||||
for i in range(5):
|
||||
# 精通
|
||||
temp = equ.get_equ_by_name(self.装备栏[i])
|
||||
x = self.防具精通计算(i)
|
||||
if '智力' in self.防具精通属性:
|
||||
self.智力 += x * 2
|
||||
if '体力' in self.防具精通属性:
|
||||
self.体力 += x
|
||||
if '精神' in self.防具精通属性:
|
||||
self.精神 += x * 2
|
||||
# 装备属性
|
||||
self.智力 += temp.智力['板甲']
|
||||
self.体力 += temp.体力['板甲']
|
||||
self.精神 += temp.精神['板甲']
|
||||
|
||||
for i in [9, 10]:
|
||||
temp = equ.get_equ_by_name(self.装备栏[i])
|
||||
if temp.所属套装 != '智慧产物':
|
||||
x = 左右计算(temp.等级, temp.品质, self.强化等级[i])
|
||||
self.智力 += x
|
||||
self.体力 += x
|
||||
self.精神 += x
|
||||
for i in range(12):
|
||||
temp = equ.get_equ_by_name(self.装备栏[i])
|
||||
if self.是否增幅[i] and temp.所属套装 != '智慧产物':
|
||||
x = 增幅计算(temp.等级, temp.品质, self.强化等级[i], self.增幅版本)
|
||||
if '智力' in self.类型:
|
||||
self.智力 += x
|
||||
if '体力' in self.类型:
|
||||
self.体力 += x
|
||||
if '精神' in self.类型:
|
||||
self.精神 += x
|
||||
for i in [5, 6, 7, 8, 9, 10]:
|
||||
temp = equ.get_equ_by_name(self.装备栏[i])
|
||||
self.智力 += temp.智力
|
||||
self.体力 += temp.体力
|
||||
self.精神 += temp.精神
|
||||
|
||||
temp = equ.get_equ_by_name(self.装备栏[11])
|
||||
if temp.所属套装 != '智慧产物':
|
||||
四维 = 锻造四维(temp.等级, temp.品质, self.武器锻造等级)
|
||||
self.智力 += temp.智力 + 四维
|
||||
self.体力 += temp.体力 + 四维
|
||||
self.精神 += temp.精神 + 四维
|
||||
|
||||
def 单技能等级加成(self, 名称, lv):
|
||||
if self.装备描述 == 1:
|
||||
return "{} Lv +{}<br>".format(名称, lv)
|
||||
else:
|
||||
for i in self.技能表.keys():
|
||||
if i == 名称:
|
||||
self.技能表[i].等级加成(lv)
|
||||
return ''
|
||||
|
||||
def 等级溢出判断(self, 装备, 套装):
|
||||
self.穿戴装备(装备, 套装)
|
||||
self.装备属性计算()
|
||||
temp = []
|
||||
for skill in self.技能表.values():
|
||||
if skill.等级溢出 == 1:
|
||||
temp.append(skill.名称)
|
||||
return temp
|
||||
|
||||
def 技能等级加成(self, 加成类型, min, max, lv, 可变=0):
|
||||
lv = int(lv)
|
||||
if self.装备描述 == 1:
|
||||
if 加成类型 == "所有":
|
||||
if min == max:
|
||||
return "Lv{} 技能等级+{}<br>".format(min, lv)
|
||||
else:
|
||||
return "Lv{}-{} 技能等级+{}<br>".format(min, max, lv)
|
||||
else:
|
||||
if min == max:
|
||||
return "Lv{} 主动技能等级+{}<br>".format(min, lv)
|
||||
else:
|
||||
return "Lv{}-{} 主动技能等级+{}<br>".format(min, max, lv)
|
||||
else:
|
||||
for skill in self.技能表.values():
|
||||
if skill.所在等级 >= min and skill.所在等级 <= max:
|
||||
if 加成类型 == '所有':
|
||||
skill.等级加成(lv)
|
||||
else:
|
||||
if skill.是否主动 == 1:
|
||||
skill.等级加成(lv)
|
||||
# if 可变 > 0:
|
||||
# self.变换词条[可变-1] = [6,2,14 + (2 if 可变 > 1 else 4), 14 + (9 if 可变 > 1 else 17)]
|
||||
|
||||
return ''
|
||||
|
||||
def 提升率计算(self, 总数据, x=0):
|
||||
|
||||
力量合计 = 0
|
||||
智力合计 = 0
|
||||
物攻合计 = 0
|
||||
魔攻合计 = 0
|
||||
独立合计 = 0
|
||||
|
||||
for i in 总数据:
|
||||
力量合计 += i[3]
|
||||
智力合计 += i[4]
|
||||
物攻合计 += i[5]
|
||||
魔攻合计 += i[6]
|
||||
独立合计 += i[7]
|
||||
|
||||
x1 = (
|
||||
(self.C力智 +
|
||||
(self.C力智 - 950) * self.系统奶系数 + self.系统奶基数) / 250 + 1) * self.C三攻
|
||||
|
||||
if self.排行类型 == '物理百分比':
|
||||
a = 力量合计
|
||||
b = 物攻合计
|
||||
elif self.排行类型 == '魔法百分比':
|
||||
a = 智力合计
|
||||
b = 魔攻合计
|
||||
elif self.排行类型 == '物理固伤':
|
||||
a = 力量合计
|
||||
b = 独立合计
|
||||
elif self.排行类型 == '魔法固伤':
|
||||
a = 智力合计
|
||||
b = 独立合计
|
||||
|
||||
x2 = ((self.C力智 +
|
||||
(self.C力智 - 950) * self.系统奶系数 + self.系统奶基数 + a) / 250 +
|
||||
1) * (self.C三攻 + b)
|
||||
return [x2 / x1 * 100, int(self.站街系数), a, b][x]
|
||||
|
||||
def 适用数值计算(self):
|
||||
self.专属词条计算()
|
||||
for skill in self.技能表.values():
|
||||
if skill.是否启用:
|
||||
结算 = skill.结算统计(self)
|
||||
self.智力 += 结算[0]
|
||||
self.体力 += 结算[1]
|
||||
self.精神 += 结算[2]
|
||||
|
||||
self.进图智力 += self.智力
|
||||
self.进图体力 += self.体力
|
||||
self.进图精神 += self.精神
|
||||
|
||||
self.进图体力 *= 1 + self.百分比体精
|
||||
self.进图精神 *= 1 + self.百分比体精
|
||||
|
||||
进图 = 0
|
||||
BUFF补正 = 0
|
||||
if self.类型 == '智力':
|
||||
进图 = self.进图智力
|
||||
BUFF补正 = self.BUFF补正力智
|
||||
elif self.类型 == '体力':
|
||||
进图 = self.进图体力
|
||||
BUFF补正 = self.BUFF补正体力
|
||||
elif self.类型 == '精神':
|
||||
进图 = self.进图精神
|
||||
BUFF补正 = self.BUFF补正精神
|
||||
self.技能表['一次觉醒'].适用数值 = 进图
|
||||
self.技能表['BUFF'].适用数值 = 进图 + BUFF补正
|
||||
return 进图
|
||||
|
||||
# 返回可能的组合列表
|
||||
def 装备替换(self, 属性: 属性) -> 属性:
|
||||
套装栏 = []
|
||||
for i in 属性.套装栏:
|
||||
套装栏.append(i.split('[')[0])
|
||||
if len(套装栏) < 7 or self.排行系数 == 1:
|
||||
return [deepcopy(属性)]
|
||||
|
||||
匹配1 = [防具套装, 上链左套装, 上链左套装, 镯下右套装, 镯下右套装, 环鞋指套装, 环鞋指套装]
|
||||
匹配0 = [防具套装, 上链左套装, 防具套装, 镯下右套装, 防具套装, 环鞋指套装, 防具套装]
|
||||
匹配 = [防具套装, 防具套装, 防具套装, 首饰套装, 首饰套装, 特殊套装, 特殊套装]
|
||||
|
||||
count = []
|
||||
count2 = 0
|
||||
|
||||
for i in range(7):
|
||||
# 3332散搭
|
||||
if 套装栏[i] in 匹配1[i]:
|
||||
count.append(1)
|
||||
elif 套装栏[i] in 匹配0[i]:
|
||||
count.append(0)
|
||||
else:
|
||||
count.append(-9)
|
||||
# 3233双防具
|
||||
if 套装栏[i] in 匹配[i]:
|
||||
count2 += 1
|
||||
|
||||
sumcount = sum(count)
|
||||
|
||||
if sumcount == 7:
|
||||
x1 = deepcopy(属性)
|
||||
x2 = deepcopy(属性)
|
||||
x3 = deepcopy(属性)
|
||||
x4 = deepcopy(属性)
|
||||
num = 0
|
||||
index = [6, 5, 7]
|
||||
for i in [x2, x3, x4]:
|
||||
i.装备栏[num * 2] = equ.get_equ_by_index(
|
||||
equ.get_equ_by_name(i.装备栏[1]).所属套装, '史诗',
|
||||
equ.get_equ_by_name(i.装备栏[num * 2]).部位).名称
|
||||
i.套装栏[2 * num + 2] = i.套装栏[2 * num + 2].replace(
|
||||
equ.get_equ_by_name(i.装备栏[index[num]]).所属套装,
|
||||
equ.get_equ_by_name(i.装备栏[1]).所属套装)
|
||||
i.切换详情 = trans(equ.get_equ_by_name(
|
||||
i.装备栏[num * 2]).部位) + ':' + trans(
|
||||
x1.装备栏[num * 2]) + ' → ' + trans(i.装备栏[num * 2])
|
||||
num += 1
|
||||
return [x1, x2, x3, x4]
|
||||
elif sumcount == 6:
|
||||
index = count.index(0)
|
||||
部位 = {2: 6, 4: 5, 6: 7}
|
||||
x1 = deepcopy(属性)
|
||||
x2 = deepcopy(属性)
|
||||
x2.装备栏[index - 2] = equ.get_equ_by_index(
|
||||
equ.get_equ_by_name(x2.装备栏[部位[index]]).所属套装, '史诗',
|
||||
equ.get_equ_by_name(x2.装备栏[index - 2]).部位).名称
|
||||
x2.套装栏[index] = x2.套装栏[index].replace(
|
||||
equ.get_equ_by_name(x2.装备栏[1]).所属套装,
|
||||
equ.get_equ_by_name(x2.装备栏[部位[index]]).所属套装)
|
||||
x2.切换详情 = trans(equ.get_equ_by_name(
|
||||
x2.装备栏[index - 2]).部位) + ':' + trans(
|
||||
x1.装备栏[index - 2]) + ' → ' + trans(x2.装备栏[index - 2])
|
||||
return [x1, x2]
|
||||
elif count2 == 7 and 套装栏[1] != 套装栏[2]:
|
||||
x1 = deepcopy(属性)
|
||||
x2 = deepcopy(属性)
|
||||
x3 = deepcopy(属性)
|
||||
x4 = deepcopy(属性)
|
||||
x5 = deepcopy(属性)
|
||||
两件套名称 = 属性.套装栏[2].split('[')[0]
|
||||
三件套名称 = 属性.套装栏[1].split('[')[0]
|
||||
x2.套装栏[1] = x2.套装栏[1].replace(三件套名称, 两件套名称)
|
||||
x3.套装栏[1] = x3.套装栏[1].replace(三件套名称, 两件套名称)
|
||||
x4.套装栏[1] = x4.套装栏[1].replace(三件套名称, 两件套名称)
|
||||
x5.套装栏[2] = x5.套装栏[2].replace(两件套名称 + '[2]', 三件套名称 + '[5]')
|
||||
可更换部位 = []
|
||||
不可更换部位 = []
|
||||
for i in range(5):
|
||||
if equ.get_equ_by_name(属性.装备栏[i]).所属套装 == 三件套名称:
|
||||
可更换部位.append(i)
|
||||
else:
|
||||
不可更换部位.append(i)
|
||||
x2.装备栏[可更换部位[0]] = equ.get_equ_by_index(两件套名称, '史诗',
|
||||
部位列表[可更换部位[0]]).名称
|
||||
x3.装备栏[可更换部位[1]] = equ.get_equ_by_index(两件套名称, '史诗',
|
||||
部位列表[可更换部位[1]]).名称
|
||||
x4.装备栏[可更换部位[2]] = equ.get_equ_by_index(两件套名称, '史诗',
|
||||
部位列表[可更换部位[2]]).名称
|
||||
x5.装备栏[不可更换部位[0]] = equ.get_equ_by_index(三件套名称, '史诗',
|
||||
部位列表[不可更换部位[0]]).名称
|
||||
x5.装备栏[不可更换部位[1]] = equ.get_equ_by_index(三件套名称, '史诗',
|
||||
部位列表[不可更换部位[1]]).名称
|
||||
|
||||
x2.切换详情 = trans(部位列表[可更换部位[0]]) + ':' + trans(
|
||||
属性.装备栏[可更换部位[0]]) + ' → ' + trans(x2.装备栏[可更换部位[0]])
|
||||
x3.切换详情 = trans(部位列表[可更换部位[1]]) + ':' + trans(
|
||||
属性.装备栏[可更换部位[1]]) + ' → ' + trans(x3.装备栏[可更换部位[1]])
|
||||
x4.切换详情 = trans(部位列表[可更换部位[2]]) + ':' + trans(
|
||||
属性.装备栏[可更换部位[2]]) + ' → ' + trans(x4.装备栏[可更换部位[2]])
|
||||
x5.切换详情 = trans(属性.套装栏[2]) + ' → ' + trans(x5.套装栏[2])
|
||||
return [x1, x2, x3, x4, x5]
|
||||
else:
|
||||
return [deepcopy(属性)]
|
||||
|
||||
def 希洛克计算(self, 希洛克选择状态=None):
|
||||
|
||||
if 希洛克选择状态 is None:
|
||||
希洛克选择状态 = self.希洛克选择状态
|
||||
|
||||
sirocos = []
|
||||
|
||||
for i in range(15):
|
||||
if 希洛克选择状态[i] == 1:
|
||||
siroco = SirocoList[i // 3]
|
||||
if siroco not in sirocos:
|
||||
siroco.set_character(self)
|
||||
sirocos.append(siroco)
|
||||
siroco.fuse(i % 3)
|
||||
|
||||
for siroco in sirocos:
|
||||
siroco.compute()
|
||||
|
||||
# 自选词条
|
||||
if self.希洛克武器词条 == 2:
|
||||
武器融合属性A = 武器属性A列表[self.残香词条[0]]
|
||||
武器融合属性A数值 = 武器融合属性A.最大值 - 武器融合属性A.间隔 * self.残香词条[1]
|
||||
武器融合属性A.当前值 = int(武器融合属性A数值)
|
||||
武器融合属性A.融合属性(self)
|
||||
if sum(希洛克选择状态) == 3:
|
||||
武器融合属性B = 武器属性B列表[self.残香词条[2]]
|
||||
|
||||
武器融合属性B数值 = 武器融合属性B.最大值 - 武器融合属性B.间隔 * self.残香词条[3]
|
||||
武器融合属性B.当前值 = int(武器融合属性B数值)
|
||||
武器融合属性B.融合属性(self)
|
||||
|
||||
def 奥兹玛计算(self, 奥兹玛选择状态=None):
|
||||
if 奥兹玛选择状态 is None:
|
||||
奥兹玛选择状态 = self.奥兹玛选择状态
|
||||
|
||||
for i in range(25):
|
||||
if 奥兹玛选择状态[i] == 1:
|
||||
func = OzmaList[i // 5]
|
||||
func(self)
|
||||
return
|
||||
|
||||
# 仅计算自选黑鸦遴选词条
|
||||
def 黑鸦计算(self, 黑鸦词条=None):
|
||||
if 黑鸦词条 is None:
|
||||
黑鸦词条 = self.黑鸦词条
|
||||
|
||||
for i in range(0, 4):
|
||||
# 自选词条
|
||||
if 黑鸦词条[i][0] == 2:
|
||||
属性列表 = 装备变换属性列表 if i > 0 else 武器变换属性列表
|
||||
装备属性 = 属性列表[黑鸦词条[i][1]]
|
||||
value = 黑鸦词条[i][2]
|
||||
if isinstance(value, int):
|
||||
value = 装备属性.最大值 - 黑鸦词条[i][2] * 装备属性.间隔
|
||||
else:
|
||||
value = 装备属性.当前值
|
||||
装备属性.当前值 = value
|
||||
装备属性.变换属性(self)
|
||||
|
||||
def compute(self, match=None, handle=None):
|
||||
if match is None:
|
||||
|
||||
def match(skill):
|
||||
return skill.是否启用
|
||||
|
||||
if handle is None:
|
||||
|
||||
def handle(skill, values):
|
||||
return values
|
||||
|
||||
data = []
|
||||
for skill in self.技能表.values():
|
||||
values = skill.结算统计(self) if match(skill) else [0] * 8
|
||||
values = handle(skill, values)
|
||||
data.append(values)
|
||||
self.awake_computed = False
|
||||
return data
|
||||
|
||||
def 预计算(self, 自动切装=False):
|
||||
if self.双装备模式 == 1 and 自动切装:
|
||||
# 用于计算一觉
|
||||
temp = deepcopy(self)
|
||||
# 拷贝数据,并修改装备,返回可能的组合
|
||||
数据列表 = []
|
||||
切换列表 = []
|
||||
替换属性_temp = []
|
||||
可能组合 = self.装备替换(temp)
|
||||
for 一觉计算属性 in 可能组合:
|
||||
一觉计算属性.装备属性计算()
|
||||
一觉计算属性.适用数值计算()
|
||||
替换属性_temp.append(一觉计算属性)
|
||||
一觉计算属性.awake_computed = False
|
||||
一觉 = 一觉计算属性.技能表['一次觉醒']
|
||||
三觉 = 一觉计算属性.技能表['三次觉醒']
|
||||
数据 = 三觉.结算统计(一觉计算属性)[3]
|
||||
if 一觉.名称 not in 三觉.关联技能:
|
||||
数据 += 一觉.结算统计(一觉计算属性)[3]
|
||||
一觉计算属性.awake_computed = False
|
||||
数据列表.append(数据) # 3是力量属性 一觉力智都是相等的
|
||||
切换列表.append(一觉计算属性.切换详情)
|
||||
# 取一觉最大值,并修改数据
|
||||
a = max(数据列表)
|
||||
序号 = 数据列表.index(a)
|
||||
if 序号 != 0:
|
||||
temp = '<br><br>'
|
||||
一觉 = self.技能表['一次觉醒']
|
||||
三觉 = self.技能表['三次觉醒']
|
||||
b = int(数据列表[0])
|
||||
c = int(a) - int(b)
|
||||
if 一觉.名称 not in 三觉.关联技能:
|
||||
temp += trans(一觉.名称) + '+'
|
||||
temp += "{}:{}->{}(+{})".format(trans(三觉.名称), b, a, c)
|
||||
else:
|
||||
temp = ''
|
||||
# 计算现有装备BUFF
|
||||
self.装备属性计算()
|
||||
# 一觉属性替换
|
||||
替换属性 = 替换属性_temp[序号]
|
||||
self.一觉Lv = 替换属性.一觉Lv
|
||||
self.一觉力智 = 替换属性.一觉力智
|
||||
self.一觉力智per = 替换属性.一觉力智per
|
||||
|
||||
P = deepcopy(self)
|
||||
适用数值 = P.适用数值计算()
|
||||
适用数值补正 = 替换属性.技能表['一次觉醒'].适用数值 - 适用数值
|
||||
|
||||
self.自适应计算()
|
||||
self.适用数值计算()
|
||||
|
||||
self.技能表['一次觉醒'].等级 = 替换属性.技能表['一次觉醒'].等级
|
||||
self.技能表['二次觉醒'].等级 = 替换属性.技能表['二次觉醒'].等级
|
||||
self.技能表['三次觉醒'].等级 = 替换属性.技能表['三次觉醒'].等级
|
||||
self.技能表['一次觉醒'].适用数值 += 适用数值补正
|
||||
self.切换详情 = 切换列表[序号] + temp
|
||||
|
||||
else:
|
||||
self.装备属性计算()
|
||||
self.自适应计算()
|
||||
self.适用数值计算()
|
||||
|
||||
def 自适应计算(self):
|
||||
|
||||
try:
|
||||
temp = deepcopy(self)
|
||||
temp.适用数值计算()
|
||||
|
||||
in_pre_range = (ctypes.c_int * 6)()
|
||||
if self.希洛克武器词条 == 1:
|
||||
in_pre_range[0] = 1
|
||||
in_pre_range[1] = 1
|
||||
|
||||
for i in range(4):
|
||||
if self.黑鸦词条[i][0] == 1:
|
||||
in_pre_range[i + 2] = 1
|
||||
in_int_data, in_double_data = temp.get_data()
|
||||
preferred.cal_index_buff(in_pre_range, in_int_data, in_double_data)
|
||||
|
||||
if self.希洛克武器词条 == 1:
|
||||
a = in_pre_range[0]
|
||||
b = in_pre_range[1]
|
||||
self.自适应最高值 = [a, b]
|
||||
self.武器属性输入(a, b)
|
||||
|
||||
if self.黑鸦词条[0][0] == 1:
|
||||
self.武器变换属性自适应 = in_pre_range[2]
|
||||
self.黑鸦武器输入(in_pre_range[2])
|
||||
|
||||
self.防具变换属性自适应 = in_pre_range[3:]
|
||||
self.黑鸦属性输入(in_pre_range[3:])
|
||||
pass
|
||||
except Exception as e:
|
||||
self.旧版自适应计算()
|
||||
pass
|
||||
|
||||
def 旧版自适应计算(self):
|
||||
|
||||
# 黑鸦词条计算
|
||||
黑鸦选择 = [0, 0, 0, 0]
|
||||
for i in range(4):
|
||||
if self.黑鸦词条[i][0] == 1:
|
||||
黑鸦选择[i] = 1
|
||||
# 武器词条自适应计算
|
||||
if self.希洛克武器词条 == 1:
|
||||
词条提升率 = []
|
||||
for i in range(len(武器属性组合)):
|
||||
temp = deepcopy(self)
|
||||
# 总数据 = []
|
||||
武器属性A = 武器属性组合[i][0]
|
||||
武器属性B = 武器属性组合[i][1]
|
||||
temp.武器属性输入(武器属性A, 武器属性B)
|
||||
|
||||
提升率 = temp.择优提升率计算()
|
||||
词条提升率.append(提升率)
|
||||
a = max(词条提升率)
|
||||
序号 = 词条提升率.index(a)
|
||||
self.自适应最高值 = 武器属性组合[序号]
|
||||
self.武器属性输入(self.自适应最高值[0], self.自适应最高值[1])
|
||||
|
||||
# 先择优黑鸦防具部分
|
||||
if 黑鸦选择[1] + 黑鸦选择[2] + 黑鸦选择[3] > 0:
|
||||
词条提升率 = []
|
||||
for i in range(len(防具变换属性组合)):
|
||||
temp = deepcopy(self)
|
||||
# 总数据 = []
|
||||
temp.黑鸦属性输入(防具变换属性组合[i])
|
||||
提升率 = temp.择优提升率计算()
|
||||
词条提升率.append(提升率)
|
||||
a = max(词条提升率)
|
||||
序号 = 词条提升率.index(a)
|
||||
self.防具变换属性自适应 = 防具变换属性组合[序号]
|
||||
self.黑鸦属性输入(self.防具变换属性自适应)
|
||||
|
||||
# 再择优武器部分
|
||||
if 黑鸦选择[0] > 0:
|
||||
词条提升率 = []
|
||||
for i in range(7):
|
||||
temp = deepcopy(self)
|
||||
# 总数据 = []
|
||||
temp.黑鸦武器输入(i)
|
||||
if temp.实际名称 == 'BUFF·神启·圣骑士':
|
||||
if i == 0:
|
||||
temp.是否加觉醒 = 1
|
||||
else:
|
||||
temp.是否加觉醒 = 0
|
||||
提升率 = temp.择优提升率计算()
|
||||
词条提升率.append(提升率)
|
||||
a = max(词条提升率)
|
||||
序号 = 词条提升率.index(a)
|
||||
self.武器变换属性自适应 = 序号
|
||||
self.黑鸦武器输入(序号)
|
||||
if 序号 == 0 and self.实际名称 == 'BUFF·神启·圣骑士':
|
||||
self.是否加觉醒 = 1
|
||||
|
||||
def 替换技能(self, skill, name):
|
||||
skill.技能表 = self.技能表
|
||||
self.技能表[name] = skill
|
||||
|
||||
def 武器属性输入(self, index_a, index_b):
|
||||
武器属性A = 武器属性A列表[index_a]
|
||||
武器属性A.当前值 = int(武器属性A.最大值)
|
||||
武器属性A.融合属性(self)
|
||||
if self.武器词条触发 == 1:
|
||||
武器属性B = 武器属性B列表[index_b]
|
||||
武器属性B.当前值 = int(武器属性B.最大值)
|
||||
武器属性B.融合属性(self)
|
||||
else:
|
||||
index_b = 0
|
||||
self.残香词条 = [index_a, 0, index_b, 0]
|
||||
|
||||
def 黑鸦属性输入(self, indices):
|
||||
for i in range(1, 4):
|
||||
if self.黑鸦词条[i][0] == 1:
|
||||
index = indices[i - 1]
|
||||
装备属性 = 装备变换属性列表[index]
|
||||
装备属性.当前值 = int(装备属性.最大值)
|
||||
装备属性.变换属性(self)
|
||||
self.黑鸦词条[i] = [1, index, 装备属性.最大值]
|
||||
|
||||
def 黑鸦武器输入(self, index):
|
||||
if self.黑鸦词条[0][0] == 1:
|
||||
if index > 0:
|
||||
黑鸦武器 = 武器变换属性列表[index]
|
||||
黑鸦武器.当前值 = int(黑鸦武器.最大值)
|
||||
黑鸦武器.变换属性(self)
|
||||
self.黑鸦词条[0] = [1, index, 黑鸦武器.最大值]
|
||||
else:
|
||||
self.技能等级加成('所有', 50, 50, 2)
|
||||
self.技能等级加成('所有', 85, 85, 2)
|
||||
self.技能等级加成('所有', 100, 100, 2)
|
||||
if self.装备检查('世界树之精灵'):
|
||||
self.技能等级加成('所有', 50, 50, 2)
|
||||
|
||||
def 择优提升率计算(self):
|
||||
总数据 = []
|
||||
self.适用数值计算()
|
||||
if self.双装备模式 == 1 and self.技能表['一次觉醒'].是否启用:
|
||||
if self.实际名称 == 'BUFF·神启·圣骑士':
|
||||
if self.是否加觉醒 == 1:
|
||||
self.技能表['一次觉醒'].适用数值 += self.一觉切装加二觉增加体精
|
||||
|
||||
def handle(skill, values):
|
||||
if skill.所在等级 in [50, 100]:
|
||||
values = [int(round(i * self.觉醒择优系数)) for i in values]
|
||||
return values
|
||||
|
||||
self.compute(None, handle)
|
||||
|
||||
return self.提升率计算(总数据)
|
||||
|
||||
def 结果返回(self, x, 总数据):
|
||||
if x == 0:
|
||||
return self.提升率计算(总数据)
|
||||
elif x == 1:
|
||||
return 总数据
|
||||
elif x == 2:
|
||||
return self.提升率计算(总数据, self.排行系数)
|
||||
|
||||
def BUFF计算(self, x=0):
|
||||
self.预计算(自动切装=True)
|
||||
总数据 = self.compute()
|
||||
return self.结果返回(x, 总数据)
|
||||
|
||||
def 装备属性计算(self, x=0):
|
||||
self.装备基础()
|
||||
# self.专属词条计算()
|
||||
|
||||
equips = [equ.get_equ_by_name(i) for i in self.装备栏]
|
||||
suits = [equ.get_suit_by_name(i) for i in self.套装栏]
|
||||
|
||||
for equip in equips:
|
||||
equip.城镇属性_BUFF(self)
|
||||
equip.BUFF属性(self)
|
||||
|
||||
觉醒词条 = self.黑鸦词条[0][0]
|
||||
|
||||
# 黑鸦武器觉醒词条
|
||||
if 觉醒词条 == 3 and equip.部位 == '武器':
|
||||
self.技能等级加成('所有', 50, 50, 2)
|
||||
self.技能等级加成('所有', 85, 85, 2)
|
||||
self.技能等级加成('所有', 100, 100, 2)
|
||||
if equip.名称 == '世界树之精灵' and 觉醒词条 > 0:
|
||||
self.技能等级加成('所有', 50, 50, -2)
|
||||
self.技能等级加成('所有', 85, 85, -2)
|
||||
self.技能等级加成('所有', 100, 100, -2)
|
||||
if 觉醒词条 > 1:
|
||||
self.技能等级加成('所有', 50, 50, 2)
|
||||
|
||||
for suit in suits:
|
||||
suit.城镇属性_BUFF(self)
|
||||
suit.BUFF属性(self)
|
||||
|
||||
self.黑鸦计算()
|
||||
self.希洛克计算()
|
||||
self.奥兹玛计算()
|
||||
|
||||
if self.排行系数 == 1 or x:
|
||||
P = deepcopy(self)
|
||||
P.站街计算()
|
||||
self.站街系数 = P.系数数值站街()
|
||||
|
||||
if x:
|
||||
return
|
||||
|
||||
for equip in equips:
|
||||
equip.进图属性_BUFF(self)
|
||||
|
||||
for suit in suits:
|
||||
suit.进图属性_BUFF(self)
|
||||
|
||||
def 专属词条计算(self):
|
||||
pass
|
||||
|
||||
def 站街计算(self):
|
||||
self.专属词条计算()
|
||||
|
||||
for skill in self.技能表.values():
|
||||
if skill.站街生效 == 1:
|
||||
skill.进图加成 = 0
|
||||
结算 = skill.结算统计(self)
|
||||
self.智力 += 结算[0]
|
||||
self.体力 += 结算[1]
|
||||
self.精神 += 结算[2]
|
||||
|
||||
def 护石计算(self):
|
||||
indices = self.护石栏
|
||||
for i in indices:
|
||||
Talismans(self, i)
|
||||
|
||||
def BUFF面板(self):
|
||||
return self.技能表['BUFF'].技能面板()
|
||||
|
||||
def 一觉面板(self):
|
||||
return self.技能表['一次觉醒'].技能面板()
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,455 @@
|
||||
# 第三页选项文本
|
||||
# 行1行2条目必须相等
|
||||
# 列1(选项) 列2(选项,技能) 不能修改删除
|
||||
from PublicReference.equipment.基础函数 import *
|
||||
|
||||
表头名称1 = "基础细节"
|
||||
|
||||
列名称1 = ["力量", "智力", "物攻", "魔攻", "独立", "属强", "选项"]
|
||||
|
||||
# 1显示黄色字体(进图属性)
|
||||
行名称1 = {
|
||||
"工会属性": 0,
|
||||
"训练官BUFF": 1,
|
||||
"戒指": 0,
|
||||
"婚房": 0,
|
||||
"冒险团": 0,
|
||||
"晶体契约": 1,
|
||||
"收集箱": 0,
|
||||
"勋章": 0,
|
||||
"名称装饰卡": 0,
|
||||
"副武器/盾牌": 0,
|
||||
"快捷栏纹章": 1,
|
||||
"宠物装备-红": 0,
|
||||
"宠物装备-蓝": 0,
|
||||
"宠物装备-绿": 0,
|
||||
"宠物附魔": 0,
|
||||
"站街修正": 0,
|
||||
"进图修正": 1,
|
||||
}
|
||||
|
||||
表头名称2 = "附魔&徽章"
|
||||
|
||||
列名称2 = ["力智", "三攻", "属强", "徽力智", "徽三攻", "选项", "技能"]
|
||||
|
||||
行名称2 = {
|
||||
"上衣": 0,
|
||||
"下装": 0,
|
||||
"头肩": 0,
|
||||
"腰带": 0,
|
||||
"鞋": 0,
|
||||
"手镯": 0,
|
||||
"项链": 0,
|
||||
"戒指": 0,
|
||||
"左槽": 0,
|
||||
"右槽": 0,
|
||||
"耳环": 0,
|
||||
"武器": 0,
|
||||
"称号": 0,
|
||||
"光环": 0,
|
||||
"武器装扮": 0,
|
||||
"皮肤": 0,
|
||||
"时装": 0,
|
||||
}
|
||||
|
||||
# 对应细节选项列表, -1表示没有
|
||||
行1选项 = {
|
||||
"工会属性": [-1],
|
||||
"训练官BUFF": [-1],
|
||||
"戒指": [-1],
|
||||
"婚房": [-1],
|
||||
"冒险团": [-1],
|
||||
"晶体契约": [-1],
|
||||
"收集箱": [-1],
|
||||
"勋章": [x for x in range(17, 37)],
|
||||
"名称装饰卡": [-1],
|
||||
"副武器/盾牌": [-1],
|
||||
"快捷栏纹章": [8],
|
||||
"宠物装备-红": [8, 40, 42, 43, 9, 11, 12, 10, 38],
|
||||
"宠物装备-蓝": [-1],
|
||||
"宠物装备-绿": [-1],
|
||||
"宠物附魔": [-1],
|
||||
"站街修正": [-1],
|
||||
"进图修正": [37],
|
||||
}
|
||||
|
||||
行2选项 = {
|
||||
"上衣": [-1],
|
||||
"下装": [-1],
|
||||
"头肩": [39, 41],
|
||||
"腰带": [39],
|
||||
"鞋": [39],
|
||||
"手镯": [-1],
|
||||
"项链": [-1],
|
||||
"戒指": [-1],
|
||||
"左槽": [16],
|
||||
"右槽": [-1],
|
||||
"耳环": [-1],
|
||||
"武器": [-1],
|
||||
"称号": [39],
|
||||
"光环": [13, 14, 15],
|
||||
"武器装扮": [-1],
|
||||
"皮肤": [-1],
|
||||
"时装": [-1],
|
||||
}
|
||||
|
||||
# 对应细节选项列表, -1表示没有, 999表示读取技能栏
|
||||
行2技能 = {
|
||||
"上衣": [-1],
|
||||
"下装": [-1],
|
||||
"头肩": [0, 2, 1],
|
||||
"腰带": [0, 2],
|
||||
"鞋": [0, 2],
|
||||
"手镯": [-1],
|
||||
"项链": [-1],
|
||||
"戒指": [-1],
|
||||
"左槽": [100],
|
||||
"右槽": [100],
|
||||
"耳环": [-1],
|
||||
"武器": [-1],
|
||||
"称号": [2, 1],
|
||||
"光环": [4, 6, 3, 5, 7],
|
||||
"武器装扮": [44, 45, 46, 47, 48, 49],
|
||||
"皮肤": [-1],
|
||||
"时装": [999],
|
||||
}
|
||||
|
||||
文本框宽度 = 45
|
||||
文本框间隔 = 10
|
||||
|
||||
|
||||
#选项条目################################################################
|
||||
class 细节选项条目0():
|
||||
描述 = 'Lv1-30(主动)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('主动', 1, 30, 1)
|
||||
|
||||
|
||||
class 细节选项条目1():
|
||||
描述 = 'Lv1-35(主动)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('主动', 1, 35, 1)
|
||||
|
||||
|
||||
class 细节选项条目2():
|
||||
描述 = 'Lv1-50(主动)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('主动', 1, 50, 1)
|
||||
|
||||
|
||||
class 细节选项条目3():
|
||||
描述 = 'Lv1-20(所有)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('所有', 1, 20, 1)
|
||||
|
||||
|
||||
class 细节选项条目4():
|
||||
描述 = 'Lv1-30(所有)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('所有', 1, 30, 1)
|
||||
|
||||
|
||||
class 细节选项条目5():
|
||||
描述 = 'Lv20-30(所有)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('所有', 20, 30, 1)
|
||||
|
||||
|
||||
class 细节选项条目6():
|
||||
描述 = 'Lv1-50(所有)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
|
||||
class 细节选项条目7():
|
||||
描述 = 'Lv1-80(所有)Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
|
||||
|
||||
class 细节选项条目8():
|
||||
描述 = '白字 +8%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.附加伤害加成(0.08)
|
||||
|
||||
|
||||
class 细节选项条目9():
|
||||
描述 = '白字 +7%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.附加伤害加成(0.07)
|
||||
|
||||
|
||||
class 细节选项条目10():
|
||||
描述 = '白字 +6%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.附加伤害加成(0.06)
|
||||
|
||||
|
||||
class 细节选项条目11():
|
||||
描述 = '黄字 +7%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.伤害增加加成(0.07)
|
||||
|
||||
|
||||
class 细节选项条目12():
|
||||
描述 = '力智 +7%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.百分比力智加成(0.07)
|
||||
|
||||
|
||||
class 细节选项条目13():
|
||||
描述 = '三攻 +5%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.百分比三攻加成(0.05)
|
||||
|
||||
|
||||
class 细节选项条目14():
|
||||
描述 = '黄字 +5%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.伤害增加加成(0.05)
|
||||
|
||||
|
||||
class 细节选项条目15():
|
||||
描述 = '暴伤 +5%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.暴击伤害加成(0.05)
|
||||
|
||||
|
||||
class 细节选项条目16():
|
||||
描述 = '终伤 +3%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.最终伤害加成(0.03)
|
||||
|
||||
|
||||
class 勋章强化选项():
|
||||
def __init__(self, x=0):
|
||||
self.y = 勋章计算(50, '传说', x)
|
||||
self.描述 = '+{}(+{})'.format(x, self.y)
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.力量 += self.y
|
||||
属性.智力 += self.y
|
||||
属性.体力 += self.y
|
||||
属性.精神 += self.y
|
||||
|
||||
|
||||
class 细节选项条目17(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(1)
|
||||
|
||||
|
||||
class 细节选项条目18(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(2)
|
||||
|
||||
|
||||
class 细节选项条目19(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(3)
|
||||
|
||||
|
||||
class 细节选项条目20(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(4)
|
||||
|
||||
|
||||
class 细节选项条目21(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(5)
|
||||
|
||||
|
||||
class 细节选项条目22(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(6)
|
||||
|
||||
|
||||
class 细节选项条目23(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(7)
|
||||
|
||||
|
||||
class 细节选项条目24(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(8)
|
||||
|
||||
|
||||
class 细节选项条目25(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(9)
|
||||
|
||||
|
||||
class 细节选项条目26(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(10)
|
||||
|
||||
|
||||
class 细节选项条目27(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(11)
|
||||
|
||||
|
||||
class 细节选项条目28(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(12)
|
||||
|
||||
|
||||
class 细节选项条目29(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(13)
|
||||
|
||||
|
||||
class 细节选项条目30(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(14)
|
||||
|
||||
|
||||
class 细节选项条目31(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(15)
|
||||
|
||||
|
||||
class 细节选项条目32(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(16)
|
||||
|
||||
|
||||
class 细节选项条目33(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(17)
|
||||
|
||||
|
||||
class 细节选项条目34(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(18)
|
||||
|
||||
|
||||
class 细节选项条目35(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(19)
|
||||
|
||||
|
||||
class 细节选项条目36(勋章强化选项):
|
||||
def __init__(self):
|
||||
super().__init__(20)
|
||||
|
||||
|
||||
class 细节选项条目37():
|
||||
描述 = '队友 +34%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.队友增幅系数 *= 1.34
|
||||
|
||||
|
||||
class 细节选项条目38():
|
||||
描述 = '白字 +4%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.附加伤害加成(0.04)
|
||||
|
||||
|
||||
class 细节选项条目39():
|
||||
描述 = '技攻 +3%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能攻击力加成(0.03)
|
||||
|
||||
|
||||
class 细节选项条目40():
|
||||
描述 = '三攻 +8%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.百分比三攻加成(0.08)
|
||||
|
||||
|
||||
class 细节选项条目41():
|
||||
描述 = '技攻 +2%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.技能攻击力加成(0.02)
|
||||
|
||||
|
||||
class 细节选项条目42():
|
||||
描述 = '力智 +8%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.百分比力智加成(0.08)
|
||||
|
||||
|
||||
class 细节选项条目43():
|
||||
描述 = '终伤 +8%'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.最终伤害加成(0.08)
|
||||
|
||||
|
||||
class 细节选项条目44():
|
||||
描述 = '40级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(40, 1)
|
||||
|
||||
|
||||
class 细节选项条目45():
|
||||
描述 = '45级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(45, 1)
|
||||
|
||||
|
||||
class 细节选项条目46():
|
||||
描述 = '60级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(60, 1)
|
||||
|
||||
|
||||
class 细节选项条目47():
|
||||
描述 = '70级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(70, 1)
|
||||
|
||||
|
||||
class 细节选项条目48():
|
||||
描述 = '75级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(75, 1)
|
||||
|
||||
|
||||
class 细节选项条目49():
|
||||
描述 = '80级技能 Lv+1'
|
||||
|
||||
def 效果(self, 属性):
|
||||
属性.武器装扮等级加成(80, 1)
|
||||
|
||||
|
||||
细节选项列表 = ()
|
||||
i = 0
|
||||
while i >= 0:
|
||||
try:
|
||||
exec('细节选项列表 += (细节选项条目' + str(i) + '(),)')
|
||||
i += 1
|
||||
except:
|
||||
i = -1
|
||||
|
||||
细节选项序号 = dict()
|
||||
for i in range(len(细节选项列表)):
|
||||
细节选项序号[细节选项列表[i].描述] = i
|
||||
@@ -0,0 +1,156 @@
|
||||
# 选项设置属性部分 0-6默认勾选
|
||||
|
||||
|
||||
class 选项设置0():
|
||||
名称 = '顶级力量灵药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图力量 += 175
|
||||
|
||||
|
||||
class 选项设置1():
|
||||
名称 = '顶级智力灵药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图智力 += 175
|
||||
|
||||
|
||||
class 选项设置2():
|
||||
名称 = '斗神之吼秘药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.斗神之吼秘药 = True
|
||||
|
||||
|
||||
class 选项设置3():
|
||||
名称 = '赛丽亚的特调酷饮'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图属强 += 5
|
||||
|
||||
|
||||
class 选项设置4():
|
||||
名称 = '魔界战力释放秘药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图力量 += 150
|
||||
属性.进图智力 += 150
|
||||
|
||||
|
||||
class 选项设置5():
|
||||
名称 = '宠物次数适用(10%)'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.年宠技能 = True
|
||||
|
||||
|
||||
class 选项设置6():
|
||||
名称 = '称号效果触发'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.称号触发 = True
|
||||
|
||||
|
||||
class 选项设置7():
|
||||
名称 = '精神刺激灵药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.技能冷却缩减(1, 100, 0.20)
|
||||
|
||||
|
||||
class 选项设置8():
|
||||
名称 = '虚祖皇家能量秘药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图力量 += 100
|
||||
属性.进图智力 += 100
|
||||
属性.进图属强 += 5
|
||||
|
||||
|
||||
class 选项设置9():
|
||||
名称 = '武者的精神秘药'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.加算冷却缩减 += 0.30
|
||||
|
||||
|
||||
class 选项设置10():
|
||||
名称 = '黄金羊毛'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图力量 += 60
|
||||
属性.进图智力 += 60
|
||||
|
||||
|
||||
class 选项设置11():
|
||||
名称 = '白兔子(20%全程)'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.白兔子技能 = True
|
||||
|
||||
|
||||
class 选项设置12():
|
||||
名称 = '雷米迪亚蛋糕'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.百分比力智 += 0.20
|
||||
|
||||
|
||||
class 选项设置13():
|
||||
名称 = '特权网吧BUFF'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.力量 += 100
|
||||
属性.智力 += 100
|
||||
属性.技能等级加成('所有', 1, 85, 1)
|
||||
属性.加算冷却缩减 += 0.10
|
||||
|
||||
|
||||
class 选项设置14():
|
||||
名称 = '希洛克系统奶'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.系统奶系数 = 1.35
|
||||
属性.系统奶基数 = 7664
|
||||
|
||||
|
||||
class 选项设置15():
|
||||
名称 = '黑鸦系统奶'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.系统奶系数 = 2.31
|
||||
属性.系统奶基数 = 4581
|
||||
|
||||
|
||||
class 选项设置16():
|
||||
名称 = '奶系BUFF:10W/4.5K'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图力量 += 100000
|
||||
属性.进图智力 += 100000
|
||||
属性.进图物理攻击力 += 4500
|
||||
属性.进图魔法攻击力 += 4500
|
||||
属性.进图独立攻击力 += 4500
|
||||
|
||||
|
||||
class 选项设置17():
|
||||
名称 = '屏蔽三觉'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.屏蔽三觉 = True
|
||||
|
||||
|
||||
class 选项设置18():
|
||||
名称 = '[冒险]属性强化药水'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
|
||||
选项设置列表 = ()
|
||||
for i in range(19):
|
||||
exec('选项设置列表 += (选项设置' + str(i) + '(),)')
|
||||
|
||||
选项设置序号 = dict()
|
||||
for i in range(len(选项设置列表)):
|
||||
选项设置序号[选项设置列表[i].名称] = i
|
||||
@@ -0,0 +1,41 @@
|
||||
# 选项设置属性部分
|
||||
|
||||
|
||||
class 选项设置0():
|
||||
名称 = '称号效果触发'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.称号触发 = True
|
||||
|
||||
|
||||
class 选项设置1():
|
||||
名称 = '魔王契约BUFF'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.百分比体精 += 0.05
|
||||
|
||||
|
||||
class 选项设置2():
|
||||
名称 = '雷米迪亚蛋糕'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.百分比体精 += 0.20
|
||||
|
||||
|
||||
class 选项设置3():
|
||||
名称 = '特权网吧BUFF'
|
||||
|
||||
def 适用效果(self, 属性):
|
||||
属性.智力 += 100
|
||||
属性.体力 += 100
|
||||
属性.精神 += 100
|
||||
属性.技能等级加成('所有', 1, 85, 1)
|
||||
|
||||
|
||||
选项设置列表 = ()
|
||||
for i in range(4):
|
||||
exec('选项设置列表 += (选项设置' + str(i) + '(),)')
|
||||
|
||||
选项设置序号 = dict()
|
||||
for i in range(len(选项设置列表)):
|
||||
选项设置序号[选项设置列表[i].名称] = i
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,21 @@
|
||||
class Item():
|
||||
名称 = '无'
|
||||
显示名称 = '无'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 触发属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
return ''
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
return ''
|
||||
@@ -0,0 +1,329 @@
|
||||
from PublicReference.equipment.equ_list import *
|
||||
from PublicReference.equipment.防具基础 import 设置防具基础
|
||||
from PublicReference.utils.config import trans, 千蛛减防, 天御套装, 战术白字, 天劫光环, 普雷武器显示
|
||||
|
||||
进图触发title = trans('<font color="#00A2E8">{进图触发}:</font><br>')
|
||||
其他属性title = trans('<font color="#00A2E8">{其他属性}:</font><br>')
|
||||
遴选属性title = trans('<font color="#00A2E8">{遴选属性}:</font><br>')
|
||||
辅助属性title = trans('<font color="#00A2E8">{辅助职业专属属性}:</font><br>')
|
||||
改造遴选title = trans('<font color="#FF8200">{遴选属性}:</font><br>')
|
||||
神话属性title = trans('<font color="#00A2E8">{神话属性}:</font><br>')
|
||||
期望属性title = trans('<font color="#00A2E8">{期望属性}:</font><br>')
|
||||
改造属性title = trans('<font color="#FF8200">{改造属性}(+$):</font><br>')
|
||||
|
||||
|
||||
class 装备:
|
||||
名称 = ''
|
||||
模式 = 0
|
||||
图片ID = ''
|
||||
所属套装 = ''
|
||||
所属套装2 = '无'
|
||||
等级 = 0
|
||||
品质 = ''
|
||||
部位 = ''
|
||||
类型 = ''
|
||||
力量 = 0
|
||||
智力 = 0
|
||||
体力 = 0
|
||||
精神 = 0
|
||||
属性描述 = ""
|
||||
物理攻击力 = 0
|
||||
魔法攻击力 = 0
|
||||
独立攻击力 = 0
|
||||
属性1描述 = '无'
|
||||
属性1范围 = []
|
||||
属性1选择 = 0
|
||||
属性2描述 = '无'
|
||||
属性2范围 = []
|
||||
属性2选择 = 0
|
||||
属性3描述 = '无'
|
||||
属性3范围 = []
|
||||
属性3选择 = 0
|
||||
属性4描述 = '无'
|
||||
属性4范围 = []
|
||||
属性4选择 = 0
|
||||
|
||||
def __init__(self) -> None:
|
||||
if self.部位 in ['上衣', '下装', '腰带', '头肩', '鞋']:
|
||||
设置防具基础(self)
|
||||
pass
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 进图属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 产物升级(self, 属性):
|
||||
pass
|
||||
|
||||
def 进图属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 变换属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 其它属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 其它属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def BUFF属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
|
||||
力量 = 0
|
||||
智力 = 0
|
||||
|
||||
if self.部位 in ['上衣', '下装', '腰带', '头肩', '鞋']:
|
||||
力量 = self.力量[属性.防具类型]
|
||||
智力 = self.智力[属性.防具类型]
|
||||
else:
|
||||
力量 = self.力量
|
||||
智力 = self.智力
|
||||
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('力量'), 力量)) if 力量 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('智力'), 智力)) if 智力 > 0 else ''
|
||||
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('物理攻击力'), self.物理攻击力)) if self.物理攻击力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('魔法攻击力'), self.魔法攻击力)) if self.魔法攻击力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('独立攻击力'), self.独立攻击力)) if self.独立攻击力 > 0 else ''
|
||||
|
||||
self.城镇属性(属性)
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
self.属性描述 += 遴选属性title
|
||||
self.变换属性(属性)
|
||||
if self.属性描述.endswith(遴选属性title):
|
||||
self.属性描述 = self.属性描述.replace(遴选属性title, '')
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def 装备描述_变换属性(self, 属性):
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
力量 = 0
|
||||
智力 = 0
|
||||
if self.部位 in ['上衣', '下装', '腰带', '头肩', '鞋']:
|
||||
力量 = self.力量[属性.防具类型]
|
||||
智力 = self.智力[属性.防具类型]
|
||||
else:
|
||||
力量 = self.力量
|
||||
智力 = self.智力
|
||||
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('力量'), 力量)) if 力量 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('智力'), 智力)) if 智力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('物理攻击力'), self.物理攻击力)) if self.物理攻击力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('魔法攻击力'), self.魔法攻击力)) if self.魔法攻击力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(
|
||||
trans('独立攻击力'), self.独立攻击力)) if self.独立攻击力 > 0 else ''
|
||||
|
||||
self.城镇属性(属性)
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
self.属性描述 += 遴选属性title
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
智力 = 0
|
||||
力量 = 0
|
||||
体力 = 0
|
||||
精神 = 0
|
||||
if self.部位 in ['上衣', '下装', '腰带', '头肩', '鞋']:
|
||||
智力 = self.智力['板甲']
|
||||
力量 = self.力量['板甲']
|
||||
体力 = self.体力['板甲']
|
||||
精神 = self.精神['板甲']
|
||||
else:
|
||||
智力 = self.智力
|
||||
力量 = self.力量
|
||||
体力 = self.体力
|
||||
精神 = self.精神
|
||||
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans("智力"), 智力)) if 智力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('力量'), 力量)) if 力量 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('体力'), 体力)) if 体力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('精神'), 精神)) if 精神 > 0 else ''
|
||||
|
||||
self.城镇属性_BUFF(属性)
|
||||
self.属性描述 += 辅助属性title
|
||||
self.BUFF属性(属性)
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性_BUFF(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性_BUFF(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def 装备描述_变换属性_BUFF(self, 属性):
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
|
||||
智力 = 0
|
||||
力量 = 0
|
||||
体力 = 0
|
||||
精神 = 0
|
||||
if self.部位 in ['上衣', '下装', '腰带', '头肩', '鞋']:
|
||||
智力 = self.智力['板甲']
|
||||
力量 = self.力量['板甲']
|
||||
体力 = self.体力['板甲']
|
||||
精神 = self.精神['板甲']
|
||||
else:
|
||||
智力 = self.智力
|
||||
力量 = self.力量
|
||||
体力 = self.体力
|
||||
精神 = self.精神
|
||||
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans("智力"), 智力)) if 智力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('力量'), 力量)) if 力量 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('体力'), 体力)) if 体力 > 0 else ''
|
||||
self.属性描述 += ('{} +{}<br>'.format(trans('精神'), 精神)) if 精神 > 0 else ''
|
||||
|
||||
self.城镇属性_BUFF(属性)
|
||||
self.属性描述 += 辅助属性title
|
||||
self.BUFF属性(属性)
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性_BUFF(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性_BUFF(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
self.属性描述 += 遴选属性title
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def 图片ID(self):
|
||||
if self.图片ID == '':
|
||||
return self.__class__.__name__.replace('装备', '')
|
||||
else:
|
||||
return self.图片ID
|
||||
|
||||
|
||||
class 改造产物(装备):
|
||||
模式 = 1
|
||||
所属套装 = '智慧产物'
|
||||
等级 = 100
|
||||
品质 = '史诗'
|
||||
力量 = 0
|
||||
智力 = 0
|
||||
物理攻击力 = 0
|
||||
魔法攻击力 = 0
|
||||
独立攻击力 = 0
|
||||
关联套装 = ''
|
||||
|
||||
def 基础属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 改造属性(self, 属性, x):
|
||||
pass
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 进图属性(self, 属性):
|
||||
if self.关联套装 in 属性.套装栏:
|
||||
self.改造属性(属性, 属性.获取改造(self.部位))
|
||||
pass
|
||||
|
||||
def 其它属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
return temp
|
||||
|
||||
|
||||
class 套装:
|
||||
属性描述 = ''
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 进图属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 进图属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 其它属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 其它属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
|
||||
self.城镇属性(属性)
|
||||
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
属性.装备描述 = 1
|
||||
self.属性描述 = ''
|
||||
self.城镇属性_BUFF(属性)
|
||||
self.属性描述 += 辅助属性title
|
||||
self.BUFF属性(属性)
|
||||
self.属性描述 += 进图触发title
|
||||
self.进图属性_BUFF(属性)
|
||||
if self.属性描述.endswith(进图触发title):
|
||||
self.属性描述 = self.属性描述.replace(进图触发title, '')
|
||||
self.属性描述 += 其他属性title
|
||||
self.其它属性_BUFF(属性)
|
||||
if self.属性描述.endswith(其他属性title):
|
||||
self.属性描述 = self.属性描述.replace(其他属性title, '')
|
||||
属性.装备描述 = 0
|
||||
return self.属性描述
|
||||
|
||||
def BUFF属性(self, 属性):
|
||||
pass
|
||||
@@ -0,0 +1,195 @@
|
||||
# 宠物属性部分
|
||||
from PublicReference.equipment.base_item import Item
|
||||
|
||||
宠物列表 = [None] * 10
|
||||
|
||||
|
||||
class 宠物9(Item):
|
||||
显示名称 = '(22)至尊·超越时空·厄俄斯/赫斯'
|
||||
名称 = "超越时空·厄俄斯/赫斯"
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 160
|
||||
属性.体力 += 160
|
||||
属性.精神 += 160
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +160<br>'
|
||||
temp += '体力 +160<br>'
|
||||
temp += '精神 +160<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物8(Item):
|
||||
显示名称 = '(22)普通·次元探险家·厄俄斯/赫斯'
|
||||
名称 = "次元探险家·厄俄斯/赫斯"
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 150
|
||||
属性.体力 += 150
|
||||
属性.精神 += 150
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +150<br>'
|
||||
temp += '体力 +150<br>'
|
||||
temp += '精神 +150<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物7(Item):
|
||||
显示名称 = '(21)至尊·火神的化身'
|
||||
名称 = "火神的化身"
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 160
|
||||
属性.体力 += 160
|
||||
属性.精神 += 160
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +160<br>'
|
||||
temp += '体力 +160<br>'
|
||||
temp += '精神 +160<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物6(Item):
|
||||
显示名称 = '(21)普通·骑士/精灵使'
|
||||
名称 = "骑士/精灵使"
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 150
|
||||
属性.体力 += 150
|
||||
属性.精神 += 150
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +150<br>'
|
||||
temp += '体力 +150<br>'
|
||||
temp += '精神 +150<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物5(Item):
|
||||
显示名称 = '(20)至尊·暴风圣女'
|
||||
名称 = "暴风圣女"
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 150
|
||||
属性.体力 += 150
|
||||
属性.精神 += 150
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +150<br>'
|
||||
temp += '体力 +150<br>'
|
||||
temp += '精神 +150<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物4(Item):
|
||||
显示名称 = '(19)至尊·神迹·莱恩'
|
||||
名称 = '神迹·莱恩'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 120
|
||||
属性.体力 += 120
|
||||
属性.精神 += 120
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +120<br>'
|
||||
temp += '体力 +120<br>'
|
||||
temp += '精神 +120<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物3(Item):
|
||||
显示名称 = '(20)普通·神官'
|
||||
名称 = '神官格洛丽亚'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 140
|
||||
属性.体力 += 140
|
||||
属性.精神 += 140
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +140<br>'
|
||||
temp += '体力 +140<br>'
|
||||
temp += '精神 +140<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物2(Item):
|
||||
显示名称 = '(19)普通·莱恩'
|
||||
名称 = '骑士莱恩'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 120
|
||||
属性.体力 += 120
|
||||
属性.精神 += 120
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +120<br>'
|
||||
temp += '体力 +120<br>'
|
||||
temp += '精神 +120<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物1(Item):
|
||||
显示名称 = '(15)迷你战争领主-SSS型'
|
||||
名称 = '迷你战争领主-SSS型'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
属性.智力 += 10
|
||||
属性.体力 += 10
|
||||
属性.精神 += 10
|
||||
属性.技能等级加成('所有', 1, 50, 2)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
temp += '智力 +10<br>'
|
||||
temp += '体力 +10<br>'
|
||||
temp += '精神 +10<br>'
|
||||
temp += 'Lv1-50 技能等级+2<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物0(Item):
|
||||
显示名称 = '无'
|
||||
名称 = '无'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = ''
|
||||
return temp
|
||||
|
||||
|
||||
for i in range(len(宠物列表)):
|
||||
exec('宠物列表[{}] = 宠物{}()'.format(len(宠物列表) - i - 1, i))
|
||||
|
||||
宠物序号 = dict()
|
||||
for i in range(len(宠物列表)):
|
||||
宠物序号[宠物列表[i].名称] = i
|
||||
@@ -0,0 +1,7 @@
|
||||
from .描述_buff import BUFF增加
|
||||
|
||||
|
||||
def Talismans(self, i):
|
||||
values = [0, 0.02, 0.04, 0.06, 0.08]
|
||||
value = round(1 + values[i], 2)
|
||||
BUFF增加(self, BUFF力量per=value, BUFF智力per=value)
|
||||
@@ -0,0 +1,205 @@
|
||||
from PublicReference.utils.common import to_percent
|
||||
from PublicReference.utils.config import trans
|
||||
|
||||
label = '{}{} +{}<br>'
|
||||
力智增加量 = trans('{力量、智力}{增加量}')
|
||||
力量增加量 = trans('{力量}{增加量}')
|
||||
智力增加量 = trans('{智力}{增加量}')
|
||||
三攻增加量 = trans('{物理、魔法、独立攻击力}{增加量}')
|
||||
物攻增加量 = trans('{物理攻击力}{增加量}')
|
||||
魔攻增加量 = trans('{魔法攻击力}{增加量}')
|
||||
独立增加量 = trans('{独立攻击力}{增加量}')
|
||||
|
||||
|
||||
def BUFF增加(
|
||||
self,
|
||||
BUFFLv=0,
|
||||
BUFF力量=0,
|
||||
BUFF智力=0,
|
||||
BUFF力量per=1,
|
||||
BUFF智力per=1,
|
||||
BUFF物攻=0,
|
||||
BUFF魔攻=0,
|
||||
BUFF独立=0,
|
||||
BUFF物攻per=1,
|
||||
BUFF魔攻per=1,
|
||||
BUFF独立per=1,
|
||||
BUFF力智=0,
|
||||
BUFF三攻=0,
|
||||
BUFF力智per=1,
|
||||
BUFF三攻per=1,
|
||||
):
|
||||
|
||||
if BUFF力智 > 0:
|
||||
BUFF力量 += BUFF力智
|
||||
BUFF智力 += BUFF力智
|
||||
if BUFF三攻 > 0:
|
||||
BUFF物攻 += BUFF三攻
|
||||
BUFF魔攻 += BUFF三攻
|
||||
BUFF独立 += BUFF三攻
|
||||
if BUFF力智per > 0:
|
||||
BUFF力量per *= BUFF力智per
|
||||
BUFF智力per *= BUFF力智per
|
||||
if BUFF三攻per > 0:
|
||||
BUFF物攻per *= BUFF三攻per
|
||||
BUFF魔攻per *= BUFF三攻per
|
||||
BUFF独立per *= BUFF三攻per
|
||||
|
||||
buff_name = trans('Lv30 Buff技能')
|
||||
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
self.BUFFLv += BUFFLv
|
||||
self.BUFF力量 += BUFF力量
|
||||
self.BUFF智力 += BUFF智力
|
||||
self.BUFF物攻 += BUFF物攻
|
||||
self.BUFF魔攻 += BUFF魔攻
|
||||
self.BUFF独立 += BUFF独立
|
||||
self.BUFF力量per *= BUFF力量per
|
||||
self.BUFF智力per *= BUFF智力per
|
||||
self.BUFF物攻per *= BUFF物攻per
|
||||
self.BUFF魔攻per *= BUFF魔攻per
|
||||
self.BUFF独立per *= BUFF独立per
|
||||
buff_name = '[{}]'.format(trans(self.技能表['BUFF'].名称))
|
||||
|
||||
tem = ''
|
||||
|
||||
if BUFFLv > 0:
|
||||
tem += label.format(buff_name, trans("Lv"), int(BUFFLv))
|
||||
|
||||
if BUFF力量 > 0 and BUFF智力 > 0:
|
||||
tem += label.format(buff_name, 力智增加量, int(BUFF力量))
|
||||
elif BUFF力量 > 0:
|
||||
tem += label.format(buff_name, 力量增加量, int(BUFF力量))
|
||||
elif BUFF智力 > 0:
|
||||
tem += label.format(buff_name, 智力增加量, int(BUFF智力))
|
||||
|
||||
if BUFF力量per > 1 and BUFF智力per > 1:
|
||||
tem += label.format(buff_name, 力智增加量, to_percent(BUFF力量per - 1))
|
||||
elif BUFF力量per > 1:
|
||||
tem += label.format(buff_name, 力量增加量, to_percent(BUFF力量per - 1))
|
||||
elif BUFF智力per > 1:
|
||||
tem += label.format(buff_name, 智力增加量, to_percent(BUFF智力per - 1))
|
||||
|
||||
if BUFF物攻 > 0 and BUFF魔攻 > 0 and BUFF独立 > 0:
|
||||
tem += label.format(buff_name, 三攻增加量, int(BUFF物攻))
|
||||
elif BUFF物攻 > 0:
|
||||
tem += label.format(buff_name, 物攻增加量, int(BUFF物攻))
|
||||
elif BUFF魔攻 > 0:
|
||||
tem += label.format(buff_name, 魔攻增加量, int(BUFF魔攻))
|
||||
elif BUFF独立 > 0:
|
||||
tem += label.format(buff_name, 独立增加量, int(BUFF独立))
|
||||
|
||||
if BUFF物攻per > 1 and BUFF魔攻per > 1 and BUFF独立per > 1:
|
||||
tem += label.format(buff_name, 三攻增加量, to_percent(BUFF物攻per - 1))
|
||||
elif BUFF物攻per > 1:
|
||||
tem += label.format(buff_name, 物攻增加量, to_percent(BUFF物攻per - 1))
|
||||
elif BUFF魔攻per > 1:
|
||||
tem += label.format(buff_name, 魔攻增加量, to_percent(BUFF魔攻per - 1))
|
||||
elif BUFF独立per > 1:
|
||||
tem += label.format(buff_name, 独立增加量, to_percent(BUFF独立per - 1))
|
||||
|
||||
return tem
|
||||
|
||||
|
||||
def 觉醒增加(self, 一觉Lv=0, 一觉力智=0, 一觉力智per=1):
|
||||
awake_name = 'Lv50主动技能'
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
self.一觉Lv += 一觉Lv
|
||||
self.一觉力智 += 一觉力智
|
||||
self.一觉力智per *= 一觉力智per
|
||||
awake_name = '[{}]'.format(self.技能表['一次觉醒'].名称)
|
||||
tem = ''
|
||||
|
||||
if 一觉Lv > 0:
|
||||
tem += label.format(awake_name, trans('Lv'), int(一觉Lv))
|
||||
if 一觉力智 > 0:
|
||||
tem += label.format(awake_name, 力智增加量, int(一觉力智))
|
||||
if 一觉力智per > 1:
|
||||
tem += label.format(awake_name, 力智增加量, to_percent(一觉力智per - 1))
|
||||
return tem
|
||||
|
||||
|
||||
def 力智固定加成(self, x=0):
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
self.力量 += x
|
||||
self.智力 += x
|
||||
if self.类型 not in ['力量', '智力']:
|
||||
return ''
|
||||
return '{} +{}<br>'.format(trans("力量、智力"), x)
|
||||
|
||||
|
||||
def 体精固定加成(self, x=0):
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
self.体力 += x
|
||||
self.精神 += x
|
||||
if self.类型 not in ['体力', '精神']:
|
||||
return ''
|
||||
return '{} +{}<br>'.format(trans("体力、精神"), x)
|
||||
|
||||
|
||||
def 被动增加(self,
|
||||
转职被动Lv=0,
|
||||
转职被动智力=0,
|
||||
守护恩赐体精=0,
|
||||
信念光环体精=0,
|
||||
一觉被动Lv=0,
|
||||
一觉被动力智=0,
|
||||
被动进图加成=0):
|
||||
角色 = None
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
self.转职被动Lv += 转职被动Lv
|
||||
self.守护恩赐体精 += 守护恩赐体精
|
||||
self.转职被动智力 += 转职被动智力
|
||||
self.一觉被动Lv += 一觉被动Lv
|
||||
self.信念光环体精 += 信念光环体精
|
||||
self.一觉被动力智 += 一觉被动力智
|
||||
self.被动进图加成 += 被动进图加成
|
||||
角色 = self.角色
|
||||
tem = ''
|
||||
|
||||
转职被动 = {
|
||||
'圣职者(男)': '[{守护恩赐}]',
|
||||
'圣职者(女)': '[{启示圣歌}]',
|
||||
'魔法师(女)': '[{人偶操纵者}]',
|
||||
'None': '[{守护恩赐}]、[{启示圣歌}]、[{人偶操纵者}]'
|
||||
}[str(角色)]
|
||||
|
||||
if 转职被动Lv > 0:
|
||||
tem += label.format(trans(转职被动), trans("技能Lv"), int(转职被动Lv))
|
||||
|
||||
if 被动进图加成 > 0:
|
||||
转职被动智力 += 被动进图加成
|
||||
信念光环体精 += 被动进图加成
|
||||
|
||||
if 角色 == '圣职者(男)' or 角色 is None:
|
||||
if 守护恩赐体精 > 0:
|
||||
tem += label.format(trans("[{守护恩赐}]"), trans('体力、精神'), int(守护恩赐体精))
|
||||
if 一觉被动Lv > 0:
|
||||
tem += label.format(trans("[{信念光环}]"), trans('技能Lv'), int(一觉被动Lv))
|
||||
if 一觉被动力智 > 0:
|
||||
tem += label.format(trans("[{信念光环}]"), trans('{体力、精神}{增加量}'),
|
||||
int(一觉被动力智))
|
||||
if 角色 in ['圣职者(女)', '魔法师(女)'] or 角色 is None:
|
||||
觉醒被动 = {
|
||||
'圣职者(女)': '[{虔诚信念}]',
|
||||
'魔法师(女)': '[{少女的爱}]',
|
||||
'None': '[{虔诚信念}]、[{少女的爱}]'
|
||||
}[str(角色)]
|
||||
if 转职被动智力 > 0:
|
||||
tem += label.format(trans(转职被动), trans("智力"), int(转职被动智力))
|
||||
if 一觉被动Lv > 0:
|
||||
tem += label.format(trans(觉醒被动), trans("技能Lv"), int(一觉被动Lv))
|
||||
if 一觉被动力智 > 0:
|
||||
tem += label.format(trans(觉醒被动), 力智增加量, int(一觉被动力智))
|
||||
return tem
|
||||
|
||||
|
||||
def tooltip_trim(tempstr):
|
||||
if tempstr.endswith('<br>'):
|
||||
tempstr = tempstr[:-4]
|
||||
return tempstr
|
||||
@@ -0,0 +1,206 @@
|
||||
# 武器融合属性部分
|
||||
|
||||
|
||||
class 武器属性():
|
||||
固定属性描述 = ''
|
||||
随机属性描述 = ''
|
||||
当前值 = 0
|
||||
间隔 = 1
|
||||
最小值 = 0
|
||||
最大值 = 4
|
||||
|
||||
def range(self):
|
||||
temp = self.最大值
|
||||
array = []
|
||||
while temp > self.最小值 - self.间隔:
|
||||
value = str(int(temp))
|
||||
if self.间隔 // 10 < 1:
|
||||
value += '%'
|
||||
array.append(value)
|
||||
temp -= self.间隔
|
||||
return array
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
pass
|
||||
|
||||
|
||||
class 武器属性A0(武器属性):
|
||||
固定属性描述 = '无'
|
||||
随机属性描述 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 武器属性A1(武器属性):
|
||||
固定属性描述 = '黄字'
|
||||
随机属性描述 = 'BUFF力智+3%,一觉力智+'
|
||||
最小值 = 40
|
||||
最大值 = 60
|
||||
间隔 = 10
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF力量per *= 1.03
|
||||
属性.BUFF智力per *= 1.03
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
class 武器属性A2(武器属性):
|
||||
固定属性描述 = '暴伤'
|
||||
随机属性描述 = '一觉力智+3%,BUFF力智+'
|
||||
最小值 = 2
|
||||
最大值 = 4
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智per *= 1.03
|
||||
|
||||
|
||||
class 武器属性A3(武器属性):
|
||||
固定属性描述 = '白字'
|
||||
随机属性描述 = '一觉力智+25,BUFF三攻+'
|
||||
最小值 = 2
|
||||
最大值 = 4
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF魔攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF独立per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智 += 25
|
||||
|
||||
|
||||
class 武器属性A4(武器属性):
|
||||
固定属性描述 = '终伤'
|
||||
随机属性描述 = 'BUFF三攻+3%,一觉力智+'
|
||||
最小值 = 1
|
||||
最大值 = 3
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1.03
|
||||
属性.BUFF魔攻per *= 1.03
|
||||
属性.BUFF独立per *= 1.03
|
||||
属性.一觉力智per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 武器属性A5(武器属性):
|
||||
固定属性描述 = '力智'
|
||||
随机属性描述 = '面板+'
|
||||
最小值 = 125
|
||||
最大值 = 185
|
||||
间隔 = 30
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.守护恩赐体精 += self.当前值
|
||||
属性.转职被动智力 += self.当前值
|
||||
|
||||
|
||||
class 武器属性A6(武器属性):
|
||||
固定属性描述 = '三攻'
|
||||
随机属性描述 = '一觉Lv+1,BUFF力智+'
|
||||
最小值 = 1
|
||||
最大值 = 3
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.一觉Lv += 1
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 武器属性B0(武器属性):
|
||||
固定属性描述 = '无'
|
||||
随机属性描述 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 武器属性B1(武器属性):
|
||||
固定属性描述 = '黄字'
|
||||
随机属性描述 = 'BUFF力智+3%,一觉力智 +'
|
||||
最小值 = 20
|
||||
最大值 = 40
|
||||
间隔 = 10
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF力量per *= 1.03
|
||||
属性.BUFF智力per *= 1.03
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
class 武器属性B2(武器属性):
|
||||
固定属性描述 = '暴伤'
|
||||
随机属性描述 = '一觉力智+2%,BUFF力智 +'
|
||||
最小值 = 2
|
||||
最大值 = 4
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智per *= 1.02
|
||||
|
||||
|
||||
class 武器属性B3(武器属性):
|
||||
固定属性描述 = '白字'
|
||||
随机属性描述 = '一觉力智+25,BUFF三攻+'
|
||||
最小值 = 1
|
||||
最大值 = 3
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF魔攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF独立per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智 += 25
|
||||
|
||||
|
||||
class 武器属性B4(武器属性):
|
||||
固定属性描述 = '终伤'
|
||||
随机属性描述 = 'BUFF三攻+2%,一觉力智+'
|
||||
最小值 = 1
|
||||
最大值 = 3
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1.02
|
||||
属性.BUFF魔攻per *= 1.02
|
||||
属性.BUFF独立per *= 1.02
|
||||
属性.一觉力智per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 武器属性B5(武器属性):
|
||||
固定属性描述 = '力智'
|
||||
随机属性描述 = '面板+'
|
||||
最小值 = 85
|
||||
最大值 = 145
|
||||
间隔 = 30
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.被动进图加成 += self.当前值
|
||||
|
||||
|
||||
class 武器属性B6(武器属性):
|
||||
固定属性描述 = '三攻'
|
||||
随机属性描述 = 'BUFFLv+1,一觉力智+'
|
||||
最小值 = 10
|
||||
最大值 = 30
|
||||
间隔 = 10
|
||||
|
||||
def 融合属性(self, 属性):
|
||||
属性.BUFFLv += 1
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
武器属性A列表 = ()
|
||||
武器属性B列表 = ()
|
||||
for i in range(7):
|
||||
exec('武器属性A列表 += (武器属性A' + str(i) + '(),)')
|
||||
exec('武器属性B列表 += (武器属性B' + str(i) + '(),)')
|
||||
|
||||
武器属性A序号 = dict()
|
||||
武器属性B序号 = dict()
|
||||
for i in range(len(武器属性A列表)):
|
||||
武器属性A序号[武器属性A列表[i].固定属性描述] = i
|
||||
for i in range(len(武器属性B列表)):
|
||||
武器属性B序号[武器属性B列表[i].固定属性描述] = i
|
||||
|
||||
武器属性组合 = ()
|
||||
for i in range(1, 7):
|
||||
for j in range(1, 7):
|
||||
武器属性组合 += ([武器属性A序号[武器属性A列表[i].固定属性描述], 武器属性B序号[武器属性B列表[j].固定属性描述]], )
|
||||
@@ -0,0 +1,101 @@
|
||||
from PublicReference.equipment.描述 import *
|
||||
from PublicReference.equipment.base_item import Item
|
||||
# 称号属性部分
|
||||
|
||||
称号列表 = [None] * 7
|
||||
|
||||
|
||||
class 称号6(Item):
|
||||
显示名称 = '(21)骑士之誓(Lv15-35 所有技能Lv+1)'
|
||||
名称 = '骑士之誓'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('所有', 15, 35, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv15-35 技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号5(Item):
|
||||
显示名称 = '(20)权御九界(Lv15-35 主动技能Lv+1)'
|
||||
名称 = '权御九界'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('主动', 15, 35, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv15-35 主动技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号4(Item):
|
||||
显示名称 = '(20)无畏战斗者(LV15-20 所有技能Lv+1)'
|
||||
名称 = '无畏战斗者'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('所有', 15, 20, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv15-20 技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号3(Item):
|
||||
显示名称 = '(20)无畏战争者(Lv20-25 所有技能Lv+1)'
|
||||
名称 = '无畏战争者'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('所有', 20, 25, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv20-25 技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号2(Item):
|
||||
显示名称 = '(20)无畏死亡者(LV25-30 所有技能Lv+1)'
|
||||
名称 = '无畏死亡者'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('所有', 25, 30, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv25-30 技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号1(Item):
|
||||
显示名称 = '(20)无畏牺牲者(Lv30-35 所有技能Lv+1)'
|
||||
名称 = '无畏牺牲者'
|
||||
|
||||
def 城镇属性_BUFF(self, 属性):
|
||||
四维固定加成(属性, 80)
|
||||
属性.技能等级加成('所有', 30, 35, 1)
|
||||
|
||||
def 装备描述_BUFF(self, 属性):
|
||||
temp = 四维固定加成(属性, 80)
|
||||
temp += 'Lv30-35 技能等级 +1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号0(Item):
|
||||
pass
|
||||
|
||||
|
||||
for i in range(len(称号列表)):
|
||||
exec('称号列表[{}] = 称号{}()'.format(len(称号列表) - i - 1, i))
|
||||
|
||||
称号序号 = dict()
|
||||
for i in range(len(称号列表)):
|
||||
称号序号[称号列表[i].名称] = i
|
||||
@@ -0,0 +1,40 @@
|
||||
from .描述_buff import *
|
||||
|
||||
# 阿斯特罗斯
|
||||
|
||||
|
||||
def Astaroth(self):
|
||||
return BUFF增加(self, BUFF三攻per=1.01) + 觉醒增加(self, 一觉力智=22) + 被动增加(
|
||||
self, 守护恩赐体精=55, 转职被动智力=55)
|
||||
|
||||
|
||||
# 贝利亚斯
|
||||
|
||||
|
||||
def Berias(self):
|
||||
return 被动增加(self, 守护恩赐体精=138, 转职被动智力=138)
|
||||
|
||||
|
||||
# 雷德梅恩
|
||||
|
||||
|
||||
def Redmayne(self):
|
||||
return BUFF增加(self, BUFF力智per=1.02) + 觉醒增加(self, 一觉力智=25) + 被动增加(
|
||||
self, 守护恩赐体精=46, 转职被动智力=46)
|
||||
|
||||
|
||||
# 罗什巴赫
|
||||
|
||||
|
||||
def Rosenbach(self):
|
||||
return BUFF增加(self, BUFF力智per=1.01, BUFF三攻per=1.01) + 觉醒增加(self, 一觉力智=37)
|
||||
|
||||
|
||||
# 泰玛特
|
||||
|
||||
|
||||
def Tiamat(self):
|
||||
return BUFF增加(self, BUFF力智per=1.03) + 觉醒增加(self, 一觉力智=21, 一觉力智per=1.01)
|
||||
|
||||
|
||||
OzmaList = (Astaroth, Berias, Redmayne, Rosenbach, Tiamat)
|
||||
@@ -0,0 +1,149 @@
|
||||
from .描述_buff import *
|
||||
|
||||
|
||||
class Siroco:
|
||||
def __init__(self) -> None:
|
||||
self.pants_fused = False
|
||||
self.ring_fused = False
|
||||
self.left_fused = False
|
||||
self.character = None
|
||||
self.text = ''
|
||||
pass
|
||||
|
||||
# 设置属性
|
||||
def set_character(self, character):
|
||||
self.character = character
|
||||
self.text = ''
|
||||
pass
|
||||
|
||||
# 融合
|
||||
def fuse(self, index):
|
||||
if index == 0:
|
||||
self.fuse_pants()
|
||||
elif index == 1:
|
||||
self.fuse_ring()
|
||||
elif index == 2:
|
||||
self.fuse_left()
|
||||
pass
|
||||
|
||||
# 融合下装
|
||||
def fuse_pants(self):
|
||||
BUFF增加(self.character, BUFF力智per=1.03)
|
||||
self.pants_fused = True
|
||||
pass
|
||||
|
||||
#
|
||||
def fuse_ring(self):
|
||||
觉醒增加(self.character, 一觉力智per=1.03)
|
||||
self.ring_fused = True
|
||||
|
||||
def fuse_left(self):
|
||||
被动增加(self.character, 守护恩赐体精=80, 转职被动智力=80)
|
||||
self.left_fused = True
|
||||
|
||||
def compute(self):
|
||||
if self.pants_fused and self.ring_fused:
|
||||
self.text += '<font size="3" face="宋体"><font color="#78FF1E">下装+戒指</font><br>'
|
||||
self.force_pants()
|
||||
if self.ring_fused and self.left_fused:
|
||||
self.text += '<font size="3" face="宋体"><font color="#78FF1E">戒指+辅助装备</font><br>'
|
||||
self.force_ring()
|
||||
if self.left_fused and self.pants_fused:
|
||||
self.text += '<font size="3" face="宋体"><font color="#78FF1E">辅助装备+下装</font><br>'
|
||||
self.force_left()
|
||||
text = self.text
|
||||
self.pants_fused = False
|
||||
self.ring_fused = False
|
||||
self.left_fused = False
|
||||
self.character = None
|
||||
self.text = ''
|
||||
return text
|
||||
|
||||
def force_pants(self):
|
||||
pass
|
||||
|
||||
def force_ring(self):
|
||||
pass
|
||||
|
||||
def force_left(self):
|
||||
pass
|
||||
|
||||
pass
|
||||
|
||||
|
||||
# 奈克斯
|
||||
class Nex(Siroco):
|
||||
def force_pants(self):
|
||||
self.text += 觉醒增加(self.character, 一觉力智=40)
|
||||
|
||||
def force_ring(self):
|
||||
self.text += 被动增加(self.character, 被动进图加成=80)
|
||||
|
||||
def force_left(self):
|
||||
self.text += BUFF增加(self.character, BUFF三攻per=1.02)
|
||||
|
||||
pass
|
||||
|
||||
|
||||
# 暗杀者
|
||||
|
||||
|
||||
class Assassin(Siroco):
|
||||
def force_pants(self):
|
||||
self.text += 觉醒增加(self.character, 一觉力智=28)
|
||||
|
||||
def force_ring(self):
|
||||
self.text += 被动增加(self.character, 被动进图加成=55)
|
||||
|
||||
def force_left(self):
|
||||
self.text += BUFF增加(self.character, BUFF力智per=1.01, BUFF三攻per=1.01)
|
||||
|
||||
pass
|
||||
|
||||
|
||||
# 卢克西
|
||||
|
||||
|
||||
class Roxy(Siroco):
|
||||
def force_ring(self):
|
||||
self.text += "释放Lv50、Lv100主动技能时,所有队员持续伤害+1%,效果持续5秒<br>"
|
||||
|
||||
def force_left(self):
|
||||
self.text += "释放Lv50、Lv100主动技能时,所有队员持续伤害+1%,效果持续5秒<br>"
|
||||
|
||||
def force_pants(self):
|
||||
self.text += "释放Lv50、Lv100主动技能时,所有队员持续伤害+1%,效果持续5秒<br>"
|
||||
|
||||
pass
|
||||
|
||||
|
||||
# 守门人
|
||||
class Nameless(Siroco):
|
||||
def force_pants(self):
|
||||
self.text += 觉醒增加(self.character, 一觉力智=20, 一觉力智per=1.01)
|
||||
|
||||
def force_ring(self):
|
||||
self.text += 被动增加(self.character, 被动进图加成=55)
|
||||
|
||||
def force_left(self):
|
||||
self.text += BUFF增加(self.character, BUFF力智per=1.01)
|
||||
self.text += 被动增加(self.character, 被动进图加成=30)
|
||||
|
||||
|
||||
# 洛多斯
|
||||
|
||||
|
||||
class Lodos(Siroco):
|
||||
def force_pants(self):
|
||||
self.text += 觉醒增加(self.character, 一觉力智per=1.02)
|
||||
|
||||
def force_ring(self):
|
||||
self.text += BUFF增加(self.character, BUFF力智per=1.02)
|
||||
|
||||
def force_left(self):
|
||||
self.text += BUFF增加(self.character, BUFF三攻per=1.01)
|
||||
self.text += 被动增加(self.character, 被动进图加成=30)
|
||||
pass
|
||||
|
||||
|
||||
SirocoList = (Nex(), Assassin(), Roxy(), Nameless(), Lodos())
|
||||
@@ -0,0 +1,184 @@
|
||||
# 辟邪玉属性部分
|
||||
|
||||
|
||||
class 辟邪玉():
|
||||
名称 = ''
|
||||
最小值 = -5
|
||||
最大值 = 5
|
||||
间隔 = 0.1
|
||||
当前值 = 0
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉0(辟邪玉):
|
||||
名称 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 辟邪玉1(辟邪玉):
|
||||
名称 = 'BUFF三攻增加'
|
||||
最小值 = -5
|
||||
最大值 = 5
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.BUFF物攻 += self.当前值
|
||||
属性.BUFF魔攻 += self.当前值
|
||||
属性.BUFF独立 += self.当前值
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉2(辟邪玉):
|
||||
名称 = 'BUFF三攻增加量增加'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.BUFF物攻per += self.当前值 / 100
|
||||
属性.BUFF魔攻per += self.当前值 / 100
|
||||
属性.BUFF独立per += self.当前值 / 100
|
||||
|
||||
|
||||
class 辟邪玉3(辟邪玉):
|
||||
名称 = 'BUFF力智增加'
|
||||
最小值 = -25
|
||||
最大值 = 25
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.BUFF力量 += self.当前值
|
||||
属性.BUFF智力 += self.当前值
|
||||
|
||||
|
||||
class 辟邪玉4(辟邪玉):
|
||||
名称 = 'BUFF力智增加量增加'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.BUFF力量per += self.当前值 / 100
|
||||
属性.BUFF智力per += self.当前值 / 100
|
||||
|
||||
|
||||
class 辟邪玉5(辟邪玉):
|
||||
名称 = '一觉力智增加'
|
||||
最小值 = -100
|
||||
最大值 = 100
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
class 辟邪玉6(辟邪玉):
|
||||
名称 = '一觉力智增加量增加'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.一觉力智per += self.当前值 / 100
|
||||
|
||||
|
||||
class 辟邪玉7(辟邪玉):
|
||||
名称 = '10~15技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 10, 15, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉8(辟邪玉):
|
||||
名称 = '20~25技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 20, 25, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉9(辟邪玉):
|
||||
名称 = '30~35技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 30, 35, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉10(辟邪玉):
|
||||
名称 = '40~45技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 40, 45, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉11(辟邪玉):
|
||||
名称 = '55~60技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 55, 60, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉12(辟邪玉):
|
||||
名称 = '65~70技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 65, 70, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉13(辟邪玉):
|
||||
名称 = '75~80技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 75, 80, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉14(辟邪玉):
|
||||
名称 = '1次觉醒技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 50, 50, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉15(辟邪玉):
|
||||
名称 = '2次觉醒技能Lv增加'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 85, 85, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
辟邪玉列表 = ()
|
||||
for i in range(16):
|
||||
exec('辟邪玉列表 += (辟邪玉' + str(i) + '(),)')
|
||||
|
||||
辟邪玉序号 = dict()
|
||||
for i in range(len(辟邪玉列表)):
|
||||
辟邪玉序号[辟邪玉列表[i].名称] = i
|
||||
@@ -0,0 +1,199 @@
|
||||
# 黑鸦变换属性部分
|
||||
|
||||
|
||||
class 变换属性():
|
||||
固定属性描述 = ''
|
||||
随机属性描述 = ''
|
||||
索引 = ["伤害词条", "黄字", "暴伤", "白字", "终伤", "力智", "三攻"]
|
||||
当前值 = 0
|
||||
间隔 = 1
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
pass
|
||||
|
||||
|
||||
class 武器变换属性0(变换属性):
|
||||
固定属性描述 = '无'
|
||||
随机属性描述 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 武器变换属性1(变换属性):
|
||||
固定属性描述 = '黄字'
|
||||
随机属性描述 = 'BUFF力智+3%,一觉力智+'
|
||||
最小值 = 30
|
||||
最大值 = 60
|
||||
间隔 = 10
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF力量per *= 1.03
|
||||
属性.BUFF智力per *= 1.03
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
class 武器变换属性2(变换属性):
|
||||
固定属性描述 = '暴伤'
|
||||
随机属性描述 = '一觉力智+3%,BUFF力智+'
|
||||
最小值 = 2
|
||||
最大值 = 5
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智per *= 1.03
|
||||
|
||||
|
||||
class 武器变换属性3(变换属性):
|
||||
固定属性描述 = '白字'
|
||||
随机属性描述 = '一觉力智+30,BUFF三攻+'
|
||||
最小值 = 1
|
||||
最大值 = 4
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF魔攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF独立per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智 += 30
|
||||
|
||||
|
||||
class 武器变换属性4(变换属性):
|
||||
固定属性描述 = '终伤'
|
||||
随机属性描述 = 'BUFF三攻+2%,一觉力智+'
|
||||
最小值 = 2
|
||||
最大值 = 5
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1.02
|
||||
属性.BUFF魔攻per *= 1.02
|
||||
属性.BUFF独立per *= 1.02
|
||||
属性.一觉力智per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 武器变换属性5(变换属性):
|
||||
固定属性描述 = '力智'
|
||||
随机属性描述 = '面板+'
|
||||
最小值 = 120
|
||||
最大值 = 180
|
||||
间隔 = 20
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
# 属性.被动进图加成 += self.当前值
|
||||
属性.守护恩赐体精 += self.当前值
|
||||
属性.转职被动智力 += self.当前值
|
||||
|
||||
|
||||
class 武器变换属性6(变换属性):
|
||||
固定属性描述 = '三攻'
|
||||
随机属性描述 = '一觉Lv+1,BUFF力智+'
|
||||
最小值 = 1
|
||||
最大值 = 4
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.一觉Lv += 1
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 装备变换属性0(变换属性):
|
||||
固定属性描述 = '无'
|
||||
随机属性描述 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 装备变换属性1(变换属性):
|
||||
固定属性描述 = '黄字'
|
||||
随机属性描述 = 'BUFF力智+4%,一觉力智+'
|
||||
最小值 = 10
|
||||
最大值 = 40
|
||||
间隔 = 10
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF力量per *= 1.04
|
||||
属性.BUFF智力per *= 1.04
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
class 装备变换属性2(变换属性):
|
||||
固定属性描述 = '暴伤'
|
||||
随机属性描述 = '一觉力智+2%,BUFF力智+'
|
||||
最小值 = 2
|
||||
最大值 = 5
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF力量per *= 1 + self.当前值 / 100
|
||||
属性.BUFF智力per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智per *= 1.02
|
||||
|
||||
|
||||
class 装备变换属性3(变换属性):
|
||||
固定属性描述 = '白字'
|
||||
随机属性描述 = '一觉力智+25,BUFF三攻+'
|
||||
最小值 = 1
|
||||
最大值 = 4
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF魔攻per *= 1 + self.当前值 / 100
|
||||
属性.BUFF独立per *= 1 + self.当前值 / 100
|
||||
属性.一觉力智 += 25
|
||||
|
||||
|
||||
class 装备变换属性4(变换属性):
|
||||
固定属性描述 = '终伤'
|
||||
随机属性描述 = 'BUFF三攻 +2%,一觉力智+'
|
||||
最小值 = 1
|
||||
最大值 = 4
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFF物攻per *= 1.02
|
||||
属性.BUFF魔攻per *= 1.02
|
||||
属性.BUFF独立per *= 1.02
|
||||
属性.一觉力智per *= 1 + self.当前值 / 100
|
||||
|
||||
|
||||
class 装备变换属性5(变换属性):
|
||||
固定属性描述 = '力智'
|
||||
随机属性描述 = '面板+'
|
||||
最小值 = 100
|
||||
最大值 = 160
|
||||
间隔 = 20
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
# 属性.被动进图加成 += self.当前值
|
||||
属性.守护恩赐体精 += self.当前值
|
||||
属性.转职被动智力 += self.当前值
|
||||
|
||||
|
||||
class 装备变换属性6(变换属性):
|
||||
固定属性描述 = '三攻'
|
||||
随机属性描述 = 'BUFFLv+1,一觉力智+'
|
||||
最小值 = 10
|
||||
最大值 = 40
|
||||
间隔 = 10
|
||||
|
||||
def 变换属性(self, 属性):
|
||||
属性.BUFFLv += 1
|
||||
属性.一觉力智 += self.当前值
|
||||
|
||||
|
||||
武器变换属性列表 = ()
|
||||
装备变换属性列表 = ()
|
||||
for i in range(7):
|
||||
exec('武器变换属性列表 += (武器变换属性' + str(i) + '(),)')
|
||||
exec('装备变换属性列表 += (装备变换属性' + str(i) + '(),)')
|
||||
|
||||
武器变换属性序号 = dict()
|
||||
装备变换属性序号 = dict()
|
||||
for i in range(len(武器变换属性列表)):
|
||||
武器变换属性序号[武器变换属性列表[i].固定属性描述] = i
|
||||
for i in range(len(装备变换属性列表)):
|
||||
装备变换属性序号[装备变换属性列表[i].固定属性描述] = i
|
||||
|
||||
防具变换属性组合 = ()
|
||||
# for i in range(7):
|
||||
for j in range(1, 7):
|
||||
for k in range(1, 7):
|
||||
for l in range(1, 7):
|
||||
防具变换属性组合 += ([j, k, l], )
|
||||
@@ -0,0 +1,174 @@
|
||||
# 装备属性部分
|
||||
# import json
|
||||
# import os
|
||||
|
||||
from PublicReference.utils.constant import *
|
||||
from .装备_套装 import *
|
||||
from .装备_特殊 import *
|
||||
from .装备_首饰 import *
|
||||
from .装备_防具 import *
|
||||
from .装备_武器 import *
|
||||
from .基础函数 import *
|
||||
from .融合_希洛克 import 希洛克
|
||||
from .融合_奥兹玛 import 奥兹玛
|
||||
|
||||
装备版本 = "GF"
|
||||
|
||||
# with open("ResourceFiles/Config/release_version.json") as fp:
|
||||
# versionInfo = json.load(fp)
|
||||
# 装备版本 = versionInfo['EquipmentVersion']
|
||||
# fp.close()
|
||||
|
||||
# if 装备版本.upper() == "GF":
|
||||
|
||||
# else:
|
||||
# from .装备_武器_HF import *
|
||||
# from .装备_防具_HF import *
|
||||
# from .装备_首饰_HF import *
|
||||
# from .装备_特殊_HF import *
|
||||
# from .装备_套装_HF import *
|
||||
|
||||
|
||||
class equipment():
|
||||
def __init__(self):
|
||||
self.load_equ()
|
||||
self.load_suit()
|
||||
|
||||
def load_equ(self):
|
||||
self.equ_list = {}
|
||||
self.equ_id = {}
|
||||
self.equ_tuple = ()
|
||||
self.equ_id_tuple = ()
|
||||
self.index = {}
|
||||
for i in range(535): #534件装备
|
||||
temp = eval('装备{}()'.format(i))
|
||||
self.equ_list[i] = temp
|
||||
self.equ_id[temp.名称] = i
|
||||
self.equ_tuple += (temp, )
|
||||
self.equ_id_tuple += (i, )
|
||||
key = '{}\t{}\t{}'.format(temp.所属套装, temp.品质, temp.部位)
|
||||
self.index[key] = i
|
||||
|
||||
def load_suit(self):
|
||||
self.suit_list = {}
|
||||
self.suit_id = {}
|
||||
self.suit_name = ()
|
||||
self.suit_tuple = ()
|
||||
for i in range(127): #126个套装效果
|
||||
temp = eval('套装效果{}()'.format(i))
|
||||
self.suit_list[i] = temp
|
||||
self.suit_tuple += (temp, )
|
||||
key = '{}[{}]'.format(temp.名称, temp.件数)
|
||||
self.suit_id[key] = i
|
||||
self.suit_name += (key, )
|
||||
|
||||
def load_img(self):
|
||||
self.equ_img = {}
|
||||
#基础装备图标 0~999
|
||||
for i in self.get_equ_id_list():
|
||||
path = './ResourceFiles/img/装备/{}.gif'.format(i)
|
||||
img = QMovie(path)
|
||||
img.start()
|
||||
self.equ_img[i] = img
|
||||
#奥兹玛图标 1000~1024
|
||||
for i in range(25):
|
||||
path = './ResourceFiles/img/奥兹玛/{}.gif'.format(i)
|
||||
img = QMovie(path)
|
||||
img.start()
|
||||
self.equ_img[1000 + i] = img
|
||||
#希洛克图标 1100~1114
|
||||
for i in range(15):
|
||||
path = './ResourceFiles/img/希洛克/{}.gif'.format(i)
|
||||
img = QMovie(path)
|
||||
img.start()
|
||||
self.equ_img[1100 + i] = img
|
||||
#希洛克武器图标 2000~2999
|
||||
path = './ResourceFiles/img/希洛克/武器/'
|
||||
for i in os.listdir(path):
|
||||
img = QMovie(os.path.join(path, i))
|
||||
img.start()
|
||||
self.equ_img[2000 + int(i.split('.')[0])] = img
|
||||
|
||||
def get_suits_by_equips(self, equips):
|
||||
suits = []
|
||||
dictionary = {}
|
||||
for i in equips:
|
||||
item = self.get_equ_by_name(i)
|
||||
if item.所属套装2 != '无':
|
||||
j = item.所属套装2
|
||||
k = item.所属套装
|
||||
if k != '智慧产物':
|
||||
dictionary[k] = dictionary.get(k, 0) + 1
|
||||
else:
|
||||
j = item.所属套装
|
||||
if j != '无':
|
||||
dictionary[j] = dictionary.get(j, 0) + 1
|
||||
|
||||
for i in dictionary.keys():
|
||||
if dictionary[i] >= 2:
|
||||
temp = '{}[{}]'.format(i, 2)
|
||||
if temp in self.suit_name:
|
||||
suits.append(temp)
|
||||
if dictionary[i] >= 3:
|
||||
temp = '{}[{}]'.format(i, 3)
|
||||
if temp in self.suit_name:
|
||||
suits.append(temp)
|
||||
if dictionary[i] >= 5:
|
||||
temp = '{}[{}]'.format(i, 5)
|
||||
if temp in self.suit_name:
|
||||
suits.append(temp)
|
||||
for i in suits:
|
||||
try:
|
||||
temp = i.replace(i.split('[')[0], self.get_suit_by_name(i).子套装)
|
||||
if temp in suits:
|
||||
suits.remove(temp)
|
||||
except:
|
||||
pass
|
||||
return suits
|
||||
|
||||
def get_suit_by_id(self, id):
|
||||
return self.suit_list.get(id, 套装())
|
||||
|
||||
def get_suit_by_name(self, name):
|
||||
return self.get_suit_by_id(self.suit_id.get(name, 0))
|
||||
|
||||
def get_equ_by_id(self, id):
|
||||
return self.equ_list.get(id, 装备())
|
||||
|
||||
def get_img_by_id(self, id):
|
||||
return self.equ_img.get(id, QMovie(''))
|
||||
|
||||
def get_equ_by_name(self, name):
|
||||
return self.get_equ_by_id(self.equ_id.get(name, 0))
|
||||
|
||||
def get_img_by_name(self, name, num=0):
|
||||
id = self.equ_id.get(name, 0)
|
||||
# if id+num in self.equ_id_tuple:
|
||||
id += num
|
||||
return self.get_img_by_id(id)
|
||||
|
||||
def get_id_by_name(self, name):
|
||||
return self.equ_id.get(name, 0)
|
||||
|
||||
def get_equ_list(self):
|
||||
return self.equ_tuple
|
||||
|
||||
def get_suit_list(self):
|
||||
return self.suit_tuple
|
||||
|
||||
def get_equ_id_list(self):
|
||||
return self.equ_id_tuple
|
||||
|
||||
def get_suit_name(self):
|
||||
return self.suit_name
|
||||
|
||||
def get_id_by_index(self, suit, quality, part):
|
||||
key = '{}\t{}\t{}'.format(suit, quality, part)
|
||||
return self.index.get(key, 0)
|
||||
|
||||
def get_equ_by_index(self, suit, quality, part):
|
||||
id = self.get_id_by_index(suit, quality, part)
|
||||
return self.get_equ_by_id(id)
|
||||
|
||||
|
||||
equ = equipment()
|
||||
@@ -0,0 +1,737 @@
|
||||
import itertools
|
||||
from operator import eq
|
||||
|
||||
from PublicReference.equipment.equ_list import equ
|
||||
from PublicReference.utils.constant import *
|
||||
|
||||
称号名望 = {
|
||||
1: 315,
|
||||
2: 397,
|
||||
3: 491,
|
||||
4: 601,
|
||||
5: 731,
|
||||
100: 783,
|
||||
101: 849,
|
||||
102: 934,
|
||||
103: 1044,
|
||||
104: 1076,
|
||||
250: 10000
|
||||
}
|
||||
宠物名望表 = {
|
||||
1: 315,
|
||||
2: 397,
|
||||
3: 491,
|
||||
4: 601,
|
||||
5: 731,
|
||||
100: 752,
|
||||
101: 778,
|
||||
102: 805,
|
||||
103: 832,
|
||||
104: 860,
|
||||
105: 889,
|
||||
106: 919,
|
||||
107: 949,
|
||||
108: 980,
|
||||
109: 1012,
|
||||
110: 1044,
|
||||
111: 1055,
|
||||
112: 1087,
|
||||
}
|
||||
附魔名望 = {
|
||||
0: 0,
|
||||
1: 56,
|
||||
2: 69,
|
||||
3: 86,
|
||||
4: 106,
|
||||
5: 130,
|
||||
6: 138,
|
||||
7: 147,
|
||||
8: 158,
|
||||
100: 139,
|
||||
101: 153,
|
||||
102: 168,
|
||||
103: 185
|
||||
}
|
||||
宠物附魔名望 = {100: 139, 101: 148, 102: 159, 103: 170, 104: 185, 200: 116}
|
||||
称号附魔名望 = {
|
||||
1: 93,
|
||||
2: 107,
|
||||
3: 130,
|
||||
100: 139,
|
||||
101: 153,
|
||||
102: 168,
|
||||
103: 185,
|
||||
200: 370
|
||||
}
|
||||
武器装扮名望 = {1: 72, 100: 94, 101: 166}
|
||||
光环名望 = {1: 140, 2: 170, 3: 209, 4: 260, 5: 325, 100: 464}
|
||||
宠物装备名望 = {1: 21, 100: 30, 101: 41, 102: 54, 103: 69}
|
||||
巨龙名望 = {1: 795, 2: 530, 3: 265}
|
||||
快捷栏装备名望 = {1: 20, 2: 40}
|
||||
锻造名望 = {1: 2, 2: 4, 3: 7, 4: 8, 5: 10, 6: 11, 7: 12, 8: 13}
|
||||
改造名望 = {
|
||||
1: 4,
|
||||
2: 6,
|
||||
3: 8,
|
||||
4: 10,
|
||||
5: 12,
|
||||
6: 14,
|
||||
7: 16,
|
||||
8: 18,
|
||||
9: 20,
|
||||
10: 21,
|
||||
11: 22,
|
||||
12: 23,
|
||||
13: 24,
|
||||
14: 25,
|
||||
15: 26,
|
||||
16: 27,
|
||||
17: 28,
|
||||
18: 29,
|
||||
19: 30,
|
||||
20: 31
|
||||
}
|
||||
融合名望 = {
|
||||
1: [46, 23, 46, 23],
|
||||
2: [61, 31, 46, 23],
|
||||
3: [77, 39, 46, 23],
|
||||
4: [46, 23, 46, 23],
|
||||
5: [61, 31, 46, 23],
|
||||
6: [77, 39, 46, 23],
|
||||
7: [46, 23, 61, 31],
|
||||
8: [61, 31, 61, 31],
|
||||
9: [77, 39, 61, 31],
|
||||
10: [46, 23, 61, 31],
|
||||
11: [61, 31, 61, 31],
|
||||
12: [77, 39, 61, 31],
|
||||
13: [46, 23, 77, 39],
|
||||
14: [61, 31, 77, 39],
|
||||
15: [77, 39, 77, 39],
|
||||
16: [46, 23, 77, 39],
|
||||
17: [61, 31, 77, 39],
|
||||
18: [77, 39, 77, 39]
|
||||
}
|
||||
辟邪玉名望 = {0: 0, 1: 30, 2: 45, 3: 67, 4: 93}
|
||||
装扮名望 = {"神器": 116, "稀有": 88, "高级": 69}
|
||||
|
||||
|
||||
def 排列组合(target):
|
||||
comb = itertools.combinations_with_replacement(target, 2)
|
||||
result = []
|
||||
for i in comb:
|
||||
value = i[0] + i[1]
|
||||
result.append(value)
|
||||
|
||||
result = list(set(result))
|
||||
list.sort(result)
|
||||
return result
|
||||
|
||||
|
||||
守护珠名望 = 排列组合([46, 36, 29])
|
||||
|
||||
附魔名望选项 = {
|
||||
"上衣": list(附魔名望.values()),
|
||||
"下装": list(附魔名望.values()),
|
||||
"头肩": list(附魔名望.values()),
|
||||
"腰带": list(附魔名望.values()),
|
||||
"鞋": list(附魔名望.values()),
|
||||
"手镯": list(附魔名望.values()),
|
||||
"项链": list(附魔名望.values()),
|
||||
"戒指": list(附魔名望.values()),
|
||||
"辅助装备": list(附魔名望.values()),
|
||||
"魔法石": list(附魔名望.values()),
|
||||
"耳环": list(附魔名望.values()),
|
||||
"武器": list(附魔名望.values()),
|
||||
"称号附魔": [0] + list(称号附魔名望.values()),
|
||||
"光环": [0] + list(光环名望.values()),
|
||||
"武器装扮": [0] + list(武器装扮名望.values()),
|
||||
"宠物装备红": [0] + list(宠物装备名望.values()),
|
||||
"宠物装备蓝": [0] + list(宠物装备名望.values()),
|
||||
"宠物装备绿": [0] + list(宠物装备名望.values()),
|
||||
# "宠物": list(宠物名望.values()),
|
||||
"宠物附魔": [0] + list(宠物附魔名望.values()),
|
||||
"皮肤": [0] + list(附魔名望.values()),
|
||||
"守护珠": [0] + list(守护珠名望),
|
||||
"收集箱": [0, 80, 175],
|
||||
}
|
||||
徽章排列组合名望选项 = 排列组合([26, 30, 36, 46])
|
||||
徽章名望选项 = {
|
||||
"上衣": [0] + list(徽章排列组合名望选项),
|
||||
"下装": [0] + list(徽章排列组合名望选项),
|
||||
"头肩": [0] + list(徽章排列组合名望选项),
|
||||
"腰带": [0] + list(徽章排列组合名望选项),
|
||||
"鞋": [0] + list(徽章排列组合名望选项),
|
||||
"手镯": [0] + list(徽章排列组合名望选项),
|
||||
"项链": [0] + list(徽章排列组合名望选项),
|
||||
"戒指": [0] + list(徽章排列组合名望选项),
|
||||
"辅助装备": [0, 109, 232],
|
||||
"魔法石": [0, 109, 232],
|
||||
"光环": [0] + list(徽章排列组合名望选项),
|
||||
"武器装扮": [0] + list(徽章排列组合名望选项),
|
||||
"皮肤": [0] + list(徽章排列组合名望选项),
|
||||
}
|
||||
|
||||
徽章名望默认选项 = {
|
||||
"上衣": 92,
|
||||
"下装": 92,
|
||||
"头肩": 72,
|
||||
"腰带": 92,
|
||||
"鞋": 92,
|
||||
"手镯": 92,
|
||||
"项链": 72,
|
||||
"戒指": 92,
|
||||
"辅助装备": 232,
|
||||
"魔法石": 232,
|
||||
"光环": 92,
|
||||
"武器装扮": 92,
|
||||
"皮肤": 92,
|
||||
}
|
||||
|
||||
附魔名望默认选项 = {
|
||||
"上衣": 130,
|
||||
"下装": 130,
|
||||
"头肩": 168,
|
||||
"腰带": 168,
|
||||
"鞋": 168,
|
||||
"手镯": 130,
|
||||
"项链": 130,
|
||||
"戒指": 130,
|
||||
"辅助装备": 168,
|
||||
"魔法石": 158,
|
||||
"耳环": 130,
|
||||
"武器": 130,
|
||||
# "称号": 185,
|
||||
"称号附魔": 185,
|
||||
"光环": 464,
|
||||
"武器装扮": 94,
|
||||
"宠物装备红": 69,
|
||||
"宠物装备蓝": 69,
|
||||
"宠物装备绿": 69,
|
||||
"宠物附魔": 185,
|
||||
# "宠物": 1055,
|
||||
"皮肤": 69,
|
||||
"收集箱": 175
|
||||
}
|
||||
|
||||
称号名望表 = {
|
||||
'无': 1,
|
||||
'明日-春华': 3,
|
||||
'圣殿之巅': 5,
|
||||
'桃园结义[义]': 100,
|
||||
'三英雄[义]': 5,
|
||||
'荣耀贵族': 4,
|
||||
'骑士王的荣耀': 4,
|
||||
'海洋霸主': 4,
|
||||
'龙之挑战': 5,
|
||||
'龙之威仪': 5,
|
||||
'兽人守护神': 5,
|
||||
'天选之人': 100,
|
||||
'秘境迷踪': 5,
|
||||
'神选之英杰': 102,
|
||||
'超越极限者': 100,
|
||||
'使徒降临': 101,
|
||||
'伟大的意志': 103,
|
||||
'DPL专属称号·输出': 5,
|
||||
'安徒恩的烈焰': 100,
|
||||
'卢克的创造': 100,
|
||||
'伊希斯的天空': 100,
|
||||
'希洛克的悲鸣': 100,
|
||||
'信念之启示': 100,
|
||||
'隐忍之启示': 100,
|
||||
'勇气之启示': 100,
|
||||
'希望之启示': 100,
|
||||
'神之试炼': 100,
|
||||
'永恒追猎': 101,
|
||||
'永恒判罪': 101,
|
||||
'永恒战吼': 101,
|
||||
'穿越星空的祈愿': 103,
|
||||
'骑士之誓': 3,
|
||||
'权御九界': 3,
|
||||
'无畏战斗者': 3,
|
||||
'无畏战争者': 3,
|
||||
'无畏死亡者': 3,
|
||||
'无畏牺牲者': 3,
|
||||
'时空超越者': 104,
|
||||
'时空旅人': 102
|
||||
}
|
||||
|
||||
内置宠物名望表 = {
|
||||
"火神的化身": 111,
|
||||
"骑士/精灵使": 107,
|
||||
"比拉谢尔号": 106,
|
||||
"夏日之恋莱森德": 5,
|
||||
"夏日之恋赫米雅": 5,
|
||||
"暴风圣女": 110,
|
||||
"神迹·莱恩": 108,
|
||||
"神官格洛丽亚": 106,
|
||||
"古国英豪莱恩": 102,
|
||||
"骑士莱恩": 102,
|
||||
"雪兔蒂娅": 100,
|
||||
"克里斯": 5,
|
||||
"关羽": 1,
|
||||
"墨仙雪莲": 1,
|
||||
"超越时空·厄俄斯": 112,
|
||||
"超越时空·赫斯": 112,
|
||||
"次元探险家·厄俄斯": 108,
|
||||
"次元探险家·赫斯": 108
|
||||
}
|
||||
|
||||
# 100级,史诗
|
||||
装备强化名望 = [
|
||||
0, 3, 5, 8, 10, 12, 15, 17, 29, 32, 45, 89, 142, 154, 166, 178, 190, 202,
|
||||
213, 225, 237, 249, 261, 273, 284, 296, 308, 320, 332, 344, 355, 367
|
||||
]
|
||||
装备增幅名望 = [
|
||||
0, 3, 6, 8, 11, 14, 16, 19, 32, 36, 50, 99, 158, 171, 185, 198, 211, 224,
|
||||
237, 250, 263, 276, 289, 302, 315, 328, 341, 354, 369, 382, 395, 408
|
||||
]
|
||||
|
||||
装备改造名望 = [
|
||||
0, 11, 16, 32, 50, 158, 185, 211, 237, 263, 277, 290, 303, 316, 329, 342,
|
||||
355, 369, 382, 395, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408,
|
||||
408
|
||||
]
|
||||
武器改造名望 = [
|
||||
0, 33, 50, 99, 156, 492, 574, 656, 738, 820, 861, 902, 943, 984, 1025,
|
||||
1066, 1107, 1148, 1189, 1230, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
|
||||
1271, 1271, 1271, 1271, 1271
|
||||
]
|
||||
神话装备强化名望 = [
|
||||
0, 3, 6, 9, 12, 15, 18, 21, 36, 40, 57, 111, 178, 193, 208, 222, 237, 252,
|
||||
267, 282, 296, 311, 326, 341, 355, 370, 385, 400, 415, 429, 444, 459
|
||||
]
|
||||
神话装备增幅名望 = [
|
||||
0, 4, 7, 10, 14, 17, 20, 24, 40, 45, 63, 123, 198, 214, 231, 247, 263, 280,
|
||||
296, 313, 329, 346, 362, 378, 395, 411, 428, 444, 461, 477, 493, 510
|
||||
]
|
||||
武器强化名望 = [
|
||||
0, 8, 15, 23, 30, 37, 45, 52, 89, 100, 141, 276, 443, 480, 517, 554, 591,
|
||||
628, 664, 701, 738, 775, 812, 849, 886, 923, 960, 996, 1033, 1070, 1107,
|
||||
1144
|
||||
]
|
||||
武器增幅名望 = [
|
||||
0, 9, 17, 25, 33, 41, 50, 58, 99, 111, 156, 307, 492, 533, 574, 615, 656,
|
||||
697, 738, 779, 820, 861, 902, 943, 984, 1025, 1066, 1107, 1148, 1189, 1230,
|
||||
1271
|
||||
]
|
||||
|
||||
装备列 = {
|
||||
"上衣": 0,
|
||||
"下装": 1,
|
||||
"头肩": 2,
|
||||
"腰带": 3,
|
||||
"鞋": 4,
|
||||
"手镯": 5,
|
||||
"项链": 6,
|
||||
"戒指": 7,
|
||||
"左槽": 8,
|
||||
"右槽": 9,
|
||||
"耳环": 10,
|
||||
"武器": 11,
|
||||
"称号": 12,
|
||||
"光环": 13,
|
||||
"武器装扮": 14,
|
||||
"皮肤": 15,
|
||||
"时装": 16,
|
||||
}
|
||||
|
||||
细节列 = {"收集箱": 6, "勋章": 7, "宠物装备红": 11, "宠物装备蓝": 12, "宠物装备绿": 13, "宠物附魔": 14}
|
||||
|
||||
# 强化等级
|
||||
# 是否增幅
|
||||
# 改造等级
|
||||
|
||||
|
||||
def 细节收集(部位名称, 属性设置输入):
|
||||
目标列 = 细节列[部位名称]
|
||||
result = []
|
||||
for i in range(6):
|
||||
s = 属性设置输入[i][目标列].text()
|
||||
if len(s) != 0:
|
||||
s = int(s)
|
||||
else:
|
||||
s = 0
|
||||
result.append(s)
|
||||
return result
|
||||
|
||||
|
||||
def 勋章名望计算():
|
||||
细节选项 = store.get("/{type}/data/detail_options", [])
|
||||
勋章强化等级 = 8
|
||||
if len(细节选项) > 0:
|
||||
if isinstance(细节选项[0], list):
|
||||
勋章强化等级 = 细节选项[0][7]
|
||||
基础名望 = 232 + 46 * 4
|
||||
if 勋章强化等级 == 0:
|
||||
return 基础名望 + 0
|
||||
else:
|
||||
return 基础名望 + round(((勋章强化等级 - 8) / 2), 0)
|
||||
|
||||
|
||||
def 徽章名望计算():
|
||||
徽章名望 = store.get("/fame/selection2")
|
||||
if 徽章名望 == None:
|
||||
徽章名望 = deepcopy(徽章名望默认选项)
|
||||
else:
|
||||
for 名望 in 徽章名望:
|
||||
徽章名望[名望] = int(徽章名望[名望])
|
||||
return 徽章名望
|
||||
|
||||
|
||||
def 称号名望计算():
|
||||
try:
|
||||
称号名称 = store.get("/{type}/memory/title", "无")
|
||||
称号基础名望 = 称号名望[称号名望表[称号名称]]
|
||||
return 称号基础名望
|
||||
except:
|
||||
return 称号名望[102]
|
||||
|
||||
|
||||
def 时装名望计算():
|
||||
所有时装 = store.get("/{type}/memory/avatar", ['神器'] * 8)
|
||||
所有时装 = 所有时装[:8] # [8]是 所有选项
|
||||
最终时装名望 = sum(装扮名望[时装] for 时装 in 所有时装)
|
||||
return 最终时装名望
|
||||
|
||||
|
||||
def 辟邪玉名望计算():
|
||||
辟邪玉选项 = store.get("/{type}/data/jude_effects", [0] * 4)
|
||||
辟邪玉等级 = sum(1 for 辟邪玉词条 in 辟邪玉选项 if 辟邪玉词条 != 0)
|
||||
return 辟邪玉名望[辟邪玉等级]
|
||||
|
||||
|
||||
def 护石名望计算():
|
||||
护石名望 = {"圣痕": 185, "魔界": 120, '无': 0}
|
||||
|
||||
护石等级 = store.get("/{type}/memory/talismans_types", ['圣痕'] * 3)
|
||||
|
||||
护石最终名望 = sum(护石名望[护石等级_] for 护石等级_ in 护石等级)
|
||||
return 护石最终名望
|
||||
|
||||
|
||||
def 符文名望计算():
|
||||
符文名望 = {0: 0, 4: 46, 1: 21, 2: 18, 3: 15}
|
||||
符文效果 = store.get("/{type}/data/runes_effects", [1] * 9)
|
||||
|
||||
最终符文名望 = sum(符文名望[int(符文 // 4) + 1] for 符文 in 符文效果 if 符文 != 0)
|
||||
return 最终符文名望
|
||||
|
||||
|
||||
def 宠物名望计算():
|
||||
try:
|
||||
宠物名称 = store.get("/{type}/memory/pet", '无')
|
||||
最终宠物名望 = 宠物名望表.get(内置宠物名望表[宠物名称], 0)
|
||||
return 最终宠物名望
|
||||
except:
|
||||
return 宠物名望表[108]
|
||||
|
||||
|
||||
def 装备基础名望计算():
|
||||
|
||||
装备栏 = store.get("/{type}/memory/equips", ['无'] * 12)
|
||||
装备栏 = 装备栏[:-1]
|
||||
装备基础名望 = {}
|
||||
for 装备 in 装备栏:
|
||||
装备 = equ.get_equ_by_name(装备)
|
||||
if 装备.所属套装 == "智慧产物":
|
||||
装备基础名望[装备.部位] = 632
|
||||
elif 装备.品质 == "神话":
|
||||
装备基础名望[装备.部位] = 580
|
||||
else:
|
||||
装备基础名望[装备.部位] = 464
|
||||
# TODO:传说?
|
||||
套装栏 = equ.get_suits_by_equips(装备栏)
|
||||
装备基础名望["套装基础名望"] = len(套装栏) * 265
|
||||
return 装备基础名望
|
||||
|
||||
|
||||
def 装备打造名望计算():
|
||||
装备栏 = store.get("/{type}/memory/equips", ['无'] * 12)
|
||||
打造选项 = store.get("/{type}/data/equip_forges", [0] * 36)
|
||||
装备栏 = 装备栏[:-1] # 去掉武器
|
||||
打造名望 = {}
|
||||
for i in range(len(装备栏)):
|
||||
装备 = equ.get_equ_by_name(装备栏[i])
|
||||
单件装备打造名望 = 0
|
||||
if 装备.品质 not in ["史诗", "神话"]:
|
||||
单件装备打造名望 = -99999
|
||||
else:
|
||||
if 装备.所属套装 == "智慧产物":
|
||||
改造等级 = 打造选项[i + 24]
|
||||
单件装备打造名望 = 装备改造名望[改造等级]
|
||||
else:
|
||||
打造等级 = 打造选项[i + 12]
|
||||
if 打造选项[i]:
|
||||
if 装备.品质 == "史诗":
|
||||
单件装备打造名望 = 装备增幅名望[打造等级]
|
||||
else:
|
||||
单件装备打造名望 = 神话装备增幅名望[打造等级]
|
||||
else:
|
||||
if 装备.品质 == "史诗":
|
||||
单件装备打造名望 = 装备强化名望[打造等级]
|
||||
else:
|
||||
单件装备打造名望 = 神话装备强化名望[打造等级]
|
||||
打造名望[装备.部位] = 单件装备打造名望
|
||||
return 打造名望
|
||||
|
||||
|
||||
def 武器名望计算():
|
||||
装备栏 = store.get("/{type}/memory/equips", ['无'] * 12)
|
||||
打造选项 = store.get("/{type}/data/equip_forges", [0] * 40)
|
||||
属性 = store.get("/{type}/memory/original_property")
|
||||
|
||||
武器 = equ.get_equ_by_name(装备栏[-1])
|
||||
if 武器.品质 != "史诗":
|
||||
return -99999
|
||||
武器最终计算名望 = 0
|
||||
武器基础名望 = 464
|
||||
武器打造名望 = 0
|
||||
|
||||
武器基础打造 = 打造选项[-1 if 武器.所属套装 == "智慧产物" else 23]
|
||||
|
||||
if 打造选项[11]: # 是否增幅
|
||||
武器打造名望 = 武器增幅名望[武器基础打造]
|
||||
else:
|
||||
武器打造名望 = 武器强化名望[武器基础打造]
|
||||
|
||||
if 属性 is not None and "固伤" in 属性.类型:
|
||||
if 打造选项[36] != 8:
|
||||
武器打造名望 = -99999
|
||||
else:
|
||||
武器打造名望 = max(480, 武器打造名望)
|
||||
|
||||
return 武器基础名望 + 武器打造名望
|
||||
|
||||
|
||||
def 附魔名望计算():
|
||||
附魔名望 = store.get("/fame/selection")
|
||||
if 附魔名望 == None:
|
||||
附魔名望 = 附魔名望默认选项
|
||||
else:
|
||||
for 名望 in 附魔名望:
|
||||
附魔名望[名望] = int(附魔名望[名望])
|
||||
return 附魔名望
|
||||
|
||||
|
||||
# 黑鸦
|
||||
# https://dnf.qq.com/cp/a20210325version/page3.html
|
||||
|
||||
|
||||
def 黑鸦名望计算(改造部位=[]):
|
||||
|
||||
黑鸦词条 = store.get("/{type}/data/black_purgatory")
|
||||
黑鸦名望表 = {0: 69, 1: 83, 2: 98, 3: 116}
|
||||
黑鸦总名望 = {}
|
||||
黑鸦选项表 = {0: "武器", 1: "戒指", 2: "辅助装备", 3: "下装"}
|
||||
for i in range(len(黑鸦词条)):
|
||||
黑鸦选项 = 黑鸦词条[i]
|
||||
部位 = 黑鸦选项表[i]
|
||||
if 部位 in 改造部位:
|
||||
continue
|
||||
选项 = 黑鸦选项[0]
|
||||
品级 = 黑鸦选项[2]
|
||||
if 选项 == 0:
|
||||
黑鸦总名望[部位] = 0
|
||||
elif 选项 == 1:
|
||||
黑鸦总名望[部位] = 黑鸦名望表[3] # 计算最高
|
||||
else:
|
||||
黑鸦总名望[部位] = 黑鸦名望表[品级]
|
||||
|
||||
return 黑鸦总名望
|
||||
|
||||
|
||||
def 改造升级黑鸦名望计算():
|
||||
改造升级名望 = {}
|
||||
属性1名望 = {0: 91, 1: 71, 2: 54}
|
||||
属性2名望 = {0: 15, 1: 12, 2: 9}
|
||||
属性3名望 = {0: 10, 1: 8, 2: 6}
|
||||
|
||||
if not store.get("/{type}/data/remodel_upgrade", False):
|
||||
return {}
|
||||
|
||||
所有装备 = store.get("/{type}/memory/equips") #
|
||||
打造选项 = store.get("/{type}/data/equip_forges", [0] * 40)
|
||||
改造产物选项 = store.get("/{type}/data/remodel_properties", [])
|
||||
改造产物 = []
|
||||
改造名称 = []
|
||||
for i in range(len(所有装备)):
|
||||
装备 = equ.get_equ_by_name(所有装备[i])
|
||||
if 装备.所属套装 == "智慧产物":
|
||||
装备.改造等级 = 打造选项[i + 24]
|
||||
改造产物.append(装备)
|
||||
改造名称.append(装备.名称)
|
||||
|
||||
if len(改造产物选项) > 0:
|
||||
count2 = 0
|
||||
for i in equ.get_equ_list():
|
||||
if i.所属套装 == '智慧产物':
|
||||
if i.名称 in 改造名称:
|
||||
i.属性1选择 = 改造产物选项[count2 * 4 + 0]
|
||||
i.属性2选择 = 改造产物选项[count2 * 4 + 1]
|
||||
i.属性3选择 = 改造产物选项[count2 * 4 + 2]
|
||||
i.属性4选择 = 改造产物选项[count2 * 4 + 3]
|
||||
count2 += 1
|
||||
|
||||
for 装备 in 改造产物:
|
||||
名望 = 属性1名望[装备.属性1选择]
|
||||
if 装备.改造等级 >= 6:
|
||||
名望 += 属性2名望[装备.属性2选择]
|
||||
if 装备.改造等级 >= 7:
|
||||
名望 += 属性3名望[装备.属性3选择]
|
||||
改造升级名望[装备.部位] = 名望
|
||||
|
||||
return 改造升级名望
|
||||
|
||||
|
||||
def 希洛克融合名望计算():
|
||||
希洛克选择状态 = store.get("/{type}/data/siroco", [0] * 15)
|
||||
希洛克武器选择 = store.get("/{type}/data/siroco_weapon", 0)
|
||||
希洛克武器词条 = store.get("/{type}/data/weapon_fusion", [0] * 4)
|
||||
|
||||
# 奶C不一致
|
||||
if len(希洛克武器词条) > 4:
|
||||
希洛克武器选择 = 希洛克武器词条[0]
|
||||
希洛克武器词条[1] = 希洛克武器词条[3]
|
||||
希洛克武器词条[3] = 希洛克武器词条[4]
|
||||
|
||||
希洛克选择状态 = [希洛克选择状态[i:i + 3] for i in range(0, len(希洛克选择状态), 3)]
|
||||
希洛克成套 = sum(list(map(lambda x: sum(x), 希洛克选择状态)))
|
||||
|
||||
下装希洛克 = sum(list(map(lambda x: x[0], 希洛克选择状态)))
|
||||
戒指希洛克 = sum(list(map(lambda x: x[1], 希洛克选择状态)))
|
||||
左槽希洛克 = sum(list(map(lambda x: x[2], 希洛克选择状态)))
|
||||
|
||||
词条1名望 = {0: 46, 1: 61, 2: 77}
|
||||
词条2名望 = {0: 23, 1: 31, 2: 39}
|
||||
希洛克融合名望 = {}
|
||||
if 希洛克武器选择 == 0:
|
||||
残香名望 = 0
|
||||
else:
|
||||
if 希洛克武器选择 == 2:
|
||||
词条1 = 希洛克武器词条[1]
|
||||
词条2 = 希洛克武器词条[3]
|
||||
elif 希洛克武器选择 == 1:
|
||||
词条1 = 2
|
||||
词条2 = 2
|
||||
词条1适用名望 = 词条1名望[词条1]
|
||||
词条2适用名望 = 词条2名望[词条2]
|
||||
|
||||
if 希洛克成套 == 3:
|
||||
残香名望 = 词条1适用名望 + 词条2适用名望
|
||||
else:
|
||||
残香名望 = 词条1适用名望
|
||||
|
||||
希洛克融合名望 = {
|
||||
"残香名望": 残香名望,
|
||||
"下装": 116 * 下装希洛克,
|
||||
"辅助装备": 116 * 左槽希洛克,
|
||||
"戒指": 116 * 戒指希洛克
|
||||
}
|
||||
return 希洛克融合名望
|
||||
|
||||
|
||||
def 奥兹玛融合名望计算():
|
||||
奥兹玛选择状态 = store.get("/{type}/data/ozma", [0] * 25)
|
||||
|
||||
奥兹玛部位 = [奥兹玛选择状态[i:i + 5] for i in range(0, len(奥兹玛选择状态), 5)]
|
||||
头肩 = sum(list(map(lambda x: x[0], 奥兹玛部位)))
|
||||
腰带 = sum(list(map(lambda x: x[1], 奥兹玛部位)))
|
||||
鞋 = sum(list(map(lambda x: x[2], 奥兹玛部位)))
|
||||
项链 = sum(list(map(lambda x: x[3], 奥兹玛部位)))
|
||||
魔法石 = sum(list(map(lambda x: x[4], 奥兹玛部位)))
|
||||
|
||||
return {
|
||||
"头肩": 头肩 * 116,
|
||||
"腰带": 腰带 * 116,
|
||||
"鞋": 鞋 * 116,
|
||||
"项链": 项链 * 116,
|
||||
"魔法石": 魔法石 * 116
|
||||
}
|
||||
|
||||
|
||||
def 更新人物名望():
|
||||
# 名望 = 装备 + 增幅/强化/锻造 + 附魔 + 称号 + 宠物 +
|
||||
# 宠物装备 + 徽章 + 时装 + 护石 + 符文 + 勋 章 + 辟邪玉 + 收集箱
|
||||
|
||||
# 装备 开始
|
||||
|
||||
装备名望 = 装备基础名望计算()
|
||||
打造名望 = 装备打造名望计算()
|
||||
附魔名望 = 附魔名望计算()
|
||||
称号名望 = 称号名望计算()
|
||||
宠物名望 = 宠物名望计算()
|
||||
武器名望 = 武器名望计算()
|
||||
# 宠物装备名望 = 宠物装备名望计算(附魔名望默认选项) (并入附魔名望)
|
||||
徽章名望 = 徽章名望计算()
|
||||
时装名望 = 时装名望计算()
|
||||
护石名望 = 护石名望计算()
|
||||
符文名望 = 符文名望计算()
|
||||
勋章名望 = 勋章名望计算()
|
||||
辟邪玉名望 = 辟邪玉名望计算()
|
||||
#收集箱名望 = 收集箱名望计算(人物设置) (并入附魔名望)
|
||||
改造升级名望 = 改造升级黑鸦名望计算()
|
||||
黑鸦名望 = 黑鸦名望计算(改造部位=list(改造升级名望.keys()))
|
||||
希洛克融合名望 = 希洛克融合名望计算()
|
||||
奥兹玛融合名望 = 奥兹玛融合名望计算()
|
||||
|
||||
名望详情 = {
|
||||
"基础装备名望": 装备名望,
|
||||
"增幅/强化/锻造/改造名望": 打造名望,
|
||||
"武器名望": 武器名望,
|
||||
"附魔名望": 附魔名望,
|
||||
"称号名望": 称号名望,
|
||||
"宠物名望": 宠物名望,
|
||||
"徽章名望": 徽章名望,
|
||||
"时装名望": 时装名望,
|
||||
"护石名望": 护石名望,
|
||||
"符文名望": 符文名望,
|
||||
"勋章名望": 勋章名望,
|
||||
"辟邪玉名望": 辟邪玉名望,
|
||||
"黑鸦名望": 黑鸦名望,
|
||||
"改造升级名望": 改造升级名望,
|
||||
"希洛克融合名望": 希洛克融合名望,
|
||||
"奥兹玛融合名望": 奥兹玛融合名望
|
||||
}
|
||||
|
||||
总名望 = 0
|
||||
for 部位 in 名望详情:
|
||||
# print(部位, 名望详情[部位], 总名望)
|
||||
|
||||
if isinstance(名望详情[部位], dict):
|
||||
总名望 += sum(list(名望详情[部位].values()))
|
||||
elif isinstance(名望详情[部位], list):
|
||||
总名望 += sum(名望详情[部位].values())
|
||||
else:
|
||||
总名望 += 名望详情[部位]
|
||||
|
||||
# 时装页
|
||||
时装页名望 = {
|
||||
"武器装扮": 附魔名望["武器装扮"] + 徽章名望["武器装扮"],
|
||||
"光环": 附魔名望["光环"] + 徽章名望["光环"],
|
||||
"时装": 时装名望,
|
||||
"皮肤": 附魔名望["皮肤"] + 徽章名望["皮肤"],
|
||||
"宠物": 宠物名望 + 附魔名望["宠物附魔"],
|
||||
"宠物装备": 附魔名望["宠物装备红"] + 附魔名望["宠物装备蓝"] + 附魔名望["宠物装备绿"]
|
||||
}
|
||||
护石页名望 = {
|
||||
"护石": 护石名望,
|
||||
"符文": 符文名望,
|
||||
}
|
||||
|
||||
装备页名望 = 装备名望
|
||||
for 部位 in 装备页名望:
|
||||
徽章部位名望 = 徽章名望.get(部位, 0)
|
||||
装备页名望[部位] += 徽章部位名望
|
||||
希洛克部位名望 = 希洛克融合名望.get(部位, 0)
|
||||
装备页名望[部位] += 希洛克部位名望
|
||||
奥兹玛部位名望 = 奥兹玛融合名望.get(部位, 0)
|
||||
装备页名望[部位] += 奥兹玛部位名望
|
||||
|
||||
装备页名望["武器"] = 武器名望 + 希洛克融合名望["残香名望"]
|
||||
|
||||
# print(时装页名望)
|
||||
# print(护石页名望)
|
||||
# print(装备页名望)
|
||||
# print(总名望)
|
||||
store.set("/fame/temp_result", 总名望)
|
||||
store.set("/fame/temp_result/detail", 名望详情)
|
||||
@@ -0,0 +1,358 @@
|
||||
#看看就行, 计算细节通用的数据
|
||||
|
||||
##############增幅################
|
||||
|
||||
# 增幅系数 = [0, 1, 2, 3, 4, 6, 8, 10, 12, 13, 17, 33, 50, 67, 108, 150, 192, 267, 342, 417, 500, 583, 667, 750, 833, 917, 1000, 1083, 1167, 1250, 1333, 1417]
|
||||
# 增幅系数_HF = [0, 1, 2, 3, 4, 6, 8, 10, 22, 28, 35, 42, 50, 67, 108, 150, 192, 267, 342, 417, 500, 583, 667, 750, 833, 917, 1000, 1083, 1167, 1250, 1333, 1417]
|
||||
增幅系数 = (0, 1, 2, 3, 4, 6, 8, 10, 22, 28, 35, 42, 50, 67, 108, 150, 192, 267,
|
||||
342, 417, 500, 583, 667, 750, 833, 917, 1000, 1083, 1167, 1250, 1333,
|
||||
1417)
|
||||
增幅成长系数 = {'稀有': 1, '神器': 1.3, '勇者': 1.1, '传说': 1.4, '史诗': 1.5, '神话': 1.6}
|
||||
增幅品级加分 = {'稀有': 45, '神器': 45, '勇者': 45, '传说': 46, '史诗': 46, '神话': 46}
|
||||
# 增幅品级底数 = {'稀有': 5, '神器': 6, '勇者': 5, '传说': 6, '史诗': 7, '神话': 8}
|
||||
# 增幅品级底数_HF = {'稀有': 10, '神器': 11, '勇者': 10, '传说': 11, '史诗': 12, '神话': 13}
|
||||
增幅品级底数 = {'稀有': 10, '神器': 11, '勇者': 10, '传说': 11, '史诗': 12, '神话': 13}
|
||||
|
||||
|
||||
def 增幅计算(装备等级, 品质, 强化等级, 版本='GF'):
|
||||
if 版本 == 'GF':
|
||||
# return int((装备等级 + 增幅品级加分[品质]) * 增幅成长系数[品质] * 增幅系数[强化等级] / 100 - 0.00000001) + 增幅品级底数[品质]
|
||||
# else:
|
||||
return int((装备等级 + 增幅品级加分[品质]) * 增幅成长系数[品质] * 增幅系数[强化等级] / 100 -
|
||||
0.00000001) + 增幅品级底数[品质] + (0 if 强化等级 < 12 else 5)
|
||||
|
||||
|
||||
###########特殊装备&勋章###########
|
||||
|
||||
耳环强化系数 = (0, 83, 124, 166, 207, 248, 314, 370, 426, 482, 621, 970, 1455, 1941,
|
||||
2911, 4043, 5175, 7116, 9056, 10997, 13099, 15363, 17627, 19891,
|
||||
22155, 24420, 26684, 28948, 31212, 33476, 35740, 38004)
|
||||
左右强化系数 = (0, 60, 90, 120, 150, 180, 210, 247, 285, 322, 360, 675, 1013, 1350,
|
||||
2025, 2813, 3600, 4950, 6300, 7650, 9113, 10688, 12263, 13838, 15413,
|
||||
16988, 18563, 20138, 21713, 23288, 24863, 26438)
|
||||
勋章强化系数 = (0, 100, 120, 144, 173, 208, 250, 300, 320, 360, 400, 610, 1220, 2440,
|
||||
2684, 2952, 3838, 4989, 6486, 8432, 10962)
|
||||
特殊成长系数 = {
|
||||
'普通': 0.4,
|
||||
'高级': 0.7,
|
||||
'稀有': 1,
|
||||
'神器': 1.25,
|
||||
'传说': 1.35,
|
||||
'史诗': 1.45,
|
||||
'神话': 1.55
|
||||
}
|
||||
特殊品级加分 = {'普通': 24, '高级': 30, '稀有': 26, '神器': 28, '传说': 29, '史诗': 30, '神话': 31}
|
||||
|
||||
|
||||
def 耳环计算(装备等级, 品质, 强化等级):
|
||||
return int((装备等级 + 特殊品级加分[品质]) / 2400 * 特殊成长系数[品质] * 耳环强化系数[强化等级])
|
||||
|
||||
|
||||
def 左右计算(装备等级, 品质, 强化等级):
|
||||
return int((装备等级 + 特殊品级加分[品质]) / 2400 * 特殊成长系数[品质] * 左右强化系数[强化等级])
|
||||
|
||||
|
||||
def 勋章计算(装备等级, 品质, 强化等级):
|
||||
return int((装备等级 + 特殊品级加分[品质]) / 2400 * 特殊成长系数[品质] * 勋章强化系数[强化等级])
|
||||
|
||||
|
||||
###############武器###############
|
||||
|
||||
武器强化系数 = (0, 2, 2.6, 3.6, 4.7, 5.8, 6.9, 8.2, 11, 14.6, 18.7, 26.9, 36.7, 43,
|
||||
49.2, 55.4, 61.7, 68, 74.3, 80.6, 86.9, 93.2, 99.5, 105.8, 112.1,
|
||||
118.3, 124.6, 130.9, 137.1, 143.4, 149.7, 156.0)
|
||||
武器锻造系数 = (0, 2, 3, 4, 6, 8, 13, 18, 25, 32, 41)
|
||||
武器成长系数 = {
|
||||
'普通': 0.4,
|
||||
'高级': 0.7,
|
||||
'稀有': 1,
|
||||
'神器': 1.25,
|
||||
'勇者': 1.1,
|
||||
'传说': 1.35,
|
||||
'史诗': 1.45,
|
||||
'神话': 1.55
|
||||
}
|
||||
武器品级加分 = {
|
||||
'普通': 8,
|
||||
'高级': 8,
|
||||
'稀有': 10,
|
||||
'神器': 12,
|
||||
'勇者': 11,
|
||||
'传说': 13,
|
||||
'史诗': 14,
|
||||
'神话': 15
|
||||
}
|
||||
武器类型系数 = {
|
||||
'短剑': (1.095, 1.115),
|
||||
'太刀': (1.095, 1.105),
|
||||
'钝器': (1.11, 1.095),
|
||||
'巨剑': (1.12, 1.09),
|
||||
'光剑': (1.093, 1.09),
|
||||
'手套': (1.095, 1.115),
|
||||
'臂铠': (1.12, 1.09),
|
||||
'爪': (1.1, 1.1),
|
||||
'拳套': (1.105, 1.095),
|
||||
'东方棍': (1.095, 1.1),
|
||||
'左轮枪': (1.087, 1.077),
|
||||
'自动手枪': (1.064, 1.094),
|
||||
'步枪': (1.1, 1.085),
|
||||
'手炮': (1.106, 1.064),
|
||||
'手弩': (1.075, 1.085),
|
||||
'矛': (1.12, 1.085),
|
||||
'棍棒': (1.108, 1.09),
|
||||
'魔杖': (1.09, 1.11),
|
||||
'法杖': (1.095, 1.12),
|
||||
'扫把': (1.1, 1.11),
|
||||
'十字架': (1.1, 1.095),
|
||||
'念珠': (1.09, 1.115),
|
||||
'图腾': (1.105, 1.09),
|
||||
'镰刀': (1.105, 1.105),
|
||||
'战斧': (1.12, 1.085),
|
||||
'匕首': (1.09, 1.089),
|
||||
'双剑': (1.102, 1.08),
|
||||
'手杖': (1.081, 1.115),
|
||||
'苦无': (1.09, 1.11),
|
||||
'长枪': (1.105, 1.09),
|
||||
'战戟': (1.12, 1.085),
|
||||
'光枪': (1.095, 1.115),
|
||||
'暗矛': (1.095, 1.105),
|
||||
'长刀': (1.108, 1.09),
|
||||
'小太刀': (1.1, 1.1),
|
||||
'重剑': (1.12, 1.09),
|
||||
'源力剑': (1.095, 1.115)
|
||||
}
|
||||
|
||||
|
||||
def 武器计算(装备等级, 品质, 强化等级, 武器类型, 类型):
|
||||
武器系数 = (武器类型系数[武器类型][0 if 类型 == '物理' else 1])
|
||||
return int((装备等级 + 武器品级加分[品质]) / 8 * 武器成长系数[品质] * 武器强化系数[强化等级] * 武器系数)
|
||||
|
||||
|
||||
def 锻造计算(装备等级, 品质, 锻造等级):
|
||||
return round((装备等级 + 武器品级加分[品质]) / 8 * 武器成长系数[品质] * 武器锻造系数[锻造等级])
|
||||
|
||||
|
||||
def 锻造四维(装备等级, 品质, 锻造等级):
|
||||
return round((装备等级 + 武器品级加分[品质]) / 80 * 武器成长系数[品质] * 武器锻造系数[锻造等级])
|
||||
|
||||
|
||||
# 武器冷却惩罚系数 = {
|
||||
# '短剑': (1, 1.05, 1),
|
||||
# '太刀': (0.95, 1, 1),
|
||||
# '钝器': (1.05, 1, 1),
|
||||
# '巨剑': (1.1, 1, 1),
|
||||
# '光剑': (0.9, 1, 1),
|
||||
# '手套': (0.9, 1.05, 1),
|
||||
# '臂铠': (1.1, 1, 1),
|
||||
# '爪': (1, 1, 1),
|
||||
# '拳套': (0.9, 1, 1),
|
||||
# '东方棍': (1, 1, 1),
|
||||
# '左轮枪': (1, 1, 1),
|
||||
# '自动手枪': (0.9, 1, 1),
|
||||
# '步枪': (1.05, 1, 1),
|
||||
# '手炮': (1.1, 1, 1),
|
||||
# '手弩': (0.9, 1, 1),
|
||||
# '矛': (1.05, 0.95, 1),
|
||||
# '棍棒': (1, 1, 1),
|
||||
# '魔杖': (0.95, 1, 1),
|
||||
# '法杖': (1, 1.1, 1),
|
||||
# '扫把': (1 ,1, 1),
|
||||
# '十字架': (0.95, 1, 1),
|
||||
# '念珠': (0.95, 1.05, 1),
|
||||
# '图腾': (1, 0.95, 1),
|
||||
# '镰刀': (0.95, 1, 1),
|
||||
# '战斧': (1.1, 0.9, 1),
|
||||
# '匕首': (0.9, 0.95, 1),
|
||||
# '双剑': (1.1, 0.9, 1),
|
||||
# '手杖': (1, 1.1, 1),
|
||||
# '苦无': (1, 1.05, 1),
|
||||
# '长枪': (1.05, 1, 1),
|
||||
# '战戟': (1.1, 0.9, 1),
|
||||
# '光枪': (1, 1.05, 1),
|
||||
# '暗矛': (0.95, 1, 1),
|
||||
# '长刀': (1.05, 1, 1),
|
||||
# '小太刀': (1, 1, 1),
|
||||
# '重剑': (1.1, 1, 1),
|
||||
# '源力剑': (1, 1.05, 1]}
|
||||
|
||||
武器冷却惩罚系数 = {
|
||||
'短剑': (1, 1.05, 1),
|
||||
'太刀': (0.95, 1, 1),
|
||||
'钝器': (1.05, 1, 1),
|
||||
'巨剑': (1.1, 1, 1),
|
||||
'光剑': (0.9, 1, 1),
|
||||
'手套': (0.9, 1.05, 1),
|
||||
'臂铠': (1.1, 1, 1),
|
||||
'爪': (1, 1, 1),
|
||||
'拳套': (0.9, 1, 1),
|
||||
'东方棍': (1, 1, 1),
|
||||
'左轮枪': (1, 1, 1),
|
||||
'自动手枪': (0.9, 1, 1),
|
||||
'步枪': (1.05, 1, 1),
|
||||
'手炮': (1.1, 1, 1),
|
||||
'手弩': (0.9, 1, 1),
|
||||
'矛': (1.05, 0.95, 1),
|
||||
'棍棒': (1, 1, 1),
|
||||
'魔杖': (0.95, 1, 1),
|
||||
'法杖': (1, 1.1, 1),
|
||||
'扫把': (1, 1, 1),
|
||||
'十字架': (0.95, 1, 1),
|
||||
'念珠': (0.95, 1.05, 1),
|
||||
'图腾': (1, 0.95, 1),
|
||||
'镰刀': (0.95, 1, 1),
|
||||
'战斧': (1.1, 0.9, 1),
|
||||
'匕首': (0.9, 0.95, 1),
|
||||
'双剑': (1.1, 0.9, 1),
|
||||
'手杖': (1, 1.1, 1),
|
||||
'苦无': (1, 1.05, 1),
|
||||
'长枪': (1, 1, 1),
|
||||
'战戟': (1.1, 0.9, 1),
|
||||
'光枪': (1, 1.05, 1),
|
||||
'暗矛': (0.95, 1, 1),
|
||||
'长刀': (1.05, 1, 1),
|
||||
'小太刀': (1, 1, 1),
|
||||
'重剑': (1.1, 1, 1),
|
||||
'源力剑': (1, 1.05, 1)
|
||||
}
|
||||
|
||||
|
||||
def 武器冷却惩罚(武器类型, 输出类型, 版本='GF'):
|
||||
类型系数 = (0 if 输出类型 == '物理百分比' else (1 if 输出类型 == '魔法百分比' else 2))
|
||||
if 版本 == 'GF':
|
||||
return 武器冷却惩罚系数[武器类型][类型系数]
|
||||
# else:
|
||||
# return 武器冷却惩罚系数_HF[武器类型][类型系数]
|
||||
|
||||
|
||||
#################防具################
|
||||
|
||||
部位系数 = {'上衣': 0.30, '头肩': 0.20, '下装': 0.25, '腰带': 0.10, '鞋': 0.15}
|
||||
品级加分 = {'稀有': 5, '神器': 8, '勇者': 11, '传说': 14, '史诗': 17, '神话': 18}
|
||||
|
||||
|
||||
def 精通计算(装备等级, 品质, 强化等级, 部位):
|
||||
return round((20 + 2.5 * (装备等级 + 品级加分[品质] + int(强化等级 / 3))) * 部位系数[部位], 2)
|
||||
|
||||
|
||||
def 精通体力(装备等级, 品质, 强化等级, 部位):
|
||||
return round((4 + (装备等级 + 品级加分[品质] + int(强化等级 / 3))) * 部位系数[部位], 2)
|
||||
|
||||
|
||||
def 精通精神(装备等级, 品质, 强化等级, 部位):
|
||||
return 精通体力(装备等级, 品质, 强化等级, 部位) * 2
|
||||
|
||||
|
||||
def 精通智力(装备等级, 品质, 强化等级, 部位):
|
||||
return 精通体力(装备等级, 品质, 强化等级, 部位) * 2
|
||||
|
||||
|
||||
#############角色基础属性##############
|
||||
|
||||
当前等级 = 100
|
||||
|
||||
角色基础系数 = {
|
||||
'魔枪士': (4.6, 4.6, 4.4, 4.4, 7, 7, 5, 5),
|
||||
'格斗家(女)': (5, 5, 4, 4, 7.5, 7.5, 4.5, 4.5),
|
||||
'格斗家(男)': (5, 5, 4, 4, 7.5, 7.5, 4.5, 4.5),
|
||||
'枪剑士': (4.6, 4.6, 4.4, 4.4, 7, 7, 5, 5),
|
||||
'神枪手(女)': (4.5, 4.5, 4.5, 4.5, 6.5, 6.5, 5.5, 5.5),
|
||||
'神枪手(男)': (4.5, 4.5, 4.5, 4.5, 6.5, 6.5, 5.5, 5.5),
|
||||
'守护者': (4.8, 4.8, 4.2, 4.2, 7, 7, 5, 5),
|
||||
'魔法师(女)': (4, 4, 5, 5, 4.5, 4.5, 7.5, 7.5),
|
||||
'魔法师(男)': (3.5, 4, 5.5, 5, 4, 4.5, 8, 7.5),
|
||||
'暗夜使者': (5, 4, 5, 4, 7.5, 5.5, 6.5, 4.5),
|
||||
'缔造者': (4, 4, 5, 5, 4.5, 4.5, 7.5, 7.5),
|
||||
'黑暗武士': (4.8, 4.8, 4.2, 4.2, 7.5, 7.5, 4.5, 4.5),
|
||||
'鬼剑士(男)': (4.8, 4.8, 4.2, 4.2, 7.5, 7.5, 4.5, 4.5),
|
||||
'鬼剑士(女)': (4.6, 4.6, 4.4, 4.4, 7, 7, 5, 5),
|
||||
'圣职者(男)': (4.7, 4.8, 4, 4.5, 6.5, 6.5, 4.5, 6.5),
|
||||
'圣职者(女)': (4.7, 4.8, 4, 4.5, 6.5, 6.5, 4.5, 6.5)
|
||||
}
|
||||
|
||||
职业基础数据 = {
|
||||
'征战者-魔枪士': (5.5, 5.5, 3.5, 3.5),
|
||||
'决战者-魔枪士': (5, 5, 4, 4),
|
||||
'狩猎者-魔枪士': (3, 4.5, 6, 4.5),
|
||||
'暗枪士-魔枪士': (3.5, 3.5, 5.5, 5.5),
|
||||
'气功师-格斗家(女)': (3.5, 3.5, 5.5, 5.5),
|
||||
'散打-格斗家(女)': (5.5, 5.5, 3.5, 3.5),
|
||||
'街霸-格斗家(女)': (5, 4, 5, 4),
|
||||
'柔道家-格斗家(女)': (5, 6, 3.5, 3.5),
|
||||
'气功师-格斗家(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'散打-格斗家(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'街霸-格斗家(男)': (5, 4, 5, 4),
|
||||
'柔道家-格斗家(男)': (5, 6, 3.5, 3.5),
|
||||
'暗刃-枪剑士': (5.5, 5.5, 3.5, 3.5),
|
||||
'特工-枪剑士': (5, 5, 4, 4),
|
||||
'战线佣兵-枪剑士': (5.2, 5, 3.5, 4.3),
|
||||
'源能专家-枪剑士': (3.5, 3.5, 5.5, 5.5),
|
||||
'漫游枪手-神枪手(女)': (5.5, 5.5, 3.5, 3.5),
|
||||
'枪炮师-神枪手(女)': (5.5, 5.5, 3.5, 3.5),
|
||||
'机械师-神枪手(女)': (3.5, 3.5, 5.5, 5.5),
|
||||
'弹药专家-神枪手(女)': (4.7, 4.3, 4.7, 4.3),
|
||||
'漫游枪手-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'枪炮师-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'机械师-神枪手(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'弹药专家-神枪手(男)': (4.7, 4.3, 4.7, 4.3),
|
||||
'合金战士-神枪手(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'精灵骑士-守护者': (5, 5, 4, 4),
|
||||
'混沌魔灵-守护者': (3.5, 3.5, 5.5, 5.5),
|
||||
'帕拉丁-守护者': (5, 5.5, 2, 5.5),
|
||||
'龙骑士-守护者': (5, 5, 4, 4),
|
||||
'元素师-魔法师(女)': (3.5, 3.5, 5.5, 5.5),
|
||||
'召唤师-魔法师(女)': (3.8, 3.7, 5.3, 5.2),
|
||||
'战斗法师-魔法师(女)': (5, 4, 5, 4),
|
||||
'魔道学者-魔法师(女)': (4.5, 4, 5.2, 4.3),
|
||||
'小魔女-魔法师(女)': (4.7, 4.8, 5.5, 4.5),
|
||||
'元素爆破师-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'冰结师-魔法师(男)': (3.5, 3.7, 5.5, 5.2),
|
||||
'血法师-魔法师(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'逐风者-魔法师(男)': (5.5, 5.2, 3.5, 3.8),
|
||||
'次元行者-魔法师(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'刺客-暗夜使者': (5.3, 4.5, 4.2, 4),
|
||||
'死灵术士-暗夜使者': (4.7, 3.5, 5.3, 4.5),
|
||||
'忍者-暗夜使者': (4.5, 3.5, 5.5, 4.5),
|
||||
'影舞者-暗夜使者': (5.5, 4.5, 4, 4),
|
||||
'缔造者-缔造者': (4, 4, 5, 5),
|
||||
'黑暗武士-黑暗武士': (4.8, 4.8, 4.2, 4.2),
|
||||
'剑魂-鬼剑士(男)': (5, 5, 4, 4),
|
||||
'鬼泣-鬼剑士(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'狂战士-鬼剑士(男)': (5.5, 5.5, 3.5, 3.5),
|
||||
'阿修罗-鬼剑士(男)': (3, 4.5, 6, 4.5),
|
||||
'剑影-鬼剑士(男)': (5, 5, 4, 4),
|
||||
'刃影-鬼剑士(女)': (5, 5, 4, 4),
|
||||
'驭剑士-鬼剑士(女)': (5, 5, 4, 4),
|
||||
'暗殿骑士-鬼剑士(女)': (3.5, 3.5, 5.5, 5.5),
|
||||
'契魔者-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
||||
'流浪武士-鬼剑士(女)': (5.5, 5.5, 3.5, 3.5),
|
||||
'圣骑士-圣职者(男)': (3.5, 5.5, 3.5, 5.5),
|
||||
'蓝拳圣使-圣职者(男)': (5.2, 5, 3.9, 3.9),
|
||||
'驱魔师-圣职者(男)': (5, 4, 5, 4),
|
||||
'复仇者-圣职者(男)': (3.5, 3.5, 5.5, 5.5),
|
||||
'圣骑士-圣职者(女)': (3.5, 5.5, 5.5, 3.5),
|
||||
'异端审判者-圣职者(女)': (5.2, 5, 3.5, 4.3),
|
||||
'巫女-圣职者(女)': (3.5, 3.5, 5.5, 5.5),
|
||||
'诱魔者-圣职者(女)': (3.5, 3.5, 5.5, 5.5)
|
||||
}
|
||||
|
||||
|
||||
def 基础属性输入(属性):
|
||||
|
||||
角色数据 = 角色基础系数[属性.角色]
|
||||
职业数据 = 职业基础数据[属性.职业 + '-' + 属性.角色]
|
||||
|
||||
唤醒 = (275 if 当前等级 >= 75 else (145 if 当前等级 >= 15 else 0))
|
||||
|
||||
属性.基础力量 = int(角色数据[4] + 角色数据[0] * min(14, 当前等级 - 1) +
|
||||
职业数据[0] * max(当前等级 - 15, 0) + 唤醒 + 2.1 * min(71, 当前等级))
|
||||
属性.基础体力 = int(角色数据[5] + 角色数据[1] * min(14, 当前等级 - 1) +
|
||||
职业数据[1] * max(当前等级 - 15, 0) + 唤醒 + 2.0 * min(71, 当前等级))
|
||||
属性.基础智力 = int(角色数据[6] + 角色数据[2] * min(14, 当前等级 - 1) +
|
||||
职业数据[2] * max(当前等级 - 15, 0) + 唤醒 + 2.1 * min(71, 当前等级))
|
||||
属性.基础精神 = int(角色数据[7] + 角色数据[3] * min(14, 当前等级 - 1) +
|
||||
职业数据[3] * max(当前等级 - 15, 0) + 唤醒 + 2.0 * min(71, 当前等级))
|
||||
|
||||
属性.力量 = 属性.基础力量
|
||||
属性.智力 = 属性.基础智力
|
||||
属性.体力 = 属性.基础体力
|
||||
属性.精神 = 属性.基础精神
|
||||
@@ -0,0 +1,519 @@
|
||||
# 宠物属性部分
|
||||
from PublicReference.equipment.base_item import Item
|
||||
|
||||
宠物列表 = [None] * 21
|
||||
|
||||
|
||||
class 宠物20(Item):
|
||||
显示名称 = '(22)至尊·超越时空·厄俄斯'
|
||||
名称 = '超越时空·厄俄斯'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 160
|
||||
属性.智力 += 160
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比三攻加成(0.20)
|
||||
属性.附加伤害加成(0.15)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +160<br>'
|
||||
temp += '智力 +160<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比三攻 +20%<br>'
|
||||
temp += '附加伤害 +15%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物19(Item):
|
||||
显示名称 = '(22)至尊·超越时空·赫斯'
|
||||
名称 = '超越时空·赫斯'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 160
|
||||
属性.智力 += 160
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比三攻加成(0.15)
|
||||
属性.附加伤害加成(0.20)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +160<br>'
|
||||
temp += '智力 +160<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比三攻 +15%<br>'
|
||||
temp += '附加伤害 +20%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物18(Item):
|
||||
显示名称 = '(22)普通·次元探险家·厄俄斯'
|
||||
名称 = '次元探险家·厄俄斯'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比三攻加成(0.12)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +160<br>'
|
||||
temp += '智力 +160<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比三攻 +12%<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物17(Item):
|
||||
显示名称 = '(22)普通·次元探险家·赫斯'
|
||||
名称 = '次元探险家·赫斯'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 95, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比三攻加成(0.10)
|
||||
属性.附加伤害加成(0.12)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +160<br>'
|
||||
temp += '智力 +160<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-95 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比三攻 +10%<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物16(Item):
|
||||
显示名称 = '(21)至尊·火神的化身'
|
||||
名称 = '火神的化身'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 160
|
||||
属性.智力 += 160
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.暴击伤害加成(0.20)
|
||||
属性.百分比力智加成(0.12)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +160<br>'
|
||||
temp += '智力 +160<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '暴击伤害 +20%<br>'
|
||||
temp += '百分比力智 +12%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物15(Item):
|
||||
显示名称 = '(21)普通·骑士/精灵使'
|
||||
名称 = '骑士/精灵使'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比三攻加成(0.12)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +150<br>'
|
||||
temp += '智力 +150<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比三攻 +12%<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物14(Item):
|
||||
显示名称 = '(21)夏日之恋莱森德'
|
||||
名称 = '夏日之恋莱森德'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比力智加成(0.10)
|
||||
属性.附加伤害加成(0.12)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +150<br>'
|
||||
temp += '智力 +150<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比力智 +10%<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物13(Item):
|
||||
显示名称 = '(21)夏日之恋赫米雅'
|
||||
名称 = '夏日之恋赫米雅'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(25)
|
||||
属性.技能等级加成('所有', 1, 80, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比力智加成(0.12)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +150<br>'
|
||||
temp += '智力 +150<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += 'Lv1-80 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比力智 +12%<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物12(Item):
|
||||
显示名称 = '(21)比拉谢尔号'
|
||||
名称 = '比拉谢尔号'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 140
|
||||
属性.智力 += 140
|
||||
属性.所有属性强化加成(24)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.附加伤害加成(0.12)
|
||||
属性.百分比力智加成(0.10)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +140<br>'
|
||||
temp += '智力 +140<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += '百分比力智 +10%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物11(Item):
|
||||
显示名称 = '(20)至尊·暴风圣女'
|
||||
名称 = '暴风圣女'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 150
|
||||
属性.智力 += 150
|
||||
属性.所有属性强化加成(24)
|
||||
属性.附加伤害加成(0.15)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.最终伤害加成(0.05)
|
||||
属性.百分比力智加成(0.12)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +150<br>'
|
||||
temp += '智力 +150<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += '附加伤害 +15%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '最终伤害 +5%<br>'
|
||||
temp += '百分比力智 +12%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物10(Item):
|
||||
显示名称 = '(19)至尊·神迹·莱恩'
|
||||
名称 = '神迹·莱恩'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 120
|
||||
属性.智力 += 120
|
||||
属性.所有属性强化加成(24)
|
||||
属性.附加伤害加成(0.15)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.最终伤害加成(0.05)
|
||||
属性.百分比力智加成(0.08)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +120<br>'
|
||||
temp += '智力 +120<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += '附加伤害 +15%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '最终伤害 +5%<br>'
|
||||
temp += '百分比力智 +8%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物9(Item):
|
||||
显示名称 = '(20)普通·神官'
|
||||
名称 = '神官格洛丽亚'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 140
|
||||
属性.智力 += 140
|
||||
属性.所有属性强化加成(24)
|
||||
属性.附加伤害加成(0.12)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.百分比力智加成(0.10)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +140<br>'
|
||||
temp += '智力 +140<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '百分比力智 +10%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物8(Item):
|
||||
显示名称 = '(19)至尊·莱恩'
|
||||
名称 = '古国英豪莱恩'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 120
|
||||
属性.智力 += 120
|
||||
属性.所有属性强化加成(24)
|
||||
属性.附加伤害加成(0.15)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
属性.最终伤害加成(0.05)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +120<br>'
|
||||
temp += '智力 +120<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += '附加伤害 +15%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
temp += '最终伤害 +5%<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物7(Item):
|
||||
显示名称 = '(19)普通·莱恩'
|
||||
名称 = '骑士莱恩'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 120
|
||||
属性.智力 += 120
|
||||
属性.所有属性强化加成(24)
|
||||
属性.附加伤害加成(0.12)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +120<br>'
|
||||
temp += '智力 +120<br>'
|
||||
temp += '所有属性强化 +24<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物6(Item):
|
||||
显示名称 = '(18)至尊·蒂娅'
|
||||
名称 = '冰雪魔法师蒂娅'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 110
|
||||
属性.智力 += 110
|
||||
属性.所有属性强化加成(22)
|
||||
属性.附加伤害加成(0.12)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +110<br>'
|
||||
temp += '智力 +110<br>'
|
||||
temp += '所有属性强化 +22<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物5(Item):
|
||||
显示名称 = '(18)普通·蒂娅'
|
||||
名称 = '雪兔蒂娅'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 100
|
||||
属性.智力 += 100
|
||||
属性.所有属性强化加成(20)
|
||||
属性.附加伤害加成(0.10)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +100<br>'
|
||||
temp += '智力 +100<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物4(Item):
|
||||
显示名称 = '(17)克里斯'
|
||||
名称 = '克里斯'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.物理攻击力 += 35
|
||||
属性.魔法攻击力 += 35
|
||||
属性.独立攻击力 += 55
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.08)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '物理攻击力 +35<br>'
|
||||
temp += '魔法攻击力 +35<br>'
|
||||
temp += '独立攻击力 +55<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +8%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物3(Item):
|
||||
显示名称 = '(16)关羽'
|
||||
名称 = '关羽'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 50
|
||||
属性.智力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.05)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
属性.加算冷却缩减 += 0.05
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +50<br>'
|
||||
temp += '智力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +5%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
temp += '技能冷却 -5%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物2(Item):
|
||||
显示名称 = '(15)墨仙雪莲'
|
||||
名称 = '墨仙雪莲'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 45
|
||||
属性.智力 += 45
|
||||
属性.物理攻击力 += 25
|
||||
属性.魔法攻击力 += 25
|
||||
属性.独立攻击力 += 45
|
||||
属性.附加伤害加成(0.08)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +45<br>'
|
||||
temp += '智力 +45<br>'
|
||||
temp += '物理攻击力 +25<br>'
|
||||
temp += '魔法攻击力 +25<br>'
|
||||
temp += '独立攻击力 +45<br>'
|
||||
temp += '附加伤害 +8%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物1(Item):
|
||||
显示名称 = '心悦宠物'
|
||||
名称 = '心悦宠物'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 100
|
||||
属性.智力 += 100
|
||||
属性.所有属性强化加成(20)
|
||||
属性.附加伤害加成(0.05)
|
||||
属性.技能等级加成('所有', 1, 50, 1)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +100<br>'
|
||||
temp += '智力 +100<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '附加伤害 +5%<br>'
|
||||
temp += 'Lv1-50 技能等级+1<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 宠物0(Item):
|
||||
显示名称 = '无'
|
||||
名称 = '无'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
return temp
|
||||
|
||||
|
||||
for i in range(len(宠物列表)):
|
||||
exec('宠物列表[{}] = 宠物{}()'.format(len(宠物列表) - i - 1, i))
|
||||
|
||||
宠物序号 = dict()
|
||||
for i in range(len(宠物列表)):
|
||||
宠物序号[宠物列表[i].名称] = i
|
||||
@@ -0,0 +1,15 @@
|
||||
from PublicReference.utils.common import format_range
|
||||
|
||||
|
||||
def 四维固定加成(self, x, types: list = ['力量', '智力', '体力', '精神']):
|
||||
if self is not None:
|
||||
if self.装备描述 == 0:
|
||||
if '力量' in types:
|
||||
self.力量 += x
|
||||
if '智力' in types:
|
||||
self.智力 += x
|
||||
if '体力' in types:
|
||||
self.体力 += x
|
||||
if '精神' in types:
|
||||
self.精神 += x
|
||||
return "".join(format_range("{} +{}<br>", types, x))
|
||||
@@ -0,0 +1,76 @@
|
||||
# 希洛克词条融合属性部分
|
||||
|
||||
|
||||
class 词条属性():
|
||||
描述 = ''
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性0(词条属性):
|
||||
描述 = '力智'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.百分比力智加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性1(词条属性):
|
||||
描述 = '三攻'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.百分比三攻加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性2(词条属性):
|
||||
描述 = '黄字'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.伤害增加加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性3(词条属性):
|
||||
描述 = '白字'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.附加伤害加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性4(词条属性):
|
||||
描述 = '暴伤'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.暴击伤害加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性5(词条属性):
|
||||
描述 = '终伤'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.最终伤害加成(x)
|
||||
pass
|
||||
|
||||
|
||||
class 词条属性6(词条属性):
|
||||
描述 = '觉醒Lv'
|
||||
|
||||
def 加成属性(self, 属性, x):
|
||||
属性.技能等级加成("所有", 50, 50, x)
|
||||
属性.技能等级加成("所有", 85, 85, x)
|
||||
属性.技能等级加成("所有", 100, 100, x)
|
||||
pass
|
||||
|
||||
|
||||
词条属性列表 = ()
|
||||
|
||||
for i in range(6):
|
||||
exec('词条属性列表 += (词条属性{}(),)'.format(i))
|
||||
|
||||
黑鸦武器属性列表 = ()
|
||||
for i in range(7):
|
||||
exec('黑鸦武器属性列表 += (词条属性{}(),)'.format(i))
|
||||
@@ -0,0 +1,944 @@
|
||||
import re
|
||||
from PublicReference.equipment.base_item import Item
|
||||
|
||||
# 称号属性部分
|
||||
|
||||
称号列表 = [None] * 33
|
||||
|
||||
|
||||
class 称号32(Item):
|
||||
显示名称 = '(22)至尊·时空超越者'
|
||||
名称 = '时空超越者'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 120
|
||||
属性.智力 += 120
|
||||
属性.物理攻击力 += 70
|
||||
属性.魔法攻击力 += 70
|
||||
属性.独立攻击力 += 70
|
||||
属性.所有属性强化加成(25)
|
||||
属性.百分比三攻加成(0.05)
|
||||
属性.暴击伤害加成(0.05)
|
||||
属性.最终伤害加成(0.05)
|
||||
属性.百分比力智加成(0.05)
|
||||
属性.附加伤害加成(0.05)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +120<br>'
|
||||
temp += '智力 +120<br>'
|
||||
temp += '物理攻击力 +70<br>'
|
||||
temp += '魔法攻击力 +70<br>'
|
||||
temp += '独立攻击力 +70<br>'
|
||||
temp += '所有属性强化 +25<br>'
|
||||
temp += '百分比三攻 +5%<br>'
|
||||
temp += '暴追 +5%<br>'
|
||||
temp += '最终伤害 +5%<br>'
|
||||
temp += '力智 +5%<br>'
|
||||
temp += '附加伤害 +5%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号31(Item):
|
||||
显示名称 = '(22)普通·时空旅人'
|
||||
名称 = '时空旅人'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 100
|
||||
属性.智力 += 100
|
||||
属性.物理攻击力 += 65
|
||||
属性.魔法攻击力 += 65
|
||||
属性.独立攻击力 += 65
|
||||
属性.所有属性强化加成(20)
|
||||
属性.伤害增加加成(0.06)
|
||||
属性.暴击伤害加成(0.06)
|
||||
属性.百分比力智加成(0.06)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +100<br>'
|
||||
temp += '智力 +100<br>'
|
||||
temp += '物理攻击力 +65<br>'
|
||||
temp += '魔法攻击力 +65<br>'
|
||||
temp += '独立攻击力 +65<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '黄追 +6%<br>'
|
||||
temp += '暴追 +6%<br>'
|
||||
temp += '力智 +6%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号30(Item):
|
||||
显示名称 = '(21)至尊·穿越星空的祈愿'
|
||||
名称 = '穿越星空的祈愿'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 100
|
||||
属性.智力 += 100
|
||||
属性.物理攻击力 += 65
|
||||
属性.魔法攻击力 += 65
|
||||
属性.独立攻击力 += 65
|
||||
属性.所有属性强化加成(22)
|
||||
属性.百分比三攻加成(0.12)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +100<br>'
|
||||
temp += '智力 +100<br>'
|
||||
temp += '物理攻击力 +65<br>'
|
||||
temp += '魔法攻击力 +65<br>'
|
||||
temp += '独立攻击力 +65<br>'
|
||||
temp += '所有属性强化 +22<br>'
|
||||
temp += '百分比三攻 +12%<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号29(Item):
|
||||
显示名称 = '(21)普通·永恒追猎'
|
||||
名称 = '永恒追猎'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 80
|
||||
属性.智力 += 80
|
||||
属性.物理攻击力 += 60
|
||||
属性.魔法攻击力 += 60
|
||||
属性.独立攻击力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.伤害增加加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +80<br>'
|
||||
temp += '智力 +80<br>'
|
||||
temp += '物理攻击力 +60<br>'
|
||||
temp += '魔法攻击力 +60<br>'
|
||||
temp += '独立攻击力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '伤害增加 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号28(Item):
|
||||
显示名称 = '(21)普通·永恒判罪'
|
||||
名称 = '永恒判罪'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 80
|
||||
属性.智力 += 80
|
||||
属性.物理攻击力 += 60
|
||||
属性.魔法攻击力 += 60
|
||||
属性.独立攻击力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴击伤害加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +80<br>'
|
||||
temp += '智力 +80<br>'
|
||||
temp += '物理攻击力 +60<br>'
|
||||
temp += '魔法攻击力 +60<br>'
|
||||
temp += '独立攻击力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴击伤害 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号27(Item):
|
||||
显示名称 = '(21)普通·永恒战吼'
|
||||
名称 = '永恒战吼'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 80
|
||||
属性.智力 += 80
|
||||
属性.物理攻击力 += 60
|
||||
属性.魔法攻击力 += 60
|
||||
属性.独立攻击力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.百分比力智加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +80<br>'
|
||||
temp += '智力 +80<br>'
|
||||
temp += '物理攻击力 +60<br>'
|
||||
temp += '魔法攻击力 +60<br>'
|
||||
temp += '独立攻击力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '百分比力智 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号26(Item):
|
||||
显示名称 = '(21)国庆·信念之启示'
|
||||
名称 = '信念之启示'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.伤害增加加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号25(Item):
|
||||
显示名称 = '(21)国庆·隐忍之启示'
|
||||
名称 = '隐忍之启示'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴击伤害加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴伤 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号24(Item):
|
||||
显示名称 = '(21)国庆·勇气之启示'
|
||||
名称 = '勇气之启示'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.百分比三攻加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '百分比三攻 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号23(Item):
|
||||
显示名称 = '(21)国庆·希望之启示'
|
||||
名称 = '希望之启示'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.最终伤害加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '最终伤害 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号22(Item):
|
||||
显示名称 = '(20)至尊·伟大的意志'
|
||||
名称 = '伟大的意志'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 90
|
||||
属性.智力 += 90
|
||||
属性.物理攻击力 += 65
|
||||
属性.魔法攻击力 += 65
|
||||
属性.独立攻击力 += 65
|
||||
属性.所有属性强化加成(20)
|
||||
属性.暴击伤害加成(0.18)
|
||||
属性.百分比力智加成(0.04)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +90<br>'
|
||||
temp += '智力 +90<br>'
|
||||
temp += '物理攻击力 +65<br>'
|
||||
temp += '魔法攻击力 +65<br>'
|
||||
temp += '独立攻击力 +65<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '暴击伤害 +18%<br>'
|
||||
temp += '百分比力智 +4%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号21(Item):
|
||||
显示名称 = '(20)普通·使徒降临'
|
||||
名称 = '使徒降临'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 80
|
||||
属性.智力 += 80
|
||||
属性.物理攻击力 += 60
|
||||
属性.魔法攻击力 += 60
|
||||
属性.独立攻击力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.12)
|
||||
属性.百分比力智加成(0.03)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +80<br>'
|
||||
temp += '智力 +80<br>'
|
||||
temp += '物理攻击力 +60<br>'
|
||||
temp += '魔法攻击力 +60<br>'
|
||||
temp += '独立攻击力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += '百分比力智 +3%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号20(Item):
|
||||
显示名称 = '(20)国庆·安徒恩的烈焰'
|
||||
名称 = '安徒恩的烈焰'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.黄字 = max(属性.黄字, 0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +15%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号19(Item):
|
||||
显示名称 = '(20)国庆·卢克的创造'
|
||||
名称 = '卢克的创造'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴伤 = max(属性.暴伤, 0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴伤 +15%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号18(Item):
|
||||
显示名称 = '(20)国庆·伊希斯的天空'
|
||||
名称 = '伊希斯的天空'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.百分比三攻加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '百分比三攻 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号17(Item):
|
||||
显示名称 = '(20)国庆·希洛克的悲鸣'
|
||||
名称 = '希洛克的悲鸣'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.最终伤害加成(0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '最终伤害 +15%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号16(Item):
|
||||
显示名称 = '(19)至尊·神选之英杰'
|
||||
名称 = '神选之英杰'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 75
|
||||
属性.智力 += 75
|
||||
属性.物理攻击力 += 45
|
||||
属性.魔法攻击力 += 45
|
||||
属性.独立攻击力 += 65
|
||||
属性.所有属性强化加成(20)
|
||||
属性.暴击伤害加成(0.18)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +75<br>'
|
||||
temp += '智力 +75<br>'
|
||||
temp += '物理攻击力 +45<br>'
|
||||
temp += '魔法攻击力 +45<br>'
|
||||
temp += '独立攻击力 +65<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '暴击伤害 +18%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号15(Item):
|
||||
显示名称 = '(19)普通·秘境迷踪'
|
||||
名称 = '秘境迷踪'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 70
|
||||
属性.智力 += 70
|
||||
属性.物理攻击力 += 40
|
||||
属性.魔法攻击力 += 40
|
||||
属性.独立攻击力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +70<br>'
|
||||
temp += '智力 +70<br>'
|
||||
temp += '物理攻击力 +40<br>'
|
||||
temp += '魔法攻击力 +40<br>'
|
||||
temp += '独立攻击力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号14(Item):
|
||||
显示名称 = '(19)国庆·超越极限者'
|
||||
名称 = '超越极限者'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴伤 = max(属性.暴伤, 0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴伤 +15%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号13(Item):
|
||||
显示名称 = '(18)至尊·天选之人'
|
||||
名称 = '天选之人'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 75
|
||||
属性.智力 += 75
|
||||
属性.物理攻击力 += 35
|
||||
属性.魔法攻击力 += 35
|
||||
属性.独立攻击力 += 55
|
||||
属性.所有属性强化加成(20)
|
||||
属性.最终伤害加成(0.12)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +75<br>'
|
||||
temp += '智力 +75<br>'
|
||||
temp += '物理攻击力 +35<br>'
|
||||
temp += '魔法攻击力 +35<br>'
|
||||
temp += '独立攻击力 +55<br>'
|
||||
temp += '所有属性强化 +20<br>'
|
||||
temp += '最终伤害 +12%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号12(Item):
|
||||
显示名称 = '(18)普通·兽人守护神'
|
||||
名称 = '兽人守护神'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 70
|
||||
属性.智力 += 70
|
||||
属性.物理攻击力 += 30
|
||||
属性.魔法攻击力 += 30
|
||||
属性.独立攻击力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +70<br>'
|
||||
temp += '智力 +70<br>'
|
||||
temp += '物理攻击力 +30<br>'
|
||||
temp += '魔法攻击力 +30<br>'
|
||||
temp += '独立攻击力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号11(Item):
|
||||
显示名称 = '(18)国庆·神之试炼'
|
||||
名称 = '神之试炼'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 55
|
||||
属性.智力 += 55
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴伤 = max(属性.暴伤, 0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +55<br>'
|
||||
temp += '智力 +55<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴伤 +15%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号10(Item):
|
||||
显示名称 = '(17)至尊·龙之威仪'
|
||||
名称 = '龙之威仪'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 65
|
||||
属性.智力 += 65
|
||||
属性.物理攻击力 += 35
|
||||
属性.魔法攻击力 += 35
|
||||
属性.独立攻击力 += 55
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.12)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +65<br>'
|
||||
temp += '智力 +65<br>'
|
||||
temp += '物理攻击力 +35<br>'
|
||||
temp += '魔法攻击力 +35<br>'
|
||||
temp += '独立攻击力 +55<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +12%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号9(Item):
|
||||
显示名称 = '(17)普通·龙之挑战'
|
||||
名称 = '龙之挑战'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.物理攻击力 += 30
|
||||
属性.魔法攻击力 += 30
|
||||
属性.独立攻击力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.附加伤害加成(0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '物理攻击力 +30<br>'
|
||||
temp += '魔法攻击力 +30<br>'
|
||||
temp += '独立攻击力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '附加伤害 +10%<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号8(Item):
|
||||
显示名称 = '(17)国庆·海洋霸主'
|
||||
名称 = '海洋霸主'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 55
|
||||
属性.智力 += 55
|
||||
属性.所有属性强化加成(15)
|
||||
属性.黄字 = max(属性.黄字, 0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +55<br>'
|
||||
temp += '智力 +55<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +10%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号7(Item):
|
||||
显示名称 = '(16)至尊·桃园结义[义]'
|
||||
名称 = '桃园结义[义]'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 60
|
||||
属性.智力 += 60
|
||||
属性.物理攻击力 += 30
|
||||
属性.魔法攻击力 += 30
|
||||
属性.独立攻击力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.黄字 = max(属性.黄字, 0.15)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +60<br>'
|
||||
temp += '智力 +60<br>'
|
||||
temp += '物理攻击力 +30<br>'
|
||||
temp += '魔法攻击力 +30<br>'
|
||||
temp += '独立攻击力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +15%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号6(Item):
|
||||
显示名称 = '(16)普通·三英雄[义]'
|
||||
名称 = '三英雄[义]'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 55
|
||||
属性.智力 += 55
|
||||
属性.物理攻击力 += 30
|
||||
属性.魔法攻击力 += 30
|
||||
属性.独立攻击力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.黄字 = max(属性.黄字, 0.12)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图力量 += 35
|
||||
属性.进图智力 += 35
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +55<br>'
|
||||
temp += '智力 +55<br>'
|
||||
temp += '物理攻击力 +30<br>'
|
||||
temp += '魔法攻击力 +30<br>'
|
||||
temp += '独立攻击力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +12%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号5(Item):
|
||||
显示名称 = '(16)国庆·骑士王的荣耀'
|
||||
名称 = '骑士王的荣耀'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 55
|
||||
属性.智力 += 55
|
||||
属性.所有属性强化加成(15)
|
||||
属性.黄字 = max(属性.黄字, 0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.进图属强 += 10
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +55<br>'
|
||||
temp += '智力 +55<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '黄字 +10%(取最高值)<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '所有属强 +10<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号4(Item):
|
||||
显示名称 = '(16)五一·荣耀贵族'
|
||||
名称 = '荣耀贵族'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 30
|
||||
属性.智力 += 30
|
||||
属性.物理攻击力 += 70
|
||||
属性.魔法攻击力 += 70
|
||||
属性.独立攻击力 += 90
|
||||
属性.加算冷却缩减 += 0.10
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +30<br>'
|
||||
temp += '智力 +30<br>'
|
||||
temp += '物理攻击力 +70<br>'
|
||||
temp += '魔法攻击力 +70<br>'
|
||||
temp += '独立攻击力 +90<br>'
|
||||
temp += '技能冷却 -10%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号3(Item):
|
||||
显示名称 = '(15)国庆·圣殿之巅'
|
||||
名称 = '圣殿之巅'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.物理攻击力 += 30
|
||||
属性.魔法攻击力 += 30
|
||||
属性.独立攻击力 += 50
|
||||
属性.所有属性强化加成(15)
|
||||
属性.暴伤 = max(属性.暴伤, 0.10)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '物理攻击力 +30<br>'
|
||||
temp += '魔法攻击力 +30<br>'
|
||||
temp += '独立攻击力 +50<br>'
|
||||
temp += '所有属性强化 +15<br>'
|
||||
temp += '暴伤 +10%(取最高值)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号2(Item):
|
||||
显示名称 = '(14)五一·明日-春华'
|
||||
名称 = '明日-春华'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 35
|
||||
属性.智力 += 35
|
||||
属性.物理攻击力 += 10
|
||||
属性.魔法攻击力 += 10
|
||||
属性.独立攻击力 += 18
|
||||
属性.所有属性强化加成(12)
|
||||
|
||||
def 触发属性(self, 属性):
|
||||
属性.加算冷却缩减 += 0.30
|
||||
pass
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +35<br>'
|
||||
temp += '智力 +35<br>'
|
||||
temp += '物理攻击力 +10<br>'
|
||||
temp += '魔法攻击力 +10<br>'
|
||||
temp += '独立攻击力 +18<br>'
|
||||
temp += '所有属性强化 +12<br>'
|
||||
temp += '<font color="#00A2E8">进图触发属性:</font><br>'
|
||||
temp += '技能冷却 -30%(加算)<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号1(Item):
|
||||
显示名称 = '(20)DPL专属称号·输出'
|
||||
名称 = 'DPL专属称号·输出'
|
||||
|
||||
def 城镇属性(self, 属性):
|
||||
属性.力量 += 1251
|
||||
属性.智力 += 1251
|
||||
属性.物理攻击力 += 377
|
||||
属性.魔法攻击力 += 377
|
||||
属性.独立攻击力 += 380
|
||||
属性.所有属性强化加成(166)
|
||||
属性.技能等级加成('主动', 1, 30, 2)
|
||||
属性.技能等级加成('主动', 1, 50, 2)
|
||||
属性.技能等级加成('所有', 1, 50, 2)
|
||||
|
||||
def 装备描述(self, 属性):
|
||||
temp = ''
|
||||
temp += '力量 +1251<br>'
|
||||
temp += '智力 +1251<br>'
|
||||
temp += '物理攻击力 +377<br>'
|
||||
temp += '魔法攻击力 +377<br>'
|
||||
temp += '独立攻击力 +380<br>'
|
||||
temp += '所有属性强化 +166<br>'
|
||||
temp += 'Lv1-30 (主动)技能等级+2<br>'
|
||||
temp += 'Lv1-50 (主动)技能等级+2<br>'
|
||||
temp += 'Lv1-50 (所有)技能等级+2<br>'
|
||||
return temp
|
||||
|
||||
|
||||
class 称号0(Item):
|
||||
pass
|
||||
|
||||
|
||||
for i in range(len(称号列表)):
|
||||
exec('称号列表[{}] = 称号{}()'.format(len(称号列表) - i - 1, i))
|
||||
|
||||
称号序号 = dict()
|
||||
for i in range(len(称号列表)):
|
||||
称号序号[称号列表[i].名称] = i
|
||||
@@ -0,0 +1,175 @@
|
||||
#"上衣", "头肩", "下装", "腰带", "鞋", "手镯", "项链", "戒指", "耳环", "辅助装备", "魔法石","武器"
|
||||
|
||||
|
||||
class 奥兹玛属性():
|
||||
def 阿斯特罗斯等级加成(self, 属性, k):
|
||||
描述 = ''
|
||||
if 属性.职业 == '缔造者':
|
||||
if k == 0:
|
||||
描述 += 属性.技能等级加成('所有', 70, 70, 1)
|
||||
描述 += 属性.技能等级加成('所有', 80, 80, 1)
|
||||
if k == 1:
|
||||
描述 += 属性.技能等级加成('所有', 40, 40, 1)
|
||||
描述 += 属性.技能等级加成('所有', 50, 50, 1)
|
||||
描述 += 属性.技能等级加成('所有', 60, 60, 1)
|
||||
if k == 2:
|
||||
描述 += 属性.技能等级加成('所有', 10, 10, 1)
|
||||
描述 += 属性.技能等级加成('所有', 30, 30, 1)
|
||||
else:
|
||||
if k == 0:
|
||||
描述 += 属性.技能等级加成('主动', 70, 70, 1)
|
||||
描述 += 属性.技能等级加成('主动', 75, 75, 1)
|
||||
描述 += 属性.技能等级加成('主动', 80, 80, 1)
|
||||
if k == 1:
|
||||
描述 += 属性.技能等级加成('主动', 40, 40, 1)
|
||||
描述 += 属性.技能等级加成('主动', 45, 45, 1)
|
||||
描述 += 属性.技能等级加成('主动', 60, 60, 1)
|
||||
if k == 2:
|
||||
描述 += 属性.技能等级加成('主动', 20, 20, 1)
|
||||
描述 += 属性.技能等级加成('主动', 25, 25, 1)
|
||||
描述 += 属性.技能等级加成('主动', 35, 35, 1)
|
||||
return 描述
|
||||
|
||||
def 奥兹玛属性_输出(self, 属性, 奥兹玛选择状态, 阿斯特罗斯选项, x=0):
|
||||
选择 = 奥兹玛选择状态
|
||||
技能 = 阿斯特罗斯选项
|
||||
|
||||
属性.装备描述 = x
|
||||
头肩 = ''
|
||||
腰带 = ''
|
||||
鞋 = ''
|
||||
项链 = ''
|
||||
魔法石 = ''
|
||||
|
||||
# region 阿斯特罗斯
|
||||
i = 0
|
||||
if 选择[0] == 1:
|
||||
头肩 += 属性.伤害增加加成(0.03)
|
||||
头肩 += 属性.暴击伤害加成(0.03)
|
||||
头肩 += 属性.附加伤害加成(0.02)
|
||||
头肩 += self.阿斯特罗斯等级加成(属性, 技能[i])
|
||||
i += 1
|
||||
if 选择[1] == 1:
|
||||
腰带 += 属性.百分比三攻加成(0.02)
|
||||
腰带 += 属性.百分比力智加成(0.03)
|
||||
腰带 += 属性.最终伤害加成(0.02)
|
||||
腰带 += self.阿斯特罗斯等级加成(属性, 技能[i])
|
||||
i += 1
|
||||
if 选择[2] == 1:
|
||||
鞋 += 属性.伤害增加加成(0.03)
|
||||
鞋 += 属性.暴击伤害加成(0.03)
|
||||
鞋 += 属性.附加伤害加成(0.01)
|
||||
鞋 += self.阿斯特罗斯等级加成(属性, 技能[i])
|
||||
i += 1
|
||||
if 选择[3] == 1:
|
||||
项链 += 属性.百分比三攻加成(0.02)
|
||||
项链 += 属性.百分比力智加成(0.03)
|
||||
项链 += 属性.最终伤害加成(0.02)
|
||||
项链 += self.阿斯特罗斯等级加成(属性, 技能[i])
|
||||
i += 1
|
||||
if 选择[4] == 1:
|
||||
魔法石 += 属性.附加伤害加成(0.03)
|
||||
魔法石 += 属性.百分比三攻加成(0.02)
|
||||
魔法石 += 属性.最终伤害加成(0.02)
|
||||
魔法石 += self.阿斯特罗斯等级加成(属性, 技能[i])
|
||||
i += 1
|
||||
# endregion
|
||||
# region 贝利亚斯
|
||||
if 选择[5] == 1:
|
||||
头肩 += 属性.伤害增加加成(0.03)
|
||||
头肩 += 属性.暴击伤害加成(0.03)
|
||||
头肩 += 属性.附加伤害加成(0.02)
|
||||
if 选择[6] == 1:
|
||||
腰带 += 属性.百分比三攻加成(0.02)
|
||||
腰带 += 属性.百分比力智加成(0.03)
|
||||
腰带 += 属性.最终伤害加成(0.02)
|
||||
if 选择[7] == 1:
|
||||
鞋 += 属性.伤害增加加成(0.03)
|
||||
鞋 += 属性.暴击伤害加成(0.03)
|
||||
鞋 += 属性.附加伤害加成(0.01)
|
||||
if 选择[8] == 1:
|
||||
项链 += 属性.百分比三攻加成(0.02)
|
||||
项链 += 属性.百分比力智加成(0.03)
|
||||
项链 += 属性.最终伤害加成(0.02)
|
||||
if 选择[9] == 1:
|
||||
魔法石 += 属性.附加伤害加成(0.03)
|
||||
魔法石 += 属性.百分比三攻加成(0.02)
|
||||
魔法石 += 属性.最终伤害加成(0.02)
|
||||
# endregion
|
||||
# region 雷德梅恩
|
||||
if 选择[10] == 1:
|
||||
头肩 += 属性.伤害增加加成(0.03)
|
||||
头肩 += 属性.暴击伤害加成(0.03)
|
||||
头肩 += 属性.附加伤害加成(0.02)
|
||||
头肩 += 属性.技能冷却缩减(45, 45, 0.1)
|
||||
if 选择[11] == 1:
|
||||
腰带 += 属性.百分比三攻加成(0.02)
|
||||
腰带 += 属性.百分比力智加成(0.03)
|
||||
腰带 += 属性.最终伤害加成(0.02)
|
||||
腰带 += 属性.技能冷却缩减(75, 75, 0.1)
|
||||
if 选择[12] == 1:
|
||||
鞋 += 属性.伤害增加加成(0.03)
|
||||
鞋 += 属性.暴击伤害加成(0.03)
|
||||
鞋 += 属性.附加伤害加成(0.01)
|
||||
鞋 += 属性.技能冷却缩减(70, 70, 0.1)
|
||||
if 选择[13] == 1:
|
||||
项链 += 属性.百分比三攻加成(0.02)
|
||||
项链 += 属性.百分比力智加成(0.03)
|
||||
项链 += 属性.最终伤害加成(0.02)
|
||||
项链 += 属性.技能冷却缩减(80, 80, 0.1)
|
||||
if 选择[14] == 1:
|
||||
魔法石 += 属性.附加伤害加成(0.03)
|
||||
魔法石 += 属性.百分比三攻加成(0.02)
|
||||
魔法石 += 属性.最终伤害加成(0.02)
|
||||
魔法石 += 属性.技能冷却缩减(60, 60, 0.1)
|
||||
# endregion
|
||||
# region 罗什巴赫
|
||||
if 选择[15] == 1:
|
||||
头肩 += 属性.伤害增加加成(0.03)
|
||||
头肩 += 属性.暴击伤害加成(0.03)
|
||||
头肩 += 属性.附加伤害加成(0.02)
|
||||
if 选择[16] == 1:
|
||||
腰带 += 属性.百分比三攻加成(0.02)
|
||||
腰带 += 属性.百分比力智加成(0.03)
|
||||
腰带 += 属性.最终伤害加成(0.02)
|
||||
if 选择[17] == 1:
|
||||
鞋 += 属性.伤害增加加成(0.03)
|
||||
鞋 += 属性.暴击伤害加成(0.03)
|
||||
鞋 += 属性.附加伤害加成(0.01)
|
||||
if 选择[18] == 1:
|
||||
项链 += 属性.百分比三攻加成(0.02)
|
||||
项链 += 属性.百分比力智加成(0.03)
|
||||
项链 += 属性.最终伤害加成(0.02)
|
||||
if 选择[19] == 1:
|
||||
魔法石 += 属性.附加伤害加成(0.03)
|
||||
魔法石 += 属性.百分比三攻加成(0.02)
|
||||
魔法石 += 属性.最终伤害加成(0.02)
|
||||
# endregion
|
||||
# region 泰玛特
|
||||
if 选择[20] == 1:
|
||||
头肩 += 属性.伤害增加加成(0.03)
|
||||
头肩 += 属性.暴击伤害加成(0.04)
|
||||
头肩 += 属性.附加伤害加成(0.02)
|
||||
if 选择[21] == 1:
|
||||
腰带 += 属性.百分比三攻加成(0.02)
|
||||
腰带 += 属性.百分比力智加成(0.04)
|
||||
腰带 += 属性.最终伤害加成(0.02)
|
||||
if 选择[22] == 1:
|
||||
鞋 += 属性.伤害增加加成(0.04)
|
||||
鞋 += 属性.暴击伤害加成(0.03)
|
||||
鞋 += 属性.附加伤害加成(0.02)
|
||||
if 选择[23] == 1:
|
||||
项链 += 属性.百分比三攻加成(0.03)
|
||||
项链 += 属性.百分比力智加成(0.03)
|
||||
项链 += 属性.最终伤害加成(0.02)
|
||||
if 选择[24] == 1:
|
||||
魔法石 += 属性.附加伤害加成(0.03)
|
||||
魔法石 += 属性.百分比三攻加成(0.02)
|
||||
魔法石 += 属性.最终伤害加成(0.03)
|
||||
# endregion
|
||||
属性.装备描述 = 0
|
||||
if x == 1:
|
||||
return {1: 头肩, 3: 腰带, 4: 鞋, 6: 项链, 10: 魔法石}
|
||||
|
||||
|
||||
奥兹玛 = 奥兹玛属性()
|
||||
@@ -0,0 +1,80 @@
|
||||
class 希洛克属性():
|
||||
def 希洛克属性_输出(self, 属性, 希洛克选择状态, 守门人属强选择, x=0):
|
||||
数量 = [0] * 3
|
||||
选择 = 希洛克选择状态
|
||||
属强 = 守门人属强选择 * 5 + 15
|
||||
for i in range(15):
|
||||
数量[i % 3] += 选择[i]
|
||||
|
||||
属性.装备描述 = x
|
||||
下装 = ''
|
||||
戒指 = ''
|
||||
辅助装备 = ''
|
||||
|
||||
# 下装属性1
|
||||
if 数量[0] == 1:
|
||||
下装 += 属性.最终伤害加成(0.05)
|
||||
|
||||
# 戒指属性1
|
||||
if 数量[1] == 1:
|
||||
戒指 += 属性.百分比三攻加成(0.05)
|
||||
|
||||
# 辅助装备属性1
|
||||
if 数量[2] == 1:
|
||||
辅助装备 += 属性.技能攻击力加成(0.05)
|
||||
|
||||
i = 0 # 奈克斯属性2
|
||||
if (选择[i * 3 + 0] + 选择[i * 3 + 1]) == 2:
|
||||
下装 += 属性.伤害增加加成(0.05) # 下装
|
||||
if (选择[i * 3 + 1] + 选择[i * 3 + 2]) == 2:
|
||||
戒指 += 属性.暴击伤害加成(0.05) # 戒指
|
||||
if (选择[i * 3 + 2] + 选择[i * 3 + 0]) == 2:
|
||||
辅助装备 += 属性.百分比力智加成(0.05) # 辅助装备
|
||||
|
||||
i = 1 # 暗杀者属性2
|
||||
if (选择[i * 3 + 0] + 选择[i * 3 + 1]) == 2:
|
||||
下装 += 属性.伤害增加加成(0.02)
|
||||
下装 += 属性.技能冷却缩减(1, 45, 0.2) # 下装
|
||||
if (选择[i * 3 + 1] + 选择[i * 3 + 2]) == 2:
|
||||
戒指 += 属性.暴击伤害加成(0.03)
|
||||
戒指 += 属性.技能冷却缩减(60, 70, 0.2) # 戒指
|
||||
if (选择[i * 3 + 2] + 选择[i * 3 + 0]) == 2:
|
||||
辅助装备 += 属性.百分比力智加成(0.03)
|
||||
辅助装备 += 属性.技能冷却缩减(75, 80, 0.17) # 辅助装备
|
||||
|
||||
i = 2 # 卢克西属性2
|
||||
if (选择[i * 3 + 0] + 选择[i * 3 + 1]) == 2:
|
||||
下装 += 属性.技能倍率加成(50, 0.17)
|
||||
下装 += 属性.技能倍率加成(85, 0.17)
|
||||
下装 += 属性.技能倍率加成(100, 0.10) # 下装
|
||||
if (选择[i * 3 + 1] + 选择[i * 3 + 2]) == 2:
|
||||
戒指 += 属性.技能倍率加成(50, 0.17)
|
||||
戒指 += 属性.技能倍率加成(85, 0.17)
|
||||
戒指 += 属性.技能倍率加成(100, 0.10) # 戒指
|
||||
if (选择[i * 3 + 2] + 选择[i * 3 + 0]) == 2:
|
||||
辅助装备 += 属性.技能倍率加成(50, 0.17)
|
||||
辅助装备 += 属性.技能倍率加成(85, 0.17)
|
||||
辅助装备 += 属性.技能倍率加成(100, 0.10) # 辅助装备
|
||||
|
||||
i = 3 # 守门人属性2
|
||||
if (选择[i * 3 + 0] + 选择[i * 3 + 1]) == 2:
|
||||
下装 += 属性.进图属强加成(属强) # 下装
|
||||
if (选择[i * 3 + 1] + 选择[i * 3 + 2]) == 2:
|
||||
戒指 += 属性.进图属强加成(属强) # 戒指
|
||||
if (选择[i * 3 + 2] + 选择[i * 3 + 0]) == 2:
|
||||
辅助装备 += 属性.进图属强加成(属强) # 辅助装备
|
||||
|
||||
i = 4 # 洛多斯属性2
|
||||
if (选择[i * 3 + 0] + 选择[i * 3 + 1]) == 2:
|
||||
下装 += 属性.伤害增加加成(0.04) # 下装
|
||||
if (选择[i * 3 + 1] + 选择[i * 3 + 2]) == 2:
|
||||
戒指 += 属性.暴击伤害加成(0.04) # 戒指
|
||||
if (选择[i * 3 + 2] + 选择[i * 3 + 0]) == 2:
|
||||
辅助装备 += 属性.百分比力智加成(0.04) # 辅助装备
|
||||
属性.装备描述 = 0
|
||||
|
||||
if x == 1:
|
||||
return {2: 下装, 7: 戒指, 9: 辅助装备}
|
||||
|
||||
|
||||
希洛克 = 希洛克属性()
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,220 @@
|
||||
# 辟邪玉属性部分
|
||||
|
||||
|
||||
class 辟邪玉():
|
||||
名称 = ''
|
||||
最小值 = -5
|
||||
最大值 = 5
|
||||
间隔 = 0.1
|
||||
当前值 = 0
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉0(辟邪玉):
|
||||
名称 = '无'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
|
||||
|
||||
class 辟邪玉1(辟邪玉):
|
||||
名称 = '附加伤害增加增幅'
|
||||
简称 = '白字'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.附加伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉2(辟邪玉):
|
||||
名称 = '属性附加伤害增加增幅'
|
||||
简称 = '属白'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.属性附加伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉3(辟邪玉):
|
||||
名称 = '技能伤害增加增幅'
|
||||
简称 = '技攻'
|
||||
最小值 = -3
|
||||
最大值 = 3
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉4(辟邪玉):
|
||||
名称 = '暴击伤害增加增幅'
|
||||
简称 = '暴伤'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.暴击伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉5(辟邪玉):
|
||||
名称 = '伤害增加增幅'
|
||||
简称 = '黄字'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉6(辟邪玉):
|
||||
名称 = '最终伤害增加增幅'
|
||||
简称 = '终伤'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.最终伤害增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉7(辟邪玉):
|
||||
名称 = '力量智力增加增幅'
|
||||
简称 = '力智'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.力量智力增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉8(辟邪玉):
|
||||
名称 = '物理魔法攻击力增加增幅'
|
||||
简称 = '三攻'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.物理魔法攻击力增加增幅 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉9(辟邪玉):
|
||||
名称 = '装备属性强化增加'
|
||||
简称 = '属强'
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.所有属性强化增加 += round(self.当前值 / 100, 4)
|
||||
|
||||
|
||||
class 辟邪玉10(辟邪玉):
|
||||
名称 = '10~15技能Lv增加'
|
||||
简称 = 'Lv10~15'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 10, 15, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉11(辟邪玉):
|
||||
名称 = '20~25技能Lv增加'
|
||||
简称 = 'Lv20~25'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 20, 25, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉12(辟邪玉):
|
||||
名称 = '30~35技能Lv增加'
|
||||
简称 = 'Lv30~35'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 30, 35, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉13(辟邪玉):
|
||||
名称 = '40~45技能Lv增加'
|
||||
简称 = 'Lv40~45'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 40, 45, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉14(辟邪玉):
|
||||
名称 = '55~60技能Lv增加'
|
||||
简称 = 'Lv55~60'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 55, 60, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉15(辟邪玉):
|
||||
名称 = '65~70技能Lv增加'
|
||||
简称 = 'Lv65~70'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 65, 70, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉16(辟邪玉):
|
||||
名称 = '75~80技能Lv增加'
|
||||
简称 = 'Lv75~80'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 75, 80, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉17(辟邪玉):
|
||||
名称 = '1次觉醒技能Lv增加'
|
||||
简称 = 'Lv50'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 50, 50, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉18(辟邪玉):
|
||||
名称 = '2次觉醒技能Lv增加'
|
||||
简称 = 'Lv85'
|
||||
最小值 = 1
|
||||
最大值 = 1
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
属性.技能等级加成('所有', 85, 85, self.当前值)
|
||||
pass
|
||||
|
||||
|
||||
class 辟邪玉19(辟邪玉):
|
||||
名称 = '非伤害词条'
|
||||
简称 = '其它'
|
||||
最小值 = 0
|
||||
最大值 = 0
|
||||
间隔 = 1
|
||||
|
||||
def 穿戴属性(self, 属性):
|
||||
pass
|
||||
|
||||
|
||||
辟邪玉列表 = ()
|
||||
for i in range(20):
|
||||
exec('辟邪玉列表 += (辟邪玉' + str(i) + '(),)')
|
||||
|
||||
辟邪玉序号 = dict()
|
||||
for i in range(len(辟邪玉列表)):
|
||||
辟邪玉序号[辟邪玉列表[i].名称] = i
|
||||
@@ -0,0 +1,404 @@
|
||||
from decimal import Decimal
|
||||
|
||||
防具基础 = {
|
||||
"100-传说-板甲-上衣": (43, 43, 47, 0),
|
||||
"100-传说-板甲-头肩": (35, 35, 38, 0),
|
||||
"100-传说-板甲-下装": (43, 43, 47, 0),
|
||||
"100-传说-板甲-鞋": (26, 26, 28, 0),
|
||||
"100-传说-板甲-腰带": (26, 26, 28, 0),
|
||||
"100-传说-布甲-上衣": (0, 52, 0, 52),
|
||||
"100-传说-布甲-头肩": (0, 41, 0, 41),
|
||||
"100-传说-布甲-下装": (0, 52, 0, 52),
|
||||
"100-传说-布甲-鞋": (0, 31, 0, 31),
|
||||
"100-传说-布甲-腰带": (0, 31, 0, 31),
|
||||
"100-传说-皮甲-上衣": (43, 43, 0, 47),
|
||||
"100-传说-皮甲-头肩": (35, 35, 0, 38),
|
||||
"100-传说-皮甲-下装": (43, 43, 0, 47),
|
||||
"100-传说-皮甲-鞋": (26, 26, 0, 28),
|
||||
"100-传说-皮甲-腰带": (26, 26, 0, 28),
|
||||
"100-传说-轻甲-上衣": (52, 34, 0, 0),
|
||||
"100-传说-轻甲-头肩": (41, 28, 0, 0),
|
||||
"100-传说-轻甲-下装": (52, 34, 0, 0),
|
||||
"100-传说-轻甲-鞋": (31, 21, 0, 0),
|
||||
"100-传说-轻甲-腰带": (31, 21, 0, 0),
|
||||
"100-传说-重甲-上衣": (47, 34, 43, 0),
|
||||
"100-传说-重甲-头肩": (38, 28, 35, 0),
|
||||
"100-传说-重甲-下装": (47, 34, 43, 0),
|
||||
"100-传说-重甲-鞋": (28, 21, 26, 0),
|
||||
"100-传说-重甲-腰带": (28, 21, 26, 0),
|
||||
"100-神话-板甲-上衣": (45, 45, 50, 0),
|
||||
"100-神话-布甲-上衣": (0, 54, 0, 54),
|
||||
"100-神话-皮甲-上衣": (45, 45, 0, 50),
|
||||
"100-神话-轻甲-上衣": (54, 36, 0, 0),
|
||||
"100-神话-重甲-上衣": (50, 36, 45, 0),
|
||||
"100-神器-板甲-上衣": (42, 42, 46, 0),
|
||||
"100-神器-板甲-头肩": (34, 34, 37, 0),
|
||||
"100-神器-板甲-下装": (42, 42, 46, 0),
|
||||
"100-神器-板甲-鞋": (25, 25, 28, 0),
|
||||
"100-神器-板甲-腰带": (25, 25, 28, 0),
|
||||
"100-神器-布甲-上衣": (0, 50, 0, 50),
|
||||
"100-神器-布甲-头肩": (0, 40, 0, 40),
|
||||
"100-神器-布甲-下装": (0, 50, 0, 50),
|
||||
"100-神器-布甲-鞋": (0, 30, 0, 30),
|
||||
"100-神器-布甲-腰带": (0, 30, 0, 30),
|
||||
"100-神器-皮甲-上衣": (42, 42, 0, 46),
|
||||
"100-神器-皮甲-上衣": (0, 0, 0, 0),
|
||||
"100-神器-皮甲-头肩": (34, 34, 0, 37),
|
||||
"100-神器-皮甲-头肩": (0, 0, 0, 0),
|
||||
"100-神器-皮甲-下装": (42, 42, 0, 46),
|
||||
"100-神器-皮甲-下装": (0, 0, 0, 0),
|
||||
"100-神器-皮甲-鞋": (25, 25, 0, 28),
|
||||
"100-神器-皮甲-鞋": (0, 0, 0, 0),
|
||||
"100-神器-皮甲-腰带": (25, 25, 0, 28),
|
||||
"100-神器-皮甲-腰带": (0, 0, 0, 0),
|
||||
"100-神器-轻甲-上衣": (50, 34, 0, 0),
|
||||
"100-神器-轻甲-头肩": (40, 27, 0, 0),
|
||||
"100-神器-轻甲-下装": (50, 34, 0, 0),
|
||||
"100-神器-轻甲-鞋": (30, 20, 0, 0),
|
||||
"100-神器-轻甲-腰带": (30, 20, 0, 0),
|
||||
"100-神器-重甲-上衣": (46, 34, 42, 0),
|
||||
"100-神器-重甲-头肩": (37, 27, 34, 0),
|
||||
"100-神器-重甲-下装": (46, 34, 42, 0),
|
||||
"100-神器-重甲-鞋": (28, 20, 25, 0),
|
||||
"100-神器-重甲-腰带": (28, 20, 25, 0),
|
||||
"100-史诗-板甲-上衣": (44, 44, 49, 0),
|
||||
"100-史诗-板甲-头肩": (35, 35, 39, 0),
|
||||
"100-史诗-板甲-下装": (44, 44, 49, 0),
|
||||
"100-史诗-板甲-鞋": (27, 27, 29, 0),
|
||||
"100-史诗-板甲-腰带": (27, 27, 29, 0),
|
||||
"100-史诗-布甲-上衣": (0, 53, 0, 53),
|
||||
"100-史诗-布甲-头肩": (0, 42, 0, 42),
|
||||
"100-史诗-布甲-下装": (0, 53, 0, 53),
|
||||
"100-史诗-布甲-鞋": (0, 32, 0, 32),
|
||||
"100-史诗-布甲-腰带": (0, 32, 0, 32),
|
||||
"100-史诗-皮甲-上衣": (44, 44, 0, 49),
|
||||
"100-史诗-皮甲-头肩": (35, 35, 0, 39),
|
||||
"100-史诗-皮甲-下装": (44, 44, 0, 49),
|
||||
"100-史诗-皮甲-鞋": (27, 27, 0, 29),
|
||||
"100-史诗-皮甲-腰带": (27, 27, 0, 29),
|
||||
"100-史诗-轻甲-上衣": (53, 35, 0, 0),
|
||||
"100-史诗-轻甲-头肩": (42, 28, 0, 0),
|
||||
"100-史诗-轻甲-下装": (53, 35, 0, 0),
|
||||
"100-史诗-轻甲-鞋": (32, 21, 0, 0),
|
||||
"100-史诗-轻甲-腰带": (32, 21, 0, 0),
|
||||
"100-史诗-重甲-上衣": (49, 35, 44, 0),
|
||||
"100-史诗-重甲-头肩": (39, 28, 35, 0),
|
||||
"100-史诗-重甲-下装": (49, 35, 44, 0),
|
||||
"100-史诗-重甲-鞋": (29, 21, 27, 0),
|
||||
"100-史诗-重甲-腰带": (29, 21, 27, 0),
|
||||
"95-传说-板甲-上衣": (41, 41, 45, 0),
|
||||
"95-传说-板甲-头肩": (33, 33, 36, 0),
|
||||
"95-传说-板甲-下装": (41, 41, 45, 0),
|
||||
"95-传说-板甲-鞋": (25, 25, 27, 0),
|
||||
"95-传说-板甲-腰带": (25, 25, 27, 0),
|
||||
"95-传说-布甲-上衣": (0, 49, 0, 49),
|
||||
"95-传说-布甲-头肩": (0, 39, 0, 39),
|
||||
"95-传说-布甲-下装": (0, 49, 0, 49),
|
||||
"95-传说-布甲-鞋": (0, 30, 0, 30),
|
||||
"95-传说-布甲-腰带": (0, 30, 0, 30),
|
||||
"95-传说-皮甲-上衣": (41, 41, 0, 45),
|
||||
"95-传说-皮甲-头肩": (33, 33, 0, 36),
|
||||
"95-传说-皮甲-下装": (41, 41, 0, 45),
|
||||
"95-传说-皮甲-鞋": (25, 25, 0, 27),
|
||||
"95-传说-皮甲-腰带": (25, 25, 0, 27),
|
||||
"95-传说-轻甲-上衣": (49, 33, 0, 0),
|
||||
"95-传说-轻甲-头肩": (39, 26, 0, 0),
|
||||
"95-传说-轻甲-下装": (49, 33, 0, 0),
|
||||
"95-传说-轻甲-鞋": (30, 20, 0, 0),
|
||||
"95-传说-轻甲-腰带": (30, 20, 0, 0),
|
||||
"95-传说-重甲-上衣": (45, 33, 41, 0),
|
||||
"95-传说-重甲-头肩": (36, 26, 33, 0),
|
||||
"95-传说-重甲-下装": (45, 33, 41, 0),
|
||||
"95-传说-重甲-鞋": (27, 20, 25, 0),
|
||||
"95-传说-重甲-腰带": (27, 20, 25, 0),
|
||||
"95-史诗-板甲-上衣": (42, 42, 47, 0),
|
||||
"95-史诗-板甲-头肩": (34, 34, 37, 0),
|
||||
"95-史诗-板甲-下装": (42, 42, 47, 0),
|
||||
"95-史诗-板甲-鞋": (25, 25, 28, 0),
|
||||
"95-史诗-板甲-腰带": (25, 25, 28, 0),
|
||||
"95-史诗-布甲-上衣": (0, 51, 0, 51),
|
||||
"95-史诗-布甲-头肩": (0, 41, 0, 41),
|
||||
"95-史诗-布甲-下装": (0, 51, 0, 51),
|
||||
"95-史诗-布甲-鞋": (0, 30, 0, 30),
|
||||
"95-史诗-布甲-腰带": (0, 30, 0, 30),
|
||||
"95-史诗-皮甲-上衣": (42, 42, 0, 47),
|
||||
"95-史诗-皮甲-头肩": (34, 34, 0, 37),
|
||||
"95-史诗-皮甲-下装": (42, 42, 0, 47),
|
||||
"95-史诗-皮甲-鞋": (25, 25, 0, 28),
|
||||
"95-史诗-皮甲-腰带": (25, 25, 0, 28),
|
||||
"95-史诗-轻甲-上衣": (51, 34, 0, 0),
|
||||
"95-史诗-轻甲-头肩": (41, 27, 0, 0),
|
||||
"95-史诗-轻甲-下装": (51, 34, 0, 0),
|
||||
"95-史诗-轻甲-鞋": (30, 20, 0, 0),
|
||||
"95-史诗-轻甲-腰带": (30, 20, 0, 0),
|
||||
"95-史诗-重甲-上衣": (47, 34, 42, 0),
|
||||
"95-史诗-重甲-头肩": (37, 27, 34, 0),
|
||||
"95-史诗-重甲-下装": (47, 34, 42, 0),
|
||||
"95-史诗-重甲-鞋": (28, 20, 25, 0),
|
||||
"95-史诗-重甲-腰带": (28, 20, 25, 0),
|
||||
"90-传说-板甲-上衣": (39, 39, 43, 0),
|
||||
"90-传说-板甲-头肩": (32, 32, 35, 0),
|
||||
"90-传说-板甲-下装": (39, 39, 43, 0),
|
||||
"90-传说-板甲-鞋": (24, 24, 26, 0),
|
||||
"90-传说-板甲-腰带": (24, 24, 26, 0),
|
||||
"90-传说-布甲-上衣": (0, 47, 0, 47),
|
||||
"90-传说-布甲-头肩": (0, 38, 0, 38),
|
||||
"90-传说-布甲-下装": (0, 47, 0, 47),
|
||||
"90-传说-布甲-鞋": (0, 28, 0, 28),
|
||||
"90-传说-布甲-腰带": (0, 28, 0, 28),
|
||||
"90-传说-皮甲-上衣": (39, 39, 0, 43),
|
||||
"90-传说-皮甲-头肩": (32, 32, 0, 35),
|
||||
"90-传说-皮甲-下装": (39, 39, 0, 43),
|
||||
"90-传说-皮甲-鞋": (24, 24, 0, 26),
|
||||
"90-传说-皮甲-腰带": (24, 24, 0, 26),
|
||||
"90-传说-轻甲-上衣": (47, 31, 0, 0),
|
||||
"90-传说-轻甲-头肩": (38, 25, 0, 0),
|
||||
"90-传说-轻甲-下装": (47, 31, 0, 0),
|
||||
"90-传说-轻甲-鞋": (28, 19, 0, 0),
|
||||
"90-传说-轻甲-腰带": (28, 19, 0, 0),
|
||||
"90-传说-重甲-上衣": (43, 31, 39, 0),
|
||||
"90-传说-重甲-头肩": (35, 25, 32, 0),
|
||||
"90-传说-重甲-下装": (43, 31, 39, 0),
|
||||
"90-传说-重甲-鞋": (26, 19, 24, 0),
|
||||
"90-传说-重甲-腰带": (26, 19, 24, 0),
|
||||
"90-史诗-板甲-上衣": (41, 41, 44, 0),
|
||||
"90-史诗-板甲-头肩": (32, 32, 36, 0),
|
||||
"90-史诗-板甲-下装": (41, 41, 44, 0),
|
||||
"90-史诗-板甲-鞋": (24, 24, 27, 0),
|
||||
"90-史诗-板甲-腰带": (24, 24, 27, 0),
|
||||
"90-史诗-布甲-上衣": (0, 48, 0, 48),
|
||||
"90-史诗-布甲-头肩": (0, 39, 0, 39),
|
||||
"90-史诗-布甲-下装": (0, 48, 0, 48),
|
||||
"90-史诗-布甲-鞋": (0, 29, 0, 29),
|
||||
"90-史诗-布甲-腰带": (0, 29, 0, 29),
|
||||
"90-史诗-皮甲-上衣": (41, 41, 0, 44),
|
||||
"90-史诗-皮甲-头肩": (32, 32, 0, 36),
|
||||
"90-史诗-皮甲-下装": (41, 41, 0, 44),
|
||||
"90-史诗-皮甲-鞋": (24, 24, 0, 27),
|
||||
"90-史诗-皮甲-腰带": (24, 24, 0, 27),
|
||||
"90-史诗-轻甲-上衣": (48, 32, 0, 0),
|
||||
"90-史诗-轻甲-头肩": (39, 26, 0, 0),
|
||||
"90-史诗-轻甲-下装": (48, 32, 0, 0),
|
||||
"90-史诗-轻甲-鞋": (29, 19, 0, 0),
|
||||
"90-史诗-轻甲-腰带": (29, 19, 0, 0),
|
||||
"90-史诗-重甲-上衣": (44, 32, 41, 0),
|
||||
"90-史诗-重甲-头肩": (36, 26, 32, 0),
|
||||
"90-史诗-重甲-下装": (44, 32, 41, 0),
|
||||
"90-史诗-重甲-鞋": (27, 19, 24, 0),
|
||||
"90-史诗-重甲-腰带": (27, 19, 24, 0),
|
||||
"85-传说-板甲-上衣": (38, 38, 41, 0),
|
||||
"85-传说-板甲-头肩": (30, 30, 33, 0),
|
||||
"85-传说-板甲-下装": (38, 38, 41, 0),
|
||||
"85-传说-板甲-鞋": (22, 22, 25, 0),
|
||||
"85-传说-板甲-腰带": (22, 22, 25, 0),
|
||||
"85-传说-布甲-上衣": (0, 45, 0, 45),
|
||||
"85-传说-布甲-头肩": (0, 36, 0, 36),
|
||||
"85-传说-布甲-下装": (0, 45, 0, 45),
|
||||
"85-传说-布甲-鞋": (0, 27, 0, 27),
|
||||
"85-传说-布甲-腰带": (0, 27, 0, 27),
|
||||
"85-传说-皮甲-上衣": (38, 38, 0, 41),
|
||||
"85-传说-皮甲-头肩": (30, 30, 0, 33),
|
||||
"85-传说-皮甲-下装": (38, 38, 0, 41),
|
||||
"85-传说-皮甲-鞋": (22, 22, 0, 25),
|
||||
"85-传说-皮甲-腰带": (22, 22, 0, 25),
|
||||
"85-传说-轻甲-上衣": (45, 30, 0, 0),
|
||||
"85-传说-轻甲-头肩": (36, 24, 0, 0),
|
||||
"85-传说-轻甲-下装": (45, 30, 0, 0),
|
||||
"85-传说-轻甲-鞋": (27, 18, 0, 0),
|
||||
"85-传说-轻甲-腰带": (27, 18, 0, 0),
|
||||
"85-传说-重甲-上衣": (41, 30, 38, 0),
|
||||
"85-传说-重甲-头肩": (33, 24, 30, 0),
|
||||
"85-传说-重甲-下装": (41, 30, 38, 0),
|
||||
"85-传说-重甲-鞋": (25, 18, 22, 0),
|
||||
"85-传说-重甲-腰带": (25, 18, 22, 0),
|
||||
"85-史诗-板甲-上衣": (39, 39, 42, 0),
|
||||
"85-史诗-板甲-头肩": (31, 31, 34, 0),
|
||||
"85-史诗-板甲-下装": (39, 39, 42, 0),
|
||||
"85-史诗-板甲-鞋": (23, 23, 25, 0),
|
||||
"85-史诗-板甲-腰带": (23, 23, 25, 0),
|
||||
"85-史诗-布甲-上衣": (0, 46, 0, 46),
|
||||
"85-史诗-布甲-头肩": (0, 37, 0, 37),
|
||||
"85-史诗-布甲-下装": (0, 46, 0, 46),
|
||||
"85-史诗-布甲-鞋": (0, 28, 0, 28),
|
||||
"85-史诗-布甲-腰带": (0, 28, 0, 28),
|
||||
"85-史诗-皮甲-上衣": (39, 39, 0, 42),
|
||||
"85-史诗-皮甲-头肩": (31, 31, 0, 34),
|
||||
"85-史诗-皮甲-下装": (39, 39, 0, 42),
|
||||
"85-史诗-皮甲-鞋": (23, 23, 0, 25),
|
||||
"85-史诗-皮甲-腰带": (23, 23, 0, 25),
|
||||
"85-史诗-轻甲-上衣": (46, 31, 0, 0),
|
||||
"85-史诗-轻甲-头肩": (37, 25, 0, 0),
|
||||
"85-史诗-轻甲-下装": (46, 31, 0, 0),
|
||||
"85-史诗-轻甲-鞋": (28, 18, 0, 0),
|
||||
"85-史诗-轻甲-腰带": (28, 18, 0, 0),
|
||||
"85-史诗-重甲-上衣": (42, 31, 39, 0),
|
||||
"85-史诗-重甲-头肩": (34, 25, 31, 0),
|
||||
"85-史诗-重甲-下装": (42, 31, 39, 0),
|
||||
"85-史诗-重甲-鞋": (25, 18, 23, 0),
|
||||
"85-史诗-重甲-腰带": (25, 18, 23, 0),
|
||||
}
|
||||
|
||||
防具额外 = {
|
||||
"魔法师[???]的长袍": (91, 91, 0, 0),
|
||||
"死亡阴影夹克": (91, 91, 0, 0),
|
||||
"燃烧烈焰之勇气": (91, 91, 0, 0),
|
||||
"撒旦:沸腾之怒": (91, 91, 0, 0),
|
||||
"奔流不息之岁月": (91, 91, 0, 0),
|
||||
"优雅旋律华尔兹": (91, 91, 0, 0),
|
||||
"首席执行官裁决夹克": (91, 91, 0, 0),
|
||||
"炙炎:火龙果": (91, 91, 0, 0),
|
||||
"妖精之姿": (91, 91, 0, 0),
|
||||
"人性的抉择": (91, 91, 0, 0),
|
||||
"大祭司的星祈礼袍": (91, 91, 0, 0),
|
||||
"冲锋陷阵胸甲": (91, 91, 0, 0),
|
||||
"气吞山河战甲": (91, 91, 0, 0),
|
||||
"千链锁灵战甲": (91, 91, 0, 0),
|
||||
"宽恕坚韧之地": (91, 91, 0, 0),
|
||||
"堕落深渊黑魔法衬衫": (91, 91, 0, 0),
|
||||
"引路者的黄昏披风": (91, 91, 0, 0),
|
||||
"地狱边缘": (91, 91, 0, 0),
|
||||
"泣血之恨": (91, 91, 0, 0),
|
||||
"大魔法师[???]的长袍": (91, 91, 0, 0),
|
||||
"掌管生死之影夹克": (91, 91, 0, 0),
|
||||
"爆裂大地之勇猛": (91, 91, 0, 0),
|
||||
"撒旦:愤怒之王": (91, 91, 0, 0),
|
||||
"英明循环之生命": (91, 91, 0, 0),
|
||||
"浪漫旋律华尔兹": (91, 91, 0, 0),
|
||||
"皇家裁决者审判外套": (91, 91, 0, 0),
|
||||
"炙炎:霸王树": (91, 91, 0, 0),
|
||||
"天堂之翼": (91, 91, 0, 0),
|
||||
"神赐的抉择": (91, 91, 0, 0),
|
||||
"大祭司的神启礼服": (91, 91, 0, 0),
|
||||
"战无不胜上衣": (91, 91, 0, 0),
|
||||
"摧枯拉朽胸甲": (91, 91, 0, 0),
|
||||
"千链万化战甲": (91, 91, 0, 0),
|
||||
"生命脉动之地": (91, 91, 0, 0),
|
||||
"深渊囚禁者长袍": (91, 91, 0, 0),
|
||||
"圣者的黄昏披风": (91, 91, 0, 0),
|
||||
"逆转结局": (91, 91, 0, 0),
|
||||
"灭世之怒": (91, 91, 0, 0),
|
||||
"魔法师[???]的护腿": (91, 91, 0, 0),
|
||||
"死亡阴影短裤": (91, 91, 0, 0),
|
||||
"肆虐狂风之意志": (91, 91, 0, 0),
|
||||
"亚蒙:谎言之力": (91, 91, 0, 0),
|
||||
"奔流不息之伽蓝": (91, 91, 0, 0),
|
||||
"魅惑律动伦巴": (91, 91, 0, 0),
|
||||
"首席执行官裁决短裤": (91, 91, 0, 0),
|
||||
"炙炎:荔枝": (91, 91, 0, 0),
|
||||
"邪恶之角": (91, 91, 0, 0),
|
||||
"命运的抉择": (91, 91, 0, 0),
|
||||
"大祭司的星祈长裙": (91, 91, 0, 0),
|
||||
"破釜沉舟护腿": (91, 91, 0, 0),
|
||||
"雷霆万钧护腿": (91, 91, 0, 0),
|
||||
"千链锁灵护腿": (91, 91, 0, 0),
|
||||
"蚕食新绿之息": (91, 91, 0, 0),
|
||||
"驱散黑暗短裤": (91, 91, 0, 0),
|
||||
"时空漩涡护腿": (91, 91, 0, 0),
|
||||
"灵魂的呐喊": (91, 91, 0, 0),
|
||||
"疯狂之如影随形": (91, 91, 0, 0),
|
||||
"魔法师[???]的披风": (91, 91, 0, 0),
|
||||
"死亡阴影护肩": (91, 91, 0, 0),
|
||||
"艰难求生之斗志": (91, 91, 0, 0),
|
||||
"贝利亚尔:毁灭之种": (91, 91, 0, 0),
|
||||
"奔流不息之山川": (91, 91, 0, 0),
|
||||
"性感洒脱探戈": (91, 91, 0, 0),
|
||||
"首席执行官裁决肩甲": (91, 91, 0, 0),
|
||||
"炙炎:榴莲": (91, 91, 0, 0),
|
||||
"魔龙之心": (91, 91, 0, 0),
|
||||
"矛盾的抉择": (91, 91, 0, 0),
|
||||
"大祭司的星祈披肩": (91, 91, 0, 0),
|
||||
"枪林弹雨护肩": (91, 91, 0, 0),
|
||||
"排山倒海护肩": (91, 91, 0, 0),
|
||||
"千链锁灵肩甲": (91, 91, 0, 0),
|
||||
"猛烈燃烧之炎": (91, 91, 0, 0),
|
||||
"魔法师[???]的长靴": (91, 91, 0, 0),
|
||||
"死亡阴影长靴": (91, 91, 0, 0),
|
||||
"寂静寒夜之忍耐": (91, 91, 0, 0),
|
||||
"巴尔:堕落之魂": (91, 91, 0, 0),
|
||||
"奔流不息之银河": (91, 91, 0, 0),
|
||||
"激烈欢动踢踏": (91, 91, 0, 0),
|
||||
"首席执行官裁决长靴": (91, 91, 0, 0),
|
||||
"炙炎:木瓜": (91, 91, 0, 0),
|
||||
"自然之核": (91, 91, 0, 0),
|
||||
"守护的抉择": (91, 91, 0, 0),
|
||||
"大祭司的星祈凉鞋": (91, 91, 0, 0),
|
||||
"赤地千里战靴": (91, 91, 0, 0),
|
||||
"遮天蔽日长靴": (91, 91, 0, 0),
|
||||
"千链锁灵战靴": (91, 91, 0, 0),
|
||||
"交织烈日之风": (91, 91, 0, 0),
|
||||
"堕入地狱之脚": (91, 91, 0, 0),
|
||||
"次元漫步者长靴": (91, 91, 0, 0),
|
||||
"悲喜交加": (91, 91, 0, 0),
|
||||
"崩溃世界的忧伤": (91, 91, 0, 0),
|
||||
"魔法师[???]的腰带": (91, 91, 0, 0),
|
||||
"死亡阴影腰带": (91, 91, 0, 0),
|
||||
"守护战士之苦难": (91, 91, 0, 0),
|
||||
"亚巴顿:绝望地狱": (91, 91, 0, 0),
|
||||
"奔流不息之狂风": (91, 91, 0, 0),
|
||||
"热情舞动桑巴": (91, 91, 0, 0),
|
||||
"首席执行官裁决腰带": (91, 91, 0, 0),
|
||||
"炙炎:山竹": (91, 91, 0, 0),
|
||||
"碎钢之牙": (91, 91, 0, 0),
|
||||
"正义的抉择": (91, 91, 0, 0),
|
||||
"大祭司的星祈腰带": (91, 91, 0, 0),
|
||||
"浴血奋战腰带": (91, 91, 0, 0),
|
||||
"风起云涌腰带": (91, 91, 0, 0),
|
||||
"千链锁灵腰带": (91, 91, 0, 0),
|
||||
"宁静苍翠之水": (91, 91, 0, 0),
|
||||
"完美掌控": (91, 91, 0, 0),
|
||||
"无念之仪服": (91, 91, 0, 0),
|
||||
"无欲之花": (91, 91, 0, 0),
|
||||
"无形之气韵": (91, 91, 0, 0),
|
||||
"无言之罪恶": (91, 91, 0, 0),
|
||||
"无我之轮回": (91, 91, 0, 0),
|
||||
"轮回·黑暗幽灵紫杉胸甲": (91, 91, 0, 0),
|
||||
"魔战无双短靴": (80, 80, 0, 0),
|
||||
"霸域英豪胸甲": (50, 50, 0, 0),
|
||||
"霸域英豪护腿": (50, 50, 0, 0),
|
||||
"霸域英豪腰带": (150, 150, 150, 150),
|
||||
"千蛛碎影之毒牙胸甲": (140, 140, 0, 0),
|
||||
"千蛛碎影之蛛丝肩甲": (100, 100, 0, 0),
|
||||
"千蛛碎影之蛛网护腿": (140, 140, 0, 0),
|
||||
"千蛛碎影之蛛刺腰带": (100, 100, 0, 0),
|
||||
"千蛛碎影之利齿战靴": (100, 100, 0, 0),
|
||||
"誓血之盟铠甲": (200, 200, 0, 0),
|
||||
"誓血之盟肩甲": (75, 75, 0, 0),
|
||||
"誓血之盟腿甲": (0, 0, 0, 0),
|
||||
"天御雷罚战甲": (0, 0, 0, 0),
|
||||
"天御虫噬护肩": (0, 0, 0, 0),
|
||||
"天御炎袭护腿": (0, 0, 0, 0),
|
||||
"天御雷罚战甲": (0, 0, 0, 0),
|
||||
"天御风行战靴": (0, 0, 0, 0),
|
||||
"最佳球手的暴走战衣": (85, 85, 0, 0),
|
||||
"最佳球手的反击护具": (300, 300, 0, 0),
|
||||
"最佳球手的冲锋腰带": (0, 0, 0, 0),
|
||||
"战术之王的御敌胸甲": (30, 30, 0, 0),
|
||||
"战术之王的御敌肩甲": (30, 30, 0, 0),
|
||||
"战术之王的御敌腿甲": (30, 30, 0, 0),
|
||||
"战术之王的御敌腰带": (30, 30, 0, 0),
|
||||
"战术之王的御敌长靴": (30, 30, 0, 0),
|
||||
"暗魅之影上衣": (45, 45, 0, 0),
|
||||
"冥殇之刃肩甲": (30, 30, 0, 0),
|
||||
"血舞之牙护腿": (45, 45, 0, 0),
|
||||
"亡灵之帐腰带": (30, 30, 0, 0),
|
||||
"黄泉之风战靴": (30, 30, 0, 0),
|
||||
"蚀日无辉肩甲": (0, 40, 0, 0),
|
||||
"暗殇绝影腰带": (0, 40, 0, 0),
|
||||
"闲云碎步短靴": (0, 40, 0, 0),
|
||||
"轮回·鲜红血纹皮甲胸铠": (91, 91, 0, 0),
|
||||
}
|
||||
|
||||
|
||||
def 设置防具基础(装备):
|
||||
装备.力量 = {}
|
||||
装备.智力 = {}
|
||||
装备.体力 = {}
|
||||
装备.精神 = {}
|
||||
a = 防具额外.get(装备.名称, (0, 0, 0, 0))
|
||||
for i in ['布甲', '皮甲', '轻甲', '重甲', '板甲']:
|
||||
b = 防具基础.get('{}-{}-{}-{}'.format(装备.等级, 装备.品质, i, 装备.部位),
|
||||
(0, 0, 0, 0))
|
||||
装备.力量.update({i: round((a[0] + b[0]) * Decimal(1.1))})
|
||||
装备.智力.update({i: round((a[1] + b[1]) * Decimal(1.1))})
|
||||
装备.体力.update({i: round((a[2] + b[2]) * Decimal(1.1))})
|
||||
装备.精神.update({i: round((a[3] + b[3]) * Decimal(1.1))})
|
||||
@@ -0,0 +1,389 @@
|
||||
#include "Preferred.h"
|
||||
|
||||
//返回最大值索引 输出系
|
||||
DLLEXPORT void cal_index(double data[9][6], int* index) {
|
||||
double max = 0;
|
||||
vector<int> list[8];
|
||||
for (int i = 0; i < 8; i++) {
|
||||
list[i] = range(data[i + 1]);
|
||||
}
|
||||
for (auto a1 = list[0].cbegin(); a1 != list[0].cend(); a1++)
|
||||
{
|
||||
for (auto a2 = list[1].cbegin(); a2 != list[1].cend(); a2++)
|
||||
{
|
||||
for (auto a3 = list[2].cbegin(); a3 != list[2].cend(); a3++)
|
||||
{
|
||||
for (auto a4 = list[3].cbegin(); a4 != list[3].cend(); a4++)
|
||||
{
|
||||
for (auto a5 = list[4].cbegin(); a5 != list[4].cend(); a5++)
|
||||
{
|
||||
for (auto a6 = list[5].cbegin(); a6 != list[5].cend(); a6++)
|
||||
{
|
||||
for (auto a7 = list[6].cbegin(); a7 != list[6].cend(); a7++)
|
||||
{
|
||||
for (auto a8 = list[7].cbegin(); a8 != list[7].cend(); a8++)
|
||||
{
|
||||
double k[6] = { data[0][0],data[0][1], data[0][2], data[0][3], data[0][4], data[0][5] };
|
||||
k[*a1] += data[1][*a1];
|
||||
k[*a2] += data[2][*a2];
|
||||
k[*a3] += data[3][*a3];
|
||||
k[*a4] += data[4][*a4];
|
||||
k[*a5] += data[5][*a5];
|
||||
k[*a6] += data[6][*a6];
|
||||
k[*a7] += data[7][*a7];
|
||||
k[*a8] += data[8][*a8];
|
||||
double sum = k[0] * k[1] * int(k[2]) * k[3] * k[4] * k[5];
|
||||
if (sum > max)
|
||||
{
|
||||
max = sum;
|
||||
index[0] = *a1;
|
||||
index[1] = *a2;
|
||||
index[2] = *a3;
|
||||
index[3] = *a4;
|
||||
index[4] = *a5;
|
||||
index[5] = *a6;
|
||||
index[6] = *a7;
|
||||
index[7] = *a8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//辅助系
|
||||
//0 奶妈 系数665
|
||||
int buff_attack_0[41] = { 0, 38, 40, 42, 43, 44, 46, 48, 49, 51, 52, 53, 55, 57, 58, 60, 61, 62, 64, 66, 68, 69, 70, 72, 74, 75, 77, 78, 79, 81, 83, 84, 86, 87, 88, 90, 92, 93, 95, 96, 98 };
|
||||
int buff_power_0[41] = {0, 148, 158, 169, 179, 189, 198, 208, 218, 228, 239, 249, 259, 269, 279, 290, 299, 309, 319, 329, 339, 349, 360, 370, 380, 390, 399, 409, 420, 430, 440, 450, 460, 470, 481, 491, 500, 510, 520, 530, 541};
|
||||
|
||||
//1 奶萝 系数665
|
||||
int buff_attack_1[41] = { 0, 34, 35, 37, 38, 39, 41, 42, 43, 45, 46, 47, 49, 50, 51, 53, 54, 55, 57, 58, 60, 61, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 76, 77, 78, 80, 81, 82, 84, 85, 87 };
|
||||
int buff_power_1[41] = { 0, 131, 140, 149, 158, 167, 175, 184, 193, 202, 211, 220, 229, 238, 247, 256, 264, 273, 282, 291, 300, 309, 318, 327, 336, 345, 353, 362, 371, 380, 389, 398, 407, 416, 425, 434, 442, 451, 460, 469, 478 };
|
||||
|
||||
//2 奶爸 系数620
|
||||
int buff_attack_2[41] = { 0, 43, 44, 46, 48, 49, 51, 53, 54, 56, 58, 59, 61, 63, 64, 66, 68, 69, 71, 73, 75, 76, 78, 80, 81, 83, 85, 86, 88, 90, 91, 93, 95, 96, 98, 100, 101, 103, 105, 106, 109 };
|
||||
int buff_power_2[41] = { 0, 164, 175, 186, 198, 209, 219, 230, 241, 253, 264, 275, 286, 298, 309, 320, 330, 341, 353, 364, 375, 386, 398, 409, 420, 431, 441, 453, 464, 475, 486, 498, 509, 520, 531, 543, 553, 564, 575, 586, 598 };
|
||||
|
||||
//系数750
|
||||
int awake_power_0[41] = { 0, 43, 57, 74, 91, 111, 131, 153, 176, 201, 228, 255, 284, 315, 346, 379, 414, 449, 487, 526, 567, 608, 651, 696, 741, 789, 838, 888, 939, 993, 1047, 1103, 1160, 1219, 1278, 1340, 1403, 1467, 1533, 1600, 1668 };
|
||||
|
||||
|
||||
class Char
|
||||
{
|
||||
public:
|
||||
Char() {};
|
||||
~Char() {};
|
||||
int type = 0;
|
||||
int preferred[6] = {};
|
||||
double burst_rate = 1.0;
|
||||
|
||||
int buff_apply;
|
||||
int buff_lv;
|
||||
int buff_power_add;
|
||||
int buff_attack_add;
|
||||
double buff_rate;
|
||||
double buff_power_per;
|
||||
double buff_attack_per;
|
||||
|
||||
int awake_apply;
|
||||
int awake_lv;
|
||||
int awake_power_add;
|
||||
double awake_rate;
|
||||
double awake_power_per;
|
||||
|
||||
int other_power;
|
||||
int other_attack;
|
||||
int std_power;
|
||||
int std_attack;
|
||||
double sys_rate;
|
||||
double sys_base;
|
||||
double cal();
|
||||
|
||||
private:
|
||||
long buff_power = 0;
|
||||
long buff_attack = 0;
|
||||
long awake_power = 0;
|
||||
long resident_power = 0;
|
||||
long resident_attack = 0;
|
||||
long burst_power = 0;
|
||||
|
||||
void cal_buff();
|
||||
void cal_awake();
|
||||
void cal_sum();
|
||||
double increase(long, long);
|
||||
};
|
||||
|
||||
void Char::cal_buff(){
|
||||
double rate = 0.0;
|
||||
switch (type)
|
||||
{
|
||||
case 0:
|
||||
rate = buff_apply / 665.0 + 1;
|
||||
buff_power = (long)((buff_power_0[min(40, buff_lv)] + buff_power_add) * buff_power_per * buff_rate * rate);
|
||||
buff_attack = (long)((buff_attack_0[min(40, buff_lv)] + buff_attack_add) * buff_attack_per * buff_rate * rate);
|
||||
break;
|
||||
case 1:
|
||||
rate = buff_apply / 665.0 + 1;
|
||||
buff_power = (long)((buff_power_1[min(40, buff_lv)] + buff_power_add) * buff_power_per * buff_rate * rate);
|
||||
buff_attack = (long)((buff_attack_1[min(40, buff_lv)] + buff_attack_add) * buff_attack_per * buff_rate * rate);
|
||||
break;
|
||||
case 2:
|
||||
rate = buff_apply / 620.0 + 1;
|
||||
buff_power = (long)((buff_power_2[min(40, buff_lv)] + buff_power_add) * buff_power_per * buff_rate * rate);
|
||||
buff_attack = (long)((buff_attack_2[min(40, buff_lv)] + buff_attack_add) * buff_attack_per * buff_rate * rate);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Char::cal_awake() {
|
||||
awake_power = (long)((awake_power_0[min(40, awake_lv)] + awake_power_add) * awake_power_per * awake_rate * (awake_apply / 750.0 + 1));
|
||||
}
|
||||
|
||||
void Char::cal_sum() {
|
||||
cal_buff();
|
||||
cal_awake();
|
||||
resident_power = buff_power + other_power;
|
||||
resident_attack = buff_attack + other_attack;
|
||||
burst_power = resident_power + awake_power;
|
||||
}
|
||||
|
||||
double Char::increase(long power, long attack) {
|
||||
double x, y = 0;
|
||||
x = ((std_power + (std_power - 950.0) * sys_rate + sys_base) / 250.0 + 1) * std_attack;
|
||||
y = ((power + std_power + (std_power - 950.0) * sys_rate + sys_base) / 250.0 + 1) * (std_attack + attack);
|
||||
return y / x;
|
||||
}
|
||||
|
||||
double Char::cal() {
|
||||
cal_sum();
|
||||
double resident = increase(resident_power, resident_attack);
|
||||
double burst = increase(burst_power, resident_attack);
|
||||
return resident * (1.0 - burst_rate) + burst * burst_rate;
|
||||
}
|
||||
|
||||
|
||||
//空属性
|
||||
void attr_0(Char &c) {
|
||||
}
|
||||
|
||||
//残香1
|
||||
void attr_1(Char &c) {
|
||||
c.buff_power_per *= 1.03;
|
||||
c.awake_power_add += 60;
|
||||
}
|
||||
void attr_2(Char &c) {
|
||||
c.buff_power_per *= 1.04;
|
||||
c.awake_power_per *= 1.03;
|
||||
}
|
||||
void attr_3(Char &c) {
|
||||
c.buff_attack_per *= 1.04;
|
||||
c.awake_power_add += 25;
|
||||
}
|
||||
void attr_4(Char &c) {
|
||||
c.buff_attack_per *= 1.03;
|
||||
c.awake_power_per *= 1.03;
|
||||
}
|
||||
void attr_5(Char &c) {
|
||||
c.buff_apply += 185;
|
||||
c.awake_apply += 185;
|
||||
}
|
||||
void attr_6(Char &c) {
|
||||
c.awake_lv += 1;
|
||||
c.buff_power_per *= 1.03;
|
||||
}
|
||||
//残香2
|
||||
void attr_7(Char &c) {
|
||||
c.buff_power_per *= 1.03;
|
||||
c.awake_power_add += 40;
|
||||
}
|
||||
void attr_8(Char &c) {
|
||||
c.buff_power_per *= 1.04;
|
||||
c.awake_power_per *= 1.02;
|
||||
}
|
||||
void attr_9(Char &c) {
|
||||
c.buff_attack_per *= 1.03;
|
||||
c.awake_power_add += 25;
|
||||
}
|
||||
void attr_10(Char &c) {
|
||||
c.buff_attack_per *= 1.02;
|
||||
c.awake_power_per *= 1.03;
|
||||
|
||||
}
|
||||
void attr_11(Char &c) {
|
||||
c.buff_apply += 145;
|
||||
c.awake_apply += 145;
|
||||
}
|
||||
void attr_12(Char &c) {
|
||||
c.buff_lv += 1;
|
||||
c.awake_power_add += 30;
|
||||
}
|
||||
//武器
|
||||
void attr_13(Char &c) {
|
||||
c.buff_power_per *= 1.03;
|
||||
c.awake_power_add += 60;
|
||||
}
|
||||
void attr_14(Char &c) {
|
||||
c.buff_power_per *= 1.05;
|
||||
c.awake_power_per *= 1.03;
|
||||
}
|
||||
void attr_15(Char &c) {
|
||||
c.buff_attack_per *= 1.04;
|
||||
c.awake_power_add += 40;
|
||||
}
|
||||
void attr_16(Char &c) {
|
||||
c.buff_attack_per *= 1.02;
|
||||
c.awake_power_per *= 1.05;
|
||||
}
|
||||
void attr_17(Char &c) {
|
||||
c.buff_apply += 180;
|
||||
c.awake_apply += 180;
|
||||
}
|
||||
void attr_18(Char &c) {
|
||||
c.buff_power_per *= 1.04;
|
||||
c.awake_lv += 1;
|
||||
}
|
||||
//戒指、辅助装备、下装
|
||||
void attr_19(Char &c) {
|
||||
c.buff_power_per *= 1.04;
|
||||
c.awake_power_add += 40;
|
||||
}
|
||||
void attr_20(Char &c) {
|
||||
c.buff_power_per *= 1.05;
|
||||
c.awake_power_per *= 1.02;
|
||||
}
|
||||
void attr_21(Char &c) {
|
||||
c.buff_attack_per *= 1.04;
|
||||
c.awake_power_add += 25;
|
||||
}
|
||||
void attr_22(Char &c) {
|
||||
c.buff_attack_per *= 1.02;
|
||||
c.awake_power_per *= 1.04;
|
||||
}
|
||||
void attr_23(Char &c) {
|
||||
c.buff_apply += 160;
|
||||
c.awake_apply += 160;
|
||||
}
|
||||
void attr_24(Char &c) {
|
||||
c.buff_lv += 1;
|
||||
c.awake_power_add += 40;
|
||||
}
|
||||
|
||||
|
||||
void (*attr_list[4][7])(Char&) = { {attr_0,attr_1,attr_2,attr_3,attr_4,attr_5,attr_6},
|
||||
{attr_0,attr_7,attr_8,attr_9,attr_10,attr_11,attr_12},
|
||||
{attr_0,attr_13,attr_14,attr_15,attr_16,attr_17,attr_18},
|
||||
{attr_0,attr_19,attr_20,attr_21,attr_22,attr_23,attr_24}};
|
||||
|
||||
DLLEXPORT void cal_index_buff(int* range, int* i_data, double* d_data) {
|
||||
Char c;
|
||||
c.type = i_data[0];
|
||||
c.buff_apply = i_data[1];
|
||||
c.buff_lv = i_data[2];
|
||||
c.buff_power_add = i_data[3];
|
||||
c.buff_attack_add = i_data[4];
|
||||
c.awake_apply = i_data[5];
|
||||
c.awake_lv = i_data[6];
|
||||
c.awake_power_add = i_data[7];
|
||||
c.other_power = i_data[8];
|
||||
c.other_attack = i_data[9];
|
||||
c.std_power = i_data[10];
|
||||
c.std_attack = i_data[11];
|
||||
c.burst_rate = d_data[0];
|
||||
c.buff_rate = d_data[1];
|
||||
c.buff_power_per = d_data[2];
|
||||
c.buff_attack_per = d_data[3];
|
||||
c.awake_rate = d_data[4];
|
||||
c.awake_power_per = d_data[5];
|
||||
c.sys_rate = d_data[6];
|
||||
c.sys_base = d_data[7];
|
||||
|
||||
vector<int> list[6];
|
||||
for (int i = 0; i < 6; i++) {
|
||||
list[i] = range_buff(range[i]);
|
||||
}
|
||||
double max = 0;
|
||||
if (list[3][0] * list[4][0] * list[5][0] != 0)
|
||||
{
|
||||
for (auto a1 = list[0].cbegin(); a1 != list[0].cend(); a1++)
|
||||
{
|
||||
for (auto a2 = list[1].cbegin(); a2 != list[1].cend(); a2++)
|
||||
{
|
||||
for (auto a3 = list[2].cbegin(); a3 != list[2].cend(); a3++)
|
||||
{
|
||||
for (auto a4 = list[3].cbegin(); a4 != list[3].cend(); a4++)
|
||||
{
|
||||
for (auto a5 = list[4].cbegin(); a5 != list[4].cend(); a5++)
|
||||
{
|
||||
for (auto a6 = list[5].cbegin(); a6 != list[5].cend(); a6++)
|
||||
{
|
||||
if ((*a4 >= *a5) & (*a5 >= *a6)) {
|
||||
Char p = c;
|
||||
attr_list[0][*a1](p);
|
||||
attr_list[1][*a2](p);
|
||||
attr_list[2][*a3](p);
|
||||
attr_list[3][*a4](p);
|
||||
attr_list[3][*a5](p);
|
||||
attr_list[3][*a6](p);
|
||||
double result = p.cal();
|
||||
if (result > max) {
|
||||
max = result;
|
||||
range[0] = *a1;
|
||||
range[1] = *a2;
|
||||
range[2] = *a3;
|
||||
range[3] = *a4;
|
||||
range[4] = *a5;
|
||||
range[5] = *a6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (auto a1 = list[0].cbegin(); a1 != list[0].cend(); a1++)
|
||||
{
|
||||
for (auto a2 = list[1].cbegin(); a2 != list[1].cend(); a2++)
|
||||
{
|
||||
for (auto a3 = list[2].cbegin(); a3 != list[2].cend(); a3++)
|
||||
{
|
||||
for (auto a4 = list[3].cbegin(); a4 != list[3].cend(); a4++)
|
||||
{
|
||||
for (auto a5 = list[4].cbegin(); a5 != list[4].cend(); a5++)
|
||||
{
|
||||
for (auto a6 = list[5].cbegin(); a6 != list[5].cend(); a6++)
|
||||
{
|
||||
Char p = c;
|
||||
attr_list[0][*a1](p);
|
||||
attr_list[1][*a2](p);
|
||||
attr_list[2][*a3](p);
|
||||
attr_list[3][*a4](p);
|
||||
attr_list[3][*a5](p);
|
||||
attr_list[3][*a6](p);
|
||||
double result = p.cal();
|
||||
if (result > max) {
|
||||
max = result;
|
||||
range[0] = *a1;
|
||||
range[1] = *a2;
|
||||
range[2] = *a3;
|
||||
range[3] = *a4;
|
||||
range[4] = *a5;
|
||||
range[5] = *a6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
#define DLLEXPORT extern "C" __declspec(dllexport)
|
||||
|
||||
//计算择优范围
|
||||
vector<int> range(double* array) {
|
||||
vector<int> range;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (array[i] != 0) {
|
||||
range.push_back(i);
|
||||
}
|
||||
}
|
||||
if (range.size() == 0) {
|
||||
range.push_back(0);
|
||||
}
|
||||
return range;
|
||||
}
|
||||
|
||||
//取最小值
|
||||
int min(int num1, int num2)
|
||||
{
|
||||
if (num1 < num2)
|
||||
return num1;
|
||||
else
|
||||
return num2;
|
||||
}
|
||||
|
||||
//计算择优范围 buff
|
||||
vector<int> range_buff(int sign) {
|
||||
vector<int> range;
|
||||
if (sign != 0) {
|
||||
for (int i = 1; i < 7; i++) {
|
||||
range.push_back(i);
|
||||
}
|
||||
}
|
||||
if (range.size() == 0) {
|
||||
range.push_back(0);
|
||||
}
|
||||
return range;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
from lanzou.api import LanZouCloud
|
||||
from lanzou.api.types import *
|
||||
from typing import List
|
||||
|
||||
|
||||
class LZextends(LanZouCloud):
|
||||
def __init__(self):
|
||||
self.lzy = LanZouCloud()
|
||||
self.lzy._host_url = 'https://pan.lanzouo.com'
|
||||
self.lzy.available_domains = [
|
||||
'lanzouo.com', # 2021-09-15 鲁ICP备15001327号-8
|
||||
'lanzouw.com', # 2021-09-02 鲁ICP备15001327号-7
|
||||
'lanzoui.com', # 2020-06-09 鲁ICP备15001327号-6
|
||||
'lanzoux.com', # 2020-06-09 鲁ICP备15001327号-5
|
||||
]
|
||||
@@ -0,0 +1,378 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# -------------------------------
|
||||
# File : calc_core
|
||||
# DateTime : 2020/6/10 0010 21:30
|
||||
# Author : Chen Ji
|
||||
# Email : fzls.zju@gmail.com
|
||||
# -------------------------------
|
||||
from copy import *
|
||||
from multiprocessing import Queue
|
||||
from typing import List
|
||||
from PublicReference.utils.minheap import MinHeap, expected_qsize
|
||||
|
||||
|
||||
class CalcData():
|
||||
def __init__(self):
|
||||
self.是输出职业 = True
|
||||
self.智慧产物限制 = 3
|
||||
|
||||
self.minheap_queue = None # type: Queue
|
||||
self.角色属性A = None
|
||||
|
||||
# 被分配的计算范围
|
||||
self.mode_index = 0 # 0-极速模式,1-套装模式,2-散件模式
|
||||
# 在并发搜索任务组中分配到的开始序号:极速模式和套装模式时,任务组定义为按照原搜索组合算法得到的有效穿戴组合等;散件模式时,定义为0-level层串行搜索形成的所有子树
|
||||
self.start_index = 0
|
||||
self.end_index = 0 # 在并发搜索任务组中分配到的结束序号,描述同上
|
||||
|
||||
# 原始数据
|
||||
self.装备选择状态: list[int] = [] # 各个装备的选择状况,第i个位置为0表示装备i未选择,否则表示已选择
|
||||
self.拥有百变怪 = False # 是否勾选了百变怪
|
||||
self.神话属性选项: list[int] = [
|
||||
] # 每个神话四个选项,第4*k~4*k+3下标表示第k个神话的词条选择(k从0开始计数)
|
||||
self.改造产物选项: list[int] = []
|
||||
|
||||
# 根据原始数据在计算线程计算出的一些数据
|
||||
self.有效武器列表 = []
|
||||
self.有效防具套装 = []
|
||||
self.有效首饰套装 = []
|
||||
self.有效特殊套装 = []
|
||||
self.有效上链左套装 = []
|
||||
self.有效镯下右套装 = []
|
||||
self.有效环鞋指套装 = []
|
||||
self.有效总套装列表 = [
|
||||
self.有效防具套装, self.有效首饰套装, self.有效特殊套装, self.有效上链左套装, self.有效镯下右套装,
|
||||
self.有效环鞋指套装
|
||||
]
|
||||
|
||||
self.有效部位列表 = []
|
||||
|
||||
# 最终结果
|
||||
self.minheap = None # type: MinHeap
|
||||
|
||||
def pre_calc_needed_data(self):
|
||||
from PublicReference.equipment.equ_list import 总套装列表, 部位列表, equ
|
||||
|
||||
self.有效武器列表.clear()
|
||||
for j in range(6):
|
||||
self.有效总套装列表[j].clear()
|
||||
|
||||
self.有效部位列表.clear()
|
||||
for i in range(12):
|
||||
self.有效部位列表.append([])
|
||||
|
||||
for i in range(len(self.装备选择状态)):
|
||||
if self.装备选择状态[i] == 1:
|
||||
temp = equ.get_equ_by_id(i)
|
||||
if temp.部位 == '武器':
|
||||
self.有效武器列表.append(temp.名称)
|
||||
for j in range(6):
|
||||
if (temp.所属套装 in 总套装列表[j]) and (temp.所属套装
|
||||
not in self.有效总套装列表[j]):
|
||||
self.有效总套装列表[j].append(temp.所属套装)
|
||||
self.有效部位列表[部位列表.index(temp.部位)].append(temp.名称)
|
||||
|
||||
count = 0
|
||||
count2 = 0
|
||||
for i in equ.get_equ_list():
|
||||
if i.品质 == '神话':
|
||||
if self.是输出职业 == True:
|
||||
i.属性1选择 = self.神话属性选项[count * 4 + 0]
|
||||
i.属性2选择 = self.神话属性选项[count * 4 + 1]
|
||||
i.属性3选择 = self.神话属性选项[count * 4 + 2]
|
||||
i.属性4选择 = self.神话属性选项[count * 4 + 3]
|
||||
else:
|
||||
i.属性1选择_BUFF = self.神话属性选项[count * 4 + 0]
|
||||
i.属性2选择_BUFF = self.神话属性选项[count * 4 + 1]
|
||||
i.属性3选择_BUFF = self.神话属性选项[count * 4 + 2]
|
||||
i.属性4选择_BUFF = self.神话属性选项[count * 4 + 3]
|
||||
count += 1
|
||||
if self.是输出职业 == True and i.所属套装 == '智慧产物':
|
||||
i.属性1选择 = self.改造产物选项[count2 * 4 + 0]
|
||||
i.属性2选择 = self.改造产物选项[count2 * 4 + 1]
|
||||
i.属性3选择 = self.改造产物选项[count2 * 4 + 2]
|
||||
i.属性4选择 = self.改造产物选项[count2 * 4 + 3]
|
||||
count2 += 1
|
||||
pass
|
||||
|
||||
|
||||
def calc_core(data: CalcData):
|
||||
"""
|
||||
|
||||
:type minheap_queue: Queue
|
||||
:type 角色属性A: 角色属性
|
||||
:type 有效穿戴组合: List[str]
|
||||
:type 有效穿戴套装: List[str]
|
||||
:type 百变怪列表: str
|
||||
"""
|
||||
# 计算伤害具体算法
|
||||
|
||||
# 根据装备选择情况,预计算一些数据
|
||||
data.pre_calc_needed_data()
|
||||
|
||||
# 寻找本任务对应的各个组合并调用计算函数
|
||||
if data.mode_index in [0, 1]:
|
||||
calc_speed_and_set_mode(data)
|
||||
else:
|
||||
calc_single_mode(data)
|
||||
|
||||
# 全部计算完后,将剩余结果传入结果队列
|
||||
data.minheap_queue.put(deepcopy(data.minheap))
|
||||
|
||||
|
||||
def calc_speed_and_set_mode(data):
|
||||
from PublicReference.equipment.equ_list import 部位列表, equ
|
||||
套装组合 = []
|
||||
套装适用 = []
|
||||
|
||||
for a in data.有效防具套装:
|
||||
for b in data.有效首饰套装:
|
||||
for c in data.有效特殊套装:
|
||||
# 533
|
||||
套装组合.append([a, a, a, a, a, b, b, b, c, c, c])
|
||||
套装适用.append([
|
||||
a + '[2]', a + '[3]', a + '[5]', b + '[2]', b + '[3]',
|
||||
c + '[2]', c + '[3]'
|
||||
])
|
||||
|
||||
for a in data.有效防具套装:
|
||||
for d in data.有效上链左套装:
|
||||
for e in data.有效镯下右套装:
|
||||
for f in data.有效环鞋指套装:
|
||||
# 3332
|
||||
套装组合.append([d, a, e, a, f, e, d, f, f, d, e])
|
||||
套装适用.append([
|
||||
a + '[2]', d + '[2]', d + '[3]', e + '[2]', e + '[3]',
|
||||
f + '[2]', f + '[3]'
|
||||
])
|
||||
套装组合.append([a, a, e, a, f, e, d, f, f, d, e])
|
||||
套装适用.append([
|
||||
a + '[2]', d + '[2]', a + '[3]', e + '[2]', e + '[3]',
|
||||
f + '[2]', f + '[3]'
|
||||
])
|
||||
套装组合.append([d, a, a, a, f, e, d, f, f, d, e])
|
||||
套装适用.append([
|
||||
a + '[2]', d + '[2]', d + '[3]', e + '[2]', a + '[3]',
|
||||
f + '[2]', f + '[3]'
|
||||
])
|
||||
套装组合.append([d, a, e, a, a, e, d, f, f, d, e])
|
||||
套装适用.append([
|
||||
a + '[2]', d + '[2]', d + '[3]', e + '[2]', e + '[3]',
|
||||
f + '[2]', a + '[3]'
|
||||
])
|
||||
|
||||
if data.mode_index == 1:
|
||||
for a in data.有效防具套装:
|
||||
for b in data.有效首饰套装:
|
||||
for c in data.有效特殊套装:
|
||||
for d in data.有效防具套装:
|
||||
if d != a:
|
||||
# 2333 占套装模式90%计算量
|
||||
套装组合.append([a, a, a, d, d, b, b, b, c, c, c])
|
||||
套装组合.append([a, a, d, a, d, b, b, b, c, c, c])
|
||||
套装组合.append([a, d, a, a, d, b, b, b, c, c, c])
|
||||
套装组合.append([d, a, a, a, d, b, b, b, c, c, c])
|
||||
套装组合.append([a, a, d, d, a, b, b, b, c, c, c])
|
||||
套装组合.append([a, d, a, d, a, b, b, b, c, c, c])
|
||||
套装组合.append([d, a, a, d, a, b, b, b, c, c, c])
|
||||
套装组合.append([a, d, d, a, a, b, b, b, c, c, c])
|
||||
套装组合.append([d, a, d, a, a, b, b, b, c, c, c])
|
||||
套装组合.append([d, d, a, a, a, b, b, b, c, c, c])
|
||||
for x in range(10):
|
||||
套装适用.append([
|
||||
a + '[2]', a + '[3]', d + '[2]', b + '[2]',
|
||||
b + '[3]', c + '[2]', c + '[3]'
|
||||
])
|
||||
|
||||
# 极速模式与套装模式
|
||||
count = -1
|
||||
current_index = -1
|
||||
for temp in 套装组合:
|
||||
count += 1
|
||||
for k in [-1, 0, 5, 8]:
|
||||
temp1 = []
|
||||
sign = 0
|
||||
if data.拥有百变怪:
|
||||
sign2 = '空'
|
||||
else:
|
||||
sign2 = '无'
|
||||
for x in range(11):
|
||||
品质 = '史诗'
|
||||
if k == x:
|
||||
品质 = '神话'
|
||||
index = equ.get_id_by_index(temp[x], 品质, 部位列表[x])
|
||||
if data.装备选择状态[index] == 1:
|
||||
sign += 1
|
||||
else:
|
||||
if sign2 == '空' and equ.get_equ_by_id(
|
||||
index).品质 != '神话' and equ.get_equ_by_id(
|
||||
index).所属套装 not in [
|
||||
'精灵使的权能', '大自然的呼吸', '能量主宰'
|
||||
]:
|
||||
sign += 1
|
||||
sign2 = equ.get_equ_by_id(index).名称
|
||||
temp1.append(equ.get_equ_by_id(index).名称)
|
||||
if sign == 11:
|
||||
for i in data.有效武器列表:
|
||||
current_index += 1
|
||||
if current_index < data.start_index:
|
||||
# 尚未到本工作线程需要计算的范围
|
||||
continue
|
||||
if current_index > data.end_index:
|
||||
# 本工作线程需要计算的范围已全部完成,直接退出
|
||||
return
|
||||
calc_damage(temp1 + [i], 套装适用[count], sign2, data)
|
||||
# logger.warning("consumer {} {} {} - {}".format(
|
||||
# data.mode_index, data.start_index, data.end_index, current_index
|
||||
# ))
|
||||
pass
|
||||
|
||||
|
||||
# 11层循环顺序
|
||||
顺序 = [5, 8, 1, 3, 2, 4, 6, 9, 7, 10]
|
||||
顺序字典 = {0: 0, 5: 1, 8: 2, 1: 3, 3: 4, 2: 5, 4: 6, 6: 7, 9: 8, 7: 9, 10: 10}
|
||||
|
||||
|
||||
def 筛选(名称, x, 装备, 套装, 神话, 种类, data):
|
||||
from PublicReference.equipment.equ_list import equ
|
||||
|
||||
i = equ.get_id_by_name(名称)
|
||||
装备[x] = 名称
|
||||
|
||||
for k in 顺序[顺序字典[x]:]:
|
||||
套装[k] = '无'
|
||||
|
||||
当前装备 = equ.get_equ_by_id(i)
|
||||
|
||||
if 当前装备.所属套装2 != '无':
|
||||
套装[x] = 当前装备.所属套装2
|
||||
else:
|
||||
套装[x] = 当前装备.所属套装
|
||||
|
||||
count = []
|
||||
num = 0
|
||||
for j in 套装:
|
||||
if j == '智慧产物':
|
||||
num += 1
|
||||
if num > 种类[1]:
|
||||
return 1
|
||||
elif (j != '无') and (j not in count):
|
||||
count.append(j)
|
||||
|
||||
if len(count) > 种类[0]:
|
||||
return 1
|
||||
elif x == 10 and 种类[0] > 4:
|
||||
种类[0] = max(min(种类[0], len(count)), 4)
|
||||
|
||||
if x == 0:
|
||||
神话[5] = 0
|
||||
神话[8] = 0
|
||||
elif x == 5:
|
||||
神话[8] = 0
|
||||
|
||||
if 当前装备.品质 == '神话':
|
||||
神话[x] = 1
|
||||
if sum(神话) > 1:
|
||||
return 1
|
||||
else:
|
||||
神话[x] = 0
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
def calc_single_mode(data):
|
||||
from PublicReference.equipment.equ_list import equ
|
||||
current_index = -1
|
||||
装备 = ['无'] * 12
|
||||
套装 = ['无'] * 11
|
||||
神话 = [0] * 11
|
||||
种类 = [11, data.智慧产物限制]
|
||||
|
||||
for a1 in data.有效部位列表[0]:
|
||||
if 筛选(a1, 0, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a2 in data.有效部位列表[5]:
|
||||
if 筛选(a2, 5, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a3 in data.有效部位列表[8]:
|
||||
if 筛选(a3, 8, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a4 in data.有效部位列表[1]:
|
||||
if 筛选(a4, 1, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
current_index += 1
|
||||
if current_index < data.start_index:
|
||||
continue # 尚未到本工作线程需要计算的范围
|
||||
if current_index > data.end_index:
|
||||
return # 本工作线程需要计算的范围已全部完成,直接退出
|
||||
for a5 in data.有效部位列表[3]:
|
||||
if 筛选(a5, 3, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a6 in data.有效部位列表[2]:
|
||||
if 筛选(a6, 2, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a7 in data.有效部位列表[4]:
|
||||
if 筛选(a7, 4, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a8 in data.有效部位列表[6]:
|
||||
if 筛选(a8, 6, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a9 in data.有效部位列表[9]:
|
||||
if 筛选(a9, 9, 装备, 套装, 神话, 种类, data):
|
||||
continue
|
||||
for a10 in data.有效部位列表[7]:
|
||||
if 筛选(a10, 7, 装备, 套装, 神话, 种类,
|
||||
data):
|
||||
continue
|
||||
for a11 in data.有效部位列表[10]:
|
||||
if 筛选(a11, 10, 装备, 套装, 神话, 种类,
|
||||
data):
|
||||
continue
|
||||
套装字典 = {}
|
||||
for i in 套装:
|
||||
if i != '智慧产物' and i != '无':
|
||||
套装字典[i] = 套装字典.get(
|
||||
i, 0) + 1
|
||||
套装名称 = []
|
||||
for i in 套装字典.keys():
|
||||
if 套装字典[i] >= 2 and (
|
||||
i + '[2]'
|
||||
) in equ.get_suit_name():
|
||||
套装名称.append(i + '[2]')
|
||||
if 套装字典[i] >= 3 and (
|
||||
i + '[3]'
|
||||
) in equ.get_suit_name():
|
||||
套装名称.append(i + '[3]')
|
||||
if 套装字典[i] >= 5 and (
|
||||
i + '[5]'
|
||||
) in equ.get_suit_name():
|
||||
套装名称.append(i + '[5]')
|
||||
for a12 in data.有效部位列表[11]:
|
||||
装备[11] = a12
|
||||
calc_damage(
|
||||
装备, 套装名称, '空', data)
|
||||
pass
|
||||
|
||||
|
||||
def calc_damage(有效穿戴组合, 有效穿戴套装, 百变怪, data: CalcData):
|
||||
角色属性A = deepcopy(data.角色属性A)
|
||||
|
||||
角色属性A.穿戴装备(有效穿戴组合, 有效穿戴套装)
|
||||
if data.是输出职业:
|
||||
damage = 角色属性A.伤害计算()
|
||||
else:
|
||||
damage = 角色属性A.BUFF计算(2)
|
||||
|
||||
data.minheap.add((damage, ) + tuple(角色属性A.装备栏) + (damage, ) +
|
||||
tuple(角色属性A.套装栏) + (百变怪, ))
|
||||
data.minheap.processed_result_count += 1
|
||||
|
||||
if data.minheap.processed_result_count >= data.minheap.batch_size:
|
||||
# 动态调整批量大小
|
||||
if data.minheap_queue.qsize() > expected_qsize:
|
||||
data.minheap.update_batch_size()
|
||||
# 同步
|
||||
data.minheap_queue.put(deepcopy(data.minheap))
|
||||
# 重置
|
||||
data.minheap.reset()
|
||||
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# -------------------------------
|
||||
# File : common
|
||||
# DateTime : 2020/6/11 0011 16:43
|
||||
# Author : Chen Ji
|
||||
# Email : fzls.zju@gmail.com
|
||||
# -------------------------------
|
||||
import re
|
||||
from typing import Iterable
|
||||
from .log import *
|
||||
|
||||
|
||||
# 格式化时间为比较美观的格式
|
||||
def format_time(ftime):
|
||||
days, remainder = divmod(ftime, 86400)
|
||||
hours, remainder = divmod(remainder, 3600)
|
||||
minutes, seconds = divmod(remainder, 60)
|
||||
remaining_time_str = ""
|
||||
if days > 0:
|
||||
remaining_time_str += "{}d".format(int(days))
|
||||
if days > 0 or hours > 0:
|
||||
remaining_time_str += "{:02}h".format(int(hours))
|
||||
if hours > 0 or minutes > 0:
|
||||
remaining_time_str += "{:02}m".format(int(minutes))
|
||||
remaining_time_str += "{:02.2f}s".format(seconds)
|
||||
|
||||
return remaining_time_str
|
||||
|
||||
|
||||
def to_int(content, default=None):
|
||||
if re.match("^-?\d+$", content):
|
||||
return int(content)
|
||||
return default
|
||||
|
||||
|
||||
# 将小数转换为百分比字符串的表示方式
|
||||
def to_percent(num, digits=0):
|
||||
return str(int(round(num * 100, digits))) + "%"
|
||||
|
||||
|
||||
# 将字符串数组批量格式化
|
||||
def format_range(content: str, items: Iterable, *args, **kwargs):
|
||||
return list(map(lambda i: content.format(i, *args, **kwargs), items))
|
||||
@@ -0,0 +1,146 @@
|
||||
import configparser
|
||||
import os
|
||||
import json
|
||||
|
||||
from PublicReference.utils.lan import Language
|
||||
|
||||
global 配置格式有误
|
||||
global 窗口显示模式
|
||||
global 切装模式
|
||||
global 调试开关
|
||||
global 输出数据
|
||||
global 普雷武器显示
|
||||
global 武器排名
|
||||
global SkinVersion
|
||||
global 觉醒开关
|
||||
global 攻击目标
|
||||
|
||||
global 天劫光环
|
||||
global 战术白字
|
||||
global 天御套装
|
||||
global 千蛛减防
|
||||
global currentVersion
|
||||
|
||||
配置格式有误 = False
|
||||
|
||||
conf = configparser.ConfigParser()
|
||||
|
||||
# def get_real_resolution():
|
||||
# """获取真实的分辨率"""
|
||||
# try:
|
||||
# from win32 import win32api, win32gui, win32print
|
||||
# from win32.lib import win32con
|
||||
# except:
|
||||
# return 0,0
|
||||
# else:
|
||||
# hDC = win32gui.GetDC(0)
|
||||
# # 横向分辨率
|
||||
# w = win32print.GetDeviceCaps(hDC, win32con.DESKTOPHORZRES)
|
||||
# # 纵向分辨率
|
||||
# h = win32print.GetDeviceCaps(hDC, win32con.DESKTOPVERTRES)
|
||||
# return w, h
|
||||
|
||||
|
||||
def readConfig(filePath):
|
||||
#基础设置##################################################################
|
||||
try:
|
||||
conf.read(filePath, encoding='utf-8')
|
||||
except:
|
||||
try:
|
||||
conf.read(filePath, encoding='utf-8-sig')
|
||||
except:
|
||||
配置格式有误 = True
|
||||
pass
|
||||
|
||||
|
||||
def readDefault():
|
||||
data = {}
|
||||
with open("ResourceFiles/Config/config.json", encoding='utf-8') as fp:
|
||||
setJson = json.load(fp)
|
||||
num = 0
|
||||
for i in setJson:
|
||||
data[str(num)] = i['default']
|
||||
num += 1
|
||||
fp.close()
|
||||
return data
|
||||
|
||||
|
||||
def readSet(filePath):
|
||||
data = readDefault()
|
||||
if os.path.exists(filePath):
|
||||
with open(filePath, encoding='utf-8') as fp:
|
||||
setJson = json.load(fp)
|
||||
data.update(setJson)
|
||||
fp.close()
|
||||
return data
|
||||
|
||||
|
||||
setJson = readSet("ResourceFiles/Config/set.json")
|
||||
窗口显示模式 = setJson['0']
|
||||
普雷武器显示 = setJson['1']
|
||||
切装模式 = setJson['2']
|
||||
输出数据 = setJson['3']
|
||||
调试开关 = setJson['4']
|
||||
SkinVersion = ["DNFStyle", "LightStyle", "None"][setJson['5']]
|
||||
觉醒开关 = setJson['6']
|
||||
武器排名 = setJson['7']
|
||||
自动检查更新 = setJson['8']
|
||||
天劫光环 = setJson['9']
|
||||
战术白字 = 0.40 + 0.05 * setJson['10']
|
||||
天御套装 = setJson['11']
|
||||
千蛛减防 = setJson['12']
|
||||
多语言开关 = setJson['13']
|
||||
|
||||
if 输出数据 == 1:
|
||||
if not os.path.exists('./数据记录'):
|
||||
os.makedirs('./数据记录')
|
||||
|
||||
#多语言##################################################################
|
||||
|
||||
lan = Language()
|
||||
|
||||
defaultLanPaths = ['language_chn', 'language_kor']
|
||||
languageJson = []
|
||||
|
||||
languagePath = "ResourceFiles/Config/language/{}.json".format(
|
||||
defaultLanPaths[多语言开关])
|
||||
lan.load_json(languagePath)
|
||||
|
||||
|
||||
def trans(text, **kwargs):
|
||||
return lan.trans(text, **kwargs)
|
||||
|
||||
|
||||
#攻击目标##################################################################
|
||||
|
||||
readConfig(trans('ResourceFiles/Config/攻击目标.ini'))
|
||||
|
||||
# w, h = get_real_resolution()
|
||||
|
||||
# # 4K及以上才自动开启
|
||||
# if w > 2048 and h > 1080:
|
||||
# 窗口显示模式 = 1
|
||||
|
||||
# 怪物属性
|
||||
攻击目标 = []
|
||||
for i in range(100):
|
||||
try:
|
||||
temp = []
|
||||
item = 'item' + str(i)
|
||||
temp.append(conf.get(item, '名称'))
|
||||
temp.append(conf.getint(item, '防御'))
|
||||
temp.append(conf.getint(item, '火抗'))
|
||||
temp.append(conf.getint(item, '冰抗'))
|
||||
temp.append(conf.getint(item, '光抗'))
|
||||
temp.append(conf.getint(item, '暗抗'))
|
||||
攻击目标.append(temp)
|
||||
except Exception as error:
|
||||
break
|
||||
|
||||
if len(攻击目标) == 0:
|
||||
攻击目标 = [['120沙袋(绿)', 443243, 0, 0, 0, 0]]
|
||||
|
||||
with open("ResourceFiles/Config/release_version.json") as fp:
|
||||
versionInfo = json.load(fp)
|
||||
currentVersion = versionInfo['version'].replace('-', '.')
|
||||
# self.自动检查版本 = versionInfo['AutoCheckUpdate']
|
||||
@@ -0,0 +1,398 @@
|
||||
import multiprocessing
|
||||
import queue
|
||||
import threading
|
||||
import time
|
||||
import os
|
||||
import math
|
||||
from typing import Iterable
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5 import QtGui
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtGui import *
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtCore import QUrl
|
||||
|
||||
from .log import logger
|
||||
from .calc_core import CalcData
|
||||
from .common import format_time
|
||||
from .minheap import MinHeap, MinHeapWithQueue, batch_size
|
||||
from .producer_consumer import producer, producer_data, thread_num, thread_task
|
||||
from .storex import *
|
||||
from copy import *
|
||||
# from .MainWindow import *
|
||||
import chardet
|
||||
import sys
|
||||
import platform
|
||||
import ctypes
|
||||
from ctypes import *
|
||||
|
||||
from PublicReference.utils.config import *
|
||||
|
||||
|
||||
def resource_path(relative_path):
|
||||
if getattr(sys, 'frozen', False): # 是否Bundle Resource
|
||||
base_path = sys._MEIPASS
|
||||
else:
|
||||
base_path = os.path.abspath(".")
|
||||
return os.path.join(base_path, relative_path)
|
||||
|
||||
|
||||
preferred = None
|
||||
try:
|
||||
if platform.system() != "Windows":
|
||||
dllPath = resource_path(
|
||||
os.path.join("InternalFile", "DLL", "Preferred.dylib"))
|
||||
preferred = ctypes.CDLL(dllPath)
|
||||
# logger.info("Preferred included.")
|
||||
else:
|
||||
dllPath = resource_path(
|
||||
os.path.join("InternalFile", "DLL", "Preferred.dll"))
|
||||
preferred = ctypes.WinDLL(dllPath)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
skillDataPath = resource_path("SkillData")
|
||||
|
||||
# 100级史诗套数据
|
||||
防具套装 = ("古代祭祀的神圣仪式", "遗忘魔法师的馈赠", "天堂舞姬", "死亡阴影", "皇家裁决者宣言", "龙血玄黄", "贫瘠沙漠的遗产",
|
||||
"炙炎之盛宴", "擎天战甲", "噩梦:地狱之路", "传奇铁匠-封神", "荆棘漫天", "永恒不息之路", "命运歧路",
|
||||
"大自然的呼吸")
|
||||
首饰套装 = ("上古尘封术式", "破晓曦光", "幸运三角", "精灵使的权能")
|
||||
特殊套装 = ("军神的隐秘遗产", "灵宝:世间真理", "时间战争的残骸", "能量主宰")
|
||||
上链左套装 = ("深渊窥视者", "圣者的黄昏", "坎坷命运", "吞噬愤怒")
|
||||
镯下右套装 = ("黑魔法探求者", "时空旅行者", "穿透命运的呐喊", "狂乱追随者")
|
||||
环鞋指套装 = ("地狱求道者", "次元旅行者", "天命无常", "悲剧的残骸")
|
||||
|
||||
部位列表 = ("上衣", "头肩", "下装", "腰带", "鞋", "手镯", "项链", "戒指", "耳环", "辅助装备", "魔法石",
|
||||
"武器")
|
||||
|
||||
奥兹玛部位列表 = ("头肩", "腰带", "鞋", "项链", "魔法石")
|
||||
|
||||
奥兹玛套装 = ('阿斯特罗斯', '贝利亚斯', '雷德梅恩', '罗什巴赫', '泰玛特')
|
||||
|
||||
希洛克部位列表 = ("下装", "戒指", "辅助装备")
|
||||
|
||||
希洛克套装 = ('奈克斯', '暗杀者', '卢克西', '守门人', '洛多斯')
|
||||
|
||||
部位字典 = {
|
||||
"上衣": 0,
|
||||
"头肩": 1,
|
||||
"下装": 2,
|
||||
"腰带": 3,
|
||||
"鞋": 4,
|
||||
"手镯": 5,
|
||||
"项链": 6,
|
||||
"戒指": 7,
|
||||
"耳环": 8,
|
||||
"辅助装备": 9,
|
||||
"魔法石": 10,
|
||||
"武器": 11
|
||||
}
|
||||
|
||||
颜色 = {
|
||||
'神话': '#E0502F',
|
||||
'史诗': '#FFB400',
|
||||
'传说': '#FF7800',
|
||||
'神器': '#FF00FF',
|
||||
'稀有': '#B36BFF'
|
||||
}
|
||||
|
||||
总套装列表 = [防具套装, 首饰套装, 特殊套装, 上链左套装, 镯下右套装, 环鞋指套装]
|
||||
所有套装列表 = 防具套装 + 首饰套装 + 特殊套装 + 上链左套装 + 镯下右套装 + 环鞋指套装
|
||||
|
||||
|
||||
def getQCSS(FileName):
|
||||
try:
|
||||
content = store.get("./ResourceFiles/Skins/" + SkinVersion + "/" +
|
||||
FileName)
|
||||
if content == None:
|
||||
with open(
|
||||
"./ResourceFiles/Skins/" + SkinVersion + "/" + FileName +
|
||||
".qcss", "rb") as fp:
|
||||
content = fp.read()
|
||||
encoding = chardet.detect(content) or {}
|
||||
content = content.decode(encoding.get("encoding") or "utf-8")
|
||||
store.set(
|
||||
"./ResourceFiles/Skins/" + SkinVersion + "/" + FileName,
|
||||
content)
|
||||
return content
|
||||
except Exception as error:
|
||||
return ''
|
||||
|
||||
|
||||
# 部分控件样式
|
||||
按钮样式 = getQCSS('按钮样式')
|
||||
# if 按钮样式 == '' : 按钮样式 = 'QPushButton{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:10px} QPushButton:hover{background-color:rgba(65,105,225,0.8)}'
|
||||
|
||||
按钮样式_warn = getQCSS('按钮样式_warn')
|
||||
# if 按钮样式_warn == '' : 按钮样式_warn ='''QPushButton{font-size:14px;color:white;background-color:rgba(197,34,70,0.8);border:1px;border-radius:10px} QPushButton:hover{background-color:rgba(225,5,65,0.8)}'''
|
||||
|
||||
套装按钮样式 = getQCSS('套装按钮样式')
|
||||
# if 套装按钮样式 == '' :套装按钮样式 = '''QPushButton{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:5px;} QPushButton:hover{background-color:rgba(65,105,225,0.8)}'''
|
||||
按钮样式2 = 'QPushButton{background-color:rgba(0,0,0,0);border:1px;border-radius:5px} QPushButton:hover{background-color:rgba(252,224,0,0.2)}'
|
||||
按钮样式3 = '''QPushButton{font-size:13px;color:white;background-color:rgba(255,255,255,0.1);border:1px;border-radius:5px} QPushButton:hover{background-color:rgba(65,105,225,0.5)}
|
||||
QPushButton::menu-indicator {image:none}'''
|
||||
|
||||
按钮样式 = getQCSS('按钮样式')
|
||||
# if 按钮样式 == '' :按钮样式 = 'QPushButton{font-size:12px;color:white;background-color:grey;border:1px;border-radius:10px}'
|
||||
|
||||
复选框样式 = getQCSS('复选框样式')
|
||||
# if 复选框样式 == '' :复选框样式 = "QCheckBox{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:3px} QCheckBox:hover{background-color:rgba(65,105,225,0.8)}"
|
||||
# 复选框样式 = getQCSS('复选框样式')
|
||||
# if 复选框样式 == '' :复选框样式 = "QCheckBox{font-size:12px;color:white;background-color:grey;border:1px;border-radius:3px} QCheckBox:hover{background-color:rgba(65,105,225,0.8)}"
|
||||
|
||||
标签样式 = getQCSS('标签样式')
|
||||
# if 标签样式 == '' :标签样式 = "QLabel{font-size:12px;color:white}"
|
||||
|
||||
页签样式 = getQCSS('页签样式')
|
||||
# if 页签样式 == '' :页签样式 = '''QToolButton{font-size:13px;color:white;background-color:rgba(70,130,200,0.8)} QToolButton:hover{background-color:rgba(40,100,235,0.8)}'''
|
||||
|
||||
页签样式_选中 = getQCSS('页签样式_选中')
|
||||
# if 页签样式_选中 == '' :页签样式_选中 = '''QToolButton{font-size:13px;color:white;background-color:rgba(200,30,30,0.8)} QToolButton:hover{background-color:rgba(235,0,0,0.8)}'''
|
||||
|
||||
下拉框样式 = getQCSS('下拉框样式')
|
||||
# if 下拉框样式 == '' :下拉框样式 = '''QComboBox{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:5px;}
|
||||
# QComboBox:disabled{font-size:12px;color:white;background-color:grey;border:1px;border-radius:5px;} QComboBox QAbstractItemView::item {height: 18px;}
|
||||
# QComboBox:hover{background-color:rgba(65,105,225,0.8)}
|
||||
# QComboBox QAbstractItemView::item {height: 18px;background-color:white}
|
||||
# QComboBox QAbstractItemView::item:hover,QComboBox QAbstractItemView::item:focus {background-color:rgba(179,206,255,1);color:black}
|
||||
# QComboBox QScrollBar{
|
||||
# background: white !important
|
||||
# }
|
||||
# QComboBox QScrollBar::handle{
|
||||
# background: rgb(220,220,220) !important
|
||||
# }
|
||||
# '''
|
||||
# 下拉框样式 = getQCSS('下拉框样式')
|
||||
# if 下拉框样式 == '' :下拉框样式 = "QComboBox{font-size:12px;color:white;background-color:grey;border:1px;border-radius:5px;} QComboBox QAbstractItemView::item {height: 18px;}"
|
||||
下拉框样式_down = getQCSS('下拉框样式_down')
|
||||
# if 下拉框样式_down == '' :下拉框样式_down = '''QComboBox{font-size:12px;color:white;background-color:rgba(34,157,70,0.8);border:1px;border-radius:5px;} QComboBox:hover{background-color:rgba(5,185,65,0.8)}
|
||||
# QComboBox QAbstractItemView::item {height: 18px;background-color:white}
|
||||
# QComboBox QAbstractItemView::item:hover,QComboBox QAbstractItemView::item:focus {background-color:rgba(179,206,255,1) !important;color:black}
|
||||
# QComboBox QScrollBar{
|
||||
# background: white !important
|
||||
# }
|
||||
# QComboBox QScrollBar::handle{
|
||||
# background: rgb(220,220,220) !important
|
||||
# }
|
||||
# '''
|
||||
下拉框样式_warn = getQCSS('下拉框样式_warn')
|
||||
# if 下拉框样式_warn == '' :下拉框样式_warn = '''QComboBox{font-size:12px;color:white;background-color:rgba(197,34,70,0.8);border:1px;border-radius:5px;} QComboBox:hover{background-color:rgba(225,5,65,0.8)}
|
||||
# QComboBox QAbstractItemView::item {height: 18px;background-color:white}
|
||||
# QComboBox QAbstractItemView::item:hover,QComboBox QAbstractItemView::item:focus {background-color:rgba(179,206,255,1)!important; color:black}
|
||||
# QComboBox QScrollBar{
|
||||
# background: white !important
|
||||
# }
|
||||
# QComboBox QScrollBar::handle{
|
||||
# background: rgb(220,220,220) !important
|
||||
# }
|
||||
# '''
|
||||
下拉框样式_detail = getQCSS('下拉框样式_detail')
|
||||
|
||||
输入框样式 = getQCSS('输入框样式')
|
||||
# if 输入框样式 == '' :输入框样式 ='''QLineEdit{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:3px} QLineEdit:hover{background-color:rgba(65,105,225,0.8)}'''
|
||||
|
||||
标签样式_2 = getQCSS('标签样式_2')
|
||||
# if 标签样式_2 == '' :标签样式_2 = "QLabel{font-size:12px;color:yellow}"
|
||||
|
||||
文本框样式黄 = getQCSS('文本框样式黄')
|
||||
# if 文本框样式黄 == '' :文本框样式黄 = "QLineEdit{font-size:12px;color:yellow;background-color:rgba(70,134,197,0.8);border:1px;border-radius:3px}"
|
||||
文本框样式白 = getQCSS('文本框样式白')
|
||||
# if 文本框样式白 == '' :文本框样式白 = "QLineEdit{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:3px}"
|
||||
|
||||
滚动条样式 = getQCSS('滚动条样式')
|
||||
|
||||
标题背景 = getQCSS('标题背景')
|
||||
|
||||
标题字体 = getQCSS('标题字体')
|
||||
|
||||
# 滚动条样式 = '''/*QScrollBar Style*/
|
||||
# /*纵向滚动条*/
|
||||
# QScrollBar {
|
||||
# background: transparent; /*背景透明*/
|
||||
# width: 10px; /*宽度*/
|
||||
# margin: 0px 0px 0px 0px; /**/
|
||||
# padding-top: 5px; /*距离上面12px*/
|
||||
# padding-bottom: 5px; /*距离底部12px*/
|
||||
# }
|
||||
# /*纵向滚动条上面的滑块*/
|
||||
# QScrollBar::handle {
|
||||
# background: rgba(245,245,245,50);
|
||||
# width: 10px;
|
||||
# border: none;
|
||||
# }
|
||||
# /*纵向滚动条下部分块*/
|
||||
# QScrollBar::add-page:vertical {
|
||||
# width: 10px;
|
||||
# background: transparent;
|
||||
# }
|
||||
# /*横向滚动条后面部分块*/
|
||||
# QScrollBar::add-page:horizontal {
|
||||
# height: 10px;
|
||||
# background: transparent;
|
||||
# }
|
||||
# /*纵向滚动条上面部分块*/
|
||||
# QScrollBar::sub-page:vertical {
|
||||
# width: 10px;
|
||||
# background: transparent;
|
||||
# }
|
||||
# /*横向滚动条左部分块*/
|
||||
# QScrollBar::sub-page:horizontal {
|
||||
# height: 10px;
|
||||
# background: transparent;
|
||||
# }
|
||||
# /*纵向滚动条顶部三角形位置*/
|
||||
# QScrollBar::sub-line:vertical {
|
||||
# height: 12px;
|
||||
# width: 10px;
|
||||
# background: transparent;
|
||||
# subcontrol-position: top;
|
||||
# }
|
||||
# /*横向滚动条左侧三角形位置*/
|
||||
# QScrollBar::sub-line:horizontal {
|
||||
# height: 10px;
|
||||
# width: 12px;
|
||||
# background: transparent;
|
||||
# subcontrol-position: left;
|
||||
# }
|
||||
# /*纵向滚动条下面三角形部分*/
|
||||
# QScrollBar::add-line:vertical {
|
||||
# height: 12px;
|
||||
# width: 10px;
|
||||
# background: transparent;
|
||||
# subcontrol-position: bottom;
|
||||
# }
|
||||
# /*横向滚动条右边的三角形部分*/
|
||||
# QScrollBar::add-line:horizontal {
|
||||
# height: 10px;
|
||||
# width: 12px;
|
||||
# background: transparent;
|
||||
# subcontrol-position: right;
|
||||
# }
|
||||
# '''
|
||||
|
||||
游戏滚动条样式模拟 = '''/*纵向滚动条*/
|
||||
QScrollBar {
|
||||
background: transparent; /*背景透明*/
|
||||
width: 12px; /*宽度*/
|
||||
margin: 0px 0px 0px 0px; /**/
|
||||
padding-top: 16px; /*距离上面12px*/
|
||||
padding-bottom: 16px; /*距离底部12px*/
|
||||
padding-right:1px;
|
||||
}
|
||||
/*纵向滚动条上面的滑块*/
|
||||
QScrollBar::handle {
|
||||
background: rgb(36,36,36);
|
||||
width: 12px;
|
||||
border: 1px inset rgb(76,61,39);
|
||||
}
|
||||
/*纵向滚动条下部分块*/
|
||||
QScrollBar::add-page:vertical {
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
}
|
||||
/*横向滚动条后面部分块*/
|
||||
QScrollBar::add-page:horizontal {
|
||||
height: 11px;
|
||||
background: transparent;
|
||||
}
|
||||
/*纵向滚动条上面部分块*/
|
||||
QScrollBar::sub-page:vertical {
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
}
|
||||
/*横向滚动条左部分块*/
|
||||
QScrollBar::sub-page:horizontal {
|
||||
height: 11px;
|
||||
background: transparent;
|
||||
}
|
||||
/*纵向滚动条顶部三角形位置*/
|
||||
QScrollBar::sub-line:vertical {
|
||||
height: 12px;
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
subcontrol-position: top;
|
||||
}
|
||||
/*横向滚动条左侧三角形位置*/
|
||||
QScrollBar::sub-line:horizontal {
|
||||
height: 12px;
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
subcontrol-position: left;
|
||||
}
|
||||
/*纵向滚动条下面三角形部分*/
|
||||
QScrollBar::add-line:vertical {
|
||||
height: 12px;
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
subcontrol-position: bottom;
|
||||
}
|
||||
/*横向滚动条右边的三角形部分*/
|
||||
QScrollBar::add-line:horizontal {
|
||||
height: 12px;
|
||||
width: 11px;
|
||||
background: transparent;
|
||||
subcontrol-position: right;
|
||||
}
|
||||
/*纵向滚动条向上的三角形小图标*/
|
||||
QScrollBar::up-arrow:vertical {
|
||||
image: url(ResourceFiles/img/UI/up.png);
|
||||
padding-top:3px;
|
||||
padding-right:2px;
|
||||
}
|
||||
QScrollBar::down-arrow:vertical {
|
||||
image: url(ResourceFiles/img/UI/down.png);
|
||||
padding-bottom:4px;
|
||||
padding-right:2px;
|
||||
}
|
||||
'''
|
||||
|
||||
|
||||
class MyQComboBox(QComboBox):
|
||||
def __init__(self, win, useWheel=True):
|
||||
super().__init__(win)
|
||||
self.useWheel = useWheel
|
||||
self.setView(QListView())
|
||||
self.setStyleSheet(下拉框样式)
|
||||
|
||||
def addItems(self, texts: Iterable[str]):
|
||||
for text in texts:
|
||||
self.addItem(text)
|
||||
pass
|
||||
|
||||
def addItem(self, text, userData=None):
|
||||
if userData is None:
|
||||
userData = text
|
||||
text = trans(text)
|
||||
super().addItem(text, userData)
|
||||
pass
|
||||
|
||||
def wheelEvent(self, e: QtGui.QWheelEvent) -> None:
|
||||
if self.useWheel:
|
||||
return super().wheelEvent(e)
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
class MyQToolButton(QToolButton):
|
||||
DoubleClickSig = pyqtSignal(str)
|
||||
|
||||
def mouseDoubleClickEvent(self, e): # 双击
|
||||
sigContent = self.objectName()
|
||||
self.DoubleClickSig.emit(sigContent)
|
||||
|
||||
|
||||
class MyQLabel(QtWidgets.QLabel):
|
||||
# 自定义信号, 注意信号必须为类属性
|
||||
button_clicked_signal = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(MyQLabel, self).__init__(parent)
|
||||
|
||||
def mouseReleaseEvent(self, QMouseEvent):
|
||||
self.button_clicked_signal.emit()
|
||||
|
||||
# 可在外部与槽函数连接
|
||||
def connect_customized_slot(self, func):
|
||||
self.button_clicked_signal.connect(func)
|
||||
@@ -0,0 +1,161 @@
|
||||
import types
|
||||
import weakref
|
||||
from copyreg import dispatch_table
|
||||
|
||||
|
||||
def copy(x):
|
||||
cls = type(x)
|
||||
copier = _copy_dispatch.get(cls)
|
||||
if copier:
|
||||
return copier(x)
|
||||
if issubclass(cls, type):
|
||||
return _copy_immutable(x)
|
||||
copier = getattr(cls, "__copy__", None)
|
||||
if copier is not None:
|
||||
return copier(x)
|
||||
reductor = dispatch_table.get(cls)
|
||||
if reductor is not None:
|
||||
rv = reductor(x)
|
||||
else:
|
||||
reductor = getattr(x, "__reduce_ex__", None)
|
||||
if reductor is not None:
|
||||
rv = reductor(4)
|
||||
else:
|
||||
reductor = getattr(x, "__reduce__", None)
|
||||
if reductor:
|
||||
rv = reductor()
|
||||
if isinstance(rv, str):
|
||||
return x
|
||||
return _reconstruct(x, None, *rv)
|
||||
|
||||
|
||||
_copy_dispatch = d = {}
|
||||
|
||||
|
||||
def _copy_immutable(x):
|
||||
return x
|
||||
|
||||
|
||||
for t in (type(None), int, float, bool, complex, str, tuple, bytes, frozenset,
|
||||
type, range, slice, property, types.BuiltinFunctionType,
|
||||
type(Ellipsis), type(NotImplemented), types.FunctionType,
|
||||
weakref.ref):
|
||||
d[t] = _copy_immutable
|
||||
t = getattr(types, "CodeType", None)
|
||||
if t is not None:
|
||||
d[t] = _copy_immutable
|
||||
|
||||
d[list] = list.copy
|
||||
d[dict] = dict.copy
|
||||
d[set] = set.copy
|
||||
d[bytearray] = bytearray.copy
|
||||
|
||||
|
||||
def deepcopy(x):
|
||||
cls = type(x)
|
||||
copier = _deepcopy_dispatch.get(cls)
|
||||
if copier is not None:
|
||||
y = copier(x)
|
||||
else:
|
||||
if issubclass(cls, type):
|
||||
y = _deepcopy_atomic(x)
|
||||
else:
|
||||
copier = getattr(x, "__deepcopy__", None)
|
||||
reductor = dispatch_table.get(cls)
|
||||
if reductor:
|
||||
rv = reductor(x)
|
||||
else:
|
||||
reductor = getattr(x, "__reduce_ex__", None)
|
||||
if reductor is not None:
|
||||
rv = reductor(4)
|
||||
else:
|
||||
reductor = getattr(x, "__reduce__", None)
|
||||
if reductor:
|
||||
rv = reductor()
|
||||
if isinstance(rv, str):
|
||||
y = x
|
||||
else:
|
||||
y = _reconstruct(x, *rv)
|
||||
return y
|
||||
|
||||
|
||||
_deepcopy_dispatch = d = {}
|
||||
|
||||
|
||||
def _deepcopy_atomic(x):
|
||||
return x
|
||||
|
||||
|
||||
d[type(None)] = _deepcopy_atomic
|
||||
d[type(Ellipsis)] = _deepcopy_atomic
|
||||
d[type(NotImplemented)] = _deepcopy_atomic
|
||||
d[int] = _deepcopy_atomic
|
||||
d[float] = _deepcopy_atomic
|
||||
d[bool] = _deepcopy_atomic
|
||||
d[complex] = _deepcopy_atomic
|
||||
d[bytes] = _deepcopy_atomic
|
||||
d[str] = _deepcopy_atomic
|
||||
d[types.CodeType] = _deepcopy_atomic
|
||||
d[type] = _deepcopy_atomic
|
||||
d[range] = _deepcopy_atomic
|
||||
d[types.BuiltinFunctionType] = _deepcopy_atomic
|
||||
d[types.FunctionType] = _deepcopy_atomic
|
||||
d[weakref.ref] = _deepcopy_atomic
|
||||
d[property] = _deepcopy_atomic
|
||||
|
||||
|
||||
def _deepcopy_list(x, deepcopy=deepcopy):
|
||||
y = []
|
||||
append = y.append
|
||||
for a in x:
|
||||
append(deepcopy(a))
|
||||
return y
|
||||
|
||||
|
||||
d[list] = _deepcopy_list
|
||||
|
||||
|
||||
def _deepcopy_dict(x, deepcopy=deepcopy):
|
||||
y = {}
|
||||
for key, value in x.items():
|
||||
y[deepcopy(key)] = deepcopy(value)
|
||||
return y
|
||||
|
||||
|
||||
d[dict] = _deepcopy_dict
|
||||
|
||||
|
||||
def _reconstruct(x,
|
||||
func,
|
||||
args,
|
||||
state=None,
|
||||
listiter=None,
|
||||
dictiter=None,
|
||||
deepcopy=deepcopy):
|
||||
y = func(*args)
|
||||
if state is not None:
|
||||
state = deepcopy(state)
|
||||
if hasattr(y, '__setstate__'):
|
||||
y.__setstate__(state)
|
||||
else:
|
||||
if isinstance(state, tuple) and len(state) == 2:
|
||||
state, slotstate = state
|
||||
else:
|
||||
slotstate = None
|
||||
if state is not None:
|
||||
y.__dict__.update(state)
|
||||
if slotstate is not None:
|
||||
for key, value in slotstate.items():
|
||||
setattr(y, key, value)
|
||||
|
||||
if listiter is not None:
|
||||
for item in listiter:
|
||||
item = deepcopy(item)
|
||||
y.append(item)
|
||||
|
||||
if dictiter is not None:
|
||||
for key, value in dictiter:
|
||||
key = deepcopy(key)
|
||||
value = deepcopy(value)
|
||||
y[key] = value
|
||||
return y
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,44 @@
|
||||
from ctypes import sizeof
|
||||
from operator import le
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
class Language():
|
||||
def __init__(self):
|
||||
self.dicts = {}
|
||||
self.dicts[""] = ""
|
||||
pass
|
||||
|
||||
def load_json(self, path):
|
||||
if os.path.exists(path):
|
||||
with open(path, encoding='utf-8') as fp:
|
||||
self.dicts.update(json.load(fp))
|
||||
fp.close()
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.dicts.get(key, key)
|
||||
|
||||
## key: 原始文本 使用{word}的格式 可以格式化为对应的值
|
||||
## **kwargs: 键值对可变参数 在{word} 之前 将#key转换为对应的value
|
||||
def trans(self, text, **kwargs):
|
||||
if isinstance(text, list):
|
||||
return list(map(lambda i: self.trans(i, **kwargs), text))
|
||||
text = str(text)
|
||||
value = text
|
||||
if self.dicts.__contains__(text):
|
||||
value = self.dicts.get(text)
|
||||
if value == '':
|
||||
value = text
|
||||
else:
|
||||
for kw in kwargs.keys():
|
||||
_old = "${}".format(kw)
|
||||
_new = str(kwargs.get(kw))
|
||||
text = text.replace(_old, _new)
|
||||
try:
|
||||
value = text.format_map(self)
|
||||
except Exception:
|
||||
# 后续待完善
|
||||
return value
|
||||
value = value.replace("$", "{}")
|
||||
return value
|
||||
@@ -0,0 +1,51 @@
|
||||
import logging
|
||||
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
from typing import Callable
|
||||
from functools import wraps
|
||||
|
||||
###########################################################
|
||||
# logging #
|
||||
###########################################################
|
||||
logFormatter = logging.Formatter(
|
||||
"%(asctime)s %(levelname)-5.5s [%(name)s] %(funcName)s:%(lineno)d: %(message)s"
|
||||
)
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.name = "DNFCalculating"
|
||||
|
||||
log_directory = "logs"
|
||||
try:
|
||||
pathlib.Path(log_directory).mkdir(parents=True, exist_ok=True)
|
||||
except PermissionError as err:
|
||||
print("创建日志目录logs失败,请确认是否限制了基础的运行权限")
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
def try_except(show_exception_info=True,
|
||||
show_last_process_result=True,
|
||||
extra_msg="",
|
||||
return_val_on_except=None) -> Callable:
|
||||
def decorator(fun):
|
||||
@wraps(fun)
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
return fun(*args, **kwargs)
|
||||
except Exception as e:
|
||||
msg = f"执行{fun.__name__}({args}, {kwargs})出错了"
|
||||
if extra_msg != "":
|
||||
msg += ", " + extra_msg
|
||||
# msg += check_some_exception(e, show_last_process_result)
|
||||
|
||||
logFunc = logger.error
|
||||
if not show_exception_info:
|
||||
logFunc = logger.debug
|
||||
logFunc(msg, exc_info=e)
|
||||
|
||||
return return_val_on_except
|
||||
|
||||
return wrapper
|
||||
|
||||
return decorator
|
||||
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# -------------------------------
|
||||
# File : minheap
|
||||
# DateTime : 2020/6/10 0010 20:58
|
||||
# Author : Chen Ji
|
||||
# Email : fzls.zju@gmail.com
|
||||
# -------------------------------
|
||||
import time
|
||||
# 用于实现排行的最小堆
|
||||
from heapq import heapify, heappush, heappushpop
|
||||
from multiprocessing import Queue
|
||||
|
||||
# 工作进程与主进程的数据传输配置
|
||||
# 批量向主进程传输计算结果(已本地预处理过)的大小
|
||||
batch_size = 100
|
||||
# 倍增阶段的临界批量大小
|
||||
batch_stage_double_upper_bound = 6400
|
||||
# 累加阶段每次增加的批量大小
|
||||
batch_linear_increase_size = 100
|
||||
# 预期数据传输队列的最大大小
|
||||
expected_qsize = 100
|
||||
|
||||
|
||||
class MinHeap:
|
||||
def __init__(self, top_n, batch_size):
|
||||
self.h = []
|
||||
self.length = top_n
|
||||
heapify(self.h)
|
||||
|
||||
self.processed_result_count = 0
|
||||
self.batch_size = batch_size
|
||||
|
||||
def add(self, element):
|
||||
if len(self.h) < self.length:
|
||||
heappush(self.h, element)
|
||||
else:
|
||||
heappushpop(self.h, element)
|
||||
|
||||
def getTop(self):
|
||||
return sorted(self.h, reverse=True)
|
||||
|
||||
def merge(self, other):
|
||||
"""
|
||||
合并另一个堆
|
||||
@type other MinHeap
|
||||
"""
|
||||
for elem in other.h:
|
||||
self.add(elem)
|
||||
self.processed_result_count += other.processed_result_count
|
||||
self.batch_size = other.batch_size
|
||||
|
||||
def reset(self):
|
||||
self.h = []
|
||||
heapify(self.h)
|
||||
|
||||
self.processed_result_count = 0
|
||||
|
||||
def update_batch_size(self):
|
||||
if self.batch_size < batch_stage_double_upper_bound:
|
||||
self.batch_size *= 2
|
||||
else:
|
||||
self.batch_size += batch_linear_increase_size
|
||||
|
||||
|
||||
class MinHeapWithQueue:
|
||||
def __init__(self, name: str, minheap: MinHeap, minheap_queue: Queue):
|
||||
self.name = name
|
||||
self.minheap = minheap
|
||||
self.minheap_queue = minheap_queue
|
||||
|
||||
self.start_time = time.time()
|
||||
|
||||
def process_results_per_second(self) -> float:
|
||||
return float(self.minheap.processed_result_count) / (
|
||||
time.time() - self.start_time + 1e-6)
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# -------------------------------
|
||||
# File : producer_consumer
|
||||
# DateTime : 2020/6/7 0007 12:04
|
||||
# Author : Chen Ji
|
||||
# Email : fzls.zju@gmail.com
|
||||
# -------------------------------
|
||||
import multiprocessing
|
||||
import traceback
|
||||
|
||||
from .log import logger
|
||||
|
||||
thread_num = multiprocessing.cpu_count()
|
||||
thread_task = 4
|
||||
|
||||
|
||||
class ProducerData:
|
||||
def __init__(self):
|
||||
self.work_queue = None # type: multiprocessing.JoinableQueue
|
||||
self.calc_index = 0
|
||||
self.produced_count = 0
|
||||
|
||||
|
||||
producer_data = ProducerData()
|
||||
|
||||
|
||||
def producer(*args):
|
||||
producer_data.work_queue.put((producer_data.calc_index, args))
|
||||
|
||||
producer_data.produced_count += 1
|
||||
# logger.info("producer put %3dth work into work queue", producer_data.produced_count)
|
||||
|
||||
|
||||
def consumer(work_queue, work_func):
|
||||
"""
|
||||
@type work_queue: multiprocessing.JoinableQueue
|
||||
"""
|
||||
current_process = multiprocessing.current_process()
|
||||
|
||||
# logger.info("work thread={} started, ready to work".format(current_process))
|
||||
current_calc_index = 0
|
||||
processed_count = 0
|
||||
continue_wrok = True
|
||||
while continue_wrok:
|
||||
try:
|
||||
calc_index, args = work_queue.get()
|
||||
if calc_index != current_calc_index:
|
||||
current_calc_index = calc_index
|
||||
processed_count = 0
|
||||
processed_count += 1
|
||||
# logger.info("work thread {} processing {}th work".format(current_process, processed_count))
|
||||
|
||||
work_func(*args)
|
||||
except BrokenPipeError as error:
|
||||
# 这个一般是程序退出的时候发生的,这种情况直接退出
|
||||
logger.warning("work thread={} BrokenPipeError quit job".format(
|
||||
current_process))
|
||||
continue_wrok = False
|
||||
except Exception as error:
|
||||
logger.error(
|
||||
"work thread {} error={} processed count={}\n detail {}".
|
||||
format(current_process, error, processed_count,
|
||||
traceback.print_exc()))
|
||||
# logger.error("work thread {} error={} processed count={}\n".format(current_process, error, processed_count))
|
||||
finally:
|
||||
work_queue.task_done()
|
||||
|
||||
# logger.info("work thread ={} stopped, processed_count={}".format(current_process, processed_count))
|
||||
@@ -0,0 +1,176 @@
|
||||
##
|
||||
##
|
||||
## 用于存储数据,及组件间通信
|
||||
# Author: Apateat
|
||||
##
|
||||
##
|
||||
from copy import copy
|
||||
import re
|
||||
|
||||
|
||||
class Store:
|
||||
def __init__(self):
|
||||
self.__states = {}
|
||||
self.last_state = None
|
||||
pass
|
||||
|
||||
# 设置值
|
||||
def set(self, key: str, value: any):
|
||||
field = self.__get_field__(key)
|
||||
field.setValue(value)
|
||||
return self
|
||||
|
||||
# 获取值
|
||||
def get(self, key: str, defaultValue: any = None):
|
||||
field = self.__get_field__(key)
|
||||
_value = field.getValue()
|
||||
if _value is None:
|
||||
_value = defaultValue
|
||||
return _value
|
||||
|
||||
def __getitem__(self, __key: str):
|
||||
return self.get(__key)
|
||||
|
||||
# 获取一个克隆值
|
||||
def clone(self, key: str, defaultValue: any = None):
|
||||
value = self.get(key, defaultValue)
|
||||
return copy(value)
|
||||
|
||||
# 主动通知变化
|
||||
def emit(self, key: str, value: any = None):
|
||||
field = self.__get_field__(key)
|
||||
field.emit(value)
|
||||
return self
|
||||
|
||||
# 找到首个不为空的值
|
||||
def first(self, *names):
|
||||
value = None
|
||||
for name in names:
|
||||
value = self.get(name)
|
||||
if value is not None:
|
||||
break
|
||||
return value
|
||||
|
||||
# 计算属性
|
||||
def compute(self, key: str, getter, setter=None):
|
||||
field = self.__get_field__(key)
|
||||
field.apply(setter)
|
||||
field.getter = getter
|
||||
return self
|
||||
|
||||
# 获取值并设置值
|
||||
def use(self, key: str, handle):
|
||||
if callable(handle):
|
||||
value = handle(self.get(key))
|
||||
self.set(key, value)
|
||||
return self
|
||||
|
||||
# 批量修改整个集合
|
||||
def convert(self, key: str, handle):
|
||||
return self.use(key, lambda value: list(map(handle, value)))
|
||||
|
||||
# 绑定对象的属性
|
||||
def bind(self, obj: object, name: str, key=None, defaultValue: any = None):
|
||||
def getter():
|
||||
return getattr(obj, name)
|
||||
|
||||
def setter(value):
|
||||
setattr(obj, name, value)
|
||||
|
||||
# 如果属性不存在 则初始化
|
||||
if hasattr(obj, name) is False or defaultValue is not None:
|
||||
setattr(obj, name, defaultValue)
|
||||
|
||||
return self.compute(key, getter, setter)
|
||||
|
||||
# 根据指定的条件删除
|
||||
def delete(self, pattern=None):
|
||||
match = lambda _: True
|
||||
if pattern is not None:
|
||||
if callable(pattern):
|
||||
match = pattern
|
||||
elif isinstance(pattern, str):
|
||||
match = lambda s: re.match(pattern, s)
|
||||
keys = list(filter(match, self.__states.keys()))
|
||||
for key in keys:
|
||||
self.__states.pop(key)
|
||||
return self
|
||||
|
||||
# 根据指定的条件导出
|
||||
def exports(self, match=lambda _: True):
|
||||
result = {}
|
||||
for key in self.__states.keys():
|
||||
if match(key):
|
||||
result[key] = self.get(key)
|
||||
return result
|
||||
|
||||
# 导入
|
||||
def imports(self, pairs: dict = {}, prefix=''):
|
||||
for key in pairs.keys():
|
||||
self.set(prefix + str(key), pairs[key])
|
||||
return self
|
||||
|
||||
# 只读属性
|
||||
def const(self, key: str, value: any):
|
||||
return self.compute(key, lambda: value)
|
||||
|
||||
# 监听值的变化
|
||||
def watch(self, key: str, valueChanged):
|
||||
return self.compute(key, None, valueChanged)
|
||||
|
||||
def linstener(self, key: str):
|
||||
def change(value):
|
||||
self.set(key, value)
|
||||
pass
|
||||
|
||||
return change
|
||||
|
||||
def __get_field__(self, key: str):
|
||||
field = None
|
||||
if re.search("\{\w+\}", key):
|
||||
key = key.format_map(self)
|
||||
if self.__states.__contains__(key):
|
||||
field = self.__states[key]
|
||||
else:
|
||||
field = Store.Field()
|
||||
self.__states[key] = field
|
||||
self.last_state = (key, field)
|
||||
return field
|
||||
|
||||
class Field:
|
||||
def __init__(self, value=None):
|
||||
self.__value = None
|
||||
self.getter = None
|
||||
self.valueChangeds = []
|
||||
self.locked = False
|
||||
self.setValue(value)
|
||||
pass
|
||||
|
||||
def setValue(self, value):
|
||||
if self.locked:
|
||||
return
|
||||
self.locked = True
|
||||
self.__value = value
|
||||
self.emit(value)
|
||||
self.locked = False
|
||||
return self
|
||||
|
||||
def getValue(self):
|
||||
if callable(self.getter):
|
||||
self.__value = self.getter()
|
||||
return self.__value
|
||||
|
||||
def emit(self, value=None):
|
||||
if value is None:
|
||||
value = self.getValue()
|
||||
for valueChanged in self.valueChangeds:
|
||||
if (callable(valueChanged)):
|
||||
valueChanged(value)
|
||||
return
|
||||
|
||||
def apply(self, valueChanged):
|
||||
if callable(valueChanged):
|
||||
self.valueChangeds.append(valueChanged)
|
||||
|
||||
|
||||
store = Store()
|
||||
@@ -0,0 +1,18 @@
|
||||
import hashlib
|
||||
import sys
|
||||
from .storex import store
|
||||
|
||||
|
||||
def get_mac_address():
|
||||
try:
|
||||
import wmi
|
||||
uniqueCode = store.get("uniqueCode")
|
||||
if uniqueCode == None:
|
||||
w = wmi.WMI()
|
||||
uniqueCode = hashlib.md5(
|
||||
w.Win32_DiskDrive()[0].SerialNumber.encode(
|
||||
encoding='UTF-8')).hexdigest()
|
||||
store.set("uniqueCode", uniqueCode)
|
||||
return uniqueCode
|
||||
except:
|
||||
return ''
|
||||
@@ -0,0 +1,185 @@
|
||||
# 使用次数统计脚本
|
||||
import os
|
||||
import platform
|
||||
import threading
|
||||
import uuid
|
||||
from functools import wraps
|
||||
from typing import Any, Callable, Tuple
|
||||
from urllib.parse import quote_plus
|
||||
from .config import currentVersion
|
||||
import sys
|
||||
|
||||
import requests
|
||||
|
||||
from .log import logger, try_except
|
||||
|
||||
# ---------------- 需要自行调整的配置 --------------------------------
|
||||
# Google Analytics 统计代码的UA,在 https://analytics.google.com/ 申请新的ua,具体流程可百度
|
||||
GA_TRACKING_ID = "UA-212229431-1"
|
||||
# ua名称,自定义
|
||||
USER_AGENT = "DNFCalculating"
|
||||
# 应用名称,自定义
|
||||
APP_NAME = "DNFCalculating"
|
||||
# 网址域名,自定义
|
||||
DOCUMENT_HOSTNAME = "dnf-calculating.com"
|
||||
# 版本号,可以使用现在的版本变量
|
||||
APP_VERSION = currentVersion
|
||||
|
||||
# ---------------- 枚举定义 --------------------------------
|
||||
GA_API_URL = "https://www.google-analytics.com/collect"
|
||||
|
||||
GA_REPORT_TYPE_EVENT = "event"
|
||||
GA_REPORT_TYPE_PAGE_VIEW = "page_view"
|
||||
|
||||
# ---------------- utils --------------------------------
|
||||
|
||||
|
||||
def async_call(cb, *args, **params):
|
||||
threading.Thread(target=cb, args=args, kwargs=params, daemon=True).start()
|
||||
|
||||
|
||||
def get_cid():
|
||||
return "{}-{}".format(platform.node(), uuid.getnode())
|
||||
|
||||
|
||||
def get_resolution() -> str:
|
||||
width, height = get_screen_size()
|
||||
return f"{width}x{height}"
|
||||
|
||||
|
||||
def get_screen_size() -> Tuple[int, int]:
|
||||
"""
|
||||
:return: 屏幕宽度和高度
|
||||
"""
|
||||
if not is_windows():
|
||||
return 1920, 1080
|
||||
|
||||
import win32api
|
||||
width, height = win32api.GetSystemMetrics(0), win32api.GetSystemMetrics(1)
|
||||
return width, height
|
||||
|
||||
|
||||
def is_windows() -> bool:
|
||||
return platform.system() == "Windows"
|
||||
|
||||
|
||||
# ---------------- 接口封装 --------------------------------
|
||||
|
||||
|
||||
def increase_counter(name: Any = "",
|
||||
ga_type=GA_REPORT_TYPE_EVENT,
|
||||
ga_category="",
|
||||
ga_misc_params: dict = None):
|
||||
if "main.py" in sys.argv[0]:
|
||||
return
|
||||
name = str(name)
|
||||
|
||||
if name == "":
|
||||
raise AssertionError("increase_counter name not set")
|
||||
|
||||
async_call(increase_counter_sync_google_analytics, name, ga_type,
|
||||
ga_category, ga_misc_params)
|
||||
|
||||
|
||||
@try_except(show_exception_info=False)
|
||||
def increase_counter_sync_google_analytics(name: str, ga_type: str,
|
||||
ga_category: str,
|
||||
ga_misc_params: dict):
|
||||
# 上报谷歌分析 v3
|
||||
logger.debug(f"report to google analytics v3, name = {name}")
|
||||
|
||||
if ga_type == GA_REPORT_TYPE_EVENT:
|
||||
if ga_category == "":
|
||||
# 如果ga_category为空,则尝试从name中解析,假设name中以/分隔的第一个部分作为ga_category
|
||||
parts = name.split('/', 1)
|
||||
if len(parts) == 2:
|
||||
ga_category, name = parts
|
||||
else:
|
||||
ga_category = "counter"
|
||||
track_event(ga_category, name, ga_misc_params)
|
||||
elif ga_type == GA_REPORT_TYPE_PAGE_VIEW:
|
||||
track_page(name, ga_misc_params)
|
||||
else:
|
||||
logger.error(f"unknow ga_type={ga_type}")
|
||||
|
||||
|
||||
# ---------------- Google Analytics 上报脚本 --------------------------------
|
||||
|
||||
# note: 查看数据地址 https://analytics.google.com/analytics/web/#/
|
||||
# note: 当发现上报失败时,可以将打印的post body复制到 https://ga-dev-tools.web.app/hit-builder/ 进行校验,看是否缺了参数,或者有参数不符合格式
|
||||
# note: 参数文档 https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
|
||||
|
||||
headers = {
|
||||
"user-agent": USER_AGENT,
|
||||
}
|
||||
|
||||
common_data = {
|
||||
'v': '1', # API Version.
|
||||
'tid': GA_TRACKING_ID, # Tracking ID / Property ID.
|
||||
'cid': get_cid(
|
||||
), # Anonymous Client Identifier. Ideally, this should be a UUID that is associated with particular user, device, or browser instance.
|
||||
'ua': USER_AGENT,
|
||||
'an': APP_NAME,
|
||||
'av': APP_VERSION,
|
||||
'ds': 'app',
|
||||
'sr': get_resolution(),
|
||||
}
|
||||
|
||||
|
||||
@try_except(show_exception_info=False)
|
||||
def track_event(category: str,
|
||||
action: str,
|
||||
label=None,
|
||||
value=0,
|
||||
ga_misc_params: dict = None):
|
||||
if ga_misc_params is None:
|
||||
ga_misc_params = {}
|
||||
|
||||
data = {
|
||||
**common_data,
|
||||
't': 'event', # Event hit type.
|
||||
'ec': category, # Event category.
|
||||
'ea': action, # Event action.
|
||||
'el': label, # Event label.
|
||||
'ev': value, # Event value, must be an integer
|
||||
**ga_misc_params, # 透传的一些额外参数
|
||||
}
|
||||
|
||||
res = requests.post(GA_API_URL, data=data, headers=headers, timeout=10)
|
||||
logger.debug(f"request body = {res.request.body}")
|
||||
|
||||
|
||||
@try_except(show_exception_info=False)
|
||||
def track_page(page: str, ga_misc_params: dict = None):
|
||||
if ga_misc_params is None:
|
||||
ga_misc_params = {}
|
||||
|
||||
page = quote_plus(page)
|
||||
data = {
|
||||
**common_data,
|
||||
't': 'pageview', # Event hit type.
|
||||
'dh': DOCUMENT_HOSTNAME, # Document hostname.
|
||||
'dp': page, # Page.
|
||||
'dt': "", # Title.
|
||||
**ga_misc_params, # 透传的一些额外参数
|
||||
}
|
||||
|
||||
res = requests.post(GA_API_URL, data=data, timeout=10)
|
||||
logger.debug(f"request body = {res.request.body}")
|
||||
|
||||
|
||||
# ---------------- test --------------------------------
|
||||
|
||||
|
||||
def test():
|
||||
increase_counter("test_event", GA_REPORT_TYPE_EVENT)
|
||||
increase_counter("test_page_view", GA_REPORT_TYPE_PAGE_VIEW)
|
||||
|
||||
# track_event("example", "test")
|
||||
track_page("/example/test_quote")
|
||||
|
||||
os.system("PAUSE")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
||||
@@ -0,0 +1,17 @@
|
||||
# 水印附近背景色-排行榜界面
|
||||
watermark_surrounding_backgroud_color_ranking = (21, 39, 65)
|
||||
# 水印附近背景色-详情界面
|
||||
watermark_surrounding_backgroud_color_detail = (27, 14, 6)
|
||||
# 水印与背景色的偏差值
|
||||
watermark_delta = -5
|
||||
# 考虑到图片压缩,水印色彩允许的上下偏移值
|
||||
watermark_tolerance_value = 1
|
||||
# 替换为显著颜色
|
||||
reverse_color = (255, 255, 255)
|
||||
|
||||
|
||||
def make_watermark_qt_color_string(
|
||||
watermark_surrounding_backgroud_color: tuple):
|
||||
color_str = ', '.join((str(rgb + watermark_delta)
|
||||
for rgb in watermark_surrounding_backgroud_color))
|
||||
return f"color:rgb({color_str})"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,139 @@
|
||||
from PublicReference.view.Page import Page
|
||||
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtGui import *
|
||||
from ..utils.constant import 标题背景, 标题字体
|
||||
|
||||
# title bar
|
||||
TITLE_BAR_HEIGHT = 25
|
||||
TITLE_BUTTON_SIZE = 25
|
||||
TITLE_LABEL_SIZE = 25
|
||||
TITLE_BUTTON_WIDTH = 25
|
||||
TITLE_BUTTON_HEIGHT = 25
|
||||
TITLE_ICON_MAG = 10
|
||||
|
||||
RES_PATH = './ResourceFiles/img/UI/'
|
||||
|
||||
TITLE_MIN_ICON = RES_PATH + "min.png"
|
||||
TITLE_CLS_ICON = RES_PATH + "exit.png"
|
||||
|
||||
WINDOW_DEFAULT_WIDTH = 800
|
||||
WINDOW_DEFAULT_HEIGHT = 480
|
||||
|
||||
|
||||
class Dialog(QMainWindow):
|
||||
def __init__(self, client: Page):
|
||||
super().__init__()
|
||||
|
||||
self.hideOnClose = False
|
||||
|
||||
icon = client.windowIcon()
|
||||
|
||||
titleBar = self.createTitleBar()
|
||||
|
||||
titleBar.setTitle(client.windowTitle())
|
||||
titleBar.setWidth(client.width())
|
||||
|
||||
titleBar.setIcon(icon.pixmap(icon.actualSize(QSize(32, 32))))
|
||||
|
||||
lay = QVBoxLayout()
|
||||
lay.addWidget(titleBar)
|
||||
lay.addWidget(client)
|
||||
lay.setStretch(1, 100)
|
||||
lay.setSpacing(0)
|
||||
lay.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
center = QWidget(self)
|
||||
center.setLayout(lay)
|
||||
|
||||
self.setCentralWidget(center)
|
||||
self.setWindowTitle(client.windowTitle())
|
||||
self.setWindowIcon(icon)
|
||||
self.setWindowFlags(Qt.FramelessWindowHint)
|
||||
|
||||
def createTitleBar(self):
|
||||
titleBar = QWidget()
|
||||
titleBar.setStyleSheet('''QWidget{background:transparent}''')
|
||||
label = QLabel(titleBar)
|
||||
label.setStyleSheet(标题背景)
|
||||
iconLabel = QLabel(titleBar)
|
||||
titleLabel = QLabel(titleBar)
|
||||
iconLabel.setText('纸飞机计算器')
|
||||
# self.titleLabel.setStyleSheet('''QLabel{color:#9f8d5c}''')
|
||||
|
||||
minButton = QPushButton(titleBar)
|
||||
# restoreButton = QPushButton(self)
|
||||
closeButton = QPushButton(titleBar)
|
||||
|
||||
minButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
||||
# self.restoreButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE);
|
||||
closeButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
||||
|
||||
iconLabel.setFixedSize(TITLE_LABEL_SIZE, TITLE_LABEL_SIZE)
|
||||
iconLabel.setStyleSheet(标题字体)
|
||||
|
||||
titleLabel.setFixedHeight(TITLE_LABEL_SIZE)
|
||||
titleLabel.setStyleSheet(标题字体)
|
||||
|
||||
iconLabel.setAlignment(Qt.AlignCenter)
|
||||
titleLabel.setAlignment(Qt.AlignCenter)
|
||||
|
||||
minButton.setIcon(QIcon(TITLE_MIN_ICON))
|
||||
closeButton.setIcon(QIcon(TITLE_CLS_ICON))
|
||||
|
||||
minButton.clicked.connect(self.showMinimized)
|
||||
# self.restoreButton.clicked.connect(self.ShowRestoreWindow)
|
||||
closeButton.clicked.connect(self.close)
|
||||
|
||||
lay = QHBoxLayout(titleBar)
|
||||
|
||||
lay.setSpacing(0)
|
||||
lay.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
lay.addWidget(iconLabel)
|
||||
lay.addWidget(titleLabel)
|
||||
lay.addWidget(minButton)
|
||||
# self.lay.addWidget(self.restoreButton)
|
||||
lay.addWidget(closeButton)
|
||||
|
||||
titleBar.setLayout(lay)
|
||||
|
||||
def setTitle(text):
|
||||
titleLabel.setText(text)
|
||||
|
||||
def setTitleStyle(style):
|
||||
titleLabel.setStyleSheet(style)
|
||||
|
||||
def setIcon(icon):
|
||||
iconLabel.setPixmap(
|
||||
icon.scaled(iconLabel.size() -
|
||||
QSize(TITLE_ICON_MAG, TITLE_ICON_MAG)))
|
||||
|
||||
def setWidth(width):
|
||||
label.resize(width, TITLE_BAR_HEIGHT)
|
||||
|
||||
titleBar.setTitle = setTitle
|
||||
titleBar.setTitleStyle = setTitleStyle
|
||||
titleBar.setIcon = setIcon
|
||||
titleBar.setWidth = setWidth
|
||||
|
||||
return titleBar
|
||||
|
||||
def setHideOnClose(self, hideOnClose):
|
||||
self.hideOnClose = hideOnClose
|
||||
|
||||
def showEvent(self, event):
|
||||
parent = self.parent()
|
||||
if parent is not None:
|
||||
rect = parent.geometry()
|
||||
x = rect.x() + rect.width() / 2 - self.width() / 2
|
||||
y = rect.y() + rect.height() / 2 - self.height() / 2
|
||||
self.move(int(x), int(y))
|
||||
return super().showEvent(event)
|
||||
|
||||
def closeEvent(self, event):
|
||||
if (self.hideOnClose):
|
||||
self.hide()
|
||||
return
|
||||
return super().closeEvent(event)
|
||||
@@ -0,0 +1,36 @@
|
||||
from .Page import Page
|
||||
from .Dialog import *
|
||||
from PyQt5.QtCore import *
|
||||
|
||||
|
||||
class DialogRegister:
|
||||
def __init__(self):
|
||||
self.dialogs = {}
|
||||
|
||||
def showDialog(self, name: str, client: Page, parent=None):
|
||||
if self.dialogs.__contains__(name) == False:
|
||||
if callable(client): # 如果传入函数 可以懒加载
|
||||
client = client()
|
||||
dialog = Dialog(client)
|
||||
client.setWindow(dialog)
|
||||
dialog.setHideOnClose(True)
|
||||
dialog.setWindowModality(Qt.WindowModality.WindowModal)
|
||||
if (parent is not None):
|
||||
dialog.setParent(parent)
|
||||
self.dialogs[name] = dialog
|
||||
self.dialogs[name].show()
|
||||
|
||||
def dispose(self):
|
||||
for name in self.dialogs.keys():
|
||||
dialog: Dialog = self.dialogs[name]
|
||||
dialog.setHideOnClose(False)
|
||||
dialog.close()
|
||||
self.dialogs.clear()
|
||||
|
||||
def close(self, name: str):
|
||||
if self.dialogs.__contains__(name):
|
||||
dialog = self.dialogs[name]
|
||||
dialog.close()
|
||||
|
||||
|
||||
DefaultDialogRegister = DialogRegister()
|
||||
@@ -0,0 +1,50 @@
|
||||
import sys
|
||||
from .TitleBar import *
|
||||
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
def __init__(self, client):
|
||||
super().__init__()
|
||||
self.InitializeWindow(client)
|
||||
|
||||
def InitializeWindow(self, client):
|
||||
self.setWindowTitle(client.windowTitle())
|
||||
self.icon = client.windowIcon()
|
||||
self.setWindowIcon(self.icon)
|
||||
self.setWindowFlags(Qt.FramelessWindowHint)
|
||||
self.InitializeViews(client)
|
||||
|
||||
def InitializeViews(self, client):
|
||||
self.client = client
|
||||
self.titleBar = TitleBar(self)
|
||||
self.center = QWidget(self)
|
||||
self.setCentralWidget(self.center)
|
||||
|
||||
self.lay = QVBoxLayout()
|
||||
self.center.setLayout(self.lay)
|
||||
|
||||
self.lay.addWidget(self.titleBar)
|
||||
self.lay.addWidget(self.client)
|
||||
self.lay.setStretch(1, 100)
|
||||
self.lay.setSpacing(0)
|
||||
self.lay.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.titleBar.SetTitle(client.windowTitle())
|
||||
self.titleBar.SetWidth(client.width())
|
||||
|
||||
self.titleBar.SetIcon(
|
||||
self.icon.pixmap(self.icon.actualSize(QSize(32, 32))))
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.client.close()
|
||||
super().close()
|
||||
|
||||
# def LoadStyleFromQss(self, f):
|
||||
# file = open(f)
|
||||
# lines = file.readlines()
|
||||
# file.close()
|
||||
# res = ''
|
||||
# for line in lines:
|
||||
# res += line
|
||||
|
||||
# return res
|
||||
@@ -0,0 +1,24 @@
|
||||
from PyQt5.QtGui import *
|
||||
from PublicReference.common import *
|
||||
|
||||
|
||||
class ConfirmButton(QPushButton):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.setEnabled(False)
|
||||
# self.setText("test")
|
||||
self.time = QTimer(self)
|
||||
self.count = 10
|
||||
self.time.setInterval(1000)
|
||||
self.time.timeout.connect(self.Refresh)
|
||||
self.time.start()
|
||||
|
||||
def Refresh(self):
|
||||
# print(self.count)
|
||||
if self.count > 0:
|
||||
self.setText("(" + str(self.count) + "s) 确认")
|
||||
self.count -= 1
|
||||
else:
|
||||
self.time.stop()
|
||||
self.setEnabled(True)
|
||||
self.setText("确认")
|
||||
@@ -0,0 +1,21 @@
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtGui import *
|
||||
|
||||
|
||||
class Page(QWidget):
|
||||
def setName(self, name):
|
||||
self.__name = name
|
||||
|
||||
def name(self):
|
||||
return self.__name
|
||||
|
||||
def setWindow(self, window: QWindow):
|
||||
self.__window = window
|
||||
|
||||
def window(self):
|
||||
return self.__window
|
||||
|
||||
def closeWindow(self):
|
||||
if self.__window is not None:
|
||||
self.__window.close()
|
||||
@@ -0,0 +1,132 @@
|
||||
import sys
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtGui import *
|
||||
from PublicReference.utils.constant import 标题背景, 标题字体
|
||||
|
||||
RES_PATH = './ResourceFiles/img/UI/'
|
||||
|
||||
# title bar
|
||||
TITLE_BAR_HEIGHT = 25
|
||||
TITLE_BUTTON_SIZE = 25
|
||||
TITLE_LABEL_SIZE = 25
|
||||
TITLE_BUTTON_WIDTH = 25
|
||||
TITLE_BUTTON_HEIGHT = 25
|
||||
TITLE_ICON_MAG = 10
|
||||
|
||||
TITLE_MIN_ICON = RES_PATH + "min.png"
|
||||
TITLE_CLS_ICON = RES_PATH + "exit.png"
|
||||
|
||||
WINDOW_DEFAULT_WIDTH = 800
|
||||
WINDOW_DEFAULT_HEIGHT = 480
|
||||
|
||||
|
||||
class TitleBar(QWidget):
|
||||
def __init__(self, parent):
|
||||
super(TitleBar, self).__init__()
|
||||
self.win = parent
|
||||
self.InitializeWindow()
|
||||
|
||||
def InitializeWindow(self):
|
||||
self.isPressed = False
|
||||
self.setFixedHeight(TITLE_BAR_HEIGHT)
|
||||
self.InitializeViews()
|
||||
pass
|
||||
|
||||
def InitializeViews(self):
|
||||
|
||||
self.setStyleSheet('''QWidget{background:transparent}''')
|
||||
self.label = QLabel(self)
|
||||
self.label.setStyleSheet(标题背景)
|
||||
self.iconLabel = QLabel(self)
|
||||
self.titleLabel = QLabel(self)
|
||||
self.iconLabel.setText('纸飞机计算器')
|
||||
# self.titleLabel.setStyleSheet('''QLabel{color:#9f8d5c}''')
|
||||
|
||||
self.minButton = QPushButton(self)
|
||||
self.restoreButton = QPushButton(self)
|
||||
self.closeButton = QPushButton(self)
|
||||
|
||||
self.minButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
||||
# self.restoreButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE);
|
||||
self.closeButton.setFixedSize(TITLE_BUTTON_SIZE, TITLE_BUTTON_SIZE)
|
||||
|
||||
self.iconLabel.setFixedSize(TITLE_LABEL_SIZE, TITLE_LABEL_SIZE)
|
||||
self.titleLabel.setFixedHeight(TITLE_LABEL_SIZE)
|
||||
|
||||
self.iconLabel.setAlignment(Qt.AlignCenter)
|
||||
self.titleLabel.setAlignment(Qt.AlignCenter)
|
||||
|
||||
self.minButton.setIcon(QIcon(TITLE_MIN_ICON))
|
||||
self.closeButton.setIcon(QIcon(TITLE_CLS_ICON))
|
||||
|
||||
self.minButton.clicked.connect(self.ShowMininizedWindow)
|
||||
# self.restoreButton.clicked.connect(self.ShowRestoreWindow)
|
||||
self.closeButton.clicked.connect(self.CloseWindow)
|
||||
|
||||
self.lay = QHBoxLayout(self)
|
||||
self.setLayout(self.lay)
|
||||
|
||||
self.lay.setSpacing(0)
|
||||
self.lay.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.lay.addWidget(self.iconLabel)
|
||||
self.iconLabel.setStyleSheet(标题字体)
|
||||
self.lay.addWidget(self.titleLabel)
|
||||
self.titleLabel.setStyleSheet(标题字体)
|
||||
self.lay.addWidget(self.minButton)
|
||||
# self.lay.addWidget(self.restoreButton)
|
||||
self.lay.addWidget(self.closeButton)
|
||||
|
||||
def ShowMininizedWindow(self):
|
||||
self.win.showMinimized()
|
||||
|
||||
def SetWidth(self, width):
|
||||
self.label.resize(width, TITLE_BAR_HEIGHT)
|
||||
|
||||
def ShowMaximizedWindow(self):
|
||||
self.win.showMaximized()
|
||||
|
||||
def ShowRestoreWindow(self):
|
||||
if self.win.isMaximized():
|
||||
self.win.showNormal()
|
||||
else:
|
||||
self.win.showMaximized()
|
||||
|
||||
def CloseWindow(self):
|
||||
self.win.close()
|
||||
|
||||
def SetTitle(self, str):
|
||||
self.titleLabel.setText(str)
|
||||
|
||||
def SetTitleStyle(self, str):
|
||||
self.titleLabel.setStyleSheet(str)
|
||||
|
||||
def SetIcon(self, pix):
|
||||
self.iconLabel.setPixmap(
|
||||
pix.scaled(self.iconLabel.size() -
|
||||
QSize(TITLE_ICON_MAG, TITLE_ICON_MAG)))
|
||||
|
||||
# def mouseDoubleClickEvent(self, event):
|
||||
# self.ShowRestoreWindow()
|
||||
# return QWidget().mouseDoubleClickEvent(event)
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
self.isPressed = True
|
||||
self.startPos = event.globalPos()
|
||||
return QWidget().mousePressEvent(event)
|
||||
|
||||
def mouseReleaseEvent(self, event):
|
||||
self.isPressed = False
|
||||
return QWidget().mouseReleaseEvent(event)
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
if self.isPressed:
|
||||
if self.win.isMaximized:
|
||||
self.win.showNormal()
|
||||
|
||||
movePos = event.globalPos() - self.startPos
|
||||
self.startPos = event.globalPos()
|
||||
self.win.move(self.win.pos() + movePos)
|
||||
|
||||
return QWidget().mouseMoveEvent(event)
|
||||
Reference in New Issue
Block a user